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

gdt.jgui.entity.bonddetail.JBondDetailPanel Maven / Gradle / Ivy

The newest version!
package gdt.jgui.entity.bonddetail;
/*
 * 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.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Properties;
import java.util.logging.Logger;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;

import org.apache.commons.codec.binary.Base64;

import gdt.data.entity.BaseHandler;
import gdt.data.entity.BondDetailHandler;
import gdt.data.entity.EntityHandler;

import gdt.data.entity.facet.ExtensionHandler;
import gdt.data.grain.Core;
import gdt.data.grain.Locator;
import gdt.data.grain.Sack;

import gdt.data.store.Entigrator;

import gdt.jgui.console.JConsoleHandler;
import gdt.jgui.console.JContext;
import gdt.jgui.console.JFacetRenderer;
import gdt.jgui.console.JItemPanel;
import gdt.jgui.console.JMainConsole;
import gdt.jgui.entity.JEntitiesPanel;
import gdt.jgui.entity.edge.JBondsPanel;

/**
 * This context displays a list of details for the selected edge. 
 * @author imasa
 */
public class JBondDetailPanel extends JEntitiesPanel {
	private static final long serialVersionUID = 1L;
	private Logger LOGGER=Logger.getLogger(JBondDetailPanel.class.getName());

	protected String entihome$;
	protected String entityKey$;
	protected String bondKey$;
	protected String edgeKey$;
	protected String hostType$;
	protected String subtitle$;
	protected JMenuItem addItem;
	protected String requesterResponseLocator$;
	Hashtable items;
	protected JMenu menu1;
	String message$;
	Sack entity;
	boolean debug=false;
	/**
	 * Get the context locator.
	 * @return the context locator.
	 */		
	@Override
	public String getLocator() {
		 Properties locator=new Properties();
		    locator.setProperty(Locator.LOCATOR_TYPE, JContext.CONTEXT_TYPE);
		    locator.setProperty(JContext.CONTEXT_TYPE,getType());
		    if(entihome$!=null&&console!=null){
		       locator.setProperty(Entigrator.ENTIHOME,entihome$);
		     //  Entigrator entigrator=console.getEntigrator(entihome$);
		     //  String icon$=ExtensionHandler.loadIcon(entigrator, BondDetailHandler.EXTENSION_KEY, "detail.png");
		     //  if(icon$!=null)
			  //  	locator.setProperty(Locator.LOCATOR_ICON,icon$);
		        	   
		    }
		    locator.setProperty( Locator.LOCATOR_ICON_CONTAINER, Locator.LOCATOR_ICON_CONTAINER_CLASS);
			locator.setProperty( Locator.LOCATOR_ICON_CLASS, getClass().getName());
			locator.setProperty( Locator.LOCATOR_ICON_FILE, "detail.png");
			locator.setProperty( Locator.LOCATOR_ICON_CLASS_LOCATION,BondDetailHandler.EXTENSION_KEY);
		    if(entityKey$!=null)
			       locator.setProperty(EntityHandler.ENTITY_KEY,entityKey$);
		   locator.setProperty(Locator.LOCATOR_TITLE, getTitle());
		   
		    locator.setProperty(BaseHandler.HANDLER_SCOPE,JConsoleHandler.CONSOLE_SCOPE);
		    locator.setProperty(BaseHandler.HANDLER_CLASS,JBondDetailPanel.class.getName());
		    locator.setProperty(BaseHandler.HANDLER_LOCATION,BondDetailHandler.EXTENSION_KEY);
		    if(bondKey$!=null)
			       locator.setProperty(JBondsPanel.BOND_KEY,bondKey$);
		//    if(hostType$!=null)
		//	       locator.setProperty(HOST_TYPE,hostType$);
		    return Locator.toString(locator);
	}
	 /**
     * Get title of the handler.  
     * @return the title of the handler..
     */	
	@Override
	public String getTitle() {
		if(message$==null)
			return "Bond details";
		else
			return "Bond details"+message$;
		
	}
	 /**
     * Get subtitle of the handler.  
     * @return the subtitle of the handler..
     */	
	@Override
	public String getSubtitle() {
		
		return subtitle$;
	}
	 /**
     * Get type of the  handler.  
     * @return the type of the handler..
     */	
	@Override
	public String getType() {
		return "bond details";
	}
	 /**
     * Close context.
     * 
     */	
	@Override
	public void close() {
		
	}
	/**
	 * 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{
			if(debug)
			System.out.println("JBondDetailPanel:instantiate:locator="+locator$);
			this.console=console;
			 this.locator$=locator$;
			 Properties locator=Locator.toProperties(locator$);
			 entityKey$=locator.getProperty(EntityHandler.ENTITY_KEY);
			 entihome$=locator.getProperty(Entigrator.ENTIHOME);
			 bondKey$=locator.getProperty(JBondsPanel.BOND_KEY);
			 edgeKey$=locator.getProperty(JBondsPanel.EDGE_KEY);
			 Entigrator entigrator=console.getEntigrator(entihome$);
			 if(Locator.LOCATOR_TRUE.equals(locator.getProperty(JFacetRenderer.ONLY_ITEM)))
				 return this;
			 entity=null;
			 if(edgeKey$!=null)
				 entity =entigrator.getEntityAtKey(edgeKey$);
			 else{
				 Sack host= entigrator.getEntityAtKey(entityKey$);
				 if("edge".equals(host.getProperty("entity")))
					 entity=host;
			 }
			 if(debug)
					System.out.println("JBondDetailPanel:instantiate:edge key="+edgeKey$);
					
			 if(entity==null)
				 return this;
			 Core[] ca=entity.elementGet("detail");
			 if(ca==null)
				 return this;
			Core bond=entity.getElementItem("bond", bondKey$);
			subtitle$=entigrator.indx_getLabel(bond.type)+" --("+entity.getProperty("label")+")-> "+entigrator.indx_getLabel(bond.value);
			saveSelection( console, entihome$, edgeKey$, bondKey$);		 
					// entigrator.getEntityAtKey(entityKey$);
			 if(debug)
					System.out.println("JBondDetailPanel:instantiate:found bond="+bondKey$);
			
			ArrayListsl=new ArrayList();
			String label$;
			for(Core c:ca)
               if(bondKey$.equals(c.type)){
            	   label$=entigrator.indx_getLabel(c.value);
            	   if(label$!=null)
            	     sl.add(label$);
               }
            if(sl.size()>0){
			Collections.sort(sl);
            String list$=Locator.toString(sl.toArray(new String[0]));
            locator$=Locator.append(locator$, EntityHandler.ENTITY_LIST, list$);
            }
			super.instantiate(console, locator$);
			 if(debug)
					System.out.println("JBondDetailPanel:instantiate:1");
			
            JItemPanel[] ipa=getItems();
            if(debug)
				System.out.println("JBondDetailPanel:instantiate:2");
            if(ipa!=null){
            String ip$;
            for(JItemPanel ip:ipa){
            	ip$=ip.getLocator();
            	ip$=Locator.append(ip$, JBondsPanel.EDGE_KEY, edgeKey$);
            	ip$=Locator.append(ip$, JBondsPanel.BOND_KEY, bondKey$);
            	ip.setLocator(ip$);
            }
			putItems(ipa);
            }
	   }catch(Exception e){
			Logger.getLogger(getClass().getName()).info(e.toString());
		}	 
			return this;
       
       
        }
	/**
	 * Get the context menu.
	 * @return the context menu.
	 */
	@Override
		public JMenu getContextMenu() {
		
			menu1 =new JMenu("Context"); 
			menu1.addMenuListener(new MenuListener(){
				@Override
				public void menuSelected(MenuEvent e) {
				//	System.out.println("JBondDetailPanel:getConextMenu:BEGIN");
					menu1.removeAll();
					JMenuItem	selectItem = new JMenuItem("Select all");
					   selectItem.addActionListener(new ActionListener() {
							@Override
							public void actionPerformed(ActionEvent e) {
						      JItemPanel[] ipa=getItems();
						      if(ipa!=null){
						    	  for(JItemPanel ip:ipa)
						    		  ip.setChecked(true);
						      }
							}
						} );
						menu1.add(selectItem);
						JMenuItem unselectItem = new JMenuItem("Unselect all");
						   unselectItem.addActionListener(new ActionListener() {
								@Override
								public void actionPerformed(ActionEvent e) {
							      JItemPanel[] ipa=getItems();
							      if(ipa!=null){
							    	  for(JItemPanel ip:ipa)
							    		  ip.setChecked(false);
							      }
								}
							} );
				menu1.addSeparator();
				JMenuItem doneItem = new JMenuItem("Done");
					doneItem.addActionListener(new ActionListener(){
						@Override
						public void actionPerformed(ActionEvent e) {
							if(requesterResponseLocator$!=null){
								try{
								   byte[] ba=Base64.decodeBase64(requesterResponseLocator$);
								   String responseLocator$=new String(ba,"UTF-8");
								   JConsoleHandler.execute(console, responseLocator$);
									}catch(Exception ee){
										LOGGER.severe(ee.toString());
									}
							}else
							  console.back();
							
						}
						
					});
				menu1.add(doneItem);
				menu1.addSeparator();
				addItem = new JMenuItem("Add");
				addItem.addActionListener(new ActionListener() {
					@Override
					public void actionPerformed(ActionEvent e) {
						try{
							Entigrator entigrator=console.getEntigrator(entihome$);
							
							JContext adp=(JContext)ExtensionHandler.loadHandlerInstance(entigrator,BondDetailHandler.EXTENSION_KEY ,"gdt.jgui.entity.bonddetail.JAddDetailPanel" );
							String adpLocator$=adp.getLocator();
							adpLocator$=Locator.append(adpLocator$, Entigrator.ENTIHOME, entihome$);
							adpLocator$=Locator.append(adpLocator$, EntityHandler.ENTITY_KEY, entityKey$);
							JConsoleHandler.execute(console, adpLocator$);
							
						}catch(Exception ee){
							LOGGER.severe(ee.toString());
						}
					}
				} );
				menu1.add(addItem);
			   if(hasToPaste()){
				   JMenuItem pasteItem = new JMenuItem("Paste");
					pasteItem.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {
							paste();
							
						}
					} );
					menu1.add(pasteItem);
			   }
			   if(hasSelectedItems()){
				   JMenuItem deleteItem = new JMenuItem("Delete");
					deleteItem.addActionListener(new ActionListener() {
						@Override
						public void actionPerformed(ActionEvent e) {
							int response = JOptionPane.showConfirmDialog(console.getContentPanel(), "Delete ?", "Confirm",
							        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
						   if (response == JOptionPane.YES_OPTION){ 
								
							delete();
							JBondDetailPanel bdp=new JBondDetailPanel();
							String bdpLocator$=bdp.getLocator();
							bdpLocator$=Locator.append(bdpLocator$, Entigrator.ENTIHOME,entihome$);
							bdpLocator$=Locator.append(bdpLocator$, EntityHandler.ENTITY_KEY,entityKey$);
							bdpLocator$=Locator.append(bdpLocator$, JBondsPanel.BOND_KEY,bondKey$);
							JConsoleHandler.execute(console, bdpLocator$);
						   }
						}
					} );
					menu1.add(deleteItem);
			   }
			  
		   
				}
				@Override
				public void menuDeselected(MenuEvent e) {
				}
				@Override
				public void menuCanceled(MenuEvent e) {
				}	
		});
			return menu1;	
		}

	private void paste(){
		try{
		//	System.out.println("JBondDetailPanel:paste:BEGIN");
			String[] sa=console.clipboard.getContent();
			if(sa==null){
				System.out.println("JBondDetailPanel:paste:empty clipboard");
				return;
			}
		//	System.out.println("JBondDetailPanel:paste:sa="+sa.length);
			Entigrator entigrator=console.getEntigrator(entihome$);
			for(String s:sa){
			   s=Locator.append(s, JBondsPanel.EDGE_KEY, edgeKey$);	
			   s=Locator.append(s, JBondsPanel.BOND_KEY, bondKey$);
			   BondDetailHandler.addDetail(entigrator, s);
			}
			JBondDetailPanel dp=new JBondDetailPanel();
			String adpLocator$=dp.getLocator();
			adpLocator$=Locator.append(adpLocator$, Entigrator.ENTIHOME, entihome$);
			adpLocator$=Locator.append(adpLocator$, EntityHandler.ENTITY_KEY, entityKey$);
			adpLocator$=Locator.append(adpLocator$,JBondsPanel.BOND_KEY , bondKey$);
			adpLocator$=Locator.append(adpLocator$,JBondsPanel.EDGE_KEY , edgeKey$);
			JConsoleHandler.execute(console, adpLocator$);
			
		}catch(Exception ee){
			LOGGER.severe(ee.toString());
		}
	}
	private  boolean hasToPaste(){
		try{
		String[] sa=console.clipboard.getContent();
		if(sa==null||sa.length<1)
			return false;
		Properties clipLocator;
		
		for(String s:sa){
			//System.out.println("JBondDetailPanel:hasToPaste:s="+s);
			clipLocator=Locator.toProperties(s);
			if(clipLocator.getProperty(EntityHandler.ENTITY_KEY)!=null)
				return true;
		}
		}catch(Exception e){
			Logger.getLogger(getClass().getName()).severe(e.toString());
		}
		return false;
	}
	private  void  delete(){
		try{
		String[]sa=listSelectedItems();
		if(sa==null||sa.length<1)
			return ;
		Entigrator entigrator=console.getEntigrator(entihome$);
		for(String s:sa){
			BondDetailHandler.deleteDetail(entigrator, s);
		}
		
	}catch(Exception e){
		Logger.getLogger(getClass().getName()).severe(e.toString());	
		}
	
	}
	private static void saveSelection(JMainConsole console, String entihome$, String edgeKey$,String bondKey$){
		try{
		if(bondKey$==null)
			return;
		Entigrator entigrator=console.getEntigrator(entihome$);	
		Sack edge=entigrator.getEntityAtKey(edgeKey$);
		if(!edge.existsElement("parameter"))
			edge.createElement("parameter");
		edge.putElementItem("parameter", new Core(null,JBondsPanel.BOND_KEY,bondKey$));
		entigrator.save(edge);
		}catch(Exception e){
			System.out.println("JBondsPanel:saveSelectedBond:"+e.toString());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy