1 23 24 package org.apache.slide.webdav.method; 25 26 import java.util.ArrayList ; 27 import java.util.Iterator ; 28 import java.util.List ; 29 30 import org.apache.slide.common.NamespaceAccessToken; 31 import org.apache.slide.event.EventDispatcher; 32 import org.apache.slide.event.GenericEvent; 33 import org.apache.slide.event.VetoException; 34 import org.apache.slide.webdav.WebdavException; 35 import org.apache.slide.webdav.WebdavServletConfig; 36 import org.apache.slide.webdav.util.NotificationConstants; 37 import org.apache.slide.webdav.util.WebdavStatus; 38 import org.jdom.Element; 39 40 41 45 public class EventMethod extends AbstractWebdavMethod implements NotificationConstants { 46 protected static final String LOG_CHANNEL = EventMethod.class.getName(); 47 48 private List eventsToFire = new ArrayList (); 49 private List vetoableEventsToFire = new ArrayList (); 50 51 57 public EventMethod(NamespaceAccessToken token, 58 WebdavServletConfig config) { 59 super(token, config); 60 } 61 62 protected void parseRequest() throws WebdavException { 63 try { 64 List events = parseRequestContent(E_FIRE_EVENTS).getChildren(); 65 for ( Iterator i = events.iterator(); i.hasNext(); ) { 66 Element event = (Element)i.next(); 67 List informations = event.getChildren(); 69 String [][] eventInformation = new String [informations.size()][2]; 70 int counter = 0; 71 for ( Iterator j = informations.iterator(); j.hasNext(); ) { 72 Element information = (Element)j.next(); 73 eventInformation[counter][0] = information.getAttributeValue(A_INFORMATION_KEY); 74 eventInformation[counter][1] = information.getText(); 75 counter++; 76 } 77 if ( event.getName().equals(E_EVENT) ) { 78 eventsToFire.add(new GenericEvent(this, eventInformation)); 79 } else if ( event.getName().equals(E_VETOABLE_EVENT) ) { 80 vetoableEventsToFire.add(new GenericEvent(this, eventInformation)); 81 } 82 } 83 } catch (Exception e) { 84 int statusCode = getErrorCode( (Exception )e ); 85 sendError( statusCode, e ); 86 throw new WebdavException( statusCode ); 87 } 88 } 89 90 protected void executeRequest() throws WebdavException { 91 try { 92 if ( GenericEvent.EVENT_FIRED.isEnabled() ) { 94 for ( Iterator i = eventsToFire.iterator(); i.hasNext(); ) { 95 GenericEvent event = (GenericEvent)i.next(); 96 EventDispatcher.getInstance().fireEvent(GenericEvent.EVENT_FIRED, event); 97 } 98 } 99 if ( GenericEvent.VETOABLE_EVENT_FIRED.isEnabled() ) { 100 for ( Iterator i = vetoableEventsToFire.iterator(); i.hasNext(); ) { 101 GenericEvent event = (GenericEvent)i.next(); 102 try { 103 EventDispatcher.getInstance().fireVetoableEvent(GenericEvent.VETOABLE_EVENT_FIRED, event); 104 } catch ( VetoException exception ) { 105 } 107 } 108 } 109 resp.setStatus(WebdavStatus.SC_OK); 110 } catch (Exception e) { 111 int statusCode = getErrorCode( (Exception )e ); 112 sendError( statusCode, e ); 113 throw new WebdavException( statusCode ); 114 } 115 } 116 } | Popular Tags |