content: /*
   * Copyright 2010-2025 Hyland Software, Inc. and its affiliates.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.activiti.validation.validator.impl;
  
  import java.util.List;
  import org.activiti.bpmn.model.FieldExtension;
  import org.activiti.bpmn.model.TaskWithFieldExtensions;
  import org.activiti.validation.ValidationError;
  import org.activiti.validation.validator.Problems;
  import org.activiti.validation.validator.ProcessLevelValidator;
  
  public abstract class ExternalInvocationTaskValidator extends ProcessLevelValidator {
  
      protected void validateFieldDeclarationsForEmail(
          org.activiti.bpmn.model.Process process,
          TaskWithFieldExtensions task,
          List<FieldExtension> fieldExtensions,
          List<ValidationError> errors
      ) {
          boolean toDefined = false;
          boolean textOrHtmlDefined = false;
  
          for (FieldExtension fieldExtension : fieldExtensions) {
              if (fieldExtension.getFieldName().equals("to")) {
                  toDefined = true;
              }
              if (fieldExtension.getFieldName().equals("html")) {
                  textOrHtmlDefined = true;
              }
              if (fieldExtension.getFieldName().equals("htmlVar")) {
                  textOrHtmlDefined = true;
              }
              if (fieldExtension.getFieldName().equals("text")) {
                  textOrHtmlDefined = true;
              }
              if (fieldExtension.getFieldName().equals("textVar")) {
                  textOrHtmlDefined = true;
              }
          }
  
          if (!toDefined) {
              addError(errors, Problems.MAIL_TASK_NO_RECIPIENT, process, task);
          }
          if (!textOrHtmlDefined) {
              addError(errors, Problems.MAIL_TASK_NO_CONTENT, process, task);
          }
      }
  
      protected void validateFieldDeclarationsForShell(
          org.activiti.bpmn.model.Process process,
          TaskWithFieldExtensions task,
          List<FieldExtension> fieldExtensions,
          List<ValidationError> errors
      ) {
          boolean shellCommandDefined = false;
  
          for (FieldExtension fieldExtension : fieldExtensions) {
              String fieldName = fieldExtension.getFieldName();
              String fieldValue = fieldExtension.getStringValue();
  
              if (fieldName.equals("command")) {
                  shellCommandDefined = true;
              }
  
              if (
                  (fieldName.equals("wait") || fieldName.equals("redirectError") || fieldName.equals("cleanEnv")) &&
                  !fieldValue.toLowerCase().equals("true") &&
                  !fieldValue.toLowerCase().equals("false")
              ) {
                  addError(errors, Problems.SHELL_TASK_INVALID_PARAM, process, task);
              }
          }
  
          if (!shellCommandDefined) {
              addError(errors, Problems.SHELL_TASK_NO_COMMAND, process, task);
          }
      }
  
      protected void validateFieldDeclarationsForDmn(
          org.activiti.bpmn.model.Process process,
          TaskWithFieldExtensions task,
          List<FieldExtension> fieldExtensions,
          List<ValidationError> errors
      ) {
          boolean keyDefined = false;
  
          for (FieldExtension fieldExtension : fieldExtensions) {
              String fieldName = fieldExtension.getFieldName();
              String fieldValue = fieldExtension.getStringValue();
  
              if (fieldName.equals("decisionTableReferenceKey") && fieldValue != null && fieldValue.length() > 0) {
                  keyDefined = true;
              }
          }
  
          if (!keyDefined) {
              addError(errors, Problems.DMN_TASK_NO_KEY, process, task);
          }
      }
  }
  