/*******************************************************************************
* Copyright (c) 2008 Conselleria de Infraestructuras y Transporte, Generalitat
* de la Comunitat Valenciana . 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: Francisco Javier Cano Muñoz (Prodevelop) - initial API implementation
* Javier Muñoz (Prodevelop) – Added ISemanticParser implementation
*
******************************************************************************/
package org.eclipse.papyrus.uml.diagram.common.parser;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.common.core.command.ICommand;
import org.eclipse.gmf.runtime.common.ui.services.parser.IParser;
import org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus;
import org.eclipse.gmf.runtime.emf.ui.services.parser.ISemanticParser;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Stereotype;
/**
*
* @author <a href="mailto:fjcano@prodevelop.es">Francisco Javier Cano Muñoz</a>
*
*/
public class TagsAdderParser implements ISemanticParser {
private IParser realParser = null;
// @unused
public TagsAdderParser(IParser parser) {
realParser = parser;
}
public IContentAssistProcessor getCompletionProcessor(IAdaptable element) {
if(realParser != null) {
return realParser.getCompletionProcessor(element);
}
return null;
}
public String getEditString(IAdaptable element, int flags) {
if(realParser != null) {
return realParser.getEditString(element, flags);
}
return null;
}
public ICommand getParseCommand(IAdaptable element, String newString, int flags) {
if(realParser != null) {
return realParser.getParseCommand(element, newString, flags);
}
return null;
}
public String getPrintString(IAdaptable element, int flags) {
if(realParser != null) {
String printString = realParser.getPrintString(element, flags);
return AddTagsToString(printString, element);
}
return null;
}
public boolean isAffectingEvent(Object event, int flags) {
if(realParser != null) {
return realParser.isAffectingEvent(event, flags);
}
return false;
}
public IParserEditStatus isValidEditString(IAdaptable element, String editString) {
if(realParser != null) {
return realParser.isValidEditString(element, editString);
}
return null;
}
private String AddTagsToString(String string, IAdaptable adapter) {
// TODO: support more tags
String str = null;
Element element = (Element)adapter.getAdapter(Element.class);
List<String> stereotypesNames = getStereotypesNames(element);
str = StereotypesNamesListToString(stereotypesNames) + " " + string;
return str;
}
/**
* @generated NOT
*/
protected List<String> getStereotypesNames(Element element) {
List<String> stereotypesNames = new java.util.LinkedList<String>();
List<Stereotype> stereotypes = element.getAppliedStereotypes();
for(Stereotype st : stereotypes) {
String name = st.getName();
if(name != null) {
stereotypesNames.add(name);
} else {
stereotypesNames.add("");
}
}
return stereotypesNames;
}
/**
* @generated NOT
*/
protected String StereotypesNamesListToString(List<String> names) {
String str = "";
if(names != null) {
if(names.size() > 0) {
str += ((char)171);
for(Iterator<String> it = names.iterator(); it.hasNext();) {
str += it.next();
if(it.hasNext()) {
str += ", ";
}
}
str += ((char)187);
}
}
return str;
}
public boolean areSemanticElementsAffected(EObject arg0, Object arg1) {
if(this.realParser instanceof ISemanticParser) {
return ((ISemanticParser)this.realParser).areSemanticElementsAffected(arg0, arg1);
} else {
return false;
}
}
public List getSemanticElementsBeingParsed(EObject arg0) {
if(this.realParser instanceof ISemanticParser) {
return ((ISemanticParser)this.realParser).getSemanticElementsBeingParsed(arg0);
} else {
List<EObject> semanticElements = new ArrayList<EObject>();
semanticElements.add(arg0);
return semanticElements;
}
}
}