/**
* Copyright (c) 2010 committers of YAKINDU 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:
* committers of YAKINDU - initial API and implementation
*
*/
package org.yakindu.sct.ui.editor.policies;
import java.util.List;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.UnexecutableCommand;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.CreationEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
import org.yakindu.sct.ui.editor.editparts.StatechartTextEditPart;
import org.yakindu.sct.ui.editor.providers.SemanticHints;
import com.google.common.collect.ImmutableList;
/**
* Disallows custom size for the given model elements on creation.
*
* @author muelder
*
*/
public class CompartmentCreationEditPolicy extends CreationEditPolicy {
private static final ImmutableList<String> fixedSizeElements = ImmutableList
.of(SemanticHints.CHOICE, SemanticHints.JUNCTION,
SemanticHints.ENTRY, SemanticHints.FINALSTATE,
SemanticHints.DEEPHISTORY, SemanticHints.SHALLOWHISTORY,
SemanticHints.EXIT, SemanticHints.SYNCHRONIZATION);
@Override
protected Command getCreateElementAndViewCommand(
CreateViewAndElementRequest request) {
String semanticHint = request.getViewAndElementDescriptor()
.getSemanticHint();
if (fixedSizeElements.contains(semanticHint))
request.setSize(new Dimension(-1, -1));
return super.getCreateElementAndViewCommand(request);
}
@Override
protected Command getReparentCommand(ChangeBoundsRequest request) {
if (!isValidSelection(request.getEditParts())) {
return UnexecutableCommand.INSTANCE;
}
return super.getReparentCommand(request);
}
private boolean isValidSelection(List<?> editParts) {
for (Object editPart:editParts) {
if (editPart instanceof StatechartTextEditPart) {
return false;
}
}
return true;
}
}