/* license-start
*
* Copyright (C) 2008 - 2013 Crispico, <http://www.crispico.com/>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details, at <http://www.gnu.org/licenses/>.
*
* Contributors:
* Crispico - Initial API and implementation
*
* license-end
*/
package org.flowerplatform.editor.model.java;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.flowerplatform.codesync.processor.CodeSyncDecoratorsProcessor;
import org.flowerplatform.codesync.remote.CodeSyncOperationsService;
import org.flowerplatform.common.ied.InplaceEditorLabelParser;
import org.flowerplatform.editor.model.EditorModelPlugin;
import com.crispico.flower.mp.model.astcache.code.AstCacheCodePackage;
import com.crispico.flower.mp.model.astcache.code.ExtendedModifier;
import com.crispico.flower.mp.model.astcache.code.Modifier;
import com.crispico.flower.mp.model.codesync.CodeSyncElement;
/**
* @author Mariana Gheorghe
*/
public abstract class JavaClassChildProcessor extends CodeSyncDecoratorsProcessor {
protected InplaceEditorLabelParser labelParser = new InplaceEditorLabelParser(new JavaInplaceEditorProvider());
@Override
public String getIconBeforeCodeSyncDecoration(EObject object) {
return composeImage(getCodeSyncElement(object));
}
abstract protected String getImageForVisibility(int type);
//////////////////////////////////
// Utility methods
//////////////////////////////////
protected CodeSyncElement getCodeSyncElement(EObject object) {
return (CodeSyncElement) object;
}
protected Object getFeatureValue(CodeSyncElement codeSyncElement, EStructuralFeature feature) {
return CodeSyncOperationsService.getInstance().getFeatureValue(codeSyncElement, feature);
}
protected String encodeVisibility(CodeSyncElement object) {
List<ExtendedModifier> modifiers = (List<ExtendedModifier>)
getFeatureValue(object, AstCacheCodePackage.eINSTANCE.getModifiableElement_Modifiers());
if (modifiers != null) {
for (ExtendedModifier modifier : modifiers) {
if (modifier instanceof Modifier) {
switch (((Modifier) modifier).getType()) {
case org.eclipse.jdt.core.dom.Modifier.PUBLIC: return "+";
case org.eclipse.jdt.core.dom.Modifier.PROTECTED: return "#";
case org.eclipse.jdt.core.dom.Modifier.PRIVATE: return "-";
default: return "~";
}
}
break;
}
}
return "";
}
/**
* @author Sebastian Solomon
*/
public String composeImage(CodeSyncElement object) {
String result = new String();
String editorModelPakege = EditorModelPlugin.getInstance()
.getBundleContext().getBundle().getSymbolicName();
// decorate for visibility
List<ExtendedModifier> modifiers = (List<ExtendedModifier>) CodeSyncOperationsService.getInstance()
.getFeatureValue(
object,
AstCacheCodePackage.eINSTANCE
.getModifiableElement_Modifiers());
Modifier visibility = null;
if (modifiers != null) {
for (ExtendedModifier modifier : modifiers) {
if (modifier instanceof Modifier) {
switch (((Modifier) modifier).getType()) {
case org.eclipse.jdt.core.dom.Modifier.PUBLIC:
case org.eclipse.jdt.core.dom.Modifier.PROTECTED:
case org.eclipse.jdt.core.dom.Modifier.PRIVATE:
visibility = (Modifier) modifier;
break;
case org.eclipse.jdt.core.dom.Modifier.STATIC:
result += editorModelPakege
+ "/images/ovr16/Static.gif|";
break;
case org.eclipse.jdt.core.dom.Modifier.FINAL: // "org.flowerplatform.editor.model/images/ovr16/Final.gif|";
result += editorModelPakege
+ "/images/ovr16/Final.gif|";
break;
}
}
}
}
result = (getImageForVisibility(visibility == null ? 0 : visibility
.getType())) + "|" + result;
if (result.length() != 0)
result = result.substring(0, result.length() - 1);
return result;
}
}