io.camunda.zeebe.spring.client.jobhandling.parameter.VariableResolver Maven / Gradle / Ivy
The newest version!
/*
* Copyright © 2017 camunda services GmbH ([email protected])
*
* 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 io.camunda.zeebe.spring.client.jobhandling.parameter;
import io.camunda.zeebe.client.api.JsonMapper;
import io.camunda.zeebe.client.api.response.ActivatedJob;
import io.camunda.zeebe.client.api.worker.JobClient;
public class VariableResolver implements ParameterResolver {
private final String variableName;
private final Class> variableType;
private final JsonMapper jsonMapper;
public VariableResolver(
final String variableName, final Class> variableType, final JsonMapper jsonMapper) {
this.variableName = variableName;
this.variableType = variableType;
this.jsonMapper = jsonMapper;
}
@Override
public Object resolve(final JobClient jobClient, final ActivatedJob job) {
final Object variableValue = getVariable(job);
try {
return mapZeebeVariable(variableValue);
} catch (final ClassCastException | IllegalArgumentException ex) {
throw new RuntimeException(
"Cannot assign process variable '"
+ variableName
+ "' to parameter when executing job '"
+ job.getType()
+ "', invalid type found: "
+ ex.getMessage());
}
}
protected Object getVariable(final ActivatedJob job) {
return job.getVariable(variableName);
}
protected Object mapZeebeVariable(final Object variableValue) {
if (variableValue != null && !variableType.isInstance(variableValue)) {
return jsonMapper.fromJson(jsonMapper.toJson(variableValue), variableType);
} else {
return variableType.cast(variableValue);
}
}
}