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 }