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.konveyor.annotations.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 }