Package com.lightcrafts.media.jai.rmi

Source Code of com.lightcrafts.media.jai.rmi.JAIRMIUtil

/*
* $RCSfile: JAIRMIUtil.java,v $
*
* Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
*
* Use is subject to license terms.
*
* $Revision: 1.1 $
* $Date: 2005/02/11 04:56:51 $
* $State: Exp $
*/package com.lightcrafts.media.jai.rmi;

import java.awt.RenderingHints;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.ParameterBlock;
import java.io.Serializable;
import java.util.Vector;
import java.util.Hashtable;
import com.lightcrafts.mediax.jai.RenderedOp;
import com.lightcrafts.mediax.jai.PlanarImage;
import com.lightcrafts.mediax.jai.remote.RemoteRenderedOp;
import com.lightcrafts.mediax.jai.remote.SerializableRenderedImage;

/**
* A class containing utility methods used for the implementation of
* the "jairmi" protocol.
*/
public final class JAIRMIUtil {
    /**
     * Replaces any element in the source Vector which is an ID
     * with the server-side node that is associated with the
     * given ID.
     */
    public static Vector replaceIdWithSources(Vector srcs,
                Hashtable nodes,
                String opName,
                RenderingHints hints) {
 
  Vector replacedSrcs = new Vector();
  Object obj;
  for (int i=0; i<srcs.size(); i++) {
      obj = srcs.elementAt(i);
      if (obj instanceof String){
    String serverNodeDesc = (String)obj;
    int index = serverNodeDesc.indexOf("::");
    boolean diffServer = index != -1;
    if (diffServer){
        // If the source is on a different server, create
        // a RMIServerProxy to access it.
        replacedSrcs.add(new RMIServerProxy(serverNodeDesc,
              opName,
              hints));
    } else {
        // If the source is on the same server, get it
        // from the nodes Hashtable and set it as a source
        // in the sources Vector.
        replacedSrcs.add(nodes.get(Long.valueOf(serverNodeDesc)));
    }
      } else {
    PlanarImage pi =
        PlanarImage.wrapRenderedImage((RenderedImage)obj);
    replacedSrcs.add(pi);
      }
  }
 
  return replacedSrcs;
    }
   
    /**
     * Replaces any source that is an <code>RMIServerProxy</code> with
     * the id of the server-side node that is represented by the
     * <code>RMIServerProxy</code>.
     */
    public static  Vector replaceSourcesWithId(Vector srcs,
                 String serverName) {

  Vector replacedSrcs = new Vector();
  Object obj;
  for (int i=0; i<srcs.size(); i++) {
      obj = srcs.elementAt(i);
      if (obj instanceof RMIServerProxy) {
    RMIServerProxy rmisp = (RMIServerProxy)obj;
    if (rmisp.getServerName().equalsIgnoreCase(serverName)){
        replacedSrcs.add(rmisp.getRMIID().toString());
    } else {
        String str =
      new String(rmisp.getServerName()+
           "::"+rmisp.getRMIID());
        replacedSrcs.add(str);
    }
      } else if (obj instanceof RemoteRenderedOp){
    RemoteRenderedOp rrop = (RemoteRenderedOp)obj;
    Object ai = rrop.getRendering();
    if (ai instanceof RMIServerProxy) {
        RMIServerProxy rmisp = (RMIServerProxy)ai;
        if (rmisp.getServerName().equalsIgnoreCase(serverName)){
      replacedSrcs.add(rmisp.getRMIID().toString());
        } else {
      String str =
          new String(rmisp.getServerName()+
               "::"+rmisp.getRMIID());
      replacedSrcs.add(str);
        }
    } else {
        RenderedImage ri = (RenderedImage)ai;
        replacedSrcs.add(new SerializableRenderedImage(ri));
    }
      } else if (obj instanceof RenderedOp){
    RenderedOp rop = (RenderedOp)obj;
    replacedSrcs.add(new SerializableRenderedImage(
            (RenderedImage)rop.getRendering()));
      } else if (obj instanceof Serializable) {
    replacedSrcs.add(obj);
      } else if (obj instanceof RenderedImage) {
    RenderedImage ri = (RenderedImage)obj;
    replacedSrcs.add(new SerializableRenderedImage(ri));
      }
  }

  return replacedSrcs;               
    }

    /**
     * Replace an image with an equivalent representation that can be accessed
     * on the server.
     */
    public static Object replaceImage(RenderedImage obj,
              String thisServerName) {

  if (obj instanceof RMIServerProxy) {

      RMIServerProxy rmisp = (RMIServerProxy)obj;
      if (rmisp.getServerName().equalsIgnoreCase(thisServerName))
    return "::" + rmisp.getRMIID();
      else
    return rmisp.getServerName() + "::" + rmisp.getRMIID() +
        ";;" + rmisp.getOperationName();

  } else if (obj instanceof RenderedOp) {
     
      RenderedImage rendering = ((RenderedOp)obj).getRendering();
      return replaceImage(rendering, thisServerName);

  } else if (obj instanceof RenderedImage) {

      if (obj instanceof Serializable)
    return obj;
      else
    return new SerializableRenderedImage(obj);
  }

  return obj;
    }

    public static void checkClientParameters(ParameterBlock pb,
               String thisServerName) {

  // XXX 07/18/01, aastha TODO
  // This code should check every parameter to test Serializability
  // If parameter is Serializable, then keep it as is
  // If not serializable then use SerializerFactory to serialize it
  // If that doesn't work, throw an Exception
  // Note that parameters that are images may still need to be treated
  // differently as in the code below.

  if (pb == null)
      return;

  int numParams = pb.getNumParameters();
  Vector params = pb.getParameters();

  Object obj;
  for (int i=0; i<numParams; i++) {
      obj = params.elementAt(i);
     
      if (obj == null) {

    continue;

      } else if (obj instanceof RenderedImage) {

    pb.set(replaceImage((RenderedImage)obj, thisServerName), i);

      }
  }
    }

    public static void checkClientParameters(Vector parameters,
               String thisServerName) {

  // XXX 07/18/01, aastha TODO
  // This code should check every parameter to test Serializability
  // If parameter is Serializable, then keep it as is
  // If not serializable then use SerializerFactory to serialize it
  // If that doesn't work, throw an Exception
  // Note that parameters that are images may still need to be treated
  // differently as in the code below.

  if (parameters == null)
      return;

  Object obj;
  for (int i=0; i<parameters.size(); i++) {
      obj = parameters.elementAt(i);
     
      if (obj == null) {

    continue;

      } else if (obj instanceof RenderedImage) {

    parameters.set(i, replaceImage((RenderedImage)obj,
                 thisServerName));

      }
  }
    }

    /**
     * Method to convert a String representation of an image into the
     * image itself. The String representation is supplied by the client
     * generally as a parameter in the ParameterBlock.
     */
    public static Object replaceStringWithImage(String s, Hashtable nodes) {
  String paramServerName, opName;
  int index1 = s.indexOf("::");
  int index2 = s.indexOf(";;");
  Long id;

  if (index1 == -1) {
      return s;
  } else if (index2 == -1) {
      id = Long.valueOf(s.substring(index1 + 2));
      return nodes.get(id);

  } else {
      // Extract the RMI ID from the servername string and
      // replace the original serverName string with one of
      // the usual type.
      id = Long.valueOf(s.substring(index1+2, index2));
      paramServerName = s.substring(0, index1);
      opName = s.substring(index2+2);

      // Create an RMIServerProxy to access the image on
      // the other server.
      return new RMIServerProxy((paramServerName + "::" + id),
              opName,
              null);
  }
    }

    /**
     * Method to check whether any of the parameters in the ParameterBlock
     * are replacement representations of images.
     */
    public static void checkServerParameters(ParameterBlock pb,
               Hashtable nodes) {

  if (pb == null)
      return;

  int numParams = pb.getNumParameters();
  Vector params = pb.getParameters();

  Object obj;
  for (int i=0; i<numParams; i++) {
      obj = params.elementAt(i);

      if (obj == null) {
    continue;
      } else if (obj instanceof String) {
    pb.set(replaceStringWithImage((String)obj, nodes), i);
      }
  }
    }

    /**
     * Method to check whether any of the parameters in the ParameterBlock
     * are replacement representations of images.
     */
    public static void checkServerParameters(Vector parameters,
               Hashtable nodes) {

  if (parameters == null)
      return;

  Object obj;
  for (int i=0; i<parameters.size(); i++) {
      obj = parameters.elementAt(i);

      if (obj == null) {
    continue;
      } else if (obj instanceof String) {
    parameters.set(i, replaceStringWithImage((String)obj, nodes));
      }
  }
    }

}
TOP

Related Classes of com.lightcrafts.media.jai.rmi.JAIRMIUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.