package edu.ualberta.med.biobank.common.wrappers.internal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import edu.ualberta.med.biobank.common.peer.AbstractPositionPeer;
import edu.ualberta.med.biobank.common.util.RowColPos;
import edu.ualberta.med.biobank.common.wrappers.ContainerWrapper;
import edu.ualberta.med.biobank.common.wrappers.Property;
import edu.ualberta.med.biobank.common.wrappers.WrapperTransaction.TaskList;
import edu.ualberta.med.biobank.common.wrappers.base.AbstractPositionBaseWrapper;
import edu.ualberta.med.biobank.model.AbstractPosition;
import gov.nih.nci.system.applicationservice.WritableApplicationService;
public abstract class AbstractPositionWrapper<E extends AbstractPosition>
extends AbstractPositionBaseWrapper<E> {
public AbstractPositionWrapper(WritableApplicationService appService,
E wrappedObject) {
super(appService, wrappedObject);
}
public AbstractPositionWrapper(WritableApplicationService appService) {
super(appService);
}
private RowColPos position = null;
@Override
@Deprecated
public void setRow(Integer row) {
throw new UnsupportedOperationException(
"Use setPosition() instead of setRow()."); //$NON-NLS-1$
}
@Override
@Deprecated
public void setCol(Integer col) {
throw new UnsupportedOperationException(
"Use setPosition() instead of setCol()."); //$NON-NLS-1$
}
public RowColPos getPosition() {
if (position == null && getRow() != null && getCol() != null) {
position = new RowColPos(getRow(), getCol());
}
return position;
}
protected void setPosition(RowColPos newPosition) {
if (newPosition == null) {
throw new IllegalArgumentException(
"Position cannot be set to null."); //$NON-NLS-1$
}
super.setRow(newPosition.getRow());
super.setCol(newPosition.getCol());
position = newPosition;
}
public abstract ContainerWrapper getParent();
public void setParent(ContainerWrapper parent, RowColPos position) {
if (parent == null) {
throw new IllegalArgumentException(
"Parent container cannot be set null."); //$NON-NLS-1$
}
setParent(parent);
setPosition(position);
}
protected abstract void setParent(ContainerWrapper parent);
@Override
protected List<Property<?, ? super E>> getProperties() {
return Collections
.unmodifiableList(new ArrayList<Property<?, ? super E>>(
AbstractPositionPeer.PROPERTIES));
}
@Deprecated
@Override
protected void addPersistTasks(TaskList tasks) {
tasks.add(check().notNull(AbstractPositionPeer.ROW));
tasks.add(check().notNull(AbstractPositionPeer.COL));
super.addPersistTasks(tasks);
}
}