gt: 		_labelText = new Text();
context: package de.htwberlin.selabs.ssme.parts;
  
  import java.beans.PropertyChangeEvent;
  import java.beans.PropertyChangeListener;
  import java.util.Collections;
  import java.util.List;
  
  import org.eclipse.core.commands.ExecutionException;
  import org.eclipse.gef4.fx.nodes.GeometryNode;
  import org.eclipse.gef4.geometry.planar.Point;
  import org.eclipse.gef4.geometry.planar.Rectangle;
  import org.eclipse.gef4.mvc.domain.IDomain;
  import org.eclipse.gef4.mvc.fx.policies.FXTransformPolicy;
  import org.eclipse.gef4.mvc.models.FocusModel;
  import org.eclipse.gef4.mvc.parts.IContentPart;
  
  import com.google.common.collect.HashMultimap;
  import com.google.common.collect.SetMultimap;
  import com.google.common.reflect.TypeToken;
  
  import de.htwberlin.selabs.ssme.models.VariableModel;
  import de.htwberlin.selabs.ssme.operations.VariableChangeTextOperation;
  import de.htwberlin.selabs.ssme.operations.VariableChangeTypeOperation;
  import javafx.beans.value.ChangeListener;
  import javafx.beans.value.ObservableValue;
  import javafx.geometry.Bounds;
  import javafx.geometry.Insets;
  import javafx.scene.Node;
  import javafx.scene.control.TextField;
  import javafx.scene.layout.HBox;
  import javafx.scene.layout.StackPane;
  import javafx.scene.paint.Color;
  import javafx.scene.text.Font;
  import javafx.scene.text.FontWeight;
  import javafx.scene.text.Text;
  import javafx.scene.transform.Affine;
  
  /**
   * Class representing the controller for the variable derived from
   * AbstractFXContentPart<StackPane> implementing PropertyChangeListener.
   */
  public class VariablePart extends GenericElementPart<StackPane> implements PropertyChangeListener {
  
  	private Text _labelText;
  
  	private Text _varType;
  
  	private StackPane _visual;
  
  	private HBox _variableGroup;
  
  	private StackPane _nameGroup;
  
  	private StackPane _typeGroup;
  
  	/**
  	 * Member GeometryNode variable to hold (resizable) shape of the
  	 * VariablePart.
  	 */
  	private GeometryNode<Rectangle> _fxGeometryNode;
  
  	/**
  	 * Member Boolean variable that acts like a flag to determine whether the
  	 * label of the VariablePart is being edited or not (defaults to false).
  	 */
  	private boolean _editStatus = false;
  
  	/**
  	 * Member Textfield variable to provide an editable textfield (JavaFX) for
  	 * the label of a VariablePart.
  	 */
  	private TextField _editName;
  
  	/**
  	 * Member Textfield variable to provide an editable textfield (JavaFX) for
  	 * the label of a VariablePart.
  	 */
  	private TextField _editType;
  
  	/**
  	 * Member Color variable to hold the specific fill color value for the
  	 * VariablePart.
  	 */
  	private static final Color fillColor = Color.LIGHTSALMON;
  
  	/**
  	 * Member Font variable to hold the specific font-type, weight and size for
  	 * the VariablePart.
  	 */
  	private Font nameFont = Font.font("Monospace", FontWeight.BOLD, 15);
  
  	/**
  	 * Member Font variable to hold the specific font-type, weight and size for
  	 * the VariablePart.
  	 */
  	private Font typeFont = Font.font("Monospace", FontWeight.LIGHT, 15);
  
  	/**
  	 * Member Color variable to hold the specific text color value for the
  	 * VariablePart.
  	 */
  	private static final Color textColor = Color.BLACK;
  
  	/**
  	 * Method to return the Content ("VariableModel") of the
  	 * VariablePart.
  	 * 
  	 * @returns VariableModel containing the content of the associated model
  	 */
  	@Override
  	public VariableModel getContent() {
  		return (VariableModel) super.getContent();
  	}
  
  	/**
  	 * Member ChangeListener variable implementing the behavior on change of the
  	 * observeable list of properties.
  	 */
  	private final ChangeListener<Object> objectObserver = new ChangeListener<Object>() {
  		@Override
  		public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) {
  			refreshVisual();
  		}
  	};
  
  	/**
  	 * Nested class FocusListener binding an additional change listener to the
  	 * model part and implementing the behavior on change of the observeable
  	 * list of properties in case the focus has changed.
  	 */
  	private class FocusListener implements ChangeListener<IContentPart<Node, ? extends Node>> {
  
  		private final VariablePart nodePart;
  
  		FocusListener(VariablePart nodePart) {
  			this.nodePart = nodePart;
  		}
  
  		@Override
  		public void changed(ObservableValue<? extends IContentPart<Node, ? extends Node>> observable,
  				IContentPart<Node, ? extends Node> oldValue, IContentPart<Node, ? extends Node> newValue) {
  			if (nodePart != newValue) {
  				stopEditing(true);
  			}
  		}
  	}
  
  	/**
  	 * Member ChangeListener variable instantiated as FocusListener to observe
  	 * focus changes
  	 */
  	private ChangeListener<IContentPart<Node, ? extends Node>> focusObserver = new FocusListener(this);
  
  	/**
  	 * Implements the post activate() hook for the conrete LabeledStatePart
  	 */
  	@SuppressWarnings("serial")
  	@Override
  	protected void doActivate() {
  		super.doActivate();
  		// adding the ChangeListener "objectObserver" to the connected model
  		getContent().addPropertyChangeListener(objectObserver);
  
  		/**
  		 * local variable focusModel of type FocusModel<Node> to synchronize
  		 * keyboard focus with the model
  		 */
  		FocusModel<Node> focusModel = getRoot().getViewer().getAdapter(new TypeToken<FocusModel<Node>>() {
  		});
  
  		// adding the focusObserver of type FocusListener to the connected model
  		focusModel.focusProperty().addListener(focusObserver);
  
  	}
  
  	/**
  	 * Implements the pre deactivate() hook for the conrete VariablePart
  	 */
  	@SuppressWarnings("serial")
  	@Override
  	protected void doDeactivate() {
  		// remove objectObserver of type ChangeListner from the connected model
  		getContent().removePropertyChangeListener(objectObserver);
  
  		/**
  		 * local variable focusModel of type FocusModel<Node> to synchronize
  		 * keyboard focus with the model
  		 */
  		FocusModel<Node> focusModel = getRoot().getViewer().getAdapter(new TypeToken<FocusModel<Node>>() {
  		});
  		// remove focusObserver of type FocusListener from the connected model
  		focusModel.focusProperty().removeListener(focusObserver);
  
  		super.doDeactivate();
  	}
  
  	/**
  	 * Method to create the visuals for the specific VariablePart.
  	 * 
  	 * @returns layout element/visual for the part as StackPane
  	 */
  	@Override
  	protected StackPane createVisual() {
  		_visual = new StackPane();
  
  		_variableGroup = new HBox();
  
  		_nameGroup = new StackPane();
  		_typeGroup = new StackPane();
  
  