blob: a76064f4e6c50b848cb3c0ac48919ddac38f2644 [file] [log] [blame]
/**
* Copyright (c) 2011, 2018 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* 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:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*
* generated by Xtext 2.11.0
*/
package org.eclipse.osbp.xtext.signal.validation;
import java.util.HashSet;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osbp.xtext.signal.SignalDSLPackage;
import org.eclipse.osbp.xtext.signal.SignalHandler;
import org.eclipse.osbp.xtext.signal.SignalHandlerTypeEnum;
import org.eclipse.osbp.xtext.signal.SignalPackage;
import org.eclipse.osbp.xtext.signal.SignalTypeEnum;
import org.eclipse.osbp.xtext.signal.SignalWatcher;
import org.eclipse.osbp.xtext.signal.validation.AbstractSignalDSLValidator;
import org.eclipse.xtext.validation.Check;
/**
* This class contains custom validation rules.
*
* See https://www.eclipse.org/Xtext/documentation/303_runtime_concepts.html#validation
*/
@SuppressWarnings("all")
public class SignalDSLValidator extends AbstractSignalDSLValidator {
@Check
public void checkSignalHandling(final SignalWatcher watcher) {
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
if ((handler != null)) {
if (((watcher != null) && (handler.getActionType() != null))) {
this.checkHandlerActionType(handler);
SignalTypeEnum signal = watcher.getSignal();
if (((signal != null) && signal.equals(SignalTypeEnum.ALL))) {
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.CREATESIGNALS))) {
boolean _equals = SignalHandlerTypeEnum.DOAFTERCREATE.equals(handler.getActionType());
boolean _not = (!_equals);
if (_not) {
this.error("Only the handler type doAfterCreate is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.DELETESIGNALS))) {
boolean _equals_1 = SignalHandlerTypeEnum.DOAFTERDELETE.equals(handler.getActionType());
boolean _not_1 = (!_equals_1);
if (_not_1) {
this.error("Only the handler type doAfterDelete is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.MODIFYSIGNALS))) {
boolean _equals_2 = SignalHandlerTypeEnum.DOAFTERMODIFY.equals(handler.getActionType());
boolean _not_2 = (!_equals_2);
if (_not_2) {
this.error("Only the handler type doAföterModify is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
}
}
}
}
}
}
}
}
public Object checkHandlerActionType(final SignalHandler handler) {
Object _xblockexpression = null;
{
EObject _eContainer = handler.eContainer();
SignalTypeEnum signal = ((SignalWatcher) _eContainer).getSignal();
Object _xifexpression = null;
if (((signal != null) && signal.equals(SignalTypeEnum.ALL))) {
_xifexpression = null;
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.CREATESIGNALS))) {
boolean _equals = SignalHandlerTypeEnum.DOAFTERCREATE.equals(handler.getActionType());
boolean _not = (!_equals);
if (_not) {
this.error("Only the handler type doAfterCreate is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.DELETESIGNALS))) {
boolean _equals_1 = SignalHandlerTypeEnum.DOAFTERDELETE.equals(handler.getActionType());
boolean _not_1 = (!_equals_1);
if (_not_1) {
this.error("Only the handler type doAfterDelete is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
} else {
if (((signal != null) && signal.equals(SignalTypeEnum.MODIFYSIGNALS))) {
boolean _equals_2 = SignalHandlerTypeEnum.DOAFTERMODIFY.equals(handler.getActionType());
boolean _not_2 = (!_equals_2);
if (_not_2) {
this.error("Only the handler type doAfterModify is allowed here.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__ACTION_TYPE);
}
}
}
}
}
_xblockexpression = _xifexpression;
}
return _xblockexpression;
}
@Check
public void checkDuplicateWatcherNames(final SignalPackage pkg) {
HashSet<String> watchers = new HashSet<String>();
EList<SignalWatcher> _watchers = pkg.getWatchers();
for (final SignalWatcher watcher : _watchers) {
boolean _contains = watchers.contains(watcher.getName());
boolean _not = (!_contains);
if (_not) {
watchers.add(watcher.getName());
} else {
this.error("The watcher id has to be unique.", watcher, SignalDSLPackage.Literals.SIGNAL_WATCHER__NAME);
}
}
}
@Check
public void checkDuplicateHandlerNames(final SignalWatcher watcher) {
HashSet<String> handlers = new HashSet<String>();
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
boolean _contains = handlers.contains(handler.getName());
boolean _not = (!_contains);
if (_not) {
handlers.add(handler.getName());
} else {
this.error("The handler id has to be unique.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__NAME);
}
}
}
@Check
public void checkDuplicateDirectoryNames(final SignalPackage pkg) {
HashSet<String> watcherdir = new HashSet<String>();
EList<SignalWatcher> _watchers = pkg.getWatchers();
for (final SignalWatcher watcher : _watchers) {
boolean _contains = watcherdir.contains(watcher.getDirectory());
boolean _not = (!_contains);
if (_not) {
watcherdir.add(watcher.getDirectory());
} else {
String _directory = watcher.getDirectory();
String _plus = ("The watcher directory \'" + _directory);
String _plus_1 = (_plus + "\' is already in use. Please choose another directory.");
this.error(_plus_1, watcher, SignalDSLPackage.Literals.SIGNAL_WATCHER__DIRECTORY);
}
}
}
public boolean checkDuplicateFileMasks(final SignalWatcher watcher) {
HashSet<String> filemasks = new HashSet<String>();
EList<SignalHandler> _handlers = watcher.getHandlers();
for (final SignalHandler handler : _handlers) {
String _name = handler.getName();
String _plus = (_name + ".");
String _filemask = handler.getFilemask();
String _plus_1 = (_plus + _filemask);
boolean _contains = filemasks.contains(_plus_1);
boolean _not = (!_contains);
if (_not) {
String _name_1 = handler.getName();
String _plus_2 = (_name_1 + ".");
String _filemask_1 = handler.getFilemask();
String _plus_3 = (_plus_2 + _filemask_1);
filemasks.add(_plus_3);
} else {
this.error("The handler file mask can\'t be the same as another one, inside a watcher on the same directory.", handler, SignalDSLPackage.Literals.SIGNAL_HANDLER__FILEMASK);
return true;
}
}
return false;
}
}