blob: beb965d9397a6bf163a974ebb825bd7416838608 [file] [log] [blame]
/*******************************************************************************
* <copyright>
*
* Copyright (c) 2005, 2010 SAP AG.
* 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:
* SAP AG - initial API, implementation and documentation
* mwenz - Bug 323359 Avoid usage of java.lang.text, ICU4J etc.
*
* </copyright>
*
*******************************************************************************/
/*
* Created on 28.06.2005
*/
package org.eclipse.graphiti.examples.common.outline.tree;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.editparts.AbstractTreeEditPart;
import org.eclipse.graphiti.examples.common.util.uiprovider.TwoObjectsContainer;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
/**
*
*/
public class AbstractGraphicsTreeEditPart extends AbstractTreeEditPart {
private Map<TwoObjectsContainer, Image> _imageRegistry = new HashMap<TwoObjectsContainer, Image>(); // ImageDescriptor
/**
* The Constant TEXT_TYPE_DEFAULT.
*/
public static final String TEXT_TYPE_DEFAULT = null;
/**
* The Constant ARRAY_TEXT_START.
*/
public static final String ARRAY_TEXT_START = "["; //$NON-NLS-1$
/**
* The Constant ARRAY_TEXT_END.
*/
public static final String ARRAY_TEXT_END = "]"; //$NON-NLS-1$
/**
* The Constant ARRAY_TEXT_SEPARATOR.
*/
public static final String ARRAY_TEXT_SEPARATOR = "; "; //$NON-NLS-1$
/**
* The Constant TUPLE_TEXT_END.
*/
public static final String TUPLE_TEXT_END = ")"; //$NON-NLS-1$
/**
* The Constant TUPLE_TEXT_SEPARATOR.
*/
public static final String TUPLE_TEXT_SEPARATOR = ", "; //$NON-NLS-1$
/**
* The Constant TUPLE_TEXT_START.
*/
public static final String TUPLE_TEXT_START = "("; //$NON-NLS-1$
/**
* @param model
*/
public AbstractGraphicsTreeEditPart(Object model) {
super(model);
}
/**
* This method is called from refreshVisuals(), to display the image of the
* TreeItem.
* <p>
* By default this method displays the image of the FIRST attribute of the
* ModelObject as the TreeItem.
*
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
@Override
protected Image getImage() {
Image result = getImage(getModel(), null);
return result;
}
/**
* This method is called by refreshVisuals(), to display the text of the
* TreeItem.
* <p>
* By default this method displays the FIRST attribute of the model Object
* as the TreeItem.
*
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals()
*/
@Override
protected String getText() {
String text = getText(getModel(), TEXT_TYPE_DEFAULT);
return (text == null) ? "" : text; //$NON-NLS-1$
}
/**
* Adds the all elements if not null.
*
* @param resultList
* the result list
* @param collection
* the collection
*/
protected void addAllElementsIfNotNull(List<Object> resultList, Collection<?> collection) {
for (Object element : collection) {
if (element != null) {
resultList.add(element);
}
}
}
private String getText(Object element, Object textType) {
// get inner objects from 'own' wrappers
// if (element instanceof PropertyForAttribute) {
// PropertyForAttribute casted = (PropertyForAttribute) element;
// element = casted.getValue();
// }
// if (element instanceof PropertyTypeForAttribute) {
// PropertyTypeForAttribute casted = (PropertyTypeForAttribute) element;
// element = casted.getAttribute();
// }
// // special handlings
// if (element instanceof Attribute) {
// Attribute casted = (Attribute) element;
// if (Util.equalsWithNull(textType, TEXT_TYPE_DEFAULT) ||
// Util.equalsWithNull(textType, TEXT_TYPE_NAME))
// return casted.getName();
// if (Util.equalsWithNull(textType, TEXT_TYPE_TOOLTIP))
// return "The attribute" + " " + casted.getName();
// if (Util.equalsWithNull(textType, TEXT_TYPE_PROPERTYSHEET_CATEGORY))
// {
// if
// (casted.refOutermostComposite().refGetValue("name").equals("pictograms"))
// {
// return "Graphics Extension";
// } else {
// return "Business Model";
// }
// }
// }
if (element instanceof EObject) {
EObject casted = (EObject) element;
if (casted != null && casted.eResource() != null) {
final EObject eObject = casted.eClass();
if (eObject instanceof EClass && eObject.eResource() != null) {
EClass eClass = (EClass) eObject;
String className = eClass.getName();
return className + " (" + casted.toString() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
if (element == null)
return ""; //$NON-NLS-1$
// Collection: convert to array and call recursively
if (element instanceof Collection<?>) {
Collection<?> collection = (Collection<?>) element;
return getText(collection.toArray(), textType);
}
// Array: build comma-separated List with recursive calls
if (element.getClass().isArray()) {
StringBuffer result = new StringBuffer();
result.append(ARRAY_TEXT_START);
boolean afterFirstElement = false;
for (int i = 0; i < Array.getLength(element); i++) {
if (afterFirstElement)
result.append(ARRAY_TEXT_SEPARATOR);
Object next = Array.get(element, i); // this automatically
// converts primitive
// types to Object types
result.append(getText(next, textType));
afterFirstElement = true;
}
result.append(ARRAY_TEXT_END);
return result.toString();
}
// Rectangle/Point
if (element instanceof Rectangle) {
Rectangle casted = (Rectangle) element;
StringBuffer result = new StringBuffer();
result.append(TUPLE_TEXT_START);
result.append(casted.x).append(TUPLE_TEXT_SEPARATOR).append(casted.y).append(TUPLE_TEXT_SEPARATOR).append(casted.width)
.append(TUPLE_TEXT_SEPARATOR).append(casted.height);
result.append(TUPLE_TEXT_END);
return result.toString();
}
if (element instanceof Point) {
Point casted = (Point) element;
StringBuffer result = new StringBuffer();
result.append(TUPLE_TEXT_START);
result.append(casted.x).append(TUPLE_TEXT_SEPARATOR).append(casted.y);
result.append(TUPLE_TEXT_END);
return result.toString();
}
// default
return element.toString();
}
private Image getImage(Object element, Object imageType) {
if (element != null) {
ImageDescriptor descriptor = getImageDescriptor(element, imageType);
TwoObjectsContainer container = new TwoObjectsContainer(descriptor, imageType);
if (descriptor != null) {
Image image = getImageRegistry().get(container);
if (image == null) {
image = descriptor.createImage();
getImageRegistry().put(container, image);
}
return image;
}
}
return null;
}
private ImageDescriptor getImageDescriptor(Object element, Object imageType) {
return null;
}
private Map<TwoObjectsContainer, Image> getImageRegistry() {
return _imageRegistry;
}
}