Package ch.rakudave.jnetmap.view.jung

Source Code of ch.rakudave.jnetmap.view.jung.VertexTransformers

package ch.rakudave.jnetmap.view.jung;

import java.awt.Image;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.util.List;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import org.apache.commons.collections15.Transformer;

import ch.rakudave.jnetmap.model.IF.NetworkIF;
import ch.rakudave.jnetmap.model.device.Device;
import ch.rakudave.jnetmap.model.device.Device.Type;
import ch.rakudave.jnetmap.util.Icons;
import edu.uci.ics.jung.visualization.FourPassImageShaper;
import edu.uci.ics.jung.visualization.decorators.EllipseVertexShapeTransformer;
import edu.uci.ics.jung.visualization.decorators.VertexIconShapeTransformer;
import edu.uci.ics.jung.visualization.picking.PickedState;

/**
* Custom JUNG transformers for vertices
* @author rakudave
*/
public class VertexTransformers {

  public static Transformer<Device, Icon> iconTransformer(final PickedState<Device> pi) {
    return new Transformer<Device, Icon>() {
      @Override
      public Icon transform(Device arg0) {
        return getIcon(arg0, (pi.isPicked(arg0))?"_s":"");
      }
    };
   
  }
 
  private static Icon getIcon(Device d, String flag) {
    Type type = d.getType();
    if (type != null) {
      if (type.equals(Type.Other)) {
        ImageIcon img = Icons.fromBase64(d.getOtherID());
        if (img != null) return img;
      } else {
        return Icons.getCisco(type.toString().toLowerCase() + flag);
      }
    }
    return Icons.getCisco("workstation" + flag);
  }
 
  public static Transformer<Device, Shape> shapeTransformer() {
    return new DeviceVertexIconShapeTransformer<Device>(new EllipseVertexShapeTransformer<Device>());
  }
 
  public static Transformer<Device, String> tooltipTransformer() {
    return new Transformer<Device, String>() {
      @Override
      public String transform(Device arg0) {
        List<NetworkIF> nifs = arg0.getInterfaces();
        if (nifs.isEmpty()) return "---";
        int i = 0;
        StringBuffer sb = new StringBuffer("<html>");
        for (NetworkIF nif : nifs) {
          sb.append(nif.getName());
          if (nif.getAddress() != null) {
            sb.append(": ");
            sb.append(nif.getAddress().getHostAddress());
          }
          if (++i != nifs.size()) sb.append("<br />");
        }
        return sb.append("</html>").toString();
      }
    };
  }
 
  public static class DeviceVertexIconShapeTransformer<V> extends VertexIconShapeTransformer<V> {

        public DeviceVertexIconShapeTransformer(Transformer<V,Shape> delegate) {
            super(delegate);
        }

        public Shape transform(V v) {
      Icon icon = getIcon((Device) v, "");
      if (icon != null && icon instanceof ImageIcon) {
        Image image = ((ImageIcon) icon).getImage();
        Shape shape = shapeMap.get(image);
        if (shape == null) {
          shape = FourPassImageShaper.getShape(image, 30);
                    if(shape.getBounds().getWidth() > 0 &&
                            shape.getBounds().getHeight() > 0) {
                        int width = image.getWidth(null);
                        int height = image.getHeight(null);
                        AffineTransform transform =
                            AffineTransform.getTranslateInstance(-width / 2, -height / 2);
                        shape = transform.createTransformedShape(shape);
                        shapeMap.put(image, shape);
                    }
        }
        return shape;
      } else {
        return delegate.transform(v);
      }
    }
    }
}
TOP

Related Classes of ch.rakudave.jnetmap.view.jung.VertexTransformers

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.