/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* 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:
******************************************************************************/
package org.eclipse.emf.emfstore.common.model.impl;
import java.util.HashMap;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
import org.eclipse.emf.emfstore.common.model.ModelElementId;
import org.eclipse.emf.emfstore.common.model.Project;
/**
* A copier class for copying projects.
*
* @author emueller
*/
public class IdEObjectCollectionCopier extends Copier {
private static final long serialVersionUID = 1L;
private Project orgProject;
private ProjectImpl copiedProject;
private HashMap<EObject, ModelElementId> eObjectToIdMap;
private HashMap<ModelElementId, EObject> idToEObjectMap;
/**
* Default constructor.
*/
public IdEObjectCollectionCopier() {
eObjectToIdMap = new HashMap<EObject, ModelElementId>();
idToEObjectMap = new HashMap<ModelElementId, EObject>();
}
@Override
public EObject copy(EObject eObject) {
if (eObject instanceof Project) {
orgProject = (Project) eObject;
}
EObject copiedEObject = super.copy(eObject);
if (copiedEObject instanceof Project) {
// TODO: PlainEObjectMode, make sure that project is really returned as the last element
copiedProject = (ProjectImpl) copiedEObject;
copiedProject.initCaches(eObjectToIdMap, idToEObjectMap);
return copiedProject;
}
ModelElementId eObjectId = orgProject.getModelElementId(eObject);
eObjectToIdMap.put(copiedEObject, eObjectId);
idToEObjectMap.put(eObjectId, copiedEObject);
return copiedEObject;
}
}