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