All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arjuna.ats.internal.jts.orbspecific.jacorb.recoverycoordinators.RecoverIOR Maven / Gradle / Ivy

/*
 * JBoss, Home of Professional Open Source
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors
 * as indicated by the @author tags.
 * See the copyright.txt in the distribution for a full listing
 * of individual contributors.
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
 * of the GNU Lesser General Public License, v. 2.1.
 * This program is distributed in the hope that it will be useful, but WITHOUT A
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
 * You should have received a copy of the GNU Lesser General Public License,
 * v.2.1 along with this distribution; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA  02110-1301, USA.
 *
 * (C) 2005-2006,
 * @author JBoss Inc.
 */
/**
 * @author Malik SAHEB ([email protected])
 * @version $Id
 */

package com.arjuna.ats.internal.jts.orbspecific.jacorb.recoverycoordinators;

import java.util.List;

import org.jacorb.orb.CDROutputStream;
import org.jacorb.orb.ORB;
import org.jacorb.orb.ParsedIOR;
import org.jacorb.orb.iiop.IIOPProfile;
import org.omg.IOP.IOR;
import org.omg.IOP.TaggedProfile;
import org.omg.IOP.TaggedProfileHolder;

import com.arjuna.ats.internal.jts.ORBManager;

public class RecoverIOR
{

    private static class RecoverableParsedIOR extends ParsedIOR {
	public RecoverableParsedIOR(String ior) {
        this((ORB)ORBManager.getORB().orb(), ior) ;
    }

    public RecoverableParsedIOR(final ORB orb, final String ior) {
	    //super(ior, orb, orb.getConfiguration().getNamedLogger("arjuna.recovery.parsedior")); // old (JacORB 2.2)
		super(orb, ior); // new (JacORB 2.3)
	}


	public IOR newObjectKey(String objectId) {

	    String the_object_key = new String(get_object_key());
	    int position = the_object_key.indexOf("RecoveryManager");
	    String new_object_key = the_object_key.substring(0, position).concat(objectId);

	    IOR new_ior = new IOR();
	    List profiles = getProfiles();
	    new_ior.type_id = getTypeId();
	    new_ior.profiles = new TaggedProfile[profiles.size()];

	    for (int i = 0; i < profiles.size(); i++)
	    {
		IIOPProfile pb = (IIOPProfile) profiles.get(i);
		IIOPProfile new_pb = (IIOPProfile) pb.copy();

		new_pb.set_object_key(new_object_key.getBytes());

		new_ior.profiles[i] = new TaggedProfile();
		new_ior.profiles[i].tag = 0; // IIOP

		TaggedProfileHolder holder = new TaggedProfileHolder(new_ior.profiles[i]);

		new_pb.marshal(holder, null);
		new_ior.profiles[i].profile_data = holder.value.profile_data;
	    }

	    return new_ior;
	}

	// It appears that the following method do the same role as above
	public IOR newIOR(String objectId)
	{
	    String the_object_key = new String(get_object_key());
	    int position = the_object_key.indexOf("RecoveryManager");
	    String new_object_key = the_object_key.substring(0, position).concat(objectId);
	    IOR new_ior = ParsedIOR.createObjectIOR(getEffectiveProfile());
	    return new_ior;
         }


	// Sanity check.
	public void printInfo ()
	{
	    IIOPProfile profile = (IIOPProfile) getEffectiveProfile();

	    System.out.println("\n Print some Information -------------");
	    System.out.println("Object ID "+ getIDString());
	    System.out.println("Type Name "+ getTypeId());
	    System.out.println("Host Address "+ profile.getAddress());
	    System.out.println("Object Key "+ new String(get_object_key()));
	    System.out.println("\n\n");
	}

    }

    public static String newObjectKey (String ior, String Key)
    {
	RecoverableParsedIOR pior = new RecoverableParsedIOR(ior);
	IOR new_ior = pior.newObjectKey(Key);
	//IOR new_ior = pior.newIOR(Key);
	return iorToString(new_ior);
    }


    public static void printIORinfo(String ior)
    {
	RecoverableParsedIOR pior = new RecoverableParsedIOR(ior);
	pior.printInfo();
    }


    private static String iorToString(IOR ior) {

	try
	   {
	       CDROutputStream out = new CDROutputStream();

	       // endianness = false, big-endian
	       out.write_boolean(false);
	       org.omg.IOP.IORHelper.write(out, ior);

	       byte bytes[] = out.getBufferCopy();
	       StringBuffer sb = new StringBuffer("IOR:");
	       for (int j=0; j




© 2015 - 2024 Weber Informatics LLC | Privacy Policy