m-chrzan.xyz
aboutsummaryrefslogtreecommitdiff
path: root/src/pl/edu/mimuw
diff options
context:
space:
mode:
Diffstat (limited to 'src/pl/edu/mimuw')
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/Attribute.java138
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/AttributesMap.java492
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/IncompatibleTypesException.java90
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/PathName.java286
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/Type.java100
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/TypeCollection.java154
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java152
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/UnsupportedConversionException.java66
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/UnsupportedValueOperationException.java66
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/Value.java416
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueBoolean.java118
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueContact.java122
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueDouble.java154
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueDuration.java280
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueInt.java196
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueList.java454
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueNull.java238
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueSet.java370
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueSimple.java110
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueString.java168
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ValueTime.java158
-rw-r--r--src/pl/edu/mimuw/cloudatlas/model/ZMI.java256
22 files changed, 2292 insertions, 2292 deletions
diff --git a/src/pl/edu/mimuw/cloudatlas/model/Attribute.java b/src/pl/edu/mimuw/cloudatlas/model/Attribute.java
index 6e91672..46ffab3 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/Attribute.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/Attribute.java
@@ -33,74 +33,74 @@ package pl.edu.mimuw.cloudatlas.model;
* This class is immutable.
*/
public class Attribute {
- private final String name;
-
- /**
- * Creates a new <code>Attribute</code> object with the specified <code>name</code>.
- *
- * @param name the name of the attribute
- * @throws IllegalArgumentException if the <code>name</code> does not meet the rules
- */
- public Attribute(String name) {
- if(!name.matches("^&?[a-zA-Z]{1}[a-zA-z0-9_]*$"))
- throw new IllegalArgumentException("Invalid name: may contain only letters, digits, underscores, "
- + "must start with a letter and may optionally have an ampersand at the beginning.");
- this.name = name;
- }
-
- /**
- * Indicates whether an <code>attribute</code> represents a query. This is true if and only if the attribute's name starts with an ampersand.
- *
- * @param attribute the attribute to check
- * @return whether the <code>attribute</code> represents a query
- */
- public static boolean isQuery(Attribute attribute) {
- return attribute.getName().startsWith("&");
- }
-
- /**
- * Gets the name of this attribute.
- *
- * @return string representing name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns a hash code value for this attribute. For proper behavior when using <code>Attribute</code> objects in
- * <code>HashMap</code>, <code>HashSet</code> etc. this is the hash code of a string representing the attribute's name.
- *
- * @return hash code for this attribute
- */
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- /**
- * Indicates whether another object is equal to this attribute.
- *
- * @param object the object to check
- * @return true if and only if the <code>object</code> is an instance of <code>Attribute</code> class and has
+ private final String name;
+
+ /**
+ * Creates a new <code>Attribute</code> object with the specified <code>name</code>.
+ *
+ * @param name the name of the attribute
+ * @throws IllegalArgumentException if the <code>name</code> does not meet the rules
+ */
+ public Attribute(String name) {
+ if(!name.matches("^&?[a-zA-Z]{1}[a-zA-z0-9_]*$"))
+ throw new IllegalArgumentException("Invalid name: may contain only letters, digits, underscores, "
+ + "must start with a letter and may optionally have an ampersand at the beginning.");
+ this.name = name;
+ }
+
+ /**
+ * Indicates whether an <code>attribute</code> represents a query. This is true if and only if the attribute's name starts with an ampersand.
+ *
+ * @param attribute the attribute to check
+ * @return whether the <code>attribute</code> represents a query
+ */
+ public static boolean isQuery(Attribute attribute) {
+ return attribute.getName().startsWith("&");
+ }
+
+ /**
+ * Gets the name of this attribute.
+ *
+ * @return string representing name
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Returns a hash code value for this attribute. For proper behavior when using <code>Attribute</code> objects in
+ * <code>HashMap</code>, <code>HashSet</code> etc. this is the hash code of a string representing the attribute's name.
+ *
+ * @return hash code for this attribute
+ */
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ /**
+ * Indicates whether another object is equal to this attribute.
+ *
+ * @param object the object to check
+ * @return true if and only if the <code>object</code> is an instance of <code>Attribute</code> class and has
* an identical name
- */
- @Override
- public boolean equals(Object object) {
- if(object == null)
- return false;
- if(getClass() != object.getClass())
- return false;
- return name.equals(((Attribute)object).name);
- }
-
- /**
- * Returns a textual representation of this attribute.
- *
- * @return the name of this attribute
- */
- @Override
- public String toString() {
- return name;
- }
+ */
+ @Override
+ public boolean equals(Object object) {
+ if(object == null)
+ return false;
+ if(getClass() != object.getClass())
+ return false;
+ return name.equals(((Attribute)object).name);
+ }
+
+ /**
+ * Returns a textual representation of this attribute.
+ *
+ * @return the name of this attribute
+ */
+ @Override
+ public String toString() {
+ return name;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/AttributesMap.java b/src/pl/edu/mimuw/cloudatlas/model/AttributesMap.java
index 86f8969..da13819 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/AttributesMap.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/AttributesMap.java
@@ -33,250 +33,250 @@ import java.util.Map.Entry;
* Represents a map from <code>Attribute</code> to <code>Value</code>. It cannot contain duplicate keys.
*/
public class AttributesMap implements Iterable<Entry<Attribute, Value>>, Cloneable {
- private Map<Attribute, Value> map = new HashMap<Attribute, Value>();
-
- private void checkNulls(Attribute attribute, Value value) {
- if(attribute == null)
- throw new NullPointerException("The attribute cannot be null.");
- if(value == null)
- throw new NullPointerException(
- "The value cannot be null. You may want create a Value object that contains null.");
- }
-
- /**
- * Adds to this map a new <code>attribute</code> mapping to the specified <code>value</code>. The
- * <code>attribute</code> cannot already exist in the map. To overwrite an existing attribute, use method
- * {@link #addOrChange(Attribute, Value)} instead.
- *
- * @param attribute the attribute to add
- * @param value the value for the <code>attribute</code>
- * @throws IllegalArgumentException if the <code>attribute</code> already exists in this map
- * @throws NullPointerException if either the <code>attribute</code> or the <code>value</code> is <code>null</code>;
- * for null value, create a <code>Value</code> object containing <code>null</code>
- * @see #addOrChange(Attribute, Value)
- * @see #add(String, Value)
- * @see #add(Entry)
- * @see #add(AttributesMap)
- */
- public void add(Attribute attribute, Value value) {
- if(getOrNull(attribute) != null)
- throw new IllegalArgumentException("Attribute \"" + attribute.getName()
- + "\" already exists. Use method addOrChange(Attribute, Value) instead.");
- checkNulls(attribute, value);
- map.put(attribute, value);
- }
-
- /**
- * Adds a new attribute mapping to the specified <code>value</code>. Convenient version of
- * {@link #add(Attribute, Value)}.
- *
- * @param name the attribute name
- * @param value the attribute value
- * @see #add(Attribute, Value)
- * @see #addOrChange(String, Value)
- */
- public void add(String name, Value value) {
- add(new Attribute(name), value);
- }
-
- /**
- * Adds a new mapping to this map. Convenient version of {@link #add(Attribute, Value)}.
- *
- * @param entry a pair containing both an attribute and a value
- * @see #add(Attribute, Value)
- * @see #addOrChange(Entry)
- */
- public void add(Entry<Attribute, Value> entry) {
- add(entry.getKey(), entry.getValue());
- }
-
- /**
- * Adds all entries from another map to this map. This method uses {@link #add(Attribute, Value)}, so it throws an
- * exception when trying to overwrite an existing attribute.
- *
- * @param attributes the map to add
- * @see #add(Attribute, Value)
- * @see #addOrChange(AttributesMap)
- */
- public void add(AttributesMap attributes) {
- for(Entry<Attribute, Value> entry : attributes.map.entrySet())
- add(entry);
- }
-
- /**
- * Adds to this map a new <code>attribute</code> mapping to the specified <code>value</code>. Unlike
- * {@link #add(Attribute, Value)}, this method overwrites an existing attribute with the same name.
- *
- * @param attribute the attribute to add or overwrite
- * @param value the value for the <code>attribute</code>
- * @throws NullPointerException if either the <code>attribute</code> or the <code>value</code> is <code>null</code>;
- * for null value create a <code>Value</code> object containing <code>null</code>
- * @see #add(Attribute, Value)
- * @see #addOrChange(String, Value)
- * @see #addOrChange(Entry)
- * @see #addOrChange(AttributesMap)
- */
- public void addOrChange(Attribute attribute, Value value) {
- map.put(attribute, value);
- checkNulls(attribute, value);
- }
-
- /**
- * Adds a new attribute< mapping to the specified <code>value</code> or overwrites an existing one. Convenient
- * version of {@link #addOrChange(Attribute, Value)}.
- *
- * @param name the attribute name
- * @param value the attribute value
- * @see #addOrChange(Attribute, Value)
- * @see #add(String, Value)
- */
- public void addOrChange(String name, Value value) {
- addOrChange(new Attribute(name), value);
- }
-
- /**
- * Adds a new mapping to this map or overwrites an existing one with the same attribute name. Convenient version of
- * {@link #addOrChange(Attribute, Value)}.
- *
- * @param entry a pair containing both an attribute and a value
- * @see #addOrChange(Attribute, Value)
- * @see #add(Entry)
- */
- public void addOrChange(Entry<Attribute, Value> entry) {
- addOrChange(entry.getKey(), entry.getValue());
- }
-
- /**
- * Adds all entries from another map to this map. If any attribute with the same name exists in this map, it will be
- * overwritten.
- *
- * @param attributes the map to add
- * @see #addOrChange(Attribute, Value)
- * @see #add(AttributesMap)
- */
- public void addOrChange(AttributesMap attributes) {
- for(Entry<Attribute, Value> entry : attributes.map.entrySet())
- addOrChange(entry);
- }
-
- private void checkAttribute(Attribute attribute) {
- if(attribute == null)
- throw new NullPointerException("The attribute cannot be null.");
- }
-
- /**
- * Gets the value mapped to the specified <code>attribute</code>. If such mapping does not exist, this method throws
- * an exception. If this is not an expected behavior, use method {@link #getOrNull(Attribute)} instead.
- *
- * @param attribute the attribute to obtain
- * @return the value mapped to the <code>attribute</code>
- * @throws IllegalArgumentException if no value is mapped to the <code>attribute</code>
- * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
- * @see #getOrNull(Attribute)
- * @see #get(String)
- */
- public Value get(Attribute attribute) {
- Value value = getOrNull(attribute);
- if(value == null)
- throw new IllegalArgumentException("Attribute " + attribute.getName()
- + " does not exist. Use method getOrNull(Attribute) instead.");
- return value;
- }
-
- /**
- * Gets the value mapped to the specified attribute. Convenient version of {@link #get(Attribute)}.
- *
- * @param name name of the attribute
- * @return the value mapped to the specified attribute
- * @see #get(Attribute)
- * @see #getOrNull(String)
- */
- public Value get(String name) {
- return get(new Attribute(name));
- }
-
- /**
- * Gets the value mapped to the specified <code>attribute</code>. Unlike {@link #get(Attribute)}, this method
- * returns <code>null</code> if the requested mapping does not exist.
- *
- * @param attribute the attribute to obtain
- * @return the value mapped to the <code>attribute</code> or <code>null</code> if it does not exist
- * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
- * @see #get(Attribute)
- * @see #getOrNull(String)
- */
- public Value getOrNull(Attribute attribute) {
- checkAttribute(attribute);
- return map.get(attribute);
- }
-
- /**
- * Gets the value mapped to the specified attribute. Convenient version of {@link #getOrNull(Attribute)}.
- *
- * @param name name of the attribute
- * @return the value mapped to specified attribute or <code>null</code> if it does not exist
- * @see #getOrNull(Attribute)
- * @see #getOr(String)
- */
- public Value getOrNull(String name) {
- return getOrNull(new Attribute(name));
- }
-
- /**
- * Removes the specified <code>attribute</code> and its value from this map. If the <code>attribute</code> does not
- * exist, this method performs nothing.
- *
- * @param attribute the attribute to remove
- * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
- * @see #remove(String)
- */
- public void remove(Attribute attribute) {
- checkAttribute(attribute);
- map.remove(attribute);
- }
-
- /**
- * Removes the specified attribute and its value from this map. Convenient version of {@link #remove(Attribute)}.
- *
- * @param name the name of the attribute to remove
- * @see #remove(Attribute)
- */
- public void remove(String name) {
- map.remove(new Attribute(name));
- }
-
- /**
- * Returns an iterator over all entries stored in this map.
- *
- * @return an iterator for this map
- * @see java.util.Iterator
- * @see java.lang.Iterable
- */
- @Override
- public Iterator<Entry<Attribute, Value>> iterator() {
- return map.entrySet().iterator();
- }
-
- /**
- * Creates a copy of this map. Since <code>Value</code> and <code>Attribute</code> are immutable classes, this
- * method does not clone them.
- *
- * @return a copy of this map containing identical entries
- */
- @Override
- public AttributesMap clone() {
- AttributesMap result = new AttributesMap();
- result.add(this);
- return result;
- }
-
- /**
- * Returns a string representation of this map listing all key-value pairs stored in it.
- *
- * @return a string representation of this object
- */
- @Override
- public String toString() {
- return map.toString();
- }
+ private Map<Attribute, Value> map = new HashMap<Attribute, Value>();
+
+ private void checkNulls(Attribute attribute, Value value) {
+ if(attribute == null)
+ throw new NullPointerException("The attribute cannot be null.");
+ if(value == null)
+ throw new NullPointerException(
+ "The value cannot be null. You may want create a Value object that contains null.");
+ }
+
+ /**
+ * Adds to this map a new <code>attribute</code> mapping to the specified <code>value</code>. The
+ * <code>attribute</code> cannot already exist in the map. To overwrite an existing attribute, use method
+ * {@link #addOrChange(Attribute, Value)} instead.
+ *
+ * @param attribute the attribute to add
+ * @param value the value for the <code>attribute</code>
+ * @throws IllegalArgumentException if the <code>attribute</code> already exists in this map
+ * @throws NullPointerException if either the <code>attribute</code> or the <code>value</code> is <code>null</code>;
+ * for null value, create a <code>Value</code> object containing <code>null</code>
+ * @see #addOrChange(Attribute, Value)
+ * @see #add(String, Value)
+ * @see #add(Entry)
+ * @see #add(AttributesMap)
+ */
+ public void add(Attribute attribute, Value value) {
+ if(getOrNull(attribute) != null)
+ throw new IllegalArgumentException("Attribute \"" + attribute.getName()
+ + "\" already exists. Use method addOrChange(Attribute, Value) instead.");
+ checkNulls(attribute, value);
+ map.put(attribute, value);
+ }
+
+ /**
+ * Adds a new attribute mapping to the specified <code>value</code>. Convenient version of
+ * {@link #add(Attribute, Value)}.
+ *
+ * @param name the attribute name
+ * @param value the attribute value
+ * @see #add(Attribute, Value)
+ * @see #addOrChange(String, Value)
+ */
+ public void add(String name, Value value) {
+ add(new Attribute(name), value);
+ }
+
+ /**
+ * Adds a new mapping to this map. Convenient version of {@link #add(Attribute, Value)}.
+ *
+ * @param entry a pair containing both an attribute and a value
+ * @see #add(Attribute, Value)
+ * @see #addOrChange(Entry)
+ */
+ public void add(Entry<Attribute, Value> entry) {
+ add(entry.getKey(), entry.getValue());
+ }
+
+ /**
+ * Adds all entries from another map to this map. This method uses {@link #add(Attribute, Value)}, so it throws an
+ * exception when trying to overwrite an existing attribute.
+ *
+ * @param attributes the map to add
+ * @see #add(Attribute, Value)
+ * @see #addOrChange(AttributesMap)
+ */
+ public void add(AttributesMap attributes) {
+ for(Entry<Attribute, Value> entry : attributes.map.entrySet())
+ add(entry);
+ }
+
+ /**
+ * Adds to this map a new <code>attribute</code> mapping to the specified <code>value</code>. Unlike
+ * {@link #add(Attribute, Value)}, this method overwrites an existing attribute with the same name.
+ *
+ * @param attribute the attribute to add or overwrite
+ * @param value the value for the <code>attribute</code>
+ * @throws NullPointerException if either the <code>attribute</code> or the <code>value</code> is <code>null</code>;
+ * for null value create a <code>Value</code> object containing <code>null</code>
+ * @see #add(Attribute, Value)
+ * @see #addOrChange(String, Value)
+ * @see #addOrChange(Entry)
+ * @see #addOrChange(AttributesMap)
+ */
+ public void addOrChange(Attribute attribute, Value value) {
+ map.put(attribute, value);
+ checkNulls(attribute, value);
+ }
+
+ /**
+ * Adds a new attribute< mapping to the specified <code>value</code> or overwrites an existing one. Convenient
+ * version of {@link #addOrChange(Attribute, Value)}.
+ *
+ * @param name the attribute name
+ * @param value the attribute value
+ * @see #addOrChange(Attribute, Value)
+ * @see #add(String, Value)
+ */
+ public void addOrChange(String name, Value value) {
+ addOrChange(new Attribute(name), value);
+ }
+
+ /**
+ * Adds a new mapping to this map or overwrites an existing one with the same attribute name. Convenient version of
+ * {@link #addOrChange(Attribute, Value)}.
+ *
+ * @param entry a pair containing both an attribute and a value
+ * @see #addOrChange(Attribute, Value)
+ * @see #add(Entry)
+ */
+ public void addOrChange(Entry<Attribute, Value> entry) {
+ addOrChange(entry.getKey(), entry.getValue());
+ }
+
+ /**
+ * Adds all entries from another map to this map. If any attribute with the same name exists in this map, it will be
+ * overwritten.
+ *
+ * @param attributes the map to add
+ * @see #addOrChange(Attribute, Value)
+ * @see #add(AttributesMap)
+ */
+ public void addOrChange(AttributesMap attributes) {
+ for(Entry<Attribute, Value> entry : attributes.map.entrySet())
+ addOrChange(entry);
+ }
+
+ private void checkAttribute(Attribute attribute) {
+ if(attribute == null)
+ throw new NullPointerException("The attribute cannot be null.");
+ }
+
+ /**
+ * Gets the value mapped to the specified <code>attribute</code>. If such mapping does not exist, this method throws
+ * an exception. If this is not an expected behavior, use method {@link #getOrNull(Attribute)} instead.
+ *
+ * @param attribute the attribute to obtain
+ * @return the value mapped to the <code>attribute</code>
+ * @throws IllegalArgumentException if no value is mapped to the <code>attribute</code>
+ * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
+ * @see #getOrNull(Attribute)
+ * @see #get(String)
+ */
+ public Value get(Attribute attribute) {
+ Value value = getOrNull(attribute);
+ if(value == null)
+ throw new IllegalArgumentException("Attribute " + attribute.getName()
+ + " does not exist. Use method getOrNull(Attribute) instead.");
+ return value;
+ }
+
+ /**
+ * Gets the value mapped to the specified attribute. Convenient version of {@link #get(Attribute)}.
+ *
+ * @param name name of the attribute
+ * @return the value mapped to the specified attribute
+ * @see #get(Attribute)
+ * @see #getOrNull(String)
+ */
+ public Value get(String name) {
+ return get(new Attribute(name));
+ }
+
+ /**
+ * Gets the value mapped to the specified <code>attribute</code>. Unlike {@link #get(Attribute)}, this method
+ * returns <code>null</code> if the requested mapping does not exist.
+ *
+ * @param attribute the attribute to obtain
+ * @return the value mapped to the <code>attribute</code> or <code>null</code> if it does not exist
+ * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
+ * @see #get(Attribute)
+ * @see #getOrNull(String)
+ */
+ public Value getOrNull(Attribute attribute) {
+ checkAttribute(attribute);
+ return map.get(attribute);
+ }
+
+ /**
+ * Gets the value mapped to the specified attribute. Convenient version of {@link #getOrNull(Attribute)}.
+ *
+ * @param name name of the attribute
+ * @return the value mapped to specified attribute or <code>null</code> if it does not exist
+ * @see #getOrNull(Attribute)
+ * @see #getOr(String)
+ */
+ public Value getOrNull(String name) {
+ return getOrNull(new Attribute(name));
+ }
+
+ /**
+ * Removes the specified <code>attribute</code> and its value from this map. If the <code>attribute</code> does not
+ * exist, this method performs nothing.
+ *
+ * @param attribute the attribute to remove
+ * @throws NullPointerException if the <code>attribute</code> is <code>null</code>
+ * @see #remove(String)
+ */
+ public void remove(Attribute attribute) {
+ checkAttribute(attribute);
+ map.remove(attribute);
+ }
+
+ /**
+ * Removes the specified attribute and its value from this map. Convenient version of {@link #remove(Attribute)}.
+ *
+ * @param name the name of the attribute to remove
+ * @see #remove(Attribute)
+ */
+ public void remove(String name) {
+ map.remove(new Attribute(name));
+ }
+
+ /**
+ * Returns an iterator over all entries stored in this map.
+ *
+ * @return an iterator for this map
+ * @see java.util.Iterator
+ * @see java.lang.Iterable
+ */
+ @Override
+ public Iterator<Entry<Attribute, Value>> iterator() {
+ return map.entrySet().iterator();
+ }
+
+ /**
+ * Creates a copy of this map. Since <code>Value</code> and <code>Attribute</code> are immutable classes, this
+ * method does not clone them.
+ *
+ * @return a copy of this map containing identical entries
+ */
+ @Override
+ public AttributesMap clone() {
+ AttributesMap result = new AttributesMap();
+ result.add(this);
+ return result;
+ }
+
+ /**
+ * Returns a string representation of this map listing all key-value pairs stored in it.
+ *
+ * @return a string representation of this object
+ */
+ @Override
+ public String toString() {
+ return map.toString();
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/IncompatibleTypesException.java b/src/pl/edu/mimuw/cloudatlas/model/IncompatibleTypesException.java
index e8a962d..c872e98 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/IncompatibleTypesException.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/IncompatibleTypesException.java
@@ -28,54 +28,54 @@ import pl.edu.mimuw.cloudatlas.model.Value.Operation;
/**
* An exception thrown when an unsupported binary operation on values is requested.
- *
+ *
* @see UnsupportedValueOperationException
* @see UnsupportedConversionException
*/
@SuppressWarnings("serial")
public class IncompatibleTypesException extends UnsupportedOperationException {
- private final Type left;
- private final Type right;
- private final Operation operation;
-
- /**
- * Creates a new object representing this exception.
- *
- * @param left type of a left operand
- * @param right type of a right operand
- * @param operation an operation that caused this exception
- */
- protected IncompatibleTypesException(Type left, Type right, Operation operation) {
- super("Incompatible types: " + left + " and " + right + " in operation " + operation + ".");
- this.left = left;
- this.right = right;
- this.operation = operation;
- }
-
- /**
- * Gets a type of a left operand in an operation that caused this exception.
- *
- * @return the type of the left operand
- */
- public Type getLeft() {
- return left;
- }
-
- /**
- * Gets a type of a right operand in an operation that caused this exception.
- *
- * @return the type of the right operand
- */
- public Type getRight() {
- return right;
- }
-
- /**
- * Gets an object representing an operation that caused this exception.
- *
- * @return an operation that caused this exception
- */
- public Operation getOperation() {
- return operation;
- }
+ private final Type left;
+ private final Type right;
+ private final Operation operation;
+
+ /**
+ * Creates a new object representing this exception.
+ *
+ * @param left type of a left operand
+ * @param right type of a right operand
+ * @param operation an operation that caused this exception
+ */
+ protected IncompatibleTypesException(Type left, Type right, Operation operation) {
+ super("Incompatible types: " + left + " and " + right + " in operation " + operation + ".");
+ this.left = left;
+ this.right = right;
+ this.operation = operation;
+ }
+
+ /**
+ * Gets a type of a left operand in an operation that caused this exception.
+ *
+ * @return the type of the left operand
+ */
+ public Type getLeft() {
+ return left;
+ }
+
+ /**
+ * Gets a type of a right operand in an operation that caused this exception.
+ *
+ * @return the type of the right operand
+ */
+ public Type getRight() {
+ return right;
+ }
+
+ /**
+ * Gets an object representing an operation that caused this exception.
+ *
+ * @return an operation that caused this exception
+ */
+ public Operation getOperation() {
+ return operation;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/PathName.java b/src/pl/edu/mimuw/cloudatlas/model/PathName.java
index c5ef4e8..ba1a931 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/PathName.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/PathName.java
@@ -34,147 +34,147 @@ import java.util.List;
* Represent a fully qualified name of a zone, also known as a global name or a path name. This class is immutable.
*/
public class PathName {
- /**
- * The object representing a name of the root zone (/).
- */
- public static final PathName ROOT = new PathName("/");
-
- private final List<String> components;
- private final String name;
-
- /**
- * Creates a <code>PathName</code> object representing the specified path. For the root zone, there are three
- * accepted forms: <code>null</code> reference, empty string or slash. Any other zone is represented by a string
- * starting with slash and containing names of zones at each level of hierarchy, separated by slashes. Zone name
- * must contain only letters and digits.
- *
- * @param name path name of a zone, for instance: <code>/warsaw/uw/violet07</code>
- * @throws IllegalArgumentException if the <code>name</code> is incorrect
- */
- public PathName(String name) {
- // we accept null and "/" as names of a root zone, however, we convert all of them to ""
- name = name == null || name.equals("/")? "" : name.trim();
- if(!name.matches("(/\\w+)*"))
- throw new IllegalArgumentException("Incorrect fully qualified name: " + name + ".");
- this.name = name;
- components = name.equals("")? new ArrayList<String>() : Arrays.asList(name.substring(1).split("/"));
- }
-
- /**
- * Creates a <code>PathName</code> object from a collection of zones names. Every zone name must contain only
- * letters and digits.
- *
- * @param components a collection of zones names at subsequent levels of hierarchy (starting from root); empty
- * collection represents the root zone
- * @throws IllegalArgumentException if any zone name is incorrect
- */
- public PathName(Collection<String> components) {
- this.components = new ArrayList<String>(components);
- if(components.isEmpty())
- this.name = "";
- else {
- String currentName = "";
- for(String c : components) {
- currentName += "/" + c;
- if(!c.matches("\\w+"))
- throw new IllegalArgumentException("Incorrect component " + c + ".");
- }
- this.name = currentName;
- }
- }
-
- /**
- * Gets zones names at subsequent levels of hierarchy, starting from root. For the root zone, this method returns an
- * empty collection. Modifying returned list will throw an exception.
- *
- * @return a collection of zones names
- */
- public List<String> getComponents() {
- return Collections.unmodifiableList(components);
- }
-
- /**
- * Gets a full path name. For the root zone, this method returns an empty string.
- *
- * @return a path name represented by this object
- * @see #toString()
- */
- public String getName() {
- return name;
- }
-
- /**
- * Gets a name one level up in a hierarchy. For the root zone, this method returns a new instance of the same zone.
- *
- * @return a new <code>PathName</code> object representing a zone one level up in the hierarchy
- */
- public PathName levelUp() {
- List<String> componentsUp = new ArrayList<String>(components);
- if(!componentsUp.isEmpty())
- componentsUp.remove(componentsUp.size() - 1);
- return new PathName(componentsUp);
- }
-
- /**
- * Gets a name one level down in a hierarchy.
- *
- * @param son zone name at a lower level
- * @return a new <code>PathName</code> object representing a zone one level down in the hierarchy
- */
- public PathName levelDown(String son) {
- return new PathName(name + "/" + son);
- }
-
- /**
- * Gets a zone name at the lowest level (highest number) in a hierarchy.
- *
- * @return a leaf zone
- * @throws UnsupportedOperationException if this object represents the root zone
- */
- public String getSingletonName() {
- try {
- return components.get(components.size() - 1);
- } catch(IndexOutOfBoundsException exception) {
- throw new UnsupportedOperationException("getSingletonName() is not supported for the root zone.");
- }
- }
-
- /**
- * Returns a hash code value for this object. This method returns a hash code of a string representing full path
- * name.
- *
- * @return a hash code for this object
- */
- @Override
- public int hashCode() {
- return name.hashCode();
- }
-
- /**
- * Indicates whether this object is equal to another. A <code>PathName</code> object is equal to other objects of
- * the same class representing identical path name.
- *
- * @object the object to check
- * @return whether the <code>object</code> is equal to this name
- */
- @Override
- public boolean equals(Object object) {
- if(object == null)
- return false;
- if(getClass() != object.getClass())
- return false;
- return name.equals(((PathName)object).name);
- }
-
- /**
- * Returns a textual representation for this <code>PathName</code>. For the root zone, unlike {@link #getName()},
- * this method returns slash.
- *
- * @return a path name for this object
- * @see #getName()
- */
- @Override
- public String toString() {
- return name.equals("")? "/" : getName();
- }
+ /**
+ * The object representing a name of the root zone (/).
+ */
+ public static final PathName ROOT = new PathName("/");
+
+ private final List<String> components;
+ private final String name;
+
+ /**
+ * Creates a <code>PathName</code> object representing the specified path. For the root zone, there are three
+ * accepted forms: <code>null</code> reference, empty string or slash. Any other zone is represented by a string
+ * starting with slash and containing names of zones at each level of hierarchy, separated by slashes. Zone name
+ * must contain only letters and digits.
+ *
+ * @param name path name of a zone, for instance: <code>/warsaw/uw/violet07</code>
+ * @throws IllegalArgumentException if the <code>name</code> is incorrect
+ */
+ public PathName(String name) {
+ // we accept null and "/" as names of a root zone, however, we convert all of them to ""
+ name = name == null || name.equals("/")? "" : name.trim();
+ if(!name.matches("(/\\w+)*"))
+ throw new IllegalArgumentException("Incorrect fully qualified name: " + name + ".");
+ this.name = name;
+ components = name.equals("")? new ArrayList<String>() : Arrays.asList(name.substring(1).split("/"));
+ }
+
+ /**
+ * Creates a <code>PathName</code> object from a collection of zones names. Every zone name must contain only
+ * letters and digits.
+ *
+ * @param components a collection of zones names at subsequent levels of hierarchy (starting from root); empty
+ * collection represents the root zone
+ * @throws IllegalArgumentException if any zone name is incorrect
+ */
+ public PathName(Collection<String> components) {
+ this.components = new ArrayList<String>(components);
+ if(components.isEmpty())
+ this.name = "";
+ else {
+ String currentName = "";
+ for(String c : components) {
+ currentName += "/" + c;
+ if(!c.matches("\\w+"))
+ throw new IllegalArgumentException("Incorrect component " + c + ".");
+ }
+ this.name = currentName;
+ }
+ }
+
+ /**
+ * Gets zones names at subsequent levels of hierarchy, starting from root. For the root zone, this method returns an
+ * empty collection. Modifying returned list will throw an exception.
+ *
+ * @return a collection of zones names
+ */
+ public List<String> getComponents() {
+ return Collections.unmodifiableList(components);
+ }
+
+ /**
+ * Gets a full path name. For the root zone, this method returns an empty string.
+ *
+ * @return a path name represented by this object
+ * @see #toString()
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Gets a name one level up in a hierarchy. For the root zone, this method returns a new instance of the same zone.
+ *
+ * @return a new <code>PathName</code> object representing a zone one level up in the hierarchy
+ */
+ public PathName levelUp() {
+ List<String> componentsUp = new ArrayList<String>(components);
+ if(!componentsUp.isEmpty())
+ componentsUp.remove(componentsUp.size() - 1);
+ return new PathName(componentsUp);
+ }
+
+ /**
+ * Gets a name one level down in a hierarchy.
+ *
+ * @param son zone name at a lower level
+ * @return a new <code>PathName</code> object representing a zone one level down in the hierarchy
+ */
+ public PathName levelDown(String son) {
+ return new PathName(name + "/" + son);
+ }
+
+ /**
+ * Gets a zone name at the lowest level (highest number) in a hierarchy.
+ *
+ * @return a leaf zone
+ * @throws UnsupportedOperationException if this object represents the root zone
+ */
+ public String getSingletonName() {
+ try {
+ return components.get(components.size() - 1);
+ } catch(IndexOutOfBoundsException exception) {
+ throw new UnsupportedOperationException("getSingletonName() is not supported for the root zone.");
+ }
+ }
+
+ /**
+ * Returns a hash code value for this object. This method returns a hash code of a string representing full path
+ * name.
+ *
+ * @return a hash code for this object
+ */
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ /**
+ * Indicates whether this object is equal to another. A <code>PathName</code> object is equal to other objects of
+ * the same class representing identical path name.
+ *
+ * @object the object to check
+ * @return whether the <code>object</code> is equal to this name
+ */
+ @Override
+ public boolean equals(Object object) {
+ if(object == null)
+ return false;
+ if(getClass() != object.getClass())
+ return false;
+ return name.equals(((PathName)object).name);
+ }
+
+ /**
+ * Returns a textual representation for this <code>PathName</code>. For the root zone, unlike {@link #getName()},
+ * this method returns slash.
+ *
+ * @return a path name for this object
+ * @see #getName()
+ */
+ @Override
+ public String toString() {
+ return name.equals("")? "/" : getName();
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/Type.java b/src/pl/edu/mimuw/cloudatlas/model/Type.java
index ba6cf62..eb1fb7b 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/Type.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/Type.java
@@ -28,54 +28,54 @@ package pl.edu.mimuw.cloudatlas.model;
* A type of a value that may be stored as an attribute.
*/
public abstract class Type {
- /**
- * A primary type. This is a characteristic that every type has. It can be extended: for instance a collection may
- * be parameterized with a type of stored values.
- */
- public static enum PrimaryType {
- BOOLEAN, CONTACT, DOUBLE, DURATION, INT, LIST, NULL, SET, STRING, TIME,
- }
-
- private final PrimaryType primaryType;
-
- /**
- * Creates a <code>Type</code> object with a given primary type.
- *
- * @param primaryType a primary type for this type
- */
- public Type(PrimaryType primaryType) {
- this.primaryType = primaryType;
- }
-
- /**
- * Returns a primary type of this type.
- *
- * @return a primary type
- */
- public PrimaryType getPrimaryType() {
- return primaryType;
- }
-
- /**
- * Indicates whether this type can be implicitly "cast" to given one and vice verse. This is introduced to deal with
- * null values. In practice, two types are compatible either if they are the same or if one them is a special
- * "null type".
- *
- * @param type a type to check
- * @return whether two types are compatible with each other
- * @see TypePrimitive#NULL
- * @see ValueNull
- */
- public boolean isCompatible(Type type) {
- return getPrimaryType() == PrimaryType.NULL || type.getPrimaryType() == PrimaryType.NULL;
- }
-
- /**
- * Indicates whether this type represents a collection.
- *
- * @return true for collections, false otherwise
- */
- public boolean isCollection() {
- return false;
- }
+ /**
+ * A primary type. This is a characteristic that every type has. It can be extended: for instance a collection may
+ * be parameterized with a type of stored values.
+ */
+ public static enum PrimaryType {
+ BOOLEAN, CONTACT, DOUBLE, DURATION, INT, LIST, NULL, SET, STRING, TIME,
+ }
+
+ private final PrimaryType primaryType;
+
+ /**
+ * Creates a <code>Type</code> object with a given primary type.
+ *
+ * @param primaryType a primary type for this type
+ */
+ public Type(PrimaryType primaryType) {
+ this.primaryType = primaryType;
+ }
+
+ /**
+ * Returns a primary type of this type.
+ *
+ * @return a primary type
+ */
+ public PrimaryType getPrimaryType() {
+ return primaryType;
+ }
+
+ /**
+ * Indicates whether this type can be implicitly "cast" to given one and vice verse. This is introduced to deal with
+ * null values. In practice, two types are compatible either if they are the same or if one them is a special
+ * "null type".
+ *
+ * @param type a type to check
+ * @return whether two types are compatible with each other
+ * @see TypePrimitive#NULL
+ * @see ValueNull
+ */
+ public boolean isCompatible(Type type) {
+ return getPrimaryType() == PrimaryType.NULL || type.getPrimaryType() == PrimaryType.NULL;
+ }
+
+ /**
+ * Indicates whether this type represents a collection.
+ *
+ * @return true for collections, false otherwise
+ */
+ public boolean isCollection() {
+ return false;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/TypeCollection.java b/src/pl/edu/mimuw/cloudatlas/model/TypeCollection.java
index 9ace5c5..6e08e42 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/TypeCollection.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/TypeCollection.java
@@ -33,84 +33,84 @@ import pl.edu.mimuw.cloudatlas.model.ValueNull;
/**
* Represents a collection type with specified element type.
- *
+ *
* @see TypePrimitve
*/
public class TypeCollection extends Type {
- private final Type elementType;
-
- /**
- * Creates a new collection type.
- *
- * @param primaryType a type of this collection (set, list etc.)
- * @param elementType a type of an element of this collection; may be a complex type (for instance
- * <code>TypeCollection</code>)
- */
- public TypeCollection(PrimaryType primaryType, Type elementType) {
- super(primaryType);
- switch(primaryType) {
- case LIST:
- case SET:
- break;
- default:
- throw new IllegalArgumentException("This class can represent a collection only (list, set etc.).");
- }
- this.elementType = elementType;
- }
-
- /**
- * Gets a type of elements stored in this collection.
- *
- * @return type of element in this collection
- */
- public Type getElementType() {
- return elementType;
- }
-
- /**
- * Returns a friendly textual representation of this collection, for instance: "SET of (STRING)".
- *
- * @return a textual representation of this type
- */
- @Override
- public String toString() {
- return getPrimaryType().toString() + " of (" + elementType.toString() + ")";
- }
-
- @Override
- public boolean isCompatible(Type type) {
- return super.isCompatible(type)
- || (getPrimaryType() == type.getPrimaryType() && elementType
- .isCompatible(((TypeCollection)type).elementType));
- }
-
- @Override
- public boolean isCollection() {
- return true;
- }
-
- /**
- * Returns a type of all elements in the specified collection. If the collection is empty, this method returns
- * {@link TypePrimitive#NULL}. If the collection contains at least two elements of distinct types that are not nulls,
- * an exception is thrown.
- *
- * @param collection a collection of values to check
- * @return type of elements in this collection
- * @throws IllegalArgumentException if the collection contains non-null elements of different types
- */
- public static Type computeElementType(Collection<Value> collection) {
- Type mainType = null;
-
- for(Value v : collection) {
- if(v.isNull())
- v = ValueNull.getInstance();
- if(mainType == null) {
- if(v.getType().getPrimaryType() != Type.PrimaryType.NULL)
- mainType = v.getType();
- } else if(!mainType.isCompatible(v.getType()))
- throw new IllegalArgumentException("Collection has non-null elements of different types.");
- }
-
- return mainType == null? TypePrimitive.NULL : mainType;
- }
+ private final Type elementType;
+
+ /**
+ * Creates a new collection type.
+ *
+ * @param primaryType a type of this collection (set, list etc.)
+ * @param elementType a type of an element of this collection; may be a complex type (for instance
+ * <code>TypeCollection</code>)
+ */
+ public TypeCollection(PrimaryType primaryType, Type elementType) {
+ super(primaryType);
+ switch(primaryType) {
+ case LIST:
+ case SET:
+ break;
+ default:
+ throw new IllegalArgumentException("This class can represent a collection only (list, set etc.).");
+ }
+ this.elementType = elementType;
+ }
+
+ /**
+ * Gets a type of elements stored in this collection.
+ *
+ * @return type of element in this collection
+ */
+ public Type getElementType() {
+ return elementType;
+ }
+
+ /**
+ * Returns a friendly textual representation of this collection, for instance: "SET of (STRING)".
+ *
+ * @return a textual representation of this type
+ */
+ @Override
+ public String toString() {
+ return getPrimaryType().toString() + " of (" + elementType.toString() + ")";
+ }
+
+ @Override
+ public boolean isCompatible(Type type) {
+ return super.isCompatible(type)
+ || (getPrimaryType() == type.getPrimaryType() && elementType
+ .isCompatible(((TypeCollection)type).elementType));
+ }
+
+ @Override
+ public boolean isCollection() {
+ return true;
+ }
+
+ /**
+ * Returns a type of all elements in the specified collection. If the collection is empty, this method returns
+ * {@link TypePrimitive#NULL}. If the collection contains at least two elements of distinct types that are not nulls,
+ * an exception is thrown.
+ *
+ * @param collection a collection of values to check
+ * @return type of elements in this collection
+ * @throws IllegalArgumentException if the collection contains non-null elements of different types
+ */
+ public static Type computeElementType(Collection<Value> collection) {
+ Type mainType = null;
+
+ for(Value v : collection) {
+ if(v.isNull())
+ v = ValueNull.getInstance();
+ if(mainType == null) {
+ if(v.getType().getPrimaryType() != Type.PrimaryType.NULL)
+ mainType = v.getType();
+ } else if(!mainType.isCompatible(v.getType()))
+ throw new IllegalArgumentException("Collection has non-null elements of different types.");
+ }
+
+ return mainType == null? TypePrimitive.NULL : mainType;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java b/src/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java
index 4940a16..6e2c79e 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/TypePrimitive.java
@@ -26,83 +26,83 @@ package pl.edu.mimuw.cloudatlas.model;
/**
* Convenient class for types that just wrap ordinary Java types.
- *
+ *
* @see TypeCollection
*/
public class TypePrimitive extends Type {
- /**
- * Boolean type.
- */
- public static final TypePrimitive BOOLEAN = new TypePrimitive(PrimaryType.BOOLEAN);
-
- /**
- * Contact type.
- */
- public static final TypePrimitive CONTACT = new TypePrimitive(PrimaryType.CONTACT);
-
- /**
- * Double type.
- */
- public static final TypePrimitive DOUBLE = new TypePrimitive(PrimaryType.DOUBLE);
-
- /**
- * Duration type.
- */
- public static final TypePrimitive DURATION = new TypePrimitive(PrimaryType.DURATION);
-
- /**
- * Integer type.
- */
- public static final TypePrimitive INTEGER = new TypePrimitive(PrimaryType.INT);
-
- /**
- * A special "null type" that represents null value of an unknown type. It can be converted to any other type.
- *
- * @see Type#isCompatible(Type)
- * @see ValueNull
- */
- public static final TypePrimitive NULL = new TypePrimitive(PrimaryType.NULL);
-
- /**
- * String type.
- */
- public static final TypePrimitive STRING = new TypePrimitive(PrimaryType.STRING);
-
- /**
- * Time type.
- */
- public static final TypePrimitive TIME = new TypePrimitive(PrimaryType.TIME);
-
- private TypePrimitive(PrimaryType primaryType) {
- super(primaryType);
- switch(primaryType) {
- case BOOLEAN:
- case CONTACT:
- case DOUBLE:
- case DURATION:
- case INT:
- case NULL:
- case STRING:
- case TIME:
- break;
- default:
- throw new IllegalArgumentException(
- "This class can represent a primitive type only (boolean, int etc.).");
- }
- }
-
- /**
- * Gets a textual representation of this type.
- *
- * @return a string representing this type
- */
- @Override
- public String toString() {
- return getPrimaryType().toString();
- }
-
- @Override
- public boolean isCompatible(Type type) {
- return super.isCompatible(type) || getPrimaryType() == type.getPrimaryType();
- }
+ /**
+ * Boolean type.
+ */
+ public static final TypePrimitive BOOLEAN = new TypePrimitive(PrimaryType.BOOLEAN);
+
+ /**
+ * Contact type.
+ */
+ public static final TypePrimitive CONTACT = new TypePrimitive(PrimaryType.CONTACT);
+
+ /**
+ * Double type.
+ */
+ public static final TypePrimitive DOUBLE = new TypePrimitive(PrimaryType.DOUBLE);
+
+ /**
+ * Duration type.
+ */
+ public static final TypePrimitive DURATION = new TypePrimitive(PrimaryType.DURATION);
+
+ /**
+ * Integer type.
+ */
+ public static final TypePrimitive INTEGER = new TypePrimitive(PrimaryType.INT);
+
+ /**
+ * A special "null type" that represents null value of an unknown type. It can be converted to any other type.
+ *
+ * @see Type#isCompatible(Type)
+ * @see ValueNull
+ */
+ public static final TypePrimitive NULL = new TypePrimitive(PrimaryType.NULL);
+
+ /**
+ * String type.
+ */
+ public static final TypePrimitive STRING = new TypePrimitive(PrimaryType.STRING);
+
+ /**
+ * Time type.
+ */
+ public static final TypePrimitive TIME = new TypePrimitive(PrimaryType.TIME);
+
+ private TypePrimitive(PrimaryType primaryType) {
+ super(primaryType);
+ switch(primaryType) {
+ case BOOLEAN:
+ case CONTACT:
+ case DOUBLE:
+ case DURATION:
+ case INT:
+ case NULL:
+ case STRING:
+ case TIME:
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "This class can represent a primitive type only (boolean, int etc.).");
+ }
+ }
+
+ /**
+ * Gets a textual representation of this type.
+ *
+ * @return a string representing this type
+ */
+ @Override
+ public String toString() {
+ return getPrimaryType().toString();
+ }
+
+ @Override
+ public boolean isCompatible(Type type) {
+ return super.isCompatible(type) || getPrimaryType() == type.getPrimaryType();
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/UnsupportedConversionException.java b/src/pl/edu/mimuw/cloudatlas/model/UnsupportedConversionException.java
index 024c89f..98cbd3a 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/UnsupportedConversionException.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/UnsupportedConversionException.java
@@ -26,42 +26,42 @@ package pl.edu.mimuw.cloudatlas.model;
/**
* An exception describing unsupported conversion of a value to another type.
- *
+ *
* @see IncompatibleTypesException
* @see UnsupportedValueOperationException
*/
@SuppressWarnings("serial")
public class UnsupportedConversionException extends UnsupportedOperationException {
- private final Type from;
- private final Type to;
-
- /**
- * Creates a new instance of this this exception.
- *
- * @param from source type of an unsupported conversion
- * @param to destination type of an unsupported conversion
- */
- protected UnsupportedConversionException(Type from, Type to) {
- super("Type " + from + " cannot be converted to " + to + ".");
- this.from = from;
- this.to = to;
- }
-
- /**
- * Gets a source type of an unsupported conversion that caused this exception.
- *
- * @return source type
- */
- public Type getFrom() {
- return from;
- }
-
- /**
- * Gets a destination type of an unsupported conversion that caused this exception.
- *
- * @return destination type
- */
- public Type getTo() {
- return to;
- }
+ private final Type from;
+ private final Type to;
+
+ /**
+ * Creates a new instance of this this exception.
+ *
+ * @param from source type of an unsupported conversion
+ * @param to destination type of an unsupported conversion
+ */
+ protected UnsupportedConversionException(Type from, Type to) {
+ super("Type " + from + " cannot be converted to " + to + ".");
+ this.from = from;
+ this.to = to;
+ }
+
+ /**
+ * Gets a source type of an unsupported conversion that caused this exception.
+ *
+ * @return source type
+ */
+ public Type getFrom() {
+ return from;
+ }
+
+ /**
+ * Gets a destination type of an unsupported conversion that caused this exception.
+ *
+ * @return destination type
+ */
+ public Type getTo() {
+ return to;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/UnsupportedValueOperationException.java b/src/pl/edu/mimuw/cloudatlas/model/UnsupportedValueOperationException.java
index e292265..0cab2fb 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/UnsupportedValueOperationException.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/UnsupportedValueOperationException.java
@@ -28,42 +28,42 @@ import pl.edu.mimuw.cloudatlas.model.Value.Operation;
/**
* An exception caused by calling an unsupported unary operation on value.
- *
+ *
* @see IncompatibleTypesException
* @see UnsupportedConversionException
*/
@SuppressWarnings("serial")
public class UnsupportedValueOperationException extends UnsupportedOperationException {
- private final Type left;
- private final Operation operation;
-
- /**
- * Creates a new object representing this exception.
- *
- * @param left type of a value that was an argument of an operation that caused this exception
- * @param operation the operation that caused this exception
- */
- protected UnsupportedValueOperationException(Type left, Operation operation) {
- super("Type: " + left + " does not provide operation " + operation + ".");
- this.left = left;
- this.operation = operation;
- }
-
- /**
- * Gets a type of value that was an argument to an operation that caused this exception.
- *
- * @return first argument of the operation
- */
- public Type getLeft() {
- return left;
- }
-
- /**
- * Gets an operation that caused this exception.
- *
- * @return the operation
- */
- public Operation getOperation() {
- return operation;
- }
+ private final Type left;
+ private final Operation operation;
+
+ /**
+ * Creates a new object representing this exception.
+ *
+ * @param left type of a value that was an argument of an operation that caused this exception
+ * @param operation the operation that caused this exception
+ */
+ protected UnsupportedValueOperationException(Type left, Operation operation) {
+ super("Type: " + left + " does not provide operation " + operation + ".");
+ this.left = left;
+ this.operation = operation;
+ }
+
+ /**
+ * Gets a type of value that was an argument to an operation that caused this exception.
+ *
+ * @return first argument of the operation
+ */
+ public Type getLeft() {
+ return left;
+ }
+
+ /**
+ * Gets an operation that caused this exception.
+ *
+ * @return the operation
+ */
+ public Operation getOperation() {
+ return operation;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/Value.java b/src/pl/edu/mimuw/cloudatlas/model/Value.java
index 236f307..02b4bd4 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/Value.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/Value.java
@@ -30,212 +30,212 @@ import pl.edu.mimuw.cloudatlas.model.Value;
* A single value stored as an attribute.
*/
public abstract class Value {
- /**
- * An operation that may be performed on values.
- */
- public enum Operation {
- EQUAL, COMPARE, ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULO, AND, OR, REG_EXPR, NEGATE, VALUE_SIZE,
- }
-
- /**
- * Gets the type of this value.
- *
- * @return type of this value
- */
- public abstract Type getType();
-
- /**
- * Indicates whether this value is null. Distinct from a <code>Value</code> reference that is <code>null</code>
- * itself.
- *
- * @return true if and only if this value is null
- */
- public abstract boolean isNull();
-
- protected final void sameTypesOrThrow(Value value, Operation operation) {
- if(!getType().isCompatible(value.getType()))
- throw new IncompatibleTypesException(getType(), value.getType(), operation);
- }
-
- /**
- * Checks whether this value is equal to the specified one (operator ==).
- *
- * @param value the right side of the operator
- * @return a <code>ValueBoolean</code> representing true if and only if both values are equal
- * @throws UnsupportedValueOperationException if this operation is unsupported for these values
- */
- public Value isEqual(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.EQUAL);
- }
-
- /**
- * Indicates whether this object is equal to another one.
- *
- * @param object the object to check
- * @return whether two objects are equal
- */
- @Override
- public boolean equals(Object object) {
- if(!(object instanceof Value))
- return false;
- return ((ValueBoolean)isEqual((Value)object)).getValue();
- }
-
- /**
- * Checks whether this value is lower than the specified one (operator <=).
- *
- * @param value the right side of the operator
- * @return a <code>ValueBoolean</code> representing true if and only if this value is lower than the provided one
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value isLowerThan(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.COMPARE);
- }
-
- /**
- * Returns a new value created by adding argument to this value (operator +).
- *
- * @param value the right side of the operator
- * @return a sum of two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value addValue(Value value) {
- // name clash with add from List interface
- throw new UnsupportedValueOperationException(getType(), Operation.ADD);
- }
-
- /**
- * Returns a new value created by subtracting argument from this value (operator -).
- *
- * @param value the right side of the operator
- * @return a difference of two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value subtract(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.SUBTRACT);
- }
-
- /**
- * Returns a new value created by multiplying this value by an argument (operator *).
- *
- * @param value the right side of the operator
- * @return a product of two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value multiply(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.MULTIPLY);
- }
-
- /**
- * Returns a new value created by dividing this value by an argument (operator /).
- *
- * @param value the right side of the operator
- * @return a quotient of two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value divide(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.DIVIDE);
- }
-
- /**
- * Returns the remainder of division of this value by an argument (operator %).
- *
- * @param value the right side of the operator
- * @return a remainder
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * incompatible or non-numeric types)
- */
- public Value modulo(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.MODULO);
- }
-
- /**
- * Returns the result of a logical AND (operator &&).
- *
- * @param value the right side of the operator
- * @return a conjunction of the two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * non-boolean types)
- */
- public Value and(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.AND);
- }
-
- /**
- * Returns the result of a logical OR (operator ||).
- *
- * @param value the right side of the operator
- * @return an alternative of two values
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
- * non-boolean types)
- */
- public Value or(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.OR);
- }
-
- /**
- * Returns a result of trying to match to this value with a regular expression specified as an argument.
- *
- * @param value the regular expression to match against
- * @return a <code>ValueBoolean</code> representing true if and only if this value matches provided regular
- * expression
- * @throws UnsupportedValueOperationException if this operator is unsupported for these values
- */
- public Value regExpr(Value value) {
- throw new UnsupportedValueOperationException(getType(), Operation.REG_EXPR);
- }
-
- /**
- * Returns the negation (numeric or logical) of this value. This may refer to operator - or !, depending on type.
- *
- * @return a value that is the negation of this value
- * @throws UnsupportedValueOperationException if this operator is unsupported for this value
- */
- public Value negate() { // !, -
- throw new UnsupportedValueOperationException(getType(), Operation.NEGATE);
- }
-
- /**
- * Returns the size of this value. Semantics depend on type.
- *
- * @return a size of this value
- * @throws UnsupportedValueOperationException if this operation is unsupported for this value
- */
- public Value valueSize() {
- // name clash with size from List interface
- throw new UnsupportedValueOperationException(getType(), Operation.VALUE_SIZE);
- }
-
- /**
- * Returns this value converted to another type.
- *
- * @param to a desired type
- * @return this value converted to the <code>type</code>
- * @throws UnsupportedConversionException if a requested conversion is unsupported
- */
- public abstract Value convertTo(Type to);
-
- /**
- * Returns a textual representation of this value. This method uses conversion to <code>ValueString</code>.
- *
- * @return a textual representation of this value
- * @see #convertTo(Type)
- */
- @Override
- public String toString() {
- return ((ValueString)convertTo(TypePrimitive.STRING)).getValue();
- }
-
- /**
- * Returns a default value (such as uninitialized variable). This may be <code>0</code> for integer types,
- * <code>false</code> for boolean, <code>null</code> for complex types etc.
- *
- * @return a default value of this type
- */
- public abstract Value getDefaultValue();
+ /**
+ * An operation that may be performed on values.
+ */
+ public enum Operation {
+ EQUAL, COMPARE, ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULO, AND, OR, REG_EXPR, NEGATE, VALUE_SIZE,
+ }
+
+ /**
+ * Gets the type of this value.
+ *
+ * @return type of this value
+ */
+ public abstract Type getType();
+
+ /**
+ * Indicates whether this value is null. Distinct from a <code>Value</code> reference that is <code>null</code>
+ * itself.
+ *
+ * @return true if and only if this value is null
+ */
+ public abstract boolean isNull();
+
+ protected final void sameTypesOrThrow(Value value, Operation operation) {
+ if(!getType().isCompatible(value.getType()))
+ throw new IncompatibleTypesException(getType(), value.getType(), operation);
+ }
+
+ /**
+ * Checks whether this value is equal to the specified one (operator ==).
+ *
+ * @param value the right side of the operator
+ * @return a <code>ValueBoolean</code> representing true if and only if both values are equal
+ * @throws UnsupportedValueOperationException if this operation is unsupported for these values
+ */
+ public Value isEqual(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.EQUAL);
+ }
+
+ /**
+ * Indicates whether this object is equal to another one.
+ *
+ * @param object the object to check
+ * @return whether two objects are equal
+ */
+ @Override
+ public boolean equals(Object object) {
+ if(!(object instanceof Value))
+ return false;
+ return ((ValueBoolean)isEqual((Value)object)).getValue();
+ }
+
+ /**
+ * Checks whether this value is lower than the specified one (operator <=).
+ *
+ * @param value the right side of the operator
+ * @return a <code>ValueBoolean</code> representing true if and only if this value is lower than the provided one
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value isLowerThan(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.COMPARE);
+ }
+
+ /**
+ * Returns a new value created by adding argument to this value (operator +).
+ *
+ * @param value the right side of the operator
+ * @return a sum of two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value addValue(Value value) {
+ // name clash with add from List interface
+ throw new UnsupportedValueOperationException(getType(), Operation.ADD);
+ }
+
+ /**
+ * Returns a new value created by subtracting argument from this value (operator -).
+ *
+ * @param value the right side of the operator
+ * @return a difference of two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value subtract(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.SUBTRACT);
+ }
+
+ /**
+ * Returns a new value created by multiplying this value by an argument (operator *).
+ *
+ * @param value the right side of the operator
+ * @return a product of two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value multiply(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.MULTIPLY);
+ }
+
+ /**
+ * Returns a new value created by dividing this value by an argument (operator /).
+ *
+ * @param value the right side of the operator
+ * @return a quotient of two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value divide(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.DIVIDE);
+ }
+
+ /**
+ * Returns the remainder of division of this value by an argument (operator %).
+ *
+ * @param value the right side of the operator
+ * @return a remainder
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * incompatible or non-numeric types)
+ */
+ public Value modulo(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.MODULO);
+ }
+
+ /**
+ * Returns the result of a logical AND (operator &&).
+ *
+ * @param value the right side of the operator
+ * @return a conjunction of the two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * non-boolean types)
+ */
+ public Value and(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.AND);
+ }
+
+ /**
+ * Returns the result of a logical OR (operator ||).
+ *
+ * @param value the right side of the operator
+ * @return an alternative of two values
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values (for example
+ * non-boolean types)
+ */
+ public Value or(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.OR);
+ }
+
+ /**
+ * Returns a result of trying to match to this value with a regular expression specified as an argument.
+ *
+ * @param value the regular expression to match against
+ * @return a <code>ValueBoolean</code> representing true if and only if this value matches provided regular
+ * expression
+ * @throws UnsupportedValueOperationException if this operator is unsupported for these values
+ */
+ public Value regExpr(Value value) {
+ throw new UnsupportedValueOperationException(getType(), Operation.REG_EXPR);
+ }
+
+ /**
+ * Returns the negation (numeric or logical) of this value. This may refer to operator - or !, depending on type.
+ *
+ * @return a value that is the negation of this value
+ * @throws UnsupportedValueOperationException if this operator is unsupported for this value
+ */
+ public Value negate() { // !, -
+ throw new UnsupportedValueOperationException(getType(), Operation.NEGATE);
+ }
+
+ /**
+ * Returns the size of this value. Semantics depend on type.
+ *
+ * @return a size of this value
+ * @throws UnsupportedValueOperationException if this operation is unsupported for this value
+ */
+ public Value valueSize() {
+ // name clash with size from List interface
+ throw new UnsupportedValueOperationException(getType(), Operation.VALUE_SIZE);
+ }
+
+ /**
+ * Returns this value converted to another type.
+ *
+ * @param to a desired type
+ * @return this value converted to the <code>type</code>
+ * @throws UnsupportedConversionException if a requested conversion is unsupported
+ */
+ public abstract Value convertTo(Type to);
+
+ /**
+ * Returns a textual representation of this value. This method uses conversion to <code>ValueString</code>.
+ *
+ * @return a textual representation of this value
+ * @see #convertTo(Type)
+ */
+ @Override
+ public String toString() {
+ return ((ValueString)convertTo(TypePrimitive.STRING)).getValue();
+ }
+
+ /**
+ * Returns a default value (such as uninitialized variable). This may be <code>0</code> for integer types,
+ * <code>false</code> for boolean, <code>null</code> for complex types etc.
+ *
+ * @return a default value of this type
+ */
+ public abstract Value getDefaultValue();
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueBoolean.java b/src/pl/edu/mimuw/cloudatlas/model/ValueBoolean.java
index 1ca20fc..ba2b4f6 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueBoolean.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueBoolean.java
@@ -31,63 +31,63 @@ import pl.edu.mimuw.cloudatlas.model.ValueBoolean;
* A class that wraps a Java <code>Boolean</code> object.
*/
public class ValueBoolean extends ValueSimple<Boolean> {
- /**
- * Constructs a new <code>ValueBoolean</code> object wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueBoolean(Boolean value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.BOOLEAN;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueBoolean(false);
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- sameTypesOrThrow(value, Operation.COMPARE);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(!getValue() && ((ValueBoolean)value).getValue());
- }
-
- @Override
- public ValueBoolean and(Value value) {
- sameTypesOrThrow(value, Operation.AND);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue() && ((ValueBoolean)value).getValue());
- }
-
- @Override
- public ValueBoolean or(Value value) { // -
- sameTypesOrThrow(value, Operation.OR);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue() || ((ValueBoolean)value).getValue());
- }
-
- @Override
- public ValueBoolean negate() { // !
- return new ValueBoolean(isNull()? null : !getValue());
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case BOOLEAN:
- return this;
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
+ /**
+ * Constructs a new <code>ValueBoolean</code> object wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueBoolean(Boolean value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.BOOLEAN;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueBoolean(false);
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ sameTypesOrThrow(value, Operation.COMPARE);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(!getValue() && ((ValueBoolean)value).getValue());
+ }
+
+ @Override
+ public ValueBoolean and(Value value) {
+ sameTypesOrThrow(value, Operation.AND);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue() && ((ValueBoolean)value).getValue());
+ }
+
+ @Override
+ public ValueBoolean or(Value value) { // -
+ sameTypesOrThrow(value, Operation.OR);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue() || ((ValueBoolean)value).getValue());
+ }
+
+ @Override
+ public ValueBoolean negate() { // !
+ return new ValueBoolean(isNull()? null : !getValue());
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case BOOLEAN:
+ return this;
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueContact.java b/src/pl/edu/mimuw/cloudatlas/model/ValueContact.java
index 5101d17..670a025 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueContact.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueContact.java
@@ -36,65 +36,65 @@ import pl.edu.mimuw.cloudatlas.model.ValueContact;
* This class is immutable.
*/
public class ValueContact extends Value {
- private final PathName name;
- private final InetAddress address;
-
- /**
- * Constructs a new <code>ValueContact</code> with the specified path name and IP address.
- *
- * @param name the full path name of a node
- * @param address the IP address of the node
- */
- public ValueContact(PathName name, InetAddress address) {
- this.name = name;
- this.address = address;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueContact(null, null);
- }
-
- /**
- * Returns a name stored in this object.
- *
- * @return the name of a node
- */
- public PathName getName() {
- return name;
- }
-
- /**
- * Returns an IP address stored in this object.
- *
- * @return the IP address of a node
- */
- public InetAddress getAddress() {
- return address;
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.CONTACT;
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case CONTACT:
- return this;
- case STRING:
- if(isNull())
- return ValueString.NULL_STRING;
- else
- return new ValueString("(" + name.toString() + ", " + address.toString() + ")");
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
-
- @Override
- public boolean isNull() {
- return name == null || address == null;
- }
+ private final PathName name;
+ private final InetAddress address;
+
+ /**
+ * Constructs a new <code>ValueContact</code> with the specified path name and IP address.
+ *
+ * @param name the full path name of a node
+ * @param address the IP address of the node
+ */
+ public ValueContact(PathName name, InetAddress address) {
+ this.name = name;
+ this.address = address;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueContact(null, null);
+ }
+
+ /**
+ * Returns a name stored in this object.
+ *
+ * @return the name of a node
+ */
+ public PathName getName() {
+ return name;
+ }
+
+ /**
+ * Returns an IP address stored in this object.
+ *
+ * @return the IP address of a node
+ */
+ public InetAddress getAddress() {
+ return address;
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.CONTACT;
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case CONTACT:
+ return this;
+ case STRING:
+ if(isNull())
+ return ValueString.NULL_STRING;
+ else
+ return new ValueString("(" + name.toString() + ", " + address.toString() + ")");
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
+
+ @Override
+ public boolean isNull() {
+ return name == null || address == null;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueDouble.java b/src/pl/edu/mimuw/cloudatlas/model/ValueDouble.java
index b979f5f..920a8ef 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueDouble.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueDouble.java
@@ -31,81 +31,81 @@ import pl.edu.mimuw.cloudatlas.model.ValueDouble;
* A class that wraps a Java <code>Double</code> object.
*/
public class ValueDouble extends ValueSimple<Double> {
- /**
- * Constructs a new <code>ValueDouble</code> object wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueDouble(Double value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.DOUBLE;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueDouble(0.0);
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- sameTypesOrThrow(value, Operation.COMPARE);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue() < ((ValueDouble)value).getValue());
- }
-
- @Override
- public ValueDouble addValue(Value value) {
- sameTypesOrThrow(value, Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueDouble(null);
- return new ValueDouble(getValue() + ((ValueDouble)value).getValue());
- }
-
- @Override
- public ValueDouble subtract(Value value) {
- sameTypesOrThrow(value, Operation.SUBTRACT);
- if(isNull() || value.isNull())
- return new ValueDouble(null);
- return new ValueDouble(getValue() - ((ValueDouble)value).getValue());
- }
-
- @Override
- public ValueDouble multiply(Value value) {
- sameTypesOrThrow(value, Operation.MULTIPLY);
- if(isNull() || value.isNull())
- return new ValueDouble(null);
- return new ValueDouble(getValue() * ((ValueDouble)value).getValue());
- }
-
- @Override
- public ValueDouble divide(Value value) {
- sameTypesOrThrow(value, Operation.DIVIDE);
- if(isNull() || value.isNull())
- return new ValueDouble(null);
- return new ValueDouble(getValue() / ((ValueDouble)value).getValue());
- }
-
- @Override
- public ValueDouble negate() {
- return new ValueDouble(isNull()? null : -getValue());
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case DOUBLE:
- return this;
- case INT:
- return new ValueInt(getValue() == null? null : getValue().longValue());
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
+ /**
+ * Constructs a new <code>ValueDouble</code> object wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueDouble(Double value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.DOUBLE;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueDouble(0.0);
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ sameTypesOrThrow(value, Operation.COMPARE);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue() < ((ValueDouble)value).getValue());
+ }
+
+ @Override
+ public ValueDouble addValue(Value value) {
+ sameTypesOrThrow(value, Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueDouble(null);
+ return new ValueDouble(getValue() + ((ValueDouble)value).getValue());
+ }
+
+ @Override
+ public ValueDouble subtract(Value value) {
+ sameTypesOrThrow(value, Operation.SUBTRACT);
+ if(isNull() || value.isNull())
+ return new ValueDouble(null);
+ return new ValueDouble(getValue() - ((ValueDouble)value).getValue());
+ }
+
+ @Override
+ public ValueDouble multiply(Value value) {
+ sameTypesOrThrow(value, Operation.MULTIPLY);
+ if(isNull() || value.isNull())
+ return new ValueDouble(null);
+ return new ValueDouble(getValue() * ((ValueDouble)value).getValue());
+ }
+
+ @Override
+ public ValueDouble divide(Value value) {
+ sameTypesOrThrow(value, Operation.DIVIDE);
+ if(isNull() || value.isNull())
+ return new ValueDouble(null);
+ return new ValueDouble(getValue() / ((ValueDouble)value).getValue());
+ }
+
+ @Override
+ public ValueDouble negate() {
+ return new ValueDouble(isNull()? null : -getValue());
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case DOUBLE:
+ return this;
+ case INT:
+ return new ValueInt(getValue() == null? null : getValue().longValue());
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueDuration.java b/src/pl/edu/mimuw/cloudatlas/model/ValueDuration.java
index 12c2c73..c111d09 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueDuration.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueDuration.java
@@ -30,144 +30,144 @@ package pl.edu.mimuw.cloudatlas.model;
* <code>Long</code> object.
*/
public class ValueDuration extends ValueSimple<Long> {
- /**
- * Constructs a new <code>ValueDuration</code> object wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueDuration(Long value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public Value getDefaultValue() {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- /**
- * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
- *
- * @param seconds a number of full seconds
- * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
- */
- public ValueDuration(long seconds, long milliseconds) {
- this(seconds * 1000l + milliseconds);
- }
-
- /**
- * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
- *
- * @param minutes a number of full minutes
- * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
- * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
- */
- public ValueDuration(long minutes, long seconds, long milliseconds) {
- this(minutes * 60l + seconds, milliseconds);
- }
-
- /**
- * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
- *
- * @param hours a number of full hours
- * @param minutes a number of full minutes (an absolute value does not have to be lower than 60)
- * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
- * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
- */
- public ValueDuration(long hours, long minutes, long seconds, long milliseconds) {
- this(hours * 60l + minutes, seconds, milliseconds);
- }
-
- /**
- * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
- *
- * @param days a number of full days
- * @param hours a number of full hours (an absolute value does not have to be lower than 24)
- * @param minutes a number of full minutes (an absolute value does not have to be lower than 60)
- * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
- * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
- */
- public ValueDuration(long days, long hours, long minutes, long seconds, long milliseconds) {
- this(days * 24l + hours, minutes, seconds, milliseconds);
- }
-
- /**
- * Constructs a new <code>ValueDuration</code> object from its textual representation. The representation has
- * format: <code>sd hh:mm:ss.lll</code> where:
- * <ul>
- * <li><code>s</code> is a sign (<code>+</code> or <code>-</code>),</li>
- * <li><code>d</code> is a number of days,</li>
- * <li><code>hh</code> is a number of hours (between <code>00</code> and <code>23</code>),</li>
- * <li><code>mm</code> is a number of minutes (between <code>00</code> and <code>59</code>),</li>
- * <li><code>ss</code> is a number of seconds (between <code>00</code> and <code>59</code>),</li>
- * <li><code>lll</code> is a number of milliseconds (between <code>000</code> and <code>999</code>).</li>
- * </ul>
- * <p>
- * All fields are obligatory.
- *
- * @param value a textual representation of a duration
- * @throws IllegalArgumentException if <code>value</code> does not meet described rules
- */
- public ValueDuration(String value) {
- this(parseDuration(value));
- }
-
- private static long parseDuration(String value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueDuration addValue(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueDuration subtract(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueDuration multiply(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public Value divide(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueDuration modulo(Value value) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public ValueDuration negate() {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
-
- @Override
- public Value convertTo(Type type) {
- // TODO
- throw new UnsupportedOperationException("Not yet implemented");
- }
+ /**
+ * Constructs a new <code>ValueDuration</code> object wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueDuration(Long value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ /**
+ * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
+ *
+ * @param seconds a number of full seconds
+ * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
+ */
+ public ValueDuration(long seconds, long milliseconds) {
+ this(seconds * 1000l + milliseconds);
+ }
+
+ /**
+ * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
+ *
+ * @param minutes a number of full minutes
+ * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
+ * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
+ */
+ public ValueDuration(long minutes, long seconds, long milliseconds) {
+ this(minutes * 60l + seconds, milliseconds);
+ }
+
+ /**
+ * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
+ *
+ * @param hours a number of full hours
+ * @param minutes a number of full minutes (an absolute value does not have to be lower than 60)
+ * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
+ * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
+ */
+ public ValueDuration(long hours, long minutes, long seconds, long milliseconds) {
+ this(hours * 60l + minutes, seconds, milliseconds);
+ }
+
+ /**
+ * Constructs a new <code>ValueDuration</code> object from the specified amounts of different time units.
+ *
+ * @param days a number of full days
+ * @param hours a number of full hours (an absolute value does not have to be lower than 24)
+ * @param minutes a number of full minutes (an absolute value does not have to be lower than 60)
+ * @param seconds a number of full seconds (an absolute value does not have to be lower than 60)
+ * @param milliseconds a number of milliseconds (an absolute value does not have to be lower than 1000)
+ */
+ public ValueDuration(long days, long hours, long minutes, long seconds, long milliseconds) {
+ this(days * 24l + hours, minutes, seconds, milliseconds);
+ }
+
+ /**
+ * Constructs a new <code>ValueDuration</code> object from its textual representation. The representation has
+ * format: <code>sd hh:mm:ss.lll</code> where:
+ * <ul>
+ * <li><code>s</code> is a sign (<code>+</code> or <code>-</code>),</li>
+ * <li><code>d</code> is a number of days,</li>
+ * <li><code>hh</code> is a number of hours (between <code>00</code> and <code>23</code>),</li>
+ * <li><code>mm</code> is a number of minutes (between <code>00</code> and <code>59</code>),</li>
+ * <li><code>ss</code> is a number of seconds (between <code>00</code> and <code>59</code>),</li>
+ * <li><code>lll</code> is a number of milliseconds (between <code>000</code> and <code>999</code>).</li>
+ * </ul>
+ * <p>
+ * All fields are obligatory.
+ *
+ * @param value a textual representation of a duration
+ * @throws IllegalArgumentException if <code>value</code> does not meet described rules
+ */
+ public ValueDuration(String value) {
+ this(parseDuration(value));
+ }
+
+ private static long parseDuration(String value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueDuration addValue(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueDuration subtract(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueDuration multiply(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public Value divide(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueDuration modulo(Value value) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public ValueDuration negate() {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ // TODO
+ throw new UnsupportedOperationException("Not yet implemented");
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueInt.java b/src/pl/edu/mimuw/cloudatlas/model/ValueInt.java
index d48532d..8811d57 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueInt.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueInt.java
@@ -32,102 +32,102 @@ import pl.edu.mimuw.cloudatlas.model.ValueInt;
* A class that wraps a Java <code>Long</code> object.
*/
public class ValueInt extends ValueSimple<Long> {
- /**
- * Constructs a new <code>ValueInt</code> object wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueInt(Long value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.INTEGER;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueInt(0l);
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- sameTypesOrThrow(value, Operation.COMPARE);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue() < ((ValueInt)value).getValue());
- }
-
- @Override
- public ValueInt addValue(Value value) {
- sameTypesOrThrow(value, Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueInt(null);
- return new ValueInt(getValue() + ((ValueInt)value).getValue());
- }
-
- @Override
- public ValueInt subtract(Value value) {
- sameTypesOrThrow(value, Operation.SUBTRACT);
- if(isNull() || value.isNull())
- return new ValueInt(null);
- return new ValueInt(getValue() - ((ValueInt)value).getValue());
- }
-
- @Override
- public Value multiply(Value value) {
- if(value.getType().getPrimaryType() == PrimaryType.DURATION)
- return value.multiply(this);
- sameTypesOrThrow(value, Operation.MULTIPLY);
- if(isNull() || value.isNull())
- return new ValueInt(null);
- return new ValueInt(getValue() * ((ValueInt)value).getValue());
- }
-
- @Override
- public ValueDouble divide(Value value) {
- sameTypesOrThrow(value, Operation.DIVIDE);
- if(value.isNull())
- return new ValueDouble(null);
- if(((ValueInt)value).getValue() == 0l)
- throw new ArithmeticException("Division by zero.");
- if(isNull())
- return new ValueDouble(null);
- return new ValueDouble((double)getValue() / ((ValueInt)value).getValue());
- }
-
- @Override
- public ValueInt modulo(Value value) {
- sameTypesOrThrow(value, Operation.MODULO);
- if(value.isNull())
- return new ValueInt(null);
- if(((ValueInt)value).getValue() == 0l)
- throw new ArithmeticException("Division by zero.");
- if(isNull())
- return new ValueInt(null);
- return new ValueInt(getValue() % ((ValueInt)value).getValue());
- }
-
- @Override
- public ValueInt negate() {
- return new ValueInt(isNull()? null : -getValue());
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case DOUBLE:
- return new ValueDouble(getValue() == null? null : getValue().doubleValue());
- case DURATION:
- return new ValueDuration(getValue());
- case INT:
- return this;
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : new ValueString(Long.toString(getValue()
- .longValue()));
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
+ /**
+ * Constructs a new <code>ValueInt</code> object wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueInt(Long value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.INTEGER;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueInt(0l);
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ sameTypesOrThrow(value, Operation.COMPARE);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue() < ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public ValueInt addValue(Value value) {
+ sameTypesOrThrow(value, Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueInt(null);
+ return new ValueInt(getValue() + ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public ValueInt subtract(Value value) {
+ sameTypesOrThrow(value, Operation.SUBTRACT);
+ if(isNull() || value.isNull())
+ return new ValueInt(null);
+ return new ValueInt(getValue() - ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public Value multiply(Value value) {
+ if(value.getType().getPrimaryType() == PrimaryType.DURATION)
+ return value.multiply(this);
+ sameTypesOrThrow(value, Operation.MULTIPLY);
+ if(isNull() || value.isNull())
+ return new ValueInt(null);
+ return new ValueInt(getValue() * ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public ValueDouble divide(Value value) {
+ sameTypesOrThrow(value, Operation.DIVIDE);
+ if(value.isNull())
+ return new ValueDouble(null);
+ if(((ValueInt)value).getValue() == 0l)
+ throw new ArithmeticException("Division by zero.");
+ if(isNull())
+ return new ValueDouble(null);
+ return new ValueDouble((double)getValue() / ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public ValueInt modulo(Value value) {
+ sameTypesOrThrow(value, Operation.MODULO);
+ if(value.isNull())
+ return new ValueInt(null);
+ if(((ValueInt)value).getValue() == 0l)
+ throw new ArithmeticException("Division by zero.");
+ if(isNull())
+ return new ValueInt(null);
+ return new ValueInt(getValue() % ((ValueInt)value).getValue());
+ }
+
+ @Override
+ public ValueInt negate() {
+ return new ValueInt(isNull()? null : -getValue());
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case DOUBLE:
+ return new ValueDouble(getValue() == null? null : getValue().doubleValue());
+ case DURATION:
+ return new ValueDuration(getValue());
+ case INT:
+ return this;
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : new ValueString(Long.toString(getValue()
+ .longValue()));
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueList.java b/src/pl/edu/mimuw/cloudatlas/model/ValueList.java
index d914736..d60e896 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueList.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueList.java
@@ -42,234 +42,234 @@ import pl.edu.mimuw.cloudatlas.model.ValueList;
* <p>
* All constructors expect type of elements stored in this list. This type is checked when adding elements to the list
* and an <code>IllegalArgumentException</code> is thrown in case of error.
- *
+ *
* @see java.util.List
*/
public class ValueList extends ValueSimple<List<Value>> implements List<Value> {
- private TypeCollection type;
-
- /**
- * Creates a new <code>ValueList</code> containing all the elements in the specified list.
- *
- * @param value a list which content will be copied to this value
- * @param elementType type of elements stored in this list
- */
- public ValueList(List<Value> value, Type elementType) {
- this(elementType);
- if(value != null)
- setValue(value);
- }
-
- /**
- * Creates an empty list.
- *
- * @param elementType type of elements stored in this list
- */
- public ValueList(Type elementType) {
- super(new ArrayList<Value>());
- type = new TypeCollection(Type.PrimaryType.LIST, elementType);
- }
-
- @Override
- public Type getType() {
- return type;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueList(((TypeCollection)this.getType()).getElementType());
- }
-
- /**
- * Gets a <code>List</code> containing all the objects stored in this value. Modifying a return value will cause an
- * exception.
- */
- @Override
- public List<Value> getValue() {
- return getList() == null? null : Collections.unmodifiableList(getList());
- }
-
- @Override
- public ValueList addValue(Value value) {
- sameTypesOrThrow(value, Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueList(null, ((TypeCollection)getType()).getElementType());
- List<Value> result = new ArrayList<Value>(getValue());
- result.addAll(((ValueList)value).getValue());
- return new ValueList(result, ((TypeCollection)getType()).getElementType());
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case LIST:
- if(getType().isCompatible(type))
- return this;
- throw new UnsupportedConversionException(getType(), type);
- case SET:
- if(this.type.getElementType().isCompatible(((TypeCollection)type).getElementType())) {
- if(this.isNull())
- return new ValueSet(null, this.type.getElementType());
- Set<Value> l = new HashSet<Value>();
- l.addAll(this);
- return new ValueSet(l, this.type.getElementType());
- }
- throw new UnsupportedConversionException(getType(), type);
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
-
- @Override
- public ValueInt valueSize() {
- return new ValueInt((getList() == null? null : (long)getList().size()));
- }
-
- @Override
- public void setValue(List<Value> list) {
- if(list == null)
- super.setValue(null);
- else {
- super.setValue(new ArrayList<Value>());
- for(Value e : list)
- add(e);
- }
- }
-
- private List<Value> getList() {
- return super.getValue();
- }
-
- private void checkElement(Value element) {
- if(element == null)
- throw new IllegalArgumentException("If you want to use null, create an object containing null instead.");
- if(!type.getElementType().isCompatible(element.getType()))
- throw new IllegalArgumentException("This list contains elements of type "
- + type.getElementType().toString() + " only. Not compatibile with elements of type: "
- + element.getType().toString());
- }
-
- @Override
- public boolean add(Value e) {
- checkElement(e);
- return getList().add(e);
- }
-
- @Override
- public void add(int index, Value element) {
- checkElement(element);
- getList().add(index, element);
- }
-
- @Override
- public boolean addAll(Collection<? extends Value> c) {
- for(Value e : c)
- checkElement(e);
- return getList().addAll(c);
- }
-
- @Override
- public boolean addAll(int index, Collection<? extends Value> c) {
- for(Value e : c)
- checkElement(e);
- return getList().addAll(index, c);
- }
-
- @Override
- public void clear() {
- getList().clear();
- }
-
- @Override
- public boolean contains(Object o) {
- return getList().contains(o);
- }
-
- @Override
- public boolean containsAll(Collection<?> c) {
- return getList().containsAll(c);
- }
-
- @Override
- public Value get(int index) {
- return getList().get(index);
- }
-
- @Override
- public int indexOf(Object o) {
- return getList().indexOf(o);
- }
-
- @Override
- public boolean isEmpty() {
- return getList().isEmpty();
- }
-
- @Override
- public Iterator<Value> iterator() {
- return getList().iterator();
- }
-
- @Override
- public int lastIndexOf(Object o) {
- return getList().lastIndexOf(o);
- }
-
- @Override
- public ListIterator<Value> listIterator() {
- return getList().listIterator();
- }
-
- @Override
- public ListIterator<Value> listIterator(int index) {
- return getList().listIterator(index);
- }
-
- @Override
- public boolean remove(Object o) {
- return getList().remove(o);
- }
-
- @Override
- public Value remove(int index) {
- return getList().remove(index);
- }
-
- @Override
- public boolean removeAll(Collection<?> c) {
- return getList().removeAll(c);
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
- return getList().retainAll(c);
- }
-
- @Override
- public Value set(int index, Value element) {
- checkElement(element);
- return getList().set(index, element);
- }
-
- @Override
- public int size() {
- return getList().size();
- }
-
- @Override
- public List<Value> subList(int fromIndex, int toIndex) {
- return new ValueList(getList().subList(fromIndex, toIndex), type.getElementType());
- }
-
- @Override
- public Object[] toArray() {
- return getList().toArray();
- }
-
- @Override
- public <Y> Y[] toArray(Y[] a) {
- return getList().toArray(a);
- }
+ private TypeCollection type;
+
+ /**
+ * Creates a new <code>ValueList</code> containing all the elements in the specified list.
+ *
+ * @param value a list which content will be copied to this value
+ * @param elementType type of elements stored in this list
+ */
+ public ValueList(List<Value> value, Type elementType) {
+ this(elementType);
+ if(value != null)
+ setValue(value);
+ }
+
+ /**
+ * Creates an empty list.
+ *
+ * @param elementType type of elements stored in this list
+ */
+ public ValueList(Type elementType) {
+ super(new ArrayList<Value>());
+ type = new TypeCollection(Type.PrimaryType.LIST, elementType);
+ }
+
+ @Override
+ public Type getType() {
+ return type;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueList(((TypeCollection)this.getType()).getElementType());
+ }
+
+ /**
+ * Gets a <code>List</code> containing all the objects stored in this value. Modifying a return value will cause an
+ * exception.
+ */
+ @Override
+ public List<Value> getValue() {
+ return getList() == null? null : Collections.unmodifiableList(getList());
+ }
+
+ @Override
+ public ValueList addValue(Value value) {
+ sameTypesOrThrow(value, Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueList(null, ((TypeCollection)getType()).getElementType());
+ List<Value> result = new ArrayList<Value>(getValue());
+ result.addAll(((ValueList)value).getValue());
+ return new ValueList(result, ((TypeCollection)getType()).getElementType());
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case LIST:
+ if(getType().isCompatible(type))
+ return this;
+ throw new UnsupportedConversionException(getType(), type);
+ case SET:
+ if(this.type.getElementType().isCompatible(((TypeCollection)type).getElementType())) {
+ if(this.isNull())
+ return new ValueSet(null, this.type.getElementType());
+ Set<Value> l = new HashSet<Value>();
+ l.addAll(this);
+ return new ValueSet(l, this.type.getElementType());
+ }
+ throw new UnsupportedConversionException(getType(), type);
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : new ValueString(getValue().toString());
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
+
+ @Override
+ public ValueInt valueSize() {
+ return new ValueInt((getList() == null? null : (long)getList().size()));
+ }
+
+ @Override
+ public void setValue(List<Value> list) {
+ if(list == null)
+ super.setValue(null);
+ else {
+ super.setValue(new ArrayList<Value>());
+ for(Value e : list)
+ add(e);
+ }
+ }
+
+ private List<Value> getList() {
+ return super.getValue();
+ }
+
+ private void checkElement(Value element) {
+ if(element == null)
+ throw new IllegalArgumentException("If you want to use null, create an object containing null instead.");
+ if(!type.getElementType().isCompatible(element.getType()))
+ throw new IllegalArgumentException("This list contains elements of type "
+ + type.getElementType().toString() + " only. Not compatibile with elements of type: "
+ + element.getType().toString());
+ }
+
+ @Override
+ public boolean add(Value e) {
+ checkElement(e);
+ return getList().add(e);
+ }
+
+ @Override
+ public void add(int index, Value element) {
+ checkElement(element);
+ getList().add(index, element);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends Value> c) {
+ for(Value e : c)
+ checkElement(e);
+ return getList().addAll(c);
+ }
+
+ @Override
+ public boolean addAll(int index, Collection<? extends Value> c) {
+ for(Value e : c)
+ checkElement(e);
+ return getList().addAll(index, c);
+ }
+
+ @Override
+ public void clear() {
+ getList().clear();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return getList().contains(o);
+ }
+
+ @Override
+ public boolean containsAll(Collection<?> c) {
+ return getList().containsAll(c);
+ }
+
+ @Override
+ public Value get(int index) {
+ return getList().get(index);
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return getList().indexOf(o);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return getList().isEmpty();
+ }
+
+ @Override
+ public Iterator<Value> iterator() {
+ return getList().iterator();
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return getList().lastIndexOf(o);
+ }
+
+ @Override
+ public ListIterator<Value> listIterator() {
+ return getList().listIterator();
+ }
+
+ @Override
+ public ListIterator<Value> listIterator(int index) {
+ return getList().listIterator(index);
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ return getList().remove(o);
+ }
+
+ @Override
+ public Value remove(int index) {
+ return getList().remove(index);
+ }
+
+ @Override
+ public boolean removeAll(Collection<?> c) {
+ return getList().removeAll(c);
+ }
+
+ @Override
+ public boolean retainAll(Collection<?> c) {
+ return getList().retainAll(c);
+ }
+
+ @Override
+ public Value set(int index, Value element) {
+ checkElement(element);
+ return getList().set(index, element);
+ }
+
+ @Override
+ public int size() {
+ return getList().size();
+ }
+
+ @Override
+ public List<Value> subList(int fromIndex, int toIndex) {
+ return new ValueList(getList().subList(fromIndex, toIndex), type.getElementType());
+ }
+
+ @Override
+ public Object[] toArray() {
+ return getList().toArray();
+ }
+
+ @Override
+ public <Y> Y[] toArray(Y[] a) {
+ return getList().toArray(a);
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueNull.java b/src/pl/edu/mimuw/cloudatlas/model/ValueNull.java
index e0c3f2a..60a53af 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueNull.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueNull.java
@@ -29,127 +29,127 @@ import pl.edu.mimuw.cloudatlas.model.ValueNull;
/**
* A special null value of an unknown type introduced to deal with nulls. This class is a singleton.
- *
+ *
* @see TypePrimitve#NULL
* @see Type#isCompatible(Value)
*/
public class ValueNull extends Value {
- private static ValueNull instance = null;
-
- private ValueNull() {}
-
- /**
- * Gets a singleton instance of a <code>ValueNull</code> class. Every call to this method returns the same
- * reference.
- *
- * @return an instance of <code>ValueNull</code>
- */
- public static ValueNull getInstance() {
- if(instance == null)
- instance = new ValueNull();
- return instance;
- }
-
- @Override
- public Value getDefaultValue() {
- return instance;
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case STRING:
- return ValueString.NULL_STRING;
- default:
- return this;
- }
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.NULL;
- }
-
- @Override
- public boolean isNull() {
- return true;
- }
-
- @Override
- public Value isEqual(Value value) {
- return new ValueBoolean(isNull() && value.isNull());
- }
-
- @Override
- public Value isLowerThan(Value value) {
- if(value == getInstance())
- return this;
- return value.isLowerThan(this);
- }
-
- @Override
- public Value addValue(Value value) {
- if(value == getInstance())
- return this;
- return value.addValue(this);
- }
-
- @Override
- public Value subtract(Value value) {
- if(value == getInstance())
- return this;
- return value.subtract(this);
- }
-
- @Override
- public Value multiply(Value value) {
- if(value == getInstance())
- return this;
- return value.multiply(this);
- }
-
- @Override
- public Value divide(Value value) {
- if(value == getInstance())
- return this;
- return value.divide(this);
- }
-
- @Override
- public Value modulo(Value value) {
- if(value == getInstance())
- return this;
- return value.modulo(this);
- }
-
- @Override
- public Value and(Value value) {
- if(value == getInstance())
- return this;
- return value.and(this);
- }
-
- @Override
- public Value or(Value value) {
- if(value == getInstance())
- return this;
- return value.or(this);
- }
-
- @Override
- public Value regExpr(Value value) {
- if(value == getInstance())
- return this;
- return value.regExpr(this);
- }
-
- @Override
- public Value negate() {
- return this;
- }
-
- @Override
- public Value valueSize() {
- return this;
- }
+ private static ValueNull instance = null;
+
+ private ValueNull() {}
+
+ /**
+ * Gets a singleton instance of a <code>ValueNull</code> class. Every call to this method returns the same
+ * reference.
+ *
+ * @return an instance of <code>ValueNull</code>
+ */
+ public static ValueNull getInstance() {
+ if(instance == null)
+ instance = new ValueNull();
+ return instance;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return instance;
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case STRING:
+ return ValueString.NULL_STRING;
+ default:
+ return this;
+ }
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.NULL;
+ }
+
+ @Override
+ public boolean isNull() {
+ return true;
+ }
+
+ @Override
+ public Value isEqual(Value value) {
+ return new ValueBoolean(isNull() && value.isNull());
+ }
+
+ @Override
+ public Value isLowerThan(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.isLowerThan(this);
+ }
+
+ @Override
+ public Value addValue(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.addValue(this);
+ }
+
+ @Override
+ public Value subtract(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.subtract(this);
+ }
+
+ @Override
+ public Value multiply(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.multiply(this);
+ }
+
+ @Override
+ public Value divide(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.divide(this);
+ }
+
+ @Override
+ public Value modulo(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.modulo(this);
+ }
+
+ @Override
+ public Value and(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.and(this);
+ }
+
+ @Override
+ public Value or(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.or(this);
+ }
+
+ @Override
+ public Value regExpr(Value value) {
+ if(value == getInstance())
+ return this;
+ return value.regExpr(this);
+ }
+
+ @Override
+ public Value negate() {
+ return this;
+ }
+
+ @Override
+ public Value valueSize() {
+ return this;
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueSet.java b/src/pl/edu/mimuw/cloudatlas/model/ValueSet.java
index c91374d..7f4968b 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueSet.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueSet.java
@@ -41,192 +41,192 @@ import pl.edu.mimuw.cloudatlas.model.ValueSet;
* <p>
* All constructors expect type of elements stored in this set. This type is checked when adding elements to the set and
* an <code>IllegalArgumentException</code> is thrown in case of error.
- *
+ *
* @see java.util.Set
*/
public class ValueSet extends ValueSimple<Set<Value>> implements Set<Value> {
- private TypeCollection type;
-
- /**
- * Creates a new <code>ValueSet</code> containing all the elements in the specified set.
- *
- * @param value a set which content will be copied to this value
- * @param elementType type of elements stored in this set
- */
- public ValueSet(Set<Value> value, Type elementType) {
- this(elementType);
- if(value != null)
- setValue(value);
- }
-
- /**
- * Creates an empty set.
- *
- * @param elementType type of elements stored in this set
- */
- public ValueSet(Type elementType) {
- super(new HashSet<Value>());
- type = new TypeCollection(Type.PrimaryType.SET, elementType);
- }
-
- @Override
- public Type getType() {
- return type;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueSet(((TypeCollection)this.getType()).getElementType());
- }
-
- /**
- * Gets a <code>Set</code> containing all the objects stored in this value. Modifying a return value will cause an
- * exception.
- */
- @Override
- public Set<Value> getValue() {
- return getSet() == null? null : Collections.unmodifiableSet(getSet());
- }
-
- @Override
- public ValueSet addValue(Value value) {
- sameTypesOrThrow(value, Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueSet(null, ((TypeCollection)getType()).getElementType());
- Set<Value> result = new HashSet<Value>(getValue());
- result.addAll(((ValueSet)value).getValue());
- return new ValueSet(result, ((TypeCollection)getType()).getElementType());
- }
-
- @Override
- public ValueInt valueSize() {
- return new ValueInt((getSet() == null? null : (long)getSet().size()));
- }
-
- @Override
- public void setValue(Set<Value> set) {
- if(set == null)
- super.setValue(null);
- else {
- super.setValue(new HashSet<Value>());
- for(Value e : set)
- add(e);
- }
- }
-
- private Set<Value> getSet() {
- return super.getValue();
- }
-
- private void checkElement(Value element) {
- if(element == null)
- throw new IllegalArgumentException("If you want to use null, create an object containing null instead.");
- if(!type.getElementType().isCompatible(element.getType()))
- throw new IllegalArgumentException("This set contains elements of type " + type.getElementType().toString()
- + " only. Not compatibile with elements of type: " + element.getType().toString());
- }
-
- @Override
- public boolean add(Value e) {
- checkElement(e);
- return getSet().add(e);
- }
-
- @Override
- public boolean addAll(Collection<? extends Value> c) {
- for(Value e : c)
- checkElement(e);
- return getSet().addAll(c);
- }
-
- @Override
- public void clear() {
- getSet().clear();
- }
-
- @Override
- public boolean contains(Object o) {
- return getSet().contains(o);
- }
-
- @Override
- public boolean containsAll(Collection<?> c) {
- return getSet().containsAll(c);
- }
-
- @Override
- public boolean isEmpty() {
- return getSet().isEmpty();
- }
-
- @Override
- public Iterator<Value> iterator() {
- return getSet().iterator();
- }
-
- @Override
- public boolean remove(Object o) {
- return getSet().remove(o);
- }
-
- @Override
- public boolean removeAll(Collection<?> c) {
- return getSet().removeAll(c);
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
- return getSet().retainAll(c);
- }
-
- @Override
- public int size() {
- return getSet().size();
- }
-
- @Override
- public Object[] toArray() {
- return getSet().toArray();
- }
-
- @Override
- public <U> U[] toArray(U[] a) {
- return getSet().toArray(a);
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case SET:
- if(getType().isCompatible(type))
- return this;
- throw new UnsupportedConversionException(getType(), type);
- case LIST:
- if(this.type.getElementType().isCompatible(((TypeCollection)type).getElementType())) {
- if(this.isNull())
- return new ValueList(null, this.type.getElementType());
- List<Value> l = new ArrayList<Value>();
- l.addAll(this);
- return new ValueList(l, this.type.getElementType());
- }
- throw new UnsupportedConversionException(getType(), type);
- case STRING:
- if(getValue() == null)
- return ValueString.NULL_STRING;
- StringBuilder sb = new StringBuilder();
- sb.append("{");
- boolean notFirst = false;
- for(Value v : getValue()) {
- if(notFirst) {
- sb.append(", ");
- } else
- notFirst = true;
- sb.append(v.toString());
- }
- sb.append("}");
- return new ValueString(sb.toString());
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
+ private TypeCollection type;
+
+ /**
+ * Creates a new <code>ValueSet</code> containing all the elements in the specified set.
+ *
+ * @param value a set which content will be copied to this value
+ * @param elementType type of elements stored in this set
+ */
+ public ValueSet(Set<Value> value, Type elementType) {
+ this(elementType);
+ if(value != null)
+ setValue(value);
+ }
+
+ /**
+ * Creates an empty set.
+ *
+ * @param elementType type of elements stored in this set
+ */
+ public ValueSet(Type elementType) {
+ super(new HashSet<Value>());
+ type = new TypeCollection(Type.PrimaryType.SET, elementType);
+ }
+
+ @Override
+ public Type getType() {
+ return type;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueSet(((TypeCollection)this.getType()).getElementType());
+ }
+
+ /**
+ * Gets a <code>Set</code> containing all the objects stored in this value. Modifying a return value will cause an
+ * exception.
+ */
+ @Override
+ public Set<Value> getValue() {
+ return getSet() == null? null : Collections.unmodifiableSet(getSet());
+ }
+
+ @Override
+ public ValueSet addValue(Value value) {
+ sameTypesOrThrow(value, Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueSet(null, ((TypeCollection)getType()).getElementType());
+ Set<Value> result = new HashSet<Value>(getValue());
+ result.addAll(((ValueSet)value).getValue());
+ return new ValueSet(result, ((TypeCollection)getType()).getElementType());
+ }
+
+ @Override
+ public ValueInt valueSize() {
+ return new ValueInt((getSet() == null? null : (long)getSet().size()));
+ }
+
+ @Override
+ public void setValue(Set<Value> set) {
+ if(set == null)
+ super.setValue(null);
+ else {
+ super.setValue(new HashSet<Value>());
+ for(Value e : set)
+ add(e);
+ }
+ }
+
+ private Set<Value> getSet() {
+ return super.getValue();
+ }
+
+ private void checkElement(Value element) {
+ if(element == null)
+ throw new IllegalArgumentException("If you want to use null, create an object containing null instead.");
+ if(!type.getElementType().isCompatible(element.getType()))
+ throw new IllegalArgumentException("This set contains elements of type " + type.getElementType().toString()
+ + " only. Not compatibile with elements of type: " + element.getType().toString());
+ }
+
+ @Override
+ public boolean add(Value e) {
+ checkElement(e);
+ return getSet().add(e);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends Value> c) {
+ for(Value e : c)
+ checkElement(e);
+ return getSet().addAll(c);
+ }
+
+ @Override
+ public void clear() {
+ getSet().clear();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return getSet().contains(o);
+ }
+
+ @Override
+ public boolean containsAll(Collection<?> c) {
+ return getSet().containsAll(c);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return getSet().isEmpty();
+ }
+
+ @Override
+ public Iterator<Value> iterator() {
+ return getSet().iterator();
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ return getSet().remove(o);
+ }
+
+ @Override
+ public boolean removeAll(Collection<?> c) {
+ return getSet().removeAll(c);
+ }
+
+ @Override
+ public boolean retainAll(Collection<?> c) {
+ return getSet().retainAll(c);
+ }
+
+ @Override
+ public int size() {
+ return getSet().size();
+ }
+
+ @Override
+ public Object[] toArray() {
+ return getSet().toArray();
+ }
+
+ @Override
+ public <U> U[] toArray(U[] a) {
+ return getSet().toArray(a);
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case SET:
+ if(getType().isCompatible(type))
+ return this;
+ throw new UnsupportedConversionException(getType(), type);
+ case LIST:
+ if(this.type.getElementType().isCompatible(((TypeCollection)type).getElementType())) {
+ if(this.isNull())
+ return new ValueList(null, this.type.getElementType());
+ List<Value> l = new ArrayList<Value>();
+ l.addAll(this);
+ return new ValueList(l, this.type.getElementType());
+ }
+ throw new UnsupportedConversionException(getType(), type);
+ case STRING:
+ if(getValue() == null)
+ return ValueString.NULL_STRING;
+ StringBuilder sb = new StringBuilder();
+ sb.append("{");
+ boolean notFirst = false;
+ for(Value v : getValue()) {
+ if(notFirst) {
+ sb.append(", ");
+ } else
+ notFirst = true;
+ sb.append(v.toString());
+ }
+ sb.append("}");
+ return new ValueString(sb.toString());
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueSimple.java b/src/pl/edu/mimuw/cloudatlas/model/ValueSimple.java
index 76d9062..94d9abd 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueSimple.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueSimple.java
@@ -28,62 +28,62 @@ package pl.edu.mimuw.cloudatlas.model;
* Convenient class for wrapping Java types into <code>Value</code> objects.
* <p>
* This class is immutable.
- *
+ *
* @param <T> a wrapped type
*/
abstract class ValueSimple<T> extends Value {
- private T value;
-
- /**
- * Constructs a new <code>Value</code> wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueSimple(T value) {
- setValue(value);
- }
-
- /**
- * Returns a hash code value for this object. This is a hash code of underlying wrapped object.
- *
- * @return the hash code for this value
- */
- @Override
- public int hashCode() {
- return getValue().hashCode();
- }
-
- /**
- * Gets a wrapped object.
- *
- * @return the wrapped value
- */
- public T getValue() {
- return value;
- }
-
- /**
- * Sets a wrapped value. This method is not public to ensure that the underlying value cannot be changed.
- *
- * @param value the value to set
- */
- void setValue(T value) {
- this.value = value;
- }
-
- @Override
- public boolean isNull() {
- return value == null;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public Value isEqual(Value v) {
- sameTypesOrThrow(v, Operation.EQUAL);
- if(isNull() && v.isNull())
- return new ValueBoolean(true);
- else if(isNull() || v.isNull())
- return new ValueBoolean(false);
- return new ValueBoolean(value.equals(((ValueSimple<T>)v).getValue()));
- }
+ private T value;
+
+ /**
+ * Constructs a new <code>Value</code> wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueSimple(T value) {
+ setValue(value);
+ }
+
+ /**
+ * Returns a hash code value for this object. This is a hash code of underlying wrapped object.
+ *
+ * @return the hash code for this value
+ */
+ @Override
+ public int hashCode() {
+ return getValue().hashCode();
+ }
+
+ /**
+ * Gets a wrapped object.
+ *
+ * @return the wrapped value
+ */
+ public T getValue() {
+ return value;
+ }
+
+ /**
+ * Sets a wrapped value. This method is not public to ensure that the underlying value cannot be changed.
+ *
+ * @param value the value to set
+ */
+ void setValue(T value) {
+ this.value = value;
+ }
+
+ @Override
+ public boolean isNull() {
+ return value == null;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Value isEqual(Value v) {
+ sameTypesOrThrow(v, Operation.EQUAL);
+ if(isNull() && v.isNull())
+ return new ValueBoolean(true);
+ else if(isNull() || v.isNull())
+ return new ValueBoolean(false);
+ return new ValueBoolean(value.equals(((ValueSimple<T>)v).getValue()));
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueString.java b/src/pl/edu/mimuw/cloudatlas/model/ValueString.java
index 34af8d1..e6fe9dd 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueString.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueString.java
@@ -33,88 +33,88 @@ import pl.edu.mimuw.cloudatlas.model.ValueString;
* A class that wraps a Java <code>String</code> object.
*/
public class ValueString extends ValueSimple<String> {
- /**
- * A result of conversion values representing null to <code>ValueString</code>.
- */
- protected static final ValueString NULL_STRING = new ValueString("NULL");
-
- /**
- * Constructs a new <code>ValueString</code> object wrapping the specified <code>value</code>.
- *
- * @param value the value to wrap
- */
- public ValueString(String value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.STRING;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueString("");
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- sameTypesOrThrow(value, Operation.COMPARE);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue().compareTo(((ValueString)value).getValue()) < 0);
- }
-
- @Override
- public ValueString addValue(Value value) {
- sameTypesOrThrow(value, Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueString(null);
- return new ValueString(getValue().concat(((ValueString)value).getValue()));
- }
-
- @Override
- public ValueBoolean regExpr(Value value) {
- sameTypesOrThrow(value, Operation.REG_EXPR);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue().matches(((ValueString)value).getValue()));
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case BOOLEAN:
- return new ValueBoolean(Boolean.parseBoolean(getValue()));
- case DOUBLE:
- try {
- return new ValueDouble(Double.parseDouble(getValue()));
- } catch(NumberFormatException exception) {
- return new ValueDouble(null);
- }
- case DURATION:
- return new ValueDuration(getValue());
- case INT:
- try {
- return new ValueInt(Long.parseLong(getValue()));
- } catch(NumberFormatException exception) {
- return new ValueInt(null);
- }
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : this;
- case TIME:
- try {
- return new ValueTime(getValue());
- } catch(ParseException exception) {
- return new ValueTime((Long)null);
- }
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
-
- @Override
- public ValueInt valueSize() {
- return new ValueInt(getValue() == null? null : (long)getValue().length());
- }
+ /**
+ * A result of conversion values representing null to <code>ValueString</code>.
+ */
+ protected static final ValueString NULL_STRING = new ValueString("NULL");
+
+ /**
+ * Constructs a new <code>ValueString</code> object wrapping the specified <code>value</code>.
+ *
+ * @param value the value to wrap
+ */
+ public ValueString(String value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.STRING;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueString("");
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ sameTypesOrThrow(value, Operation.COMPARE);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue().compareTo(((ValueString)value).getValue()) < 0);
+ }
+
+ @Override
+ public ValueString addValue(Value value) {
+ sameTypesOrThrow(value, Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueString(null);
+ return new ValueString(getValue().concat(((ValueString)value).getValue()));
+ }
+
+ @Override
+ public ValueBoolean regExpr(Value value) {
+ sameTypesOrThrow(value, Operation.REG_EXPR);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue().matches(((ValueString)value).getValue()));
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case BOOLEAN:
+ return new ValueBoolean(Boolean.parseBoolean(getValue()));
+ case DOUBLE:
+ try {
+ return new ValueDouble(Double.parseDouble(getValue()));
+ } catch(NumberFormatException exception) {
+ return new ValueDouble(null);
+ }
+ case DURATION:
+ return new ValueDuration(getValue());
+ case INT:
+ try {
+ return new ValueInt(Long.parseLong(getValue()));
+ } catch(NumberFormatException exception) {
+ return new ValueInt(null);
+ }
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : this;
+ case TIME:
+ try {
+ return new ValueTime(getValue());
+ } catch(ParseException exception) {
+ return new ValueTime((Long)null);
+ }
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
+
+ @Override
+ public ValueInt valueSize() {
+ return new ValueInt(getValue() == null? null : (long)getValue().length());
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ValueTime.java b/src/pl/edu/mimuw/cloudatlas/model/ValueTime.java
index f494757..0d4747d 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ValueTime.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ValueTime.java
@@ -35,83 +35,83 @@ import pl.edu.mimuw.cloudatlas.model.ValueTime;
* A class representing the POSIX time in milliseconds. This is a simple wrapper of a Java <code>Long</code> object.
*/
public class ValueTime extends ValueSimple<Long> {
- /**
- * A format of string representing <code>ValueTime</code> when constructing from or converting to a
- * <code>String</code> object.
- */
- public static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
-
- /**
- * Constructs a new <code>ValueTime</code> object wrapping the specified value.
- *
- * @param value the POSIX time
- */
- public ValueTime(Long value) {
- super(value);
- }
-
- @Override
- public Type getType() {
- return TypePrimitive.TIME;
- }
-
- @Override
- public Value getDefaultValue() {
- return new ValueTime(0l);
- }
-
- /**
- * Constructs a new <code>ValueTime</code> object from its textual representation.
- *
- * @param time a time formatted according to {@link #TIME_FORMAT}
- * @throws ParseException if the <code>time</code> is incorrect
- * @see #TIME_FORMAT
- */
- public ValueTime(String time) throws ParseException {
- this(TIME_FORMAT.parse(time).getTime());
- }
-
- @Override
- public ValueBoolean isLowerThan(Value value) {
- sameTypesOrThrow(value, Operation.COMPARE);
- if(isNull() || value.isNull())
- return new ValueBoolean(null);
- return new ValueBoolean(getValue() < ((ValueTime)value).getValue());
- }
-
- @Override
- public ValueTime addValue(Value value) {
- if(!value.getType().isCompatible(TypePrimitive.DURATION))
- throw new IncompatibleTypesException(getType(), value.getType(), Operation.ADD);
- if(isNull() || value.isNull())
- return new ValueTime((Long)null);
- return new ValueTime(getValue() + ((ValueDuration)value).getValue());
- }
-
- @Override
- public Value subtract(Value value) {
- if(value.getType().isCompatible(TypePrimitive.DURATION)) {
- if(isNull() || value.isNull())
- return new ValueTime((Long)null);
- return new ValueTime(getValue() - ((ValueDuration)value).getValue());
- } else if(value.getType().isCompatible(TypePrimitive.TIME)) {
- if(isNull() || value.isNull())
- return new ValueTime((Long)null);
- return new ValueDuration(getValue() - ((ValueTime)value).getValue());
- }
- throw new IncompatibleTypesException(getType(), value.getType(), Operation.SUBTRACT);
-
- }
-
- @Override
- public Value convertTo(Type type) {
- switch(type.getPrimaryType()) {
- case STRING:
- return getValue() == null? ValueString.NULL_STRING : new ValueString(TIME_FORMAT.format(getValue()));
- case TIME:
- return this;
- default:
- throw new UnsupportedConversionException(getType(), type);
- }
- }
+ /**
+ * A format of string representing <code>ValueTime</code> when constructing from or converting to a
+ * <code>String</code> object.
+ */
+ public static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
+
+ /**
+ * Constructs a new <code>ValueTime</code> object wrapping the specified value.
+ *
+ * @param value the POSIX time
+ */
+ public ValueTime(Long value) {
+ super(value);
+ }
+
+ @Override
+ public Type getType() {
+ return TypePrimitive.TIME;
+ }
+
+ @Override
+ public Value getDefaultValue() {
+ return new ValueTime(0l);
+ }
+
+ /**
+ * Constructs a new <code>ValueTime</code> object from its textual representation.
+ *
+ * @param time a time formatted according to {@link #TIME_FORMAT}
+ * @throws ParseException if the <code>time</code> is incorrect
+ * @see #TIME_FORMAT
+ */
+ public ValueTime(String time) throws ParseException {
+ this(TIME_FORMAT.parse(time).getTime());
+ }
+
+ @Override
+ public ValueBoolean isLowerThan(Value value) {
+ sameTypesOrThrow(value, Operation.COMPARE);
+ if(isNull() || value.isNull())
+ return new ValueBoolean(null);
+ return new ValueBoolean(getValue() < ((ValueTime)value).getValue());
+ }
+
+ @Override
+ public ValueTime addValue(Value value) {
+ if(!value.getType().isCompatible(TypePrimitive.DURATION))
+ throw new IncompatibleTypesException(getType(), value.getType(), Operation.ADD);
+ if(isNull() || value.isNull())
+ return new ValueTime((Long)null);
+ return new ValueTime(getValue() + ((ValueDuration)value).getValue());
+ }
+
+ @Override
+ public Value subtract(Value value) {
+ if(value.getType().isCompatible(TypePrimitive.DURATION)) {
+ if(isNull() || value.isNull())
+ return new ValueTime((Long)null);
+ return new ValueTime(getValue() - ((ValueDuration)value).getValue());
+ } else if(value.getType().isCompatible(TypePrimitive.TIME)) {
+ if(isNull() || value.isNull())
+ return new ValueTime((Long)null);
+ return new ValueDuration(getValue() - ((ValueTime)value).getValue());
+ }
+ throw new IncompatibleTypesException(getType(), value.getType(), Operation.SUBTRACT);
+
+ }
+
+ @Override
+ public Value convertTo(Type type) {
+ switch(type.getPrimaryType()) {
+ case STRING:
+ return getValue() == null? ValueString.NULL_STRING : new ValueString(TIME_FORMAT.format(getValue()));
+ case TIME:
+ return this;
+ default:
+ throw new UnsupportedConversionException(getType(), type);
+ }
+ }
}
diff --git a/src/pl/edu/mimuw/cloudatlas/model/ZMI.java b/src/pl/edu/mimuw/cloudatlas/model/ZMI.java
index 0e1c852..3e3f3a2 100644
--- a/src/pl/edu/mimuw/cloudatlas/model/ZMI.java
+++ b/src/pl/edu/mimuw/cloudatlas/model/ZMI.java
@@ -35,132 +35,132 @@ import java.util.Map.Entry;
* references to its father and sons in the tree.
*/
public class ZMI implements Cloneable {
- private final AttributesMap attributes = new AttributesMap();
-
- private final List<ZMI> sons = new ArrayList<ZMI>();
- private ZMI father;
-
- /**
- * Creates a new ZMI with no father (the root zone) and empty sons list.
- */
- public ZMI() {
- this(null);
- }
-
- /**
- * Creates a new ZMI with the specified node as a father and empty sons list. This method does not perform any
- * operation on the <code>father</code>. Especially, setting this object as a <code>father</code>'s son must be done
- * separately.
- *
- * @param father a father of this ZMI
- * @see #addSon(ZMI)
- */
- public ZMI(ZMI father) {
- this.father = father;
- }
-
- /**
- * Gets a father of this ZMI in a tree.
- *
- * @return a father of this ZMI or <code>null</code> if this is the root zone
- */
- public ZMI getFather() {
- return father;
- }
-
- /**
- * Sets or changes a father of this ZMI in a tree. This method does not perform any operation on the
- * <code>father</code>. Especially, setting this object as a <code>father</code>'s son must be done separately.
- *
- * @param father a new father for this ZMI
- * @see #addSon(ZMI)
- */
- public void setFather(ZMI father) {
- this.father = father;
- }
-
- /**
- * Gets a list of sons of this ZMI in a tree. Modifying a return value will cause an exception.
- *
- * @return
- */
- public List<ZMI> getSons() {
- return Collections.unmodifiableList(sons);
- }
-
- /**
- * Adds the specified ZMI to the list of sons of this ZMI. This method does not perform any operation on a
- * <code>son</code>. Especially, setting this object as a <code>son</code>'s father must be done separately.
- *
- * @param son
- * @see #ZMI(ZMI)
- * @see #setFather(ZMI)
- */
- public void addSon(ZMI son) {
- sons.add(son);
- }
-
- /**
- * Removes the specified ZMI from the list of sons of this ZMI. This method does not perform any operation on a
- * <code>son</code>. Especially, its father remains unchanged.
- *
- * @param son
- * @see #setFather(ZMI)
- */
- public void removeSon(ZMI son) {
- sons.remove(son);
- }
-
- /**
- * Gets a map of all the attributes stored in this ZMI.
- *
- * @return map of attributes
- */
- public AttributesMap getAttributes() {
- return attributes;
- }
-
- /**
- * Prints recursively in a prefix order (starting from this ZMI) a whole tree with all the attributes.
- *
- * @param stream a destination stream
- * @see #toString()
- */
- public void printAttributes(PrintStream stream) {
- for(Entry<Attribute, Value> entry : attributes)
- stream.println(entry.getKey() + " : " + entry.getValue().getType() + " = " + entry.getValue());
- System.out.println();
- for(ZMI son : sons)
- son.printAttributes(stream);
- }
-
- /**
- * Creates an independent copy of a whole hierarchy. A returned ZMI has the same reference as a father (but the
- * father does not have a reference to it as a son). For the root zone, the copy is completely independent, since
- * its father is <code>null</code>.
- *
- * @return a deep copy of this ZMI
- */
- @Override
- public ZMI clone() {
- ZMI result = new ZMI(father);
- result.attributes.add(attributes.clone());
- for(ZMI son : sons) {
- ZMI sonClone = son.clone();
- result.sons.add(sonClone);
- sonClone.father = result;
- }
- return result;
- }
-
- /**
- * Prints a textual representation of this ZMI. It contains only attributes of this node.
- *
- * @return a textual representation of this object
- * @see #printAttributes(PrintStream)
- */
- @Override
- public String toString() {
- return attributes.toString();
- }
+ private final AttributesMap attributes = new AttributesMap();
+
+ private final List<ZMI> sons = new ArrayList<ZMI>();
+ private ZMI father;
+
+ /**
+ * Creates a new ZMI with no father (the root zone) and empty sons list.
+ */
+ public ZMI() {
+ this(null);
+ }
+
+ /**
+ * Creates a new ZMI with the specified node as a father and empty sons list. This method does not perform any
+ * operation on the <code>father</code>. Especially, setting this object as a <code>father</code>'s son must be done
+ * separately.
+ *
+ * @param father a father of this ZMI
+ * @see #addSon(ZMI)
+ */
+ public ZMI(ZMI father) {
+ this.father = father;
+ }
+
+ /**
+ * Gets a father of this ZMI in a tree.
+ *
+ * @return a father of this ZMI or <code>null</code> if this is the root zone
+ */
+ public ZMI getFather() {
+ return father;
+ }
+
+ /**
+ * Sets or changes a father of this ZMI in a tree. This method does not perform any operation on the
+ * <code>father</code>. Especially, setting this object as a <code>father</code>'s son must be done separately.
+ *
+ * @param father a new father for this ZMI
+ * @see #addSon(ZMI)
+ */
+ public void setFather(ZMI father) {
+ this.father = father;
+ }
+
+ /**
+ * Gets a list of sons of this ZMI in a tree. Modifying a return value will cause an exception.
+ *
+ * @return
+ */
+ public List<ZMI> getSons() {
+ return Collections.unmodifiableList(sons);
+ }
+
+ /**
+ * Adds the specified ZMI to the list of sons of this ZMI. This method does not perform any operation on a
+ * <code>son</code>. Especially, setting this object as a <code>son</code>'s father must be done separately.
+ *
+ * @param son
+ * @see #ZMI(ZMI)
+ * @see #setFather(ZMI)
+ */
+ public void addSon(ZMI son) {
+ sons.add(son);
+ }
+
+ /**
+ * Removes the specified ZMI from the list of sons of this ZMI. This method does not perform any operation on a
+ * <code>son</code>. Especially, its father remains unchanged.
+ *
+ * @param son
+ * @see #setFather(ZMI)
+ */
+ public void removeSon(ZMI son) {
+ sons.remove(son);
+ }
+
+ /**
+ * Gets a map of all the attributes stored in this ZMI.
+ *
+ * @return map of attributes
+ */
+ public AttributesMap getAttributes() {
+ return attributes;
+ }
+
+ /**
+ * Prints recursively in a prefix order (starting from this ZMI) a whole tree with all the attributes.
+ *
+ * @param stream a destination stream
+ * @see #toString()
+ */
+ public void printAttributes(PrintStream stream) {
+ for(Entry<Attribute, Value> entry : attributes)
+ stream.println(entry.getKey() + " : " + entry.getValue().getType() + " = " + entry.getValue());
+ System.out.println();
+ for(ZMI son : sons)
+ son.printAttributes(stream);
+ }
+
+ /**
+ * Creates an independent copy of a whole hierarchy. A returned ZMI has the same reference as a father (but the
+ * father does not have a reference to it as a son). For the root zone, the copy is completely independent, since
+ * its father is <code>null</code>.
+ *
+ * @return a deep copy of this ZMI
+ */
+ @Override
+ public ZMI clone() {
+ ZMI result = new ZMI(father);
+ result.attributes.add(attributes.clone());
+ for(ZMI son : sons) {
+ ZMI sonClone = son.clone();
+ result.sons.add(sonClone);
+ sonClone.father = result;
+ }
+ return result;
+ }
+
+ /**
+ * Prints a textual representation of this ZMI. It contains only attributes of this node.
+ *
+ * @return a textual representation of this object
+ * @see #printAttributes(PrintStream)
+ */
+ @Override
+ public String toString() {
+ return attributes.toString();
+ }
}