// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/data/Attribute.java
// public interface Attribute {
// 
// 	/**
// 	 * Returns the ID of the Attribute
// 	 * @return the ID as String
// 	 */
// 	String getId();
// 	
// 	/**
// 	 * Returns the title of the Attribute
// 	 * @return the title as String
// 	 */
// 	String getTitle();
// 	
// 	/**
// 	 * Sets the title of the Attribute
// 	 * @param title the Attribute's title as String
// 	 * @return the current Attribute
// 	 */
// 	Attribute setTitle(String title);
// 	
// 	/**
// 	 * Returns the type of the Attribute
// 	 * @return an AttributeType enum for that Attribute
// 	 */
// 	AttributeType getAttributeType();
// 	
// 	/**
// 	 * Checks if the Attribute has a default value
// 	 * @return true if the Attribute has a default value
// 	 */
// 	boolean hasDefaultValue();
// 	
// 	/**
// 	 * Clears the default value of the Attribute
// 	 * @return the current Attribute
// 	 */
// 	Attribute clearDefaultValue();
// 	
// 	/**
// 	 * Returns the default value of the Attribute
// 	 * @return the default value as String
// 	 */
// 	String getDefaultValue();
// 	
// 	/**
// 	 * Sets the default value of the Attribute
// 	 * @param defaultValue the default value as String
// 	 * @return the current Attribute
// 	 */
// 	Attribute setDefaultValue(String defaultValue);
// 	
// 	/**
// 	 * Returns the list of the Attribute's options
// 	 * @return the list of the options
// 	 */
// 	List<String> getOptions();
// 	
// 	/**
// 	 * Creates a value for that Attribute
// 	 * @param value the value of the Attribute as String
// 	 * @return an instance of the AttributeValue class
// 	 */
// 	AttributeValue createValue(String value);
// }
// 
// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/data/AttributeValue.java
// public interface AttributeValue extends Dynamic<AttributeValue> {
// 
// 	/**
// 	 * Returns the Attribute
// 	 * @return an instance of the Attribute class
// 	 */
// 	Attribute getAttribute();
// 	
// 	/**
// 	 * Returns the value of the Attribute
// 	 * @return the value as String
// 	 */
// 	String getValue();
// 	
// 	/**
// 	 * Sets the value for that Attribute
// 	 * @param value the value of the Attribute
// 	 * @return the current AttributeValue
// 	 */
// 	AttributeValue setValue(String value);
// }
// 
// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/impl/dynamic/DynamicBase.java
// public abstract class DynamicBase<T extends Object> implements Dynamic<T> {
// 
// 	private Object endDate = null;
// 	private Object startDate = null;
// 	private IntervalType startIntervalType = IntervalType.CLOSE;
// 	private IntervalType endIntervalType = IntervalType.CLOSE;
// 
// 	protected abstract T getSelf();
// 	
// 	public DynamicBase() {}
// 
// 	@Override
// 	public T clearEndDate() {
// 		endDate = null;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T clearStartDate() {
// 		startDate = null;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public Object getEndValue() {
// 		checkState(hasEndDate(), "End Date has not been set.");
// 		return endDate;
// 	}
// 
// 	@Override
// 	public Object getStartValue() {
// 		checkState(hasStartDate(), "Start Date has not been set.");
// 		return startDate;
// 	}
// 
// 	@Override
// 	public IntervalType getStartIntervalType() {
// 		return startIntervalType;
// 	}
// 
// 	@Override
// 	public IntervalType getEndIntervalType() {
// 		return endIntervalType;
// 	}
// 
// 	@Override
// 	public boolean hasEndDate() {
// 		return (endDate != null);
// 	}
// 
// 	@Override
// 	public boolean hasStartDate() {
// 		return (startDate != null);
// 	}
// 
// 	@Override
// 	public T setEndValue(Object endDate) {
// 		checkArgument(endDate != null, "End Date cannot be null.");
// 		this.endDate = endDate;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setStartValue(Object startDate) {
// 		checkArgument(startDate != null, "Start Date cannot be null.");
// 		this.startDate = startDate;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setStartIntervalType(IntervalType startIntervalType) {
// 		checkArgument(startIntervalType != null, "Start Interval Type cannot be null.");
// 		this.startIntervalType = startIntervalType;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setEndIntervalType(IntervalType endIntervalType) {
// 		checkArgument(endIntervalType != null, "End Interval Type cannot be null.");
// 		this.endIntervalType = endIntervalType;
// 		return getSelf();
// 	}
// }


import static com.google.common.base.Preconditions.checkArgument;
import it.uniroma1.dis.wsngroup.gexf4j.core.data.Attribute;
import it.uniroma1.dis.wsngroup.gexf4j.core.data.AttributeValue;
import it.uniroma1.dis.wsngroup.gexf4j.core.impl.dynamic.DynamicBase;
package it.uniroma1.dis.wsngroup.gexf4j.core.impl.data;


/**
 * AttributeValueImpl class is an implementation of the AttributeValue interface.
 *
 */
public class AttributeValueImpl extends DynamicBase<AttributeValue> implements AttributeValue {

	private Attribute attribute = null;
	private String value = "";
	
	/**
	 * Constructs an AttributeValue object
	 * @param attribute an instance of Attribute interface
	 */
	public AttributeValueImpl(Attribute attribute) {
		checkArgument(attribute != null, "Attribute cannot be null.");
		this.attribute = attribute;
	}
	
// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/data/Attribute.java
// public interface Attribute {
// 
// 	/**
// 	 * Returns the ID of the Attribute
// 	 * @return the ID as String
// 	 */
// 	String getId();
// 	
// 	/**
// 	 * Returns the title of the Attribute
// 	 * @return the title as String
// 	 */
// 	String getTitle();
// 	
// 	/**
// 	 * Sets the title of the Attribute
// 	 * @param title the Attribute's title as String
// 	 * @return the current Attribute
// 	 */
// 	Attribute setTitle(String title);
// 	
// 	/**
// 	 * Returns the type of the Attribute
// 	 * @return an AttributeType enum for that Attribute
// 	 */
// 	AttributeType getAttributeType();
// 	
// 	/**
// 	 * Checks if the Attribute has a default value
// 	 * @return true if the Attribute has a default value
// 	 */
// 	boolean hasDefaultValue();
// 	
// 	/**
// 	 * Clears the default value of the Attribute
// 	 * @return the current Attribute
// 	 */
// 	Attribute clearDefaultValue();
// 	
// 	/**
// 	 * Returns the default value of the Attribute
// 	 * @return the default value as String
// 	 */
// 	String getDefaultValue();
// 	
// 	/**
// 	 * Sets the default value of the Attribute
// 	 * @param defaultValue the default value as String
// 	 * @return the current Attribute
// 	 */
// 	Attribute setDefaultValue(String defaultValue);
// 	
// 	/**
// 	 * Returns the list of the Attribute's options
// 	 * @return the list of the options
// 	 */
// 	List<String> getOptions();
// 	
// 	/**
// 	 * Creates a value for that Attribute
// 	 * @param value the value of the Attribute as String
// 	 * @return an instance of the AttributeValue class
// 	 */
// 	AttributeValue createValue(String value);
// }
// 
// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/data/AttributeValue.java
// public interface AttributeValue extends Dynamic<AttributeValue> {
// 
// 	/**
// 	 * Returns the Attribute
// 	 * @return an instance of the Attribute class
// 	 */
// 	Attribute getAttribute();
// 	
// 	/**
// 	 * Returns the value of the Attribute
// 	 * @return the value as String
// 	 */
// 	String getValue();
// 	
// 	/**
// 	 * Sets the value for that Attribute
// 	 * @param value the value of the Attribute
// 	 * @return the current AttributeValue
// 	 */
// 	AttributeValue setValue(String value);
// }
// 
// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/impl/dynamic/DynamicBase.java
// public abstract class DynamicBase<T extends Object> implements Dynamic<T> {
// 
// 	private Object endDate = null;
// 	private Object startDate = null;
// 	private IntervalType startIntervalType = IntervalType.CLOSE;
// 	private IntervalType endIntervalType = IntervalType.CLOSE;
// 
// 	protected abstract T getSelf();
// 	
// 	public DynamicBase() {}
// 
// 	@Override
// 	public T clearEndDate() {
// 		endDate = null;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T clearStartDate() {
// 		startDate = null;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public Object getEndValue() {
// 		checkState(hasEndDate(), "End Date has not been set.");
// 		return endDate;
// 	}
// 
// 	@Override
// 	public Object getStartValue() {
// 		checkState(hasStartDate(), "Start Date has not been set.");
// 		return startDate;
// 	}
// 
// 	@Override
// 	public IntervalType getStartIntervalType() {
// 		return startIntervalType;
// 	}
// 
// 	@Override
// 	public IntervalType getEndIntervalType() {
// 		return endIntervalType;
// 	}
// 
// 	@Override
// 	public boolean hasEndDate() {
// 		return (endDate != null);
// 	}
// 
// 	@Override
// 	public boolean hasStartDate() {
// 		return (startDate != null);
// 	}
// 
// 	@Override
// 	public T setEndValue(Object endDate) {
// 		checkArgument(endDate != null, "End Date cannot be null.");
// 		this.endDate = endDate;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setStartValue(Object startDate) {
// 		checkArgument(startDate != null, "Start Date cannot be null.");
// 		this.startDate = startDate;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setStartIntervalType(IntervalType startIntervalType) {
// 		checkArgument(startIntervalType != null, "Start Interval Type cannot be null.");
// 		this.startIntervalType = startIntervalType;
// 		return getSelf();
// 	}
// 
// 	@Override
// 	public T setEndIntervalType(IntervalType endIntervalType) {
// 		checkArgument(endIntervalType != null, "End Interval Type cannot be null.");
// 		this.endIntervalType = endIntervalType;
// 		return getSelf();
// 	}
// }


// Path: src/main/java/it/uniroma1/dis/wsngroup/gexf4j/core/impl/data/AttributeValueImpl.java
import static com.google.common.base.Preconditions.checkArgument;
import it.uniroma1.dis.wsngroup.gexf4j.core.data.Attribute;
import it.uniroma1.dis.wsngroup.gexf4j.core.data.AttributeValue;
import it.uniroma1.dis.wsngroup.gexf4j.core.impl.dynamic.DynamicBase;

package it.uniroma1.dis.wsngroup.gexf4j.core.impl.data;


/**
 * AttributeValueImpl class is an implementation of the AttributeValue interface.
 *
 */
public class AttributeValueImpl extends DynamicBase<AttributeValue> implements AttributeValue {

	private Attribute attribute = null;
	private String value = "";
	
	/**
	 * Constructs an AttributeValue object
	 * @param attribute an instance of Attribute interface
	 */
	public AttributeValueImpl(Attribute attribute) {
		checkArgument(attribute != null, "Attribute cannot be null.");
		this.attribute = attribute;
	}
	
	@Override