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}