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