| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 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.persistence.util; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Iterator; |
| import java.util.Map; |
| |
| import javax.xml.parsers.DocumentBuilder; |
| import javax.xml.parsers.DocumentBuilderFactory; |
| import javax.xml.parsers.FactoryConfigurationError; |
| import javax.xml.parsers.ParserConfigurationException; |
| |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.epf.common.serviceability.EPFVersions; |
| import org.eclipse.epf.common.serviceability.VersionUtil; |
| import org.eclipse.epf.persistence.FileManager; |
| import org.eclipse.epf.persistence.migration.internal.Migrator; |
| import org.eclipse.epf.uma.ContentDescription; |
| import org.eclipse.epf.uma.DescribableElement; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.osgi.framework.Version; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.xml.sax.SAXException; |
| |
| /** |
| * Utility class with static helper methods for library persistence |
| * |
| * @author Phong Nguyen Le |
| * @since 1.0 |
| */ |
| public class PersistenceUtil { |
| |
| /** |
| * Gets the current namespace URI of UMA. |
| */ |
| public static final String getUMANsURI() { |
| return UmaPackage.eNS_URI; |
| } |
| |
| public static final String getUMANsURI(String libPath) { |
| try { |
| DocumentBuilder builder = DocumentBuilderFactory.newInstance() |
| .newDocumentBuilder(); |
| Document doc = builder.parse(new File(libPath)); |
| Element root = doc.getDocumentElement(); |
| String nsURI = root.getAttribute("xmlns:com.ibm.uma"); //$NON-NLS-1$ |
| if (nsURI == null || nsURI.equals("")) { //$NON-NLS-1$ |
| nsURI = root.getAttribute("xmlns:org.eclipse.epf.uma"); //$NON-NLS-1$ |
| } |
| return nsURI; |
| } catch (ParserConfigurationException e) { |
| e.printStackTrace(); |
| } catch (FactoryConfigurationError e) { |
| e.printStackTrace(); |
| } catch (SAXException e) { |
| e.printStackTrace(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| } |
| return null; |
| } |
| |
| public static final boolean conversionRequired(String libPath) { |
| String currentNsURI = PersistenceUtil.getUMANsURI(); |
| String libNsURI = PersistenceUtil.getUMANsURI(libPath); |
| if (currentNsURI.equals(libNsURI)) |
| return false; |
| if (Migrator.OLD_UMA_NS_URI.equals(libNsURI)) |
| return true; |
| return false; |
| } |
| |
| public static final IResource getWorkspaceResource(Object obj) { |
| Resource resource = null; |
| if (obj instanceof DescribableElement) { |
| DescribableElement e = (DescribableElement) obj; |
| ContentDescription content = e.getPresentation(); |
| resource = content.eResource(); |
| if (resource == null) { |
| resource = e.eResource(); |
| } |
| } else if (obj instanceof EObject) { |
| resource = ((EObject) obj).eResource(); |
| } else if (obj instanceof Resource) { |
| resource = (Resource) obj; |
| } |
| if (resource != null && resource.getURI().isFile()) { |
| return FileManager.getResourceForLocation(resource.getURI() |
| .toFileString()); |
| } |
| return null; |
| } |
| |
| public static final Collection<EObject> getProxies(EObject obj) { |
| Collection<EObject> proxies = new ArrayList<EObject>(); |
| for (Iterator iter = obj.eAllContents(); iter.hasNext();) { |
| EObject o = (EObject) iter.next(); |
| if (o.eIsProxy()) { |
| proxies.add(o); |
| } |
| } |
| return proxies; |
| } |
| |
| /** |
| * Checks the primary tool version stored in the given resource |
| * |
| * @param resource |
| * @return <li> < 0 if the version of the primary tool stored in the given resource is missing or older than current |
| * <li> 0 if the primary tool version in the given resource matches the current version |
| * <li> > 0 if the primary tool version in the given resource is newer than the current version |
| */ |
| public static final int checkToolVersion(Resource resource) { |
| File file = new File(resource.getURI().toFileString()); |
| Map fileVersionMap = VersionUtil.readVersionsFromFile(file); |
| if(fileVersionMap != null) { |
| String version = (String) fileVersionMap.get(VersionUtil.getPrimaryToolID()); |
| if(version != null) { |
| EPFVersions versions = VersionUtil.getVersions(VersionUtil.getPrimaryToolID()); |
| return versions.getCurrentVersion().compareToolVersionTo(new Version(version)); |
| } |
| } |
| return -1; |
| } |
| |
| /** |
| * Gets the first method element in contents of the given resource. |
| * |
| * @param resource |
| * @return |
| */ |
| public static MethodElement getMethodElement(Resource resource) { |
| for (Iterator iter = resource.getContents().iterator(); iter.hasNext();) { |
| Object element = iter.next(); |
| if (element instanceof MethodElement) { |
| return (MethodElement) element; |
| } |
| } |
| return null; |
| } |
| |
| } |