| package org.eclipse.epf.library.edit.util; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.emf.common.command.Command; |
| import org.eclipse.epf.library.edit.command.IActionManager; |
| import org.eclipse.epf.library.edit.command.MethodElementSetPropertyCommand; |
| import org.eclipse.epf.library.edit.meta.ReferenceTable; |
| import org.eclipse.epf.library.edit.uma.ExtendReferenceMap; |
| import org.eclipse.epf.library.edit.uma.MethodElementExt; |
| import org.eclipse.epf.uma.ContentDescription; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.Practice; |
| import org.eclipse.epf.uma.VariabilityElement; |
| import org.eclipse.epf.uma.VariabilityType; |
| import org.eclipse.epf.uma.WorkProductDescriptor; |
| import org.eclipse.epf.uma.util.ExtendedAttribute; |
| import org.eclipse.epf.uma.util.ExtendedReference; |
| import org.eclipse.epf.uma.util.ExtendedTable; |
| import org.eclipse.epf.uma.util.ModifiedTypeMeta; |
| import org.eclipse.epf.uma.util.UmaUtil; |
| import org.eclipse.epf.uma.util.UserDefinedTypeMeta; |
| |
| public class PropUtil extends MethodElementPropUtil { |
| |
| public static final String Me_mdtData = "me_mdtData"; //$NON-NLS-1$ |
| public static final String Me_customize = "me_customize"; //$NON-NLS-1$ |
| public static final String Me_edited = "me_edited"; //$NON-NLS-1$ |
| public static final String Me_attribute_ = "me_attribute_"; //$NON-NLS-1$ |
| public static final String Me_table_ = "me_table_"; //$NON-NLS-1$ |
| public static final String Me_linkedElement = "me_linkedElement"; //$NON-NLS-1$ |
| public static final String me_ContibutionOrder = "me_ContributionOrder"; //$NON-NLS-1$ |
| |
| public static final String Pkg_loadCheck = "pkg_loadCheck"; //$NON-NLS-1$ |
| |
| private static PropUtil propUtil = new PropUtil(); |
| public static PropUtil getPropUtil(IActionManager actionManager) { |
| return new PropUtil(actionManager); |
| } |
| |
| public static PropUtil getPropUtil() { |
| return propUtil; |
| } |
| |
| protected PropUtil() { |
| } |
| |
| protected PropUtil(IActionManager actionManager) { |
| super(actionManager); |
| } |
| |
| public String getContributionOrder(MethodElement element) { |
| String value = getStringValue(element, me_ContibutionOrder); |
| return value == null ? null : value.trim(); |
| } |
| |
| public void setContributionOrder(MethodElement element, String value) { |
| setStringValue(element, me_ContibutionOrder, value); |
| } |
| |
| public MethodElement getLinkedElement(MethodElement element) { |
| return getElement(element, Me_linkedElement); |
| } |
| |
| public void setLinkedElement(MethodElement element, MethodElement value) { |
| setElement(element, Me_linkedElement, value); |
| } |
| |
| public ReferenceTable retrieveExtendedTable(MethodElement element, ExtendedTable tableMeta) { |
| if (tableMeta == null) { |
| return null; |
| } |
| String value = getStringValue(element, Me_table_ + tableMeta.getGlobalId()); |
| ReferenceTable table = new ReferenceTable(element, tableMeta, value); |
| return table; |
| } |
| |
| public ReferenceTable getReferenceTable(MethodElement element, ExtendedTable tableMeta, boolean modified) { |
| ExtendReferenceMap map = getExtendReferenceMap(element, modified); |
| return map == null ? null : map.getReferenceTable(tableMeta); |
| } |
| |
| public void setReferenceTableProp(ReferenceTable table) { |
| setStringValue(table.getElement(), Me_table_ + table.getMeta().getGlobalId(), table.getGuidListString()); |
| } |
| |
| public String getExtendedAttribute(ContentDescription content, ExtendedAttribute att) { |
| String value = getStringValue(content, Me_attribute_ + att.getGlobalId()); |
| return value; |
| } |
| |
| public void setExtendedAttribute(ContentDescription content, ExtendedAttribute att, String value) { |
| setStringValue(content, Me_attribute_ + att.getGlobalId(), value); |
| } |
| |
| public static Command getSetExtendedAttributeCommand(ContentDescription content, ExtendedAttribute att, String value) { |
| return new MethodElementSetPropertyCommand(content, Me_attribute_ + att.getGlobalId(), value); |
| } |
| |
| public boolean isCustomize(MethodElement element) { |
| Boolean value = getBooleanValue(element, Me_customize); |
| return value == null ? false : value.booleanValue(); |
| } |
| |
| public void setCustomize(MethodElement element, boolean b) { |
| setBooleanValue(element, Me_customize, b); |
| } |
| |
| public MethodElement getCustomizeParent(MethodElement element) { |
| if (! (element instanceof VariabilityElement)) { |
| return null; |
| } |
| VariabilityElement v = (VariabilityElement) element; |
| if (v.getVariabilityType() != VariabilityType.EXTENDS_REPLACES) { |
| return null; |
| } |
| if (! isCustomize(element)) { |
| return null; |
| } |
| return v.getVariabilityBasedOnElement(); |
| } |
| |
| public boolean isEdited(MethodElement element) { |
| Boolean value = getBooleanValue(element, Me_edited); |
| return value == null ? false : value.booleanValue(); |
| } |
| |
| public void setEdited(MethodElement element, boolean b) { |
| setBooleanValue(element, Me_edited, b); |
| } |
| |
| public List<MethodElement> getExtendedReferenceList(MethodElement element, ExtendedReference meta, boolean toModify) { |
| List<MethodElement> value = (List<MethodElement>) getReferenceValue(meta.getGlobalId(), element, toModify); |
| if (value == null) { |
| return new ArrayList<MethodElement>(); |
| } |
| if (! toModify) { |
| return UmaUtil.filterOutUnresolved(value); |
| } |
| return value; |
| } |
| |
| private static String umaTypeScope = "org.eclipse.epf.uma."; //$NON-NLS-1$ |
| public ModifiedTypeMeta getGlobalMdtMeta(MethodElement element) { |
| if (element == null) { |
| return null; |
| } |
| String id = umaTypeScope + element.eClass().getName(); |
| if (element instanceof Practice) { |
| PracticePropUtil practicePropUtil = PracticePropUtil.getPracticePropUtil(); |
| Practice practice = (Practice) element; |
| UserDefinedTypeMeta udtMeta = practicePropUtil.getUdtMeta(practice); |
| if (udtMeta != null) { |
| id = udtMeta.getTypeId(); |
| } |
| } |
| ModifiedTypeMeta meta = LibraryEditUtil.getInstance().getModifiedType(id); |
| return meta; |
| } |
| |
| private static class PropXmlEditUtil extends XmlEditUtil { |
| private MethodElement element; |
| public static final String _id = "id"; //$NON-NLS-1$ |
| |
| public PropXmlEditUtil(MethodElement element, MethodElementPropUtil propUtil) { |
| super(propUtil); |
| this.element = element; |
| } |
| |
| // public void retrieveMdtData(ModifiedTypeMeta meta) throws Exception { |
| // if (meta instanceof ModifiedTypeMetaImpl) { |
| // return; |
| // } |
| // Map<String, String> map = null; |
| // |
| // String xmlString = getPropUtil().getStringValue(element, Me_mdtData); |
| // if (xmlString == null || xmlString.trim().length() == 0) { |
| // return; |
| // } |
| // Element firstElement = loadDocumentAndGetFirstElement(xmlString); |
| // if (firstElement == null) { |
| // return; |
| // } |
| // ((ModifiedTypeMetaImpl) meta).parseElement(firstElement); |
| // } |
| } |
| |
| public void addOpposite(ExtendedReference reference, MethodElement thisElement, MethodElement otherElement) { |
| ExtendReferenceMap map = getCachedExtendReferenceMap(thisElement, false); |
| if (map == null) { |
| return; |
| } |
| map.addOpposite(reference, otherElement); |
| } |
| |
| public void removeOpposite(ExtendedReference reference, MethodElement thisElement, MethodElement otherElement) { |
| ExtendReferenceMap map = getCachedExtendReferenceMap(thisElement, false); |
| if (map == null) { |
| return; |
| } |
| map.removeOpposite(reference, otherElement); |
| } |
| |
| public MethodElement getElement(MethodElement ownerElement, String propName) { |
| if (ownerElement == null) { |
| return null; |
| } |
| String guid = this.getStringValue(ownerElement, propName); |
| MethodElement element = LibraryEditUtil.getInstance().getMethodElement(guid); |
| if (! UmaUtil.isInLibrary(element)) { |
| return null; |
| } |
| return element; |
| } |
| |
| public void setElement(MethodElement ownerElement, String propName, MethodElement element) { |
| String guid = element == null ? "" : element.getGuid(); |
| setStringValue(ownerElement, propName, guid); |
| } |
| |
| public List<MethodElement> getReferencingList(MethodElement element, ExtendedReference ref) { |
| return getReferencingList(element, ref, false); |
| } |
| |
| public List<MethodElement> getReferencingList(MethodElement element, ExtendedReference ref, boolean modified) { |
| String ofeature = ExtendReferenceMap.getOppositeName(ref.getGlobalId()); |
| List<MethodElement> list = (List<MethodElement>) getReferenceValue(ofeature, element, modified); |
| return list == null ? new ArrayList<MethodElement>() : list; |
| } |
| |
| public Set<MethodElement> getExtendedReferencingSet(MethodElement element) { |
| ExtendReferenceMap map = getCachedExtendReferenceMap(element, false); |
| return map == null ? Collections.EMPTY_SET : map.getExtendedReferencingSet(element); |
| } |
| |
| public boolean isExcludedFromPublish(MethodElement element) { |
| MethodElementExt extObj = getExtendObject(element, false); |
| return extObj == null ? MethodElementExt.excludedFromPublishDefault(element) : extObj.isExcludedFromPublish(); |
| } |
| |
| public void setExcludedFromPublish(MethodElement element, boolean excludedFromPublish) { |
| if (excludedFromPublish == MethodElementExt.excludedFromPublishDefault(element) |
| && getExtendObject(element, false) == null) { |
| return; |
| } |
| MethodElementExt extObj = getExtendObject(element, true); |
| extObj.setExcludedFromPublish(excludedFromPublish); |
| } |
| |
| } |