/*******************************************************************************
* Copyright (c) 2011, 2012 Red Hat, Inc.
* All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
*
* @author Bob Brodt
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.property;
import org.eclipse.bpmn2.di.BPMNEdge;
import org.eclipse.bpmn2.di.BPMNShape;
import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesProvider;
import org.eclipse.bpmn2.modeler.core.runtime.CustomTaskDescriptor;
import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntime;
import org.eclipse.bpmn2.modeler.core.utils.BusinessObjectUtil;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.bpmn2.modeler.ui.util.PropertyUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.graphiti.ui.editor.DiagramEditor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
/**
* @author Bob Brodt
*
*/
public class PropertyLabelProvider extends LabelProvider {
@Override
public Image getImage(Object element) {
EObject object = getBusinessObject(element);
if (object!=null) {
CustomTaskDescriptor ctd = getCustomTaskDescriptor(object);
if (ctd!=null) {
return PropertyUtil.getImage("CustomTask"); //$NON-NLS-1$
}
return PropertyUtil.getImage(object);
}
return super.getImage(element);
}
@Override
public String getText(Object element) {
EObject object = getBusinessObject(element);
if (object!=null) {
if (object instanceof BPMNShape) {
BPMNShape s = (BPMNShape) object;
object = s.getBpmnElement();
}
else if (object instanceof BPMNEdge) {
BPMNEdge e = (BPMNEdge) object;
object = e.getBpmnElement();
}
String text = ExtendedPropertiesProvider.getTextValue(object);
// check if this is a CustomTask
CustomTaskDescriptor ctd = getCustomTaskDescriptor(object);
if (ctd!=null) {
// it is! build the property tab title from the CustomTask name
// and the object's name (which could be the same)
String name = ctd.getName();
if (!text.equals(name))
return name + ": " + text; //$NON-NLS-1$
}
return text;
}
// PictogramElement pe = BusinessObjectUtil.getPictogramElementForSelection((ISelection)element);
// if (pe!=null && pe.getGraphicsAlgorithm()!=null) {
// return ModelUtil.getLabel( pe.getGraphicsAlgorithm() );
// }
return super.getText(element);
}
private EObject getBusinessObject(Object element) {
if (element instanceof ISelection) {
return BusinessObjectUtil.getBusinessObjectForSelection((ISelection)element);
}
else if (element instanceof EObject) {
return (EObject) element;
}
return null;
}
private CustomTaskDescriptor getCustomTaskDescriptor(EObject object) {
TargetRuntime rt = getTargetRuntime(object);
if (rt!=null) {
for (CustomTaskDescriptor ctd : rt.getCustomTaskDescriptors()) {
if (ctd.getFeatureContainer()!=null) {
String id = ctd.getFeatureContainer().getId(object);
if (ctd.getId().equals(id)) {
return ctd;
}
}
}
}
return null;
}
private TargetRuntime getTargetRuntime(EObject object) {
DiagramEditor editor = ModelUtil.getDiagramEditor(object);
if (editor!=null) {
return (TargetRuntime) editor.getAdapter(TargetRuntime.class);
}
return null;
}
}