blob: 3296f022f1921f1cbe05fbb38bc9cd3858c9bbe8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.osee.ats.workflow.editor.model;
import java.util.List;
import java.util.logging.Level;
import org.eclipse.osee.ats.internal.AtsPlugin;
import org.eclipse.osee.ats.util.AtsUtil;
import org.eclipse.osee.ats.workdef.StateDefinition;
import org.eclipse.osee.ats.workflow.item.AtsWorkDefinitions;
import org.eclipse.osee.ats.workflow.page.AtsCancelledWorkPageDefinition;
import org.eclipse.osee.ats.workflow.page.AtsCompletedWorkPageDefinition;
import org.eclipse.osee.framework.core.enums.CoreAttributeTypes;
import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
import org.eclipse.osee.framework.ui.plugin.util.Result;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkItemDefinitionFactory;
import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;
/**
* A rectangular shape.
*
* @author Donald G. Dunne
*/
public class WorkPageShape extends RectangleShape {
private static final String[] attributeProperties = new String[] { //
CoreAttributeTypes.WorkPageName.getName(), //
CoreAttributeTypes.WorkId.getName(), //
CoreAttributeTypes.WorkParentId.getName(),//
};
private final StateDefinition workPageDefinition;
public final static String START_PAGE = "Start Page";
private Artifact artifact;
public static enum StartPageEnum {
Yes,
No
};
public WorkPageShape() {
// this(new WorkPageDefinition("New" + AtsUtil.getAtsDeveloperIncrementingNum(), "NEW", null, WorkPageType.Working,
// AtsUtil.getAtsDeveloperIncrementingNum()));
this(new StateDefinition("New" + AtsUtil.getAtsDeveloperIncrementingNum()));
}
public WorkPageShape(StateDefinition workPageDefinition) {
this.workPageDefinition = workPageDefinition;
// try {
// // artifact = WorkItemDefinitionFactory.getWorkItemDefinitionArtifact(workPageDefinition.getId());
// } catch (OseeCoreException ex) {
// OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
// }
}
@Override
public void setWorkflowDiagram(WorkflowDiagram workflowDiagram) {
super.setWorkflowDiagram(workflowDiagram);
if (getId().equals("NEW")) {
setPropertyValue(
CoreAttributeTypes.WorkId.getName(),
workflowDiagram.getWorkFlowDefinition().getName() + "." + getPropertyValue(CoreAttributeTypes.WorkPageName.getName()));
}
}
@Override
protected void initializePropertyDescriptors(List<IPropertyDescriptor> descriptorList) {
super.initializePropertyDescriptors(descriptorList);
for (String type : attributeProperties) {
descriptorList.add(new TextPropertyDescriptor(type, type)); // id and description pair
}
descriptorList.add(new ComboBoxPropertyDescriptor(START_PAGE, START_PAGE, new String[] {
StartPageEnum.Yes.name(),
StartPageEnum.No.name()}));
}
@Override
protected void initializePropertyValues() throws OseeCoreException {
if (propertyValues == null) {
super.initializePropertyValues();
super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), workPageDefinition.getPageName());
super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), workPageDefinition.getName());
super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(),
workPageDefinition.getName() == null ? "" : workPageDefinition.getName());
}
}
public boolean isStartPage() {
if (getPropertyValue(START_PAGE) == null) {
return false;
}
return (Integer) getPropertyValue(START_PAGE) == StartPageEnum.Yes.ordinal();
}
public void setStartPage(boolean set) {
setPropertyValue(START_PAGE, set ? StartPageEnum.Yes.ordinal() : StartPageEnum.No.ordinal());
}
@Override
public Object getPropertyValue(Object propertyId) {
try {
initializePropertyValues();
} catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
return super.getPropertyValue(propertyId);
}
public Artifact getArtifact() {
return artifact;
}
/**
* @return the workPageDefinition
*/
public StateDefinition getWorkPageDefinition() {
return workPageDefinition;
}
@Override
public Result validForSave() {
try {
String pageName = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
if (!Strings.isValid(pageName)) {
return new Result(CoreAttributeTypes.WorkPageName.getName() + " can not be null");
}
String pageId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
if (!Strings.isValid(pageId)) {
return new Result(CoreAttributeTypes.WorkId.getName() + " can not be null");
}
String parentPageId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName());
if (Strings.isValid(parentPageId) && WorkItemDefinitionFactory.getWorkItemDefinition(parentPageId) == null) {
return new Result("Parent Id " + parentPageId + " Work Page Definition must exist and does not.");
}
} catch (OseeCoreException ex) {
return new Result("Exception in validation " + ex.getLocalizedMessage());
}
return Result.TrueResult;
}
public boolean isInstanceof(String workPageDefinitionId) throws OseeCoreException {
return isInstanceofRecurse(workPageDefinition, workPageDefinitionId);
}
@SuppressWarnings("unused")
private boolean isInstanceofRecurse(StateDefinition workPageDefinition, String workPageDefinitionId) throws OseeCoreException {
if (workPageDefinition.getName().equals(workPageDefinitionId)) {
return true;
}
// if (workPageDefinition.getParent() != null) {
// return isInstanceofRecurse((StateDefinition) workPageDefinition.getParent(), workPageDefinitionId);
// }
return false;
}
public boolean isCancelledState() throws OseeCoreException {
return isInstanceof(AtsCancelledWorkPageDefinition.ID);
}
public boolean isCompletedState() throws OseeCoreException {
return isInstanceof(AtsCompletedWorkPageDefinition.ID);
}
@Override
public String getName() {
return (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
}
@Override
public String getToolTip() {
return workPageDefinition.toString();
}
@Override
public String toString() {
return getId();
}
public String getId() {
return (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof WorkPageShape) {
return ((WorkPageShape) obj).getId().equals(getId());
}
return super.equals(obj);
}
@Override
public int hashCode() {
return getId().hashCode();
}
@Override
public void setPropertyValue(Object propertyId, Object value) {
try {
initializePropertyValues();
if (CoreAttributeTypes.WorkPageName.getName().equals(propertyId)) {
super.setPropertyValue(CoreAttributeTypes.WorkPageName.getName(), value);
firePropertyChange(CoreAttributeTypes.WorkPageName.getName(), null, value);
setPropertyValue(CoreAttributeTypes.WorkId.getName(),
getWorkflowDiagram().getWorkFlowDefinition().getName() + "." + value);
} else if (CoreAttributeTypes.WorkId.getName().equals(propertyId)) {
super.setPropertyValue(CoreAttributeTypes.WorkId.getName(), value);
firePropertyChange(CoreAttributeTypes.WorkId.getName(), null, value);
} else if (CoreAttributeTypes.WorkParentId.getName().equals(propertyId)) {
super.setPropertyValue(CoreAttributeTypes.WorkParentId.getName(), value);
firePropertyChange(CoreAttributeTypes.WorkParentId.getName(), null, value);
} else if (START_PAGE.equals(propertyId)) {
super.setPropertyValue(START_PAGE, value);
firePropertyChange(START_PAGE, null, value);
} else {
super.setPropertyValue(propertyId, value);
}
} catch (OseeCoreException ex) {
OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
}
@Override
public Result doSave(SkynetTransaction transaction) throws OseeCoreException {
String name = (String) getPropertyValue(CoreAttributeTypes.WorkPageName.getName());
String workId = (String) getPropertyValue(CoreAttributeTypes.WorkId.getName());
String parentWorkId = (String) getPropertyValue(CoreAttributeTypes.WorkParentId.getName());
workPageDefinition.setName(name);
Artifact artifact = getArtifact();
if (artifact == null) {
// artifact = workPageDefinition.toArtifact(WriteType.New);
} else {
artifact.setSoleAttributeValue(CoreAttributeTypes.WorkPageName, name);
artifact.setSoleAttributeValue(CoreAttributeTypes.WorkId, workId);
if (!Strings.isValid(parentWorkId)) {
artifact.deleteSoleAttribute(CoreAttributeTypes.WorkParentId);
} else {
artifact.setSoleAttributeValue(CoreAttributeTypes.WorkParentId, parentWorkId);
}
}
artifact.setName(workId);
AtsWorkDefinitions.addUpdateWorkItemToDefaultHeirarchy(artifact, transaction);
// WorkItemDefinitionFactory.deCache(workPageDefinition);
artifact.persist(transaction);
return Result.TrueResult;
}
}