/*******************************************************************************
* Copyright (c) 2010-2015 Henshin developers. 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:
* TU Berlin, University of Luxembourg, SES S.A.
*******************************************************************************/
package de.tub.tfs.henshin.tggeditor.editparts.graphical;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.henshin.model.Attribute;
import org.eclipse.emf.henshin.model.HenshinPackage;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.jface.viewers.ICellEditorValidator;
import de.tub.tfs.henshin.tgg.TAttribute;
import de.tub.tfs.henshin.tgg.TggPackage;
import de.tub.tfs.henshin.tggeditor.editpolicies.graphical.AttributeComponentEditPolicy;
import de.tub.tfs.muvitor.gef.directedit.IDirectEditPart.IGraphicalDirectEditPart;
import de.tub.tfs.muvitor.gef.editparts.AdapterGraphicalEditPart;
public class AttributeEditPart extends AdapterGraphicalEditPart<TAttribute> implements IGraphicalDirectEditPart {
/** The marker label */
protected TextWithMarker labelWithMarker;
/** The model element of the figure */
protected TAttribute tAttribute;
protected int MAXLENGTH=50;
/**
* Instantiates a new attribute edit part.
*
* @param model the model
*/
public AttributeEditPart(TAttribute model) {
super(model);
tAttribute = getCastedModel();
createMarker();
}
protected void createMarker() {
labelWithMarker=new TextWithMarker();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
*/
@Override
protected IFigure createFigure() {
setName();
return labelWithMarker;
}
/* (non-Javadoc)
* @see muvitorkit.gef.editparts.AdapterGraphicalEditPart#performDirectEdit()
*/
@Override
protected void performDirectEdit() {
super.performDirectEdit();
}
/*
* (non-Javadoc)
*
* @see muvitorkit.gef.editparts.AdapterGraphicalEditPart#notifyChanged(org.eclipse.emf.common.notify.Notification)
*/
@Override
protected void notifyChanged(Notification notification) {
final int featureId = notification.getFeatureID(HenshinPackage.class);
switch (featureId) {
case -1:
case HenshinPackage.ATTRIBUTE__TYPE:
case HenshinPackage.ATTRIBUTE__VALUE:
labelWithMarker.setText(getName());
refreshVisuals();
case TggPackage.TATTRIBUTE__MARKER_TYPE:
refreshVisuals();
}
}
/* (non-Javadoc)
* @see org.eclipse.gef.editparts.AbstractEditPart#understandsRequest(org.eclipse.gef.Request)
*/
@Override
public boolean understandsRequest(Request req) {
if (req instanceof ChangeBoundsRequest) return false;
return super.understandsRequest(req);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#registerVisuals()
*/
@Override
protected void refreshVisuals() {
setName();
if (getParent() != null)
((TNodeObjectEditPart) getParent()).getFigure().repaint();
labelWithMarker.setMarker(tAttribute.getMarkerType());
super.refreshVisuals();
}
/*
* (non-Javadoc)
* @see muvitorkit.gef.directedit.IDirectEditPart.IGraphicalDirectEditPart#getValueLabelTextBounds()
*/
@Override
public Rectangle getValueLabelTextBounds() {
return labelWithMarker.text.getTextBounds();
}
/*
* (non-Javadoc)
* @see muvitorkit.gef.directedit.IDirectEditPart#getDirectEditFeatureID()
*/
@Override
public int getDirectEditFeatureID() {
return HenshinPackage.ATTRIBUTE__VALUE;
}
/**
* Gets the name.
*
* @return the name
*/
protected String getName(){
String s="";
if (getCastedModel().getType() != null) {
s=("- " + getCastedModel().getType().getName() + "="
+ getCastedModel().getValue());
}
return s;
}
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.COMPONENT_ROLE, new AttributeComponentEditPolicy());
}
@Override
public ICellEditorValidator getDirectEditValidator() {
return null;
}
@Override
public void updateValueDisplay(String value) {
setName();
}
protected void setName() {
try {
Attribute attribute = getCastedModel();
String attributeString = "";
if (attribute.getType() != null) {
attributeString += attribute.getType().getName();
}
attributeString += "=";
if (attribute.getValue() != null) {
attributeString += autoShorten(attribute.getValue());
}
labelWithMarker.setText(attributeString);
} catch (ClassCastException ex){
if (getCastedModel().getNode() != null)
getCastedModel().getNode().getAttributes().remove(getCastedModel());
}
}
private String autoShorten(String value) {
if(value.length()>MAXLENGTH)
value=value.substring(0, MAXLENGTH-3) + "...";
return value;
}
@Override
protected void performOpen() {
//super.performOpen();
}
}