001    package de.deepamehta.core.impl;
002    
003    import de.deepamehta.core.Association;
004    import de.deepamehta.core.AssociationType;
005    import de.deepamehta.core.Topic;
006    import de.deepamehta.core.TopicType;
007    import de.deepamehta.core.model.AssociationModel;
008    import de.deepamehta.core.model.TopicModel;
009    import de.deepamehta.core.service.DeepaMehtaEvent;
010    import de.deepamehta.core.service.EventListener;
011    import de.deepamehta.core.service.event.*;
012    
013    // ### TODO: hide Jersey internals. Move to JAX-RS 2.0.
014    import com.sun.jersey.spi.container.ContainerRequest;
015    import com.sun.jersey.spi.container.ContainerResponse;
016    
017    import 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     */
027    class 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 SERVICE_REQUEST_FILTER = new DeepaMehtaEvent(ServiceRequestFilterListener.class) {
185            @Override
186            public void deliver(EventListener listener, Object... params) {
187                ((ServiceRequestFilterListener) listener).serviceRequestFilter(
188                    (ContainerRequest) params[0]
189                );
190            }
191        };
192    
193        static DeepaMehtaEvent SERVICE_RESPONSE_FILTER = new DeepaMehtaEvent(ServiceResponseFilterListener.class) {
194            @Override
195            public void deliver(EventListener listener, Object... params) {
196                ((ServiceResponseFilterListener) listener).serviceResponseFilter(
197                    (ContainerResponse) params[0]
198                );
199            }
200        };
201    
202        static DeepaMehtaEvent RESOURCE_REQUEST_FILTER = new DeepaMehtaEvent(ResourceRequestFilterListener.class) {
203            @Override
204            public void deliver(EventListener listener, Object... params) {
205                ((ResourceRequestFilterListener) listener).resourceRequestFilter(
206                    (HttpServletRequest) params[0]
207                );
208            }
209        };
210    
211        // ---
212    
213        static DeepaMehtaEvent PRE_SEND_TOPIC = new DeepaMehtaEvent(PreSendTopicListener.class) {
214            @Override
215            public void deliver(EventListener listener, Object... params) {
216                ((PreSendTopicListener) listener).preSendTopic(
217                    (Topic) params[0]
218                );
219            }
220        };
221    
222        static DeepaMehtaEvent PRE_SEND_ASSOCIATION = new DeepaMehtaEvent(PreSendAssociationListener.class) {
223            @Override
224            public void deliver(EventListener listener, Object... params) {
225                ((PreSendAssociationListener) listener).preSendAssociation(
226                    (Association) params[0]
227                );
228            }
229        };
230    
231        static DeepaMehtaEvent PRE_SEND_TOPIC_TYPE = new DeepaMehtaEvent(PreSendTopicTypeListener.class) {
232            @Override
233            public void deliver(EventListener listener, Object... params) {
234                ((PreSendTopicTypeListener) listener).preSendTopicType(
235                    (TopicType) params[0]
236                );
237            }
238        };
239    
240        static DeepaMehtaEvent PRE_SEND_ASSOCIATION_TYPE = new DeepaMehtaEvent(PreSendAssociationTypeListener.class) {
241            @Override
242            public void deliver(EventListener listener, Object... params) {
243                ((PreSendAssociationTypeListener) listener).preSendAssociationType(
244                    (AssociationType) params[0]
245                );
246            }
247        };
248    
249        // ---
250    
251        static DeepaMehtaEvent ALL_PLUGINS_ACTIVE = new DeepaMehtaEvent(AllPluginsActiveListener.class) {
252            @Override
253            public void deliver(EventListener listener, Object... params) {
254                ((AllPluginsActiveListener) listener).allPluginsActive();
255            }
256        };
257    
258        // ---
259    
260        // This event has a double nature:
261        //   a) it is fired regularily (see EmbeddedService.createTopicType()).
262        //   b) it is fired locally (see PluginImpl.introduceTopicTypesToPlugin()).
263        static DeepaMehtaEvent INTRODUCE_TOPIC_TYPE = new DeepaMehtaEvent(IntroduceTopicTypeListener.class) {
264            @Override
265            public void deliver(EventListener listener, Object... params) {
266                ((IntroduceTopicTypeListener) listener).introduceTopicType(
267                    (TopicType) params[0]
268                );
269            }
270        };
271    
272        // This event has a double nature:
273        //   a) it is fired regularily (see EmbeddedService.createAssociationType()).
274        //   b) it is fired locally (see PluginImpl.introduceAssociationTypesToPlugin()).
275        static DeepaMehtaEvent INTRODUCE_ASSOCIATION_TYPE = new DeepaMehtaEvent(IntroduceAssociationTypeListener.class) {
276            @Override
277            public void deliver(EventListener listener, Object... params) {
278                ((IntroduceAssociationTypeListener) listener).introduceAssociationType(
279                    (AssociationType) params[0]
280                );
281            }
282        };
283    }