Package org.apache.ws.muws.v1_0.topics.impl

Source Code of org.apache.ws.muws.v1_0.topics.impl.XmlBeansManagementEventTopicImpl

package org.apache.ws.muws.v1_0.topics.impl;

import org.apache.ws.XmlObjectWrapper;
import org.apache.ws.muws.impl.CategoryImpl;
import org.apache.ws.muws.v1_0.MuwsConstants;
import org.apache.ws.muws.v1_0.events.ManagementEvent;
import org.apache.ws.muws.v1_0.events.Situation;
import org.apache.ws.muws.v1_0.events.impl.SituationImpl;
import org.apache.ws.muws.v1_0.events.impl.XmlBeansManagementEvent;
import org.apache.ws.muws.v1_0.topics.ManagementEventTopic;
import org.apache.ws.notification.topics.impl.TopicImpl;
import org.apache.ws.resource.properties.ResourcePropertyValueChangeEvent;
import org.apache.ws.resource.i18n.MessagesImpl;
import org.apache.ws.util.XmlBeanUtils;
import org.apache.ws.util.i18n.Messages;
import org.apache.xmlbeans.XmlObject;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.oasisOpen.docs.wsdm.x2004.x12.muws.wsdmMuwsPart1.ManagementEventDocument;


/**
* A ManagementEvent topic listener for generic management events and PropChange->Management Events.
*
* @author Sal Campana
*/
public class XmlBeansManagementEventTopicImpl extends TopicImpl implements ManagementEventTopic
{
    private static final Log LOG = LogFactory.getLog( XmlBeansManagementEventTopicImpl.class );
    private static final Messages MSG = MessagesImpl.getInstance();

    private ManagementEvent m_propChangeManagementEvent;


    public XmlBeansManagementEventTopicImpl( String capabilityName )
    {
        super( capabilityName );

    }

    /**
     * This operation is used to set the default ManagementEvent to
     * be used when sending Property Changed Management Events.
     *
     * Note: The object must implement XmlObjectWrapper,  the getXmlObject() operation will be used to get a new instance
     *       of the Management Event for use to throw the event.
     *
     * @param me
     */
    public void setPropChangeManagemntEvent (ManagementEvent me)
    {
        if(!(me instanceof XmlObjectWrapper))
        {
            throw new IllegalArgumentException("The Management Event must implement the XmlObjectWrpper interface.");
        }
        m_propChangeManagementEvent = me;
    }

    public void propertyChanged(ResourcePropertyValueChangeEvent event)
    {
        XmlObject me = buildManagementEvent(event);

       Object msg;
        if ( me instanceof XmlObjectWrapper )
        {
            msg = ((XmlObjectWrapper)me).getXmlObject();
        }
        else
        {
            msg = me;
        }
        try
        {
            publish( msg );
        }
        catch ( Exception e )
        {
            // TODO: do we want to throw this and cause the SetRP request to fault?
            e.printStackTrace();
        }
    }

    private XmlObject buildManagementEvent(ResourcePropertyValueChangeEvent event)
    {
        ManagementEventDocument me;
        if(m_propChangeManagementEvent != null)
        {
            me = (ManagementEventDocument) ((XmlObjectWrapper)m_propChangeManagementEvent).getXmlObject();
        }
        else
        {
            Situation situation = new SituationImpl(new CategoryImpl(MuwsConstants.SITUATION_OTHER));
            XmlBeansManagementEvent xme = new XmlBeansManagementEvent(situation);
            me = (ManagementEventDocument) ((XmlObjectWrapper)xme).getXmlObject();
        }

        org.oasisOpen.docs.wsdm.x2004.x12.muws.wsdmMuwsPart1.ManagementEventType managementEvent = me.getManagementEvent();
        XmlBeanUtils.addChildElement(managementEvent, ((XmlObjectWrapper)event).getXmlObject());
        return me;
    }


    /**
     * This method is used to send a ManagementEvent to subscribers to this topic.
     *
     * precondition: The param ManagementEvent should be complete and not rely on
     *              any setters in this topic.
     *
     * @param me
     */
    public void publish(ManagementEvent me)
    {
       Object msg;
        if ( me instanceof XmlObjectWrapper )
        {
            msg = ((XmlObjectWrapper)me).getXmlObject();
        }
        else
        {
            msg = me;
        }
        try
        {
            publish( msg );
        }
        catch ( Exception e )
        {
            // TODO: do we want to throw this and cause the SetRP request to fault?
            e.printStackTrace();
        }
    }

}
TOP

Related Classes of org.apache.ws.muws.v1_0.topics.impl.XmlBeansManagementEventTopicImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.