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.BridiStoreHistoryRepository;
21 import io.github.magwas.inez.storage.CreateBridiFromSumtiService;
22 import io.github.magwas.inez.storage.CreateSumtiService;
23 import io.github.magwas.inez.storage.DeleteBridiService;
24 import io.github.magwas.inez.storage.FindAllByRepresentationService;
25 import io.github.magwas.inez.storage.FindAllIdByRepresentationService;
26 import io.github.magwas.inez.storage.FindBridiByIdService;
27 import io.github.magwas.inez.storage.GetBridiIdBySelbriAndSumtiIdsService;
28 import io.github.magwas.inez.storage.SaveBridiService;
29 import io.github.magwas.inez.storage.model.Sumti;
30 import io.github.magwas.inez.storage.repository.BridiReferenceRepository;
31 import io.github.magwas.kodekonveyorannotations.Delegate;
32
33 @Component
34 @Delegate
35 public class InezImpl implements Inez {
36 @Autowired
37 BridiStoreChangeListenersService bridiStoreChangeListeners;
38 @Autowired
39 QueryProcessorService queryProcessor;
40 @Autowired
41 BridiStoreHistoryRepository bridiStoreHistoryRepository;
42 @Autowired
43 BridiReferenceRepository bridiReferenceRepository;
44 @Autowired
45 CreateBridiFromSumtiService createBridiFromSumti;
46 @Autowired
47 SaveBridiService saveBridi;
48 @Autowired
49 DeleteBridiService deleteBridi;
50 @Autowired
51 FindBridiByIdService findBridiById;
52 @Autowired
53 GetBridiIdBySelbriAndSumtiIdsService getBridiIdBySelbriAndSumtiIds;
54 @Autowired
55 FindAllIdByRepresentationService findAllIdByRepresentation;
56 @Autowired
57 FindAllByRepresentationService findAllByRepresentation;
58 @Autowired
59 BridiElementSystemInitializationService bridiElementSystemInitialization;
60 @Autowired
61 BridiElementFactory bridiElementFactory;
62 @Autowired
63 CreateBridisFromQueryService createBridisFromQuery;
64 @Autowired
65 CreateSumtiService createSumti;
66
67 private InezImpl() {
68 }
69
70 public void initialize() throws IOException {
71 bridiElementSystemInitialization.apply();
72 }
73
74 public void registerListener(BridiStoreChangeListener listener) {
75 bridiStoreChangeListeners.listeners.add(listener);
76 }
77
78 public void unregisterListener(BridiStoreChangeListener listener) {
79 bridiStoreChangeListeners.listeners.remove(listener);
80 }
81
82 public Stream<Bridi> query(String query) {
83 return queryProcessor.apply(query);
84 }
85
86 public Stream<Bridi> create(String query) {
87 return createBridisFromQuery.apply(query);
88 }
89
90 public Set<Bridi> save(Collection<Bridi> values) {
91 return saveBridi.apply(values);
92 }
93
94 @Override
95 public Stream<Bridi> findAllByRepresentation(String representation) {
96 return findAllByRepresentation.apply(representation);
97 }
98
99 @Override
100 public Optional<Bridi> findById(String id) {
101 return findBridiById.apply(id);
102 }
103
104 @Override
105 public Sumti createSumti(String id, String representation) {
106 return createSumti.apply(id, representation);
107 }
108
109 public BridiReferenceRepository getBridiReferenceRepository() {
110 return bridiReferenceRepository;
111 }
112
113 @Autowired
114 CreateBridisFromDefinitionService createBridisFromDefinition;
115
116 @Override
117 public Stream<Bridi> createFromdefinitions(String definitionName) {
118 return createBridisFromDefinition.apply(definitionName);
119 }
120
121 public BridiElement root() {
122 return bridiElementFactory.apply(ElementConstants.ROOT_ID);
123 }
124
125 public BridiElement byId(String id) {
126 return bridiElementFactory.apply(id);
127 }
128
129 }