/*
* @@COPYRIGHT@@
*/
package com.cosylab.acs.maci.plug;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import com.cosylab.acs.maci.Daemon;
import com.cosylab.acs.maci.RemoteException;
import alma.acsdaemon.ContainerDaemonHelper;
/**
* CORBA Deamon Proxy.
*
* @author Matej Sekoranja (matej.sekoranja@cosylab.com)
* @version @@VERSION@@
*/
public class DaemonProxy extends CORBAReferenceSerializator implements Daemon, Serializable
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = -5090533056497509226L;
/**
* CORBA reference.
*/
protected alma.acsdaemon.ContainerDaemon daemon;
/**
* Constructor for DaemonProxy.
* @param daemon CORBA reference, non-<code>null</code>.
*/
public DaemonProxy(alma.acsdaemon.ContainerDaemon daemon)
{
this.daemon = daemon;
}
/**
* @see com.cosylab.acs.maci.Daemon#startContainer(java.lang.String, java.lang.String, short, java.lang.String)
*/
public void startContainer(String containerType, String containerName,
short instanceNumber, String flags) throws RemoteException {
try
{
// @TODO: get typeModifiers from the CDB,
// see http://www.eso.org/projects/alma/develop/acs/OnlineDocs/ACS_docs/schemas/urn_schemas-cosylab-com_Container_1.0/complexType/DeployInfo.html
String[] typeModifiers = new String[0];
daemon.start_container(containerType, containerName, instanceNumber, typeModifiers, flags);
}
catch (Exception ex)
{
RemoteException re = new RemoteException("Failed to invoke 'start_container()' method.", ex);
throw re;
}
}
/**
* Returns the daemon.
* @return alma.acsdaemon.Daemon
*/
public alma.acsdaemon.ContainerDaemon getDaemon()
{
return daemon;
}
/**
* Save the state of the <tt>ContainerProxy</tt> instance to a stream (that
* is, serialize it).
*/
private void writeObject(ObjectOutputStream stream)
throws IOException
{
stream.writeObject(serialize(daemon));
}
/**
* Reconstitute the <tt>ContainerProxy</tt> instance from a stream (that is,
* deserialize it).
*/
private void readObject(ObjectInputStream stream)
throws IOException, ClassNotFoundException
{
try {
daemon = ContainerDaemonHelper.narrow(deserialize((String)stream.readObject()));
}
catch (Exception e) {
// silent here and set reference to null.
// An method after deserialization should clean such invalid reference
daemon = null;
}
}
/**
* Returns a single-line rendition of this instance into text.
*
* @return internal state of this instance
*/
public String toString()
{
StringBuffer sbuff = new StringBuffer();
sbuff.append("DaemonProxy = { ");
sbuff.append("daemon = '");
sbuff.append(daemon);
sbuff.append("' }");
return new String(sbuff);
}
/**
* @see java.lang.Object#equals(Object)
*/
public boolean equals(Object obj) {
if (daemon == null)
return (obj == null);
else if (obj instanceof alma.acsdaemon.ContainerDaemon) {
try {
//return daemon.toString().equals(((alma.acsdaemon.ContainerDaemon) obj).toString());
return daemon._is_equivalent((alma.acsdaemon.ContainerDaemon) obj);
} catch (Exception ex) {
return false;
}
} else if (obj instanceof DaemonProxy) {
try {
//return daemon.toString().equals(((DaemonProxy) obj).getDaemon().toString());
return daemon._is_equivalent(((DaemonProxy) obj).getDaemon());
} catch (Exception ex) {
return false;
}
} else
return false;
}
}