/*******************************************************************************
* Copyright (c) 2010, 2014 Willink Transformations 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:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.ocl.xtext.essentialocl.ui.labeling;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.pivot.Type;
import org.eclipse.ocl.pivot.utilities.PivotConstants;
import org.eclipse.ocl.xtext.base.ui.labeling.BaseLabelProvider;
import org.eclipse.ocl.xtext.basecs.TemplateParameterCS;
import org.eclipse.ocl.xtext.basecs.TuplePartCS;
import org.eclipse.ocl.xtext.basecs.TupleTypeCS;
import org.eclipse.ocl.xtext.essentialoclcs.BooleanLiteralExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.CollectionTypeCS;
import org.eclipse.ocl.xtext.essentialoclcs.ExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.InvalidLiteralExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.NameExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.NavigatingArgCS;
import org.eclipse.ocl.xtext.essentialoclcs.NestedExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.NullLiteralExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.NumberLiteralExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.OperatorExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.SelfExpCS;
import org.eclipse.ocl.xtext.essentialoclcs.StringLiteralExpCS;
import com.google.inject.Inject;
/**
* Provides labels for EssentialOCL CS objects.
* <p>
* The outline normally displays the result of CST to AST redirection using the
* labels defined by BaseLabelProvider. However when there are syntax errors there
* is no AST and so CST labels are used.
*/
public class EssentialOCLLabelProvider extends BaseLabelProvider
{
@Inject
public EssentialOCLLabelProvider(@NonNull AdapterFactoryLabelProvider delegate) {
super(delegate);
}
protected void appendTemplateParameter(@NonNull StringBuilder s, TemplateParameterCS templateParameter) {
appendName(s, templateParameter);
}
@Override
protected void appendType(@NonNull StringBuilder s, Type type) {
if (type instanceof CollectionTypeCS) {
appendName(s, (CollectionTypeCS)type);
s.append("(");
appendType(s, ((CollectionTypeCS)type).getOwnedType());
s.append(")");
}
else if (type instanceof TupleTypeCS) {
appendName(s, (TupleTypeCS)type);
s.append("Tuple(");
String prefix = "";
for (TuplePartCS part : ((TupleTypeCS)type).getOwnedParts()) {
s.append(prefix);
appendName(s, part);
s.append(" : ");
appendType(s, part.getOwnedType());
prefix = ", ";
}
s.append(")");
}
else if (type instanceof NameExpCS) {
// appendName(s, ((NameExpCS)type).getNamedElement());
}
else {
super.appendType(s, type);
}
}
/* protected String text(InfixExpCS ele) {
String op = ele.getOp();
if (!".".equals(op) && !"->".equals(op)) {
return op;
}
StringBuilder s = new StringBuilder();
appendString(s, op);
ExpCS argument = ele.getArgument();
if (argument instanceof NamedExpCS) {
s.append(" ");
appendName(s, ((NamedExpCS)argument).getName().getNamedElement());
if (((NamedExpCS) argument).isPre()) {
s.append(" @pre");
}
}
return s.toString();
} */
protected String text(BooleanLiteralExpCS ele) {
return String.valueOf(ele.getSymbol());
}
protected String text(ExpCS ele) {
return "<<" + ele.eClass().getName() + ">>";
}
protected String text(InvalidLiteralExpCS ele) {
return "invalid";
}
protected String text(NameExpCS ele) {
return String.valueOf(ele.getOwnedPathName().toString());
}
protected String text(NavigatingArgCS ele) {
return "<" + String.valueOf(ele.getRole()).toLowerCase() + ">";
}
protected String text(NestedExpCS ele) {
return "( )";
}
protected String text(NullLiteralExpCS ele) {
return "null";
}
protected String text(NumberLiteralExpCS ele) {
return String.valueOf(ele.getSymbol());
}
protected String image(OperatorExpCS ele) {
return "/org.eclipse.ocl.edit/icons/full/obj16/OperationCallExp.gif";
}
protected String text(OperatorExpCS ele) {
return String.valueOf(ele.getName());
}
protected String image(SelfExpCS ele) {
return "/org.eclipse.ocl.edit/icons/full/obj16/VariableExp.gif";
}
protected String text(SelfExpCS ele) {
return PivotConstants.SELF_NAME;
}
protected String text(StringLiteralExpCS ele) {
return String.valueOf(ele.getSegments());
}
}