| /** |
| * 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; |
| } |
| } |