View Javadoc
1   package io.github.magwas.inez;
2   
3   import java.io.IOException;
4   import java.util.Collection;
5   import java.util.Optional;
6   import java.util.Set;
7   import java.util.stream.Stream;
8   
9   import org.springframework.beans.factory.annotation.Autowired;
10  import org.springframework.stereotype.Component;
11  
12  import io.github.magwas.inez.element.BridiElement;
13  import io.github.magwas.inez.element.BridiElementFactory;
14  import io.github.magwas.inez.element.BridiElementSystemInitializationService;
15  import io.github.magwas.inez.element.ElementConstants;
16  import io.github.magwas.inez.query.CreateBridisFromDefinitionService;
17  import io.github.magwas.inez.query.CreateBridisFromQueryService;
18  import io.github.magwas.inez.query.QueryProcessorService;
19  import io.github.magwas.inez.storage.BridiStoreChangeListenersService;
20  import io.github.magwas.inez.storage.CreateBridiFromSumtiService;
21  import io.github.magwas.inez.storage.CreateSumtiService;
22  import io.github.magwas.inez.storage.DeleteBridiService;
23  import io.github.magwas.inez.storage.FindAllByRepresentationService;
24  import io.github.magwas.inez.storage.FindAllIdByRepresentationService;
25  import io.github.magwas.inez.storage.FindBridiByIdService;
26  import io.github.magwas.inez.storage.GetBridiIdBySelbriAndSumtiIdsService;
27  import io.github.magwas.inez.storage.SaveBridiService;
28  import io.github.magwas.inez.storage.model.Sumti;
29  import io.github.magwas.inez.storage.repository.BridiReferenceRepository;
30  import io.github.magwas.inez.storage.repository.BridiStoreHistoryRepository;
31  import io.github.magwas.inez.storage.repository.ProblemRepository;
32  import io.github.magwas.kodekonveyorannotations.Delegate;
33  
34  @Component
35  @Delegate
36  public final class InezImpl implements Inez {
37  	@Autowired
38  	BridiStoreChangeListenersService bridiStoreChangeListeners;
39  
40  	@Autowired
41  	QueryProcessorService queryProcessor;
42  
43  	@Autowired
44  	BridiStoreHistoryRepository bridiStoreHistoryRepository;
45  
46  	@Autowired
47  	BridiReferenceRepository bridiReferenceRepository;
48  
49  	@Autowired
50  	CreateBridiFromSumtiService createBridiFromSumti;
51  
52  	@Autowired
53  	SaveBridiService saveBridi;
54  
55  	@Autowired
56  	DeleteBridiService deleteBridi;
57  
58  	@Autowired
59  	FindBridiByIdService findBridiById;
60  
61  	@Autowired
62  	GetBridiIdBySelbriAndSumtiIdsService getBridiIdBySelbriAndSumtiIds;
63  
64  	@Autowired
65  	FindAllIdByRepresentationService findAllIdByRepresentation;
66  
67  	@Autowired
68  	FindAllByRepresentationService findAllByRepresentation;
69  
70  	@Autowired
71  	BridiElementSystemInitializationService bridiElementSystemInitialization;
72  
73  	@Autowired
74  	BridiElementFactory bridiElementFactory;
75  
76  	@Autowired
77  	CreateBridisFromQueryService createBridisFromQuery;
78  
79  	@Autowired
80  	CreateSumtiService createSumti;
81  
82  	@Autowired
83  	ProblemRepository problemRepository;
84  
85  	@Autowired
86  	CreateBridisFromDefinitionService createBridisFromDefinition;
87  
88  	private InezImpl() {}
89  
90  	@Override
91  	public void initialize() throws IOException {
92  		bridiElementSystemInitialization.apply();
93  	}
94  
95  	@Override
96  	public void registerListener(final BridiStoreChangeListener listener) {
97  		bridiStoreChangeListeners.listeners.add(listener);
98  	}
99  
100 	@Override
101 	public void unregisterListener(final BridiStoreChangeListener listener) {
102 		bridiStoreChangeListeners.listeners.remove(listener);
103 	}
104 
105 	@Override
106 	public Stream<Bridi> query(final String query) {
107 		return queryProcessor.apply(query);
108 	}
109 
110 	@Override
111 	public Stream<Bridi> create(final String query) {
112 		return createBridisFromQuery.apply(query);
113 	}
114 
115 	@Override
116 	public Set<Bridi> save(final Collection<Bridi> values) {
117 		return saveBridi.apply(values);
118 	}
119 
120 	@Override
121 	public Stream<Bridi> findAllByRepresentation(final String representation) {
122 		return findAllByRepresentation.apply(representation);
123 	}
124 
125 	@Override
126 	public Optional<Bridi> findById(final String id) {
127 		return findBridiById.apply(id);
128 	}
129 
130 	@Override
131 	public Sumti createSumti(final String id, final String representation) {
132 		return createSumti.apply(id, representation);
133 	}
134 
135 	public BridiReferenceRepository getBridiReferenceRepository() {
136 		return bridiReferenceRepository;
137 	}
138 
139 	@Override
140 	public Stream<Bridi> createFromdefinitions(final String definitionName) {
141 		return createBridisFromDefinition.apply(definitionName);
142 	}
143 
144 	@Override
145 	public BridiElement root() {
146 		return bridiElementFactory.apply(ElementConstants.ROOT_ID);
147 	}
148 
149 	@Override
150 	public BridiElement byId(final String id) {
151 		return bridiElementFactory.apply(id);
152 	}
153 
154 	public ProblemRepository getProblems() {
155 		return problemRepository;
156 	}
157 }