package scs.demos.philosopher.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.servant.IComponentServant;
import scs.demos.philosopher.Observer;
import scs.demos.philosopher.ObserverHelper;
public class ObserverComponent extends IComponentServant {
private ObserverServant obsServant = null;
private Observer observer = null;
private final static String IFACE_OBSERVER = "scs::demos::philosopher::Observer";
private final static String FACET_OBSERVER = "Observer";
@Override
protected ArrayList<FacetDescription> createFacets() {
ArrayList<FacetDescription> facets = new ArrayList<FacetDescription>();
FacetDescription fd = new FacetDescription();
fd.interface_name = IFACE_OBSERVER;
fd.name= FACET_OBSERVER;
fd.facet_ref = getObserver();
facets.add(fd);
return facets;
}
private Observer getObserver() {
if( this.obsServant == null ) {
try {
this.obsServant = new ObserverServant();
this.observer = ObserverHelper.narrow(this._poa().servant_to_reference(this.obsServant));
} catch (ServantNotActive e) {
e.printStackTrace();
} catch (WrongPolicy e) {
e.printStackTrace();
}
}
return this.observer;
}
@Override
protected boolean doShutdown() {
return true;
}
@Override
protected boolean doStartup() {
return true;
}
}