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=13e60ab2bd66f0e8f23c7fca0791e2c382a49cfd;hp=f610cedea8fec0ad5d14d0bd842247ab246a3aec;hpb=2fc453bcd60b20071d878d6f1249592c8572de16;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 f610cedea..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 @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2010 Mathieu Baudier + * + * 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.util.Comparator; @@ -27,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"; @@ -243,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 + ")"); @@ -271,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; }