package husacct.define.presentation.jpanel; import husacct.ServiceProvider; import husacct.common.help.presentation.HelpableJPanel; import husacct.common.services.IServiceListener; import husacct.define.presentation.jdialog.AddModuleValuesJDialog; import husacct.define.presentation.moduletree.ModuleTree; import husacct.define.presentation.moduletree.ModuletreeContextMenu; import husacct.define.presentation.utils.UiDialogs; import husacct.define.task.DefinitionController; import husacct.define.task.components.AbstractDefineComponent; import husacct.define.task.components.LayerComponent; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.HashMap; import java.util.Observable; import java.util.Observer; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreePath; public class ModuleJPanel extends HelpableJPanel implements ActionListener, TreeSelectionListener, Observer, IServiceListener, KeyListener { private static final long serialVersionUID = 6141711414139061921L; private JMenuItem addModuleItem = new JMenuItem(); private ModuleTree moduleTree; private JScrollPane moduleTreeScrollPane; private JButton moveModuleDownButton = new JButton(); private JMenuItem moveModuleDownItem = new JMenuItem(); private JButton moveModuleUpButton = new JButton(); private JMenuItem moveModuleUpItem = new JMenuItem(); private JButton newModuleButton = new JButton(); private JPopupMenu popupMenu = new JPopupMenu(); private JButton removeModuleButton = new JButton(); private JMenuItem removeModuleItem = new JMenuItem(); public ModuleJPanel() { super(); initGui(); } private void initGui() { DefinitionController.getInstance().addObserver(this); BorderLayout modulePanelLayout = new BorderLayout(); setLayout(modulePanelLayout); setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); this.add(createInnerModulePanel(), BorderLayout.CENTER); updateModuleTree(); ServiceProvider.getInstance().getControlService().addServiceListener(this); createPopupMenu(); } @Override public void actionPerformed(ActionEvent action) { if (action.getSource() == newModuleButton || action.getSource() == addModuleItem) { newModule(); } else if (action.getSource() == removeModuleButton || action.getSource() == removeModuleItem) { removeModule(); } else if (action.getSource() == moveModuleUpButton || action.getSource() == moveModuleUpItem) { moveLayerUp(); } else if (action.getSource() == moveModuleDownButton || action.getSource() == moveModuleDownItem) { moveLayerDown(); } updateModuleTree(); } protected JPanel addButtonPanel() { JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(createButtonPanelLayout()); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 0, 0)); newModuleButton = new JButton(); buttonPanel.add(newModuleButton); newModuleButton.addActionListener(this); newModuleButton.addKeyListener(this); moveModuleUpButton = new JButton(); buttonPanel.add(moveModuleUpButton); moveModuleUpButton.addActionListener(this); moveModuleUpButton.addKeyListener(this); removeModuleButton = new JButton(); buttonPanel.add(removeModuleButton); removeModuleButton.addActionListener(this); removeModuleButton.addKeyListener(this); moveModuleDownButton = new JButton(); buttonPanel.add(moveModuleDownButton); moveModuleDownButton.addActionListener(this); moveModuleDownButton.addKeyListener(this); setButtonTexts(); return buttonPanel; } // Has side effects, might wanna change? public void checkLayerComponentIsSelected() { TreePath path = moduleTree.getSelectionPath(); if ((path != null) && (path.getLastPathComponent() instanceof LayerComponent)) { enableMoveLayerObjects(); } else { disableMoveLayerObjects(); } } private GridLayout createButtonPanelLayout() { GridLayout buttonPanelLayout = new GridLayout(2, 2); buttonPanelLayout.setColumns(2); buttonPanelLayout.setHgap(5); buttonPanelLayout.setVgap(5); buttonPanelLayout.setRows(2); return buttonPanelLayout; } public JPanel createInnerModulePanel() { JPanel innerModulePanel = new JPanel(); BorderLayout innerModulePanelLayout = new BorderLayout(); innerModulePanel.setLayout(innerModulePanelLayout); innerModulePanel.setBorder(BorderFactory.createTitledBorder(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("ModuleHierachy"))); innerModulePanel.add(createModuleTreePanel(), BorderLayout.CENTER); innerModulePanel.add(addButtonPanel(), BorderLayout.SOUTH); return innerModulePanel; } private JPanel createModuleTreePanel() { JPanel moduleTreePanel = new JPanel(); BorderLayout moduleTreePanelLayout = new BorderLayout(); moduleTreePanel.setLayout(moduleTreePanelLayout); createModuleTreeScrollPane(); moduleTreePanel.add(moduleTreeScrollPane, BorderLayout.CENTER); return moduleTreePanel; } private void createModuleTreeScrollPane() { moduleTreeScrollPane = new JScrollPane(); moduleTreeScrollPane.setPreferredSize(new java.awt.Dimension(383, 213)); updateModuleTree(); } private void createPopup(MouseEvent event) { if (SwingUtilities.isRightMouseButton(event)) { int row = moduleTree.getClosestRowForLocation(event.getX(), event.getY()); moduleTree.setSelectionRow(row); checkLayerComponentIsSelected(); popupMenu.show(moduleTree, event.getX(), event.getY()); } } private void createPopupMenu() { addModuleItem = new JMenuItem(ServiceProvider.getInstance().getLocaleService().getTranslatedString("NewModule")); addModuleItem.addActionListener(this); removeModuleItem = new JMenuItem(ServiceProvider.getInstance().getLocaleService().getTranslatedString("RemoveModule")); removeModuleItem.addActionListener(this); moveModuleUpItem = new JMenuItem(ServiceProvider.getInstance().getLocaleService().getTranslatedString("MoveUp")); moveModuleUpItem.addActionListener(this); moveModuleDownItem = new JMenuItem(ServiceProvider.getInstance().getLocaleService().getTranslatedString("MoveDown")); moveModuleDownItem.addActionListener(this); popupMenu.add(addModuleItem); popupMenu.add(removeModuleItem); popupMenu.add(moveModuleUpItem); popupMenu.add(moveModuleDownItem); } public void disableMoveLayerObjects() { moveModuleDownButton.setEnabled(false); moveModuleUpButton.setEnabled(false); moveModuleDownItem.setEnabled(false); moveModuleUpItem.setEnabled(false); } public void enableMoveLayerObjects() { moveModuleDownButton.setEnabled(true); moveModuleUpButton.setEnabled(true); moveModuleDownItem.setEnabled(true); moveModuleUpItem.setEnabled(true); } public long getSelectedModuleId() { long moduleId = -1; TreePath path = moduleTree.getSelectionPath(); if (path != null) {// returns null if nothing is selected AbstractDefineComponent selectedComponent = (AbstractDefineComponent) path.getLastPathComponent(); moduleId = selectedComponent.getModuleId(); } return moduleId; } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent event) { if (event.getKeyCode() == KeyEvent.VK_ENTER) { if (event.getSource() == newModuleButton) { newModule(); } else if (event.getSource() == removeModuleButton) { removeModule(); } else if (event.getSource() == moveModuleUpButton) { moveLayerUp(); } else if (event.getSource() == moveModuleDownButton) { moveLayerDown(); } updateModuleTree(); } } @Override public void keyTyped(KeyEvent e) { } public void moveLayerDown() { long layerId = getSelectedModuleId(); DefinitionController.getInstance().moveLayerDown(layerId); updateModuleTree(); } public void moveLayerUp() { long layerId = getSelectedModuleId(); DefinitionController.getInstance().moveLayerUp(layerId); updateModuleTree(); } public void newModule() { AddModuleValuesJDialog addModuleFrame = new AddModuleValuesJDialog(this); ServiceProvider.getInstance().getControlService().centerDialog(addModuleFrame); addModuleFrame.initGUI(); } public void removeModule() { long moduleId = getSelectedModuleId(); HashMap<String, Object> moduleDetails = DefinitionController.getInstance().getModuleDetails(moduleId); if (moduleDetails.get("type").equals("Facade")) { boolean confirm = UiDialogs.confirmDialog(this, ServiceProvider.getInstance().getLocaleService().getTranslatedString("RemoveConfirm"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("RemovePopupTitle")); if (confirm) { JOptionPane.showMessageDialog(this,ServiceProvider.getInstance().getLocaleService().getTranslatedString("DefaultModule"), "Message", JOptionPane.WARNING_MESSAGE); return; } } else if (moduleId != -1 && moduleId != 0) { boolean confirm = UiDialogs.confirmDialog(this, ServiceProvider.getInstance().getLocaleService().getTranslatedString("RemoveConfirm"), ServiceProvider.getInstance().getLocaleService().getTranslatedString("RemovePopupTitle")); if (confirm) { TreePath selectedPath = moduleTree.getSelectionPath(); moduleTree.clearSelection(); TreePath parentPath = selectedPath.getParentPath(); if (parentPath != null) {// returns null if nothing is selected moduleTree.setSelectionPath(parentPath); } DefinitionController.getInstance().removeModuleById(moduleId); } } } private void setButtonTexts() { newModuleButton.setText(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("NewModule")); moveModuleUpButton.setText(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("MoveUp")); removeModuleButton.setText(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("RemoveModule")); moveModuleDownButton.setText(ServiceProvider.getInstance() .getLocaleService().getTranslatedString("MoveDown")); } @Override public void update() { setButtonTexts(); } /** * Observer */ @Override public void update(Observable o, Object arg) { //updateModuleTree(); } public void updateModuleTree() { AbstractDefineComponent rootComponent = DefinitionController.getInstance().getModuleTreeComponents(); moduleTree = new ModuleTree(rootComponent); moduleTree.setContextMenu(new ModuletreeContextMenu(this)); moduleTreeScrollPane.setViewportView(moduleTree); moduleTree.addTreeSelectionListener(this); checkLayerComponentIsSelected(); moduleTree.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { createPopup(event); } @Override public void mouseEntered(MouseEvent event) { // Do nothing } @Override public void mousePressed(MouseEvent event) { createPopup(event); } }); long selectedModuleId = DefinitionController.getInstance().getSelectedModuleId(); moduleTree.setSelectedRow(selectedModuleId); moduleTree.expandPath(moduleTree.getSelectionPath()); } private void updateSelectedModule(long moduleId) { DefinitionController.getInstance().setSelectedModuleId(moduleId); } @Override public void valueChanged(TreeSelectionEvent event) { TreePath path = event.getPath(); AbstractDefineComponent selectedComponent = (AbstractDefineComponent) path .getLastPathComponent(); if (selectedComponent.getModuleId() != DefinitionController .getInstance().getSelectedModuleId()) { updateSelectedModule(selectedComponent.getModuleId()); } checkLayerComponentIsSelected(); } }