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 public void initialize() throws IOException {
91 bridiElementSystemInitialization.apply();
92 }
93
94 @Override
95 public void registerListener(final BridiStoreChangeListener listener) {
96 bridiStoreChangeListeners.listeners.add(listener);
97 }
98
99 @Override
100 public void unregisterListener(final BridiStoreChangeListener listener) {
101 bridiStoreChangeListeners.listeners.remove(listener);
102 }
103
104 @Override
105 public Stream<Bridi> query(final String query) {
106 return queryProcessor.apply(query);
107 }
108
109 @Override
110 public Stream<Bridi> create(final String query) {
111 return createBridisFromQuery.apply(query);
112 }
113
114 @Override
115 public Set<Bridi> save(final Collection<Bridi> values) {
116 return saveBridi.apply(values);
117 }
118
119 @Override
120 public Stream<Bridi> findAllByRepresentation(final String representation) {
121 return findAllByRepresentation.apply(representation);
122 }
123
124 @Override
125 public Optional<Bridi> findById(final String id) {
126 return findBridiById.apply(id);
127 }
128
129 @Override
130 public Sumti createSumti(final String id, final String representation) {
131 return createSumti.apply(id, representation);
132 }
133
134 public BridiReferenceRepository getBridiReferenceRepository() {
135 return bridiReferenceRepository;
136 }
137
138 @Override
139 public Stream<Bridi> createFromdefinitions(final String definitionName) {
140 return createBridisFromDefinition.apply(definitionName);
141 }
142
143 @Override
144 public BridiElement root() {
145 return bridiElementFactory.apply(ElementConstants.ROOT_ID);
146 }
147
148 @Override
149 public BridiElement byId(final String id) {
150 return bridiElementFactory.apply(id);
151 }
152
153 public ProblemRepository getProblems() {
154 return problemRepository;
155 }
156 }