/** * *************************************************************** * JADE - Java Agent DEvelopment Framework is a framework to develop * multi-agent systems in compliance with the FIPA specifications. * Copyright (C) 2000 CSELT S.p.A. * * GNU Lesser General Public License * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation, * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * ************************************************************** */ package jade.content.abs; import jade.content.onto.*; import jade.content.schema.*; import java.io.PrintStream; import java.util.Date; /** * An abstract descriptor that can hold a primitive expression. * @author Paola Turci, Federico Bergenti - Universita` di Parma * @author Giovanni Caire - TILAB */ public class AbsPrimitive implements AbsTerm { private Object value = null; private String typeName = null; /** * Construct an Abstract descriptor to hold a primitive of * the proper type (e.g. String, int, boolean...) and set its value. */ private AbsPrimitive(String typeName, Object value) { this.typeName = typeName; this.value = value; } /** * Construct an Abstract descriptor to hold a primitive of * the proper type (e.g. String, int, boolean...). * @param typeName The name of the type of the primitive held by * this abstract descriptor. */ public AbsPrimitive(String typeName) { this(typeName, null); } /** * Create an AbsPrimitive of type <code>BasicOntology.STRING</code> * containing a given <code>String</code> value. */ public static AbsPrimitive wrap(String value) { AbsPrimitive ret = null; if (value != null) { ret = new AbsPrimitive(BasicOntology.STRING, value); } return ret; } /** * Create an AbsPrimitive of type <code>BasicOntology.BOOLEAN</code> * containing a given <code>boolean</code> value. */ public static AbsPrimitive wrap(boolean value) { AbsPrimitive ret = new AbsPrimitive(BasicOntology.BOOLEAN, new Boolean(value)); return ret; } /** * Create an AbsPrimitive of type <code>BasicOntology.INTEGER</code> * containing a given <code>int</code> value. */ public static AbsPrimitive wrap(int value) { AbsPrimitive ret = new AbsPrimitive(BasicOntology.INTEGER, new Integer(value)); return ret; } /** * Create an AbsPrimitive of type <code>BasicOntology.INTEGER</code> * containing a given <code>long</code> value. */ public static AbsPrimitive wrap(long value) { AbsPrimitive ret = new AbsPrimitive(BasicOntology.INTEGER, new Long(value)); return ret; } //#MIDP_EXCLUDE_BEGIN /** * Create an AbsPrimitive of type <code>BasicOntology.FLOAT</code> * containing a given <code>float</code> value. */ public static AbsPrimitive wrap(float value) { AbsPrimitive ret = new AbsPrimitive(BasicOntology.FLOAT, new Float(value)); return ret; } /** * Create an AbsPrimitive of type <code>BasicOntology.FLOAT</code> * containing a given <code>double</code> value. */ public static AbsPrimitive wrap(double value) { AbsPrimitive ret = new AbsPrimitive(BasicOntology.FLOAT, new Double(value)); return ret; } //#MIDP_EXCLUDE_END /** * Create an AbsPrimitive of type <code>BasicOntology.DATE</code> * containing a given <code>Date</code> value. */ public static AbsPrimitive wrap(Date value) { AbsPrimitive ret = null; if (value != null) { ret = new AbsPrimitive(BasicOntology.DATE, value); } return ret; } /** * Create an AbsPrimitive of type <code>BasicOntology.BYTE_SEQUENCE</code> * containing a given <code>byte[]</code> value. */ public static AbsPrimitive wrap(byte[] value) { AbsPrimitive ret = null; if (value != null) { ret = new AbsPrimitive(BasicOntology.BYTE_SEQUENCE, value); } return ret; } /** * Set the value of this AbsPrimitive to the given String. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.STRING</code> */ public void set(String value) { if (!getTypeName().equals(BasicOntology.STRING)) throw new IllegalArgumentException("Wrong type"); this.value = value; } /** * Set the value of this AbsPrimitive to the given boolean value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.BOOLEAN</code> */ public void set(boolean value) { if (!getTypeName().equals(BasicOntology.BOOLEAN)) throw new IllegalArgumentException("Wrong type"); this.value = new Boolean(value); } /** * Set the value of this AbsPrimitive to the given int value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.INTEGER</code> */ public void set(int value) { if (!getTypeName().equals(BasicOntology.INTEGER)) throw new IllegalArgumentException("Wrong type"); this.value = new Integer(value); } /** * Set the value of this AbsPrimitive to the given long value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.INTEGER</code> */ public void set(long value) { if (!getTypeName().equals(BasicOntology.INTEGER)) throw new IllegalArgumentException("Wrong type"); this.value = new Long(value); } //#MIDP_EXCLUDE_BEGIN /** * Set the value of this AbsPrimitive to the given float value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.FLOAT</code> */ public void set(float value) { if (!getTypeName().equals(BasicOntology.FLOAT)) throw new IllegalArgumentException("Wrong type"); this.value = new Float(value); } /** * Set the value of this AbsPrimitive to the given double value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.FLOAT</code> */ public void set(double value) { if (!getTypeName().equals(BasicOntology.FLOAT)) throw new IllegalArgumentException("Wrong type"); this.value = new Double(value); } //#MIDP_EXCLUDE_END /** * Set the value of this AbsPrimitive to the given Date value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.DATE</code> */ public void set(Date value) { if (!getTypeName().equals(BasicOntology.DATE)) throw new IllegalArgumentException("Wrong type"); this.value = value; } /** * Set the value of this AbsPrimitive to the given byte[] value. * @param value The new value * @throws IllegalArgumentException If the type of this AbsPrimitive * is not <code>BasicOntology.BYTE_SEQUENCE</code> */ public void set(byte[] value) { if (!getTypeName().equals(BasicOntology.BYTE_SEQUENCE)) throw new IllegalArgumentException("Wrong type"); this.value = value; } /** * @return the value of this AbsPrimitive as a String. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.STRING</code> */ public String getString() { return (String) value; } /** * @return the value of this AbsPrimitive as a boolean. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.BOOLEAN</code> */ public boolean getBoolean() { return ((Boolean) value).booleanValue(); } /** * @return the value of this AbsPrimitive as an int. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.INTEGER</code> */ public int getInteger() { try { return ((Integer) value).intValue(); } catch (ClassCastException cce) { // Try as a Long return (int) ((Long) value).longValue(); } } /** * @return the value of this AbsPrimitive as a long. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.INTEGER</code> */ public long getLong() { try { return ((Long) value).longValue(); } catch (ClassCastException cce) { // Try as an Integer return (long) ((Integer) value).intValue(); } } //#MIDP_EXCLUDE_BEGIN /** * @return the value of this AbsPrimitive as a float. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.FLOAT</code> */ public float getFloat() { try { return ((Float) value).floatValue(); } catch (ClassCastException cce) { // Try as a Double return (float) ((Double) value).doubleValue(); } } /** * @return the value of this AbsPrimitive as a double. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.FLOAT</code> */ public double getDouble() { try { return ((Double) value).doubleValue(); } catch (ClassCastException cce) { // Try as a Float return (double) ((Float) value).floatValue(); } } //#MIDP_EXCLUDE_END /** * @return the value of this AbsPrimitive as a Date. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.DATE</code> */ public Date getDate() { return (Date) value; } /** * @return the value of this AbsPrimitive as a byte[]. * @throws ClassCastException If the type of this AbsPrimitive * is not <code>BasicOntology.BYTE_SEQUENCE</code> */ public byte[] getByteSequence() { return (byte[]) value; } /** * @return the value of this AbsPrimitive as an Object. * If the type of this AbsPrimitive is <code>BasicOntology.BOOLEAN * BasicOntology.INTEGER or BasicOntology.FLOAT</code> a * <code>Boolean, Integer or Float</code> object is returned. */ public Object getObject() { return value; } /** * @return The name of the type of the object held by this * abstract descriptor. * @see AbsObject#getTypeName() */ public String getTypeName() { return typeName; } /** Makes no sense in the case of an AbsPrimitive that has no attribute --> Just return null */ public AbsObject getAbsObject(String name) { return null; } /** Makes no sense in the case of an AbsPrimitive that has no attribute --> Just return null */ public String[] getNames() { return null; } /** * Tests if this AbsPrimitive is grounded. It always returns true */ public boolean isGrounded() { return true; } /** Makes no sense in the case of an AbsPrimitive that has no attribute --> Just return 0 */ public int getCount() { return 0; } public String toString() { return value.toString(); } public boolean equals(Object obj) { if (obj instanceof AbsPrimitive) return getObject().equals(((AbsPrimitive) obj).getObject()); else return false; } public int hashCode() { return getObject().hashCode(); } public int getAbsType() { return ABS_PRIMITIVE; } }