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}