blob: b411cd83ae75b58c118125a3d99397a1fb6777f3 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.xmi.XMLResource;
import org.eclipse.epf.resourcemanager.ResourceDescriptor;
import org.eclipse.epf.resourcemanager.ResourceManager;
import org.eclipse.epf.resourcemanager.ResourcemanagerFactory;
import org.eclipse.epf.resourcemanager.ResourcemanagerPackage;
import com.ibm.uma.MethodElement;
import com.ibm.uma.UmaPackage;
public class Recoverer {
private static final FilenameFilter filenameFilter = new FilenameFilter() {
public boolean accept(File arg0, String arg1) {
if (new File(arg0, arg1).isDirectory())
return true;
return arg1.toLowerCase().endsWith(".xmi"); //$NON-NLS-1$
}
};
private static final Map LOAD_OPTIONS = new HashMap();
private static final Map SAVE_OPTIONS = new HashMap();
static {
LOAD_OPTIONS.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
ExtendedMetaData extMetaData = new BasicExtendedMetaData();
extMetaData
.putPackage(
"http:///com/ibm/uma/resourcemanager.ecore", ResourcemanagerPackage.eINSTANCE); //$NON-NLS-1$
extMetaData.putPackage(
"http:///com/ibm/uma.ecore", UmaPackage.eINSTANCE); //$NON-NLS-1$
LOAD_OPTIONS.put(XMLResource.OPTION_EXTENDED_META_DATA, extMetaData);
SAVE_OPTIONS.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$
}
public static final void recover(String libDirPath) throws IOException {
File libDir = new File(libDirPath);
MultiFileXMIResourceImpl resMgrResource = new MultiFileXMIResourceImpl(
URI.createFileURI(libDirPath + File.separator
+ MultiFileResourceSetImpl.RESMGR_XMI));
resMgrResource.load(LOAD_OPTIONS);
ResourceManager resMgr = (ResourceManager) resMgrResource.getContents()
.get(0);
addToResourceManager(resMgr, libDir);
resMgrResource.save(SAVE_OPTIONS);
}
private static void addToResourceManager(ResourceManager resMgr, File file) {
if (file.isDirectory()) {
File[] files = file.listFiles(filenameFilter);
for (int i = 0; i < files.length; i++) {
addToResourceManager(resMgr, files[i]);
}
} else {
MethodElement e = null;
try {
MultiFileXMIResourceImpl resource = new MultiFileXMIResourceImpl(
URI.createFileURI(file.getAbsolutePath()));
resource.load(LOAD_OPTIONS);
if (!resource.getContents().isEmpty()) {
Object obj = resource.getContents().get(0);
if (obj instanceof MethodElement) {
e = (MethodElement) obj;
}
}
} catch (IOException ex) {
}
if (e != null) {
String guid = e.getGuid();
if (guid != null && guid.trim().length() != 0) {
// check if a URI map entry already exists for this guid in
// resource mananger
//
for (Iterator iter = resMgr.getResourceDescriptors()
.iterator(); iter.hasNext();) {
ResourceDescriptor resDescriptor = (ResourceDescriptor) iter
.next();
if (resDescriptor.getId().equals(guid)) {
return;
}
}
ResourceDescriptor resDescriptor = ResourcemanagerFactory.eINSTANCE
.createResourceDescriptor();
resDescriptor.setId(guid);
resDescriptor.setUri(URI.createFileURI(
file.getAbsolutePath()).deresolve(
resMgr.eResource().getURI()).toString());
resMgr.getResourceDescriptors().add(resDescriptor);
System.out
.println("added '" + resDescriptor.getUri() + "'"); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
}
public static void main(String[] args) {
String libDir = args[0];
try {
recover(libDir);
} catch (IOException e) {
e.printStackTrace();
}
}
}