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

gdt.jgui.tool.JEntityEditor Maven / Gradle / Ivy

The newest version!
package gdt.jgui.tool;
/*
 * Copyright 2016 Alexander Imas
 * This file is part 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 gdt.data.entity.BaseHandler;
import gdt.data.entity.EntityHandler;
import gdt.data.grain.Core;
import gdt.data.grain.Identity;
import gdt.data.grain.Locator;
import gdt.data.grain.Sack;
import gdt.data.grain.Support;
import gdt.data.store.Entigrator;
import gdt.jgui.base.JBaseNavigator;
import gdt.jgui.console.JConsoleHandler;
import gdt.jgui.console.JContext;
import gdt.jgui.console.JMainConsole;
import gdt.jgui.console.JRequester;
import gdt.jgui.console.ReloadDialog;
import gdt.jgui.console.WContext;
import gdt.jgui.console.WUtils;
import gdt.jgui.entity.JEntitiesPanel;
import gdt.jgui.entity.JEntityDigestDisplay;
import gdt.jgui.entity.JEntityPrimaryMenu;
import gdt.jgui.entity.JEntityStructurePanel;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.BoxLayout;
import javax.swing.ListSelectionModel;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Logger;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableModel;

import org.apache.commons.codec.binary.Base64;
/**
 * This class is a graphical entity editor. 
 * @author imasa
 *
 */
public class JEntityEditor extends JPanel implements JContext,JRequester,WContext{
	private static final long serialVersionUID = 1L;
	private static final String ACTION_RENAME_ELEMENT="action rename element";
	private static final String ACTION_ADD_ELEMENT="action add element";
	private static final String ACTION_EDIT_CELL="action edit cell";
	private static final String CELL_FIELD="cell field";
	private static final String CELL_FIELD_TYPE="cell field type";
	private static final String CELL_FIELD_NAME="cell field name";
	private static final String CELL_FIELD_VALUE="cell field value";
	private static final String CORE_NAME="cell core name";
	private static final String ELEMENT="element";
	public static final String SHOW_CONTAINERS="show containers";
	private Logger LOGGER=Logger.getLogger(JEntityEditor.class.getName());
	public final static String ENTITY_EDIT="entity edit";
	private JMainConsole console;
	private String entihome$;
	private String entityKey$;
	private String entityLabel$;
	private String requesterAction$;
	private String element$;
	private Core[] content;
	JTabbedPane tabbedPane;
	JMenu menu;
	JMenuItem deleteItemsItem;
	JMenuItem editCellItem;
	JMenuItem copyItem;
	JMenuItem cutItem;
	JMenuItem pasteItem;
	String message$;
	Sack entity;
	String saveId$;
	boolean debug=false;
	boolean ignoreOutdate=false;
/**
 * The default consturctor.
 */
	public JEntityEditor() {
		setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
		tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		add(tabbedPane);
	}
private void showElement(Sack entity,String element$){
	try{
//		System.out.println("EntityEditor:showElement:"+element$);
	Core[] ca=null;
	if("attributes".equals(element$))
		ca=entity.attributesGet();
	else
	   ca=entity.elementGet(element$);
	  final JTable table = new JTable();
	  DefaultTableModel model=new DefaultTableModel(
			  null
			  ,
				new String[] {
					"type", "name", "value"
				}
			);
	  table.setModel(model);
	  table.getTableHeader().setDefaultRenderer(new SimpleHeaderRenderer());
	  table.getTableHeader().addMouseListener(new MouseAdapter() {
		    @Override
		    public void mouseClicked(MouseEvent e) {
		        int col = table.columnAtPoint(e.getPoint());
		        String name = table.getColumnName(col);
//		        System.out.println("Column index selected " + col + " " + name);
		        sort(name);
		    }
		});
	  JScrollPane scrollPane = new JScrollPane();
    	tabbedPane.add(element$,scrollPane);
		scrollPane.add(table);
		scrollPane.setViewportView(table); 
	if(ca!=null)	
	  for(Core aCa:ca){
		  model.addRow(new String[]{aCa.type,aCa.name,aCa.value});
	  }
	}catch(Exception e ){
		LOGGER.severe(e.toString());
	}
}
private Core[] getContent(boolean selected){
	try{
		JScrollPane scrollPane=(JScrollPane)tabbedPane.getSelectedComponent();
		JTable table=(JTable)scrollPane.getViewport().getView();
		DefaultTableModel model=(DefaultTableModel)table.getModel();
		ListSelectionModel listModel=table.getSelectionModel();
		int cnt=model.getRowCount();
		if(cnt<1)
			return null;
		ArrayListcl=new ArrayList();
		for(int i=0;i0)
			model.removeRow(0);
		int cnt=ca.length;
		if(cnt<1)
			return;
		for(int i=0;i0)
		    	return true;
		    return false;
		}catch(Exception e){
			LOGGER.severe(e.toString());
			return false;
		}
	}
	private boolean hasEditingCell(){
		try{
			JScrollPane scrollPane=(JScrollPane)tabbedPane.getSelectedComponent();
			JTable table=(JTable)scrollPane.getViewport().getView();
//			System.out.println("Entityeditor:hasEditingCell:x="+table.getEditingRow()+" y="+table.getEditingColumn());
			if(table.getEditingColumn()>-1&&table.getEditingRow()>-1)
				return true;
		}catch(Exception e){
			LOGGER.severe(e.toString());
		}
		return false;
	}
	private void selectElement(String title$){
		int cnt=tabbedPane.getComponentCount();
		for(int i=0;isrl=new ArrayList();
			for(int i=0;i ol=new ArrayList();
			Core row;
			boolean skip;
			for(int i=0;i0)
				tableModel.removeRow(0);
			for(Core aRa:ra){
				 tableModel.addRow(new String[]{aRa.type,aRa.name,aRa.value});
			}
		}catch(Exception e){
			LOGGER.severe(e.toString());
		}
	}
	private String getRenameElementLocator(String element$) {
		        JTextEditor textEditor=new JTextEditor();
		        String teLocator$=textEditor.getLocator();
		        teLocator$= Locator.merge(getLocator(),teLocator$);
		        teLocator$=Locator.append(teLocator$ ,JTextEditor.TEXT,element$);
		        teLocator$=Locator.append(teLocator$ ,ELEMENT,element$);
		        teLocator$=Locator.append(teLocator$ ,JRequester.REQUESTER_ACTION,ACTION_RENAME_ELEMENT);
				teLocator$=Locator.append(teLocator$, Locator.LOCATOR_TITLE,"Rename element");
				teLocator$=Locator.append(teLocator$,BaseHandler.HANDLER_CLASS,JTextEditor.class.getName());
				String responseLocator$=getLocator();
				responseLocator$=Locator.append(responseLocator$, BaseHandler.HANDLER_METHOD, "response");
				responseLocator$=Locator.append(responseLocator$, JRequester.REQUESTER_ACTION, ACTION_ADD_ELEMENT);
				teLocator$=Locator.append(teLocator$,JRequester.REQUESTER_RESPONSE_LOCATOR,Locator.compressText(responseLocator$));
				return teLocator$;
			}
	private String getEditCellLocator() {
        try{
		save();
        JTextEditor textEditor=new JTextEditor();
        String locator$=textEditor.getLocator();
        locator$= Locator.merge(getLocator(),locator$);
        JScrollPane scrollPane=(JScrollPane)tabbedPane.getSelectedComponent();
		JTable table=(JTable)scrollPane.getViewport().getView();
		int i=tabbedPane.getSelectedIndex();
		String element$=tabbedPane.getTitleAt(i);
		int x=table.getEditingRow();
		int y=table.getEditingColumn();
		String cellField$=CELL_FIELD_TYPE;
		if(y==1)
			cellField$=CELL_FIELD_NAME;
		else if(y==2)
		   cellField$=CELL_FIELD_VALUE;
		TableModel model=table.getModel();
		String text$=(String)model.getValueAt(x, y);
		text$=Locator.compressText(text$);
		locator$=Locator.append(locator$ ,JTextEditor.IS_BASE64,Locator.LOCATOR_TRUE);
		String coreName$=(String)model.getValueAt(x, 1);
        locator$=Locator.append(locator$ ,JTextEditor.TEXT,text$);
        locator$=Locator.append(locator$ ,ELEMENT,element$);
        locator$=Locator.append(locator$ ,CELL_FIELD,cellField$);
        locator$=Locator.append(locator$ ,CORE_NAME,coreName$);
        locator$=Locator.append(locator$ ,JRequester.REQUESTER_ACTION,ACTION_EDIT_CELL);
		locator$=Locator.append(locator$, Locator.LOCATOR_TITLE,"Edit item");
		locator$=Locator.append(locator$,BaseHandler.HANDLER_CLASS,JTextEditor.class.getName());
		 return locator$;
        }catch(Exception e){
        	LOGGER.severe(e.toString());
        	return null;
        }
	}
	/**
	 * Execute the response locator.
	 * @param console the main console.
	 * @param locator$ the response locator.
	 * 
	 */
	@Override
public void response(JMainConsole console, String locator$) {
//	System.out.println("EntityEditor:response:"+Locator.remove(locator$,Locator.LOCATOR_ICON ));
	try{
		Properties locator=Locator.toProperties(locator$);
		String action$=locator.getProperty(JRequester.REQUESTER_ACTION);
		String text$=locator.getProperty(JTextEditor.TEXT);
		if(ACTION_ADD_ELEMENT.equals(action$)){
				  Entigrator entigrator=console.getEntigrator(entihome$);
				  entity=entigrator.getEntityAtKey(entityKey$);
				  if(entity.existsElement(text$))
					  return;
				  entity.createElement(text$);
				  entity.putElementItem(text$, new Core(null,"item",null));
				  entigrator.ent_alter(entity);
				  locator$=getLocator();
				  locator$=Locator.remove(locator$, BaseHandler.HANDLER_METHOD);
				  locator$=Locator.remove(locator$, JRequester.REQUESTER_ACTION);
				  JConsoleHandler.execute(console, locator$);
				 return;
		}
		if(ACTION_RENAME_ELEMENT.equals(action$)){
			String entihome$=locator.getProperty(Entigrator.ENTIHOME);
			Entigrator entigrator=console.getEntigrator(entihome$);
			String entityKey$=locator.getProperty(EntityHandler.ENTITY_KEY);
			String element$=locator.getProperty(JTextEditor.TEXT);
			String oldElement$=locator.getProperty(ELEMENT);
			entity=entigrator.getEntityAtKey(entityKey$);
			entity.createElement(element$);
			entity.elementReplace(element$, entity.elementGet(oldElement$));
			entity.removeElement(oldElement$);
			entigrator.ent_alter(entity);
			locator$=Locator.append(locator$, Locator.LOCATOR_TITLE,"Edit");
			locator$=Locator.append(locator$,EntityHandler.ENTITY_ACTION,JEntityEditor.ENTITY_EDIT);
			locator$=Locator.append(locator$,BaseHandler.HANDLER_CLASS,JEntityEditor.class.getName());
			locator$=Locator.append(locator$,ELEMENT,element$);
			JConsoleHandler.execute(console, locator$);
		}
		if(ACTION_EDIT_CELL.equals(action$)){
			String entihome$=locator.getProperty(Entigrator.ENTIHOME);
			Entigrator entigrator=console.getEntigrator(entihome$);
			String entityKey$=locator.getProperty(EntityHandler.ENTITY_KEY);
			entity=entigrator.getEntityAtKey(entityKey$);
			//System.out.println("EntityEditor:response:entity="+entity.getProperty("label"));
			String element$=locator.getProperty(ELEMENT);
			text$=locator.getProperty(JTextEditor.TEXT);
			if(debug)
			System.out.println("EntityEditor:response:text="+text$);
			if(Locator.LOCATOR_TRUE.equals(locator.getProperty(JTextEditor.IS_BASE64))){
				byte[] ba=Base64.decodeBase64(text$);
				text$ = new String(ba, "UTF-8");
	//			System.out.println("EntityEditor:response:decoded text="+text$);
			}
				
			String cellField$=locator.getProperty(CELL_FIELD);
			String core$=locator.getProperty(CORE_NAME);
			Core core;
			if("attributes".equals(element$))
				core=entity.getAttribute(core$);
			else	
			 core=entity.getElementItem(element$, core$);
		//	if(core==null)
		//	System.out.println("EntityEditor:response:cannot find core="+core$);
			if(CELL_FIELD_TYPE.equals(cellField$))
				core.type=text$;
			else if(CELL_FIELD_NAME.equals(cellField$))
				core.name=text$;
			else if (CELL_FIELD_VALUE.equals(cellField$))
				core.value=text$;
			if("attributes".equals(element$))
				entity.putAttribute(core);
			else	
				entity.putElementItem(element$, core);
			entigrator.ent_alter(entity);
			if(debug)
			System.out.println("EntityEditor:response:entity saved");
			locator$=Locator.append(locator$, Locator.LOCATOR_TITLE,"Edit");
			locator$=Locator.append(locator$,EntityHandler.ENTITY_ACTION,JEntityEditor.ENTITY_EDIT);
			locator$=Locator.append(locator$,BaseHandler.HANDLER_CLASS,JEntityEditor.class.getName());
			locator$=Locator.append(locator$,ELEMENT,element$);
			JConsoleHandler.execute(console, locator$);
		}
		
	}catch(Exception e){
		LOGGER.severe(e.toString());
	}
}
	private class SimpleHeaderRenderer extends JLabel implements TableCellRenderer {
		private static final long serialVersionUID = 1L;
		public SimpleHeaderRenderer() {
	        setFont(new Font("Consolas", Font.BOLD, 14));
	        setForeground(Color.BLUE);
	        setBorder(BorderFactory.createEtchedBorder());
	        setHorizontalAlignment( JLabel.CENTER );
	    }
	    @Override
	    public Component getTableCellRendererComponent(JTable table, Object value,
	            boolean isSelected, boolean hasFocus, int row, int column) {
	        setText(value.toString());
	        return this;
	    }
	}
	/**
	 * No action.
	 */
	@Override
	public void close() {
		
	}
	/**
	 * Get context subtitle.
	 * @return the context subtitle.
	 */		
	@Override
	public String getSubtitle() {
		// TODO Auto-generated method stub
		return entityKey$;
	}
	@Override
	public void activate() {
		if(debug)
			System.out.println("JWeblinksPanel:activate:begin");
		if(ignoreOutdate){
			ignoreOutdate=false;
			return;
		}
		Entigrator entigrator=console.getEntigrator(entihome$);
		if(entity==null)
			return;
		if(!entigrator.ent_entIsObsolete(entity)){
			System.out.println("JWeblinksPanel:activate:up to date");
			return;
		}
		int n=new ReloadDialog(this).show();
		if(2==n){
			ignoreOutdate=true;
			return;
		}
		if(1==n){
			entigrator.ent_alter(entity);
			ignoreOutdate=true;
			return;
		}
		if(0==n){
			 entigrator.ent_reload(entityKey$);
			 JConsoleHandler.execute(console, getLocator());
			 ignoreOutdate=true;
			}
		
	}
	@Override
	public String getWebView(Entigrator entigrator, String locator$) {
		try{
			if(debug)
				System.out.println("JEntityEditor:locator="+locator$);
			Properties locator=Locator.toProperties(locator$);
			String webHome$=locator.getProperty(WContext.WEB_HOME);
			//
			String entityKey$=locator.getProperty(EntityHandler.ENTITY_KEY);
			String entityLabel$=null;
			if(entityKey$==null){
				String encodedLabel$=locator.getProperty(JEntitiesPanel.ENCODED_LABEL);
				if(encodedLabel$!=null){
						byte[] ba=Base64.decodeBase64(encodedLabel$);
						entityLabel$=new String(ba,"UTF-8");
						entityKey$=entigrator.indx_keyAtLabel(entityLabel$);
					}else{
				    entityLabel$=locator.getProperty(EntityHandler.ENTITY_LABEL);
				    entityKey$=entigrator.indx_keyAtLabel(entityLabel$);
				    if(entityKey$==null){
				    	byte[] ba=Base64.decodeBase64(entityLabel$);
						entityLabel$=new String(ba,"UTF-8");
						entityKey$=entigrator.indx_keyAtLabel(entityLabel$);
				    }
					}
			}else{
				entityLabel$=entigrator.indx_getLabel(entityKey$);
				if(debug)
					System.out.println("JEntityEditor:found label="+entityLabel$+" at key="+entityKey$);
			}
			//locator$=Locator.append(locator$, EntityHandler.ENTITY_LABEL, entityLabel$);
			locator$=Locator.remove(locator$, EntityHandler.ENTITY_LABEL);
			String webRequester$=locator.getProperty(WContext.WEB_REQUESTER);
			String element$=locator.getProperty(ELEMENT);
			String category$=entigrator.getEntityType(entityKey$);
			if(debug){
			System.out.println("JEntityEditor:web home="+webHome$+" locator="+locator$);
			System.out.println("JEntityEditor:web requester="+webRequester$);
			System.out.println("JEntityEditor:entity label="+entityLabel$+" element="+element$+" entity key="+entityKey$);
			}
			StringBuffer sb=new StringBuffer();
			sb.append("");
			sb.append("");
			sb.append("");
			sb.append(WUtils.getMenuBarScript());
			sb.append(WUtils.getMenuBarStyle());
			sb.append("");
		    sb.append("");
		    sb.append("
    "); sb.append("
  • Back
  • "); sb.append("
  • Home
  • "); String navLocator$=Locator.append(locator$, BaseHandler.HANDLER_CLASS, JBaseNavigator.class.getName()); navLocator$=Locator.append(navLocator$, Entigrator.ENTIHOME, entigrator.getEntihome()); String navUrl$=webHome$+"?"+WContext.WEB_LOCATOR+"="+Base64.encodeBase64URLSafeString(navLocator$.getBytes()); sb.append("
  • Base
  • "); sb.append("
  • "); sb.append("Context"); sb.append("
      "); Sack entity=entigrator.getEntityAtKey(entigrator.indx_keyAtLabel(entityLabel$)); String[] sa=entigrator.ent_listComponents(entity); if(sa!=null&&sa.length>0) sb.append("
    • Components
    • "); sa=entigrator.ent_listContainers(entity); if(sa!=null&&sa.length>0) sb.append("
    • Containers
    • "); sb.append("
    • Digest
    • "); sb.append("
    "); sb.append("
  • "); sb.append("
  • About
  • "); sb.append("
"); sb.append(""); sb.append(""); sb.append(""); sb.append("
Base:"); sb.append(entigrator.getBaseName()); sb.append("
Entity: "); sb.append(entityLabel$); sb.append("
Category: "); sb.append(category$); sb.append("
Facet: "); sb.append("Entity viewer"); sb.append("
"); //

Data

"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append("
Element:"); sb.append(""); sb.append("
"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); Core[] ca; if("attributes".equals(element$)) ca=entity.attributesGet(); else ca=entity.elementGet(element$); for(Core c:ca){ sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); } sb.append("
TypeNameValue
"+c.type+""+c.name+""+c.value+"
"); sb.append("

"); sb.append("

"); sb.append(""); sb.append(""); sb.append(""); return sb.toString(); }catch(Exception e){ Logger.getLogger(JEntityEditor.class.getName()).severe(e.toString()); } return null; } @Override public String getWebConsole(Entigrator entigrator, String locator$) { // TODO Auto-generated method stub return null; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy