X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FExecutionParameterPostProcessor.java;h=1365e6bc67a9cab9ce1b4c388ce520011b738544;hb=af9457b0628ba4cc625192762d0c0fe7564b9846;hp=5b28534ba43063ceedf61849c9a1f836ecc5ef17;hpb=08aa02f96eb32a6e1f0cc001113df9311a618eb9;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java index 5b28534ba..1365e6bc6 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/ExecutionParameterPostProcessor.java @@ -1,3 +1,18 @@ +/* + * Copyright (C) 2007-2012 Argeo 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 org.argeo.slc.core.execution; import java.beans.PropertyDescriptor; @@ -25,6 +40,12 @@ import org.springframework.beans.factory.support.ManagedSet; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +/** + * Spring post processor which ensures that execution parameters are properly + * set. It is used at two levels: first during instantiation for instantiation + * parameters which allow to implement templates, then at runtime in order to + * interpret @{} placeholders when object of scope execution are instantiated. + */ public class ExecutionParameterPostProcessor extends InstantiationAwareBeanPostProcessorAdapter { @@ -86,8 +107,7 @@ public class ExecutionParameterPostProcessor extends placeholder).toString(); else {// execution - log.debug("Bean class: " + bean.getClass()); - // next call fail if no execution context available + // next call fail if no execution context available Object obj = executionContext.getVariable(placeholder); if (obj != null) { return obj.toString(); @@ -104,20 +124,24 @@ public class ExecutionParameterPostProcessor extends String originalValue = tsv.getValue(); String convertedValue = resolveString(beanName, bean, originalValue); + if (convertedValue == null) + return null; return convertedValue.equals(originalValue) ? value : new TypedStringValue(convertedValue); } else if (value instanceof String) { String originalValue = value.toString(); String convertedValue = resolveString(beanName, bean, originalValue); + if (convertedValue == null) + return null; return convertedValue.equals(originalValue) ? value : convertedValue; } else if (value instanceof ManagedMap) { - Map mapVal = (Map) value; + Map mapVal = (Map) value; - Map newContent = new ManagedMap(); + Map newContent = new ManagedMap(); boolean entriesModified = false; - for (Iterator it = mapVal.entrySet().iterator(); it.hasNext();) { - Map.Entry entry = (Map.Entry) it.next(); + for (Iterator it = mapVal.entrySet().iterator(); it.hasNext();) { + Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); int keyHash = (key != null ? key.hashCode() : 0); Object newKey = resolveValue(beanName, bean, key); @@ -131,8 +155,8 @@ public class ExecutionParameterPostProcessor extends return entriesModified ? newContent : value; } else if (value instanceof ManagedList) { - List listVal = (List) value; - List newContent = new ManagedList(); + List listVal = (List) value; + List newContent = new ManagedList(); boolean valueModified = false; for (int i = 0; i < listVal.size(); i++) { @@ -145,10 +169,10 @@ public class ExecutionParameterPostProcessor extends } return valueModified ? newContent : value; } else if (value instanceof ManagedSet) { - Set setVal = (Set) value; - Set newContent = new ManagedSet(); + Set setVal = (Set) value; + Set newContent = new ManagedSet(); boolean entriesModified = false; - for (Iterator it = setVal.iterator(); it.hasNext();) { + for (Iterator it = setVal.iterator(); it.hasNext();) { Object elem = it.next(); int elemHash = (elem != null ? elem.hashCode() : 0); Object newVal = resolveValue(beanName, bean, elem); @@ -159,13 +183,17 @@ public class ExecutionParameterPostProcessor extends } return entriesModified ? newContent : value; } else { - //log.debug(beanName + ": " + value.getClass() + " : " + value); + // log.debug(beanName + ": " + value.getClass() + " : " + value); return value; } } private String resolveString(String beanName, Object bean, String strVal) { + // in case is passed + if (strVal == null) + return null; + String value = parseStringValue(bean, strVal, new HashSet()); if (value == null) @@ -205,6 +233,10 @@ public class ExecutionParameterPostProcessor extends Set visitedPlaceholders) throws BeanDefinitionStoreException { + // in case is passed + if (strVal == null) + return null; + StringBuffer buf = new StringBuffer(strVal); int startIndex = strVal.indexOf(placeholderPrefix); @@ -230,8 +262,8 @@ public class ExecutionParameterPostProcessor extends // previously resolved placeholder value. propVal = parseStringValue(bean, propVal, visitedPlaceholders); - buf.replace(startIndex, endIndex - + placeholderSuffix.length(), propVal); + buf.replace(startIndex, + endIndex + placeholderSuffix.length(), propVal); if (log.isTraceEnabled()) { log.trace("Resolved placeholder '" + placeholder + "'"); }