use of org.concord.energy3d.model.Tree in project energy3d by concord-consortium.
the class PopupMenuForLand method getPopupMenu.
static JPopupMenu getPopupMenu() {
if (popupMenuForLand == null) {
final JMenuItem miInfo = new JMenuItem("Land");
miInfo.setEnabled(false);
miInfo.setOpaque(true);
miInfo.setBackground(Config.isMac() ? Color.DARK_GRAY : Color.GRAY);
miInfo.setForeground(Color.WHITE);
final JMenuItem miPaste = new JMenuItem("Paste");
miPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, Config.isMac() ? KeyEvent.META_MASK : InputEvent.CTRL_MASK));
miPaste.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
SceneManager.getTaskManager().update(new Callable<Object>() {
@Override
public Object call() throws Exception {
Scene.getInstance().pasteToPickedLocationOnLand();
return null;
}
});
}
});
final JMenuItem miRemoveAllTrees = new JMenuItem("Remove All Trees");
miRemoveAllTrees.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
SceneManager.getTaskManager().update(new Callable<Object>() {
@Override
public Object call() throws Exception {
Scene.getInstance().removeAllTrees();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainPanel.getInstance().getEnergyButton().setSelected(false);
Scene.getInstance().setEdited(true);
}
});
return null;
}
});
}
});
final JMenuItem miRemoveAllHumans = new JMenuItem("Remove All Humans");
miRemoveAllHumans.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
SceneManager.getTaskManager().update(new Callable<Object>() {
@Override
public Object call() throws Exception {
Scene.getInstance().removeAllHumans();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainPanel.getInstance().getEnergyButton().setSelected(false);
Scene.getInstance().setEdited(true);
}
});
return null;
}
});
}
});
final JMenuItem miRemoveAllBuildings = new JMenuItem("Remove All Foundations");
miRemoveAllBuildings.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
SceneManager.getTaskManager().update(new Callable<Object>() {
@Override
public Object call() throws Exception {
Scene.getInstance().removeAllFoundations();
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainPanel.getInstance().getEnergyButton().setSelected(false);
Scene.getInstance().setEdited(true);
}
});
return null;
}
});
}
});
final JMenuItem miImportEnergy3D = new JMenuItem("Import...");
miImportEnergy3D.setToolTipText("Import the content in an existing Energy3D file into the clicked location on the land as the center");
miImportEnergy3D.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
MainFrame.getInstance().importFile();
}
});
final JMenuItem miImportCollada = new JMenuItem("Import Collada...");
miImportCollada.setToolTipText("Import the content in an existing Collada file into the clicked location on the land as the center");
miImportCollada.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
MainFrame.getInstance().importColladaFile();
}
});
final JMenu miImportPrefabMenu = new JMenu("Import a Prefab");
addPrefabMenuItem("Back Hip Roof Porch", "prefabs/back-hip-roof-porch.ng3", miImportPrefabMenu);
addPrefabMenuItem("Balcony", "prefabs/balcony1.ng3", miImportPrefabMenu);
addPrefabMenuItem("Bell Tower", "prefabs/bell-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Box", "prefabs/box.ng3", miImportPrefabMenu);
addPrefabMenuItem("Chimney", "prefabs/chimney.ng3", miImportPrefabMenu);
addPrefabMenuItem("Connecting Porch", "prefabs/connecting-porch.ng3", miImportPrefabMenu);
addPrefabMenuItem("Cylinder Tower", "prefabs/cylinder-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Fence", "prefabs/fence1.ng3", miImportPrefabMenu);
addPrefabMenuItem("Flat-Top Porch", "prefabs/flat-top-porch.ng3", miImportPrefabMenu);
addPrefabMenuItem("Fountain", "prefabs/fountain.ng3", miImportPrefabMenu);
addPrefabMenuItem("Front Door Overhang", "prefabs/front-door-overhang.ng3", miImportPrefabMenu);
addPrefabMenuItem("Gable Dormer", "prefabs/gable-dormer.ng3", miImportPrefabMenu);
addPrefabMenuItem("Hexagonal Gazebo", "prefabs/hexagonal-gazebo.ng3", miImportPrefabMenu);
addPrefabMenuItem("Hexagonal Tower", "prefabs/hexagonal-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Lighthouse", "prefabs/lighthouse.ng3", miImportPrefabMenu);
addPrefabMenuItem("Octagonal Tower", "prefabs/octagonal-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Round Tower", "prefabs/round-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Shed Dormer", "prefabs/shed-dormer.ng3", miImportPrefabMenu);
addPrefabMenuItem("Solarium", "prefabs/solarium1.ng3", miImportPrefabMenu);
addPrefabMenuItem("Square Tower", "prefabs/square-tower.ng3", miImportPrefabMenu);
addPrefabMenuItem("Stair", "prefabs/stair1.ng3", miImportPrefabMenu);
addPrefabMenuItem("Tall Front Door Overhang", "prefabs/tall-front-door-overhang.ng3", miImportPrefabMenu);
addPrefabMenuItem("Temple Front", "prefabs/temple-front.ng3", miImportPrefabMenu);
addPrefabMenuItem("Waterfront Deck", "prefabs/waterfront-deck.ng3", miImportPrefabMenu);
final JMenuItem miAlbedo = new JMenuItem("Albedo...");
miAlbedo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
final String title = "<html>Background Albedo (dimensionless [0, 1])<hr><font size=2>Examples:<br>0.17 (soil), 0.25 (grass), 0.40 (sand), 0.55 (concrete), snow (0.9)</html>";
while (true) {
final String newValue = JOptionPane.showInputDialog(MainFrame.getInstance(), title, Scene.getInstance().getGround().getAlbedo());
if (newValue == null) {
break;
} else {
try {
final double val = Double.parseDouble(newValue);
if (val < 0 || val > 1) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), "Albedo value must be in 0-1.", "Range Error", JOptionPane.ERROR_MESSAGE);
} else {
if (val != Scene.getInstance().getGround().getAlbedo()) {
final ChangeBackgroundAlbedoCommand c = new ChangeBackgroundAlbedoCommand();
Scene.getInstance().getGround().setAlbedo(val);
updateAfterEdit();
SceneManager.getInstance().getUndoManager().addEdit(c);
}
break;
}
} catch (final NumberFormatException exception) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), newValue + " is an invalid value!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
}
});
final JMenuItem miSnowReflection = new JMenuItem("Snow Reflection...");
miSnowReflection.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
final JPanel gui = new JPanel(new BorderLayout());
final String title = "<html>Increase of indirect solar radiation due to snow reflection<br>(a dimensionless parameter within [0, 0.2])</html>";
gui.add(new JLabel(title), BorderLayout.NORTH);
final JPanel inputPanel = new JPanel(new SpringLayout());
inputPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
gui.add(inputPanel, BorderLayout.CENTER);
final JTextField[] fields = new JTextField[12];
for (int i = 0; i < 12; i++) {
final JLabel l = new JLabel(AnnualGraph.THREE_LETTER_MONTH[i] + ": ", JLabel.TRAILING);
inputPanel.add(l);
fields[i] = new JTextField(threeDecimalsFormat.format(Scene.getInstance().getGround().getSnowReflectionFactor(i)), 5);
l.setLabelFor(fields[i]);
inputPanel.add(fields[i]);
}
SpringUtilities.makeCompactGrid(inputPanel, 12, 2, 6, 6, 6, 6);
while (true) {
if (JOptionPane.showConfirmDialog(MainFrame.getInstance(), gui, "Snow reflection factor", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.CANCEL_OPTION) {
break;
}
boolean pass = true;
final double[] val = new double[12];
for (int i = 0; i < 12; i++) {
try {
val[i] = Double.parseDouble(fields[i].getText());
if (val[i] < 0 || val[i] > 0.2) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), "Snow reflection factor must be in 0-0.2.", "Range Error", JOptionPane.ERROR_MESSAGE);
pass = false;
}
} catch (final NumberFormatException exception) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), fields[i].getText() + " is an invalid value!", "Error", JOptionPane.ERROR_MESSAGE);
pass = false;
}
}
if (pass) {
final ChangeSnowReflectionFactorCommand c = new ChangeSnowReflectionFactorCommand();
for (int i = 0; i < 12; i++) {
Scene.getInstance().getGround().setSnowReflectionFactor(val[i], i);
}
updateAfterEdit();
SceneManager.getInstance().getUndoManager().addEdit(c);
break;
}
}
}
});
final JMenuItem miThermalDiffusivity = new JMenuItem("Ground Thermal Diffusivity...");
miThermalDiffusivity.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
final String title = "<html>Ground Thermal Diffusivity (m<sup>2</sup>/s)<hr><font size=2>Examples:<br>0.039 (sand), 0.046 (clay), 0.05 (silt)</html>";
while (true) {
final String newValue = JOptionPane.showInputDialog(MainFrame.getInstance(), title, Scene.getInstance().getGround().getThermalDiffusivity());
if (newValue == null) {
break;
} else {
try {
final double val = Double.parseDouble(newValue);
if (val <= 0) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), "Ground thermal diffusivity must be positive.", "Range Error", JOptionPane.ERROR_MESSAGE);
} else {
if (val != Scene.getInstance().getGround().getThermalDiffusivity()) {
final ChangeGroundThermalDiffusivityCommand c = new ChangeGroundThermalDiffusivityCommand();
Scene.getInstance().getGround().setThermalDiffusivity(val);
updateAfterEdit();
SceneManager.getInstance().getUndoManager().addEdit(c);
}
break;
}
} catch (final NumberFormatException exception) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), newValue + " is an invalid value!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
}
});
final JMenuItem miClearImage = new JMenuItem("Clear Image");
final JMenuItem miRescaleImage = new JMenuItem("Rescale Image...");
final JCheckBoxMenuItem miShowImage = new JCheckBoxMenuItem("Show Image");
final JMenu groundImageMenu = new JMenu("Ground Image");
groundImageMenu.addMenuListener(new MenuListener() {
@Override
public void menuCanceled(final MenuEvent e) {
miShowImage.setEnabled(true);
miClearImage.setEnabled(true);
}
@Override
public void menuDeselected(final MenuEvent e) {
miShowImage.setEnabled(true);
miClearImage.setEnabled(true);
}
@Override
public void menuSelected(final MenuEvent e) {
final boolean hasGroundImage = Scene.getInstance().isGroundImageEnabled();
miShowImage.setEnabled(hasGroundImage);
miClearImage.setEnabled(hasGroundImage);
Util.selectSilently(miShowImage, SceneManager.getInstance().getGroundImageLand().isVisible());
}
});
final JMenuItem miUseEarthView = new JMenuItem("Use Image from Earth View...");
miUseEarthView.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
new MapDialog(MainFrame.getInstance()).setVisible(true);
}
});
groundImageMenu.add(miUseEarthView);
final JMenuItem miUseImageFile = new JMenuItem("Use Image from File...");
miUseImageFile.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
final File file = FileChooser.getInstance().showDialog(".png", FileChooser.pngFilter, false);
if (file == null) {
return;
}
try {
Scene.getInstance().setGroundImage(ImageIO.read(file), 1);
Scene.getInstance().setGroundImageEarthView(false);
} catch (final Throwable t) {
t.printStackTrace();
JOptionPane.showMessageDialog(MainFrame.getInstance(), t.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
Scene.getInstance().setEdited(true);
}
});
groundImageMenu.add(miUseImageFile);
groundImageMenu.addSeparator();
miRescaleImage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
final String title = "Scale the ground image";
while (true) {
final String newValue = JOptionPane.showInputDialog(MainFrame.getInstance(), title, Scene.getInstance().getGroundImageScale());
if (newValue == null) {
break;
} else {
try {
final double val = Double.parseDouble(newValue);
if (val <= 0) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), "The scaling factor must be positive.", "Range Error", JOptionPane.ERROR_MESSAGE);
} else {
// final ChangeGroundThermalDiffusivityCommand c = new ChangeGroundThermalDiffusivityCommand();
Scene.getInstance().setGroundImageScale(val);
// SceneManager.getInstance().getUndoManager().addEdit(c);
break;
}
} catch (final NumberFormatException exception) {
JOptionPane.showMessageDialog(MainFrame.getInstance(), newValue + " is an invalid value!", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
Scene.getInstance().setEdited(true);
}
});
groundImageMenu.add(miRescaleImage);
miClearImage.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
Scene.getInstance().setGroundImage(null, 1);
Scene.getInstance().setEdited(true);
}
});
groundImageMenu.add(miClearImage);
miShowImage.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent e) {
final boolean b = miShowImage.isSelected();
SceneManager.getInstance().getGroundImageLand().setVisible(b);
Scene.getInstance().setShowGroundImage(b);
Scene.getInstance().setEdited(true);
SceneManager.getInstance().refresh();
}
});
groundImageMenu.add(miShowImage);
popupMenuForLand = new JPopupMenu();
popupMenuForLand.setInvoker(MainPanel.getInstance().getCanvasPanel());
popupMenuForLand.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(final PopupMenuEvent e) {
final HousePart copyBuffer = Scene.getInstance().getCopyBuffer();
miPaste.setEnabled(copyBuffer instanceof Tree || copyBuffer instanceof Human || copyBuffer instanceof Foundation);
}
@Override
public void popupMenuWillBecomeInvisible(final PopupMenuEvent e) {
}
@Override
public void popupMenuCanceled(final PopupMenuEvent e) {
}
});
popupMenuForLand.add(miInfo);
// popupMenuForLand.addSeparator();
popupMenuForLand.add(miPaste);
popupMenuForLand.add(miRemoveAllTrees);
popupMenuForLand.add(miRemoveAllHumans);
popupMenuForLand.add(miRemoveAllBuildings);
popupMenuForLand.addSeparator();
popupMenuForLand.add(miImportEnergy3D);
popupMenuForLand.add(miImportCollada);
popupMenuForLand.add(miImportPrefabMenu);
popupMenuForLand.addSeparator();
popupMenuForLand.add(groundImageMenu);
popupMenuForLand.add(colorAction);
popupMenuForLand.add(miAlbedo);
popupMenuForLand.add(miSnowReflection);
popupMenuForLand.add(miThermalDiffusivity);
}
return popupMenuForLand;
}
use of org.concord.energy3d.model.Tree in project energy3d by concord-consortium.
the class TimeSeriesLogger method record.
private void record() {
final URL url = Scene.getURL();
if (url == null) {
return;
}
/* write the header */
String filename = url == null ? null : new File(url.getFile()).getName();
if (Scene.isInternalFile()) {
filename = "@" + filename;
}
final Date time = Calendar.getInstance().getTime();
final String timestamp = TIME_FORMAT.format(time);
String line = "";
if (Scene.getInstance().getProjectName() != null && !Scene.getInstance().getProjectName().trim().equals("")) {
line += "\"Project\": \"" + Scene.getInstance().getProjectName() + "\", ";
}
line += "\"File\": \"" + filename + "\"";
if (action != null) {
if ((lastTime != null && Math.abs(time.getTime() - lastTime.getTime()) < MINIMUM_INTERVAL) && action.equals(lastAction)) {
// don't log too frequently for the same type of action
return;
}
HousePart actedPart = null;
String stateValue = null;
// special treatments
if (action.equals("Undo")) {
String s = SceneManager.getInstance().getUndoManager().getRedoPresentationName();
if (s.length() >= 4) {
s = s.substring(4, s.length()).trim();
}
stateValue = "\"" + s + "\"";
} else if (action.equals("Redo")) {
String s = SceneManager.getInstance().getUndoManager().getUndoPresentationName();
if (s.length() >= 4) {
s = s.substring(4, s.length()).trim();
}
stateValue = "\"" + s + "\"";
} else if (action.equals("Save")) {
// append * at the end so that the ng3 suffix is not interpreted as a delimiter
stateValue = "\"" + Scene.getURL().toString() + "*\"";
} else if (action.equals("Note")) {
final String s = MainPanel.getInstance().getNoteString();
if (s.length() > 0) {
stateValue = "\"" + s + "\"";
MainPanel.getInstance().setNoteString("");
}
} else if (action.equals("Camera")) {
stateValue = "{" + cameraPosition + ", \"Mode\": \"" + cameraMode + "\"}";
} else if (action.equals("Graph Tab")) {
stateValue = "\"" + graphTabName + "\"";
} else if (action.equals("Adjust Thermostat")) {
final HousePart p = SceneManager.getInstance().getSelectedPart();
if (p instanceof Foundation) {
stateValue = "{\"Building\": " + p.getId() + "}";
}
} else if (action.equals("Show Curve")) {
stateValue = "{\"Graph\": \"" + graphName + "\", \"Name\": \"" + curveName + "\", \"Shown\": " + curveShown + "}";
} else if (action.equals("Show Run")) {
stateValue = "{\"Graph\": \"" + graphName + "\", \"ID\": \"" + runID + "\", \"Shown\": " + runShown + "}";
} else if (action.equals("Clear Graph Data")) {
stateValue = "\"" + graphName + "\"";
} else {
/* everything else */
final UndoableEdit lastEdit = SceneManager.getInstance().getUndoManager().lastEdit();
if (lastEdit instanceof AddPartCommand) {
actedPart = ((AddPartCommand) lastEdit).getPart();
} else if (lastEdit instanceof AddMultiplePartsCommand) {
final AddMultiplePartsCommand c = (AddMultiplePartsCommand) lastEdit;
if (c.getURL() != null) {
stateValue = "{\"Import\": \"" + c.getURL() + "\"}";
}
} else if (lastEdit instanceof AddArrayCommand) {
final AddArrayCommand c = (AddArrayCommand) lastEdit;
final HousePart p = c.getParent();
if (p instanceof Foundation) {
final Foundation f = (Foundation) p;
stateValue = "{\"Foundation\": " + f.getId() + ", \"Old Array Size\": " + c.getOldArray().size() + ", \"New Array Size\": " + f.countParts(c.getTypes()) + "}";
} else if (p instanceof Rack) {
final Foundation f = p.getTopContainer();
stateValue = "{\"Foundation\": " + f.getId() + ", \"Rack\": " + p.getId() + ", \"Old Array Size\": " + c.getOldArray().size() + ", \"New Array Size\": " + p.getChildren().size() + "}";
}
} else if (lastEdit instanceof PastePartCommand) {
actedPart = ((PastePartCommand) lastEdit).getPart();
if (actedPart instanceof Foundation) {
stateValue = "{\"Building\": " + actedPart.getId() + "}";
// FIXME: work around a bug related to pasting a building, fix later
actedPart = null;
}
} else if (lastEdit instanceof EditPartCommand) {
actedPart = ((EditPartCommand) lastEdit).getPart();
} else if (lastEdit instanceof RemovePartCommand) {
actedPart = ((RemovePartCommand) lastEdit).getPart();
} else if (lastEdit instanceof RemoveMultiplePartsCommand) {
final Foundation f = ((RemoveMultiplePartsCommand) lastEdit).getFoundation();
if (f != null) {
stateValue = "{\"Building\": " + f.getId() + "}";
}
} else if (lastEdit instanceof RotateBuildingCommand) {
final RotateBuildingCommand c = (RotateBuildingCommand) lastEdit;
final Foundation f = c.getFoundation();
if (f != null) {
stateValue = "{\"Building\": " + f.getId() + ", \"Angle\": " + Math.toDegrees(c.getRotationAngle()) + "}";
} else {
stateValue = "{\"Angle\": " + Math.toDegrees(c.getRotationAngle()) + "}";
}
} else if (lastEdit instanceof RescaleBuildingCommand) {
final RescaleBuildingCommand c = (RescaleBuildingCommand) lastEdit;
final Foundation f = c.getFoundation();
if (f != null) {
stateValue = "{\"Building\": " + f.getId();
stateValue += ", \"Old X Length\": " + c.getOldXLength() + ", \"New X Length\": " + c.getNewXLength();
stateValue += ", \"Old Y Length\": " + c.getOldYLength() + ", \"New Y Length\": " + c.getNewYLength();
stateValue += ", \"Old Z Length\": " + c.getOldZLength() + ", \"New Z Length\": " + c.getNewZLength();
stateValue += "}";
}
} else if (lastEdit instanceof MovePartCommand) {
final MovePartCommand c = (MovePartCommand) lastEdit;
final HousePart p = c.getPart();
final Vector3 d = c.getDisplacement();
final String s = "\"(" + d.getX() + ", " + d.getY() + ")\"";
if (p != null) {
stateValue = "{\"Part\": " + p.getId() + ", \"Displacement\": " + s + "}";
} else {
stateValue = "{\"Displacement\": " + s + "}";
}
} else if (lastEdit instanceof DeleteUtilityBillCommand) {
final DeleteUtilityBillCommand c = (DeleteUtilityBillCommand) lastEdit;
final Foundation f = c.getFoundation();
stateValue = "{\"Building\": " + f.getId() + "}";
} else if (lastEdit instanceof AnimateSunCommand) {
stateValue = "" + ((AnimateSunCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof ShowShadowCommand) {
stateValue = "" + ((ShowShadowCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof ShowHeatFluxCommand) {
stateValue = "" + ((ShowHeatFluxCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof SpinViewCommand) {
stateValue = "" + ((SpinViewCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof ShowAxesCommand) {
stateValue = "" + ((ShowAxesCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof ShowAnnotationCommand) {
stateValue = "" + ((ShowAnnotationCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof ShowHeliodonCommand) {
stateValue = "" + ((ShowHeliodonCommand) lastEdit).getNewValue();
} else if (lastEdit instanceof TopViewCommand) {
stateValue = "" + (SceneManager.getInstance().getViewMode() == ViewMode.TOP_VIEW);
} else if (lastEdit instanceof ZoomCommand) {
stateValue = "" + ((ZoomCommand) lastEdit).getValue();
} else if (lastEdit instanceof RescaleCommand) {
final RescaleCommand c = (RescaleCommand) lastEdit;
stateValue = "{\"Old Value\": " + c.getOldValue() + ", \"New Value\": " + Scene.getInstance().getAnnotationScale() + "}";
} else if (lastEdit instanceof ChangeBackgroundAlbedoCommand) {
final ChangeBackgroundAlbedoCommand c = (ChangeBackgroundAlbedoCommand) lastEdit;
stateValue = "{\"Old Value\": " + c.getOldValue() + ", \"New Value\": " + Scene.getInstance().getGround().getAlbedo() + "}";
} else if (lastEdit instanceof ChangeGroundThermalDiffusivityCommand) {
final ChangeGroundThermalDiffusivityCommand c = (ChangeGroundThermalDiffusivityCommand) lastEdit;
stateValue = "{\"Old Value\": " + c.getOldValue() + ", \"New Value\": " + Scene.getInstance().getGround().getThermalDiffusivity() + "}";
} else if (lastEdit instanceof ChangeAtmosphericDustLossCommand) {
final ChangeAtmosphericDustLossCommand c = (ChangeAtmosphericDustLossCommand) lastEdit;
final double[] oldValues = c.getOldValue();
String oldValueString = "\"";
for (final double x : oldValues) {
oldValueString += x + " ";
}
oldValueString.trim();
oldValueString += "\"";
String newValueString = "\"";
for (int i = 0; i < 12; i++) {
newValueString += Scene.getInstance().getAtmosphere().getDustLoss(i) + " ";
}
newValueString.trim();
newValueString += "\"";
stateValue = "{\"Old Values\": " + oldValueString + ", \"New Values\": " + newValueString + "}";
} else if (lastEdit instanceof ChangeSnowReflectionFactorCommand) {
final ChangeSnowReflectionFactorCommand c = (ChangeSnowReflectionFactorCommand) lastEdit;
final double[] oldValues = c.getOldValue();
String oldValueString = "\"";
for (final double x : oldValues) {
oldValueString += x + " ";
}
oldValueString.trim();
oldValueString += "\"";
String newValueString = "\"";
for (int i = 0; i < 12; i++) {
newValueString += Scene.getInstance().getGround().getSnowReflectionFactor(i) + " ";
}
newValueString.trim();
newValueString += "\"";
stateValue = "{\"Old Values\": " + oldValueString + ", \"New Values\": " + newValueString + "}";
} else if (lastEdit instanceof ChangeSolarHeatMapColorContrastCommand) {
final ChangeSolarHeatMapColorContrastCommand c = (ChangeSolarHeatMapColorContrastCommand) lastEdit;
stateValue = "{\"Old Value\": " + c.getOldValue() + ", \"New Value\": " + Scene.getInstance().getSolarHeatMapColorContrast() + "}";
} else if (lastEdit instanceof ChangeLatitudeCommand) {
final ChangeLatitudeCommand c = (ChangeLatitudeCommand) lastEdit;
stateValue = "{\"Old Value\": " + Math.round(Math.toDegrees(c.getOldValue())) + ", \"New Value\": " + Math.round(Math.toDegrees(Heliodon.getInstance().getLatitude())) + "}";
} else if (lastEdit instanceof ChangeCityCommand) {
final ChangeCityCommand c = (ChangeCityCommand) lastEdit;
stateValue = "{\"Old City\": \"" + c.getOldValue() + "\", \"New City\": \"" + Scene.getInstance().getCity() + "\"}";
} else if (lastEdit instanceof ChangeDateCommand) {
final ChangeDateCommand c = (ChangeDateCommand) lastEdit;
final Calendar calendar = new GregorianCalendar();
calendar.setTime(c.getOldDate());
stateValue = "{\"Old Date\": \"" + (calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "\"";
calendar.setTime(Scene.getInstance().getDate());
stateValue += ", \"New Date\": \"" + (calendar.get(Calendar.MONTH) + 1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "\"}";
} else if (lastEdit instanceof ChangeTimeCommand) {
final ChangeTimeCommand c = (ChangeTimeCommand) lastEdit;
final Calendar cal0 = new GregorianCalendar();
cal0.setTime(c.getOldTime());
stateValue = "{\"Old Time\": \"" + (cal0.get(Calendar.HOUR_OF_DAY)) + ":" + cal0.get(Calendar.MINUTE) + "\"";
final Calendar cal1 = Heliodon.getInstance().getCalendar();
stateValue += ", \"New Time\": \"" + (cal1.get(Calendar.HOUR_OF_DAY)) + ":" + cal1.get(Calendar.MINUTE) + "\"}";
} else if (lastEdit instanceof ChangeTimeAndDateWithHeliodonCommand) {
final ChangeTimeAndDateWithHeliodonCommand c = (ChangeTimeAndDateWithHeliodonCommand) lastEdit;
final Calendar oldCal = new GregorianCalendar();
oldCal.setTime(c.getOldTime());
final Calendar newCal = Heliodon.getInstance().getCalendar();
stateValue = "{\"Old Time\": \"" + (oldCal.get(Calendar.HOUR_OF_DAY)) + ":" + oldCal.get(Calendar.MINUTE) + "\"";
stateValue += ", \"New Time\": \"" + (newCal.get(Calendar.HOUR_OF_DAY)) + ":" + newCal.get(Calendar.MINUTE) + "\"";
stateValue += ", \"Old Date\": \"" + (oldCal.get(Calendar.MONTH) + 1) + "/" + oldCal.get(Calendar.DAY_OF_MONTH) + "\"";
stateValue += ", \"New Date\": \"" + (newCal.get(Calendar.MONTH) + 1) + "/" + newCal.get(Calendar.DAY_OF_MONTH) + "\"}";
} else if (lastEdit instanceof ChangeBuildingTextureCommand) {
stateValue = "{\"Old Value\": ";
TextureMode textureMode = ((ChangeBuildingTextureCommand) lastEdit).getOldValue();
if (textureMode == TextureMode.Full) {
stateValue += "\"Full\"";
} else if (textureMode == TextureMode.Simple) {
stateValue += "\"Simple\"";
} else if (textureMode == TextureMode.None) {
stateValue += "\"None\"";
}
stateValue += ", \"New Value\": ";
textureMode = Scene.getInstance().getTextureMode();
if (textureMode == TextureMode.Full) {
stateValue += "\"Full\"";
} else if (textureMode == TextureMode.Simple) {
stateValue += "\"Simple\"";
} else if (textureMode == TextureMode.None) {
stateValue += "\"None\"";
}
stateValue += "}";
} else if (lastEdit instanceof ChangeThemeCommand) {
stateValue = "{\"Old Value\": " + ((ChangeThemeCommand) lastEdit).getOldValue() + ", \"New Value\": " + Scene.getInstance().getTheme() + "}";
} else if (lastEdit instanceof ChangeRoofOverhangCommand) {
final ChangeRoofOverhangCommand c = (ChangeRoofOverhangCommand) lastEdit;
final Roof r = c.getRoof();
stateValue = "{\"Building\": " + r.getTopContainer().getId() + ", \"ID\": " + r.getId();
stateValue += ", \"Old Value\": " + c.getOldValue() * Scene.getInstance().getAnnotationScale();
stateValue += ", \"New Value\": " + r.getOverhangLength() * Scene.getInstance().getAnnotationScale() + "}";
} else if (lastEdit instanceof ChangeFoundationSizeCommand) {
final ChangeFoundationSizeCommand c = (ChangeFoundationSizeCommand) lastEdit;
final Foundation f = c.getFoundation();
stateValue = "{\"Foundation\": " + f.getId();
stateValue += ", \"Old Length\": " + c.getOldLength();
stateValue += ", \"New Length\": " + c.getNewLength();
stateValue += ", \"Old Width\": " + c.getOldWidth();
stateValue += ", \"New Width\": " + c.getNewWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight();
stateValue += ", \"New Height\": " + c.getNewHeight() + "}";
} else if (lastEdit instanceof AdjustThermostatCommand) {
final Foundation f = ((AdjustThermostatCommand) lastEdit).getFoundation();
stateValue = "{\"Building\":" + f.getId() + "}";
} else if (lastEdit instanceof ChangePartColorCommand) {
final ChangePartColorCommand c = (ChangePartColorCommand) lastEdit;
final HousePart p = c.getPart();
final Foundation f = p instanceof Foundation ? (Foundation) p : p.getTopContainer();
stateValue = "{\"Building\": " + f.getId() + ", \"ID\": " + p.getId();
stateValue += ", \"Type\": \"" + p.getClass().getSimpleName() + "\"";
stateValue += ", \"Old Color\": \"" + Util.toString(c.getOldColor()) + "\", \"New Color\": \"" + Util.toString(p.getColor()) + "\"}";
} else if (lastEdit instanceof ChangeContainerWindowColorCommand) {
final ChangeContainerWindowColorCommand cmd = (ChangeContainerWindowColorCommand) lastEdit;
final HousePart container = cmd.getContainer();
final List<Window> windows = Scene.getInstance().getWindowsOnContainer(container);
final String containerType = container instanceof Wall ? "Wall" : "Roof";
stateValue = "{\"" + containerType + "\":" + container.getId() + ", \"New Color\": \"" + Util.toString(windows.get(0).getColor()) + "\"}";
} else if (lastEdit instanceof ChangeBuildingColorCommand) {
final ChangeBuildingColorCommand c = (ChangeBuildingColorCommand) lastEdit;
final HousePart p = c.getPart();
String s = "{\"Building\":" + c.getFoundation().getId();
s += ", \"Type\": \"" + p.getClass().getSimpleName() + "\"";
s += ", \"New Color\": \"" + Util.toString(p.getColor()) + "\"}";
stateValue = s;
} else if (lastEdit instanceof ChangeLandColorCommand) {
final ChangeLandColorCommand c = (ChangeLandColorCommand) lastEdit;
stateValue = "{\"Old Color\": \"" + Util.toString(c.getOldColor()) + "\", \"New Color\": \"" + Util.toString(Scene.getInstance().getLandColor()) + "\"}";
} else if (lastEdit instanceof ChangePartUValueCommand) {
final ChangePartUValueCommand c = (ChangePartUValueCommand) lastEdit;
final HousePart p = c.getPart();
if (p instanceof Thermal) {
final Foundation f = p instanceof Foundation ? (Foundation) p : p.getTopContainer();
stateValue = "{\"Building\":" + f.getId() + ", \"ID\":" + p.getId();
stateValue += ", \"Type\": \"" + p.getClass().getSimpleName() + "\"";
stateValue += ", \"Old Value\": " + c.getOldValue();
stateValue += ", \"New Value\": " + ((Thermal) p).getUValue() + "}";
}
} else if (lastEdit instanceof ChangeBuildingUValueCommand) {
final ChangeBuildingUValueCommand c = (ChangeBuildingUValueCommand) lastEdit;
final HousePart p = c.getPart();
if (p instanceof Thermal) {
final Foundation f = p instanceof Foundation ? (Foundation) p : p.getTopContainer();
stateValue = "{\"Building\":" + f.getId();
stateValue += ", \"Type\": \"" + p.getClass().getSimpleName() + "\"";
stateValue += ", \"New Value\": " + ((Thermal) p).getUValue() + "}";
}
} else if (lastEdit instanceof ChangeVolumetricHeatCapacityCommand) {
final ChangeVolumetricHeatCapacityCommand c = (ChangeVolumetricHeatCapacityCommand) lastEdit;
final HousePart p = c.getPart();
if (p instanceof Thermal) {
final Foundation f = p instanceof Foundation ? (Foundation) p : p.getTopContainer();
stateValue = "{\"Building\":" + f.getId() + ", \"ID\":" + p.getId();
stateValue += ", \"Type\": \"" + p.getClass().getSimpleName() + "\"";
stateValue += ", \"Old Value\": " + c.getOldValue();
stateValue += ", \"New Value\": " + ((Thermal) p).getVolumetricHeatCapacity() + "}";
}
} else if (lastEdit instanceof ChangeFoundationSolarCollectorBaseHeightCommand) {
final ChangeFoundationSolarCollectorBaseHeightCommand c = (ChangeFoundationSolarCollectorBaseHeightCommand) lastEdit;
stateValue = "{\"Foundation\": " + c.getFoundation().getId() + ", \"New Value\": " + c.getFirstSolarCollector().getBaseHeight() + "}";
} else if (lastEdit instanceof ChangeBaseHeightForAllSolarCollectorsCommand) {
final ChangeBaseHeightForAllSolarCollectorsCommand c = (ChangeBaseHeightForAllSolarCollectorsCommand) lastEdit;
stateValue = "{\"New Value\": " + c.getFirstSolarCollector().getBaseHeight() + "}";
} else if (lastEdit instanceof ChangeTiltAngleCommand) {
final ChangeTiltAngleCommand c = (ChangeTiltAngleCommand) lastEdit;
final HousePart p = c.getPart();
stateValue = "{\"Foundation\": " + p.getTopContainer().getId() + ", \"ID\": " + p.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + c.getNewValue() + "}";
} else if (lastEdit instanceof ChangeAzimuthCommand) {
final ChangeAzimuthCommand c = (ChangeAzimuthCommand) lastEdit;
final HousePart p = c.getPart();
stateValue = "{\"Foundation\": " + (p instanceof Foundation ? (Foundation) p : p.getTopContainer()).getId() + ", \"ID\": " + p.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + c.getNewValue() + "}";
} else if (lastEdit instanceof ChangeBaseHeightCommand) {
final ChangeBaseHeightCommand c = (ChangeBaseHeightCommand) lastEdit;
final SolarCollector s = c.getPart();
if (s instanceof HousePart) {
final HousePart p = (HousePart) s;
stateValue = "{\"Foundation\": " + p.getTopContainer().getId() + ", \"ID\": " + p.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + c.getNewValue() + "}";
}
} else if (lastEdit instanceof SetPartSizeCommand) {
final SetPartSizeCommand c = (SetPartSizeCommand) lastEdit;
if (c.getPart() instanceof Mirror) {
final Mirror m = (Mirror) c.getPart();
stateValue = "{\"Foundation\": " + m.getTopContainer().getId() + ", \"ID\": " + m.getId();
stateValue += ", \"Old Width\": " + c.getOldWidth() + ", \"New Width\": " + m.getMirrorWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight() + ", \"New Height\": " + m.getMirrorHeight() + "}";
} else if (c.getPart() instanceof ParabolicDish) {
final ParabolicDish d = (ParabolicDish) c.getPart();
stateValue = "{\"Foundation\": " + d.getTopContainer().getId() + ", \"ID\": " + d.getId();
stateValue += ", \"Old Rim Radius\": " + c.getOldWidth() + ", \"New Rim Radius\": " + d.getRimRadius() + "}";
} else if (c.getPart() instanceof ParabolicTrough) {
final ParabolicTrough t = (ParabolicTrough) c.getPart();
stateValue = "{\"Foundation\": " + t.getTopContainer().getId() + ", \"ID\": " + t.getId();
stateValue += ", \"Old Aperture\": " + c.getOldWidth() + ", \"New Aperture\": " + t.getApertureWidth();
stateValue += ", \"Old Length\": " + c.getOldHeight() + ", \"New Length\": " + t.getTroughLength();
stateValue += ", \"Old Module Length\": " + c.getOldModuleLength() + ", \"New Module Length\": " + t.getModuleLength() + "}";
} else if (c.getPart() instanceof FresnelReflector) {
final FresnelReflector t = (FresnelReflector) c.getPart();
stateValue = "{\"Foundation\": " + t.getTopContainer().getId() + ", \"ID\": " + t.getId();
stateValue += ", \"Old Module Width\": " + c.getOldWidth() + ", \"New Module Width\": " + t.getModuleWidth();
stateValue += ", \"Old Length\": " + c.getOldHeight() + ", \"New Length\": " + t.getLength();
stateValue += ", \"Old Module Length\": " + c.getOldModuleLength() + ", \"New Module Length\": " + t.getModuleLength() + "}";
} else if (c.getPart() instanceof Rack) {
final Rack r = (Rack) c.getPart();
stateValue = "{\"Foundation\": " + r.getTopContainer().getId() + ", \"ID\": " + r.getId();
stateValue += ", \"Old Width\": " + c.getOldWidth() + ", \"New Width\": " + r.getRackWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight() + ", \"New Height\": " + r.getRackHeight() + "}";
} else if (c.getPart() instanceof Window) {
final Window r = (Window) c.getPart();
stateValue = "{\"Foundation\": " + r.getTopContainer().getId() + ", \"ID\": " + r.getId();
stateValue += ", \"Old Width\": " + c.getOldWidth() + ", \"New Width\": " + r.getWindowWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight() + ", \"New Height\": " + r.getWindowHeight() + "}";
}
} else if (lastEdit instanceof ChangeSolarPanelModelCommand) {
final ChangeSolarPanelModelCommand c = (ChangeSolarPanelModelCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId();
stateValue += ", \"Old Model\": \"" + c.getOldModel().getModel() + "\", \"New Model\": \"" + sp.getPvModuleSpecs().getModel() + "\"}";
} else if (lastEdit instanceof ChooseSolarPanelSizeCommand) {
final ChooseSolarPanelSizeCommand c = (ChooseSolarPanelSizeCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId();
stateValue += ", \"Old Width\": " + c.getOldWidth() + ", \"New Width\": " + sp.getPanelWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight() + ", \"New Height\": " + sp.getPanelHeight() + "}";
} else if (lastEdit instanceof RotateSolarPanelCommand) {
final RotateSolarPanelCommand c = (RotateSolarPanelCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId() + ", \"New Value\": " + sp.isRotated() + "}";
} else if (lastEdit instanceof ChangeSolarCellPropertiesCommand) {
final ChangeSolarCellPropertiesCommand c = (ChangeSolarCellPropertiesCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId();
stateValue += ", \"Old Efficiency\": " + c.getOldEfficiency() + ", \"New Efficiency\": " + sp.getCellEfficiency();
stateValue += ", \"Old Type\": " + c.getOldType() + ", \"New Type\": " + sp.getCellType();
stateValue += ", \"Old Color\": " + c.getOldColor() + ", \"New Color\": " + sp.getColorOption();
stateValue += "}";
} else if (lastEdit instanceof ChangeFoundationSolarCellPropertiesCommand) {
final Foundation f = ((ChangeFoundationSolarCellPropertiesCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
if (solarPanels.isEmpty()) {
stateValue = "{\"Foundation\": " + f.getId() + "}";
} else {
final SolarPanel p = solarPanels.get(0);
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Efficiency\": " + p.getCellEfficiency();
stateValue += ", \"New Type\": " + p.getCellType();
stateValue += ", \"New Color\": " + p.getColorOption() + "}";
}
} else if (lastEdit instanceof ChangeSolarCellPropertiesForAllCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
if (solarPanels.isEmpty()) {
stateValue = "{}";
} else {
final SolarPanel p = solarPanels.get(0);
stateValue = "{\"New Efficiency\": " + p.getCellEfficiency();
stateValue += ", \"New Type\": " + p.getCellType();
stateValue += ", \"New Color\": " + p.getColorOption() + "}";
}
} else if (lastEdit instanceof SetTemperatureEffectsCommand) {
final SetTemperatureEffectsCommand c = (SetTemperatureEffectsCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId() + ", \"Old Noct\": " + c.getOldNoct() + ", \"New Noct\": " + sp.getNominalOperatingCellTemperature() + ", \"Old Pmax\": " + c.getOldPmax() + ", \"New Pmax\": " + sp.getTemperatureCoefficientPmax() + "}";
} else if (lastEdit instanceof SetFoundationTemperatureEffectsCommand) {
final Foundation f = ((SetFoundationTemperatureEffectsCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Pmax\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTemperatureCoefficientPmax()) + "}";
} else if (lastEdit instanceof SetTemperatrureEffectsForAllCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Pmax\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTemperatureCoefficientPmax()) + "}";
} else if (lastEdit instanceof ChangeInverterEfficiencyCommand) {
final ChangeInverterEfficiencyCommand c = (ChangeInverterEfficiencyCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + sp.getInverterEfficiency() + "}";
} else if (lastEdit instanceof ChangeFoundationInverterEfficiencyCommand) {
final Foundation f = ((ChangeFoundationInverterEfficiencyCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getInverterEfficiency()) + "}";
} else if (lastEdit instanceof ChangeInverterEfficiencyForAllCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getInverterEfficiency()) + "}";
} else if (lastEdit instanceof SetShadeToleranceCommand) {
final SetShadeToleranceCommand c = (SetShadeToleranceCommand) lastEdit;
final SolarPanel sp = c.getSolarPanel();
stateValue = "{\"Foundation\": " + sp.getTopContainer().getId() + ", \"ID\": " + sp.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + sp.getShadeTolerance() + "}";
} else if (lastEdit instanceof SetShadeToleranceForSolarPanelsOnFoundationCommand) {
final SetShadeToleranceForSolarPanelsOnFoundationCommand c = (SetShadeToleranceForSolarPanelsOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getShadeTolerance()) + "}";
} else if (lastEdit instanceof SetShadeToleranceForAllSolarPanelsCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getShadeTolerance()) + "}";
} else if (lastEdit instanceof ChangeFoundationSolarPanelTiltAngleCommand) {
final Foundation f = ((ChangeFoundationSolarPanelTiltAngleCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeTiltAngleForAllSolarPanelsCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeFoundationSolarPanelAzimuthCommand) {
final Foundation f = ((ChangeFoundationSolarPanelAzimuthCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof ChangeAzimuthForAllSolarPanelsCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof ChangeFoundationSolarPanelModelCommand) {
final Foundation f = ((ChangeFoundationSolarPanelModelCommand) lastEdit).getFoundation();
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Model\": " + (solarPanels.isEmpty() ? null : "\"" + solarPanels.get(0).getPvModuleSpecs().getModel() + "\"") + "}";
} else if (lastEdit instanceof ChangeModelForAllSolarPanelsCommand) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Model\": " + (solarPanels.isEmpty() ? null : "\"" + solarPanels.get(0).getPvModuleSpecs().getModel() + "\"") + "}";
} else if (lastEdit instanceof ChangeSolarPanelModelForRackCommand) {
final ChangeSolarPanelModelForRackCommand c = (ChangeSolarPanelModelForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Model\": \"" + c.getOldModel().getModel() + "\", \"New Model\": \"" + rack.getSolarPanel().getPvModuleSpecs().getModel() + "\"}";
} else if (lastEdit instanceof ChangeSolarPanelModelForRacksOnFoundationCommand) {
final Foundation f = ((ChangeSolarPanelModelForRacksOnFoundationCommand) lastEdit).getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Model\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getPvModuleSpecs().getModel() + "\"") + "}";
} else if (lastEdit instanceof ChangeSolarPanelModelForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Model\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getPvModuleSpecs().getModel() + "\"") + "}";
} else if (lastEdit instanceof SetSolarCellEfficiencyForRackCommand) {
final SetSolarCellEfficiencyForRackCommand c = (SetSolarCellEfficiencyForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().getCellEfficiency() + "\"}";
} else if (lastEdit instanceof SetSolarCellEfficiencyForRacksOnFoundationCommand) {
final SetSolarCellEfficiencyForRacksOnFoundationCommand c = (SetSolarCellEfficiencyForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getCellEfficiency() + "\"") + "}";
} else if (lastEdit instanceof SetSolarCellEfficiencyForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getCellEfficiency() + "\"") + "}";
} else if (lastEdit instanceof SetNoctForRackCommand) {
final SetNoctForRackCommand c = (SetNoctForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().getNominalOperatingCellTemperature() + "\"}";
} else if (lastEdit instanceof SetNoctForRacksOnFoundationCommand) {
final SetNoctForRacksOnFoundationCommand c = (SetNoctForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getNominalOperatingCellTemperature() + "\"") + "}";
} else if (lastEdit instanceof SetNoctForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getNominalOperatingCellTemperature() + "\"") + "}";
} else if (lastEdit instanceof SetTemperatureCoefficientPmaxForRackCommand) {
final SetTemperatureCoefficientPmaxForRackCommand c = (SetTemperatureCoefficientPmaxForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().getTemperatureCoefficientPmax() + "\"}";
} else if (lastEdit instanceof SetTemperatureCoefficientPmaxForRacksOnFoundationCommand) {
final SetTemperatureCoefficientPmaxForRacksOnFoundationCommand c = (SetTemperatureCoefficientPmaxForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getTemperatureCoefficientPmax() + "\"") + "}";
} else if (lastEdit instanceof SetTemperatureCoefficientPmaxForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getTemperatureCoefficientPmax() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelCellTypeForRackCommand) {
final SetSolarPanelCellTypeForRackCommand c = (SetSolarPanelCellTypeForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Type\": \"" + c.getOldValue() + "\", \"New Type\": \"" + rack.getSolarPanel().getCellType() + "\"}";
} else if (lastEdit instanceof SetSolarPanelCellTypeForRacksOnFoundationCommand) {
final SetSolarPanelCellTypeForRacksOnFoundationCommand c = (SetSolarPanelCellTypeForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Type\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getCellType() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelCellTypeForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Type\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getCellType() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelShadeToleranceForRackCommand) {
final SetSolarPanelShadeToleranceForRackCommand c = (SetSolarPanelShadeToleranceForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().getShadeTolerance() + "\"}";
} else if (lastEdit instanceof SetSolarPanelShadeToleranceForRacksOnFoundationCommand) {
final SetSolarPanelShadeToleranceForRacksOnFoundationCommand c = (SetSolarPanelShadeToleranceForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getShadeTolerance() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelShadeToleranceForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getShadeTolerance() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelColorForRackCommand) {
final SetSolarPanelColorForRackCommand c = (SetSolarPanelColorForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Color\": \"" + c.getOldValue() + "\", \"New Color\": \"" + rack.getSolarPanel().getColorOption() + "\"}";
} else if (lastEdit instanceof SetSolarPanelColorForRacksOnFoundationCommand) {
final SetSolarPanelColorForRacksOnFoundationCommand c = (SetSolarPanelColorForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Color\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getColorOption() + "\"") + "}";
} else if (lastEdit instanceof SetSolarPanelColorForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Color\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getColorOption() + "\"") + "}";
} else if (lastEdit instanceof ChooseSolarPanelSizeForRackCommand) {
final ChooseSolarPanelSizeForRackCommand c = (ChooseSolarPanelSizeForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Width\": " + c.getOldWidth() + ", \"New Width\": " + rack.getSolarPanel().getPanelWidth();
stateValue += ", \"Old Height\": " + c.getOldHeight() + ", \"New Height\": " + rack.getSolarPanel().getPanelHeight() + "}";
} else if (lastEdit instanceof SetSizeForRacksOnFoundationCommand) {
final Foundation f = ((SetSizeForRacksOnFoundationCommand) lastEdit).getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Width\": " + (racks.isEmpty() ? -1 : racks.get(0).getRackWidth()) + ", \"New Height\": " + (racks.isEmpty() ? -1 : racks.get(0).getRackHeight()) + "}";
} else if (lastEdit instanceof SetSizeForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Width\": " + (racks.isEmpty() ? -1 : racks.get(0).getRackWidth()) + ", \"New Height\": " + (racks.isEmpty() ? -1 : racks.get(0).getRackHeight()) + "}";
} else if (lastEdit instanceof RotateSolarPanelsForRackCommand) {
final RotateSolarPanelsForRackCommand c = (RotateSolarPanelsForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().isRotated() + "\"}";
} else if (lastEdit instanceof RotateSolarPanelsForRacksOnFoundationCommand) {
final RotateSolarPanelsForRacksOnFoundationCommand c = (RotateSolarPanelsForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().isRotated() + "\"") + "}";
} else if (lastEdit instanceof RotateSolarPanelsForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().isRotated() + "\"") + "}";
} else if (lastEdit instanceof SetInverterEfficiencyForRackCommand) {
final SetInverterEfficiencyForRackCommand c = (SetInverterEfficiencyForRackCommand) lastEdit;
final Rack rack = c.getRack();
stateValue = "{\"Foundation\": " + rack.getTopContainer().getId() + ", \"ID\": " + rack.getId();
stateValue += ", \"Old Value\": \"" + c.getOldValue() + "\", \"New Value\": \"" + rack.getSolarPanel().getInverterEfficiency() + "\"}";
} else if (lastEdit instanceof SetInverterEfficiencyForRacksOnFoundationCommand) {
final SetInverterEfficiencyForRacksOnFoundationCommand c = (SetInverterEfficiencyForRacksOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getInverterEfficiency() + "\"") + "}";
} else if (lastEdit instanceof SetInverterEfficiencyForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? null : "\"" + racks.get(0).getSolarPanel().getInverterEfficiency() + "\"") + "}";
} else if (lastEdit instanceof ChangeFoundationRackTiltAngleCommand) {
final Foundation f = ((ChangeFoundationRackTiltAngleCommand) lastEdit).getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeTiltAngleForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeFoundationRackAzimuthCommand) {
final Foundation f = ((ChangeFoundationRackAzimuthCommand) lastEdit).getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof ChangeAzimuthForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof SetSolarPanelSizeForRacksOnFoundationCommand) {
final Foundation f = ((SetSolarPanelSizeForRacksOnFoundationCommand) lastEdit).getFoundation();
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Width\": " + (racks.isEmpty() ? -1 : racks.get(0).getSolarPanel().getPanelWidth()) + ", \"New Height\": " + (racks.isEmpty() ? -1 : racks.get(0).getSolarPanel().getPanelHeight()) + "}";
} else if (lastEdit instanceof SetSolarPanelSizeForAllRacksCommand) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Width\": " + (racks.isEmpty() ? -1 : racks.get(0).getSolarPanel().getPanelWidth()) + ", \"New Height\": " + (racks.isEmpty() ? -1 : racks.get(0).getSolarPanel().getPanelHeight()) + "}";
} else if (lastEdit instanceof SetSolarTrackerCommand) {
final SetSolarTrackerCommand c = (SetSolarTrackerCommand) lastEdit;
final Trackable tracker = c.getTracker();
long bid = -1;
long cid = -1;
if (tracker instanceof HousePart) {
bid = ((HousePart) tracker).getTopContainer().getId();
cid = ((HousePart) tracker).getId();
}
stateValue = "{\"Foundation\": " + bid + ", \"ID\": " + cid + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + tracker.getTracker() + "}";
} else if (lastEdit instanceof SetSolarTrackersOnFoundationCommand) {
final SetSolarTrackersOnFoundationCommand c = (SetSolarTrackersOnFoundationCommand) lastEdit;
final Foundation f = c.getFoundation();
final Trackable tracker = c.getTracker();
if (tracker instanceof SolarPanel) {
final List<SolarPanel> solarPanels = f.getSolarPanels();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTracker()) + "}";
} else if (tracker instanceof Rack) {
final List<Rack> racks = f.getRacks();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getTracker()) + "}";
}
} else if (lastEdit instanceof SetSolarTrackersForAllCommand) {
final SetSolarTrackersForAllCommand c = (SetSolarTrackersForAllCommand) lastEdit;
final Trackable tracker = c.getTracker();
if (tracker instanceof SolarPanel) {
final List<SolarPanel> solarPanels = Scene.getInstance().getAllSolarPanels();
stateValue = "{\"New Value\": " + (solarPanels.isEmpty() ? -1 : solarPanels.get(0).getTracker()) + "}";
} else if (tracker instanceof Rack) {
final List<Rack> racks = Scene.getInstance().getAllRacks();
stateValue = "{\"New Value\": " + (racks.isEmpty() ? -1 : racks.get(0).getTracker()) + "}";
}
} else if (lastEdit instanceof SetSizeForHeliostatsOnFoundationCommand) {
final Foundation f = ((SetSizeForHeliostatsOnFoundationCommand) lastEdit).getFoundation();
final List<Mirror> mirrors = f.getHeliostats();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Width\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getMirrorWidth()) + ", \"New Height\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getMirrorHeight()) + "}";
} else if (lastEdit instanceof SetSizeForAllHeliostatsCommand) {
final List<Mirror> mirrors = Scene.getInstance().getAllHeliostats();
stateValue = "{\"New Width\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getMirrorWidth()) + ", \"New Height\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getMirrorHeight()) + "}";
} else if (lastEdit instanceof ChangeHeliostatTargetCommand) {
final ChangeHeliostatTargetCommand c = (ChangeHeliostatTargetCommand) lastEdit;
final Mirror m = c.getMirror();
stateValue = "{\"Foundation\": " + m.getTopContainer().getId() + ", \"ID\": " + m.getId();
stateValue += ", \"Old Value\": " + (c.getOldValue() == null ? -1 : c.getOldValue().getId()) + ", \"New Value\": " + (c.getNewValue() == null ? -1 : c.getNewValue().getId()) + "}";
} else if (lastEdit instanceof ChangeFoundationHeliostatTargetCommand) {
final Foundation f = ((ChangeFoundationHeliostatTargetCommand) lastEdit).getFoundation();
final List<Mirror> mirrors = f.getHeliostats();
long newValue = -1;
if (!mirrors.isEmpty()) {
final Foundation t = mirrors.get(0).getReceiver();
if (t != null) {
newValue = t.getId();
}
}
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + newValue + "}";
} else if (lastEdit instanceof ChangeTargetForAllHeliostatsCommand) {
final List<Mirror> mirrors = Scene.getInstance().getAllHeliostats();
long newValue = -1;
if (!mirrors.isEmpty()) {
final Foundation t = mirrors.get(0).getReceiver();
if (t != null) {
newValue = t.getId();
}
}
stateValue = "{\"New Value\": " + newValue + "}";
} else if (lastEdit instanceof ChangeFoundationHeliostatTiltAngleCommand) {
final Foundation f = ((ChangeFoundationHeliostatTiltAngleCommand) lastEdit).getFoundation();
final List<Mirror> mirrors = f.getHeliostats();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeTiltAngleForAllHeliostatsCommand) {
final List<Mirror> mirrors = Scene.getInstance().getAllHeliostats();
stateValue = "{\"New Value\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getTiltAngle()) + "}";
} else if (lastEdit instanceof ChangeFoundationHeliostatAzimuthCommand) {
final Foundation f = ((ChangeFoundationHeliostatAzimuthCommand) lastEdit).getFoundation();
final List<Mirror> mirrors = f.getHeliostats();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof ChangeAzimuthForAllHeliostatsCommand) {
final List<Mirror> mirrors = Scene.getInstance().getAllHeliostats();
stateValue = "{\"New Value\": " + (mirrors.isEmpty() ? -1 : mirrors.get(0).getRelativeAzimuth()) + "}";
} else if (lastEdit instanceof SetShapeForParabolicTroughsOnFoundationCommand) {
final Foundation f = ((SetShapeForParabolicTroughsOnFoundationCommand) lastEdit).getFoundation();
final List<ParabolicTrough> troughs = f.getParabolicTroughs();
final ParabolicTrough t = troughs.isEmpty() ? null : troughs.get(0);
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Aperture Width\": " + (t == null ? -1 : t.getApertureWidth()) + ", \"New Length\": " + (t == null ? -1 : t.getTroughLength()) + ", \"New Module Length\": " + (t == null ? -1 : t.getModuleLength()) + ", \"New Semilatus Rectum\": " + (t == null ? -1 : t.getSemilatusRectum()) + "}";
} else if (lastEdit instanceof SetShapeForAllParabolicTroughsCommand) {
final List<ParabolicTrough> troughs = Scene.getInstance().getAllParabolicTroughs();
final ParabolicTrough t = troughs.isEmpty() ? null : troughs.get(0);
stateValue = "{\"New Aperture Width\": " + (t == null ? -1 : t.getApertureWidth()) + ", \"New Length\": " + (t == null ? -1 : t.getTroughLength()) + ", \"New Module Length\": " + (t == null ? -1 : t.getModuleLength()) + ", \"New Semilatus Rectum\": " + (t == null ? -1 : t.getSemilatusRectum()) + "}";
} else if (lastEdit instanceof SetRimRadiusForParabolicDishesOnFoundationCommand) {
final Foundation f = ((SetRimRadiusForParabolicDishesOnFoundationCommand) lastEdit).getFoundation();
final List<ParabolicDish> dishes = f.getParabolicDishes();
final ParabolicDish d = dishes.isEmpty() ? null : dishes.get(0);
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Rim Radius\": " + (d == null ? -1 : d.getRimRadius()) + "}";
} else if (lastEdit instanceof SetRimRadiusForAllParabolicDishesCommand) {
final List<ParabolicDish> dishes = Scene.getInstance().getAllParabolicDishes();
final ParabolicDish d = dishes.isEmpty() ? null : dishes.get(0);
stateValue = "{\"New Rim Radius\": " + (d == null ? -1 : d.getRimRadius()) + "}";
} else if (lastEdit instanceof SetSizeForFresnelReflectorsOnFoundationCommand) {
final Foundation f = ((SetSizeForFresnelReflectorsOnFoundationCommand) lastEdit).getFoundation();
final List<FresnelReflector> reflectors = f.getFresnelReflectors();
final FresnelReflector r = reflectors.isEmpty() ? null : reflectors.get(0);
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Length\": " + (r == null ? -1 : r.getLength()) + ", \"New Module Length\": " + (r == null ? -1 : r.getModuleLength()) + ", \"New Module Width\": " + (r == null ? -1 : r.getModuleWidth()) + "}";
} else if (lastEdit instanceof SetSizeForAllFresnelReflectorsCommand) {
final List<FresnelReflector> reflectors = Scene.getInstance().getAllFresnelReflectors();
final FresnelReflector r = reflectors.isEmpty() ? null : reflectors.get(0);
stateValue = "{\"New Length\": " + (r == null ? -1 : r.getLength()) + ", \"New Module Length\": " + (r == null ? -1 : r.getModuleLength()) + ", \"New Module Width\": " + (r == null ? -1 : r.getModuleWidth()) + "}";
} else if (lastEdit instanceof ChangeWallTypeCommand) {
final ChangeWallTypeCommand c = (ChangeWallTypeCommand) lastEdit;
final Wall w = c.getWall();
stateValue = "{\"Building\": " + w.getContainer().getId() + ", \"ID\": " + w.getId();
stateValue += ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + w.getType() + "}";
} else if (lastEdit instanceof ChangeWallThicknessCommand) {
final ChangeWallThicknessCommand c = (ChangeWallThicknessCommand) lastEdit;
final Wall w = c.getWall();
stateValue = "{\"Building\": " + w.getContainer().getId() + ", \"ID\": " + w.getId();
stateValue += ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + w.getThickness() + "}";
} else if (lastEdit instanceof ChangeFoundationWallThicknessCommand) {
final ChangeFoundationWallThicknessCommand c = (ChangeFoundationWallThicknessCommand) lastEdit;
final Foundation f = c.getFoundation();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + c.getWalls().get(0).getThickness() + "}";
} else if (lastEdit instanceof ChangeThicknessForAllWallsCommand) {
final ChangeThicknessForAllWallsCommand c = (ChangeThicknessForAllWallsCommand) lastEdit;
stateValue = "{\"New Value\": " + (c.getWalls().isEmpty() ? -1 : ((Wall) c.getWalls().get(0)).getThickness()) + "}";
} else if (lastEdit instanceof ChangeWallHeightCommand) {
final ChangeWallHeightCommand c = (ChangeWallHeightCommand) lastEdit;
final Wall w = c.getWall();
stateValue = "{\"Building\": " + w.getContainer().getId() + ", \"ID\": " + w.getId();
stateValue += ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + w.getHeight() + "}";
} else if (lastEdit instanceof ChangeFoundationWallHeightCommand) {
final ChangeFoundationWallHeightCommand c = (ChangeFoundationWallHeightCommand) lastEdit;
final Foundation f = c.getFoundation();
stateValue = "{\"Foundation\": " + f.getId() + ", \"New Value\": " + c.getWalls().get(0).getHeight() + "}";
} else if (lastEdit instanceof ChangeHeightForAllWallsCommand) {
final ChangeHeightForAllWallsCommand c = (ChangeHeightForAllWallsCommand) lastEdit;
stateValue = "{\"New Value\": " + (c.getWalls().isEmpty() ? -1 : ((Wall) c.getWalls().get(0)).getHeight()) + "}";
} else if (lastEdit instanceof ChangeHeightForConnectedWallsCommand) {
final ChangeHeightForConnectedWallsCommand c = (ChangeHeightForConnectedWallsCommand) lastEdit;
stateValue = "{\"New Value\": " + (c.getWalls().isEmpty() ? -1 : c.getWalls().get(0).getHeight()) + "}";
} else if (lastEdit instanceof ChangeWindowShgcCommand) {
final ChangeWindowShgcCommand c = (ChangeWindowShgcCommand) lastEdit;
final Window w = c.getWindow();
stateValue = "{\"Building\": " + w.getTopContainer().getId() + ", \"ID\": " + w.getId() + ", \"Old Value\": " + c.getOldValue() + ", \"New Value\": " + w.getSolarHeatGainCoefficient() + "}";
} else if (lastEdit instanceof ChangeContainerWindowShgcCommand) {
final ChangeContainerWindowShgcCommand c = (ChangeContainerWindowShgcCommand) lastEdit;
final HousePart container = c.getContainer();
final List<Window> windows = Scene.getInstance().getWindowsOnContainer(container);
final String containerType = container instanceof Wall ? "Wall" : "Roof";
stateValue = "{\"" + containerType + "\": " + container.getId() + ", \"New Value\": " + (windows.isEmpty() ? -1 : windows.get(0).getSolarHeatGainCoefficient()) + "}";
} else if (lastEdit instanceof ChangeBuildingWindowShgcCommand) {
final ChangeBuildingWindowShgcCommand c = (ChangeBuildingWindowShgcCommand) lastEdit;
final Foundation foundation = c.getFoundation();
final List<Window> windows = Scene.getInstance().getWindowsOfBuilding(foundation);
stateValue = "{\"Building\": " + foundation.getId() + ", \"New Value\": " + (windows.isEmpty() ? -1 : windows.get(0).getSolarHeatGainCoefficient()) + "}";
}
}
line += ", \"" + action + "\": ";
if (actedPart != null) {
line += LoggerUtil.getInfo(actedPart);
} else if (stateValue != null) {
line += stateValue;
} else {
line += "null";
}
lastAction = action;
}
if (analysisRequester != null) {
final HousePart analyzedPart = SceneManager.getInstance().getSelectedPart();
line += ", \"" + analysisRequester.getClass().getSimpleName() + "\": ";
if (analysisRequester instanceof AnnualSensorData) {
line += ((AnnualSensorData) analysisRequester).toJson();
} else if (analysisRequester instanceof DailySensorData) {
line += ((DailySensorData) analysisRequester).toJson();
} else if (analysisRequester instanceof DailyEnvironmentalTemperature) {
line += ((DailyEnvironmentalTemperature) analysisRequester).toJson();
} else if (analysisRequester instanceof AnnualEnvironmentalTemperature) {
line += ((AnnualEnvironmentalTemperature) analysisRequester).toJson();
} else {
if (analyzedPart != null && !(analyzedPart instanceof Tree) && !(analyzedPart instanceof Human)) {
// if something analyzable is selected
if (analysisRequester instanceof EnergyDailyAnalysis) {
line += ((EnergyDailyAnalysis) analysisRequester).toJson();
} else if (analysisRequester instanceof BuildingDailyEnergyGraph) {
line += ((BuildingDailyEnergyGraph) analysisRequester).toJson();
final String result = Building.getBuildingSolarPotentials();
if (result != null) {
line += ", \"Solar Potential\": " + result;
}
} else if (analysisRequester instanceof EnergyAnnualAnalysis) {
line += ((EnergyAnnualAnalysis) analysisRequester).toJson();
} else if (analysisRequester instanceof EnergyAngularAnalysis) {
line += ((EnergyAngularAnalysis) analysisRequester).toJson();
} else if (analysisRequester instanceof ProjectCost) {
line += ((ProjectCost) analysisRequester).toJson();
}
} else {
if (analysisRequester instanceof ProjectCost) {
line += ((ProjectCost) analysisRequester).toJson();
} else if (analysisRequester instanceof BuildingDailyEnergyGraph) {
line += ((BuildingDailyEnergyGraph) analysisRequester).toJson();
final String result = Building.getBuildingSolarPotentials();
if (result != null) {
line += ", \"Solar Potential\": " + result;
}
}
}
if (analysisRequester instanceof PvDailyAnalysis) {
line += ((PvDailyAnalysis) analysisRequester).toJson();
} else if (analysisRequester instanceof PvAnnualAnalysis) {
line += ((PvAnnualAnalysis) analysisRequester).toJson();
}
if (analysisRequester instanceof GroupDailyAnalysis) {
line += ((GroupDailyAnalysis) analysisRequester).toJson();
} else if (analysisRequester instanceof GroupAnnualAnalysis) {
line += ((GroupAnnualAnalysis) analysisRequester).toJson();
}
}
}
if (firstRecord) {
firstRecord = false;
} else {
writer.write(",\n");
}
writer.write("{\"Timestamp\": \"" + timestamp + "\", " + line + "}");
writer.flush();
lastTime = time;
}
use of org.concord.energy3d.model.Tree in project energy3d by concord-consortium.
the class Scene method pasteToPickedLocationOnLand.
public void pasteToPickedLocationOnLand() {
if (SceneManager.getInstance().getSolarHeatMap()) {
EnergyPanel.getInstance().updateRadiationHeatMap();
}
if (copyBuffer == null) {
return;
}
final HousePart c = copyBuffer.copy(false);
if (c == null) {
return;
}
final Vector3 position = SceneManager.getInstance().getPickedLocationOnLand();
if (position == null) {
return;
}
if (c instanceof Tree || c instanceof Human) {
c.getPoints().set(0, position);
add(c, true);
copyBuffer = c;
SceneManager.getInstance().getUndoManager().addEdit(new PastePartCommand(c));
} else if (c instanceof Foundation) {
// pasting a foundation also clones the building above it
final Vector3 shift = position.subtractLocal(c.getAbsCenter()).multiplyLocal(1, 1, 0);
final int n = c.getPoints().size();
for (int i = 0; i < n; i++) {
c.getPoints().get(i).addLocal(shift);
}
add(c, true);
// copy gable info, too
final Foundation oldFoundation = (Foundation) copyBuffer;
final Foundation newFoundation = (Foundation) c;
final List<Roof> oldRoofs = oldFoundation.getRoofs();
final List<Roof> newRoofs = newFoundation.getRoofs();
if (!oldRoofs.isEmpty() && !newRoofs.isEmpty()) {
for (int i = 0; i < newRoofs.size(); i++) {
final Map<Integer, List<Wall>> oldMap = oldRoofs.get(i).getGableEditPointToWallMap();
if (oldMap == null || oldMap.isEmpty()) {
continue;
}
final Map<Integer, List<Wall>> newMap = new HashMap<Integer, List<Wall>>();
for (final Integer key : oldMap.keySet()) {
final List<Wall> oldWalls = oldMap.get(key);
final List<Wall> newWalls = new ArrayList<Wall>();
for (final Wall w : oldWalls) {
newWalls.add(getCopiedWall(w, oldFoundation, newFoundation));
}
newMap.put(key, newWalls);
}
newRoofs.get(i).setGableEditPointToWallMap(newMap);
}
}
copyBuffer = c;
setIdOfChildren(c);
SceneManager.getInstance().getUndoManager().addEdit(new PastePartCommand(c));
}
SceneManager.getInstance().setSelectedPart(c);
}
use of org.concord.energy3d.model.Tree in project energy3d by concord-consortium.
the class Scene method add.
public void add(final HousePart part, final boolean redraw) {
final HousePart container = part.getContainer();
if (container != null) {
container.getChildren().add(part);
}
add(part);
if (redraw) {
if (part instanceof SolarCollector || part instanceof Tree || part instanceof Human) {
// add these objects will not affect the rendering of other objects
part.draw();
} else if (part instanceof Foundation) {
redrawFoundationNow((Foundation) part);
} else if (part instanceof Window || part instanceof Door) {
part.draw();
part.getContainer().draw();
} else {
// what will fall through here?
System.out.println("*** Warning: potential performance drag: " + part);
redrawAll();
}
}
}
use of org.concord.energy3d.model.Tree in project energy3d by concord-consortium.
the class Scene method init.
private void init() {
root.detachAllChildren();
originalHouseRoot.detachAllChildren();
notReceivingShadowRoot.detachAllChildren();
root.attachChild(originalHouseRoot);
root.attachChild(notReceivingShadowRoot);
if (url != null) {
for (final HousePart p : parts) {
final boolean b = p instanceof Tree || p instanceof Human;
(b ? notReceivingShadowRoot : originalHouseRoot).attachChild(p.getRoot());
}
System.out.println("initSceneNow done");
}
root.updateWorldBound(true);
SceneManager.getInstance().updateHeliodonAndAnnotationSize();
SceneManager.getInstance().setAxesVisible(!hideAxes);
SceneManager.getInstance().getSolarLand().setVisible(solarMapForLand);
setTheme(theme);
SceneManager.getInstance().getLand().setDefaultColor(landColor != null ? landColor : new ColorRGBA(0, 1, 0, 0.5f));
PvModulesData.getInstance();
final EnergyPanel energyPanel = EnergyPanel.getInstance();
if (calendar != null) {
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
if (url == null) {
// if a new file is created, its default time is always set to noon so that the user does not get a dark night scene
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
}
final Date time = calendar.getTime();
Heliodon.getInstance().setDate(time);
Heliodon.getInstance().setTime(time);
Util.setSilently(energyPanel.getDateSpinner(), time);
Util.setSilently(energyPanel.getTimeSpinner(), time);
if ("Boston".equals(city) || city == null || "".equals(city)) {
city = "Boston, MA";
latitude = 42;
}
// already silent
energyPanel.setLatitude(latitude);
Util.selectSilently(energyPanel.getCityComboBox(), city);
final LocationData ld = LocationData.getInstance();
if (ld.getLatitudes().get(city) != null) {
energyPanel.getCityComboBox().setToolTipText("<html>(" + ld.getLatitudes().get(city) + "°, " + ld.getLongitudes().get(city) + "°), elevation " + ld.getAltitudes().get(city).intValue() + "m<br>Use Edit>Set Region... to select country and region.</html>");
} else {
JOptionPane.showMessageDialog(MainFrame.getInstance(), city + " not supported. Please upgrade your Energy3D to the latest.", "Missing City", JOptionPane.ERROR_MESSAGE);
}
Scene.getInstance().updateTreeLeaves();
SceneManager.getInstance().changeSkyTexture();
if (!first) {
SceneManager.getInstance().setHeliodonVisible(isHeliodonVisible);
Util.selectSilently(MainPanel.getInstance().getHeliodonButton(), isHeliodonVisible);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MainPanel.getInstance().getSunAnimationButton().setEnabled(isHeliodonVisible);
}
});
}
Heliodon.getInstance().drawSun();
SceneManager.getInstance().setShading(Heliodon.getInstance().isNightTime());
}
// previous versions do not have the following classes
if (designSpecs == null) {
designSpecs = new DesignSpecs();
} else {
designSpecs.setDefaultValues();
}
if (pvDesignSpecs == null) {
pvDesignSpecs = new PvDesignSpecs();
} else {
pvDesignSpecs.setDefaultValues();
}
if (cspDesignSpecs == null) {
cspDesignSpecs = new CspDesignSpecs();
} else {
cspDesignSpecs.setDefaultValues();
}
if (pvCustomPrice == null) {
pvCustomPrice = new PvCustomPrice();
} else {
pvCustomPrice.setDefaultValues();
}
if (cspCustomPrice == null) {
cspCustomPrice = new CspCustomPrice();
} else {
cspCustomPrice.setDefaultValues();
}
if (ground == null) {
ground = new Ground();
}
if (atmosphere == null) {
atmosphere = new Atmosphere();
}
if (unit == null) {
unit = Unit.InternationalSystemOfUnits;
}
// restore the default values
if (Util.isZero(heatVectorLength)) {
heatVectorLength = 5000;
}
if (Util.isZero(heatFluxGridSize)) {
heatFluxGridSize = 2;
}
if (Util.isZero(solarStep)) {
solarStep = 2;
}
if (Util.isZero(timeStep)) {
timeStep = 15;
}
if (Util.isZero(solarPanelNx)) {
solarPanelNx = 4;
}
if (Util.isZero(solarPanelNy)) {
solarPanelNy = 4;
}
if (Util.isZero(rackNx)) {
rackNx = 8;
}
if (Util.isZero(rackNy)) {
rackNy = 8;
}
if (Util.isZero(mirrorNx)) {
mirrorNx = 4;
}
if (Util.isZero(mirrorNy)) {
mirrorNy = 4;
}
if (Util.isZero(parabolicDishN)) {
parabolicDishN = 4;
}
if (Util.isZero(rackCellSize)) {
rackCellSize = 1;
}
if (Util.isZero(solarContrast)) {
solarContrast = 50;
}
// in case we need to have more instruction sheets
if (instructionSheetText != null) {
if (instructionSheetText.length < INSTRUCTION_SHEET_NUMBER) {
final String[] tmp = new String[INSTRUCTION_SHEET_NUMBER];
System.arraycopy(instructionSheetText, 0, tmp, 0, instructionSheetText.length);
instructionSheetText = tmp;
}
}
if (instructionSheetTextType != null) {
if (instructionSheetTextType.length < INSTRUCTION_SHEET_NUMBER) {
final String[] tmp = new String[INSTRUCTION_SHEET_NUMBER];
System.arraycopy(instructionSheetTextType, 0, tmp, 0, instructionSheetTextType.length);
instructionSheetTextType = tmp;
}
}
setEdited(false);
setCopyBuffer(null);
Util.setSilently(energyPanel.getColorMapSlider(), solarContrast);
// need to do this to avoid logging
Util.setSilently(MainPanel.getInstance().getNoteTextArea(), note == null ? "" : note);
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
energyPanel.updateThermostat();
// necessary for the scroll bars to show up appropriately
MainPanel.getInstance().setNoteVisible(MainPanel.getInstance().isNoteVisible());
// moved from OpenNow to here to avoid triggering EnergyComputer -> RedrawAllNow before open is completed
MainPanel.getInstance().getEnergyButton().setSelected(false);
SceneManager.getInstance().getUndoManager().discardAllEdits();
MainApplication.getEventLog().clear();
}
});
}
Aggregations