/* PseudoCode Interpreted Language (PCIL): Part of the algoviz@vt collection of algorithm visualizations. Copyright (C) 2008 Brandon Malone, Frank Hadlock This file is part of the PseudoCode Interpreted Language. PseudoCode Interpreted Language is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PseudoCode Interpreted Language is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PseudoCode Interpreted Language. If not, see . */ /* * PrimitiveBoolean.java * * Created on March 11, 2008, 1:14 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package dynamicmvc; import java.util.ArrayList; import java.util.HashMap; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; /** * * @author Brandon */ public class PrimitiveBoolean extends Primitive { public static String pseudocodeTypeName() { return "Boolean"; } public String getType() { return pseudocodeTypeName(); } // private boolean value; private String name; // // public boolean isNullable() { return !value; } public Primitive copy() { PrimitiveBoolean i = new PrimitiveBoolean(name, value); return i; } public Primitive deepCopy(HashMap alreadyCopiedAddresses) throws DynamicMVCException { PrimitivePointer p = getPointer(); if (alreadyCopiedAddresses.containsKey(Integer.valueOf(p.getAddress()))) { return PrimitiveFactory.getFromMemory(alreadyCopiedAddresses.get(p.getAddress())); } PrimitivePointer pp = PrimitiveFactory.create(pseudocodeTypeName(), name); alreadyCopiedAddresses.put(p.getAddress(), pp.getAddress()); PrimitiveBoolean i = (PrimitiveBoolean)pp.dereference(); i.setName(name); i.setValue(value); deepCopyDefinedProperties(i, alreadyCopiedAddresses); return i; } public boolean deepEquals(Primitive p) throws DynamicMVCException { if (!(p instanceof PrimitiveBoolean)) { DynamicController.errorMessage = "Expecting Boolean, but found " + p.getType(); return false; } PrimitiveBoolean b = (PrimitiveBoolean)p; if (value != b.getValue()) { DynamicController.errorMessage = "Wrong boolean value. Expecting '" + value + "', but found '" + b.getValue() + "'."; return false; } return super.deepEqualsDefinedProperties(p); } public void set(Primitive other) throws DynamicMVCException { // if other is an integer, copy its values if (other instanceof PrimitiveBoolean) { PrimitiveBoolean o = (PrimitiveBoolean)other; //setName(o.getName()); setValue(o.getValue()); } else { // otherwise, throw an DynamicMVCException throw new DynamicMVCException("Invalid assignment."); } } /** Creates a new instance of PrimitiveBoolean */ public PrimitiveBoolean(String name, boolean value) { super(); setName(name); setValue(value); } public PrimitiveBoolean(boolean value) { super(); setName(""); setValue(value); } public PrimitiveBoolean() { super(); setName(""); setValue(false); } // // public boolean getValue() { return value; } public void setValue(boolean value) { this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } // // public void populateFromEditComponentWrapper(JComponent editComponentWrapper) { setValue(Boolean.valueOf((String)dataTypes.getSelectedItem())); } public String getEditComponentWrapperName() { return "pnl" + name; } javax.swing.JComboBox dataTypes; public JComponent getEditComponent() { // wrap everything in a panel JPanel wrapper = new JPanel(); wrapper.setName(getEditComponentWrapperName()); dataTypes = new javax.swing.JComboBox(); dataTypes.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"true", "false"})); wrapper.add(dataTypes); return wrapper; } public JComponent getReadOnlyComponent() { // wrap everything in a panel JPanel wrapper = new JPanel(); // create a label to display the number JLabel val = new JLabel(); val.setText(String.valueOf(value)); wrapper.add(val); return wrapper; } // public Object execute(String methodName, ArrayList arguments) throws DynamicMVCException { // is this a method of mine? if (methodName.equalsIgnoreCase("equals")) { return equals(arguments); } else if (methodName.equalsIgnoreCase("notEqual")) { return !equals(arguments); } else if (methodName.equalsIgnoreCase("assign")) { assign(arguments); return null; } else { throw new DynamicMVCException("Invalid method name:'" + methodName + "' on object '" + name + "'."); } } public boolean equals(ArrayList arguments) throws DynamicMVCException { if (arguments.size() == 1) { PrimitiveBoolean i = (PrimitiveBoolean)arguments.get(0).dereference(); return valueEquals(i); } throw new DynamicMVCException("Wrong number of arguments."); } public boolean valueEquals(Primitive p) { if (p instanceof PrimitiveBoolean) { return valueEquals((PrimitiveBoolean)p); } return false; } public boolean valueEquals(PrimitiveBoolean i) { if(i.hasDefinedProperties(this.getDefinedProperties())) { return (value == i.getValue()); } else { return false; } } public boolean equals(Boolean b) { return (value == b.booleanValue()); } public boolean equals(boolean b) { return value == b; } public void assign(ArrayList arguments) throws DynamicMVCException { if (arguments.size() == 1) { PrimitiveBoolean i = (PrimitiveBoolean)arguments.get(0).dereference(); assign(i); } throw new DynamicMVCException("Wrong number of arguments."); } public void assign(PrimitiveBoolean i) { String otherName = i.getName(); boolean otherValue = i.getValue(); setName(otherName); setValue(otherValue); } public String toString() { return getName() + ": " + getValue(); } public int compareTo(Primitive p) throws DynamicMVCException { if (p instanceof PrimitiveBoolean) { Boolean val = new Boolean(value); Boolean otherVal = new Boolean(((PrimitiveBoolean)p).getValue()); return val.compareTo(otherVal); } else { throw new DynamicMVCException("Invalid comparison."); } } public PrimitiveString toPrimitiveString() { PrimitiveString s = (PrimitiveString)(PrimitiveFactory.create(PrimitiveString.pseudocodeTypeName(), "s").dereference()); s.setValue(String.valueOf(value)); return s; } }