Alex: continue sync free process exclude/un-exclude for Guidance
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGeneralSection.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGeneralSection.java
index 57d1ff7..1b183cf 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGeneralSection.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGeneralSection.java
@@ -123,6 +123,8 @@
 	private ILabelProvider labelProvider;
 
 	final boolean ignoreSuppressed = true;
+	
+	private DescriptorPropUtil propUtil = DescriptorPropUtil.getDesciptorPropUtil();
 
 	protected Listener nameDeactivateListener = new Listener() {
 		public void handleEvent(Event e) {
@@ -575,7 +577,7 @@
 
 		// name
 		FormUI.createLabel(toolkit, generalComposite, PropertiesResources.Process_name);
-		if (isSyncFree() && isDescriptor(element)) {
+		if (isSyncFree() && propUtil.isDescriptor(element)) {
 			nameText = FormUI.createText(toolkit, generalComposite, SWT.DEFAULT, 1);
 			Composite buttonComposite = FormUI.createComposite(toolkit, generalComposite, SWT.NONE, 2, true);
 			nameRestoreBtn = FormUI.createButton(toolkit, buttonComposite, PropertiesResources.Process_name_restore);
@@ -587,7 +589,7 @@
 
 		// presentation name
 		FormUI.createLabel(toolkit, generalComposite, PropertiesResources.Activity_presentationName);
-		if (isSyncFree() && isDescriptor(element)) {
+		if (isSyncFree() && propUtil.isDescriptor(element)) {
 			presentationNameText = FormUI.createText(toolkit, generalComposite, SWT.DEFAULT, 1);
 			Composite buttonComposite = FormUI.createComposite(toolkit, generalComposite, SWT.NONE, 2, true);
 			presentationNameRestoreBtn = FormUI.createButton(toolkit, buttonComposite,
@@ -632,15 +634,6 @@
 		return ProcessUtil.isSynFree();
 	}
 	
-	private boolean isDescriptor(BreakdownElement element) {
-		if ((element instanceof TaskDescriptor) || (element instanceof RoleDescriptor)
-				|| (element instanceof WorkProductDescriptor)) {
-			return true;
-		}
-		
-		return false;
-	}
-	
 	private void updateNameRestoreBtn() {
 		if (getReferenceMethodElement(element) != null) {
 			nameRestoreBtn.setEnabled(descriptorPropUtil.isNameRepalce((Descriptor)element));
@@ -853,7 +846,7 @@
 	}
 	
 	private ModifyListener createSyncFreeNameModifyListener() {
-		if (isSyncFree() && isDescriptor(element)) {
+		if (isSyncFree() && propUtil.isDescriptor(element)) {
 			return new SyncFreeNameModifyListener();
 		}
 		
@@ -871,7 +864,7 @@
 	}
 	
 	private ModifyListener createSyncFreePresentationNameModifyListener() {
-		if (isSyncFree() && isDescriptor(element)) {
+		if (isSyncFree() && propUtil.isDescriptor(element)) {
 			return new SyncFreePresentationNameModifyListener();
 		}
 		
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGuidanceSection.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGuidanceSection.java
index 6f58b26..f2f420c 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGuidanceSection.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/BreakdownElementGuidanceSection.java
@@ -44,7 +44,6 @@
 import org.eclipse.epf.uma.Report;
 import org.eclipse.epf.uma.ReusableAsset;
 import org.eclipse.epf.uma.SupportingMaterial;
-import org.eclipse.epf.uma.TaskDescriptor;
 import org.eclipse.epf.uma.Template;
 import org.eclipse.epf.uma.ToolMentor;
 import org.eclipse.epf.uma.UmaPackage;
@@ -99,7 +98,7 @@
 
 	private IFilter generalGuidanceFilter = null;
 
-	
+	private DescriptorPropUtil propUtil = DescriptorPropUtil.getDesciptorPropUtil();
 
 	/**
 	 * Get General guidance filter
@@ -290,9 +289,8 @@
 				List<MethodElement> elements = new ArrayList<MethodElement>();
 				elements.addAll(getSelectedGuidances());
 				
-				if (element instanceof Descriptor) {
-					if (ProcessUtil.isSynFree()
-							&& !DescriptorPropUtil.getDesciptorPropUtil().isNoAutoSyn((Descriptor) element)) {
+				if (propUtil.isDescriptor(element)) {
+					if (isSyncFree() && !propUtil.isNoAutoSyn((Descriptor) element)) {
 						elements.addAll(((Descriptor) element).getGuidanceExclude());
 					}
 				}
@@ -307,7 +305,7 @@
 	protected void initLabelProvider() {		
 		ILabelProvider labelProvider = null;
 		
-		if (isSyncFree() && (element instanceof Descriptor)) {
+		if (propUtil.isDescriptor(element) && isSyncFree()) {
 			labelProvider = new GuidanceSyncFreeLabelProvider(
 					TngAdapterFactory.INSTANCE.getNavigatorView_ComposedAdapterFactory(),
 					(Descriptor)element);  
@@ -319,34 +317,6 @@
 		viewer_1.setLabelProvider(labelProvider);
 	}
 	
-	protected EReference getEReference(Guidance item) {
-		EReference ref = null;
-		
-		if (item instanceof Checklist) {		
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Checklists();		
-		} else if (item instanceof Concept) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Concepts();
-		} else if (item instanceof Example) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Examples();
-		} else if (item instanceof SupportingMaterial) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_SupportingMaterials();
-		} else if (item instanceof Guideline) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Guidelines();
-		} else if (item instanceof ReusableAsset) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_ReusableAssets();
-		}else if (item instanceof Template) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Templates();
-		}else if (item instanceof Report) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Reports();
-		}else if (item instanceof ToolMentor) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Toolmentor();
-		}else if (item instanceof EstimationConsiderations) {
-			ref = UmaPackage.eINSTANCE.getBreakdownElement_Estimationconsiderations();
-		}
-		
-		return ref;
-	}
-
 	/**
 	 * Add listeners
 	 * 
@@ -377,19 +347,41 @@
 					.addSelectionChangedListener(new ISelectionChangedListener() {
 						public void selectionChanged(SelectionChangedEvent event) {
 							IStructuredSelection selection = (IStructuredSelection) viewer_1
-									.getSelection();
-							if ((selection.size() > 0) && editable)
-								ctrl_remove_1.setEnabled(true);
+									.getSelection();							
+							if ((selection.size() > 0) && editable) {
+								if (isSyncFree()) {
+									syncFreeUpdateBtnStatus(selection);
+								} else {
+									ctrl_remove_1.setEnabled(true);
+								}
+							}
 						}
 					});
 
 			ctrl_add_1.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
+					if (propUtil.isDescriptor(element) && isSyncFree()) {
+						IStructuredSelection selection = (IStructuredSelection) viewer_1.getSelection();
+						if (syncFreeAdd(selection)) { 
+							viewer_1.refresh();
+							return;
+						}
+					}
+					
 					IFilter filter = getGeneralGuidanceFilter();
+					List existingElements = null;
+					if (propUtil.isDescriptor(element) && isSyncFree()) {
+						existingElements = getSelectedGuidances();
+						if (! propUtil.isNoAutoSyn((Descriptor)element)) {
+							existingElements.addAll(((Descriptor)element).getGuidanceExclude());
+						}
+					} else {
+						existingElements = getSelectedGuidances();
+					}					
 					ItemsFilterDialog fd = new ItemsFilterDialog(PlatformUI
 							.getWorkbench().getActiveWorkbenchWindow()
 							.getShell(), filter, element,
-							FilterConstants.GUIDANCE, getSelectedGuidances());
+							FilterConstants.GUIDANCE, existingElements);
 
 					fd.setTitle(FilterConstants.GUIDANCE);
 					fd.setInput(UmaUtil.getMethodLibrary((EObject) element));
@@ -403,6 +395,15 @@
 
 			ctrl_remove_1.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
+					if (propUtil.isDescriptor(element) && isSyncFree()) {
+						IStructuredSelection selection = (IStructuredSelection) viewer_1.getSelection();
+						if (syncFreeRemove(selection)) {
+							viewer_1.refresh();
+							ctrl_remove_1.setEnabled(false);
+							return;
+						}							
+					} 
+					
 					IStructuredSelection selection = (IStructuredSelection) viewer_1
 							.getSelection();
 					if (selection.size() > 0) {
@@ -420,25 +421,33 @@
 			});
 		}
 	}
-
+	
+	private void addGuidances(List<Guidance> addItems) {
+		addGuidances(addItems, false);
+	}
+	
 	/**
 	 * Add guidances to the element
 	 * @param addItems
 	 * 				list of guidances to add
 	 */
-	private void addGuidances(List<Guidance> addItems) {
+	private void addGuidances(List<Guidance> addItems, boolean calledForExculded) {
 		// update the model
 		AddGuidanceToBreakdownElementCommand command = new AddGuidanceToBreakdownElementCommand(
-				element, addItems);
+				element, addItems, calledForExculded);
 		actionMgr.execute(command);
 	}
+	
+	private void removeGuidances(List<Guidance> rmItems) {
+		removeGuidances(rmItems, true);
+	}
 
 	/**
 	 * Remove guidances from the element
 	 * @param rmItems
 	 * 				list of guidances to remove
 	 */
-	private void removeGuidances(List<Guidance> rmItems) {
+	private void removeGuidances(List<Guidance> rmItems, boolean localUse) {
 		// update the model
 		if (!rmItems.isEmpty()) {
 			for (Iterator it = rmItems.iterator(); it.hasNext();) {
@@ -490,11 +499,22 @@
 					logger
 							.logError("Can't remove Guidance: " + item.getType().getName() + ":" + item.getName()); //$NON-NLS-1$ //$NON-NLS-2$
 				}
+				
+				if (propUtil.isDescriptor(element) && isSyncFree()) {
+					if (localUse) {
+						actionMgr.doAction(IActionManager.REMOVE, element,
+								UmaPackage.eINSTANCE.getDescriptor_GuidanceAdditional(),
+								item, -1);
+					} else {
+						actionMgr.doAction(IActionManager.ADD, element,
+								UmaPackage.eINSTANCE.getDescriptor_GuidanceExclude(),
+								item, -1);
+					}				
+				}
 			}
 		}
 	}
 
-	
 	/**
 	 * Get selected guidances
 	 * @return
@@ -540,10 +560,74 @@
 		return str;
 	}
 	
-	public boolean isSyncFree() {
+	private boolean isSyncFree() {
 		return ProcessUtil.isSynFree();
 	}
 	
+	protected boolean syncFreeAdd(IStructuredSelection selection) {
+		if (selection.size() == 0) {
+			return false;			
+		} 
+				
+		boolean result = propUtil.CheckSelectionForGuidance(selection.toList(), (Descriptor)element);	
+		
+		if (! result) {
+			return true;
+		}
+		
+		Object testObj = selection.getFirstElement();
+		EReference ref = propUtil.getGuidanceEReference((Guidance)testObj);
+		if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref)) {				
+			addGuidances(selection.toList(), true);
+			return true;
+		} 
+		
+		return false;
+	}
+	
+	protected boolean syncFreeRemove(IStructuredSelection selection) {
+		if (selection.size() == 0) {
+			return true;			
+		} 
+		
+		boolean result = propUtil.CheckSelectionForGuidance(selection.toList(), (Descriptor)element);
+		if (! result) {
+			return true;
+		}
+
+		Object testObj = selection.getFirstElement();
+		EReference ref = propUtil.getGuidanceEReference((Guidance)testObj);		
+		if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref)) {
+			return true;
+		} 
+		
+		if (propUtil.isGuidanceDynamic(testObj, (Descriptor)element)) {
+			removeGuidances(selection.toList(), false);
+			return true;
+		} 
+				
+		return false;
+	}
+	
+	protected void syncFreeUpdateBtnStatus(IStructuredSelection selection) {		
+		boolean result = propUtil.CheckSelectionForGuidance(selection.toList(), (Descriptor)element);
+		
+		if (!result) {
+			ctrl_add_1.setEnabled(false);
+			ctrl_remove_1.setEnabled(false);
+		} else {
+			Object testObj = selection.getFirstElement();
+			EReference ref = propUtil.getGuidanceEReference((Guidance)testObj);
+			if (propUtil.isDynamicAndExclude(testObj, (Descriptor)element, ref)) {
+				ctrl_add_1.setEnabled(true);
+				ctrl_remove_1.setEnabled(false);
+			} else {
+				ctrl_add_1.setEnabled(true);
+				ctrl_remove_1.setEnabled(true);
+			}
+		}		
+	}
+	
 	class GuidanceSyncFreeLabelProvider extends AdapterFactoryLabelProvider implements ITableFontProvider {
 		private FontRegistry registry = new FontRegistry();
 		private DescriptorPropUtil propUtil = DescriptorPropUtil.getDesciptorPropUtil();
@@ -561,9 +645,7 @@
 	    		systemFont = Display.getCurrent().getSystemFont();
 	    	}
 	    	
-	    	EReference ref = getEReference((Guidance)obj);
-	    	
-	    	if (propUtil.isDynamic(obj, desc, ref)) {
+	    	if (propUtil.isGuidanceDynamic(obj, desc)) {
 	    		return registry.getBold(systemFont.getFontData()[0].getName());    		
 	    	}
 	    	
@@ -573,7 +655,7 @@
 	    public String getColumnText(Object obj, int columnIndex) {
 	    	String original = super.getColumnText(obj, columnIndex);
 	    	
-	    	EReference ref = getEReference((Guidance)obj);
+	    	EReference ref = propUtil.getGuidanceEReference((Guidance)obj);
 	    	
 	    	if (propUtil.isDynamicAndExclude(obj, desc, ref)) {
 	    		return "<<<" + original + ">>>";	    		 //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/RelationSection.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/RelationSection.java
index 8eee6d8..b7bf1f0 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/RelationSection.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/RelationSection.java
@@ -1055,7 +1055,7 @@
 		
 	}
 			
-	public boolean isSyncFree() {
+	protected boolean isSyncFree() {
 		return ProcessUtil.isSynFree();
 	}
 	
diff --git a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/WorkProductDescriptorGeneralSection.java b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/WorkProductDescriptorGeneralSection.java
index f255fea..fe3f510 100644
--- a/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/WorkProductDescriptorGeneralSection.java
+++ b/1.5/plugins/org.eclipse.epf.authoring.ui/src/org/eclipse/epf/authoring/ui/properties/WorkProductDescriptorGeneralSection.java
@@ -759,6 +759,11 @@
 									UmaPackage.eINSTANCE
 											.getWorkProductDescriptor_DeliverableParts(),
 									(WorkProductDescriptor) obj, -1);
+					
+					if (isSyncFree()) {
+						propUtil.removeLocalUse((Descriptor)obj, element,
+								UmaPackage.eINSTANCE.getWorkProductDescriptor_DeliverableParts());
+					}
 				}
 
 				// find matching deliverable parts
@@ -945,7 +950,7 @@
 		return false;
 	}
 	
-	public boolean isSyncFree() {
+	private boolean isSyncFree() {
 		return ProcessUtil.isSynFree();
 	}
 	
diff --git a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/AddGuidanceToBreakdownElementCommand.java b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/AddGuidanceToBreakdownElementCommand.java
index 2772ac9..aeffe07 100644
--- a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/AddGuidanceToBreakdownElementCommand.java
+++ b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/process/command/AddGuidanceToBreakdownElementCommand.java
@@ -17,11 +17,13 @@
 import java.util.List;
 
 import org.eclipse.epf.library.edit.LibraryEditPlugin;
+import org.eclipse.epf.library.edit.util.DescriptorPropUtil;
 import org.eclipse.epf.library.edit.util.TngUtil;
 import org.eclipse.epf.uma.Activity;
 import org.eclipse.epf.uma.BreakdownElement;
 import org.eclipse.epf.uma.Checklist;
 import org.eclipse.epf.uma.Concept;
+import org.eclipse.epf.uma.Descriptor;
 import org.eclipse.epf.uma.EstimationConsiderations;
 import org.eclipse.epf.uma.Example;
 import org.eclipse.epf.uma.Guidance;
@@ -46,13 +48,22 @@
 	private BreakdownElement brElement;
 
 	private Collection modifiedResources;
-
+	
+	private boolean calledForExculded = false;
+	
+	private DescriptorPropUtil propUtil = DescriptorPropUtil.getDesciptorPropUtil();
+	
 	public AddGuidanceToBreakdownElementCommand(BreakdownElement brElement, List<Guidance> guidances) {
+		this(brElement, guidances, false);
+	}
+
+	public AddGuidanceToBreakdownElementCommand(BreakdownElement brElement, List<Guidance> guidances, boolean calledForExculded) {
 
 		super(TngUtil.getOwningProcess(brElement));
 
 		this.guidances = guidances;
 		this.brElement = brElement;
+		this.calledForExculded = calledForExculded;
 
 		this.modifiedResources = new HashSet();
 	}
@@ -115,6 +126,14 @@
 					}
 				}
 			}
+			
+			if (propUtil.isDescriptor(brElement)) {
+				if (calledForExculded) {
+					((Descriptor)brElement).getGuidanceExclude().removeAll(guidances);					
+				} else {
+					((Descriptor)brElement).getGuidanceAdditional().addAll(guidances);
+				}
+			}
 		}
 	}
 
@@ -164,6 +183,14 @@
 					}
 				}
 			}
+			
+			if (propUtil.isDescriptor(brElement)) {
+				if (calledForExculded) {
+					((Descriptor)brElement).getGuidanceExclude().addAll(guidances);					
+				} else {
+					((Descriptor)brElement).getGuidanceAdditional().removeAll(guidances);
+				}
+			}
 		}
 	}
 
diff --git a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/util/DescriptorPropUtil.java b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/util/DescriptorPropUtil.java
index 245787b..2c9f88e 100644
--- a/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/util/DescriptorPropUtil.java
+++ b/1.5/plugins/org.eclipse.epf.library.edit/src/org/eclipse/epf/library/edit/util/DescriptorPropUtil.java
@@ -7,11 +7,26 @@
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.epf.library.edit.LibraryEditPlugin;
 import org.eclipse.epf.library.edit.command.IActionManager;
+import org.eclipse.epf.uma.BreakdownElement;
+import org.eclipse.epf.uma.Checklist;
+import org.eclipse.epf.uma.Concept;
 import org.eclipse.epf.uma.Descriptor;
 import org.eclipse.epf.uma.DescriptorDescription;
+import org.eclipse.epf.uma.EstimationConsiderations;
+import org.eclipse.epf.uma.Example;
+import org.eclipse.epf.uma.Guidance;
+import org.eclipse.epf.uma.Guideline;
 import org.eclipse.epf.uma.MethodConfiguration;
 import org.eclipse.epf.uma.MethodElement;
+import org.eclipse.epf.uma.Report;
+import org.eclipse.epf.uma.ReusableAsset;
+import org.eclipse.epf.uma.RoleDescriptor;
+import org.eclipse.epf.uma.SupportingMaterial;
+import org.eclipse.epf.uma.TaskDescriptor;
+import org.eclipse.epf.uma.Template;
+import org.eclipse.epf.uma.ToolMentor;
 import org.eclipse.epf.uma.UmaPackage;
+import org.eclipse.epf.uma.WorkProductDescriptor;
 
 public class DescriptorPropUtil extends MethodElementPropUtil {
 	
@@ -325,6 +340,23 @@
 		return false;
 	}
 	
+	public boolean isGuidanceDynamic(Object obj, Descriptor desc) {
+		if (ProcessUtil.isSynFree()) {
+			EReference aRef = UmaPackage.eINSTANCE.getDescriptor_GuidanceAdditional();
+			
+			List<MethodElement> listValue = (List<MethodElement> )desc.eGet(aRef);
+		    if (listValue == null) {
+		    	return false;
+		    }
+		    
+		    if (!listValue.contains(obj)) {
+		    	return true;		    	
+		    }
+		}
+		
+		return false;
+	}
+	
 	/**
 	 * 
 	 * Check all the elements in list, to see if contains elements with
@@ -358,6 +390,32 @@
 		return true;		
 	}
 	
+	public boolean CheckSelectionForGuidance(List list, Descriptor desc) {
+		int dynamic = 0;
+		int dynamicExclude = 0;
+		int local = 0;
+		
+		for (int i = 0; i < list.size(); i++) {
+			MethodElement des = (MethodElement) list.get(i);
+			EReference ref = getGuidanceEReference((Guidance)des);
+			if (isDynamicAndExclude(des, desc, ref)) {
+				dynamicExclude ++;
+			} else if (isGuidanceDynamic(des, desc)) {
+				dynamic ++;
+			} else {
+				local ++;
+			}
+		}
+		
+		if (((dynamic > 0) && (dynamicExclude > 0))
+			|| ((dynamic > 0) && (local > 0))
+			|| ((local > 0) && (dynamicExclude > 0))) {
+			return false;
+		}
+		
+		return true;
+	}
+	
 	public Descriptor getGreenParentDescriptor(Descriptor des) {
 		String guid = getGreenParent(des);
 		if (guid == null) {
@@ -544,5 +602,41 @@
 		return LibraryEditUtil.getInstance().isDynamic(obj, desc, ref, config);
 	}
 	
+	public boolean isDescriptor(BreakdownElement element) {
+		if ((element instanceof TaskDescriptor) || (element instanceof RoleDescriptor)
+				|| (element instanceof WorkProductDescriptor)) {
+			return true;
+		}
+		
+		return false;
+	}
+	
+	public EReference getGuidanceEReference(Guidance item) {
+		EReference ref = null;
+		
+		if (item instanceof Checklist) {		
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Checklists();		
+		} else if (item instanceof Concept) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Concepts();
+		} else if (item instanceof Example) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Examples();
+		} else if (item instanceof SupportingMaterial) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_SupportingMaterials();
+		} else if (item instanceof Guideline) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Guidelines();
+		} else if (item instanceof ReusableAsset) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_ReusableAssets();
+		}else if (item instanceof Template) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Templates();
+		}else if (item instanceof Report) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Reports();
+		}else if (item instanceof ToolMentor) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Toolmentor();
+		}else if (item instanceof EstimationConsiderations) {
+			ref = UmaPackage.eINSTANCE.getBreakdownElement_Estimationconsiderations();
+		}
+		
+		return ref;
+	}
 	
 }
\ No newline at end of file