/*******************************************************************************
* Copyright (c) 2011 itemis AG (http://www.itemis.eu) 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
*******************************************************************************/
package org.eclipse.emf.mwe2.language.ui.hover;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.mwe2.language.mwe2.BooleanLiteral;
import org.eclipse.emf.mwe2.language.mwe2.Component;
import org.eclipse.emf.mwe2.language.mwe2.DeclaredProperty;
import org.eclipse.emf.mwe2.language.mwe2.PlainString;
import org.eclipse.emf.mwe2.language.mwe2.PropertyReference;
import org.eclipse.emf.mwe2.language.mwe2.Reference;
import org.eclipse.emf.mwe2.language.mwe2.StringLiteral;
import org.eclipse.emf.mwe2.language.mwe2.StringPart;
import org.eclipse.emf.mwe2.language.mwe2.Value;
import org.eclipse.emf.mwe2.language.mwe2.util.Mwe2Switch;
import org.eclipse.xtext.ui.editor.hover.html.DefaultEObjectHoverProvider;
/**
* @author Christoph Kulla - Initial contribution and API
*/
public class Mwe2EObjectHoverProvider extends DefaultEObjectHoverProvider {
@Override
protected String getFirstLine(EObject o) {
String result = super.getFirstLine(o);
if (o instanceof DeclaredProperty) {
Value defaultValue = ((DeclaredProperty) o).getDefault();
if (defaultValue != null) {
return result + " = " + getPropertyValue(defaultValue);
}
}
return result;
}
protected String getPropertyValue (Value value) {
return new Mwe2Switch<String>() {
@Override
public String caseStringLiteral(StringLiteral value) {
String result = "";
result += value.getBegin();
for (StringPart p : value.getParts()) {
if (p instanceof PlainString) {
result += ((PlainString) p).getValue();
} else {
if (p instanceof PropertyReference) {
result += "${" + getElementLinks().createLink(((PropertyReference) p).getReferable()) + "}";
}
}
}
result += value.getEnd();
return result;
}
@Override
public String caseComponent(Component object) {
if (object.getType()!=null)
return object.getType().getQualifiedName('.');
else
return "";
}
@Override
public String caseReference(Reference object) {
return getElementLinks().createLink(object.getReferable());
}
@Override
public String caseBooleanLiteral(BooleanLiteral object) {
return String.valueOf(object.isIsTrue());
}
}.doSwitch(value);
}
}