/******************************************************************************* * Copyright (c) 2010-2015 Henshin developers. 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: * TU Berlin, University of Luxembourg, SES S.A. *******************************************************************************/ /** * */ package de.tub.tfs.henshin.editor.actions.flow_diagram; import java.util.LinkedList; import java.util.List; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.gef.EditPart; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.ui.actions.SelectionAction; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IWorkbenchPart; import de.tub.tfs.henshin.editor.ui.flow_diagram.FlowDiagramPage; import de.tub.tfs.henshin.editor.ui.flow_diagram.FlowDiagramView; import de.tub.tfs.henshin.editor.util.ResourceUtil; import de.tub.tfs.henshin.editor.util.flowcontrol.FlowControlParameterMappingValidator; import de.tub.tfs.henshin.model.flowcontrol.FlowDiagram; import de.tub.tfs.henshin.model.flowcontrol.ParameterMapping; import de.tub.tfs.muvitor.ui.MuvitorTreeEditor; /** * @author nam * */ public class ValidateParameterMappingsAction extends SelectionAction { /** * An unique ID for this {@link Action} */ public static final String ID = "de.tub.tfs.henshin.editor.actions.flow_diagram.ValidateParameterMappingsAction"; //$NON-NLS-1$ private static final String TEXT = "Validate Parameter Mappings"; private static final String TEXT_SIMPLE = "Validate Selected Mapping"; private static final String DESC = "Validate Parameter Mappings"; private static final String TOOL_TIP = "Validate Parameter Mappings"; private static final ImageDescriptor ICON = ResourceUtil.ICONS.CHECK .descr(18); private ParameterMapping mapping; private FlowDiagram diagram; /** * @param part */ public ValidateParameterMappingsAction(IWorkbenchPart part) { super(part); setId(ID); setText(TEXT); setDescription(DESC); setToolTipText(TOOL_TIP); setImageDescriptor(ICON); } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { FlowControlParameterMappingValidator validator = new FlowControlParameterMappingValidator(); LinkedList<ParameterMapping> failed = new LinkedList<ParameterMapping>(); if (mapping != null) { if (!validator.validate(mapping)) { failed.add(mapping); } } if (diagram != null) { for (ParameterMapping m : diagram.getParameterMappings()) { if (m.getSrc().getProvider() != diagram && m.getTarget().getProvider() != diagram && m != mapping) { if (!validator.validate(m)) { failed.add(m); } } } } else { diagram = (FlowDiagram) mapping.eContainer(); } if (!failed.isEmpty()) { MessageDialog.openError(null, "Validation Error", "Validation failed."); } else { MessageDialog.openInformation(null, "Validation Error", "Validation completed successfuly."); } IWorkbenchPart part = MuvitorTreeEditor.showView(diagram); FlowDiagramPage page = (FlowDiagramPage) ((FlowDiagramView) part) .getCurrentPage(); GraphicalViewer parametersViewer = page.getParametersViewer(); for (ParameterMapping m : failed) { Object o = parametersViewer.getEditPartRegistry().get(m); if (o instanceof GraphicalEditPart) { ((GraphicalEditPart) o).getFigure().setForegroundColor( ColorConstants.red); ((PolylineConnection) ((GraphicalEditPart) o).getFigure()) .setLineWidth(2); } } } /* * (non-Javadoc) * * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() */ @Override protected boolean calculateEnabled() { List<?> selection = getSelectedObjects(); mapping = null; diagram = null; if (selection.size() == 1) { Object selected = selection.get(0); if (selected instanceof EditPart) { Object model = ((EditPart) selected).getModel(); if (model instanceof ParameterMapping) { mapping = (ParameterMapping) model; setText(TEXT_SIMPLE); } else if (model instanceof FlowDiagram) { diagram = (FlowDiagram) model; setText(TEXT); } } } return mapping != null || diagram != null; } }