/* * 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(); } }