package husacct.define.presentation.jdialog;
import husacct.ServiceProvider;
import husacct.common.Resource;
import husacct.common.help.presentation.HelpableJDialog;
import husacct.control.ControlServiceImpl;
import husacct.define.presentation.draganddrop.customtransferhandlers.ModuleTrasferhandler;
import husacct.define.presentation.moduletree.AnalyzedModuleTree;
import husacct.define.task.DefinitionController;
import husacct.define.task.JtreeController;
import husacct.define.task.PopUpController;
import husacct.define.task.SoftwareUnitController;
import husacct.define.task.components.AnalyzedModuleComponent;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
public class SoftwareUnitJDialog extends HelpableJDialog implements ActionListener, KeyListener, Observer {
private static final long serialVersionUID = 3093579720278942807L;
private JPanel UIMappingPanel;
private JButton addButton;
private JButton cancelButton;
private JScrollPane softwareUnitScrollPane;
public AnalyzedModuleTree softwareDefinitionTree;
private SoftwareUnitController softwareUnitController;
public SoftwareUnitJDialog(long moduleId) {
super(((ControlServiceImpl) ServiceProvider.getInstance().getControlService()).getMainController().getMainGui(), false);
this.softwareUnitController = new SoftwareUnitController(moduleId);
this.softwareUnitController.setAction(PopUpController.ACTION_NEW);
initUI();
}
/**
* Creating Gui
*/
private void initUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setTitle(ServiceProvider.getInstance().getLocaleService().getTranslatedString("SoftwareUnitTitle"));
setIconImage(new ImageIcon(Resource.get(Resource.HUSACCT_LOGO)).getImage());
DefinitionController.getInstance().addObserver(this);
DefinitionController.getInstance().addObserverWithinDefineOfAnalyse(this);
this.getContentPane().add(this.createUIMappingPanel(), BorderLayout.CENTER);
this.getContentPane().add(this.createButtonPanel(), BorderLayout.SOUTH);
this.setResizable(false);
this.setSize(650, 300);
this.pack();
} catch (Exception e) {
e.printStackTrace();
}
}
private JPanel createUIMappingPanel() {
UIMappingPanel = new JPanel();
UIMappingPanel.setLayout(this.createUIMappingPanelLayout());
UIMappingPanel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
JLabel softwareUnitsLabel = new JLabel(ServiceProvider.getInstance()
.getLocaleService()
.getTranslatedString("SelectSoftwareDefinition"));
UIMappingPanel.add(softwareUnitsLabel, new GridBagConstraints(0, 1, 1,
1, 0.0, 0.0, GridBagConstraints.FIRST_LINE_START,
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
UIMappingPanel.add(this.getUIMappingScrollPane(),
new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
GridBagConstraints.CENTER,
GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0),
0, 220));
return UIMappingPanel;
}
private GridBagLayout createUIMappingPanelLayout() {
GridBagLayout UIMappingPanelLayout = new GridBagLayout();
UIMappingPanelLayout.rowWeights = new double[] { 0.0, 0.0, 0.1 };
UIMappingPanelLayout.rowHeights = new int[] { 25, 25, 220 };
UIMappingPanelLayout.columnWeights = new double[] { 0.0 };
UIMappingPanelLayout.columnWidths = new int[] { 500 };
return UIMappingPanelLayout;
}
private JScrollPane getUIMappingScrollPane() {
softwareUnitScrollPane = new JScrollPane();
softwareUnitScrollPane.setSize(400, 220);
softwareUnitScrollPane
.setPreferredSize(new java.awt.Dimension(500, 220));
getSoftwareDefinationTree();
softwareUnitScrollPane.setViewportView(this.softwareDefinitionTree);
return softwareUnitScrollPane;
}
private void getSoftwareDefinationTree() {
this.softwareDefinitionTree = new AnalyzedModuleTree(JtreeController.instance().getRootOfModel());
this.softwareDefinitionTree.setTransferHandler(new ModuleTrasferhandler());
this.softwareDefinitionTree.addTreeSelectionListener(treeselectionListener);
this.softwareDefinitionTree.setDragEnabled(true);
}
private TreeSelectionListener treeselectionListener = new TreeSelectionListener() {
@Override
public void valueChanged(TreeSelectionEvent arg0) {
boolean isButtonAddEnabled = true;
/* Code disabled 2014-03-25, since in some cases the saveButton was disabled incorrectly
for (TreePath path : paths.getSelectionPaths()) {
AnalyzedModuleComponent selectedComponent = (AnalyzedModuleComponent) path.getLastPathComponent();
boolean unitIsMappeed = selectedComponent.isMapped();
if (unitIsMappeed || selectedComponent.getType().toLowerCase().equals("root")
|| selectedComponent.getType().toLowerCase().equals("application")
|| selectedComponent.getType().toLowerCase().equals("externalpackage")) {
isButtonAddEnabled = false;
}
}
*/
addButton.setEnabled(isButtonAddEnabled);
}
};
private JPanel createButtonPanel() {
JPanel buttonPanel = new JPanel();
addButton = new JButton(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Add"));
buttonPanel.add(addButton);
addButton.addActionListener(this);
addButton.setEnabled(false);
cancelButton = new JButton(ServiceProvider.getInstance().getLocaleService().getTranslatedString("Cancel"));
buttonPanel.add(cancelButton);
cancelButton.addActionListener(this);
return buttonPanel;
}
@Override
public void actionPerformed(ActionEvent action) {
if (action.getSource() == this.addButton) {
this.save();
} else if (action.getSource() == this.cancelButton) {
this.cancel();
}
}
//Do nothing
@Override
public void keyPressed(KeyEvent event) {
}
@Override
public void keyReleased(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_ESCAPE) {
this.dispose();
} else if (event.getKeyCode() == KeyEvent.VK_ENTER) {
this.save();
}
}
// Do nothing
@Override
public void keyTyped(KeyEvent event) {
}
private void save() {
boolean canclose = false;
TreeSelectionModel paths = this.softwareDefinitionTree.getSelectionModel();
ArrayList<AnalyzedModuleComponent> units = new ArrayList<AnalyzedModuleComponent>();
for (TreePath path : paths.getSelectionPaths()) {
AnalyzedModuleComponent selectedComponent = (AnalyzedModuleComponent) path.getLastPathComponent();
units.add(selectedComponent);
}
canclose = DefinitionController.getInstance().saveAnalzedModule(units);
if (canclose) {
this.dispose();
}
}
private void cancel() {
this.dispose();
}
@Override
public void update(Observable o, Object arg) {
if (arg instanceof String) {
if ("updateSoftwareTree".equals(arg)) {
getSoftwareDefinationTree();
softwareUnitScrollPane.setViewportView(softwareDefinitionTree);
SwingUtilities.getWindowAncestor(softwareUnitScrollPane).repaint();
}
}
}
}