Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java')
-rw-r--r--plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java669
1 files changed, 0 insertions, 669 deletions
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
deleted file mode 100644
index 22d91e0cd..000000000
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/utilities/EtoolsCopyUtility.java
+++ /dev/null
@@ -1,669 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 2005 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 API and implementation
- *******************************************************************************/
-package org.eclipse.wst.common.internal.emf.utilities;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.ETypedElement;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.resource.Resource;
-
-
-/**
- * Insert the type's description here. Creation date: (12/13/2000 9:10:55 PM)
- *
- * @author: Administrator
- */
-public class EtoolsCopyUtility {
- protected static final String REFENUMLITERAL_TYPE_NAME = "EEnumLiteral"; //$NON-NLS-1$
- private final EcorePackage pkg = EcorePackage.eINSTANCE;
-
- private final ETypedElement METAENAME = pkg.getENamedElement_Name();
-
- protected HashMap copiedObjects;
- protected List deferredReferenceCopies;
- protected boolean preserveIds = false;
- protected boolean copyAdapters = false;
- protected HashMap copiedAdapters;
-
- protected class DeferredSingleReferenceCopyAction extends DeferredReferenceUtilityAction {
- public DeferredSingleReferenceCopyAction(EReference aReference, Object aValue, String aSuffix, EObject aCopyContainer) {
- super(aReference, aValue, aSuffix, aCopyContainer);
- }
-
- public void performAction() {
- EObject value = (EObject) getReferenceValue();
- getCopyContainer().eSet(getReference(), getCopyIfFound(value));
- }
- }
-
- protected class DeferredManyReferenceCopyAction extends DeferredReferenceUtilityAction {
- public DeferredManyReferenceCopyAction(EReference aReference, List aValue, String aSuffix, EObject aCopyContainer) {
- super(aReference, aValue, aSuffix, aCopyContainer);
- }
-
- public void performAction() {
- List copyList = (List) getCopyContainer().eGet(getReference());
- Iterator it = ((List) getReferenceValue()).iterator();
- EObject next;
- while (it.hasNext()) {
- next = (EObject) it.next();
- copyList.add(getCopyIfFound(next));
- }
- }
- }
-
- /**
- * Insert the method's description here. Creation date: (12/13/2000 9:14:26 PM)
- *
- * @param aRefObject
- * org.eclipse.emf.ecore.EObject
- */
- public EtoolsCopyUtility() {
- }
-
- /**
- * Create a <code>DeferredManyReferenceCopyAction</code> and add it to the list of deferred
- * copy actions.
- */
- protected void addDeferredManyReferenceCopy(EReference reference, List aValue, String idSuffix, EObject aCopyContainer) {
- getDeferredReferenceCopies().add(new DeferredManyReferenceCopyAction(reference, aValue, idSuffix, aCopyContainer));
- }
-
- /**
- * Create a <code>DeferredSingleReferenceCopyAction</code> and add it to the list of deferred
- * copy actions.
- */
- protected void addDeferredSingleReferenceCopy(EReference reference, EObject aValue, String idSuffix, EObject aCopyContainer) {
- getDeferredReferenceCopies().add(new DeferredSingleReferenceCopyAction(reference, aValue, idSuffix, aCopyContainer));
- }
-
- /**
- * Check for an already copied object first.
- */
- protected EObject containmentCopy(EObject anObject, String idSuffix) {
- EObject copied = getCopy(anObject);
- if (copied == null)
- copied = primCopy(anObject, idSuffix);
- return copied;
- }
-
- /**
- * Check for an already copied object first.
- */
- protected EObject containmentCopyObject(EObject anObject, String idSuffix) {
- EObject copied = getCopy(anObject);
- if (copied == null)
- copied = primCopyObject(anObject, idSuffix);
- return copied;
- }
-
- protected Resource containmentCopy(Resource aResource, String newUri) {
- /* copied resources are never cached */
- return primCopy(aResource, newUri);
- }
-
- /**
- * Copy all Resources and RefObjects within <code>aGroup</code> and add them to
- * <code>aGroup</code>. Non composite references will be deferred until all objects are
- * copied from <code>aGroup</code>.
- *
- * Copy Resources first and then copy RefObjects.
- */
- public void copy(CopyGroup aGroup) {
- if (aGroup != null) {
- EtoolsCopySession session = new EtoolsCopySession(this);
- session.setPreserveIds(aGroup.getPreserveIds());
- session.copy(aGroup);
- session.flush();
- }
- }
-
- public EObject copy(EObject aRefObject) {
- return copy(aRefObject, null);
- }
-
- /**
- * This method should be used if you are only going to copy <code>aRefObject</code> in this
- * copy execution.
- */
- public EObject copy(EObject aRefObject, String idSuffix) {
- EtoolsCopySession session = new EtoolsCopySession(this);
- EObject copied = session.copy(aRefObject, idSuffix);
- session.flush();
- return copied;
- }
-
- /**
- * This method should be used if you are only going to copy <code>aRefObject</code> in this
- * copy execution. This method only copies <code>aRefObject</code> with its properties, not
- * references.
- */
- public EObject copyObject(EObject aRefObject, String idSuffix) {
- EtoolsCopySession session = new EtoolsCopySession(this);
- EObject copied = session.copyObject(aRefObject, idSuffix);
- session.flush();
- return copied;
- }
-
- /**
- * This method should be used if you are only going to copy <code>aResource</code> in this
- * copy execution. The copied Resource will have a URI equal to <code>newUri</code>.
- */
- public Resource copy(Resource aResource, String newUri) {
- EtoolsCopySession session = new EtoolsCopySession(this);
- Resource copied = session.copy(aResource, newUri);
- session.flush();
- return copied;
- }
-
- /**
- * If an attribute is set and its value is not <code>null</code>, then perform copy
- * <code>attribute</code> value from <code>aRefObject</code> to <code>copyRef</code>.
- * Null is a valid value if the attribute is set.
- */
-
- protected void copyAttribute(EAttribute attribute, EObject aRefObject, String idSuffix, EObject copyRef) {
- if (!attribute.isChangeable())
- return; //ignore
- if (attribute.isMany()) {
- List value = (List) aRefObject.eGet(attribute);
- if (value != null)
- copyManyAttribute(attribute, value, aRefObject, idSuffix, copyRef);
- } else if (aRefObject.eIsSet(attribute)) {
- Object value = aRefObject.eGet(attribute);
- if (value == null)
- copyRef.eSet(attribute, value);
- else
- copySingleAttribute(attribute, value, aRefObject, idSuffix, copyRef);
- } else if (attribute == METAENAME) {
- //set name to the ID (this is computed as a default), only get here if isSetName is
- // false.
- copyRef.eSet(attribute, aRefObject.eGet(attribute));
- }
- }
-
- /**
- * Iterate over the attributes of the receiver and copy each attribute.
- */
- protected void copyCurrentAttributes(EObject aRefObject, String idSuffix, EObject copyRef) {
- List attributes = aRefObject.eClass().getEAllAttributes();
- if (attributes != null) {
- Iterator it = attributes.iterator();
- EAttribute ra;
- while (it.hasNext()) {
- ra = (EAttribute) it.next();
- copyAttribute(ra, aRefObject, idSuffix, copyRef);
- }
- }
- }
-
- /**
- * This method will iterate over the references of the receiver. If a reference's value is not
- * <code>null</code>, then a series of tests are done before setting the value with the
- * copied object, <code>copyRef</code>.
- *
- * Tests: 1. Do nothing if the reference equals the metaEContainer or metaEContains references.
- */
-
- protected void copyCurrentReferences(EObject aRefObject, String idSuffix, EObject copyRef) {
- List references = aRefObject.eClass().getEAllReferences();
- if (references != null) {
- Iterator it = references.iterator();
- EReference rr;
- while (it.hasNext()) {
- rr = (EReference) it.next();
- if (shouldCopyReference(rr))
- copyReference(rr, aRefObject, idSuffix, copyRef);
- }
- }
- }
-
- /**
- * Iterate over <code>anExtent</code> and copy each element to <code>copyExtent</code>.
- */
- protected void copyExtent(EList anExtent, EList copyExtent) {
- Iterator it = anExtent.iterator();
- EObject refObject;
- while (it.hasNext()) {
- refObject = (EObject) it.next();
- copyExtent.add(containmentCopy(refObject, null));
- }
- }
-
- /**
- * Copy a many value attribute which is treated as a many valued reference.
- *
- * Tests:
- *
- * 1. If the type is <bold>not </bold> <code>null</code>, then set the value on
- * <code>copyRef</code> without making a copy. 2. If the type is <code>null</code>, then
- * obtain the list from <code>copyRef</code> and add a copy of each value from the original
- * list to it.
- */
-
- protected void copyManyAttribute(EAttribute attribute, List aValue, EObject aRefObject, String idSuffix, EObject copyRef) {
- if (attribute.getEType() == null)
- copyRef.eSet(attribute, aValue);
- else {
- List copyList = (List) copyRef.eGet(attribute);
- Iterator it = aValue.iterator();
- Object next;
- while (it.hasNext()) {
- next = it.next();
- if (next instanceof EObject)
- copyList.add(containmentCopy((EObject) next, idSuffix));
- else
- copyList.add(next);
- }
- }
- }
-
- /**
- * This method will iterate over the references of the receiver. If a reference's value is not
- * <code>null</code>, then a series of tests are done before setting the value with the
- * copied object, <code>copyRef</code>.
- *
- * Tests: 1. If the reference is many, obtain the list from the receiving object and make a copy
- * of each value if the reference is composite before adding to the list; otherwise, just add
- * each value to the of the <code>copyRef</code>.
- */
-
- protected void copyManyReference(EReference aReference, List aList, EObject aRefObject, String idSuffix, EObject copyRef) {
- if (!aList.isEmpty()) {
- if (aReference.isContainment()) {
- List copyList = (List) copyRef.eGet(aReference);
- Iterator it = aList.iterator();
- EObject targetValue;
- while (it.hasNext()) {
- targetValue = (EObject) it.next();
- copyList.add(containmentCopy(targetValue, idSuffix));
- }
- } else
- addDeferredManyReferenceCopy(aReference, aList, idSuffix, copyRef);
- }
- }
-
- /**
- * This method will iterate over the references of the receiver. If a reference's value is not
- * <code>null</code>, then perform the copy.
- */
-
- protected void copyReference(EReference aReference, EObject aRefObject, String idSuffix, EObject copyRef) {
- if (aReference.isMany()) {
- List value = (List) aRefObject.eGet(aReference);
- if (value != null)
- copyManyReference(aReference, value, aRefObject, idSuffix, copyRef);
- } else if (aRefObject.eIsSet(aReference)) {
- Object value = aRefObject.eGet(aReference);
- copySingleReference(aReference, (EObject) value, aRefObject, idSuffix, copyRef);
- }
- }
-
- /**
- * Copy all RefObjects from <code>aGroup</code> and add the copy back to <code>aGroup</code>.
- */
- protected void copyRefObjects(CopyGroup aGroup) {
- Association association;
- EObject refObject;
- String idSuffix;
- if (aGroup.primGetRefObjects() != null) {
- Iterator it = aGroup.primGetRefObjects().iterator();
- while (it.hasNext()) {
- association = (Association) it.next();
- refObject = (EObject) association.getKey();
- idSuffix = (String) association.getValue();
- if (idSuffix == null)
- idSuffix = aGroup.getDefaultIdSuffix();
- aGroup.addCopied(containmentCopy(refObject, idSuffix));
- }
- }
- }
-
- /**
- * Copy all Resources from <code>aGroup</code> and add the copy back to <code>aGroup</code>.
- */
- protected void copyResources(CopyGroup aGroup) {
- Association association;
- Resource resource;
- String uri;
- if (aGroup.primGetResources() != null) {
- Iterator it = aGroup.primGetResources().iterator();
- while (it.hasNext()) {
- association = (Association) it.next();
- resource = (Resource) association.getKey();
- uri = (String) association.getValue();
- Resource copied = containmentCopy(resource, uri);
- copyModificationFlag(resource, copied);
- aGroup.addCopied(copied);
- }
- }
- }
-
- /**
- * Copy a single value attribute.
- *
- * Tests:
- *
- * 1. If an attribute type is not <code>null</code> then it is an object type and it must be
- * copied. Do not copy the value if the attribute is an Enumeration type. 2. If an attribute
- * type is <bold>not </bold> <code>null</code> then copy the value before setting it on
- * <code>copyRef</code>.
- */
-
- protected void copySingleAttribute(EAttribute attribute, Object aValue, EObject aRefObject, String idSuffix, EObject copyRef) {
- if (attribute.getEType() == null) {
- copyRef.eSet(attribute, aValue);
- } else {
- //MOF108
- // if (attribute.isObjectType())
- if (attribute.getEType() instanceof EClass)
- copyRef.eSet(attribute, containmentCopy((EObject) aValue, idSuffix));
- else
- copyRef.eSet(attribute, aValue);
- }
- }
-
- /**
- * This method will iterate over the references of the receiver. If a reference's value is not
- * <code>null</code>, then a series of tests are done before setting the value with the
- * copied object, <code>copyRef</code>.
- *
- * Tests: 1. If the reference is <bold>not </bold> many, make a copy of the value if the
- * reference is composite before setting the value with <code>copyRef</code>; otherwise, just
- * set the value as is.
- */
-
- protected void copySingleReference(EReference aReference, EObject aValue, EObject aRefObject, String idSuffix, EObject copyRef) {
- //Exceptional case; the relationship is not the container relationship
- //And is not navigable in the other direction; go ahead and copy
- if (aValue != aRefObject.eContainer() || aReference.getEOpposite() == null) {
- if (aReference.isContainment())
- copyRef.eSet(aReference, containmentCopy(aValue, idSuffix));
- else
- addDeferredSingleReferenceCopy(aReference, aValue, idSuffix, copyRef);
- }
- }
-
- /**
- * Copy all Resources and RefObjects within <code>aGroup</code> and add them to
- * <code>aGroup</code>. Non composite references will be deferred until all objects are
- * copied from <code>aGroup</code>.
- *
- * Copy Resources first and then copy RefObjects.
- */
- public static void createCopy(CopyGroup aGroup) {
- EtoolsCopyUtility utility = new EtoolsCopyUtility();
- utility.copy(aGroup);
- }
-
- /**
- * Copies attributes
- */
- public static void createAttributeCopy(EObject aRefObject, EObject copyObject) {
- EtoolsCopyUtility utility = new EtoolsCopyUtility();
- utility.copyCurrentAttributes(aRefObject, null, copyObject);
- }
-
- /**
- * Copies all set attributes and references based on containment. Thus, it will copy the entire
- * containment tree. Use the idSuffix to define the suffix that will be appended to the existing
- * IDs of copied objects.
- */
- public static EObject createCopy(EObject aRefObject) {
- return createCopy(aRefObject, null);
- }
-
- /**
- * Copies all set attributes and references based on containment. Thus, it will copy the entire
- * containment tree. Use the idSuffix to define the suffix that will be appended to the existing
- * IDs of copied objects.
- */
- public static EObject createCopy(EObject aRefObject, String idSuffix) {
- EtoolsCopyUtility utility = new EtoolsCopyUtility();
- return utility.copy(aRefObject, idSuffix);
- }
-
- /**
- * Copy <code>aResource</code> using <code>newUri</code> for the URI.
- */
- public static Resource createCopy(Resource aResource, String newUri) {
- EtoolsCopyUtility utility = new EtoolsCopyUtility();
- return utility.copy(aResource, newUri);
- }
-
- protected void executeDeferredCopyActions() {
- if (primGetDeferredReferenceCopies() != null) {
- Iterator it = primGetDeferredReferenceCopies().iterator();
- DeferredReferenceUtilityAction action;
- while (it.hasNext()) {
- action = (DeferredReferenceUtilityAction) it.next();
- action.performAction();
- }
- primGetDeferredReferenceCopies().clear();
- }
- }
-
- /**
- * Insert the method's description here. Creation date: (12/13/2000 9:17:35 PM)
- *
- * @return java.util.HashMap
- */
- protected java.util.HashMap getCopiedObjects() {
- if (copiedObjects == null)
- copiedObjects = new HashMap(200);
- return copiedObjects;
- }
-
- protected java.util.HashMap getCopiedAdapters() {
- if (copiedAdapters == null)
- copiedAdapters = new HashMap(200);
- return copiedAdapters;
- }
-
- /**
- * Return a cached copy.
- */
- public EObject getCopy(EObject anObject) {
- if (anObject == null)
- return null;
- return (EObject) getCopiedObjects().get(anObject);
- }
-
- /**
- * Return a cached copy, if none, return the argument.
- */
- public EObject getCopyIfFound(EObject anObject) {
- EObject copied = getCopy(anObject);
- return copied == null ? anObject : copied;
- }
-
- /**
- * Insert the method's description here. Creation date: (12/16/2000 9:11:32 AM)
- *
- * @return java.util.List
- */
- protected java.util.List getDeferredReferenceCopies() {
- if (deferredReferenceCopies == null)
- deferredReferenceCopies = new ArrayList(100);
- return deferredReferenceCopies;
- }
-
- /**
- * Return an instance of EObject that is the same type as <code>aRefObject</code>.
- */
- public EObject newInstance(EObject aRefObject) {
- if (aRefObject == null)
- return null;
- EPackage epkg = (EPackage) aRefObject.eClass().eContainer();
- EFactory factory = epkg.getEFactoryInstance();
- EClass refObj = aRefObject.eClass();
- return factory.create(refObj);
- }
-
- /**
- * Return an instance of Resource that uses the same ResourceFactory as the one used by
- * <code>aResource</code>. If <code>newUri</code> is <code>null</code> then use the URI
- * from <code>aResource</code>.
- */
- public Resource newInstance(Resource aResource, String newUri) {
- if (aResource == null)
- return null;
- Resource newResource;
- String originalUri = aResource.getURI().toString();
- newUri = newUri == null ? originalUri : newUri;
-
- Resource.Factory factory = null;
- if (aResource.getResourceSet() == null)
- factory = Resource.Factory.Registry.INSTANCE.getFactory(URI.createURI(originalUri));
- else
- factory = aResource.getResourceSet().getResourceFactoryRegistry().getFactory(URI.createURI(originalUri));
-
-
- newResource = factory.createResource(URI.createURI(newUri));
- return newResource;
- }
-
- /**
- * Should the id be copied in the case where no suffix is specified? Defaults to false
- */
- public boolean preserveIds() {
- return preserveIds;
- }
-
- /**
- * Copies all set attributes and references based on containment. Thus, it will copy the entire
- * containment tree. Use the idSuffix to define the suffix that will be appended to the existing
- * IDs of copied objects. If an idSuffix does not exist, do not set an id on the copied object.
- */
- protected EObject primCopy(EObject aRefObject, String idSuffix) {
- if (aRefObject == null)
- return null;
- EObject copyRef = primCopyObject(aRefObject, idSuffix);
-
- copyCurrentReferences(aRefObject, idSuffix, copyRef);
- return copyRef;
- }
-
- /**
- * Copies all set attributes based on containment. Thus, it will copy the entire containment
- * tree. Use the idSuffix to define the suffix that will be appended to the existing IDs of
- * copied objects. If an idSuffix does not exist, do not set an id on the copied object.
- */
- protected EObject primCopyObject(EObject aRefObject, String idSuffix) {
- if (aRefObject == null)
- return null;
- EObject copyRef = newInstance(aRefObject);
-
- recordCopy(aRefObject, copyRef);
- copyCurrentAttributes(aRefObject, idSuffix, copyRef);
- if (isCopyAdapters())
- copyAdapters(aRefObject, copyRef);
- return copyRef;
- }
-
- protected void copyAdapters(EObject aRefObject, EObject copyRef) {
- List adapters = aRefObject.eAdapters();
- for (int i = 0; i < adapters.size(); i++) {
- Adapter adapter = (Adapter) adapters.get(i);
- copyAdapter(aRefObject, copyRef, adapter);
-
- }
- }
-
- protected void copyAdapter(EObject aRefObject, EObject copyRef, Adapter adapter) {
- if (!(adapter instanceof CloneablePublic))
- return;
- CloneablePublic copyAdapter = (CloneablePublic) getCopiedAdapters().get(adapter);
- if (copyAdapter == null) {
- copyAdapter = (CloneablePublic) ((CloneablePublic) adapter).clone();
- getCopiedAdapters().put(adapter, copyAdapter);
- }
- if (copyAdapter != null)
- copyRef.eAdapters().add(copyAdapter);
- }
-
- /**
- * Copies all set attributes and references based on containment. Thus, it will copy the entire
- * containment tree. Use the idSuffix to define the suffix that will be appended to the existing
- * IDs of copied objects.
- */
- protected Resource primCopy(Resource aResource, String newUri) {
- if (aResource == null)
- return null;
- Resource copyResource = newInstance(aResource, newUri);
- copyExtent(aResource.getContents(), copyResource.getContents());
- return copyResource;
- }
-
- protected void copyModificationFlag(Resource aResource, Resource copied) {
- if (aResource.isModified())
- copied.setModified(true);
- }
-
- /**
- * Insert the method's description here. Creation date: (12/16/2000 9:11:32 AM)
- *
- * @return java.util.List
- */
- private java.util.List primGetDeferredReferenceCopies() {
- return deferredReferenceCopies;
- }
-
- public void recordCopy(EObject aSource, EObject aCopy) {
- getCopiedObjects().put(aSource, aCopy);
- }
-
- public void recordCopy(Adapter aSource, Adapter aCopy) {
- getCopiedAdapters().put(aSource, aCopy);
- }
-
- /**
- * Should the id be copied in the case where no suffix is specified?
- */
- public void setPreserveIds(boolean value) {
- preserveIds = value;
- }
-
- protected boolean shouldCopyReference(EReference aReference) {
- return aReference.isChangeable();
- }
-
- /**
- * @return
- */
- public boolean isCopyAdapters() {
- return copyAdapters;
- }
-
- /**
- * Flag used to indicate whether adapters should be copied as well. In order for an adapter to
- * be copied, it must implement the {@link CloneablePublic}interface.
- */
- public void setCopyAdapters(boolean b) {
- copyAdapters = b;
- }
-
-}
-
-

Back to the top