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