
gdt.jgui.tool.JEntityEditor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JEntigrator Show documentation
Show all versions of JEntigrator Show documentation
The entigrator application
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("Base: ");
sb.append(entigrator.getBaseName());
sb.append(" Entity: ");
sb.append(entityLabel$);
sb.append(" ");
sb.append("Category: ");
sb.append(category$);
sb.append(" ");
sb.append("Facet: ");
sb.append("Entity viewer");
sb.append(" ");
sb.append("
");
//Data
");
sb.append("");
sb.append("");
sb.append("Element: ");
sb.append("");
sb.append("");
sb.append(" ");
sb.append(" ");
sb.append("
");
sb.append("");
sb.append("");
sb.append("Type ");
sb.append("Name ");
sb.append("Value ");
sb.append(" ");
Core[] ca;
if("attributes".equals(element$))
ca=entity.attributesGet();
else
ca=entity.elementGet(element$);
for(Core c:ca){
sb.append("");
sb.append(""+c.type+" ");
sb.append(""+c.name+" ");
sb.append(""+c.value+" ");
sb.append(" ");
}
sb.append("
");
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;
}
}
");
sb.append("
© 2015 - 2025 Weber Informatics LLC | Privacy Policy