/***************************************************************************** * Copyright (c) 2008 CEA LIST. * * * 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: * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.infra.emf.commands; import org.eclipse.emf.ecore.EAnnotation; import org.eclipse.emf.ecore.EModelElement; import org.eclipse.emf.ecore.EcoreFactory; import org.eclipse.emf.transaction.TransactionalEditingDomain; public class CreateEAnnotationCommand extends org.eclipse.emf.transaction.RecordingCommand { public EModelElement getObject() { return object; } // @unused public void setObject(EModelElement object) { this.object = object; } // @unused public String getEAnnotationName() { return eAnnotationName; } // @unused public void setEAnnotationName(String annotationName) { eAnnotationName = annotationName; } /** The object. */ private EModelElement object; /** The e annotation name. */ private String eAnnotationName; /** * Instantiates a new creates the e annotation command. * * @param domain * the domain * @param object * the object * @param eannotationName * the eannotation name */ public CreateEAnnotationCommand(TransactionalEditingDomain domain, EModelElement object, String eannotationName) { super(domain); this.object = object; this.eAnnotationName = eannotationName; } /** * {@inheritDoc} */ @Override protected void doExecute() { attachEannotation(createEAnnotation(), object); } /** * Creates the e annotation. * * @return the e annotation */ protected EAnnotation createEAnnotation() { EAnnotation eannotation = EcoreFactory.eINSTANCE.createEAnnotation(); eannotation.setSource(eAnnotationName); return eannotation; } /** * Attach eannotation to an EmodelElement. * * @param annotation * the annotation * @param object * the object */ protected void attachEannotation(EAnnotation annotation, EModelElement object) { object.getEAnnotations().add(annotation); } /** * Replace existing eannotation with a new eannotation. This repplaced eannotation has the same * source. * * @param annotation * the annotation * @param object * the object */ protected void replaceEannotation(EAnnotation annotation, EModelElement object) { while(object.getEAnnotation(annotation.getSource()) != null) { object.getEAnnotations().remove(object.getEAnnotation(annotation.getSource())); } object.getEAnnotations().add(annotation); } /** * Adds the entry. * * @param annotation * the annotation * @param key * the key * @param value * the value */ // @unused protected void addEntry(EAnnotation annotation, String key, String value) { annotation.getDetails().put(key, value); } /** * Replace entry. * * @param annotation * the annotation not null * @param key * the key * @param value * the value */ protected void replaceEntry(EAnnotation annotation, String key, String value) { while(annotation.getDetails().get(key) != null) { annotation.getDetails().removeKey(key); } annotation.getDetails().put(key, value); } }