You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by jf...@apache.org on 2004/08/28 21:07:00 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager CastorPsmlManagerService.java

jford       2004/08/28 12:07:00

  Modified:    src/java/org/apache/jetspeed/services/psmlmanager
                        CastorPsmlManagerService.java
  Log:
  Added support for messaging
  
  Revision  Changes    Path
  1.46      +171 -8    jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager/CastorPsmlManagerService.java
  
  Index: CastorPsmlManagerService.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/psmlmanager/CastorPsmlManagerService.java,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- CastorPsmlManagerService.java	27 Apr 2004 21:41:36 -0000	1.45
  +++ CastorPsmlManagerService.java	28 Aug 2004 19:07:00 -0000	1.46
  @@ -21,11 +21,14 @@
   import org.apache.jetspeed.om.profile.QueryLocator;
   import org.apache.jetspeed.util.FileCopy;
   import org.apache.jetspeed.util.DirectoryUtils;
  +import org.apache.jetspeed.services.Messenger;
   import org.apache.jetspeed.services.Profiler;
   import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
   import org.apache.jetspeed.services.logging.JetspeedLogger;
  +import org.apache.jetspeed.services.messaging.MessagingService;
   import org.apache.jetspeed.services.JetspeedSecurity;
   import org.apache.jetspeed.services.resources.JetspeedResources;
  +import org.apache.jetspeed.services.security.JetspeedSecurityException;
   
   //Castor defined API
   import org.apache.jetspeed.om.profile.Portlets;
  @@ -67,6 +70,7 @@
   import java.io.File;
   import java.io.Reader;
   import java.io.FileReader;
  +import java.io.Serializable;
   import java.io.Writer;
   import java.io.FileOutputStream;
   import java.io.OutputStreamWriter;
  @@ -74,6 +78,11 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.LinkedList;
  +
  +import javax.jms.JMSException;
  +import javax.jms.Message;
  +import javax.jms.MessageListener;
  +import javax.jms.ObjectMessage;
   import javax.servlet.ServletConfig;
   import javax.xml.parsers.DocumentBuilder;
   import javax.xml.parsers.DocumentBuilderFactory;
  @@ -94,7 +103,8 @@
    */
   public class CastorPsmlManagerService extends TurbineBaseService
                                         implements FileCacheEventListener,
  -                                                 PsmlManagerService
  +                                                 PsmlManagerService,
  +                                                 MessageListener
   {
       /**
        * Static initialization of the logger for this class
  @@ -151,6 +161,8 @@
   
       /** The default encoding used to serialize PSML files to disk */
       protected String defaultEncoding = JetspeedResources.getString(JetspeedResources.CONTENT_ENCODING_KEY, "utf-8");
  +    
  +    private boolean enableMessaging = false;
   
       /**
        * This is the early initialization method called by the
  @@ -165,6 +177,21 @@
   
           //Ensure that the servlet service is initialized
           TurbineServices.getInstance().initService(ServletService.SERVICE_NAME, conf);
  +        
  +        this.enableMessaging = getConfiguration().getBoolean("enable_messaging", false);
  +        if(enableMessaging)
  +        {
  +            try
  +            {
  +                TurbineServices.getInstance().initService(MessagingService.SERVICE_NAME, conf);
  +                Messenger.addMessageListener(this, CastorPsmlManagerService.class.getName(), MessagingService.PSML_UPDATE_SUBJECT);
  +            }
  +            catch(Exception e)
  +            {
  +                enableMessaging = false;
  +                logger.warn("Messaging support has been disabled due to a failure to initialize the service or add a listener.");
  +            }
  +        }
   
           // get configuration parameters from Jetspeed Resources
           ResourceService serviceConf = ((TurbineServices)TurbineServices.getInstance())
  @@ -520,6 +547,12 @@
                   logger.error("Error storing document", e);
               }
           }
  +        
  +        if(ok && enableMessaging)
  +        {
  +            Message msg = createMessage(profile);
  +            Messenger.sendMessage(msg, MessagingService.PSML_UPDATE_SUBJECT);
  +        }
   
           return ok;
       }
  @@ -765,6 +798,11 @@
        */
       public void removeDocument( ProfileLocator locator )
       {
  +        removeDocument(locator, enableMessaging);
  +    }
  +    
  +    public void removeDocument(ProfileLocator locator, boolean sendMessage)
  +    {
           // remove a single document
           String fileName = mapLocatorToFile(locator);
   
  @@ -781,21 +819,30 @@
               logger.error("PSMLManager: unable to resolve file path for "+ file);
           }
   
  -
           synchronized (documents)
           {
               documents.remove(name);
           }
   
           file.delete();
  -
  +        
  +        if(sendMessage)
  +        {
  +            Message msg = createMessage(locator);
  +            Messenger.sendMessage(msg, MessagingService.PSML_UPDATE_SUBJECT);
  +        }
       }
   
       /** Removes all documents for a given user.
        *
        * @param user The user object.
        */
  -    public void removeUserDocuments( JetspeedUser user )
  +    public void removeUserDocuments(JetspeedUser user)
  +    {
  +        removeUserDocuments(user, enableMessaging);
  +    }
  +    
  +    public void removeUserDocuments( JetspeedUser user, boolean sendMessage)
       {
           ProfileLocator locator = Profiler.createLocator();
           locator.setUser(user);
  @@ -823,7 +870,6 @@
               logger.error("PSMLManager: unable to resolve file path for "+ file);
           }
   
  -
           synchronized (documents)
           {
               DirectoryUtils.rmdir(name);
  @@ -848,13 +894,26 @@
               }
           }
   
  +        if(sendMessage)
  +        {
  +            PsmlMessage psmlMessage = new PsmlMessage();
  +            psmlMessage.setUser(user.getUserName());
  +            psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +            Message message = createMessage(psmlMessage);
  +            Messenger.sendMessage(message, MessagingService.PSML_UPDATE_SUBJECT);
  +        }
       }
   
       /** Removes all documents for a given role.
        *
        * @param role The role object.
        */
  -    public void removeRoleDocuments( Role role )
  +    public void removeRoleDocuments(Role role)
  +    {
  +        removeRoleDocuments(role, enableMessaging);
  +    }
  +    
  +    public void removeRoleDocuments(Role role, boolean sendMessage)
       {
           ProfileLocator locator = Profiler.createLocator();
           locator.setRole(role);
  @@ -906,6 +965,15 @@
                   }
               }
           }
  +        
  +        if(sendMessage)
  +        {
  +            PsmlMessage psmlMessage = new PsmlMessage();
  +            psmlMessage.setRole(role.getName());
  +            psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +            Message message = createMessage(psmlMessage);
  +            Messenger.sendMessage(message, MessagingService.PSML_UPDATE_SUBJECT);
  +        }
       }
   
       /** Removes all documents for a given group.
  @@ -914,6 +982,11 @@
        */
       public void removeGroupDocuments( Group group )
       {
  +        removeGroupDocuments(group, enableMessaging);
  +    }
  +    
  +    public void removeGroupDocuments(Group group, boolean sendMessage)
  +    {
           ProfileLocator locator = Profiler.createLocator();
           locator.setGroup(group);
           StringBuffer buffer = new StringBuffer();
  @@ -964,7 +1037,15 @@
                   }
               }
           }
  -
  +        
  +        if(sendMessage)
  +        {
  +            PsmlMessage psmlMessage = new PsmlMessage();
  +            psmlMessage.setGroup(group.getName());
  +            psmlMessage.setAction(PsmlMessage.REMOVE_ACTION);
  +            Message message = createMessage(psmlMessage);
  +            Messenger.sendMessage(message, MessagingService.PSML_UPDATE_SUBJECT);
  +        }
       }
   
   
  @@ -1565,5 +1646,87 @@
           System.out.println("entry is evicting: " + entry.getFile().getName());
       }
   
  +    private Message createMessage(Serializable messageObject)
  +    {
  +        ObjectMessage msg = (ObjectMessage) Messenger.createMessage(MessagingService.OBJECT_MESSAGE);
  +        
  +        try
  +        {
  +            msg.setObject(messageObject);
  +        }
  +        catch (JMSException e)
  +        {
  +            logger.error("Failed to add object to message", e);
  +        }
  +        
  +        return msg;
  +    }
  +
  +
  +    /* (non-Javadoc)
  +     * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
  +     */
  +    public void onMessage(Message message)
  +    {
  +        if(message instanceof ObjectMessage)
  +        {
  +            ObjectMessage objMsg = (ObjectMessage)message;
  +            Object obj = null;
  +            try
  +            {
  +                obj = objMsg.getObject();
  +            }
  +            catch (JMSException e)
  +            {
  +                logger.error("Failed to retrieve object from message.");
  +                return;
  +            }
  +            
  +            if(obj != null)
  +            {
  +                if(obj instanceof ProfileLocator)
  +	            {
  +	                ProfileLocator locator = (ProfileLocator)obj;
  +	                refresh(locator);
  +	            }
  +	            
  +	            if(obj instanceof PsmlMessage)
  +	            {
  +	                PsmlMessage psmlMsg = (PsmlMessage)obj;
  +	                
  +	                String user = psmlMsg.getUser();
  +	                String role = psmlMsg.getRole();
  +	                String group = psmlMsg.getGroup();
  +	                String action = psmlMsg.getAction();
  +	                
  +	                try
  +	                {
  +		                if(user != null)
  +		                {
  +		                    if(PsmlMessage.REMOVE_ACTION.equals(action)) {
  +		                        removeUserDocuments(JetspeedSecurity.getUser(user), false);
  +		                    }
  +		                }
  +		                else if(role != null)
  +		                {
  +		                    if(PsmlMessage.REMOVE_ACTION.equals(action)) {
  +		                        removeRoleDocuments(JetspeedSecurity.getRole(role), false);
  +		                    }
  +		                }
  +		                else if(group != null)
  +		                {
  +		                    if(PsmlMessage.REMOVE_ACTION.equals(action)) {
  +		                        removeGroupDocuments(JetspeedSecurity.getGroup(group), false);
  +		                    }
  +		                }
  +	                }
  +	                catch(JetspeedSecurityException e)
  +	                {
  +	                    logger.error(e);
  +	                }
  +	            }
  +            }
  +        }
  +    }
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org