| /******************************************************************************* |
| * |
| * Copyright (c) 2013, 2015 Intecs SpA |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * Nicholas Pacini nicholas.pacini@intecs.it |
| * Stefano Puri stefano.puri@intecs.it |
| * Laura Baracchi laura.baracchi@intecs.it |
| * Initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| package org.polarsys.chess.contracts.chessextension.listeners; |
| |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.EAttribute; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.resource.ImageRegistry; |
| import org.eclipse.papyrus.infra.core.listenerservice.IPapyrusListener; |
| import org.eclipse.papyrus.uml.tools.listeners.StereotypeElementListener.StereotypeExtensionNotification; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.Workbench; |
| import org.eclipse.ui.plugin.AbstractUIPlugin; |
| import org.eclipse.uml2.uml.Class; |
| import org.eclipse.uml2.uml.Constraint; |
| import org.eclipse.uml2.uml.LiteralString; |
| import org.eclipse.uml2.uml.Stereotype; |
| import org.eclipse.uml2.uml.UMLFactory; |
| import org.polarsys.chess.contracts.chessextension.Activator; |
| import org.polarsys.chess.contracts.chessextension.managers.CHESSContractProfileManager; |
| import org.polarsys.chess.contracts.profile.chesscontract.FormalProperty; |
| |
| public class PapyrusModelListener implements IPapyrusListener { |
| |
| private static final String CONTRACT = "CHESSContract::Contract"; |
| private static final String ASSUME = "Assume"; |
| private static final String GUARANTEE = "Guarantee"; |
| private static final Object FEATURE_NAME = "name"; |
| |
| public PapyrusModelListener() { |
| } |
| |
| @Override |
| public void notifyChanged(Notification notification) { |
| Object notifier = notification.getNotifier(); |
| |
| if ((Workbench.getInstance() != null) && (PlatformUI.getWorkbench() != null) |
| && (PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) |
| && (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) |
| && (PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().isEditorAreaVisible()) |
| && (notifier instanceof Class)) { |
| Class cblock = (Class) notifier; |
| |
| if (notification.getEventType() == StereotypeExtensionNotification.STEREOTYPE_APPLIED_TO_ELEMENT) { |
| if (cblock.getAppliedStereotype(CONTRACT) != null) { |
| |
| IEditorPart editor = null; |
| try { |
| editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); |
| } catch (Exception e) { |
| |
| } |
| if (editor != null) { |
| AbstractUIPlugin plugin = Activator.getDefault(); |
| ImageRegistry imageRegistry = plugin.getImageRegistry(); |
| Image chessImage = imageRegistry.get(Activator.CHESS_IMAGE_ID); |
| MessageDialog md = new MessageDialog(editor.getSite().getShell(), "Create Contract", chessImage, |
| "Do you want to create a contract with predefined empty Assume and Guarantee FormalProperty?", |
| MessageDialog.CONFIRM, new String[] { "Yes", "No" }, 0); |
| md.setBlockOnOpen(true); |
| int res = md.open(); |
| |
| if (res == 0) { // OK |
| Constraint assumeConst = cblock.createOwnedRule(cblock.getName() + "_" + ASSUME); |
| Constraint guaranteeConst = cblock.createOwnedRule(cblock.getName() + "_" + GUARANTEE); |
| |
| LiteralString assumeValue = UMLFactory.eINSTANCE.createLiteralString(); |
| assumeValue.setName(assumeConst.getName()); |
| assumeConst.setSpecification(assumeValue); |
| |
| LiteralString guaranteeValue = UMLFactory.eINSTANCE.createLiteralString(); |
| guaranteeValue.setName(guaranteeConst.getName()); |
| guaranteeConst.setSpecification(guaranteeValue); |
| |
| try { |
| |
| Stereotype fpStereotype = CHESSContractProfileManager |
| .getFormalProperty(cblock.eResource().getResourceSet()); |
| FormalProperty assume = (FormalProperty) assumeConst.applyStereotype(fpStereotype); |
| FormalProperty guarantee = (FormalProperty) guaranteeConst |
| .applyStereotype(fpStereotype); |
| |
| Stereotype contrStereo = cblock.getAppliedStereotype(CONTRACT); |
| cblock.setValue(contrStereo, ASSUME, assume); |
| cblock.setValue(contrStereo, GUARANTEE, guarantee); |
| } catch (Exception e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| } |
| } |
| |
| } |
| } |
| |
| if (notification.getEventType() == Notification.SET && notification.getFeature() instanceof EAttribute) { |
| if (cblock.getAppliedStereotype(CONTRACT) != null) { |
| EAttribute attr = (EAttribute) notification.getFeature(); |
| if (attr.getName().equals(FEATURE_NAME)) { |
| EList<Constraint> rules = cblock.getOwnedRules(); |
| for (Constraint constraint : rules) { |
| if (constraint.getName().contains(ASSUME)) { |
| constraint.setName(notification.getNewStringValue() + "_" + ASSUME); |
| } |
| if (constraint.getName().contains(GUARANTEE)) { |
| constraint.setName(notification.getNewStringValue() + "_" + GUARANTEE); |
| } |
| constraint.getSpecification().setName(constraint.getName()); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| } |