PageRenderTime 81ms CodeModel.GetById 33ms RepoModel.GetById 3ms app.codeStats 1ms

/factory/factory-core/src/main/java/org/qualipso/factory/eventqueue/EventQueueServiceBean.java

https://github.com/benzen/Ulysse
Java | 1369 lines | 918 code | 173 blank | 278 comment | 221 complexity | 34ef442262b0c1cc29e4c6ded716c080 MD5 | raw file
  1. /*
  2. * Qualipso Funky Factory
  3. * Copyright (C) 2006-2010 INRIA
  4. * http://www.inria.fr - molli@loria.fr
  5. *
  6. * This is free software; you can redistribute it and/or modify it
  7. * under the terms of the GNU Lesser General Public License version 3
  8. * as published by the Free Software Foundation. See the GNU
  9. * Lesser General Public License in LGPL.txt for more details.
  10. *
  11. * You should have received a copy of the GNU Lesser General Public
  12. * License along with this software; if not, write to the Free
  13. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  14. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  15. *
  16. * Initial authors :
  17. *
  18. *Elamri Firas
  19. *Yuksel Huriye
  20. *Secondary authors :
  21. *Amrou Mohanned Khalifa
  22. *Yiqing Li
  23. */
  24. package org.qualipso.factory.eventqueue;
  25. import java.util.ArrayList;
  26. import java.util.Date;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. import java.util.UUID;
  30. import javax.annotation.Resource;
  31. import javax.ejb.EJB;
  32. import javax.ejb.SessionContext;
  33. import javax.ejb.Stateless;
  34. import javax.jws.WebMethod;
  35. import javax.jws.WebService;
  36. import javax.jws.soap.SOAPBinding;
  37. import javax.jws.soap.SOAPBinding.Style;
  38. import javax.persistence.EntityManager;
  39. import javax.persistence.PersistenceContext;
  40. import javax.persistence.Query;
  41. import org.apache.commons.logging.Log;
  42. import org.apache.commons.logging.LogFactory;
  43. import org.jboss.ejb3.annotation.SecurityDomain;
  44. import org.jboss.ws.annotation.EndpointConfig;
  45. import org.jboss.wsf.spi.annotation.WebContext;
  46. import org.qualipso.factory.FactoryException;
  47. import org.qualipso.factory.FactoryNamingConvention;
  48. import org.qualipso.factory.FactoryResource;
  49. import org.qualipso.factory.FactoryResourceIdentifier;
  50. import org.qualipso.factory.FactoryResourceProperty;
  51. import org.qualipso.factory.binding.BindingService;
  52. import org.qualipso.factory.binding.PathHelper;
  53. import org.qualipso.factory.core.CoreServiceException;
  54. import org.qualipso.factory.eventqueue.entity.PersistentEvent;
  55. import org.qualipso.factory.eventqueue.entity.EventQueue;
  56. import org.qualipso.factory.eventqueue.entity.Rule;
  57. import org.qualipso.factory.membership.MembershipService;
  58. import org.qualipso.factory.notification.NotificationService;
  59. import org.qualipso.factory.security.pap.PAPService;
  60. import org.qualipso.factory.security.pap.PAPServiceHelper;
  61. import org.qualipso.factory.security.pep.AccessDeniedException;
  62. import org.qualipso.factory.security.pep.PEPService;
  63. import org.qualipso.factory.security.pep.PEPServiceException;
  64. /**
  65. * Implementation of the ClockService. Provides a time service for the factory.
  66. *
  67. * @author <a href="mailto:christophe.bouthier@loria.fr">Christophe Bouthier</a>
  68. * @author Nicolas HENRY
  69. * @author Marlène HANTZ
  70. * @date 27 July 2009
  71. */
  72. @Stateless(name = EventQueueService.SERVICE_NAME, mappedName = FactoryNamingConvention.SERVICE_PREFIX + EventQueueService.SERVICE_NAME)
  73. @WebService(endpointInterface = "org.qualipso.factory.eventqueue.EventQueueService", targetNamespace = FactoryNamingConvention.SERVICE_NAMESPACE + EventQueueService.SERVICE_NAME, serviceName = EventQueueService.SERVICE_NAME)
  74. @WebContext(contextRoot = FactoryNamingConvention.WEB_SERVICE_CORE_MODULE_CONTEXT, urlPattern = FactoryNamingConvention.WEB_SERVICE_URL_PATTERN_PREFIX + EventQueueService.SERVICE_NAME)
  75. @SOAPBinding(style = Style.RPC)
  76. @SecurityDomain(value = "JBossWSDigest")
  77. @EndpointConfig(configName = "Standard WSSecurity Endpoint")
  78. public class EventQueueServiceBean implements EventQueueService {
  79. private static Log logger = LogFactory.getLog(EventQueueServiceBean.class);
  80. private BindingService binding;
  81. private PEPService pep;
  82. private PAPService pap;
  83. private NotificationService notification;
  84. private MembershipService membership;
  85. private SessionContext ctx;
  86. private EntityManager em;
  87. public EventQueueServiceBean() {
  88. }
  89. /**
  90. * cette methode positionne l Entity Manager
  91. *
  92. * @param em
  93. * Entity Manager
  94. */
  95. @PersistenceContext
  96. public void setEntityManager(EntityManager em) {
  97. this.em = em;
  98. }
  99. /**
  100. * cette methode retourne l Entity Manager
  101. *
  102. * @return em l'entity manager
  103. */
  104. public EntityManager getEntityManager() {
  105. return this.em;
  106. }
  107. /**
  108. * cette methode positionne la Session Context
  109. *
  110. * @param ctx
  111. * la Session Context
  112. */
  113. @Resource
  114. public void setSessionContext(SessionContext ctx) {
  115. this.ctx = ctx;
  116. }
  117. /**
  118. * cette methode retourne la Session Context
  119. *
  120. * @return la Session Context
  121. */
  122. public SessionContext getSessionContext() {
  123. return this.ctx;
  124. }
  125. /**
  126. * cette methode positionne le Binding Service
  127. *
  128. * @param binding
  129. * le Binding Service
  130. *
  131. */
  132. @EJB
  133. public void setBindingService(BindingService binding) {
  134. this.binding = binding;
  135. }
  136. /**
  137. *
  138. *cette methode retourne le Binding Service
  139. *
  140. * @return le Binding Service
  141. */
  142. public BindingService getBindingService() {
  143. return this.binding;
  144. }
  145. /**
  146. * cette methode positionne le PEP Service
  147. *
  148. * @param pep
  149. * le PEP Service
  150. *
  151. */
  152. @EJB
  153. public void setPEPService(PEPService pep) {
  154. this.pep = pep;
  155. }
  156. /**
  157. * cette methode retourne le PEP Service
  158. *
  159. * @return PEP Service
  160. */
  161. public PEPService getPEPService() {
  162. return this.pep;
  163. }
  164. /**
  165. * cette methode positionne le PAP Service
  166. *
  167. * @param pap
  168. * le PAP Service
  169. *
  170. */
  171. @EJB
  172. public void setPAPService(PAPService pap) {
  173. this.pap = pap;
  174. }
  175. /**
  176. * cette methode retourne le PAP Service
  177. *
  178. * @return PAPS ervice
  179. */
  180. public PAPService getPAPService() {
  181. return this.pap;
  182. }
  183. /**
  184. * cette methode positionne le Notification Service
  185. *
  186. * @param notification
  187. * le Notification Service
  188. *
  189. */
  190. @EJB
  191. public void setNotificationService(NotificationService notification) {
  192. this.notification = notification;
  193. }
  194. /**
  195. * cette methode retourne le Notification Service
  196. *
  197. * @return le Service Notification
  198. */
  199. public NotificationService getNotificationService() {
  200. return this.notification;
  201. }
  202. /**
  203. * cette methode positionne le Membership Service
  204. *
  205. * @param membership
  206. * le Membership Service
  207. *
  208. */
  209. @EJB
  210. public void setMembershipService(MembershipService membership) {
  211. this.membership = membership;
  212. }
  213. /**
  214. * cette methode retourne le Membership Service
  215. *
  216. * @return le Membership Service
  217. */
  218. public MembershipService getMembershipService() {
  219. return this.membership;
  220. }
  221. /**
  222. * cette methode retourne les evenements contenu dans la queue sinon une
  223. * exception si la queue n est pas trouve
  224. *
  225. * @param name
  226. * le nom de la queue
  227. * @return returne un tableau des evenements contenu dans la queue
  228. */
  229. @Override
  230. public PersistentEvent[] getEvents(String path) throws EventQueueServiceException {
  231. FactoryResourceIdentifier identifier;
  232. try {
  233. identifier = binding.lookup(path);
  234. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  235. String caller = membership.getProfilePathForConnectedIdentifier();
  236. pep.checkSecurity(caller, path, "read");
  237. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  238. if (eventqueue == null) {
  239. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  240. }
  241. PersistentEvent[] evs = new PersistentEvent[eventqueue.getEvents().size()];
  242. /*
  243. * ArrayList<Event> evts = new ArrayList<Event>();
  244. * ArrayList<Event> allEvts = eventqueue.getEvents(); for (Event
  245. * event : allEvts) { try{
  246. * pep.checkSecurity(caller,event.getFromResource(), "read");
  247. * evts.add(event); }catch(PEPServiceException e){
  248. *
  249. * } }
  250. */
  251. return eventqueue.getEvents().toArray(evs);
  252. } else {
  253. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  254. }
  255. } catch (Exception e) {
  256. logger.error("unable to get events", e);
  257. ctx.setRollbackOnly();
  258. throw new EventQueueServiceException("unable to get events", e);
  259. }
  260. }
  261. /**
  262. * cette méthode permet de creer une nouvelle queue a partir de son nom
  263. * sinon retourne une exception si la queue n a pas pu etre cree la queue
  264. * est rendu persistante et bindee par la suite
  265. *
  266. * @param name
  267. * le nom de la nouvelle queue a creer
  268. *
  269. */
  270. @Override
  271. public void createEventQueue(String path) throws EventQueueServiceException {
  272. logger.info("createEventQueue(...) called");
  273. logger.debug("params : path=" + path);
  274. try {
  275. String caller = membership.getProfilePathForConnectedIdentifier();
  276. pep.checkSecurity(caller, PathHelper.getParentPath(path), "create");
  277. EventQueue evq = new EventQueue();
  278. evq.setId(UUID.randomUUID().toString());
  279. evq.setEvents(new ArrayList<PersistentEvent>());
  280. em.persist(evq);
  281. binding.bind(evq.getFactoryResourceIdentifier(), path);
  282. String policyId = UUID.randomUUID().toString();
  283. pap.createPolicy(policyId, PAPServiceHelper.addRuleToPolicy(PAPServiceHelper.buildOwnerPolicy(policyId, caller, path), "", new String[] { "create",
  284. "read", "update" }));
  285. binding.setProperty(path, FactoryResourceProperty.OWNER, caller);
  286. binding.setProperty(path, FactoryResourceProperty.POLICY_ID, policyId);
  287. //TODO notification...
  288. //TODO indexation...
  289. } catch (Exception e) {
  290. logger.error("unable to create an event queue", e);
  291. ctx.setRollbackOnly();
  292. throw new EventQueueServiceException("unable to create an event queue", e);
  293. }
  294. }
  295. /**
  296. * cette methode place un evenement dans la queue associe au name sinon
  297. * retourne une exception si l evenement n est pas ajoute
  298. *
  299. * @param name
  300. * le nom de l'event queue
  301. * @param event
  302. * l evenement a pusher dans la queue
  303. *
  304. */
  305. @Override
  306. public void pushEvent(String path, PersistentEvent event) throws EventQueueServiceException {
  307. FactoryResourceIdentifier identifier;
  308. try {
  309. if (event == null) {
  310. throw new IllegalArgumentException("event can't be null");
  311. }
  312. identifier = binding.lookup(path);
  313. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  314. String caller = membership.getProfilePathForConnectedIdentifier();
  315. pep.checkSecurity(caller, path, "update");
  316. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  317. if (eventqueue == null) {
  318. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  319. }
  320. eventqueue.getEvents().add(event);
  321. em.persist(eventqueue);
  322. } else {
  323. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  324. }
  325. } catch (Exception e) {
  326. logger.error("unable to pushEvent an event in the event queue", e);
  327. ctx.setRollbackOnly();
  328. throw new EventQueueServiceException("unable to pushEvent an event in the event queue", e);
  329. }
  330. }
  331. /**
  332. * cette methode retourne l event queue associe a path sinon une exception
  333. * si l'event queue n'est pas trouve
  334. *
  335. * @param path
  336. * le path de l event queue
  337. * @return event queue associé a path
  338. */
  339. @Override
  340. public FactoryResource findResource(String path) throws FactoryException {
  341. logger.info("findResource(...) called");
  342. logger.debug("params : path=" + path);
  343. FactoryResourceIdentifier identifier = binding.lookup(path);
  344. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  345. String caller = membership.getProfilePathForConnectedIdentifier();
  346. pep.checkSecurity(caller, path, "read");
  347. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  348. if (eventqueue == null) {
  349. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  350. }
  351. return eventqueue;
  352. }
  353. throw new EventQueueServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  354. }
  355. @Override
  356. public PersistentEvent getLastEvent(String path) throws EventQueueServiceException {
  357. FactoryResourceIdentifier identifier;
  358. try {
  359. identifier = binding.lookup(path);
  360. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  361. String caller = membership.getProfilePathForConnectedIdentifier();
  362. pep.checkSecurity(caller, path, "read");
  363. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  364. if (eventqueue == null) {
  365. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  366. }
  367. int size = eventqueue.getEvents().size();
  368. PersistentEvent[] evq = new PersistentEvent[size];
  369. evq = eventqueue.getEvents().toArray(evq);
  370. PersistentEvent result = evq[size - 1];
  371. return result;
  372. } else {
  373. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  374. }
  375. } catch (Exception e) {
  376. logger.error("unable to get Last Event", e);
  377. ctx.setRollbackOnly();
  378. throw new EventQueueServiceException("unable to get Last Event", e);
  379. }
  380. }
  381. /**
  382. * cette methode retourne le Resource Type List
  383. *
  384. * @return Resource Type List
  385. */
  386. @Override
  387. public String[] getResourceTypeList() {
  388. return RESOURCE_TYPE_LIST;
  389. }
  390. /**
  391. * cette methode retourne le nom du service
  392. *
  393. * @return le nom du cervice
  394. */
  395. @Override
  396. public String getServiceName() {
  397. return SERVICE_NAME;
  398. }
  399. @Override
  400. public void deleteEvent(String path, PersistentEvent e) throws EventQueueServiceException {
  401. FactoryResourceIdentifier identifier;
  402. try {
  403. identifier = binding.lookup(path);
  404. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  405. String caller = membership.getProfilePathForConnectedIdentifier();
  406. pep.checkSecurity(caller, path, "update");
  407. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  408. if (eventqueue == null) {
  409. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  410. }
  411. /*
  412. * int size = eventqueue.getEvents().size(); Event[] evq = new
  413. * Event[size]; evq = eventqueue.getEvents().toArray(evq);
  414. */
  415. ArrayList<PersistentEvent> newEventList = eventqueue.getEvents();
  416. if (newEventList.remove(e)) {
  417. eventqueue.setEvents(newEventList);
  418. em.merge(eventqueue);
  419. } else {
  420. throw new EventQueueServiceException("this event doesn't exist in this queue");
  421. }
  422. } else {
  423. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  424. }
  425. } catch (Exception ex) {
  426. logger.error("unable to delete Event", ex);
  427. ctx.setRollbackOnly();
  428. throw new EventQueueServiceException("unable to delete Event", ex);
  429. }
  430. }
  431. /**
  432. *
  433. * return an array of event that have or contains the same ressourceType
  434. *
  435. * @param path
  436. * path of the EventQueue
  437. * @param ressourceType
  438. * the type of resource event
  439. * @param substring
  440. * true if typeRssource contains parameter typeRessource, false
  441. * if typeRssource contains exactly the parameter typeRessource
  442. * @return array of event
  443. * @throws EventQueueServiceException
  444. */
  445. @WebMethod
  446. public PersistentEvent[] findEventByRessourceType(String path, String ressourceType, boolean substring) throws EventQueueServiceException {
  447. FactoryResourceIdentifier identifier;
  448. try {
  449. // li des cas exceptionnelles
  450. if ((path == null) || (ressourceType == null))
  451. throw new EventQueueServiceException("Le parametre n'est pas correct verifier le path ou le ressourceType");
  452. identifier = binding.lookup(path);
  453. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  454. String caller = membership.getProfilePathForConnectedIdentifier();
  455. pep.checkSecurity(caller, path, "read");
  456. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  457. if (eventqueue == null) {
  458. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  459. }
  460. ArrayList<PersistentEvent> resultContains = new ArrayList<PersistentEvent>();
  461. ArrayList<PersistentEvent> resultEquals = new ArrayList<PersistentEvent>();
  462. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  463. Iterator<PersistentEvent> it = listEvent.iterator();
  464. while (it.hasNext()) {
  465. PersistentEvent ev = it.next();
  466. if (substring == true && ev.getResourceType().contains(ressourceType)) {
  467. resultContains.add(ev);
  468. }
  469. if (substring == false && ev.getResourceType().equals(ressourceType)) {
  470. resultEquals.add(ev);
  471. }
  472. }
  473. if (substring == true) {
  474. return (PersistentEvent[]) (resultContains.toArray());
  475. } else {
  476. return (PersistentEvent[]) (resultEquals.toArray());
  477. }
  478. }
  479. else {
  480. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  481. }
  482. } catch (Exception e) {
  483. logger.error("unable to find Event By Ressource Type", e);
  484. ctx.setRollbackOnly();
  485. throw new EventQueueServiceException("unable to find Event By Ressource Type", e);
  486. }
  487. }
  488. /**
  489. * return an array of event that have or contains the same thrower
  490. *
  491. * @param path
  492. * path of the EventQueue
  493. * @param thrower
  494. * thrower of event
  495. * @param substring
  496. * true if thrower contains the string parameter thrower , false
  497. * if thrower contains exactly the parameter thrower.
  498. * @return array of event (return an array of event that have or contains
  499. * the same thrower)
  500. * @throws EventQueueServiceException
  501. */
  502. @WebMethod
  503. public PersistentEvent[] findEventBythrower(String path, String thrower, boolean substring) throws EventQueueServiceException {
  504. FactoryResourceIdentifier identifier;
  505. try {
  506. identifier = binding.lookup(path);
  507. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  508. String caller = membership.getProfilePathForConnectedIdentifier();
  509. pep.checkSecurity(caller, path, "read");
  510. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  511. if (eventqueue == null) {
  512. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  513. }
  514. ArrayList<PersistentEvent> resultContains = new ArrayList<PersistentEvent>();
  515. ArrayList<PersistentEvent> resultFalse = new ArrayList<PersistentEvent>();
  516. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  517. Iterator<PersistentEvent> it = listEvent.iterator();
  518. while (it.hasNext()) {
  519. PersistentEvent ev = it.next();
  520. if (substring == true && ev.getThrowedBy().contains(thrower)) {
  521. resultContains.add(ev);
  522. }
  523. if (substring == false && ev.getThrowedBy().equals(thrower)) {
  524. resultFalse.add(ev);
  525. }
  526. }
  527. if (substring == true) {
  528. PersistentEvent[] tab = new PersistentEvent[resultContains.size()];
  529. int i = 0;
  530. while (i < resultContains.size()) {
  531. tab[i] = resultContains.get(i);
  532. i++;
  533. }
  534. return tab;
  535. } else {
  536. PersistentEvent[] tab = new PersistentEvent[resultFalse.size()];
  537. int i = 0;
  538. while (i < resultFalse.size()) {
  539. tab[i] = resultFalse.get(i);
  540. i++;
  541. }
  542. return tab;
  543. }
  544. }
  545. else {
  546. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  547. }
  548. } catch (Exception e) {
  549. logger.error("unable to find Event By thrower", e);
  550. ctx.setRollbackOnly();
  551. throw new EventQueueServiceException("unable to find Event By thrower", e);
  552. }
  553. }
  554. /**
  555. *
  556. * @param path
  557. * path of the EventQueue
  558. * @param fromRessource
  559. * fromRessource of event
  560. * @param substring
  561. * true if fromRessource contains the string parameter
  562. * fromRessource , false if thrower contains exactly the
  563. * parameter fromRessource.
  564. * @return array of event ( return an array of event that have or contains
  565. * the same fromRessource )
  566. * @throws EventQueueServiceException
  567. */
  568. @WebMethod
  569. public PersistentEvent[] findEventByFromRessource(String path, String fromRessource, boolean substring) throws EventQueueServiceException {
  570. FactoryResourceIdentifier identifier;
  571. try {
  572. // li des cas exceptionnelles
  573. if ((path == null) || (fromRessource == null))
  574. throw new EventQueueServiceException("Le parametre n'est pas correct verifier le path ou fromRessource");
  575. identifier = binding.lookup(path);
  576. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  577. String caller = membership.getProfilePathForConnectedIdentifier();
  578. pep.checkSecurity(caller, path, "read");
  579. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  580. if (eventqueue == null) {
  581. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  582. }
  583. ArrayList<PersistentEvent> resultContains = new ArrayList<PersistentEvent>();
  584. ArrayList<PersistentEvent> resultFalse = new ArrayList<PersistentEvent>();
  585. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  586. Iterator<PersistentEvent> it = listEvent.iterator();
  587. while (it.hasNext()) {
  588. PersistentEvent ev = it.next();
  589. if (substring == true && ev.getFromResource().contains(fromRessource)) {
  590. resultContains.add(ev);
  591. }
  592. if (substring == false && ev.getFromResource().equals(fromRessource)) {
  593. resultFalse.add(ev);
  594. }
  595. }
  596. if (substring == true) {
  597. PersistentEvent[] tab = new PersistentEvent[resultContains.size()];
  598. int i = 0;
  599. while (i < resultContains.size()) {
  600. tab[i] = resultContains.get(i);
  601. i++;
  602. }
  603. return tab;
  604. } else {
  605. PersistentEvent[] tab = new PersistentEvent[resultFalse.size()];
  606. int i = 0;
  607. while (i < resultFalse.size()) {
  608. tab[i] = resultFalse.get(i);
  609. i++;
  610. }
  611. return tab;
  612. }
  613. }
  614. else {
  615. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  616. }
  617. } catch (Exception e) {
  618. logger.error("unable to find Event By from Ressource", e);
  619. ctx.setRollbackOnly();
  620. throw new EventQueueServiceException("unable to find Event By from Ressource", e);
  621. }
  622. }
  623. /**
  624. *
  625. * @param path
  626. * path of the EventQueue
  627. * @param date
  628. * date of the event
  629. * @return array of event ( return an array of event having the same date )
  630. * @throws EventQueueServiceException
  631. */
  632. @WebMethod
  633. public PersistentEvent[] findEventByDate(String path, Date date) throws EventQueueServiceException {
  634. FactoryResourceIdentifier identifier;
  635. try {
  636. identifier = binding.lookup(path);
  637. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  638. String caller = membership.getProfilePathForConnectedIdentifier();
  639. pep.checkSecurity(caller, path, "read");
  640. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  641. if (eventqueue == null) {
  642. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  643. }
  644. ArrayList<PersistentEvent> result = new ArrayList<PersistentEvent>();
  645. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  646. Iterator<PersistentEvent> it = listEvent.iterator();
  647. while (it.hasNext()) {
  648. PersistentEvent ev = it.next();
  649. if (ev.getDate().equals(date)) {
  650. result.add(ev);
  651. }
  652. }
  653. PersistentEvent[] tab = new PersistentEvent[result.size()];
  654. int i = 0;
  655. while (i < result.size()) {
  656. tab[i] = result.get(i);
  657. i++;
  658. }
  659. // return (Event[]) (result.toArray());
  660. return tab;
  661. }
  662. else {
  663. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  664. }
  665. } catch (Exception e) {
  666. logger.error("unable to find Event By Date", e);
  667. ctx.setRollbackOnly();
  668. throw new EventQueueServiceException("unable to find Event By Date", e);
  669. }
  670. }
  671. /**
  672. *
  673. * @param path
  674. * path of the EventQueue
  675. * @param date
  676. * date of the event
  677. * @return array of event (return an array of event having date lesser or
  678. * equal of the parameter date )
  679. * @throws EventQueueServiceException
  680. */
  681. @WebMethod
  682. public PersistentEvent[] findEventByDateInf(String path, Date date) throws EventQueueServiceException {
  683. FactoryResourceIdentifier identifier;
  684. try {
  685. identifier = binding.lookup(path);
  686. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  687. String caller = membership.getProfilePathForConnectedIdentifier();
  688. pep.checkSecurity(caller, path, "read");
  689. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  690. if (eventqueue == null) {
  691. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  692. }
  693. ArrayList<PersistentEvent> result = new ArrayList<PersistentEvent>();
  694. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  695. Iterator<PersistentEvent> it = listEvent.iterator();
  696. while (it.hasNext()) {
  697. PersistentEvent ev = (PersistentEvent) it.next();
  698. if (ev.getDate().before(date) || ev.getDate().equals(date)) {
  699. result.add(ev);
  700. }
  701. }// while
  702. // return (Event[]) (result.toArray());
  703. PersistentEvent[] tab = new PersistentEvent[result.size()];
  704. int i = 0;
  705. while (i < result.size()) {
  706. tab[i] = result.get(i);
  707. i++;
  708. }
  709. return tab;
  710. }
  711. else {
  712. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  713. }
  714. } catch (Exception e) {
  715. logger.error("unable to find Event By DateSup", e);
  716. ctx.setRollbackOnly();
  717. throw new EventQueueServiceException("unable to find Event By DateSup", e);
  718. }
  719. }
  720. /**
  721. *
  722. * @param path
  723. * path of the EventQueue
  724. * @param date
  725. * date date of the event
  726. * @return array of event (return an array of event having date superior or
  727. * equal of the parameter date )
  728. * @throws EventQueueServiceException
  729. */
  730. @WebMethod
  731. public PersistentEvent[] findEventByDateSup(String path, Date date) throws EventQueueServiceException {
  732. FactoryResourceIdentifier identifier;
  733. try {
  734. identifier = binding.lookup(path);
  735. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  736. String caller = membership.getProfilePathForConnectedIdentifier();
  737. pep.checkSecurity(caller, path, "read");
  738. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  739. if (eventqueue == null) {
  740. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  741. }
  742. ArrayList<PersistentEvent> result = new ArrayList<PersistentEvent>();
  743. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  744. Iterator<PersistentEvent> it = listEvent.iterator();
  745. while (it.hasNext()) {
  746. PersistentEvent ev = it.next();
  747. if (ev.getDate().after(date) || ev.getDate().equals(date)) {
  748. result.add(ev);
  749. }
  750. }// while
  751. PersistentEvent[] tab = new PersistentEvent[result.size()];
  752. int i = 0;
  753. while (i < result.size()) {
  754. tab[i] = result.get(i);
  755. i++;
  756. }
  757. return tab;
  758. }
  759. else {
  760. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  761. }
  762. } catch (Exception e) {
  763. logger.error("unable to find Event By DateInf", e);
  764. ctx.setRollbackOnly();
  765. throw new EventQueueServiceException("unable to find Event By DateInf", e);
  766. }
  767. }
  768. /**
  769. *
  770. * @param path
  771. * path of the EventQueue
  772. * @param date1
  773. * date of the event
  774. * @param date2
  775. * date of the event
  776. * @return array of event (return an array of event having date between
  777. * date1 and date2 where date1<= date2)
  778. * @throws EventQueueServiceException
  779. */
  780. @WebMethod
  781. public PersistentEvent[] findEventByDateBetween(String path, Date date1, Date date2) throws EventQueueServiceException {
  782. FactoryResourceIdentifier identifier;
  783. try {
  784. identifier = binding.lookup(path);
  785. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  786. String caller = membership.getProfilePathForConnectedIdentifier();
  787. pep.checkSecurity(caller, path, "read");
  788. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  789. if (eventqueue == null) {
  790. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  791. }
  792. ArrayList<PersistentEvent> result = new ArrayList<PersistentEvent>();
  793. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  794. Iterator<PersistentEvent> it = listEvent.iterator();
  795. while (it.hasNext()) {
  796. PersistentEvent ev = it.next();
  797. // correction d'un bug concernant date1 et date2 et inversé
  798. // if (((ev.getDate().before(date1)) ||
  799. // (ev.getDate().equals(date1))) &&
  800. // ((ev.getDate().after(date2)) ||
  801. // (ev.getDate().equals(date2)))) {
  802. // result.add(ev);
  803. // }
  804. if ((ev.getDate().getTime() >= date1.getTime()) && (ev.getDate().getTime() <= date2.getTime())) {
  805. result.add(ev);
  806. }
  807. }// while
  808. PersistentEvent[] tab = new PersistentEvent[result.size()];
  809. int i = 0;
  810. while (i < result.size()) {
  811. tab[i] = result.get(i);
  812. i++;
  813. }
  814. return tab;
  815. }
  816. else {
  817. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  818. }
  819. } catch (Exception e) {
  820. logger.error("unable to find Event By Date Between", e);
  821. ctx.setRollbackOnly();
  822. throw new EventQueueServiceException("unable to find Event By Date Between", e);
  823. }
  824. }
  825. /**
  826. *
  827. * @param path
  828. * @param eventType
  829. * @param substring
  830. * @return
  831. * @throws EventQueueServiceException
  832. */
  833. @WebMethod
  834. public PersistentEvent[] findEventByEventType(String path, String eventType, boolean substring) throws EventQueueServiceException {
  835. FactoryResourceIdentifier identifier;
  836. try {
  837. // li des cas exceptionnelles
  838. if ((path == null) || (eventType == null))
  839. throw new EventQueueServiceException("Le parametre n'est pas correct . Verifier le path ou l'eventType");
  840. identifier = binding.lookup(path);
  841. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  842. String caller = membership.getProfilePathForConnectedIdentifier();
  843. pep.checkSecurity(caller, path, "read");
  844. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  845. if (eventqueue == null) {
  846. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  847. }
  848. ArrayList<PersistentEvent> resultContains = new ArrayList<PersistentEvent>();
  849. ArrayList<PersistentEvent> resultEquals = new ArrayList<PersistentEvent>();
  850. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  851. Iterator<PersistentEvent> it = listEvent.iterator();
  852. while (it.hasNext()) {
  853. PersistentEvent ev = it.next();
  854. if ((substring == true) && (ev.getEventType().contains(eventType))) {
  855. resultContains.add(ev);
  856. }
  857. if ((substring == false) && (ev.getEventType().equals(eventType))) {
  858. resultEquals.add(ev);
  859. }
  860. }// while
  861. if (substring == true) {
  862. PersistentEvent[] tab = new PersistentEvent[resultContains.size()];
  863. int i = 0;
  864. while (i < resultContains.size()) {
  865. tab[i] = resultContains.get(i);
  866. i++;
  867. }
  868. return tab;
  869. } else {
  870. PersistentEvent[] tab = new PersistentEvent[resultEquals.size()];
  871. int i = 0;
  872. while (i < resultEquals.size()) {
  873. tab[i] = resultEquals.get(i);
  874. i++;
  875. }
  876. return tab;
  877. }
  878. }
  879. else {
  880. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  881. }
  882. } catch (Exception e) {
  883. logger.error("unable to find Event By EventType", e);
  884. ctx.setRollbackOnly();
  885. throw new EventQueueServiceException("unable to find Event By EventType", e);
  886. }
  887. }
  888. public PersistentEvent[] findObjectEvent(String path, PersistentEvent event) throws EventQueueServiceException {
  889. FactoryResourceIdentifier identifier;
  890. try {
  891. identifier = binding.lookup(path);
  892. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  893. String caller = membership.getProfilePathForConnectedIdentifier();
  894. pep.checkSecurity(caller, path, "read");
  895. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  896. if (eventqueue == null) {
  897. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  898. }
  899. ArrayList<PersistentEvent> result = new ArrayList<PersistentEvent>();
  900. ArrayList<PersistentEvent> listEvent = eventqueue.getEvents();
  901. Iterator<PersistentEvent> it = listEvent.iterator();
  902. while (it.hasNext()) {
  903. PersistentEvent ev = it.next();
  904. if (ev.equals(event)) {
  905. result.add(ev);
  906. }
  907. }
  908. PersistentEvent[] tab = new PersistentEvent[result.size()];
  909. int i = 0;
  910. while (i < result.size()) {
  911. tab[i] = result.get(i);
  912. i++;
  913. }
  914. return tab;
  915. }
  916. else {
  917. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  918. }
  919. } catch (Exception e) {
  920. logger.error("unable to find Object Event", e);
  921. ctx.setRollbackOnly();
  922. throw new EventQueueServiceException("unable to find Object Event", e);
  923. }
  924. }
  925. @Override
  926. public void removeQueue(String path) throws EventQueueServiceException {
  927. FactoryResourceIdentifier identifier;
  928. try {
  929. identifier = binding.lookup(path);
  930. if (identifier.getType().equals(EventQueue.RESOURCE_NAME)) {
  931. String caller = membership.getProfilePathForConnectedIdentifier();
  932. pep.checkSecurity(caller, path, "update");
  933. EventQueue eventqueue = em.find(EventQueue.class, identifier.getId());
  934. if (eventqueue == null) {
  935. throw new EventQueueServiceException("unable to find an event queue for id " + identifier.getId());
  936. }
  937. em.remove(eventqueue);
  938. binding.unbind(path);
  939. } else {
  940. throw new CoreServiceException("Resource " + identifier + " is not managed by Event Queue Service");
  941. }
  942. } catch (Exception e) {
  943. logger.error("unable to remove event queue", e);
  944. ctx.setRollbackOnly();
  945. throw new EventQueueServiceException("unable to create an event queue", e);
  946. }
  947. }
  948. @WebMethod
  949. public PersistentEvent[] findEventBySimpleParameter(String path, String eventType, String thrower, String resourceType, String fromRessource, Date date,
  950. boolean dateSup, boolean dateInf) throws EventQueueServiceException {
  951. return null;
  952. }
  953. @WebMethod
  954. public PersistentEvent[] findEventByComposedParameter(String path, String eventType, String thrower, String resourceType, String fromRessource, Date date1, Date date2)
  955. throws EventQueueServiceException {
  956. return null;
  957. }
  958. @Override
  959. public void generateXML(String path) {
  960. // TODO Auto-generated method stub
  961. }
  962. @Override
  963. public Rule[] list() throws EventQueueServiceException {
  964. logger.debug("list() called");
  965. Query q = em.createQuery("select r from Rule r");
  966. List<?> l = q.getResultList();
  967. Rule[] tab = new Rule[l.size()];
  968. tab = l.toArray(tab);
  969. return tab;
  970. }
  971. @Override
  972. public Rule[] listByRE(String subjectre, String objectre, String targetre, String queue) throws EventQueueServiceException {
  973. logger.debug("listByRE(...) called");
  974. if ((subjectre == null) && (objectre == null) && (targetre == null) && (queue == null))
  975. throw new EventQueueServiceException("Incorrect args, all args are null");
  976. Query q = em.createQuery("SELECT r FROM Rule r WHERE 0=0 " + (subjectre != null ? "AND r.subjectre=:subjectre" : "") + " "
  977. + (objectre != null ? "AND r.objectre=:objectre" : "") + " " + (targetre != null ? "AND r.targetre=:targetre" : "") + " "
  978. + (queue != null ? "AND r.queuePath =:queue" : ""));
  979. if (subjectre != null) {
  980. q.setParameter("subjectre", subjectre);
  981. }
  982. if (objectre != null) {
  983. q.setParameter("objectre", objectre);
  984. }
  985. if (targetre != null) {
  986. q.setParameter("targetre", targetre);
  987. }
  988. if (queue != null) {
  989. q.setParameter("queue", queue);
  990. }
  991. List<?> l = q.getResultList();
  992. Rule[] tab = new Rule[l.size()];
  993. tab = l.toArray(tab);
  994. return tab;
  995. }
  996. @Override
  997. public Rule[] listBy(String subject, String object, String target, String queuere) throws EventQueueServiceException {
  998. logger.debug("listRE(...) called");
  999. if (queuere == null)
  1000. throw new EventQueueServiceException("Incorrect arg, queuere should not be null");
  1001. Query q = em.createQuery("SELECT r FROM Rule r");
  1002. List<?> l = q.getResultList();
  1003. List<Rule> lres = new ArrayList<Rule>();
  1004. for (Object r : l) {
  1005. Rule rule = (Rule) r;
  1006. boolean b1, b2, b3, b4;
  1007. b1 = subject == null || rule.matchBySubjectRE(subject);
  1008. b2 = object == null || rule.matchByObjectRE(object);
  1009. b3 = target == null || rule.matchByTargetRE(target);
  1010. b4 = rule.matchByQueue(queuere);
  1011. if (b1 && b2 && b3 && b4) {
  1012. lres.add(rule);
  1013. }
  1014. }
  1015. Rule[] tab = new Rule[lres.size()];
  1016. tab = lres.toArray(tab);
  1017. return tab;
  1018. }
  1019. @Override
  1020. public Rule[] listByQueue(String queue) throws EventQueueServiceException {
  1021. logger.debug("listByQueue(String queue) called");
  1022. if (queue == null)
  1023. throw new EventQueueServiceException("Incorrect arg, targetre should not be null");
  1024. Query q = em.createQuery("SELECT r FROM Rule r WHERE r.queuePath =:queue");
  1025. q.setParameter("queue", queue);
  1026. List<?> l = q.getResultList();
  1027. Rule[] tab = new Rule[l.size()];
  1028. tab = l.toArray(tab);
  1029. return tab;
  1030. }
  1031. @Override
  1032. public Rule[] listByQueueRE(String queuere) throws EventQueueServiceException {
  1033. logger.debug("listByQueueRE(String queuere) called");
  1034. if (queuere == null)
  1035. throw new EventQueueServiceException("Incorrect arg, queuere should not be null");
  1036. Query q = em.createQuery("SELECT r FROM Rule r");
  1037. List<?> l = q.getResultList();
  1038. List<Rule> lres = new ArrayList<Rule>();
  1039. for (Object r : l) {
  1040. Rule rule = (Rule) r;
  1041. if (rule.matchByQueue(queuere)) {
  1042. lres.add(rule);
  1043. }
  1044. }
  1045. Rule[] tab = new Rule[lres.size()];
  1046. tab = lres.toArray(tab);
  1047. return tab;
  1048. }
  1049. @Override
  1050. public Rule[] listBySubjectRE(String subjectre) throws EventQueueServiceException {
  1051. logger.debug("listBySubjectRE(String subjectre) called");
  1052. if (subjectre == null)
  1053. throw new EventQueueServiceException("Incorrect arg, subject should not be null");
  1054. Query q = em.createQuery("SELECT r FROM Rule r WHERE r.subjectre =:subject");
  1055. q.setParameter("subject", subjectre);
  1056. List<?> l = q.getResultList();
  1057. Rule[] tab = new Rule[l.size()];
  1058. tab = l.toArray(tab);
  1059. return tab;
  1060. }
  1061. @Override
  1062. public Rule[] listBySubject(String subject) throws EventQueueServiceException {
  1063. logger.debug("listBySubject(String subject) called");
  1064. if (subject == null)
  1065. throw new EventQueueServiceException("Incorrect arg, subject should not be null");
  1066. Query q = em.createQuery("SELECT r FROM Rule r");
  1067. List<?> l = q.getResultList();
  1068. List<Rule> lres = new ArrayList<Rule>();
  1069. for (Object r : l) {
  1070. Rule rule = (Rule) r;
  1071. if (rule.matchBySubjectRE(subject)) {
  1072. lres.add(rule);
  1073. }
  1074. }
  1075. Rule[] tab = new Rule[lres.size()];
  1076. tab = lres.toArray(tab);
  1077. return tab;
  1078. }
  1079. @Override
  1080. public Rule[] listByObjectRE(String objectre) throws EventQueueServiceException {
  1081. logger.debug("listByObjectRE(String objectre) called");
  1082. if (objectre == null)
  1083. throw new EventQueueServiceException("Incorrect arg, object should not be null");
  1084. Query q = em.createQuery("SELECT r FROM Rule r WHERE r.objectre =:object");
  1085. q.setParameter("object", objectre);
  1086. List<?> l = q.getResultList();
  1087. Rule[] tab = new Rule[l.size()];
  1088. tab = l.toArray(tab);
  1089. return tab;
  1090. }
  1091. @Override
  1092. public Rule[] listByObject(String object) throws EventQueueServiceException {
  1093. logger.debug("listByObject(String object) called");
  1094. if (object == null)
  1095. throw new EventQueueServiceException("Incorrect arg, object should not be null");
  1096. Query q = em.createQuery("SELECT r FROM Rule r");
  1097. List<?> l = q.getResultList();
  1098. List<Rule> lres = new ArrayList<Rule>();
  1099. for (Object r : l) {
  1100. Rule rule = (Rule) r;
  1101. if (rule.matchByObjectRE(object)) {
  1102. lres.add(rule);
  1103. }
  1104. }
  1105. Rule[] tab = new Rule[lres.size()];
  1106. tab = lres.toArray(tab);
  1107. return tab;
  1108. }
  1109. @Override
  1110. public Rule[] listByTargetRE(String targetre) throws EventQueueServiceException {
  1111. logger.debug("listByTargetRE(String targetre) called");
  1112. if (targetre == null)
  1113. throw new EventQueueServiceException("Incorrect arg, target should not be null");
  1114. Query q = em.createQuery("SELECT r FROM Rule r WHERE r.targetre =:target");
  1115. q.setParameter("target", targetre);
  1116. List<?> l = q.getResultList();
  1117. Rule[] tab = new Rule[l.size()];
  1118. tab = l.toArray(tab);
  1119. return tab;
  1120. }
  1121. @Override
  1122. public Rule[] listByTarget(String target) throws EventQueueServiceException {
  1123. logger.debug("listByTarget(String target) called");
  1124. if (target == null)
  1125. throw new EventQueueServiceException("Incorrect arg, target should not be null");
  1126. Query q = em.createQuery("SELECT r FROM Rule r");
  1127. List<?> l = q.getResultList();
  1128. List<Rule> lres = new ArrayList<Rule>();
  1129. for (Object r : l) {
  1130. Rule rule = (Rule) r;
  1131. if (rule.matchByTargetRE(target)) {
  1132. lres.add(rule);
  1133. }
  1134. }
  1135. Rule[] tab = new Rule[lres.size()];
  1136. tab = lres.toArray(tab);
  1137. return tab;
  1138. }
  1139. @Override
  1140. public void register(String subjectre, String objectre, String targetre, String queuePath) throws EventQueueServiceException {
  1141. logger.info("register(...) called");
  1142. String caller = "";
  1143. try {
  1144. caller = membership.getProfilePathForConnectedIdentifier();
  1145. pep.checkSecurity(caller, queuePath, "update");
  1146. } catch (PEPServiceException e) {
  1147. e.printStackTrace();
  1148. throw new EventQueueServiceException("unable to add rule on the queue " + queuePath);
  1149. } catch (AccessDeniedException e) {
  1150. e.printStackTrace();
  1151. throw new EventQueueServiceException("unable to know the connected profil");
  1152. }
  1153. if ((subjectre == null) || (objectre == null) || (targetre == null) || (queuePath == null))
  1154. throw new EventQueueServiceException("Incorrect arg, should not be null");
  1155. Rule[] tmp = list();
  1156. if (tmp.length != 0) {
  1157. for (int i = 0; i < tmp.length; i++) {
  1158. if ((tmp[i].getObjectre().equals(objectre)) && (tmp[i].getQueuePath().equals(queuePath)) && (tmp[i].getSubjectre().equals(subjectre))
  1159. && (tmp[i].getTargetre().equals(targetre)))
  1160. throw new EventQueueServiceException("Resource already exists in base");
  1161. }
  1162. }
  1163. Rule r = new Rule();
  1164. r.setSubjectre(subjectre);
  1165. r.setObjectre(objectre);
  1166. r.setTargetre(targetre);
  1167. r.setQueuePath(queuePath);
  1168. r.setId(UUID.randomUUID().toString());
  1169. em.persist(r);
  1170. }
  1171. @Override
  1172. public void unregister(String subjectre, String objectre, String targetre, String queuePath) throws EventQueueServiceException {
  1173. String caller = "";
  1174. try {
  1175. caller = membership.getProfilePathForConnectedIdentifier();
  1176. pep.checkSecurity(caller, queuePath, "update");
  1177. } catch (PEPServiceException e) {
  1178. e.printStackTrace();
  1179. throw new EventQueueServiceException("unable to remove rule on the queue " + queuePath);
  1180. } catch (AccessDeniedException e) {
  1181. e.printStackTrace();
  1182. throw new EventQueueServiceException("unable to know the connected profil");
  1183. }
  1184. if ((subjectre == null) || (objectre == null) || (targetre == null) || (queuePath == null))
  1185. throw new EventQueueServiceException("Incorrect arg, should not be null");
  1186. Query q = em.createQuery("delete from Rule where subjectre=:subjectre and objectre=:objectre and targetre=:targetre and queuePath=:queuePath");
  1187. q.setParameter("subjectre", subjectre);
  1188. q.setParameter("objectre", objectre);
  1189. q.setParameter("targetre", targetre);
  1190. q.setParameter("queuePath", queuePath);
  1191. int n = q.executeUpdate();
  1192. if (n != 1) {
  1193. logger.warn("can't unregister " + subjectre + "/" + objectre + "/" + queuePath);
  1194. }
  1195. }
  1196. }