blob: c470a90606c7446cbc632c0093eb578a54d4de12 [file] [log] [blame]
//------------------------------------------------------------------------------
//Copyright (c) 2005, 2007 IBM Corporation and others.
//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:
//IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.edit.util;
import java.util.Collection;
import java.util.Set;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.epf.common.utils.XMLUtil;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.util.MeList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* @author Weiping Lu
*
* @since 1.5.1.3
*/
public class XmlEditUtil {
private MethodElementPropUtil propUtil;
private Document doc;
public MethodElementPropUtil getPropUtil() {
return propUtil;
}
public XmlEditUtil(MethodElementPropUtil propUtil) {
this.propUtil = propUtil;
}
protected Document getDocument() throws Exception {
if (doc == null) {
doc = XMLUtil.createDocument();
}
return doc;
}
//Return the root element
protected Element loadDocumentAndGetFirstElement(String xmlString) throws Exception {
if (xmlString == null) {
return null;
}
doc = XMLUtil.loadXml(xmlString);
Node node = doc.getFirstChild();
return node instanceof Element ? (Element) node : null;
}
protected Element createFirstElement(String name) throws Exception {
Element element = getDocument().createElement(name);
getDocument().appendChild(element);
return element;
}
protected void storeToOwner(MethodElement owner, String propName) throws Exception {
String value = XMLUtil.toXmlString(doc);
propUtil.setStringValue(owner, propName, value);
}
public static String convertToGuidsString(Collection<? extends MethodElement> elements) {
String value = ""; //$NON-NLS-1$
if (elements == null || elements.isEmpty()) {
return value;
}
for (MethodElement element : elements) {
if (value.length() > 0) {
value += MethodElementPropUtil.infoSeperator;
}
value += element.getGuid();
}
return value;
}
public static MeList convertToMethodElements(String guidsString, EClass type) {
return convertToMethodElements(guidsString, type, uHandler);
}
public static MeList convertToMethodElements(String guidsString, EClass type, UnresolvedGuidHandler uHandler) {
return convertToMethodElements(guidsString, type, uHandler, null);
}
public static MeList convertToMethodElements(String guidsString, EClass type, UnresolvedGuidHandler uHandler, Set<MethodElement> validSet) {
MeList list = new MeList();
if (guidsString == null || guidsString.length() == 0) {
return list;
}
String[] guids = guidsString.split(MethodElementPropUtil.infoSeperator);
if (guids == null || guids.length == 0) {
return list;
}
boolean hasUnresolved = false;
for (String guid : guids) {
MethodElement element = LibraryEditUtil.getInstance().getMethodElement(guid);
if (element == null && uHandler != null) {
element = uHandler.getElement(guid);
if (element != null) {
hasUnresolved = true;
}
}
if (element != null) {
if (type == null || type.isSuperTypeOf(element.eClass())) {
if (validSet == null || validSet.contains(element)) {
list.add(element);
}
}
}
}
if (hasUnresolved) {
list.setHasUnresolved(true);
}
return list;
}
protected Integer getIntValue(Element element, String attName) {
String value = element.getAttribute(attName);
if (value == null || value.length() == 0) {
return null;
}
try {
return Integer.parseInt(value);
} catch (Exception e) {
return null;
}
}
protected void addClonedElement(Element parent, Element elementToClone)
throws Exception {
if (elementToClone == null) {
return;
}
Node node = XMLUtil.cloneNode(elementToClone, getDocument());
parent.appendChild(node);
}
public static UnresolvedGuidHandler uHandler = new UnresolvedGuidHandler();
public static class UnresolvedGuidHandler {
public MethodElement getElement(String guid) {
return null;
}
public boolean hasUnresolvedElement() {
return false;
}
}
}