/*******************************************************************************
* Copyright (c) 2010 Martin Schnabel <mb0@mb0.org>.
* 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.axdt.as3.ui.labeling;
import java.util.List;
import org.axdt.as3.model.As3Import;
import org.axdt.as3.model.As3ImportList;
import org.axdt.as3.model.As3PropertyIdentifier;
import org.axdt.avm.model.AvmDeclaredTypeReference;
import org.axdt.avm.model.AvmField;
import org.axdt.avm.model.AvmGenericReference;
import org.axdt.avm.model.AvmNamespace;
import org.axdt.avm.model.AvmOperation;
import org.axdt.avm.model.AvmPackage;
import org.axdt.avm.model.AvmParameter;
import org.axdt.avm.model.AvmType;
import org.axdt.avm.model.AvmTypeReference;
import org.axdt.avm.model.AvmVariable;
import org.axdt.avm.model.AvmVisibility;
import org.axdt.avm.model.AvmVoidReference;
import org.axdt.core.ui.img.AxdtImages;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.ui.label.DeclarativeLabelProvider;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
/**
* see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
*/
public class As3LabelProvider extends DeclarativeLabelProvider implements AxdtImages {
Object image(AvmPackage ele) {
return PACKAGE;
}
Object text(AvmPackage ele) {
return ele.getCanonicalName() == null ? "Top Level" : ele.getCanonicalName();
}
Object image(As3ImportList ele) {
return IMPORTS;
}
Object text(As3ImportList ele) {
return "imports";
}
Object image(As3Import ele) {
return IMPORT;
}
Object text(As3Import ele) {
return ele.getCanonicalName();
}
Object image(AvmType ele) {
if (ele.isClass()) return CLASS;
if (ele.isInterface()) return INTERFACE;
// TODO add void and generic images
return null;
}
Object text(AvmType ele) {
return ele.getName();
}
Object text(AvmOperation ele) {
StringBuilder result = new StringBuilder();
result.append(ele.getName()).append(paramsText(ele.getParameters()));
if (ele.getReturnType() != null)
result.append(':').append(doGetText(ele.getReturnType()));
return result.toString();
}
Object paramsText(List<AvmParameter> params) {
if (params == null || params.size() == 0) return "()";
StringBuilder result = new StringBuilder();
for (AvmParameter param:params)
( result.length() == 0
? result.append('(')
: result.append(", ")
).append(getText(param.getType()));
return result.append(')').toString();
}
Object text(AvmTypeReference ele) {
if (ele instanceof AvmGenericReference) return "*";
if (ele instanceof AvmVoidReference) return "void";
if (ele.getType() == null) return "";
return doGetText(ele.getType());
}
Object text(As3PropertyIdentifier ele) {
return ele.getName() != null
? ele.getName()
: doGetText(ele.getReference());
}
Object text(EObject eObject) {
if (eObject == null) return null;
List<EAttribute> list = Lists.transform(eObject.eClass().getEAllAttributes(), new Function<EAttribute, EAttribute>() {
public EAttribute apply(EAttribute from) {
if ("name".equals(from.getName()))
return from;
return null;
}
});
for (EAttribute attr:list) {
Object value = eObject.eGet(attr);
if (value != null) {
return value.toString();
}
}
return null;
}
Object image(AvmOperation ele) {
AvmVisibility visibility = ele.getVisibility();
if (AvmVisibility.PUBLIC.equals(visibility))
return METHOD_PUBLIC;
if (AvmVisibility.PRIVATE.equals(visibility))
return METHOD_PRIVATE;
if (AvmVisibility.PROTECTED.equals(visibility))
return METHOD_PROTECTED;
return METHOD_DEFAULT;
}
Object text(AvmField ele) {
return ele.getName()
+ (ele.getType() != null ? ":"+getText(ele.getType()) : "");
}
Object text(AvmGenericReference ele) {
return "*";
}
Object text(AvmVoidReference ele) {
return "void";
}
Object text(AvmDeclaredTypeReference ele) {
AvmType type = ele.getType();
return type == null ? "null" : type.getName();
}
Object text(AvmNamespace ele) {
return ele.getName();
}
Object image(AvmNamespace ele) {
return NAMESPACE;
}
Object image(AvmField ele) {
AvmVisibility visibility = null;
visibility = ele.getVisibility();
if (AvmVisibility.PUBLIC.equals(visibility))
return FIELD_PUBLIC;
if (AvmVisibility.PRIVATE.equals(visibility))
return FIELD_PRIVATE;
if (AvmVisibility.PROTECTED.equals(visibility))
return FIELD_PROTECTED;
return FIELD_DEFAULT;
}
Object text(AvmVariable ele) {
return ele.getName()
+ (ele.getType() != null ? ":"+doGetText(ele.getType()) : "");
}
Object image(AvmVariable ele) {
return VARIABLE;
}
}