Commit 7a67634c authored by Brian Long's avatar Brian Long
Browse files

Merge branch 'develop' into stable

parents 969d7661 41b52716
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -3087,8 +3087,7 @@
                "mq_prioritypackage",
                "mq_payloadpackage",
                "mq_replyQueueNamepackage",
                "mq_statusQueueNamepackage",
                "mq_metadataProcessScopepackage"
                "mq_statusQueueNamepackage"
            ],
            "hiddenPropertyPackages": [
                "multiinstance_typepackage",
+10 −7
Original line number Diff line number Diff line
@@ -54,12 +54,7 @@ public class MqDelegateExecution {
	}
    
    protected void setMqVariable(String varName, Object value) {
    	varName = this.formulateVariableName(varName);
    	if (this.task.doWriteToProcessScope()) {
    	this.execution.setVariable(varName, value);
    	} else {
    		this.execution.setVariableLocal(varName, value);
    	}
    }
	
	public String formulateVariableName(String varName) {
@@ -68,10 +63,18 @@ public class MqDelegateExecution {
		return varName;
	}

	/**
	 * Always pull from the process scope.
	 * @param correlationId
	 */
	public String getCorrelationId() {
		return this.execution.getVariable(this.formulateVariableName(Constants.VARIABLE_CORRELATION_ID), String.class);
	}
	
	/**
	 * Always set at process scope.
	 * @param correlationId
	 */
	public void setCorrelationId(String correlationId) {
		this.execution.setVariable(this.formulateVariableName(Constants.VARIABLE_CORRELATION_ID), correlationId);
	}
+46 −10
Original line number Diff line number Diff line
@@ -70,26 +70,62 @@ public class MqServiceTask {
	
	@SuppressWarnings("unchecked")
	protected <T> T getFieldValueFromModel(String fieldName, Class<T> type, VariableScope varscope, boolean forceExpressionProcessing) {
		Object value = this.getFieldValueFromModel(fieldName, varscope, forceExpressionProcessing);
		
		if (value == null) {
			return null;
		} else if (String.class.isAssignableFrom(type)) {
			if (value instanceof String) {
				return (T) value;
			} else {
				return (T) value.toString();
			}
		} else {
			try {
				Method method = type.getMethod("valueOf", value.getClass());
				return (T) method.invoke(null, value);
			} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
				String strvalue;
				if (value instanceof String) {
					strvalue = (String) value;
				} else {
					strvalue = value.toString();
				}
				
				try {
					Method method = type.getMethod("valueOf", String.class);
					return (T) method.invoke(null, strvalue);
				} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e2) {
					throw new IllegalArgumentException("The target type '" + type + "' has no 'valueOf' method for String or type: " + value.getClass());
				}
			}
		}
	}
	
	protected Object getFieldValueFromModel(String fieldName, VariableScope varscope, boolean forceExpressionProcessing) {
		FieldExtension field = this.fieldMap.get(fieldName);
		if (field == null) {
			return null;
		} else if (field.getExpression() != null && field.getExpression().length() > 0) {
			this.logger.trace("Field value is recognized as an expression by the Activity framework: {}: {}", fieldName, field.getExpression());
			ExpressionManager exprman = Context.getProcessEngineConfiguration().getExpressionManager();
			Expression expr = exprman.createExpression(field.getExpression());
			return (T) expr.getValue(varscope);
			return expr.getValue(varscope);
		} else if (field.getStringValue() == null) {
			this.logger.trace("Field value is null: {}", fieldName);
			return null;
		} else if (forceExpressionProcessing) {
			this.logger.trace("Field value will be processed as potentially having expression(s): {}", fieldName);
			ExpressionManager exprman = Context.getProcessEngineConfiguration().getExpressionManager();
			Expression expr = exprman.createExpression(field.getStringValue());
			return (T) expr.getValue(varscope);
		} else if (String.class.isAssignableFrom(type)) {
			return (T) field.getStringValue();
			return expr.getValue(varscope);
		} else if (field.getStringValue().startsWith("${") && field.getStringValue().endsWith("}")) {
			this.logger.trace("Field value is recognized as an expression by the MQ extension: {}: {}", fieldName, field.getStringValue());
			ExpressionManager exprman = Context.getProcessEngineConfiguration().getExpressionManager();
			Expression expr = exprman.createExpression(field.getStringValue());
			return expr.getValue(varscope);
		} else {
			try {
				Method method = type.getMethod("valueOf", String.class);
				return (T) method.invoke(null, field.getStringValue());
			} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
				throw new IllegalArgumentException(e);
			}
			return field.getStringValue();
		}
	}

+9 −0
Original line number Diff line number Diff line
@@ -9,6 +9,15 @@ public class MqSubscribeDelegateExecution extends MqDelegateExecution {
		super(services, msts, execution);
	}
    
    protected void setMqVariable(String varName, Object value) {
    	varName = this.formulateVariableName(varName);
    	if (this.task.doWriteToProcessScope()) {
    		this.execution.setVariable(varName, value);
    	} else {
    		this.execution.setVariableLocal(varName, value);
    	}
    }
	
	public Integer getConcurrencyFromModel() {
		return this.getFieldValueFromModel(Constants.FIELD_CONCURRENCY, Integer.class);
	}