package edu.ualberta.med.biobank.treeview.admin;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.common.permission.site.SiteDeletePermission;
import edu.ualberta.med.biobank.common.permission.site.SiteReadPermission;
import edu.ualberta.med.biobank.common.permission.site.SiteUpdatePermission;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.SiteWrapper;
import edu.ualberta.med.biobank.forms.SiteEntryForm;
import edu.ualberta.med.biobank.forms.SiteViewForm;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.treeview.AbstractAdapterBase;
import edu.ualberta.med.biobank.treeview.AdapterBase;
import gov.nih.nci.system.applicationservice.ApplicationException;
public class SiteAdapter extends AdapterBase {
private int nodeIdOffset = 100;
public static final int CONTAINER_TYPES_BASE_NODE_ID = 0;
public static final int CONTAINERS_BASE_NODE_ID = 1;
public SiteAdapter(AdapterBase parent, SiteWrapper site) {
super(parent, site);
if (site != null && site.getId() != null) {
nodeIdOffset *= site.getId();
}
createNodes();
}
@Override
public void init() {
try {
this.isDeletable =
SessionManager.getAppService().isAllowed(
new SiteDeletePermission(getModelObject().getId()));
this.isReadable =
SessionManager.getAppService().isAllowed(
new SiteReadPermission(getModelObject().getId()));
this.isEditable =
SessionManager.getAppService().isAllowed(
new SiteUpdatePermission(getModelObject().getId()));
} catch (ApplicationException e) {
BgcPlugin.openAsyncError(Messages.SiteAdapter_0,
Messages.SiteAdapter_1);
}
}
public ContainerTypeGroup getContainerTypesGroupNode() {
ContainerTypeGroup adapter = (ContainerTypeGroup) getChild(nodeIdOffset
+ CONTAINER_TYPES_BASE_NODE_ID);
Assert.isNotNull(adapter);
return adapter;
}
public ContainerGroup getContainersGroupNode() {
ContainerGroup adapter = (ContainerGroup) getChild(nodeIdOffset
+ CONTAINERS_BASE_NODE_ID);
Assert.isNotNull(adapter);
return adapter;
}
@Override
protected String getLabelInternal() {
SiteWrapper site = (SiteWrapper) getModelObject();
Assert.isNotNull(site, "site is null"); //$NON-NLS-1$
return site.getNameShort();
}
@Override
public String getTooltipTextInternal() {
return getTooltipText(Messages.SiteAdapter_tooltip_label);
}
@Override
public void popupMenu(TreeViewer tv, Tree tree, Menu menu) {
addEditMenu(menu, Messages.SiteAdapter_site_label);
addViewMenu(menu, Messages.SiteAdapter_site_label);
if (!getModelObject().equals(
SessionManager.getUser().getCurrentWorkingCenter()))
addDeleteMenu(menu, Messages.SiteAdapter_site_label);
}
@Override
protected String getConfirmDeleteMessage() {
return Messages.SiteAdapter_delete_confirm_msg;
}
@Override
public List<AbstractAdapterBase> search(Class<?> searchedClass,
Integer objectId) {
if (SiteWrapper.class.isAssignableFrom(searchedClass))
return Arrays.asList((AbstractAdapterBase) this);
return searchChildren(searchedClass, objectId);
}
@Override
protected AdapterBase createChildNode() {
return null;
}
@Override
protected AdapterBase createChildNode(Object child) {
return null;
}
@Override
protected List<? extends ModelWrapper<?>> getWrapperChildren() {
return null;
}
@Override
public String getEntryFormId() {
return SiteEntryForm.ID;
}
@Override
public String getViewFormId() {
return SiteViewForm.ID;
}
public void createNodes() {
addChild(new ContainerTypeGroup(this, nodeIdOffset
+ CONTAINER_TYPES_BASE_NODE_ID));
addChild(new ContainerGroup(this, nodeIdOffset
+ CONTAINERS_BASE_NODE_ID));
}
@Override
public void rebuild() {
removeAll();
createNodes();
}
@Override
public int compareTo(AbstractAdapterBase o) {
if (o instanceof SiteAdapter)
return internalCompareTo(o);
return 0;
}
// disable MVP for version 3.2.0
// @Override
// public IEditorPart openEntryForm(boolean hasPreviousForm) {
// eventBus.fireEvent(new SiteEditEvent(site.getId()));
// return null; // TODO: problem !?
// }
// disable MVP for version 3.2.0
// @Override
// public void openViewForm() {
// eventBus.fireEvent(new SiteViewEvent(site.getId()));
// }
}