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