package edu.ualberta.med.biobank.common.action.container; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.util.RowColPos; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.model.ContainerPosition; public class ContainerActionHelper { public static final String PATH_DELIMITER = "/"; //$NON-NLS-1$ public static void setPosition(ActionContext context, Container container, RowColPos rcp, Integer parentId) { ContainerPosition pos = container.getPosition(); if ((pos == null) && (rcp != null)) { pos = new ContainerPosition(); pos.setContainer(container); container.setPosition(pos); } Container parent = null; if ((parentId != null) && (rcp != null)) { pos.setRow(rcp.getRow()); pos.setCol(rcp.getCol()); parent = context.load(Container.class, parentId); pos.setParentContainer(parent); } else if ((parentId == null) && (rcp == null)) { if ((pos != null) && (pos.getId() != null)) { context.getSession().delete(pos); } } else { throw new ActionException( "Problem: parent and position should be both set or both null"); //$NON-NLS-1$ } container.setTopContainer(parent == null ? container : parent .getTopContainer()); } public static void updateContainerPathAndLabel(Container container, Container parentContainer) { StringBuilder path = new StringBuilder(); String parentPath = parentContainer.getPath(); if ((parentPath != null) && !parentPath.isEmpty()) { path.append(parentPath).append(PATH_DELIMITER); } path.append(parentContainer.getId()); container.setPath(path.toString()); container.setTopContainer(parentContainer.getTopContainer()); container.setLabel(parentContainer.getLabel() + parentContainer.getContainerType().getPositionString( container.getPositionAsRowCol())); } }