/*
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package org.jboss.com.sun.corba.se.impl.ior;
import java.util.Iterator;
import org.jboss.com.sun.corba.se.spi.ior.IOR;
import org.jboss.com.sun.corba.se.spi.ior.IORFactory;
import org.jboss.com.sun.corba.se.spi.ior.IORTemplate;
import org.jboss.com.sun.corba.se.spi.ior.IdentifiableContainerBase;
import org.jboss.com.sun.corba.se.spi.ior.IdentifiableFactoryFinder;
import org.jboss.com.sun.corba.se.spi.ior.ObjectId;
import org.jboss.com.sun.corba.se.spi.ior.ObjectKeyTemplate;
import org.jboss.com.sun.corba.se.spi.ior.TaggedProfileTemplate;
import org.jboss.com.sun.corba.se.spi.orb.ORB;
import org.omg.CORBA_2_3.portable.InputStream;
import org.omg.CORBA_2_3.portable.OutputStream;
/**
* This class is a container of TaggedProfileTemplates.
*
* @author
*/
public class IORTemplateImpl extends IdentifiableContainerBase implements IORTemplate
{
private ObjectKeyTemplate oktemp;
public boolean equals(Object obj)
{
if (obj == null)
return false;
if (!(obj instanceof IORTemplateImpl))
return false;
IORTemplateImpl other = (IORTemplateImpl) obj;
return super.equals(obj) && oktemp.equals(other.getObjectKeyTemplate());
}
public int hashCode()
{
return super.hashCode() ^ oktemp.hashCode();
}
public ObjectKeyTemplate getObjectKeyTemplate()
{
return oktemp;
}
public IORTemplateImpl(ObjectKeyTemplate oktemp)
{
this.oktemp = oktemp;
}
public IOR makeIOR(ORB orb, String typeid, ObjectId oid)
{
return new IORImpl(orb, typeid, this, oid);
}
public boolean isEquivalent(IORFactory other)
{
if (!(other instanceof IORTemplate))
return false;
IORTemplate list = (IORTemplate) other;
Iterator<Object> thisIterator = iterator();
Iterator<Object> listIterator = list.iterator();
while (thisIterator.hasNext() && listIterator.hasNext())
{
TaggedProfileTemplate thisTemplate = (TaggedProfileTemplate) thisIterator.next();
TaggedProfileTemplate listTemplate = (TaggedProfileTemplate) listIterator.next();
if (!thisTemplate.isEquivalent(listTemplate))
return false;
}
return (thisIterator.hasNext() == listIterator.hasNext())
&& getObjectKeyTemplate().equals(list.getObjectKeyTemplate());
}
/**
* Ensure that this IORTemplate and all of its profiles can not be modified. This overrides the method inherited
* from FreezableList through IdentifiableContainerBase.
*/
public void makeImmutable()
{
makeElementsImmutable();
super.makeImmutable();
}
public void write(OutputStream os)
{
oktemp.write(os);
EncapsulationUtility.writeIdentifiableSequence(this, os);
}
public IORTemplateImpl(InputStream is)
{
ORB orb = (ORB) (is.orb());
IdentifiableFactoryFinder finder = orb.getTaggedProfileTemplateFactoryFinder();
oktemp = orb.getObjectKeyFactory().createTemplate(is);
EncapsulationUtility.readIdentifiableSequence(this, finder, is);
makeImmutable();
}
}