package scs.event_service.servant; import java.util.ArrayList; import org.omg.PortableServer.POAPackage.ServantNotActive; import org.omg.PortableServer.POAPackage.WrongPolicy; import scs.core.ComponentId; import scs.core.FacetDescription; import scs.core.IMetaInterface; import scs.core.IMetaInterfaceHelper; import scs.core.IReceptacles; import scs.core.IReceptaclesHelper; import scs.core.servant.IComponentServant; import scs.core.servant.IMetaInterfaceServant; import scs.core.servant.IReceptaclesServant; import scs.event_service.EventSink; import scs.event_service.EventSinkHelper; /** * Classe que cont�m a implementa��o das funcionalidades de um canal de eventos * @author Eduardo Fonseca/Luiz Marques * */ public class EventChannelServant extends IComponentServant { private EventSink sink = null; private EventSinkChannelServant evSinkServant = null; private IReceptacles source = null; private EventSourceServant evSourceServant = null; FacetDescription[] facets = null; /** * Inner class que implementa a descri��o das interfaces de um canal de eventos */ private class ChannelMetaInterface extends IMetaInterfaceServant { IComponentServant icompServant = null; public ChannelMetaInterface( IComponentServant servant ) { this.icompServant = servant; } @Override public ArrayList<IReceptaclesServant> getIReceptaclesServants() { ArrayList<IReceptaclesServant> result = new ArrayList<IReceptaclesServant>(); result.add(evSourceServant); return result; } @Override public IComponentServant getIComponentServant() { return this.icompServant; } } private static final String FACET_EVTSINK = "EventSink"; private static final String IFACE_EVTSINK = "scs::event_service::EventSink"; private static final String FACET_EVTSOURCE = "EventSource"; private static final String IFACE_EVTSOURCE = "scs::core::IReceptacles"; private static final String FACET_IMETAIFACE = "IMetaInterface"; private static final String IFACE_IMETAIFACE = "scs::core::IMetaInterface"; IMetaInterface metaInterface = null; ChannelMetaInterface metaInterfaceServant = null; /** * Retorna o EventSink, criando-o caso ainda n�o exista * @return objeto Corba de interface EventSink */ private EventSink getEventSink() { if(evSinkServant == null) { this.evSinkServant = new EventSinkChannelServant(this); try { this.sink = EventSinkHelper.narrow( this._poa().servant_to_reference(this.evSinkServant)); } catch (ServantNotActive e) { e.printStackTrace(); } catch (WrongPolicy e) { e.printStackTrace(); } } return sink; } /** * Retorna o EventSource, criando-o caso ainda n�o exista * @return objeto Corba de interface EventSource */ private IReceptacles getEventSource() { if(this.evSourceServant == null) { this.evSourceServant= new EventSourceServant(this); try { this.source = IReceptaclesHelper.narrow( this._poa().servant_to_reference(this.evSourceServant)); } catch (ServantNotActive e) { e.printStackTrace(); } catch (WrongPolicy e) { e.printStackTrace(); } } return source; } /** * Retorna o IMetaInterface deste objeto, criando-o caso n�o exista. * @return objeto Corba de interface IMetaInterface */ private IMetaInterface getMetaInterface() { if( this.metaInterfaceServant == null ) { this.metaInterfaceServant = new ChannelMetaInterface(this); try { this.metaInterface = IMetaInterfaceHelper.narrow( this._poa().servant_to_reference(this.metaInterfaceServant)); } catch (ServantNotActive e) { e.printStackTrace(); } catch (WrongPolicy e) { e.printStackTrace(); } } return this.metaInterface; } /* (non-Javadoc) * @see SCS.servant.IComponentServant#createFacets() */ @Override protected ArrayList<FacetDescription> createFacets() { ArrayList<FacetDescription> facets = new ArrayList<FacetDescription>(); FacetDescription f = new FacetDescription(); f.interface_name = IFACE_EVTSINK; f.name = FACET_EVTSINK; f.facet_ref = getEventSink(); facets.add(f); f = new FacetDescription(); f.interface_name = IFACE_EVTSOURCE; f.name = FACET_EVTSOURCE; f.facet_ref = getEventSource(); facets.add(f); f = new FacetDescription(); f.interface_name = IFACE_IMETAIFACE; f.name = FACET_IMETAIFACE; f.facet_ref = getMetaInterface(); facets.add(f); return facets; } @Override protected boolean doShutdown() { return true; } @Override protected boolean doStartup() { return true; } }