blob: cf8aae07b176490750b62f018b1f20e5b7796746 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2008 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.net.URI;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.uma.MethodElement;
/**
* Utility class to scan method element contents and copy resource files for
* copied method elements
*
* @author Weiping Lu, August 31, 2008
*
*/
public class ResourceFileCopyHandler {
private IResourceScanner scanner;
private static boolean localDebug = false;
public ResourceFileCopyHandler(IResourceScanner scanner) {
this.scanner = scanner;
}
public void execute(Map<MethodElement, MethodElement> originalToCopyMap) {
int sz = originalToCopyMap == null ? 0 : originalToCopyMap.size();
if (localDebug) {
System.out.println("LD> copyToOriginalMap: " + sz);
}
if (sz == 0) {
return;
}
for (Map.Entry<MethodElement, MethodElement> entry: originalToCopyMap.entrySet()) {
scanElement(entry.getKey(), entry.getValue());
}
scanner.copyFiles();
}
public IResourceScanner getScanner() {
return scanner;
}
private void scanElement(MethodElement source, MethodElement copy) {
if (localDebug) {
System.out.println("LD> source: " + source);
System.out.println("LD> copy: " + copy);
System.out.println("");
}
List features = source.eClass().getEAllStructuralFeatures();
for (int i = 0; i < features.size(); i++) {
EStructuralFeature feature = (EStructuralFeature) features.get(i);
if (feature instanceof EAttribute) {
scanAttribute(source, copy, (EAttribute) feature);
}
}
}
private void scanAttribute(MethodElement source, MethodElement copy,
EAttribute feature) {
Object sourceValue = source.eGet(feature);
if (sourceValue == null) {
return;
}
Object copiedValue = sourceValue;
if (sourceValue instanceof URI) {
URI uri = (URI) sourceValue;
String urlStr = scanner.registerFileCopy(uri.toString());
try {
copiedValue = new URI(urlStr);
} catch (Exception e) {
copiedValue = sourceValue;
}
} else if (sourceValue instanceof String) {
copiedValue = scanner.scan(source, copy, (String) sourceValue, feature);
} else {
return;
}
if (! sourceValue.equals(copiedValue)) {
copy.eSet(feature, copiedValue);
}
}
}