package org.foxbpm.kernel.runtime.impl; import java.io.Serializable; import org.foxbpm.kernel.runtime.KernelVariableScope; public abstract class KernelVariableScopeImpl implements KernelVariableScope, Serializable { private static final long serialVersionUID = 1L; protected String id = null; public String getId() { return id; } public void setId(String id) { this.id = id; } // // protected Map<String, KernelVariableInstanceImpl> variableInstances = null; // // // // // // //// // protected abstract List<KernelVariableInstanceImpl> loadVariableInstances(); //// //// protected abstract KernelVariableScopeImpl getParentVariableScope(); //// // protected abstract void initializeVariableInstanceBackPointer(KernelVariableInstanceImpl variableInstance); //// // /** 初始化变量 */ // protected void ensureVariableInstancesInitialized() { // if (variableInstances == null) { // variableInstances = new HashMap<String, KernelVariableInstanceImpl>(); // List<KernelVariableInstanceImpl> variableInstancesList = loadVariableInstances(); // for (KernelVariableInstanceImpl variableInstance : variableInstancesList) { // variableInstances.put(variableInstance.getName(), variableInstance); // } // } // } // // protected KernelVariableInstanceImpl createVariableInstance(String variableName, Object value, KernelVariableScopeImpl sourceVariableScope) { // // KernelVariableInstanceImpl variableInstance = KernelVariableInstanceImpl.createAndInsert(variableName, null, value); // initializeVariableInstanceBackPointer(variableInstance); // variableInstances.put(variableName, variableInstance); // // return null; // } // // public Map<String, KernelVariableInstanceImpl> getVariableInstances() { // ensureVariableInstancesInitialized(); // return variableInstances; // } // // /** 获取全部变量(包含父级) */ // public Map<String, Object> getVariables() { // return collectVariables(new HashMap<String, Object>()); // } // // /** 收集变量 */ // protected Map<String, Object> collectVariables(HashMap<String, Object> variables) { // ensureVariableInstancesInitialized(); // KernelVariableScopeImpl parentScope = getParentVariableScope(); // if (parentScope != null) { // variables.putAll(parentScope.collectVariables(variables)); // } // for (KernelVariableInstanceImpl variableInstance : variableInstances.values()) { // variables.put(variableInstance.getName(), variableInstance.getValue()); // } // return variables; // } // // /** 获取指定变量(包含父级) */ // public Object getVariable(String variableName) { // ensureVariableInstancesInitialized(); // KernelVariableInstanceImpl variableInstance = variableInstances.get(variableName); // if (variableInstance != null) { // return variableInstance.getValue(); // } // KernelVariableScope parentScope = getParentVariableScope(); // if (parentScope != null) { // return parentScope.getVariable(variableName); // } // return null; // } // // /** 获取局部变量 */ // public Object getVariableLocal(String variableName) { // ensureVariableInstancesInitialized(); // KernelVariableInstanceImpl variableInstance = variableInstances.get(variableName); // if (variableInstance != null) { // return variableInstance.getValue(); // } // return null; // } // // /** 是否含有变量(包含父级) */ // public boolean hasVariables() { // ensureVariableInstancesInitialized(); // if (!variableInstances.isEmpty()) { // return true; // } // KernelVariableScope parentScope = getParentVariableScope(); // if (parentScope != null) { // return parentScope.hasVariables(); // } // return false; // } // // /** 是否含有局部变量 */ // public boolean hasVariablesLocal() { // ensureVariableInstancesInitialized(); // return !variableInstances.isEmpty(); // } // // /** 是否含有指定变量(包含父级) */ // public boolean hasVariable(String variableName) { // if (hasVariableLocal(variableName)) { // return true; // } // KernelVariableScope parentScope = getParentVariableScope(); // if (parentScope != null) { // return parentScope.hasVariable(variableName); // } // return false; // } // // /** 是否含有指定局部变量 */ // public boolean hasVariableLocal(String variableName) { // ensureVariableInstancesInitialized(); // return variableInstances.containsKey(variableName); // } // // /** 收集变量的name(包含父级) */ // protected Set<String> collectVariableNames(Set<String> variableNames) { // ensureVariableInstancesInitialized(); // KernelVariableScopeImpl parentScope = getParentVariableScope(); // if (parentScope != null) { // variableNames.addAll(parentScope.collectVariableNames(variableNames)); // } // for (KernelVariableInstanceImpl variableInstance : variableInstances.values()) { // variableNames.add(variableInstance.getName()); // } // return variableNames; // } // // /** 获取变量Name集合(包含父级) */ // public Set<String> getVariableNames() { // return collectVariableNames(new HashSet<String>()); // } // // /** 获取所有的局部变量 */ // public Map<String, Object> getVariablesLocal() { // Map<String, Object> variables = new HashMap<String, Object>(); // ensureVariableInstancesInitialized(); // for (KernelVariableInstanceImpl variableInstance : variableInstances.values()) { // variables.put(variableInstance.getName(), variableInstance.getValue()); // } // return variables; // } // // /** 获取所有的局部变量name */ // public Set<String> getVariableNamesLocal() { // ensureVariableInstancesInitialized(); // return variableInstances.keySet(); // } // // /** 创建局部变量 */ // public void createVariablesLocal(Map<String, ? extends Object> variables) { // if (variables != null) { // for (Map.Entry<String, ? extends Object> entry : variables.entrySet()) { // createVariableLocal(entry.getKey(), entry.getValue()); // } // } // } // // /** 更新变量(包含父级) */ // public void setVariables(Map<String, ? extends Object> variables) { // if (variables != null) { // for (String variableName : variables.keySet()) { // setVariable(variableName, variables.get(variableName)); // } // } // } // // /** 更新局部变量 */ // public void setVariablesLocal(Map<String, ? extends Object> variables) { // if (variables != null) { // for (String variableName : variables.keySet()) { // setVariableLocal(variableName, variables.get(variableName)); // } // } // } // // /** 移除全部变量(包含父级) */ // public void removeVariables() { // ensureVariableInstancesInitialized(); // Set<String> variableNames = new HashSet<String>(variableInstances.keySet()); // for (String variableName : variableNames) { // removeVariable(variableName); // } // } // // /** 移除局部变量 */ // public void removeVariablesLocal() { // List<String> variableNames = new ArrayList<String>(getVariableNamesLocal()); // for (String variableName : variableNames) { // removeVariableLocal(variableName); // } // } // // /** 删除变量实例在离开容器的时候 */ // public void deleteVariablesInstanceForLeavingScope() { // List<String> variableNames = new ArrayList<String>(getVariableNamesLocal()); // for (String variableName : variableNames) { // ensureVariableInstancesInitialized(); // variableInstances.remove(variableName); // } // } // // /** 移除变量(包含父级) */ // public void removeVariables(Collection<String> variableNames) { // if (variableNames != null) { // for (String variableName : variableNames) { // removeVariable(variableName); // } // } // } // // /** 移除局部变量 */ // public void removeVariablesLocal(Collection<String> variableNames) { // if (variableNames != null) { // for (String variableName : variableNames) { // removeVariableLocal(variableName); // } // } // } // // /** 更新变量 */ // public void setVariable(String variableName, Object value) { // setVariable(variableName, value, getSourceVariableScope()); // } // // /** 更新变量 */ // protected void setVariable(String variableName, Object value, KernelVariableScopeImpl sourceVariableScope) { // if (hasVariableLocal(variableName)) { // setVariableLocal(variableName, value, sourceVariableScope); // return; // } // KernelVariableScopeImpl parentVariableScope = getParentVariableScope(); // if (parentVariableScope != null) { // if (sourceVariableScope == null) { // parentVariableScope.setVariable(variableName, value); // } else { // parentVariableScope.setVariable(variableName, value, sourceVariableScope); // } // return; // } // createVariableLocal(variableName, value); // } // // public Object setVariableLocal(String variableName, Object value) { // return setVariableLocal(variableName, value, getSourceVariableScope()); // } // // public Object setVariableLocal(String variableName, Object value, KernelVariableScopeImpl sourceVariableScope) { // ensureVariableInstancesInitialized(); // KernelVariableInstanceImpl variableInstance = variableInstances.get(variableName); // if (variableInstance == null) { // createVariableLocal(variableName, value); // } else { // updateVariableInstance(variableInstance, value, sourceVariableScope); // } // // return null; // } // // public void createVariableLocal(String variableName, Object value) { // createVariableLocal(variableName, value, getSourceVariableScope()); // } // // /** // * only called when a new variable is created on this variable scope. This // * method is also responsible for propagating the creation of this variable // * to the history. // */ // protected void createVariableLocal(String variableName, Object value, KernelVariableScopeImpl sourceVariableScope) { // ensureVariableInstancesInitialized(); // // if (variableInstances.containsKey(variableName)) { // throw new KernelException("variable '" + variableName // + "' already exists. Use setVariableLocal if you want to overwrite the value"); // } // // createVariableInstance(variableName, value, sourceVariableScope); // } // // public void removeVariable(String variableName) { // removeVariable(variableName, getSourceVariableScope()); // } // // protected void removeVariable(String variableName, KernelVariableScopeImpl sourceVariableScope) { // ensureVariableInstancesInitialized(); // if (variableInstances.containsKey(variableName)) { // removeVariableLocal(variableName); // return; // } // KernelVariableScopeImpl parentVariableScope = getParentVariableScope(); // if (parentVariableScope != null) { // if (sourceVariableScope == null) { // parentVariableScope.removeVariable(variableName); // } else { // parentVariableScope.removeVariable(variableName, sourceVariableScope); // } // } // } // // public void removeVariableLocal(String variableName) { // removeVariableLocal(variableName, getSourceVariableScope()); // } // // protected KernelVariableScopeImpl getSourceVariableScope() { // return null; // } // // protected void removeVariableLocal(String variableName, KernelVariableScopeImpl sourceVariableScope) { // ensureVariableInstancesInitialized(); // KernelVariableInstanceImpl variableInstance = variableInstances.remove(variableName); // if (variableInstance != null) { // deleteVariableInstanceForExplicitUserCall(variableInstance, sourceVariableScope); // } // } // // protected void deleteVariableInstanceForExplicitUserCall(KernelVariableInstanceImpl variableInstance, // KernelVariableScopeImpl sourceVariableScope) { // variableInstance.delete(); // variableInstance.setValue(null); // // } // // protected void updateVariableInstance(KernelVariableInstanceImpl variableInstance, Object value, KernelVariableScopeImpl sourceVariableScope) { // // // /* // // type should be changed // if ((variableInstance != null) && (!variableInstance.getType().isAbleToStore(value))) { // VariableTypes variableTypes = Context.getProcessEngineConfiguration().getVariableTypes(); // VariableType newType = variableTypes.findVariableType(value); // variableInstance.setValue(null); // variableInstance.setType(newType); // variableInstance.forceUpdate(); // } // variableInstance.setValue(value);*/ // // } // // // // /** // * Execution variable updates have activity instance ids, but historic task // * variable updates don't. // */ // protected boolean isActivityIdUsedForDetails() { // return true; // } // }