package org.etsi.mts.tdl.graphical.sirius.part;

import org.eclipse.draw2d.CompoundBorder;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Request;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabel;
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc;
import org.etsi.mts.tdl.graphical.sirius.EditPartConfiguration;

public class TopLevelNodeListWithHeaderEditPart extends NodeListWithHeaderEditPart {

	private ChangableViewNodeContainerRectangleFigureDesc shapeFigure;

	public TopLevelNodeListWithHeaderEditPart(View view) {
		super(view);
	}

    protected IFigure createNodeShape() {
        shapeFigure = new ChangableViewNodeContainerRectangleFigureDesc();
        if (EditPartConfiguration.needsDoubleBorder(this)) {
    		CompoundBorder marginLineBorder = new CompoundBorder(new MarginBorder(3), new LineBorder(1));
    		CompoundBorder border = new CompoundBorder(new LineBorder(1), marginLineBorder);
    		shapeFigure.setBorder(border);
        }
    	return shapeFigure;
    }
    
    @Override
    protected boolean removeBorders() {
    	return false;
    }
    
    @Override
    protected boolean needsBottomSeparator(GraphicalEditPart editPart) {
    	return false;
    }
	
	@Override
	protected DragTracker getCustomDragTracker(Request request) {
    	return null;
	}
	
	@Override
	public void reInitFigure() {
		super.reInitFigure();
		if (shapeFigure != null)
			for  (Object f: shapeFigure.getChildren()) {
				if (f instanceof SiriusWrapLabel) {
					shapeFigure.setLabelFigure((SiriusWrapLabel) f);
					break;
				}
			}
	}

	class ChangableViewNodeContainerRectangleFigureDesc extends ViewNodeContainerRectangleFigureDesc {
	    private SiriusWrapLabel labelFigure;
		public ChangableViewNodeContainerRectangleFigureDesc() {
			labelFigure = super.getLabelFigure();
		}
		@Override
		public SiriusWrapLabel getLabelFigure() {
			return labelFigure;
		}
		public void setLabelFigure(SiriusWrapLabel labelFigure) {
			this.labelFigure = labelFigure;
		}
	}
}
