Alex: RATLC00421590 [RFE_WPState] Make sure Activity Detail Diagram appends the right states assigned in the processes
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/AuthoringUIResources.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/AuthoringUIResources.java
index 67af795..5c91f97 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/AuthoringUIResources.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/AuthoringUIResources.java
@@ -1606,6 +1606,8 @@
 	public static String WPCompartmentFigure_0;
 
 	public static String promptfor_publish_unopen_activitydd_text;
+	
+	public static String use_state_on_workproduct_text;
 
 	public static String prompt_for_publish_extend_activity_diagram;
 
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/Resources.properties b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/Resources.properties
index e998640..aef80bb 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/Resources.properties
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/Resources.properties
@@ -1025,6 +1025,7 @@
 WPCompartmentFigure_0=New WorkProduct Descriptor
 promptfor_publish_unopen_activitydd_text=Publish activity detail diagrams that have not been created in process editor
 prompt_for_publish_extend_activity_diagram=Publish activity diagrams for unmodified activity extensions
+use_state_on_workproduct_text=Use individual states on work product
 
 #ConfigProcessViewDialog
 ConfigProcessViewDialog_NamePattern=Name patterns (matching names will be shown):
diff --git a/1.5/plugins/org.eclipse.epf.diagram.model/META-INF/MANIFEST.MF b/1.5/plugins/org.eclipse.epf.diagram.model/META-INF/MANIFEST.MF
index dbcae09..cf609f6 100644
--- a/1.5/plugins/org.eclipse.epf.diagram.model/META-INF/MANIFEST.MF
+++ b/1.5/plugins/org.eclipse.epf.diagram.model/META-INF/MANIFEST.MF
@@ -9,9 +9,11 @@
  org.eclipse.core.runtime,
  org.eclipse.draw2d,
  org.eclipse.emf.transaction,
- org.eclipse.emf.workspace
+ org.eclipse.emf.workspace,
+ org.eclipse.epf.common.ui
 Eclipse-LazyStart: true
 Export-Package: org.eclipse.epf.diagram.model,
  org.eclipse.epf.diagram.model.impl,
  org.eclipse.epf.diagram.model.util
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Activator: org.eclipse.epf.diagram.model.util.DiagramModelPlugin
diff --git a/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/impl/ActivityDetailDiagramImpl.java b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/impl/ActivityDetailDiagramImpl.java
index 8201e6c..a233e34 100644
--- a/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/impl/ActivityDetailDiagramImpl.java
+++ b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/impl/ActivityDetailDiagramImpl.java
@@ -21,6 +21,7 @@
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.edit.provider.AdapterFactoryTreeIterator;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
@@ -34,6 +35,7 @@
 import org.eclipse.epf.diagram.model.TaskNode;
 import org.eclipse.epf.diagram.model.WorkProductComposite;
 import org.eclipse.epf.diagram.model.WorkProductDescriptorNode;
+import org.eclipse.epf.diagram.model.util.DiagramModelPreference;
 import org.eclipse.epf.diagram.model.util.GraphicalDataHelper;
 import org.eclipse.epf.diagram.model.util.IActivityDetailDiagramChangeListener;
 import org.eclipse.epf.diagram.model.util.IAdapterFactoryFilter;
@@ -44,14 +46,17 @@
 import org.eclipse.epf.library.edit.process.IBSItemProvider;
 import org.eclipse.epf.library.edit.util.ConfigurableComposedAdapterFactory;
 import org.eclipse.epf.library.edit.util.ProcessUtil;
+import org.eclipse.epf.library.edit.util.TaskDescriptorPropUtil;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.uma.Activity;
 import org.eclipse.epf.uma.Artifact;
 import org.eclipse.epf.uma.BreakdownElement;
+import org.eclipse.epf.uma.Constraint;
 import org.eclipse.epf.uma.Descriptor;
 import org.eclipse.epf.uma.MethodElement;
 import org.eclipse.epf.uma.RoleDescriptor;
 import org.eclipse.epf.uma.TaskDescriptor;
+import org.eclipse.epf.uma.UmaPackage;
 import org.eclipse.epf.uma.WorkProduct;
 import org.eclipse.epf.uma.WorkProductDescriptor;
 import org.eclipse.epf.uma.util.AssociationHelper;
@@ -1037,6 +1042,12 @@
 	}
 	
 	private void setState(int type, Node node) {
+		TaskDescriptor td = null;
+		
+		if (node instanceof WorkProductComposite) {
+			td = (TaskDescriptor)((WorkProductComposite)node).getLinkedElement();
+		}
+		
 		if (node instanceof NodeContainer) {
 			for (Node element : ((NodeContainer)node).getNodes()) {
 				if (element instanceof WorkProductDescriptorNode) {
@@ -1044,10 +1055,29 @@
 					MethodElement methodElement = wpNode.getLinkedElement();
 					if (methodElement instanceof WorkProductDescriptor){
 						String stateText = null;
-						if (type == WorkProductComposite.INPUTS)
-							stateText = ((WorkProductDescriptor) methodElement).getActivityEntryState();
-						else if (type == WorkProductComposite.OUTPUTS)
-							stateText = ((WorkProductDescriptor) methodElement).getActivityExitState();
+
+						boolean useNewWorkproductState = DiagramModelPreference.getUseStateOnWorkproduct();
+						if (useNewWorkproductState) {
+							WorkProductDescriptor wpd = (WorkProductDescriptor)methodElement;
+							EReference ref = null;
+							
+							if (type == WorkProductComposite.INPUTS) {
+								ref = UmaPackage.eINSTANCE.getTaskDescriptor_MandatoryInput();
+							} else if (type == WorkProductComposite.OUTPUTS) {
+								ref = UmaPackage.eINSTANCE.getTaskDescriptor_Output();
+							}
+							
+							List<Constraint> states = TaskDescriptorPropUtil.getTaskDescriptorPropUtil().getWpStates(td, wpd, ref);
+							if (states.size() > 0) {
+								stateText = states.get(0).getBody();
+							}							
+						} else {
+							if (type == WorkProductComposite.INPUTS)
+								stateText = ((WorkProductDescriptor) methodElement).getActivityEntryState();
+							else if (type == WorkProductComposite.OUTPUTS)
+								stateText = ((WorkProductDescriptor) methodElement).getActivityExitState();							
+						}
+						
 						wpNode.setState(stateText);
 					}					
 				}
diff --git a/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPlugin.java b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPlugin.java
new file mode 100644
index 0000000..22fb884
--- /dev/null
+++ b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPlugin.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+* Licensed Materials - Property of IBM
+* (c) Copyright IBM Corporation 2007,2009. All Rights Reserved.
+*
+* Note to U.S. Government Users Restricted Rights:
+* Use, duplication or disclosure restricted by GSA ADP Schedule
+* Contract with IBM Corp. 
+*******************************************************************************/
+
+package org.eclipse.epf.diagram.model.util;
+
+import org.eclipse.epf.common.ui.AbstractPlugin;
+
+public class DiagramModelPlugin extends AbstractPlugin {
+	public static final String PLUGIN_ID = "org.eclipse.epf.diagram.model"; //$NON-NLS-1$
+	
+	private static DiagramModelPlugin plugin;
+	
+	public DiagramModelPlugin() {
+		plugin = this;
+	}
+	
+	public static DiagramModelPlugin getDefault() {
+		return plugin;
+	}
+	
+	public static String getPluginId() {
+		return PLUGIN_ID;
+	}
+
+}
diff --git a/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPreference.java b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPreference.java
new file mode 100644
index 0000000..1702291
--- /dev/null
+++ b/1.5/plugins/org.eclipse.epf.diagram.model/src/org/eclipse/epf/diagram/model/util/DiagramModelPreference.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+* Licensed Materials - Property of IBM
+* (c) Copyright IBM Corporation 2007,2009. All Rights Reserved.
+*
+* Note to U.S. Government Users Restricted Rights:
+* Use, duplication or disclosure restricted by GSA ADP Schedule
+* Contract with IBM Corp. 
+*******************************************************************************/
+
+package org.eclipse.epf.diagram.model.util;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+public class DiagramModelPreference {
+	private static final String USE_STATE_ON_WORKPRODUCT = "Use_State_on_Workproduct";  //$NON-NLS-1$
+	
+	private static IPreferenceStore prefStore = DiagramModelPlugin.getDefault().getPreferenceStore();
+	
+	static {
+		prefStore.setDefault(USE_STATE_ON_WORKPRODUCT, false);
+	}
+	
+	public static void setUseStateOnWorkproduct(boolean enabled) {
+		prefStore.setValue(USE_STATE_ON_WORKPRODUCT, enabled);
+	}
+
+	public static boolean getUseStateOnWorkproduct() {
+		return prefStore.getBoolean(USE_STATE_ON_WORKPRODUCT);
+	}
+	
+}
diff --git a/1.5/plugins/org.eclipse.epf.publishing.ui/src/org/eclipse/epf/publishing/ui/preferences/ActivityDiagramPreferencePage.java b/1.5/plugins/org.eclipse.epf.publishing.ui/src/org/eclipse/epf/publishing/ui/preferences/ActivityDiagramPreferencePage.java
index 2593362..fdaa03f 100644
--- a/1.5/plugins/org.eclipse.epf.publishing.ui/src/org/eclipse/epf/publishing/ui/preferences/ActivityDiagramPreferencePage.java
+++ b/1.5/plugins/org.eclipse.epf.publishing.ui/src/org/eclipse/epf/publishing/ui/preferences/ActivityDiagramPreferencePage.java
@@ -14,6 +14,7 @@
 import org.eclipse.epf.authoring.ui.AuthoringUIResources;
 import org.eclipse.epf.authoring.ui.preferences.AuthoringUIPreferences;
 import org.eclipse.epf.common.utils.StrUtil;
+import org.eclipse.epf.diagram.model.util.DiagramModelPreference;
 import org.eclipse.epf.library.ui.LibraryUIPlugin;
 import org.eclipse.epf.library.ui.preferences.LibraryUIPreferences;
 import org.eclipse.epf.publishing.ui.PublishingUIPlugin;
@@ -56,6 +57,8 @@
 	private Button ctrl_publish_ad_for_activity_extension;
 
 	private Text tasksPerRowText;
+	
+	private Button ctrl_use_state_on_workproduct;
 
 	public ActivityDiagramPreferencePage() {
 		super();
@@ -87,6 +90,11 @@
 		createLabel(activityDetailDiagramGroup,
 				AuthoringUIResources.add_TasksperRow);
 		tasksPerRowText = createEditableText(activityDetailDiagramGroup, ""); //$NON-NLS-1$
+		
+		ctrl_use_state_on_workproduct = createCheckbox(
+				activityDetailDiagramGroup,
+				AuthoringUIResources.use_state_on_workproduct_text,
+				2);
 
 		initializeValues();
 
@@ -142,6 +150,8 @@
 		LibraryUIPreferences
 				.setPublishADForActivityExtension(ctrl_publish_ad_for_activity_extension
 						.getSelection());
+		
+		DiagramModelPreference.setUseStateOnWorkproduct(ctrl_use_state_on_workproduct.getSelection());
 	}
 
 	private void initializeDefaults() {
@@ -151,6 +161,8 @@
 
 		tasksPerRowText.setText(String.valueOf(AuthoringUIPreferences
 				.getDefaultADDTasksPerRow()));
+		
+		ctrl_use_state_on_workproduct.setSelection(false);
 	}
 
 	/**
@@ -165,6 +177,8 @@
 
 		tasksPerRowText.setText(String.valueOf(AuthoringUIPreferences
 				.getADD_TasksPerRow()));
+		
+		ctrl_use_state_on_workproduct.setSelection(DiagramModelPreference.getUseStateOnWorkproduct());
 	}
 
 	/*