package org.cagrid.core.resource;
import org.cagrid.wsrf.properties.ResourcePropertyMetaData;
public abstract class SingletonResourceProperty<T> extends
AbstractResourceProperty<T> {
public SingletonResourceProperty(
ResourcePropertyDescriptor<T> resourcePropertyDescriptor) {
super(resourcePropertyDescriptor);
}
protected abstract T getPropertyInternal();
protected abstract void setPropertyInternal(T property);
@Override
public void add(Object property) {
throw new UnsupportedOperationException("add");
}
@Override
public boolean remove(Object property) {
throw new UnsupportedOperationException("remove");
}
@Override
public T get(int index) {
if (index != 0) {
throw new IndexOutOfBoundsException("get(" + index + ")");
}
return getPropertyInternal();
}
@Override
public void set(int index, Object obj) {
if (index != 0) {
throw new IndexOutOfBoundsException("set(" + index + ")");
}
T property = checkPropertyType(obj, "set");
setPropertyInternal(property);
}
@Override
public void clear() {
throw new UnsupportedOperationException("clear");
}
@Override
public int size() {
return 1;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
protected ResourcePropertyMetaData<T> createMetaData(
ResourcePropertyDescriptor<T> resourcePropertyDescriptor) {
return new NonNillableSingletonDescriptorResourcePropertyMetaData<T>(
resourcePropertyDescriptor);
}
}