]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.core/src/main/java/org/argeo/slc/core/execution/DefaultExecutionFlowDescriptorConverter.java
Do not use path anymore in as-flow
[gpl/argeo-slc.git] / runtime / org.argeo.slc.core / src / main / java / org / argeo / slc / core / execution / DefaultExecutionFlowDescriptorConverter.java
index f610cedea8fec0ad5d14d0bd842247ab246a3aec..7860feea6b6e7bcf93607951e758918a6cab1ae3 100644 (file)
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * 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;
                        }