/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.bpel.ui.editparts.policies;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.eclipse.bpel.ui.figures.ElseResizeHandle;
import org.eclipse.bpel.ui.util.BPELDragEditPartsTracker;
import org.eclipse.draw2d.Cursors;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.GraphicalEditPart;
import org.eclipse.gef.Handle;


public class ElseHighlightEditPolicy extends ContainerHighlightEditPolicy {
	
	public ElseHighlightEditPolicy(boolean resizable, boolean movable) {
		super(resizable, movable);
	}
	
	@Override
	protected List<Handle> createSelectionHandles() {
		// HACK: Avoid creating selection handles for objects that have already been deleted
		// (this can occur in some tricky notification scenarios)
		if (((EObject)getHost().getModel()).eResource() == null) { return Collections.emptyList(); }
		
		List<Handle> list = new ArrayList<Handle>();
		addCaseCornerHandles((GraphicalEditPart)getHost(), list);
		return list;
	}
	static void addCaseCornerHandles(GraphicalEditPart part, List<Handle> handles) {
		handles.add(createCaseHandle(part, PositionConstants.SOUTH_EAST));
		handles.add(createCaseHandle(part, PositionConstants.SOUTH_WEST));
		handles.add(createCaseHandle(part, PositionConstants.NORTH_WEST));
		handles.add(createCaseHandle(part, PositionConstants.NORTH_EAST));
	}
	static Handle createCaseHandle(GraphicalEditPart owner, int direction) {
		ElseResizeHandle handle = new ElseResizeHandle(owner, direction);
		handle.setCursor(Cursors.SIZEALL);
		handle.setDragTracker(new BPELDragEditPartsTracker(owner));
		return handle;
	}
}
