/**
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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.
*
*/
package gov.redhawk.diagram.providers;
import gov.redhawk.diagram.edit.parts.DomainFinderEditPart;
import gov.redhawk.diagram.edit.parts.FindByStubCompartmentEditPart;
import gov.redhawk.diagram.edit.parts.FindByStubEditPart;
import gov.redhawk.diagram.edit.parts.NamingServiceEditPart;
import gov.redhawk.diagram.edit.policies.ComponentInstantiationItemLayoutEditPolicy;
import gov.redhawk.diagram.edit.policies.ComponentPlacementCompartmentItemLayoutEditPolicy;
import gov.redhawk.diagram.edit.policies.OpenDiagramEditPolicy;
import gov.redhawk.diagram.part.PartitioningVisualIDRegistry;
import gov.redhawk.diagram.part.PartitioningVisualIDRegistry.MAPPING_ID;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
import org.eclipse.gmf.runtime.common.core.service.IOperation;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation;
import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider;
import org.eclipse.gmf.runtime.notation.View;
/**
* @since 3.0
*
*/
public abstract class PartitioningEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider {
protected final PartitioningVisualIDRegistry visualIdRegistry; // SUPPRESS CHECKSTYLE Protected field
protected final PartitioningElementTypes elementTypes; // SUPPRESS CHECKSTYLE Protected field
public PartitioningEditPolicyProvider(final PartitioningElementTypes elementTypes, final PartitioningVisualIDRegistry visualIdRegistry) {
this.visualIdRegistry = visualIdRegistry;
this.elementTypes = elementTypes;
}
@Override
public void createEditPolicies(final EditPart editPart) {
final View view = (View) editPart.getModel();
if (!this.visualIdRegistry.getModelID().equals(this.visualIdRegistry.getModelID(view))) {
return;
}
final int visualId = this.visualIdRegistry.getVisualID(view);
switch (visualId) {
case FindByStubEditPart.VISUAL_ID:
setupFindByStubEditPart(editPart);
break;
case FindByStubCompartmentEditPart.VISUAL_ID:
setupFindByStubCompartmentEditPart(editPart);
break;
case DomainFinderEditPart.VISUAL_ID:
setupDomainFinderEditPart(editPart);
break;
case NamingServiceEditPart.VISUAL_ID:
setupNamingServiceEditPart(editPart);
break;
default:
final MAPPING_ID mappingId = this.visualIdRegistry.getMappingID(visualId);
if (mappingId != null) {
switch (mappingId) {
case UsesPortStubEditPart:
setupUsesPortStubEditPart(editPart);
break;
case ProvidesPortStubEditPart:
setupProvidesPortStubEditPart(editPart);
break;
case PartitioningEditPart:
setupPartitioningEditPart(editPart);
break;
case PartitioningCompartmentEditPart:
setupPartitioningCompartmentEditPart(editPart);
break;
case ComponentPlacementCompartmentEditPart:
setupComponentPlacementCompartmentEditPart(editPart);
break;
case ComponentPlacementEditPart:
setupComonentPlacementEditPart(editPart);
break;
case ComponentSupportedInterfaceStubEditPart:
setupComponentSupportedInterfaceStubEditPart(editPart);
break;
case ComponentInstantiationEditPart:
setupComponentInstantiationEditPart(editPart);
break;
case ProvidesPortStubNameEditPart:
setupProvidesPortStubNameEditPart(editPart);
break;
case UsesPortStubNameEditPart:
setupUsesPortStubNameEditPart(editPart);
break;
default:
break;
}
}
}
}
protected void setupNamingServiceEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected void setupDomainFinderEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected void setupFindByStubCompartmentEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected void setupPartitioningCompartmentEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
@Override
public boolean provides(final IOperation operation) {
return operation instanceof CreateEditPoliciesOperation;
}
protected void setupComonentPlacementEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected void setupComponentInstantiationEditPart(final EditPart editPart) {
editPart.installEditPolicy(EditPolicy.LAYOUT_ROLE, new ComponentInstantiationItemLayoutEditPolicy(this.visualIdRegistry));
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createComponentInstantiationItemSemanticEditPolicy());
editPart.installEditPolicy(EditPolicyRoles.OPEN_ROLE, new OpenDiagramEditPolicy());
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected abstract EditPolicy createComponentInstantiationItemSemanticEditPolicy();
protected void setupComponentPlacementCompartmentEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createComponentPlacementCompartmentItemSemanticEditPolicy());
editPart.installEditPolicy(EditPolicy.LAYOUT_ROLE, new ComponentPlacementCompartmentItemLayoutEditPolicy());
}
protected abstract EditPolicy createComponentPlacementCompartmentItemSemanticEditPolicy();
protected void setupComponentSupportedInterfaceStubEditPart(final EditPart editPart) {
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createComponentSupportedInterfaceStubItemSemanticEditPolicy());
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected abstract EditPolicy createComponentSupportedInterfaceStubItemSemanticEditPolicy();
protected void setupFindByStubEditPart(final EditPart editPart) {
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createFindByStubItemSemanticEditPolicy(this.elementTypes, this.visualIdRegistry));
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected abstract EditPolicy createFindByStubItemSemanticEditPolicy(PartitioningElementTypes elementTypes2, PartitioningVisualIDRegistry visualIdRegistry2);
protected void setupPartitioningEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
}
protected void setupProvidesPortStubEditPart(final EditPart editPart) {
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createProvidesPortStubItemSemanticEditPolicy());
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
}
protected abstract EditPolicy createProvidesPortStubItemSemanticEditPolicy();
protected void setupProvidesPortStubNameEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicy.DIRECT_EDIT_ROLE);
editPart.removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
}
protected void setupUsesPortStubEditPart(final EditPart editPart) {
editPart.installEditPolicy(EditPolicyRoles.SEMANTIC_ROLE, createUsesPortStubItemSemanticEditPolicy());
editPart.removeEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE);
editPart.removeEditPolicy(EditPolicyRoles.POPUPBAR_ROLE);
}
protected abstract EditPolicy createUsesPortStubItemSemanticEditPolicy();
protected void setupUsesPortStubNameEditPart(final EditPart editPart) {
editPart.removeEditPolicy(EditPolicy.DIRECT_EDIT_ROLE);
editPart.removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
}
}