X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fcore%2Fexecution%2FDefaultExecutionFlowDescriptorConverter.java;h=7860feea6b6e7bcf93607951e758918a6cab1ae3;hb=548235484edd6b48de5ddc3bbca318e0e49cb57b;hp=7a2ba74945e3d408d4cdb6bece19988f54b856d0;hpb=1fdb1b4e7b1d2b0cabb6483238301b857a6392fa;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java index 7a2ba7494..7860feea6 100644 --- a/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java +++ b/runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java @@ -43,6 +43,10 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +/** + * Performs conversion in both direction between data exchanged with the agent + * and the data in the application context. + */ public class DefaultExecutionFlowDescriptorConverter implements ExecutionFlowDescriptorConverter, ApplicationContextAware { public final static String REF_VALUE_TYPE_BEAN_NAME = "beanName"; @@ -259,8 +263,8 @@ public class DefaultExecutionFlowDescriptorConverter implements + " If it is an inner bean consider put it frozen."); ref = REF_VALUE_INTERNAL; } else { - if (log.isDebugEnabled()) - log.debug(ref + if (log.isTraceEnabled()) + log.trace(ref + " is the reference for ref spec attribute " + key + " in " + executionFlow + " (" + rsa + ")"); @@ -287,25 +291,46 @@ public class DefaultExecutionFlowDescriptorConverter implements public int compare(ExecutionFlowDescriptor o1, ExecutionFlowDescriptor o2) { // TODO: write unit tests for this - if (StringUtils.hasText(o1.getPath()) - && StringUtils.hasText(o2.getPath())) { - if (o1.getPath().equals(o2.getPath())) - return o1.getName().compareTo(o2.getName()); - else if (o1.getPath().startsWith(o2.getPath())) + + String name1 = o1.getName(); + String name2 = o2.getName(); + + String path1 = o1.getPath(); + String path2 = o2.getPath(); + + // Check whether name include path + int lastIndex1 = name1.lastIndexOf('/'); + //log.debug(name1+", "+lastIndex1); + if (!StringUtils.hasText(path1) && lastIndex1 >= 0) { + path1 = name1.substring(0, lastIndex1); + name1 = name1.substring(lastIndex1 + 1); + } + + int lastIndex2 = name2.lastIndexOf('/'); + if (!StringUtils.hasText(path2) && lastIndex2 >= 0) { + path2 = name2.substring(0, lastIndex2); + name2 = name2.substring(lastIndex2 + 1); + } + + // Perform the actual comparison + if (StringUtils.hasText(path1) && StringUtils.hasText(path2)) { + if (path1.equals(path2)) + return name1.compareTo(name2); + else if (path1.startsWith(path2)) return -1; - else if (o2.getPath().startsWith(o1.getPath())) + else if (path2.startsWith(path1)) return 1; else - return o1.getPath().compareTo(o2.getPath()); - } else if (!StringUtils.hasText(o1.getPath()) - && StringUtils.hasText(o2.getPath())) { + return path1.compareTo(path2); + } else if (!StringUtils.hasText(path1) + && StringUtils.hasText(path2)) { return 1; - } else if (StringUtils.hasText(o1.getPath()) - && !StringUtils.hasText(o2.getPath())) { + } else if (StringUtils.hasText(path1) + && !StringUtils.hasText(path2)) { return -1; - } else if (!StringUtils.hasText(o1.getPath()) - && !StringUtils.hasText(o2.getPath())) { - return o1.getName().compareTo(o2.getName()); + } else if (!StringUtils.hasText(path1) + && !StringUtils.hasText(path2)) { + return name1.compareTo(name2); } else { return 0; }