All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.effektif.workflow.api.workflowinstance.ScopeInstance Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014 Effektif GmbH.
 *
 * 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 com.effektif.workflow.api.workflowinstance;

import com.effektif.workflow.api.json.GenericType;
import com.effektif.workflow.api.model.ValueConverter;
import com.effektif.workflow.api.workflow.Extensible;

import org.joda.time.LocalDateTime;

import java.lang.reflect.Type;
import java.util.List;


/**
 * @author Tom Baeyens
 */
public abstract class ScopeInstance extends Extensible {

  protected LocalDateTime start;
  protected LocalDateTime end;
  protected String endState;
  protected Long duration;
  protected List activityInstances;
  protected List variableInstances;
  public static final String ENDSTATE_CANCELED = "canceled";

  public ActivityInstance findOpenActivityInstance(String activityId) {
    if (activityId!=null && activityInstances!=null) {
      for (ActivityInstance activityInstance: activityInstances) {
        ActivityInstance theOne = activityInstance.findOpenActivityInstance(activityId);
        if (theOne!=null) {
          return theOne;
        }
      }
    }
    return null;
  }

  public  T getVariableValue(String variableId, Class rawClass, Type... typeArgs) {
    return getVariableValue(variableId, new GenericType(rawClass, typeArgs));
  }

  public  T getVariableValue(String variableId, Type type) {
    Object value = getVariableValue(variableId);
    if (value==null) {
      return (T) value;
    }
    if (type instanceof Class && ((Class)type).isAssignableFrom(value.getClass())) {
      return (T) value;
    }
    return ValueConverter.shoehorn(value, type);
  }
  
  public  T getVariableValue(String variableId) {
    if (variableId==null) {
      return null;
    }
    if (variableInstances!=null) {
      for (VariableInstance variableInstance: variableInstances) {
        if (variableId.equals(variableInstance.getVariableId())) {
          return (T) variableInstance.getValue();
        }
      }
    }
    return null;
  }
  
  public Long getVariableValueLong(String variableId) {
    Object value = getVariableValue(variableId);
    if (value==null) {
      return null;
    }
    if (value instanceof Number) {
      return ((Number)value).longValue();
    }
    throw new RuntimeException("Value is not a number: "+value+" ("+value.getClass().getName()+")");
  }

  public LocalDateTime getVariableValueDate(String variableId) {
    Object value = getVariableValue(variableId);
    if (value==null) {
      return null;
    }
    if (value instanceof LocalDateTime) {
      return ((LocalDateTime)value);
    }
    throw new RuntimeException("Value is not a date: "+value+" ("+value.getClass().getName()+")");
  }

  public Double getVariableValueDouble(String variableId) {
    Object value = getVariableValue(variableId);
    if (value==null) {
      return null;
    }
    if (value instanceof Number) {
      return ((Number)value).doubleValue();
    }
    throw new RuntimeException("Value is not a double: "+value+" ("+value.getClass().getName()+")");
  }

  public LocalDateTime getStart() {
    return this.start;
  }
  public void setStart(LocalDateTime start) {
    this.start = start;
  }

  public LocalDateTime getEnd() {
    return this.end;
  }
  public void setEnd(LocalDateTime end) {
    this.end = end;
  }
  
  public boolean isEnded() {
    return end!=null;
  }
  
  public boolean isOpen() {
    return !isEnded();
  }

  public Long getDuration() {
    return this.duration;
  }
  public void setDuration(Long duration) {
    this.duration = duration;
  }
  
  public List getActivityInstances() {
    return this.activityInstances;
  }
  public void setActivityInstances(List activityInstances) {
    this.activityInstances = activityInstances;
  }
  
  public List getVariableInstances() {
    return this.variableInstances;
  }
  public void setVariableInstances(List variableInstances) {
    this.variableInstances = variableInstances;
  }

  public String getEndState() {
    return this.endState;
  }
  public void setEndState(String endState) {
    this.endState = endState;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy