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  	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 }