| /* |
| ----------------------------------------------------------------------- |
| -- CHESS core plugin -- |
| -- -- |
| -- Copyright (C) 2016 -- |
| -- University of Padova, ITALY -- |
| -- -- |
| -- Authors: Alessandro Zovi azovi@math.unipd.it -- |
| -- Laura Baracchi laura.baracchi@intecs.it -- |
| -- Stefano Puri stefano.puri@intecs.it -- |
| -- -- |
| -- 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 org.polarsys.chess.core.constraint; |
| |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.polarsys.chess.chessmlprofile.Core.Domain; |
| import org.polarsys.chess.core.Activator; |
| import org.polarsys.chess.core.notifications.ResourceNotification; |
| import org.polarsys.chess.core.views.DiagramStatus.DesignView; |
| |
| /** |
| * Implements the {@link IConstraint} interface. |
| * |
| * Framework usage: |
| * |
| * In a Library of constraints: |
| * |
| * public static DynamicConstraint c1 = new DynamicConstraint(1, "c1", IConstraint.WARNING, "c1 message") { |
| * @Override |
| * public boolean checkConstraint(Notification notification){ |
| * boolean successfullyVerifiedConstraint = false; |
| * ... //check conditions |
| * return successfullyVerifiedConstraint; |
| * } |
| * } |
| * |
| * In the listener: |
| * if (!Library.constraint1.check(notification).isOK()){ |
| * Library.constraint1.showUserNotification(); |
| * throw new RollbackException(Library.constraint1.getStatus()) |
| * } |
| * */ |
| |
| public abstract class DynamicConstraint implements IConstraint { |
| |
| /** The name. */ |
| private String name; |
| |
| /** The severity. */ |
| private int severity; |
| |
| /** The message. */ |
| private String message; |
| |
| /** The status. */ |
| SettableStatus status; |
| |
| /** |
| * Creates the constraint and add it to the {@link ConstraintList}. |
| */ |
| public DynamicConstraint(){ |
| ConstraintList.add(this); |
| }; |
| |
| /** |
| * Creates the constraint and add it to the {@link ConstraintList}. |
| * |
| * @param name the name of the constraint |
| * @param severity the severity, see {@link IConstraint} constants |
| * @param messagePattern the message pattern of the constraint |
| */ |
| public DynamicConstraint(String name, int severity, String messagePattern){ |
| setName(name); |
| setStatus(severity, messagePattern); |
| ConstraintList.add(this); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#getName() |
| */ |
| public String getName() { |
| return name; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#setName(java.lang.String) |
| */ |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#getSeverity() |
| */ |
| public int getSeverity() { |
| return severity; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#setSeverity(int) |
| */ |
| public void setSeverity(int severity) { |
| this.severity = severity; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#getStatus() |
| */ |
| public SettableStatus getStatus() { |
| return status; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#showUserNotification() |
| */ |
| public void showUserNotification() { |
| switch (status.getSeverity()) { |
| case IStatus.ERROR: |
| ResourceNotification.showError(status.getMessage()); |
| case IStatus.INFO: |
| case IStatus.WARNING: |
| default: |
| ResourceNotification.showInfo(status.getMessage()); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#getMessage() |
| */ |
| public String getMessage() { |
| return message; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#setMessage(java.lang.String) |
| */ |
| public void setMessage(String message) { |
| this.message = message; |
| } |
| |
| /** |
| * Sets the message. |
| * |
| * @param message the new status message |
| */ |
| public void setStatusMessage(String message) { |
| status.setMessagePattern(message); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#setStatus(int, java.lang.String) |
| */ |
| public void setStatus(int severity, String messagePattern) { |
| setSeverity(severity); |
| setMessage(messagePattern); |
| status = new SettableStatus(severity, Activator.PLUGIN_ID, messagePattern); |
| } |
| |
| /** |
| * Execute {@link #checkConstraint(Notification, DesignView)} method given the current {@link DesignView}. |
| * |
| * @param notification the notification |
| * @param currentView the current view |
| * @param theDomain the the domain |
| * @return the i status |
| */ |
| public IStatus check(Notification notification, DesignView currentView, Domain theDomain){ |
| status.setSuccess(checkConstraint(notification, currentView, theDomain)); |
| return status; |
| } |
| |
| /** |
| * Check. |
| * |
| * @param notification the notification |
| * @param theDomain the the domain |
| * @return the i status |
| */ |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#check(org.eclipse.emf.common.notify.Notification) |
| */ |
| public IStatus check(Notification notification, Domain theDomain){ |
| status.setSuccess(checkConstraint(notification, null, theDomain)); |
| return status; |
| } |
| |
| |
| /* (non-Javadoc) |
| * @see org.polarsys.chess.core.constraint.IConstraint#check(org.eclipse.emf.common.notify.Notification) |
| */ |
| public IStatus check(Notification notification){ |
| status.setSuccess(checkConstraint(notification, null, null)); |
| return status; |
| } |
| |
| /** |
| * This is the method to implement in order to perform all the checks required by this constraint. |
| * |
| * @param notification the {@link Notification} this constraint is run against |
| * @param currentView the current {@link DesignView} |
| * @param currentDomain the current domain |
| * @return true if the constraint passes / false otherwise |
| */ |
| public abstract boolean checkConstraint(Notification notification, DesignView currentView, Domain currentDomain); |
| |
| } |