package com.engineous.component.plate;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import com.engineous.sdk.model.*;
import com.engineous.sdk.metamodel.*;
import com.engineous.sdk.vars.*;
import com.engineous.desktop.sdk.*;
import com.engineous.sdk.gui.ProgressRange;
import com.engineous.sdk.exception.SDKException;
import com.engineous.common.i18n.IString;
import com.engineous.sdk.log.*;
//=============================================================
/**
* @author Engineous Software
*
*/
public class PlateEditor
extends AbstractDesktopEditor {
transient private static final Class CLASS = PlateEditor.class;
private JPanel myPanel;
private JComboBox shapeMenu;
private JComboBox materialMenu;
private JTextField thicknessEntry;
private ScalarVariable shapeProp;
private ScalarVariable materialProp;
private ScalarVariable thicknessParam;
private String theShape;
//=============================================================
/**
* Method initialize
* <p><i>Implements interface <b>ComponentEditor</b></i></p>
* @param yourComponent
* @param progress
* @throws SDKException
*/
public void initEditor(DtComponent component, ProgressRange
progress)
throws SDKException {
super.initEditor(component, progress);
try {
SysLog.logDebug(new IString(CLASS, 0, "Initializing Editor
for Component = " + component.getName()));
shapeProp =
((DtScalarVariable)component.getProperty("Shape"));
materialProp =
((DtScalarVariable)component.getProperty("Material"));
thicknessParam =
((DtScalarVariable)component.getParameter("Thickness"));
}
catch (Throwable e) {
throw new SDKException(e, "Error initializing component
editor.");
}
}
//=============================================================
/**
* Method apply
* <p><i>Implements interface <b>ComponentEditor</b></i></p>
* @throws SDKException
*/
public void apply()
throws SDKException {
try {
SysLog.log(Log.INFO, new IString(CLASS, 0, "Apply was
clicked: Component = {0}", component.getName()));
// keep reference to old shape value for use below
String oldShape = theShape;
theShape = (String)shapeMenu.getSelectedItem();
shapeProp.getValueObj().setValue(theShape);
materialProp.getValueObj().setValue((String)materialMenu.
getSelectedItem());
thicknessParam.getValueObj().setValue(thicknessEntry.getText());
// if the shape has changed, need to define new dimensions to
specify
DtAggregateVariable dimensions
=((DtAggregateVariable)component.getParameter("Dimensions"));
if (!theShape.equals(oldShape) ||
dimensions.getMemberList().size() == 0) {
dimensions.removeAll();
// Hard-coding this here - could actually provide in
descriptor
Vector newDimensions = new Vector();
if (theShape.equals("circle")) {
newDimensions.add("radius");
}
else if (theShape.equals("rectangle")) {
newDimensions.add("width");
newDimensions.add("height");
}
else if (theShape.equals("triangle")) {
newDimensions.add("base");
newDimensions.add("height");
}
DtScalarVariable dimensionItem;
for (int i = 0; i < newDimensions.size(); i++) {
dimensionItem =
DtModelManager.createScalarVariable((String)newDimensions.ge
t(i), EsiTypes.REAL, Variable.ROLE_PARAMETER,
Variable.MODE_INPUT, null, null);
dimensions.addMember(dimensionItem);
}
}
}
catch (Exception e) {
throw new SDKException(e, "Failed to apply changes.");
}
}
//=============================================================
/**
* Method cancel
* <p><i>Implements interface <b>ComponentEditor</b></i></p>
* @throws SDKException
*/
public void cancel()
throws SDKException {
try {
SysLog.log(Log.INFO, new IString(CLASS, 0, "Cancel was
clicked: Component = {0}", component.getName()));
}
catch (Exception e) {
throw new SDKException(e, "Failed to cancel changes.");
}
}
//=============================================================
/**
* This method is called right before the component editor is
shown to * the user
* <p><i>Implements interface <b>ComponentEditor</b></i></p>
* @throws SDKException
*/
public void open()
throws SDKException {
try {
SysLog.log(Log.INFO, new IString(CLASS, 0, "Opening
Editor for {0}", component.getName()));
// First create the GUI if it is not already created
if (myPanel == null) {
createGUI();
}
// Now populate the GUI with the current configuration
populateGUI();
}
catch (Exception e) {
throw new SDKException(e, "Failed to open the editor.");
}
}
//=============================================================
/**
* Method createGUI
* @throws Exception
*/
private void createGUI()
throws Exception {
this.setLayout(new BorderLayout());
myPanel = new JPanel(new GridBagLayout());
this.add(myPanel, BorderLayout.NORTH);
Label instructionsText = new JLabel("This component
will calculate the area, volume, and weight of a
plate.");
JLabel instructionsText2 = new JLabel("(All dimensions
should be specified in meters)");
myPanel.add(instructionsText, new
GridBagConstraints(0, 0, 2, 1, 0.0,
0.0,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 5, 0), 0, 0));
myPanel.add(instructionsText2, new
GridBagConstraints(0, 1, 2, 1, 0.0,
0.0,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(0, 0, 10, 0), 0, 0));
// Widgets to specify shape
JLabel shapeLabel = new JLabel("Shape");
shapeMenu = new JComboBox(new String[] {"circle",
"rectangle", "triangle"});
// Widgets to specify material
JLabel materialLabel = new JLabel("Material");
materialMenu = new JComboBox(new String[] {"aluminum",
"steel", "wood"});
// Widgets to specify thickness
JLabel thicknessLabel = new JLabel("Thickness");
thicknessEntry = new JTextField(8);
// Now add them to the panel
myPanel.add(shapeLabel, new GridBagConstraints(0, 2,
1, 1, 0.0, 0.0,GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 10, 0), 0,
0));
myPanel.add(shapeMenu,new GridBagConstraints(1, 2, 1,
1, 0.0, 0.0 , GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 10, 0), 0,
0));
myPanel.add(materialLabel,new GridBagConstraints(0, 3,
1, 1, 0.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 10, 0), 0,
0));
myPanel.add(materialMenu,new GridBagConstraints(1, 3,
1, 1, 0.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 10, 0), 0,
0));
myPanel.add(thicknessLabel, new GridBagConstraints(0,
4, 1, 1, 0.0, 0.0,GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 0, 5), 0,
0));
myPanel.add(thicknessEntry,new GridBagConstraints(1,
4, 1, 1, 1.0, 0.0, GridBagConstraints.WEST,
GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0,
0));
}
private void populateGUI()
throws VariableException {
theShape = shapeProp.getValueObj().getAsString();
shapeMenu.setSelectedItem(theShape);
materialMenu.setSelectedItem(shapeProp.getValueObj().g
etAsString());
}
}