blob: 4c638ddab9fac809ef380409857ea29c83c9d646 [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- 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-v20.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);
}