/**
* @author Mauricio Araya maray[at]inf.utfsm.cl
* @author Jorge Avarias javarias[at]alumnos.inf.utfsm.cl
* @version 2
* @since
*
*
*/
package cl.utfsm.acs.ebe;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TreeMap;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import cl.utfsm.acs.ebe.util.EbeOpenFileFilter;
import cl.utfsm.acs.ebe.util.EbeTableModel;
import cl.utfsm.acs.ebe.util.MembersTableModel;
import cl.utfsm.acs.types.ComplexObject;
/**
* @author Jorge Avarias (javarias[at]inf.utfsm.cl)
*
* This class is teh main Error Browser Editor
* window GUI. <br />
* To edit this class you must use edit with Eclipse
* Visual Editor. It's extremelly insane to use an
* text editor to edit this class.
*/
public class ErrorBrowserEditor extends JFrame {
private JPanel jContentPane = null;
private JSplitPane jSplitPane = null;
private JPanel mainPanel = null;
private JScrollPane jScrollPane = null;
private static JTextPane textMessagePane = null;
private JSplitPane jSplitPane1 = null;
private JTabbedPane jTabbedPane = null;
private JPanel tableViewPanel = null;
private JPanel xmlViewPanel = null;
private JPanel nodesPanel = null;
private JPanel jPanel = null;
private JScrollPane jScrollPane2 = null;
private JTable docTable = null;
private JScrollPane jScrollPane3 = null;
private JTable nodeAttributesTable = null;
private JScrollPane jScrollPane4 = null;
private JTree nodesTree = null;
private JScrollPane jScrollPane5 = null;
private JTable membersTable = null;
private JPanel jPanel1 = null;
private JScrollPane jScrollPane1 = null;
private JTree docsTree = null;
private JScrollPane jScrollPane6 = null;
private JEditorPane xmlEditorPane = null;
private JMenuBar EBEMenuBar = null;
private JMenu fileMenu = null;
private JMenuItem exitItem = null;
private JPanel jPanel2 = null;
private JButton addButton = null;
private JButton removeButton = null;
private JPopupMenu addPopupMenu = null;
private JMenuItem addFileItem = null;
private JMenuItem addDirectoryItem = null;
private JMenuItem addDefaultsItem = null;
private DefaultMutableTreeNode docNodeSelected = null;
private EbeDocument docSelected = null;
private DefaultMutableTreeNode complexNodeSelected = null;
private ComplexObject complexSelected = null;
private static EbeDocumentManager manager = null;
private JPanel nodesEditPanel = null;
private JButton newNodeButton = null;
private JButton removeNodeButton = null;
private JSplitPane jSplitPane2 = null;
private JToolBar jToolBar = null;
private JButton editButton = null;
private JButton saveButton = null;
private JButton cancelEditButton = null;
private JLabel jLabel = null;
private JLabel locationField = null;
private JButton deleteDocButton = null;
private JButton newDocButton = null;
private JPanel jPanel4 = null;
private JPanel membersEditPanel = null;
private JButton addMemmberButton = null;
private JButton removeMemberButton = null;
private JPopupMenu newNodePopupMenu = null; // @jve:decl-index=0:visual-constraint="363,634"
private JMenuItem newErrorMenuItem = null;
private JMenuItem newCompletionMenuItem = null;
private JPopupMenu removePopupMenu = null; // @jve:decl-index=0:visual-constraint="134,8"
private JMenuItem removeSelectedItem = null;
private JMenuItem cleanAllFilesItem = null;
public static boolean logInfo=true;
// @jve:decl-index=0:visual-constraint=""
/**
* This is the default constructor
*/
public ErrorBrowserEditor() {
super();
initialize();
manager = new EbeDocumentManager();
ArrayList<String> attrs = Member.getClassType().getAttrNames();
String columnNames[] = new String[attrs.size()];
attrs.toArray(columnNames);
DefaultTableModel model = new DefaultTableModel(columnNames,0);
membersTable.setModel(model);
}
/**
* This method initializes this class
*
* @return void
*/
private void initialize() {
this.setSize(800, 630);
this.setJMenuBar(getEBEMenuBar());
this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
this.setContentPane(getJContentPane());
this.setTitle("Error browser and editor");
this.setJMenuBar(getEBEMenuBar());
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if(jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJSplitPane(), java.awt.BorderLayout.CENTER);
jContentPane.add(getJToolBar(), java.awt.BorderLayout.NORTH);
}
return jContentPane;
}
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane.setTopComponent(getMainPanel());
jSplitPane.setBottomComponent(getJScrollPane());
jSplitPane.setDividerLocation(470);
}
return jSplitPane;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getMainPanel() {
if (mainPanel == null) {
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(getJSplitPane1(), java.awt.BorderLayout.CENTER);
}
return mainPanel;
}
/**
* This method initializes jScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getTextMessagePane());
}
return jScrollPane;
}
/**
* This method initializes jTextPane
*
* @return javax.swing.JTextPane
*/
private static JTextPane getTextMessagePane() {
if (textMessagePane == null) {
textMessagePane = new JTextPane();
textMessagePane.setEditable(false);
}
return textMessagePane;
}
/**
* This method initializes jSplitPane1
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane1() {
if (jSplitPane1 == null) {
jSplitPane1 = new JSplitPane();
jSplitPane1.setDividerLocation(200);
jSplitPane1.setLeftComponent(getJPanel1());
jSplitPane1.setRightComponent(getJTabbedPane());
}
return jSplitPane1;
}
/**
* This method initializes jTabbedPane
*
* @return javax.swing.JTabbedPane
*/
private JTabbedPane getJTabbedPane() {
if (jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab("Table view", null, getTableViewPanel(), null);
jTabbedPane.addTab("XML View", null, getXmlViewPanel(), null);
}
return jTabbedPane;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getTableViewPanel() {
if (tableViewPanel == null) {
GridLayout gridLayout = new GridLayout();
gridLayout.setRows(1);
tableViewPanel = new JPanel();
tableViewPanel.setLayout(gridLayout);
tableViewPanel.add(getNodesPanel(), null);
}
return tableViewPanel;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getXmlViewPanel() {
if (xmlViewPanel == null) {
xmlViewPanel = new JPanel();
xmlViewPanel.setLayout(new BorderLayout());
xmlViewPanel.add(getJScrollPane6(), java.awt.BorderLayout.CENTER);
}
return xmlViewPanel;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getNodesPanel() {
if (nodesPanel == null) {
nodesPanel = new JPanel();
nodesPanel.setLayout(new BorderLayout());
nodesPanel.add(getJPanel(), java.awt.BorderLayout.WEST);
nodesPanel.add(getJScrollPane2(), java.awt.BorderLayout.NORTH);
nodesPanel.add(getJSplitPane2(), java.awt.BorderLayout.CENTER);
}
return nodesPanel;
}
/**
* This method initializes jPanel
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(new BorderLayout());
jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Errors/Completions", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.BOLD, 12), new java.awt.Color(51,51,51)));
jPanel.setPreferredSize(new java.awt.Dimension(200,300));
jPanel.add(getJScrollPane4(), java.awt.BorderLayout.CENTER);
jPanel.add(getNodesEditPanel(), java.awt.BorderLayout.SOUTH);
}
return jPanel;
}
/**
* This method initializes jScrollPane2
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane2() {
if (jScrollPane2 == null) {
jScrollPane2 = new JScrollPane();
jScrollPane2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Error file attributes", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.BOLD, 12), new java.awt.Color(51,51,51)));
jScrollPane2.setPreferredSize(new java.awt.Dimension(460,175));
jScrollPane2.setViewportView(getDocTable());
}
return jScrollPane2;
}
/**
* This method initializes jTable
*
* @return javax.swing.JTable
*/
private JTable getDocTable() {
if (docTable == null) {
docTable = new JTable();
docTable.setModel(new EbeTableModel());
docTable.setEnabled(true);
}
return docTable;
}
/**
* This method initializes jScrollPane3
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane3() {
if (jScrollPane3 == null) {
jScrollPane3 = new JScrollPane();
jScrollPane3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Errors/Completions Attributes", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.BOLD, 12), new java.awt.Color(51,51,51)));
jScrollPane3.setPreferredSize(new java.awt.Dimension(100,100));
jScrollPane3.setViewportView(getNodeAttributesTable());
}
return jScrollPane3;
}
/**
* This method initializes jTable1
*
* @return javax.swing.JTable
*/
private JTable getNodeAttributesTable() {
if (nodeAttributesTable == null) {
nodeAttributesTable = new JTable();
nodeAttributesTable.setModel(new EbeTableModel());
nodeAttributesTable.setEnabled(false);
}
return nodeAttributesTable;
}
/**
* This method initializes jScrollPane4
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane4() {
if (jScrollPane4 == null) {
jScrollPane4 = new JScrollPane();
jScrollPane4.setPreferredSize(new java.awt.Dimension(125,363));
jScrollPane4.setViewportView(getNodesTree());
}
return jScrollPane4;
}
/**
* This method initializes jTree1
*
* @return javax.swing.JTree
*/
private JTree getNodesTree() {
if (nodesTree == null) {
nodesTree = new JTree(new DefaultMutableTreeNode("ROOT"));
nodesTree.setRootVisible(false);
nodesTree.setCellRenderer(new ErrorTreeCellRenderer());
nodesTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
complexNodeSelected = (DefaultMutableTreeNode)nodesTree.getLastSelectedPathComponent();
if(complexNodeSelected != null)
complexSelected = (ComplexObject)complexNodeSelected.getUserObject();
refreshNodeAttributesTable();
refreshMembersTable();
}
});
}
ToolTipManager.sharedInstance().registerComponent(nodesTree);
return nodesTree;
}
/**
* This method initializes jScrollPane5
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane5() {
if (jScrollPane5 == null) {
jScrollPane5 = new JScrollPane();
jScrollPane5.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Members", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
jScrollPane5.setPreferredSize(new java.awt.Dimension(10,100));
jScrollPane5.setViewportView(getMembersTable());
}
return jScrollPane5;
}
/**
* This method initializes jTable2
*
* @return javax.swing.JTable
*/
private JTable getMembersTable() {
if (membersTable == null) {
membersTable = new JTable();
membersTable.setEnabled(false);
}
return membersTable;
}
/**
* This method initializes jPanel1
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel1() {
if (jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setLayout(new BorderLayout());
jPanel1.add(getJScrollPane1(), java.awt.BorderLayout.CENTER);
jPanel1.add(getJPanel2(), java.awt.BorderLayout.SOUTH);
}
return jPanel1;
}
/**
* This method initializes jScrollPane1
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane1() {
if (jScrollPane1 == null) {
jScrollPane1 = new JScrollPane();
jScrollPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Error definition files", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", java.awt.Font.BOLD, 12), new java.awt.Color(51,51,51)));
jScrollPane1.setViewportView(getDocsTree());
}
return jScrollPane1;
}
/**
* This method initializes docsNode
*
* @return javax.swing.JTree
*/
private JTree getDocsTree() {
if (docsTree == null) {
docsTree = new JTree(new DefaultMutableTreeNode("ROOT"));
docsTree.setRootVisible(false);
docsTree.setToggleClickCount(1);
docsTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent e) {
docNodeSelected=(DefaultMutableTreeNode)docsTree.getLastSelectedPathComponent();
if(docNodeSelected!=null){
docSelected = (EbeDocument)docNodeSelected.getUserObject();
locationField.setText(docSelected.getPath());
}
else{
locationField.setText("(none)");
}
complexNodeSelected = null;
complexSelected=null;
refreshNodesTree();
refreshDocTable();
try {
loadXmlView();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
ToolTipManager.sharedInstance().registerComponent(docsTree);
return docsTree;
}
/**
* This method initializes jScrollPane6
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane6() {
if (jScrollPane6 == null) {
jScrollPane6 = new JScrollPane();
jScrollPane6.setViewportView(getXmlEditorPane());
}
return jScrollPane6;
}
/**
* This method initializes jEditorPane
*
* @return javax.swing.JEditorPane
*/
private JEditorPane getXmlEditorPane() {
if (xmlEditorPane == null) {
xmlEditorPane = new JEditorPane();
xmlEditorPane.setContentType("text/plain");
xmlEditorPane.setEditable(false);
}
return xmlEditorPane;
}
/**
* This method initializes jJMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getEBEMenuBar() {
if (EBEMenuBar == null) {
EBEMenuBar = new JMenuBar();
EBEMenuBar.add(getFileMenu());
}
return EBEMenuBar;
}
/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getFileMenu() {
if (fileMenu == null) {
fileMenu = new JMenu();
fileMenu.setText("File");
fileMenu.add(getExitItem());
}
return fileMenu;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getExitItem() {
if (exitItem == null) {
exitItem = new JMenuItem();
exitItem.setText("Exit");
exitItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return exitItem;
}
/**
* This method initializes jPanel2
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel2() {
if (jPanel2 == null) {
GridBagConstraints gridBagConstraints11 = new GridBagConstraints();
gridBagConstraints11.gridx = 3;
gridBagConstraints11.gridy = 0;
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.gridx = 2;
gridBagConstraints1.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints1.gridy = 0;
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.gridx = 1;
jPanel2 = new JPanel();
jPanel2.setLayout(new GridBagLayout());
jPanel2.add(getAddButton(), gridBagConstraints);
jPanel2.add(getRemoveButton(), gridBagConstraints1);
}
return jPanel2;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getAddButton() {
if (addButton == null) {
addButton = new JButton();
addButton.setText("Load");
addButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int x = getAddButton().getX();
int y = getAddButton().getY();
getAddPopupMenu().show(getAddButton(),x,y);
}
});
}
return addButton;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getRemoveButton() {
if (removeButton == null) {
removeButton = new JButton();
removeButton.setText("Remove");
removeButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
removeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int x = getRemoveButton().getX();
int y = getRemoveButton().getY();
getRemovePopupMenu().show(getRemoveButton(),x-40,y);
}
});
}
return removeButton;
}
/**
* This method initializes jPopupMenu
*
* @return javax.swing.JPopupMenu
*/
private JPopupMenu getAddPopupMenu() {
if (addPopupMenu == null) {
addPopupMenu = new JPopupMenu();
addPopupMenu.add(getAddFileItem());
addPopupMenu.add(getAddDirectoryItem());
addPopupMenu.add(getAddDefaultsItem());
}
return addPopupMenu;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getAddFileItem() {
if (addFileItem == null) {
addFileItem = new JMenuItem();
addFileItem.setText("File");
addFileItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new EbeOpenFileFilter());
int retval = fc.showOpenDialog(ErrorBrowserEditor.this);
if (retval == JFileChooser.APPROVE_OPTION){
manager.loadDocument(fc.getSelectedFile().getAbsolutePath());
refreshDocsTree();
}
}
});
}
return addFileItem;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getAddDirectoryItem() {
if (addDirectoryItem == null) {
addDirectoryItem = new JMenuItem();
addDirectoryItem.setText("Directory");
addDirectoryItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int retval = fc.showOpenDialog(ErrorBrowserEditor.this);
if (retval == JFileChooser.APPROVE_OPTION){
manager.addDirectory(fc.getSelectedFile().getAbsolutePath());
/*open a dialog open directory
manager.addDirectory();
*/
refreshDocsTree();
}
}
});
}
return addDirectoryItem;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getAddDefaultsItem() {
if (addDefaultsItem == null) {
addDefaultsItem = new JMenuItem();
addDefaultsItem.setText("Defaults");
addDefaultsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
manager.addDefaults();
refreshDocsTree();
}
});
}
return addDefaultsItem;
}
public void refreshDocsTree(){
TreeMap<String,EbeDocument> docs = manager.getDocuments();
DefaultMutableTreeNode root = (DefaultMutableTreeNode)docsTree.getModel().getRoot();
root.removeAllChildren();
for(EbeDocument doc: docs.values()){
root.add(new DefaultMutableTreeNode(doc));
}
((DefaultTreeModel)docsTree.getModel()).reload();
}
public EbeDocument getSelectedDoc(){
return docSelected;
}
public Error getSelectedError(){
return (Error)complexSelected;
}
private void refreshNodesTree(){
DefaultTreeModel model = (DefaultTreeModel)nodesTree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
root.removeAllChildren();
if(docSelected == null){
model.reload();
return;
}
TreeMap<String,ComplexObject> nodes = docSelected.getNodes();
for(ComplexObject node: nodes.values()){
root.add(new DefaultMutableTreeNode(node));
}
model.reload();
}
public void publicRefreshNodeTree(){
refreshNodesTree();
complexSelected=null;
complexNodeSelected=null;
refreshNodeAttributesTable();
refreshMembersTable();
}
private void refreshDocTable(){
if(docSelected==null){
docTable.setModel(new EbeTableModel());
return;
}
EbeTableModel model = new EbeTableModel(docSelected,this);
docTable.setModel(model);
docTable.validate();
}
private void refreshNodeAttributesTable(){
if(complexSelected==null){
nodeAttributesTable.setModel(new EbeTableModel());
return;
}
EbeTableModel model = new EbeTableModel(complexSelected,this);
nodeAttributesTable.setModel(model);
nodeAttributesTable.validate();
}
public void refreshMembersTable(){
/*ArrayList<String> attrs = Member.getClassType().getAttrNames();
String columnNames[] = new String[attrs.size()];
attrs.toArray(columnNames);
DefaultTableModel model = new DefaultTableModel(columnNames,0);*/
MembersTableModel model;
if(complexSelected==null || !(complexSelected instanceof Error)){
model = new MembersTableModel();
membersTable.setModel(model);
return;
}
model = new MembersTableModel(this);
membersTable.setModel(model);
/*
model = ()membersTable.getModel();
Error error = (Error)complexSelected;
TreeMap<String,Member> members = error.getMembers();
for(Member mem: members.values()){
model.addRow(mem.getAttributes().values().toArray());
}
*/
}
/**
* This method initializes jPanel3
*
* @return javax.swing.JPanel
*/
private JPanel getNodesEditPanel() {
if (nodesEditPanel == null) {
nodesEditPanel = new JPanel();
nodesEditPanel.setVisible(false);
nodesEditPanel.add(getNewNodeButton(), null);
nodesEditPanel.add(getRemoveNodeButton(), null);
}
return nodesEditPanel;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getNewNodeButton() {
if (newNodeButton == null) {
newNodeButton = new JButton();
newNodeButton.setText("New");
newNodeButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
newNodeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int x = ErrorBrowserEditor.this.getMousePosition().x;
int y = ErrorBrowserEditor.this.getMousePosition().y;
getNewNodePopupMenu().show(getNewDocButton(),x,y-50);
}
});
}
return newNodeButton;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getRemoveNodeButton() {
if (removeNodeButton == null) {
removeNodeButton = new JButton();
removeNodeButton.setText("Remove");
removeNodeButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
removeNodeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(complexSelected == null)
return;
docSelected.getNodes().remove(complexSelected.toString());
log("\t[Node "+ complexSelected.toString()+" removed]");
complexNodeSelected=null;
complexSelected=null;
refreshNodesTree();
refreshNodeAttributesTable();
refreshMembersTable();
}
});
}
return removeNodeButton;
}
/**
* This method initializes jSplitPane2
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane2() {
if (jSplitPane2 == null) {
jSplitPane2 = new JSplitPane();
jSplitPane2.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane2.setDividerLocation(180);
jSplitPane2.setOneTouchExpandable(false);
jSplitPane2.setBottomComponent(getJPanel4());
jSplitPane2.setTopComponent(getJScrollPane3());
}
return jSplitPane2;
}
/**
* This method initializes jToolBar
*
* @return javax.swing.JToolBar
*/
private JToolBar getJToolBar() {
if (jToolBar == null) {
locationField = new JLabel();
locationField.setText("(none)");
locationField.setBackground(Color.WHITE);
jLabel = new JLabel();
jLabel.setText("Path: ");
jToolBar = new JToolBar();
jToolBar.setFloatable(false);
jToolBar.add(getNewDocButton());
jToolBar.add(getEditButton());
jToolBar.add(getCancelEditButton());
jToolBar.add(getSaveButton());
jToolBar.addSeparator();
jToolBar.addSeparator();
jToolBar.addSeparator();
jToolBar.add(jLabel);
jToolBar.add(locationField);
jToolBar.add(getDeleteDocButton());
}
return jToolBar;
}
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getEditButton() {
if (editButton == null) {
editButton = new JButton();
editButton.setText("Edit");
editButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
enterEditMode();
}
});
}
return editButton;
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
private JButton getSaveButton() {
if (saveButton == null) {
saveButton = new JButton();
saveButton.setText("Save");
saveButton.setEnabled(false);
saveButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
exitEditMode();
try {
docSelected.save();
} catch (FileNotFoundException ex) {
JOptionPane.showMessageDialog(ErrorBrowserEditor.this,
"You don't have permission to save the file",
"Error",
JOptionPane.ERROR_MESSAGE);
} catch (IOException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
log("[Document "+docSelected.getPath() +" saved ]");
docSelected.load();
refreshDocTable();
refreshNodesTree();
refreshNodeAttributesTable();
refreshMembersTable();
try {
loadXmlView();
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println("Error");
}
}
});
}
return saveButton;
}
/**
* This method initializes jButton2
*
* @return javax.swing.JButton
*/
private JButton getCancelEditButton() {
if (cancelEditButton == null) {
cancelEditButton = new JButton();
cancelEditButton.setText("Cancel");
cancelEditButton.setEnabled(false);
cancelEditButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
exitEditMode();
try {
docSelected.load();
} catch (java.lang.NullPointerException nullException){
manager.removeDocument(docSelected.getValue());
docNodeSelected=null;
docSelected=null;
complexNodeSelected=null;
complexSelected=null;
}
refreshDocsTree();
refreshDocTable();
refreshNodesTree();
refreshNodeAttributesTable();
refreshMembersTable();
}
});
}
return cancelEditButton;
}
/**
* This method initializes jButton3
*
* @return javax.swing.JButton
*/
private JButton getDeleteDocButton() {
if (deleteDocButton == null) {
deleteDocButton = new JButton();
deleteDocButton.setText("Delete");
deleteDocButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(docSelected==null)
return;
int n = JOptionPane.showConfirmDialog(ErrorBrowserEditor.this,
"Are you sure you want to remove permanently the file from disk?",
"Nuclear launch detected",JOptionPane.YES_NO_OPTION);
if(n!=0)
return;
manager.deleteDocument(docSelected.toString());
docSelected=null;
docNodeSelected=null;
complexSelected=null;
complexNodeSelected=null;
refreshDocsTree();
refreshDocTable();
refreshNodesTree();
refreshNodeAttributesTable();
refreshMembersTable();
}
});
}
return deleteDocButton;
}
/**
* This method initializes jButton4
*
* @return javax.swing.JButton
*/
private JButton getNewDocButton() {
if (newDocButton == null) {
newDocButton = new JButton();
newDocButton.setText("New error file");
newDocButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
JFileChooser fc = new JFileChooser();
fc.setFileFilter(new EbeOpenFileFilter());
fc.setSelectedFile(new File("newErrorDocument.xml"));
int retval = fc.showDialog(ErrorBrowserEditor.this, "Create new document");
if(retval == JFileChooser.APPROVE_OPTION){
if(fc.getSelectedFile().exists()){
int n = JOptionPane.showConfirmDialog(ErrorBrowserEditor.this,
"The file already exists, Do you want overwrite the file?",
"Warning",JOptionPane.YES_NO_OPTION);
if (n==1)
return;
}
String xmlName=fc.getSelectedFile().getName();
if(xmlName.indexOf(".xml")==-1)
fc.setSelectedFile(new File(xmlName + ".xml"));
xmlName= xmlName.substring(0,xmlName.lastIndexOf('.'));
manager.newDocument(fc.getSelectedFile().getAbsolutePath(),xmlName);
refreshDocsTree();
docSelected=manager.getDocuments().get(xmlName);
refreshDocTable();
refreshMembersTable();
refreshNodeAttributesTable();
refreshNodesTree();
enterEditMode();
}
}
});
}
return newDocButton;
}
/**
* This method initializes jPanel4
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel4() {
if (jPanel4 == null) {
jPanel4 = new JPanel();
jPanel4.setLayout(new BorderLayout());
jPanel4.add(getJScrollPane5(), java.awt.BorderLayout.CENTER);
jPanel4.add(getMembersEditPanel(), java.awt.BorderLayout.WEST);
}
return jPanel4;
}
/**
* This method initializes jPanel5
*
* @return javax.swing.JPanel
*/
private JPanel getMembersEditPanel() {
if (membersEditPanel == null) {
GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
gridBagConstraints3.insets = new java.awt.Insets(0,4,0,3);
gridBagConstraints3.gridy = 1;
gridBagConstraints3.gridx = 0;
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.insets = new java.awt.Insets(0,4,0,3);
gridBagConstraints2.gridy = 0;
gridBagConstraints2.gridx = 0;
membersEditPanel = new JPanel();
membersEditPanel.setLayout(new GridBagLayout());
membersEditPanel.setVisible(false);
membersEditPanel.add(getAddMemmberButton(), gridBagConstraints2);
membersEditPanel.add(getRemoveMemberButton(), gridBagConstraints3);
}
return membersEditPanel;
}
/**
* This method initializes jButton6
*
* @return javax.swing.JButton
*/
private JButton getAddMemmberButton() {
if (addMemmberButton == null) {
addMemmberButton = new JButton();
addMemmberButton.setText("Add");
addMemmberButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
addMemmberButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(!(complexSelected instanceof Error))
return;
if (((Error)complexSelected).getMembers().get("NewMember")!=null){
//TODO: Check this problem at saving
log("\t[ATENTION: 'NewMember' is not allowed as a valid member name, please change it before adding new members]");
}
else{
Member mem= new Member();
mem.setValue("NewMember");
mem.setAttributeValue("name","NewMember");
((Error)complexSelected).getMembers().put("NewMember",mem);
log("\t[New member added]");
}
refreshMembersTable();
}
});
}
return addMemmberButton;
}
/**
* This method initializes jButton7
*
* @return javax.swing.JButton
*/
private JButton getRemoveMemberButton() {
if (removeMemberButton == null) {
removeMemberButton = new JButton();
removeMemberButton.setText("Remove");
removeMemberButton.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 10));
removeMemberButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
int selected = membersTable.getSelectedRow();
if(selected == -1)
return;
Error error =(Error)complexSelected;
TreeMap members = error.getMembers();
String name = membersTable.getValueAt(selected,0).toString();
members.remove(name);
log("\t[Member "+ name +" removed]");
refreshMembersTable();
}
});
}
return removeMemberButton;
}
/**
* This method initializes jPopupMenu
*
* @return javax.swing.JPopupMenu
*/
private JPopupMenu getNewNodePopupMenu() {
if (newNodePopupMenu == null) {
newNodePopupMenu = new JPopupMenu();
newNodePopupMenu.add(getNewErrorMenuItem());
newNodePopupMenu.add(getNewCompletionMenuItem());
}
return newNodePopupMenu;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getNewErrorMenuItem() {
if (newErrorMenuItem == null) {
newErrorMenuItem = new JMenuItem();
newErrorMenuItem.setText("Error");
newErrorMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (docSelected.getNode("NewError")!=null){
log("\t[ATENTION: 'NewError' is not allowed as a valid error name, please change it before adding new errors]");
}
else{
ComplexObject newObj = new Error();
newObj.setValue("NewError");
newObj.setAttributeValue("name","NewError");
docSelected.putNode(newObj);
complexSelected=newObj;
log("\t[New Error Added ]");
}
refreshNodesTree();
refreshNodeAttributesTable();
}
});
}
return newErrorMenuItem;
}
/**
* This method initializes jMenuItem1
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getNewCompletionMenuItem() {
if (newCompletionMenuItem == null) {
newCompletionMenuItem = new JMenuItem();
newCompletionMenuItem.setText("Completion");
newCompletionMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (docSelected.getNode("NewCompletion")!=null){
log("\t[ATENTION: 'NewCompletion' is not allowed as a valid completion name, please change it before adding new errors]");
}
else{
ComplexObject newObj = new Completion();
newObj.setValue("NewCompletion");
newObj.setAttributeValue("name","NewCompletion");
docSelected.putNode(newObj);
complexSelected=newObj;
log("\t[New Completion Added ]");
}
refreshNodesTree();
refreshNodeAttributesTable();
}
});
}
return newCompletionMenuItem;
}
/**
* This method initializes jPopupMenu
*
* @return javax.swing.JPopupMenu
*/
private JPopupMenu getRemovePopupMenu() {
if (removePopupMenu == null) {
removePopupMenu = new JPopupMenu();
removePopupMenu.add(getRemoveSelectedItem());
removePopupMenu.add(getCleanAllFilesItem());
}
return removePopupMenu;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getRemoveSelectedItem() {
if (removeSelectedItem == null) {
removeSelectedItem = new JMenuItem();
removeSelectedItem.setText("Remove selected file");
removeSelectedItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if(docSelected==null)
return;
manager.removeDocument(docSelected.toString());
docNodeSelected=null;
docSelected=null;
complexNodeSelected=null;
complexSelected=null;
refreshDocsTree();
refreshDocTable();
refreshMembersTable();
refreshNodeAttributesTable();
refreshNodesTree();
}
});
}
return removeSelectedItem;
}
/**
* This method initializes jMenuItem1
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getCleanAllFilesItem() {
if (cleanAllFilesItem == null) {
cleanAllFilesItem = new JMenuItem();
cleanAllFilesItem.setText("Clear list");
cleanAllFilesItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
manager.removeAll();
docSelected=null;
docNodeSelected=null;
refreshDocsTree();
refreshDocTable();
refreshNodesTree();
refreshNodeAttributesTable();
refreshMembersTable();
}
});
}
return cleanAllFilesItem;
}
public static void main(String[] args){
ErrorBrowserEditor ebe = new ErrorBrowserEditor();
ebe.setVisible(true);
}
private void loadXmlView() throws IOException{
FileReader inputStream = null;
String text = "";
if(docSelected == null){
xmlEditorPane.setText(text);
return;
}
try {
inputStream = new FileReader(docSelected.getPath());
int c;
//inputStream.reset();
while ((c = inputStream.read()) != -1) {
text=text+(char)c;
}
xmlEditorPane.setText(text);
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
private void enterEditMode(){
boolean exist_flag=true;
if(docSelected == null)
return;
File doc = new File(docSelected.getPath());
log("[Entering Edit Mode]");
if(!doc.exists()){
exist_flag=false;
try{
doc.createNewFile();
} catch (IOException e){
}
}
if(!doc.canWrite()){
JOptionPane.showMessageDialog(this,"You don't have permission to change this " +
"document","Warning",JOptionPane.WARNING_MESSAGE);
log("[Save disabled]");
}
else{
saveButton.setEnabled(true);
}
if (!exist_flag)
doc.delete();
editButton.setEnabled(false);
cancelEditButton.setEnabled(true);
nodesEditPanel.setVisible(true);
membersEditPanel.setVisible(true);
docTable.setEnabled(true);
nodeAttributesTable.setEnabled(true);
membersTable.setEnabled(true);
docsTree.setEnabled(false);
docsTree.setBackground(Color.LIGHT_GRAY);
newDocButton.setEnabled(false);
deleteDocButton.setEnabled(false);
addButton.setEnabled(false);
removeButton.setEnabled(false);
}
private void exitEditMode(){
editButton.setEnabled(true);
cancelEditButton.setEnabled(false);
saveButton.setEnabled(false);
nodesEditPanel.setVisible(false);
membersEditPanel.setVisible(false);
docTable.setEnabled(false);
nodeAttributesTable.setEnabled(false);
membersTable.setEnabled(false);
docsTree.setEnabled(true);
docsTree.setBackground(Color.WHITE);
newDocButton.setEnabled(true);
deleteDocButton.setEnabled(true);
addButton.setEnabled(true);
removeButton.setEnabled(true);
log("[Exiting Edit Mode]");
}
public static void log(String text){
if (!logInfo) return;
getTextMessagePane().setText(getTextMessagePane().getText() +"\n"+text );
System.out.println(text);
}
public EbeDocumentManager getManager(){
return manager;
}
}
class ErrorTreeCellRenderer extends DefaultTreeCellRenderer {
/*
* ImageIcon tutorialIcon = createImageIcon("images/middle.gif");
* if (tutorialIcon != null) {
* tree.setCellRenderer(new MyRenderer(tutorialIcon));
*
*/
private static final ImageIcon errorIcon = createImageIcon("util/images/error.gif");
private static final ImageIcon completionIcon = createImageIcon("util/images/completion.gif");
private static final ImageIcon documentIcon = createImageIcon("util/images/document.gif");
/**
*
*/
private static final long serialVersionUID = 2773311893986633892L;
public ErrorTreeCellRenderer() {
/*Initilize here the icons*/
}
public Component getTreeCellRendererComponent(
JTree tree,
Object value,
boolean sel,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
super.getTreeCellRendererComponent(
tree, value, sel,
expanded, leaf, row,
hasFocus);
if (isError(value)) {
setIcon(errorIcon);
}
else if (isCompletion(value)){
setIcon(completionIcon);
}
else if (isDocument(value)){
setIcon(documentIcon);
}
else {
setToolTipText("Here comes a Tooltip :)");
}
setToolTipText("Here comes a Tooltip :)");
return this;
}
protected boolean isDocument(Object value) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)value;
Object nodeInfo =
(Object)(node.getUserObject());
if (nodeInfo instanceof EbeDocument) {
return true;
}
return false;
}
protected boolean isError(Object value) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)value;
Object nodeInfo =
(Object)(node.getUserObject());
if (nodeInfo instanceof Error) {
return true;
}
return false;
}
protected boolean isCompletion(Object value) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode)value;
Object nodeInfo =
(Object)(node.getUserObject());
if (nodeInfo instanceof Completion) {
return true;
}
return false;
}
/**Returns an ImageIcon, or null if the path was invalid*/
protected static ImageIcon createImageIcon(String path){
java.net.URL imgURL = ErrorBrowserEditor.class.getResource(path);
if (imgURL !=null){
return new ImageIcon(imgURL);
}
else{
System.err.println("Couldn't find file:" + path);
return null;
}
}
}