001package de.deepamehta.core.impl;
002
003import de.deepamehta.core.Association;
004import de.deepamehta.core.AssociationType;
005import de.deepamehta.core.Topic;
006import de.deepamehta.core.TopicType;
007import de.deepamehta.core.model.AssociationModel;
008import de.deepamehta.core.model.TopicModel;
009import de.deepamehta.core.service.DeepaMehtaEvent;
010import de.deepamehta.core.service.EventListener;
011import de.deepamehta.core.service.event.*;
012
013// ### TODO: hide Jersey internals. Move to JAX-RS 2.0.
014import com.sun.jersey.spi.container.ContainerRequest;
015import com.sun.jersey.spi.container.ContainerResponse;
016
017import javax.servlet.http.HttpServletRequest;
018
019
020
021/**
022 * Events fired by the DeepaMehta core service.
023 * Plugins can listen to these events by implementing the respective listener interfaces.
024 *
025 * @see de.deepamehta.core.service.event
026 */
027class CoreEvent {
028
029    static DeepaMehtaEvent PRE_GET_TOPIC = new DeepaMehtaEvent(PreGetTopicListener.class) {
030        @Override
031        public void deliver(EventListener listener, Object... params) {
032            ((PreGetTopicListener) listener).preGetTopic(
033                (Long) params[0]
034            );
035        }
036    };
037
038    static DeepaMehtaEvent PRE_GET_ASSOCIATION = new DeepaMehtaEvent(PreGetAssociationListener.class) {
039        @Override
040        public void deliver(EventListener listener, Object... params) {
041            ((PreGetAssociationListener) listener).preGetAssociation(
042                (Long) params[0]
043            );
044        }
045    };
046
047    // ---
048
049    static DeepaMehtaEvent PRE_CREATE_TOPIC = new DeepaMehtaEvent(PreCreateTopicListener.class) {
050        @Override
051        public void deliver(EventListener listener, Object... params) {
052            ((PreCreateTopicListener) listener).preCreateTopic(
053                (TopicModel) params[0]
054            );
055        }
056    };
057
058    static DeepaMehtaEvent PRE_CREATE_ASSOCIATION = new DeepaMehtaEvent(PreCreateAssociationListener.class) {
059        @Override
060        public void deliver(EventListener listener, Object... params) {
061            ((PreCreateAssociationListener) listener).preCreateAssociation(
062                (AssociationModel) params[0]
063            );
064        }
065    };
066
067    // ---
068
069    static DeepaMehtaEvent POST_CREATE_TOPIC = new DeepaMehtaEvent(PostCreateTopicListener.class) {
070        @Override
071        public void deliver(EventListener listener, Object... params) {
072            ((PostCreateTopicListener) listener).postCreateTopic(
073                (Topic) params[0]
074            );
075        }
076    };
077
078    static DeepaMehtaEvent POST_CREATE_ASSOCIATION = new DeepaMehtaEvent(PostCreateAssociationListener.class) {
079        @Override
080        public void deliver(EventListener listener, Object... params) {
081            ((PostCreateAssociationListener) listener).postCreateAssociation(
082                (Association) params[0]
083            );
084        }
085    };
086
087    // ---
088
089    static DeepaMehtaEvent PRE_UPDATE_TOPIC = new DeepaMehtaEvent(PreUpdateTopicListener.class) {
090        @Override
091        public void deliver(EventListener listener, Object... params) {
092            ((PreUpdateTopicListener) listener).preUpdateTopic(
093                (Topic) params[0], (TopicModel) params[1]
094            );
095        }
096    };
097
098    static DeepaMehtaEvent PRE_UPDATE_ASSOCIATION = new DeepaMehtaEvent(PreUpdateAssociationListener.class) {
099        @Override
100        public void deliver(EventListener listener, Object... params) {
101            ((PreUpdateAssociationListener) listener).preUpdateAssociation(
102                (Association) params[0], (AssociationModel) params[1]
103            );
104        }
105    };
106
107    // ---
108
109    static DeepaMehtaEvent POST_UPDATE_TOPIC = new DeepaMehtaEvent(PostUpdateTopicListener.class) {
110        @Override
111        public void deliver(EventListener listener, Object... params) {
112            ((PostUpdateTopicListener) listener).postUpdateTopic(
113                (Topic) params[0], (TopicModel) params[1], (TopicModel) params[2]
114            );
115        }
116    };
117
118    static DeepaMehtaEvent POST_UPDATE_ASSOCIATION = new DeepaMehtaEvent(PostUpdateAssociationListener.class) {
119        @Override
120        public void deliver(EventListener listener, Object... params) {
121            ((PostUpdateAssociationListener) listener).postUpdateAssociation(
122                (Association) params[0], (AssociationModel) params[1]
123            );
124        }
125    };
126
127    // ---
128
129    static DeepaMehtaEvent POST_UPDATE_TOPIC_REQUEST = new DeepaMehtaEvent(PostUpdateTopicRequestListener.class) {
130        @Override
131        public void deliver(EventListener listener, Object... params) {
132            ((PostUpdateTopicRequestListener) listener).postUpdateTopicRequest(
133                (Topic) params[0]
134            );
135        }
136    };
137
138    // Note: a corresponding POST_UPDATE_ASSOCIATION_REQUEST event is not necessary.
139    // It would be equivalent to POST_UPDATE_ASSOCIATION.
140    // Per request exactly one association is updated. Its childs are topics (never associations).
141
142    // ---
143
144    static DeepaMehtaEvent PRE_DELETE_TOPIC = new DeepaMehtaEvent(PreDeleteTopicListener.class) {
145        @Override
146        public void deliver(EventListener listener, Object... params) {
147            ((PreDeleteTopicListener) listener).preDeleteTopic(
148                (Topic) params[0]
149            );
150        }
151    };
152
153    static DeepaMehtaEvent PRE_DELETE_ASSOCIATION = new DeepaMehtaEvent(PreDeleteAssociationListener.class) {
154        @Override
155        public void deliver(EventListener listener, Object... params) {
156            ((PreDeleteAssociationListener) listener).preDeleteAssociation(
157                (Association) params[0]
158            );
159        }
160    };
161
162    // ---
163
164    static DeepaMehtaEvent POST_DELETE_TOPIC = new DeepaMehtaEvent(PostDeleteTopicListener.class) {
165        @Override
166        public void deliver(EventListener listener, Object... params) {
167            ((PostDeleteTopicListener) listener).postDeleteTopic(
168                (Topic) params[0]
169            );
170        }
171    };
172
173    static DeepaMehtaEvent POST_DELETE_ASSOCIATION = new DeepaMehtaEvent(PostDeleteAssociationListener.class) {
174        @Override
175        public void deliver(EventListener listener, Object... params) {
176            ((PostDeleteAssociationListener) listener).postDeleteAssociation(
177                (Association) params[0]
178            );
179        }
180    };
181
182    // ---
183
184    static DeepaMehtaEvent ALL_PLUGINS_ACTIVE = new DeepaMehtaEvent(AllPluginsActiveListener.class) {
185        @Override
186        public void deliver(EventListener listener, Object... params) {
187            ((AllPluginsActiveListener) listener).allPluginsActive();
188        }
189    };
190
191    // ---
192
193    // This event has a double nature:
194    //   a) it is fired regularily (see EmbeddedService.createTopicType()).
195    //   b) it is fired locally (see PluginImpl.introduceTopicTypesToPlugin()).
196    static DeepaMehtaEvent INTRODUCE_TOPIC_TYPE = new DeepaMehtaEvent(IntroduceTopicTypeListener.class) {
197        @Override
198        public void deliver(EventListener listener, Object... params) {
199            ((IntroduceTopicTypeListener) listener).introduceTopicType(
200                (TopicType) params[0]
201            );
202        }
203    };
204
205    // This event has a double nature:
206    //   a) it is fired regularily (see EmbeddedService.createAssociationType()).
207    //   b) it is fired locally (see PluginImpl.introduceAssociationTypesToPlugin()).
208    static DeepaMehtaEvent INTRODUCE_ASSOCIATION_TYPE = new DeepaMehtaEvent(IntroduceAssociationTypeListener.class) {
209        @Override
210        public void deliver(EventListener listener, Object... params) {
211            ((IntroduceAssociationTypeListener) listener).introduceAssociationType(
212                (AssociationType) params[0]
213            );
214        }
215    };
216
217
218
219    // === WebPublishing Events ===
220
221    static DeepaMehtaEvent SERVICE_REQUEST_FILTER = new DeepaMehtaEvent(ServiceRequestFilterListener.class) {
222        @Override
223        public void deliver(EventListener listener, Object... params) {
224            ((ServiceRequestFilterListener) listener).serviceRequestFilter(
225                (ContainerRequest) params[0]
226            );
227        }
228    };
229
230    static DeepaMehtaEvent SERVICE_RESPONSE_FILTER = new DeepaMehtaEvent(ServiceResponseFilterListener.class) {
231        @Override
232        public void deliver(EventListener listener, Object... params) {
233            ((ServiceResponseFilterListener) listener).serviceResponseFilter(
234                (ContainerResponse) params[0]
235            );
236        }
237    };
238
239    static DeepaMehtaEvent RESOURCE_REQUEST_FILTER = new DeepaMehtaEvent(ResourceRequestFilterListener.class) {
240        @Override
241        public void deliver(EventListener listener, Object... params) {
242            ((ResourceRequestFilterListener) listener).resourceRequestFilter(
243                (HttpServletRequest) params[0]
244            );
245        }
246    };
247
248    // ---
249
250    static DeepaMehtaEvent PRE_SEND_TOPIC = new DeepaMehtaEvent(PreSendTopicListener.class) {
251        @Override
252        public void deliver(EventListener listener, Object... params) {
253            ((PreSendTopicListener) listener).preSendTopic(
254                (Topic) params[0]
255            );
256        }
257    };
258
259    static DeepaMehtaEvent PRE_SEND_ASSOCIATION = new DeepaMehtaEvent(PreSendAssociationListener.class) {
260        @Override
261        public void deliver(EventListener listener, Object... params) {
262            ((PreSendAssociationListener) listener).preSendAssociation(
263                (Association) params[0]
264            );
265        }
266    };
267
268    static DeepaMehtaEvent PRE_SEND_TOPIC_TYPE = new DeepaMehtaEvent(PreSendTopicTypeListener.class) {
269        @Override
270        public void deliver(EventListener listener, Object... params) {
271            ((PreSendTopicTypeListener) listener).preSendTopicType(
272                (TopicType) params[0]
273            );
274        }
275    };
276
277    static DeepaMehtaEvent PRE_SEND_ASSOCIATION_TYPE = new DeepaMehtaEvent(PreSendAssociationTypeListener.class) {
278        @Override
279        public void deliver(EventListener listener, Object... params) {
280            ((PreSendAssociationTypeListener) listener).preSendAssociationType(
281                (AssociationType) params[0]
282            );
283        }
284    };
285}