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

gdt.jgui.entity.graph.JGraphRenderer Maven / Gradle / Ivy

package gdt.jgui.entity.graph;
/*
 * Copyright 2016 Alexander Imas
 * This file is extension of JEntigrator.

    JEntigrator is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    JEntigrator 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 for more details.

    You should have received a copy of the GNU General Public License
    along with JEntigrator.  If not, see .
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Paint;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Stack;
import java.util.Timer;
import java.util.logging.Logger;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections15.Transformer;
import edu.uci.ics.jung.algorithms.layout.AbstractLayout;
import edu.uci.ics.jung.algorithms.layout.FRLayout;
import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
import edu.uci.ics.jung.algorithms.layout.Layout;
import edu.uci.ics.jung.algorithms.layout.util.RandomLocationTransformer;
import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.graph.Graph;
import edu.uci.ics.jung.graph.util.EdgeType;
import edu.uci.ics.jung.samples.VertexImageShaperDemo.DemoVertexIconShapeTransformer;
import edu.uci.ics.jung.samples.VertexImageShaperDemo.DemoVertexIconTransformer;
import edu.uci.ics.jung.samples.VertexImageShaperDemo.PickWithIconListener;
import edu.uci.ics.jung.samples.VertexImageShaperDemo.VertexStringerImpl;
import edu.uci.ics.jung.visualization.GraphZoomScrollPane;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import edu.uci.ics.jung.visualization.control.CrossoverScalingControl;
import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
import edu.uci.ics.jung.visualization.control.ScalingControl;
import edu.uci.ics.jung.visualization.decorators.EllipseVertexShapeTransformer;
import edu.uci.ics.jung.visualization.decorators.PickableEdgePaintTransformer;
import edu.uci.ics.jung.visualization.decorators.PickableVertexPaintTransformer;
import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
import edu.uci.ics.jung.visualization.layout.ObservableCachingLayout;
import edu.uci.ics.jung.visualization.picking.PickedState;
import edu.uci.ics.jung.visualization.renderers.DefaultEdgeLabelRenderer;
import edu.uci.ics.jung.visualization.renderers.DefaultVertexLabelRenderer;
import gdt.data.entity.BaseHandler;
import gdt.data.entity.EdgeHandler;
import gdt.data.entity.EntityHandler;
import gdt.data.entity.GraphHandler;
import gdt.data.entity.NodeHandler;
import gdt.data.entity.facet.ExtensionHandler;
import gdt.data.entity.facet.FieldsHandler;
import gdt.data.grain.Core;
import gdt.data.grain.Locator;
import gdt.data.grain.Sack;
import gdt.data.grain.Support;
import gdt.data.store.Entigrator;
import gdt.jgui.console.JConsoleHandler;
import gdt.jgui.console.JContext;
import gdt.jgui.console.JMainConsole;
import gdt.jgui.console.JRequester;
import gdt.jgui.entity.JEntitiesPanel;
import gdt.jgui.entity.JEntityFacetPanel;
import gdt.jgui.entity.JEntityPrimaryMenu;
import gdt.jgui.tool.AutocompleteJComboBox;
import gdt.jgui.tool.JTextEditor;
/**
 * This context visualize the graph.
 *  * @author imasa
 *
 */

public class JGraphRenderer extends JPanel implements JContext , JRequester
, MouseMotionListener{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Logger LOGGER=Logger.getLogger(getClass().getName());
	private static final String ACTION_CREATE_GRAPH="action create graph";
	private JMainConsole console;
	private String entihome$;
    private String entityKey$;
    private String entityLabel$;
    private Sack graphEntity;
   private String locator$;
   int v=-1;
   int b=-1;
  private JPopupMenu popup;
    String requesterResponseLocator$;
    AutocompleteJComboBox searchBox ;
private VisualizationViewer vv = null;

private AbstractLayout layout = null;

    Timer timer;
    DirectedSparseGraph graph;
    
    boolean done;

    protected JButton switchLayout;

    public static final int EDGE_LENGTH = 100;
    Integer v_prev = null;
/**
 * The default constructor
 */
    public JGraphRenderer()
  	{
  	    super();
  	    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
  	    
  	}
    /**
     * Response on call from the other context.
     *	@param console main console
     *  @param locator$ action's locator 
     */  
	@Override
	public void response(JMainConsole console, String locator$) {
//		System.out.println("JGraphrenderer:response:"+Locator.remove(locator$,Locator.LOCATOR_ICON ));
		try{
			Properties locator=Locator.toProperties(locator$);
			String action$=locator.getProperty(JRequester.REQUESTER_ACTION);
			entihome$=locator.getProperty(Entigrator.ENTIHOME);
			Entigrator entigrator=console.getEntigrator(entihome$);
			String text$=locator.getProperty(JTextEditor.TEXT);

			if(ACTION_CREATE_GRAPH.equals(action$)){
				Sack newEntity=entigrator.ent_new("graph", text$);
				newEntity.createElement("field");
				newEntity.putElementItem("field", new Core(null,"name","value"));
				newEntity.createElement("fhandler");
				newEntity.putElementItem("fhandler", new Core(null,GraphHandler.class.getName(),GraphHandler.EXTENSION_KEY));
				newEntity.putElementItem("fhandler", new Core(null,FieldsHandler.class.getName(),null));
				newEntity.createElement("jfacet");
				newEntity.putElementItem("jfacet", new Core("gdt.jgui.entity.graph.JGraphFacetAddItem",EdgeHandler.class.getName(),"gdt.jgui.entity.graph.JGraphFacetOpenItem"));
				newEntity.putAttribute(new Core (null,"icon","graph.png"));
				entigrator.save(newEntity);
				entigrator.ent_assignProperty(newEntity, "fields", text$);
				entigrator.ent_assignProperty(newEntity, "graph", text$);
				String icons$=entihome$+"/"+Entigrator.ICONS;
				Support.addHandlerIcon(JGraphRenderer.class, "graph.png", icons$);
				newEntity=entigrator.ent_reindex(newEntity);
				JEntityFacetPanel efp=new JEntityFacetPanel(); 
				String efpLocator$=efp.getLocator();
				efpLocator$=Locator.append(efpLocator$,Locator.LOCATOR_TITLE,newEntity.getProperty("label"));
				efpLocator$=Locator.append(efpLocator$, Entigrator.ENTIHOME, entihome$);
				efpLocator$=Locator.append(efpLocator$, EntityHandler.ENTITY_KEY, newEntity.getKey());
				efpLocator$=Locator.append(efpLocator$, EntityHandler.ENTITY_LABEL, newEntity.getProperty("label"));
				JEntityPrimaryMenu.reindexEntity(console, efpLocator$);
				Stack s=console.getTrack();
				s.pop();
				console.setTrack(s);
				JConsoleHandler.execute(console, efpLocator$);
				return;
			}
			}catch(Exception e){
			Logger.getLogger(getClass().getName()).severe(e.toString());
		}
	}
/**
 * Get the context panel.
 * @return the context panel.
 */
	@Override
	public JPanel getPanel() {
		return this;
	}
	 /**
		 * Get the context menu.
		 * @return the context menu.
		 */
	@Override
	public JMenu getContextMenu() {
		final JMenu	menu=new JMenu("Context");
		   menu.setName("Context");
		   menu.addMenuListener(new MenuListener(){
				@Override
				public void menuSelected(MenuEvent e) {
					menu.removeAll();
					//mxGraphComponent graphComponent = new mxGraphComponent(graph);
					JMenuItem edgesItem = new JMenuItem("Edges");
					 edgesItem.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {
							try{
						
								JGraphEdgesPanel ep=new JGraphEdgesPanel();
								String ep$=ep.getLocator();
								ep$=Locator.append(ep$, Entigrator.ENTIHOME, entihome$);
								ep$=Locator.append(ep$, EntityHandler.ENTITY_KEY, entityKey$);
								ep$=Locator.append(ep$, EntityHandler.ENTITY_LABEL, entityLabel$);
								Entigrator entigrator=console.getEntigrator(entihome$);
								String icon$=ExtensionHandler.loadIcon(entigrator, EdgeHandler.EXTENSION_KEY, "edge.png");
								ep$=Locator.append(ep$,Locator.LOCATOR_ICON,icon$);
								JConsoleHandler.execute(console, ep$);
							}catch(Exception ee){
								 Logger.getLogger(JGraphRenderer.class.getName()).info(ee.toString());
							}
							   }
					});
					menu.add(edgesItem);
					 JMenuItem  nodesItem = new JMenuItem("Nodes");
					   nodesItem.addActionListener(new ActionListener() {
							@Override
							public void actionPerformed(ActionEvent e) {
								JGraphNodes gn=new JGraphNodes();
								String gnLocator$= gn.getLocator();
								gnLocator$=Locator.append(gnLocator$, Entigrator.ENTIHOME, entihome$);
								gnLocator$=Locator.append(gnLocator$, EntityHandler.ENTITY_KEY, entityKey$);
								JConsoleHandler.execute(console, gnLocator$);
							}
						} );
						menu.add(nodesItem);
						JMenuItem  entityItem = new JMenuItem("Entity");
						   entityItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
									JEntityFacetPanel fp=new JEntityFacetPanel();
									String fp$=fp.getLocator();
									fp$=Locator.append(fp$, Entigrator.ENTIHOME, entihome$);
									fp$=Locator.append(fp$, EntityHandler.ENTITY_KEY, entityKey$);
									fp$=Locator.append(fp$, EntityHandler.ENTITY_LABEL, "Entity");
									JConsoleHandler.execute(console,fp$);
								}
							} );
							menu.add(entityItem);
						menu.addSeparator();	
						JMenuItem  resetItem = new JMenuItem("Reset");
						   resetItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
									reset();
								}
							} );
						   menu.add(resetItem);
						  if(GraphHandler.undoCan(console, locator$)){
							  JMenuItem  undoItem = new JMenuItem("Undo");
							   undoItem.addActionListener(new ActionListener() {
									@Override
									public void actionPerformed(ActionEvent e) {
										GraphHandler.undoPop(console, locator$);
										 init2();
											revalidate();
											repaint();
									}
								} );
							   menu.add(undoItem);
						  } 
						  
							  JMenuItem  viewsItem = new JMenuItem("Views");
							   viewsItem.addActionListener(new ActionListener() {
									@Override
									public void actionPerformed(ActionEvent e) {
									//	GraphHandler.undoPop(console, locator$);
									  showViews();
									}
								} );
							   menu.add(viewsItem);
						   
						  menu.addSeparator();	
							JMenuItem  recentItem = new JMenuItem("Put as recent");
							   recentItem.addActionListener(new ActionListener() {
									@Override
									public void actionPerformed(ActionEvent e) {
										console.getRecents().put(getTitle(), getLocator());
									}
								} );
							   menu.add(recentItem);
							   menu.addSeparator();	
							   JMenuItem  unmarkItem = new JMenuItem("Unmark all");
							   unmarkItem.addActionListener(new ActionListener() {
									@Override
									public void actionPerformed(ActionEvent e) {
									unmarkAll();
									}
								} );
							   menu.add(unmarkItem);
							 
					if(hasSelectedNode()){
						menu.addSeparator();
						JMenuItem  markItem = new JMenuItem("Mark");
						   markItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
								markSelectedNode();
								}
							} );
						   menu.add(markItem);
						   JMenuItem  pickItem = new JMenuItem("Pick out");
						   pickItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
									markSelectedNode();
									pickOut();
								}
							} );
						   menu.add(pickItem);
						   JMenuItem  expandItem = new JMenuItem("Expand");
						   expandItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
									markSelectedNode();
									expand();
								}
							} );
						   menu.add(expandItem);
					}
				    menu.addSeparator();
				    JMenuItem  saveItem = new JMenuItem("Save");
					   saveItem.addActionListener(new ActionListener() {
							@Override
							public void actionPerformed(ActionEvent e) {
								saveAsPicture();
							}
						} );
					   menu.add(saveItem);	
					   JMenuItem  copyItem = new JMenuItem("Copy");
					   copyItem.addActionListener(new ActionListener() {
							@Override
							public void actionPerformed(ActionEvent e) {
								console.clipboard.clear();
								Entigrator entigrator=console.getEntigrator(entihome$);
								String graphLocator$=EntityHandler.getEntityLocatorAtKey(entigrator,  entityKey$);
								console.clipboard.putString(graphLocator$);
							}
						} );
					   menu.add(copyItem);	
				}

				@Override
				public void menuDeselected(MenuEvent e) {
					// TODO Auto-generated method stub
					
				}

				@Override
				public void menuCanceled(MenuEvent e) {
					// TODO Auto-generated method stub
					
				}
		   });
		  
			return menu;
	}
	  /**
		 * Get the context locator.
		 * @return the context locator.
		 */	
	@Override
	public String getLocator() {
		try{
			Properties locator=new Properties();
			locator.setProperty(BaseHandler.HANDLER_CLASS,JGraphRenderer.class.getName());
			locator.setProperty(BaseHandler.HANDLER_SCOPE,JConsoleHandler.CONSOLE_SCOPE);
			 locator.setProperty( JContext.CONTEXT_TYPE,getType());
			locator.setProperty(Locator.LOCATOR_TITLE,getTitle());
			if(entityLabel$!=null){
				locator.setProperty(EntityHandler.ENTITY_LABEL,entityLabel$);
			}
			if(entityKey$!=null)
				locator.setProperty(EntityHandler.ENTITY_KEY,entityKey$);
			if(entihome$!=null){
				locator.setProperty(Entigrator.ENTIHOME,entihome$);
				if(entihome$!=null){
					locator.setProperty(Entigrator.ENTIHOME,entihome$);
					Entigrator entigrator=console.getEntigrator(entihome$);
				String icon$=ExtensionHandler.loadIcon(entigrator, GraphHandler.EXTENSION_KEY,"map.png");
				if(icon$!=null)
				    	locator.setProperty(Locator.LOCATOR_ICON,icon$);
				}
			}
			if(entityLabel$!=null)
				locator.setProperty(EntityHandler.ENTITY_LABEL,entityLabel$);
			return Locator.toString(locator);
			}catch(Exception e){
	        Logger.getLogger(getClass().getName()).severe(e.toString());
	        return null;
			}
	}
	  /**
		 * Create a new facet renderer.
		 * @param console the main console.
		 * @param locator$ the locator string.
		 * @return the fields editor.
		 */
	@Override
	public JContext instantiate(JMainConsole console, String locator$) {
		try{
			//	System.out.println("JGraphRenderer:instantiate:locator="+locator$);
				this.console=console;
				this.locator$=locator$;
				
				Properties locator=Locator.toProperties(locator$);
				entihome$=locator.getProperty(Entigrator.ENTIHOME);
				entityKey$=locator.getProperty(EntityHandler.ENTITY_KEY);
				String action$=locator.getProperty(JRequester.REQUESTER_ACTION);
				Entigrator entigrator=console.getEntigrator(entihome$);
				requesterResponseLocator$=locator.getProperty(JRequester.REQUESTER_RESPONSE_LOCATOR);
	            graphEntity=entigrator.getEntityAtKey(entityKey$);
	            entityLabel$=graphEntity.getProperty("label");
	            String viewComponentKey$=locator.getProperty(JGraphViews.VIEW_COMPONENT_KEY);
	            String viewKey$=locator.getProperty(JGraphViews.VIEW_KEY);
	   		    locator=new Properties();
   	   		 locator.setProperty(Locator.LOCATOR_TITLE, "Graph");
   	  	locator.setProperty(Entigrator.ENTIHOME,entihome$);
   	  	String icon$=ExtensionHandler.loadIcon(entigrator, GraphHandler.EXTENSION_KEY,"graph.png");
   	  	if(icon$!=null)
	    	locator.setProperty(Locator.LOCATOR_ICON,icon$);
   	 //System.out.println("JGraphRenderer:instantiate:action="+action$);
   	  	if(JGraphViews.ACTION_SHOW_VIEW.equals(action$)){
   	  	//System.out.println("JGraphRenderer:instantiate:show view");
   	  	     try{
   	  	    	 Sack viewComponent=entigrator.getEntityAtKey(viewComponentKey$);
   	  	     
   	  	     Core[]ca=viewComponent.elementGet(viewKey$);
   	  	     if(graphEntity.existsElement("node.select"))
   	  	    graphEntity.createElement("node.select");
   	  	graphEntity.elementReplace("node.select", ca);
   	  	entigrator.save(graphEntity);
   	  	     }catch(Exception ee){
   	  	    	 Logger.getLogger(JGraphRenderer.class.getName()).info(ee.toString()); 
   	  	     }
   	  	}
   	  	displayGraph();
		}catch(Exception e){
		        Logger.getLogger(getClass().getName()).severe(e.toString());
			}
		//System.out.println("JGraphRenderer:instantiate:finish");
			return this;
			
	}
	/**
	 * Get title of the context.  
	 * @return the title of the context.
	 */	
	@Override
	public String getTitle() {
		return "Map";
	}
	/**
	 * Get subtitle of the context.  
	 * @return the subtitle of the context.
	 */	
	@Override
	public String getSubtitle() {
		return entityLabel$;
	}
	 /**
     * Get type of the  context.  
     * @return the type of the context.
     */	
	@Override
	public String getType() {
		return "graph";
	}
/**
 * No action
 */
	@Override
	public void close() {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		//System.out.println("JGraphRenderer: mouseDragged:BEGIN");
		
	}
	@Override
	public void mouseMoved(MouseEvent e) {
		//System.out.println("JGraphRenderer: mouseMoved:BEGIN");
		
	}
	
private void displayGraph(){
	try{
		//System.out.println("JGraphRenderer:displayGraph:BEGIN");
		init2();
		revalidate();
		repaint();
    
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}

private void reset(){
	try{
		 Entigrator entigrator=console.getEntigrator(entihome$);
		 Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		 graphEntity.removeElement("node.select");
		 GraphHandler.undoReset(console, locator$);
		 entigrator.save(graphEntity);
		 init2();
			revalidate();
			repaint();
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
private void pickOut(int v){
	try{
		Entigrator entigrator=console.getEntigrator(entihome$);
		 Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		 if(graphEntity.existsElement("node.select"))
			 graphEntity.clearElement("node.select");
			 
		 entigrator.save(graphEntity);
		 expand(v);
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
private void pickOut(){
	Collection vc=graph.getVertices();
	final PickedState pickedState = vv.getPickedVertexState();
	for( Number n:vc){
		 if (pickedState.isPicked(n))
		    pickOut( n.intValue());
	}
}
private void expand(){
	
	try{
		Collection vc=graph.getVertices();
	//	System.out.println("JGraphRenderer:expand:vc="+vc.size());
	final PickedState pickedState = vv.getPickedVertexState();
	for( Number n:vc){
		 if (pickedState.isPicked(n))
		    expand( n.intValue());
	}
	}catch(Exception e){
		LOGGER.severe(e.toString());	
	}
}
private void expand(int v){
//	System.out.println("JGraphRenderer:expand:v="+v);
	try{
		GraphHandler.undoPush(console, locator$); 
		 Entigrator entigrator=console.getEntigrator(entihome$);
		 Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		 String node$=graphEntity.getElementItemAtValue("vertex", String.valueOf(v));
		 if(!graphEntity.existsElement("node.select"))
			 graphEntity.createElement("node.select");
		 graphEntity.putElementItem("node.select", new Core(null,node$,null));
		 Core[] ca=graphEntity.elementGet("bond");
				    ArrayListnbl=new ArrayList();
						for(Core c:ca){
							if(c.value.equals(node$))
								if(!nbl.contains(c.type))
									nbl.add(c.type);
							if(c.type.equals(node$))
								if(!nbl.contains(c.value))
										nbl.add(c.value);
						}
		  Core nodeCore;
		  String icon$;
		  String label$;
		  boolean rebuild=false;
		  for(String nb:nbl){
		           		graphEntity.putElementItem("node.select", new Core(null,nb,null));
		           	    nodeCore= graphEntity.getElementItem("node", nb);
		           	    if(nodeCore==null){
		           	    	label$=entigrator.indx_getLabel(nb);
		           	    	icon$=entigrator.indx_getIcon(nb);
		           	    	if(label$!=null&&icon$!=null){
		           	    		graphEntity.putElementItem("node", new Core(icon$,nb,label$));
		           	    		rebuild=true;
		           	    	}
		           	    }
		           	} 
		 entigrator.save(graphEntity);
		 if(rebuild)
			// rebuild();
		 NodeHandler.rebuild(entigrator, entityKey$);
		 init2();
			revalidate();
			repaint();
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
private void hideItem(int v){
	//System.out.println("JGraphRenderer:hide:v="+v);
	try{
		GraphHandler.undoPush(console, locator$); 
		 Entigrator entigrator=console.getEntigrator(entihome$);
		 Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		 String node$=graphEntity.getElementItemAtValue("vertex", String.valueOf(v));
		 Core[] na=graphEntity.elementGet("node");
		 if(!graphEntity.existsElement("node.select")){
			 graphEntity.createElement("node.select");
			 na=graphEntity.elementGet("node");
		 }else{
			 na=graphEntity.elementGet("node.select");
			 graphEntity.clearElement("node.select");
		 }
		for(Core n:na){
			 if(!node$.equals(n.name))
				 graphEntity.putElementItem("node.select", new Core(null,n.name,null));
		 }
		 entigrator.save(graphEntity);
		 init2();
			revalidate();
			repaint();
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
private void entity(int v){
	try{
		 
		Entigrator entigrator=console.getEntigrator(entihome$);
		Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		Core[]ca=graphEntity.elementGet("vertex");
		String v$=String.valueOf(v);
		for(Core c:ca)
			if(v$.equals(c.value)){
				JEntityFacetPanel fp=new JEntityFacetPanel();
				String fp$=fp.getLocator();
				fp$=Locator.append(fp$, Entigrator.ENTIHOME, entihome$);
				fp$=Locator.append(fp$, EntityHandler.ENTITY_KEY, c.name);
				JConsoleHandler.execute(console, fp$);
			}
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
private void init2(){
	//System.out.println("JGraphRenderer:init2:BEGIN");
	removeAll();
	 graph = new DirectedSparseGraph();
	// final ObservableCachingLayout layout =(ObservableCachingLayout< Number,Number>)vv.getGraphLayout();
		
	 Entigrator entigrator=console.getEntigrator(entihome$);
	 Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
	 if(graphEntity.existsElement("vertex"))
		 graphEntity.removeElement("vertex");
	 graphEntity.createElement("vertex");
	 if(graphEntity.existsElement("edge"))
		 graphEntity.removeElement("edge");
	 graphEntity.createElement("edge");
	 String[] sa= graphEntity.elementListNoSorted("node.select");
	 if(sa==null)
			sa= graphEntity.elementListNoSorted("node");
	 //System.out.println("JGraphRenderer:init2:sa="+sa.length);
	 for (int i = 0; i  map = new HashMap();
	 Map iconMap = new HashMap();
	 String icon$;
	 byte[] bar;
	 ImageIcon icon;
	 for (int i = 0; i vc=graph.getVertices();
	 String nodeKey$;
	 ArrayList nl=new ArrayList();
		for( Number n:vc)
			if(graph.getOutEdges(n).size()<1 && graph.getInEdges(n).size()<1){
				nodeKey$=graphEntity.getElementItemAtValue("vertex", String.valueOf(n));
			//	System.out.println("JGraphRenderer:init:stand alone="+n);
				graphEntity.removeElementItem("vertex", nodeKey$);
				graphEntity.removeElementItem("node.select", nodeKey$);
				nl.add(n);
			}
    entigrator.save(graphEntity);
    for(Number n:nl)
    	graph.removeVertex(n);
     }
    FRLayout layout = new FRLayout(graph);
    layout.setMaxIterations(100);
    layout.setInitializer(new RandomLocationTransformer(new Dimension(400,400), 0));
    vv =  new VisualizationViewer(layout, new Dimension(400,400));
    Transformer vpf = 
            new PickableVertexPaintTransformer(vv.getPickedVertexState(), Color.white, Color.yellow);
        vv.getRenderContext().setVertexFillPaintTransformer(vpf);
        vv.getRenderContext().setEdgeDrawPaintTransformer(new PickableEdgePaintTransformer(vv.getPickedEdgeState(), Color.black, Color.cyan));

        vv.setBackground(Color.white);
        final Transformer vertexStringerImpl = 
                new VertexStringerImpl(map);
            vv.getRenderContext().setVertexLabelTransformer(vertexStringerImpl);
            vv.getRenderContext().setVertexLabelRenderer(new DefaultVertexLabelRenderer(Color.cyan));
            vv.getRenderContext().setEdgeLabelRenderer(new DefaultEdgeLabelRenderer(Color.cyan));
            final DemoVertexIconShapeTransformer vertexIconShapeTransformer =
                    new DemoVertexIconShapeTransformer(new EllipseVertexShapeTransformer());
                
                final DemoVertexIconTransformer vertexIconTransformer =
                	new DemoVertexIconTransformer();
                
                vertexIconShapeTransformer.setIconMap(iconMap);
                vertexIconTransformer.setIconMap(iconMap);
                
                vv.getRenderContext().setVertexShapeTransformer(vertexIconShapeTransformer);
                vv.getRenderContext().setVertexIconTransformer(vertexIconTransformer);
                 PickedState ps = vv.getPickedVertexState();
                ps.addItemListener(new PickWithIconListener(vertexIconTransformer));
      
                vv.setVertexToolTipTransformer(new ToStringLabeller());
        		
              
                final GraphZoomScrollPane panel = new GraphZoomScrollPane(vv);
                add(panel);
                
                final DefaultModalGraphMouse graphMouse = new DefaultModalGraphMouse();
                vv.setGraphMouse(graphMouse);
                vv.addKeyListener(graphMouse.getModeKeyListener());
                vv.addMouseListener(new MousePopupListener());
                layoutVertices(); 
                final ScalingControl scaler = new CrossoverScalingControl();

                JButton plus = new JButton("+");
                plus.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        scaler.scale(vv, 1.1f, vv.getCenter());
                    }
                });
                JButton minus = new JButton("-");
                minus.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        scaler.scale(vv, 1/1.1f, vv.getCenter());
                    }
                });

                JComboBox modeBox = graphMouse.getModeComboBox();
                JPanel modePanel = new JPanel();
                modePanel.setBorder(BorderFactory.createTitledBorder("Mouse Mode"));
                modePanel.add(modeBox);
                
                JPanel scaleGrid = new JPanel(new GridLayout(1,0));
                scaleGrid.setBorder(BorderFactory.createTitledBorder("Zoom"));
       
                JPanel controls = new JPanel();
                controls.setLayout(new BoxLayout(controls, BoxLayout.X_AXIS));
                scaleGrid.add(plus);
                scaleGrid.add(minus);
                controls.add(scaleGrid);
           
                controls.add(modePanel);
                String[] la=null;
                //
                String[] na =graphEntity.elementListNoSorted("node.select");
                if(na==null)
                	na=graphEntity.elementListNoSorted("node");
                if(na!=null){
                	ArrayListsl=new ArrayList();
                	String label$;
                for	(String n:na){
                	label$=entigrator.indx_getLabel(n);
                	if(label$!=null)
                		sl.add(label$);
                }
                Collections.sort(sl);
                
                 la=sl.toArray(new String[0]);
                
                }
                //
                //System.out.println("JGraphRenderer:init:la="+la.length);
               searchBox = new AutocompleteJComboBox(la);
                JPanel searchPanel = new JPanel();
                searchPanel.setBorder(BorderFactory.createTitledBorder("Search"));
                searchPanel.add(searchBox);
                controls.add(searchPanel);
                add(controls, BorderLayout.SOUTH);
}
private boolean hasSelectedNode(){
	try{
	Entigrator entigrator=console.getEntigrator(entihome$);
	Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
	String label$=(String)searchBox.getSelectedItem();
	String nodeKey$=entigrator.indx_keyAtLabel(label$);
	if(graphEntity.getElementItem("vertex", nodeKey$)!=null)
		return true;
	}catch(Exception e){
	}
	return false;
}
private void markSelectedNode(){
	try{
	Entigrator entigrator=console.getEntigrator(entihome$);
	Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
	String label$=(String)searchBox.getSelectedItem();
	String nodeKey$=entigrator.indx_keyAtLabel(label$);
	String vertexNumber$=graphEntity.getElementItemAt("vertex", nodeKey$);
	vv.getPickedVertexState().pick(Integer.valueOf(vertexNumber$), true);
	}catch(Exception e){
	}
	
}
private void layoutVertices(){
	try{
	//System.out.println("JGraphRenderer:layoutVertices:BEGIN");
		Entigrator entigrator=console.getEntigrator(entihome$);
		Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		Core [] ca=graphEntity.elementGet("vertex");
		if(ca==null)
			return;
		int vertexId;
		final ObservableCachingLayout layout =(ObservableCachingLayout< Number,Number>)vv.getGraphLayout();
	   	Collection vc=graph.getVertices();
        Core nodePointer;
        String nodeKey$;
        int nodeX;
        int nodeY;
		for(Core c:ca){
			vertexId=Integer.parseInt(c.value);
			
			for( Number n:vc)
				if(vertexId==n.intValue())
			    {
				   	nodeKey$=graphEntity.getElementItemAtValue("vertex",String.valueOf(vertexId) );
				   	nodePointer=graphEntity.getElementItem("node.select",nodeKey$);
				   	nodeX=Integer.parseInt(nodePointer.type);
				   	nodeY=Integer.parseInt(nodePointer.value);
				    layout.setLocation(n, new  Point(nodeX,nodeY));
			    }
		}
	}catch(Exception e){
		Logger.getLogger(JGraphRenderer.class.getName()).severe(e.toString());
	}
}
private void showViews(){
	try{
	//	System.out.println("JGraphRenderer:showViews:BEGIN");
		Entigrator entigrator=console.getEntigrator(entihome$);
		Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		Core [] ca=graphEntity.elementGet("vertex");
		if(ca==null)
			return;
		int vertexId;
		final ObservableCachingLayout layout =(ObservableCachingLayout< Number,Number>)vv.getGraphLayout();
		Collection vc=graph.getVertices();
       Point2D	p;	
		for(Core c:ca){
			vertexId=Integer.parseInt(c.value);
			for( Number n:vc)
				if(vertexId==n.intValue())
			    {
					
					p=layout.transform(n);
					graphEntity.putElementItem("node.select", new Core(String.valueOf((int)p.getX()),c.name,String.valueOf((int)p.getY())));
			//	System.out.println("JGraphRenderer:showViews:n="+n.toString()+ " key="+c.name+" point="+ layout.transform(n) );
			   
			    }
		}
      entigrator.save(graphEntity);
      JGraphViews gvs=new JGraphViews();
	    String gvs$=gvs.getLocator();
	    gvs$=Locator.append(gvs$, Entigrator.ENTIHOME, entihome$);
	    gvs$=Locator.append(gvs$, EntityHandler.ENTITY_KEY, entityKey$);
	    gvs$=Locator.append(gvs$,JRequester.REQUESTER_ACTION,JGraphViews.ACTION_SAVE_VIEW );
	    JConsoleHandler.execute(console, gvs$);
	}catch(Exception e){
		Logger.getLogger(JGraphRenderer.class.getName()).severe(e.toString());
	}
	
}
private void unmarkAll(){
	Collection vc=graph.getVertices();
	for( Number n:vc)
		vv.getPickedVertexState().pick(n, false);
	
}
private void openEdge(int b){
	try{
		//System.out.println("JGraphRenderer:openEdge:b="+b);
		Entigrator entigrator=console.getEntigrator(entihome$);
		Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		
		String bondKey$=graphEntity.getElementItemAtValue("edge", String.valueOf(b));
		Core core=graphEntity.getElementItem("edge", bondKey$);
		ArrayListel=new ArrayList();
		String v1v2$=core.type;
		//System.out.println("JGraphRenderer:openEdge:v1v2="+v1v2$);
		Core[] ca=graphEntity.elementGet("edge");
		String edgeKey$;
		for(Core c:ca )
			if(v1v2$.equals(c.type)){
				edgeKey$=graphEntity.getElementItemAt("edge.entity",c.name);
				el.add(entigrator.indx_getLabel(edgeKey$));
			}
		String[] sa=el.toArray(new String[0]);
		if(sa.length==1){
			JEntityFacetPanel fp=new JEntityFacetPanel();
			String fp$=fp.getLocator();
			fp$=Locator.append(fp$, Entigrator.ENTIHOME, entihome$);
			fp$=Locator.append(fp$, EntityHandler.ENTITY_KEY, entigrator.indx_keyAtLabel(sa[0]));
			JConsoleHandler.execute(console,fp$);
			return;
		}
		JEntitiesPanel jep=new JEntitiesPanel();
		String jepLocator$=jep.getLocator();
		String entitiesList$=Locator.toString(sa);
		   jepLocator$=Locator.append(jepLocator$, Entigrator.ENTIHOME, entihome$);
		   jepLocator$=Locator.append(jepLocator$,EntityHandler.ENTITY_LIST,entitiesList$);
		   jepLocator$=Locator.append(jepLocator$,EntityHandler.ENTITY_KEY,entityKey$);
		   JConsoleHandler.execute(console, jepLocator$);
		 
	}catch(Exception e){
		Logger.getLogger(JGraphRenderer.class.getName()).severe(e.toString());
	}
	
}
private void displayDetails(int b){
	try{
//		System.out.println("JGraphRenderer:displayDetails:b="+b);
		Entigrator entigrator=console.getEntigrator(entihome$);
		Sack graphEntity=entigrator.getEntityAtKey(entityKey$);
		String bondKey$=graphEntity.getElementItemAtValue("edge", String.valueOf(b));
		Core core=graphEntity.getElementItem("edge", bondKey$);
		ArrayListel=new ArrayList();
		String v1v2$=core.type;
//		System.out.println("JGraphRenderer:displayDetails:v1v2="+v1v2$);
		Core[] ca=graphEntity.elementGet("edge");
		String edgeKey$;
		ArrayListbl=new ArrayList();
		for(Core c:ca )
			if(v1v2$.equals(c.type)){
				edgeKey$=graphEntity.getElementItemAt("edge.entity",c.name);
				el.add(edgeKey$);
				bl.add(c.name);
			}
		Sack edge;
        String[] sa=el.toArray(new String[0]);
		ArrayListsl=new ArrayList();
		for(String s:sa){
			edge=entigrator.getEntityAtKey(s);
			ca=edge.elementGet("detail");
		   if(ca==null)
			  continue;
		   for(Core c:ca)
		       for(String bk:bl){
		    	   if(bk.equals(c.type))
		    		   sl.add(entigrator.indx_getLabel(c.value));
		}
		}
		 Collections.sort(sl);	   
		  String entitiesList$=Locator.toString(sl.toArray(new String[0]));
		   JEntitiesPanel jep=new JEntitiesPanel();
		   String jepLocator$=jep.getLocator();
		   jepLocator$=Locator.append(jepLocator$, Entigrator.ENTIHOME, entihome$);
		   jepLocator$=Locator.append(jepLocator$,EntityHandler.ENTITY_LIST,entitiesList$);
		   jepLocator$=Locator.append(jepLocator$,EntityHandler.ENTITY_KEY,entityKey$);
		   JConsoleHandler.execute(console, jepLocator$);
		
	}catch(Exception e){
		Logger.getLogger(JGraphRenderer.class.getName()).severe(e.toString());
	}
	
}
private void saveAsPicture(){
	try{
		String fileName$=System.getProperty("graph.png");
		JFileChooser chooser = new JFileChooser(); 
	    chooser.setCurrentDirectory(new java.io.File(System.getProperty("user.home")));
	    chooser.setDialogTitle(fileName$);
	    chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
	    chooser.setAcceptAllFileFilterUsed(false);
	    if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
	    	String folder$=chooser.getSelectedFile().getPath();
	    	String file$ =(String)JOptionPane.showInputDialog("File");
	    if ((file$ != null) && (file$.length() > 0)) {
    	int width = vv.getWidth();
        int height = vv.getHeight();
        BufferedImage bi = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics =bi.createGraphics();
        vv.paint(graphics);
        graphics.dispose();
		File outputfile = new File(folder$+"/"+file$+".png");
		if(!outputfile.exists())
			outputfile.createNewFile();
		ImageIO.write(bi, "png", outputfile);
	    }
	    }
	}catch(Exception e){
		Logger.getLogger(JGraphRenderer.class.getName()).severe(e.toString());
	}
}
class MousePopupListener extends MouseAdapter {
	  boolean isPopup=false;
		public void mousePressed(MouseEvent e) {
			//System.out.println("EntityStructurePanel:MousePopupListener:mouse pressed");
			if (e.isPopupTrigger())
				isPopup=true;
			else
				isPopup=false;
				//System.out.println("JGraphRenderer:MousePopupListener:isPopup="+isPopup);
		}

	    public void mouseClicked(MouseEvent e) {
	    	if(!isPopup)
	    		return;
	    	final VisualizationViewer vv =
	                (VisualizationViewer)e.getSource();
	            final Layout layout = vv.getGraphLayout();
	            final Graph graph = layout.getGraph();
	            final Point2D p = e.getPoint();
	            v=-1;
	            b=-1;
	            final Point2D ivp = p;
	            GraphElementAccessor pickSupport = vv.getPickSupport();
	            if(pickSupport != null) {
	                Object vertex = pickSupport.getVertex(layout, ivp.getX(), ivp.getY());
	                Object edge = pickSupport.getEdge(layout, ivp.getX(), ivp.getY());
	                if(vertex!=null){
	                	//System.out.println("JGraphRenderer:MousePopupListener:vertex="+vertex);
	                	v=((Integer)vertex).intValue();
	                }
	                if(edge!=null){
	                	//System.out.println("JGraphRenderer:MousePopupListener:edge="+edge);
	                	b=((Integer)edge).intValue();	
	                }
	                popup = new JPopupMenu();
	        		popup.addPopupMenuListener(new PopupMenuListener(){
	        			@Override
	        			public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
	        				if(v>-1){
	        				JMenuItem pickOutItem=new JMenuItem("Pick out");
	        				   popup.add(pickOutItem);
	        				   pickOutItem.setHorizontalTextPosition(JMenuItem.RIGHT);
	        				   pickOutItem.addActionListener(new ActionListener() {
	        						@Override
	        						public void actionPerformed(ActionEvent e) {
	        							try{
	        								pickOut(v);
	        							}catch(Exception ee){
	        								Logger.getLogger(getClass().getName()).info(ee.toString());
	        							}
	        						}
	        					    });
	        				   JMenuItem expandItem=new JMenuItem("Expand");
	        				   popup.add(expandItem);
	        				   expandItem.setHorizontalTextPosition(JMenuItem.RIGHT);
	        				   expandItem.addActionListener(new ActionListener() {
	        						@Override
	        						public void actionPerformed(ActionEvent e) {
	        							try{
	        								expand(v);
	        							}catch(Exception ee){
	        								Logger.getLogger(getClass().getName()).info(ee.toString());
	        							}
	        						}
	        					    });
	        				   JMenuItem entityItem=new JMenuItem("Entity");
	        				   popup.add(entityItem);
	        				   entityItem.setHorizontalTextPosition(JMenuItem.RIGHT);
	        				   entityItem.addActionListener(new ActionListener() {
	        						@Override
	        						public void actionPerformed(ActionEvent e) {
	        							try{
	        								entity(v);
	        							}catch(Exception ee){
	        								Logger.getLogger(getClass().getName()).info(ee.toString());
	        							}
	        						}
	        					    });
	        				   JMenuItem hideItem=new JMenuItem("Hide");
	        				   popup.add(hideItem);
	        				   hideItem.setHorizontalTextPosition(JMenuItem.RIGHT);
	        				   hideItem.addActionListener(new ActionListener() {
	        						@Override
	        						public void actionPerformed(ActionEvent e) {
	        							try{
	        								hideItem(v);
	        								//entity(v);
	        							}catch(Exception ee){
	        								Logger.getLogger(getClass().getName()).info(ee.toString());
	        							}
	        						}
	        					    });
	        				}
	        				if(b>-1){
	        					JMenuItem edgeItem=new JMenuItem("Edge");
		        				   popup.add(edgeItem);
		        				   edgeItem.setHorizontalTextPosition(JMenuItem.RIGHT);
		        				   edgeItem.addActionListener(new ActionListener() {
		        						@Override
		        						public void actionPerformed(ActionEvent e) {
		        							try{
		        						       openEdge(b);
		        							}catch(Exception ee){
		        								Logger.getLogger(getClass().getName()).info(ee.toString());
		        							}
		        						}
		        					    });
		        				   JMenuItem detailsItem=new JMenuItem("Details");
		        				   popup.add(detailsItem);
		        				   detailsItem.setHorizontalTextPosition(JMenuItem.RIGHT);
		        				   detailsItem.addActionListener(new ActionListener() {
		        						@Override
		        						public void actionPerformed(ActionEvent e) {
		        							try{
		        						       displayDetails(b);
		        							}catch(Exception ee){
		        								Logger.getLogger(getClass().getName()).info(ee.toString());
		        							}
		        						}
		        					    });
		        					
	        				}
	        			}
	        			@Override
	        			public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
	        				// TODO Auto-generated method stub
	        			}
	        			@Override
	        			public void popupMenuCanceled(PopupMenuEvent e) {
	        				// TODO Auto-generated method stub
	        			}
	        		});
	        		popup.show(JGraphRenderer.this,(int)p.getX(),(int)p.getY());
	            }
	    	
	    }
	    public void mouseReleased(MouseEvent e) {
	    	
	    	if(!isPopup)
		    	if (e.isPopupTrigger()) 
			    	  isPopup=true;
	    		//System.out.println("JGraphRenderer:MousePopupListener:is Popup");
	    	}
	   }
}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy