/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2014, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gses.activiti.forms.values; import org.activiti.engine.delegate.VariableScope; import ru.codeinside.gses.service.Some; import java.util.HashSet; import java.util.Map; import java.util.Set; final public class VariableTracker implements VariableScope { final Set<String> usedVariables = new HashSet<String>(); final VariableScope impl; public VariableTracker(VariableScope impl) { this.impl = impl; } public Some<String> getUsedVariable() { if (usedVariables.isEmpty()) { return Some.empty(); } if (usedVariables.size() > 1) { return Some.of(null); } return Some.of(usedVariables.iterator().next()); } @Override public Map<String, Object> getVariables() { Map<String, Object> variables = impl.getVariables(); usedVariables.addAll(variables.keySet()); return variables; } @Override public void setVariables(Map<String, ? extends Object> variables) { usedVariables.addAll(variables.keySet()); impl.setVariables(variables); } @Override public Map<String, Object> getVariablesLocal() { Map<String, Object> variablesLocal = impl.getVariablesLocal(); usedVariables.addAll(variablesLocal.keySet()); return variablesLocal; } @Override public void setVariablesLocal(Map<String, ? extends Object> variables) { usedVariables.addAll(variables.keySet()); impl.setVariablesLocal(variables); } @Override public Object getVariable(String variableName) { usedVariables.add(variableName); return impl.getVariable(variableName); } @Override public Object getVariableLocal(Object variableName) { usedVariables.add(variableName.toString()); return impl.getVariableLocal(variableName); } @Override public Set<String> getVariableNames() { return impl.getVariableNames(); } @Override public Set<String> getVariableNamesLocal() { return impl.getVariableNamesLocal(); } @Override public void setVariable(String variableName, Object value) { usedVariables.add(variableName); impl.setVariable(variableName, value); } @Override public Object setVariableLocal(String variableName, Object value) { usedVariables.add(variableName); return impl.setVariableLocal(variableName, value); } @Override public boolean hasVariables() { return impl.hasVariables(); } @Override public boolean hasVariablesLocal() { return impl.hasVariablesLocal(); } @Override public boolean hasVariable(String variableName) { return impl.hasVariable(variableName); } @Override public boolean hasVariableLocal(String variableName) { return impl.hasVariableLocal(variableName); } @Override public void createVariableLocal(String variableName, Object value) { usedVariables.add(variableName); impl.createVariableLocal(variableName, value); } @Override public void createVariablesLocal(Map<String, ? extends Object> variables) { usedVariables.addAll(variables.keySet()); impl.createVariablesLocal(variables); } @Override public void removeVariable(String variableName) { usedVariables.add(variableName); impl.removeVariable(variableName); } @Override public void removeVariableLocal(String variableName) { usedVariables.add(variableName); impl.removeVariableLocal(variableName); } @Override public void removeVariables() { impl.removeVariables(); } @Override public void removeVariablesLocal() { impl.removeVariablesLocal(); } }