You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2017/04/03 12:31:05 UTC

svn commit: r1789981 - /aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java

Author: cschneider
Date: Mon Apr  3 12:31:05 2017
New Revision: 1789981

URL: http://svn.apache.org/viewvc?rev=1789981&view=rev
Log:
[ARIES-1708] Fix parsing of duplicate patterns

Modified:
    aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java

Modified: aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java
URL: http://svn.apache.org/viewvc/aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java?rev=1789981&r1=1789980&r2=1789981&view=diff
==============================================================================
--- aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java (original)
+++ aries/branches/org.apache.aries.transaction.blueprint-1.x/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java Mon Apr  3 12:31:05 2017
@@ -41,16 +41,16 @@ public class TxComponentMetaDataHelperIm
 
     private static class TranData
     {
-      private final Map<Pattern, String> map;
+      private final Map<String, PatternDTO> map;
       private final Map<String, String> cache;
       
       public TranData() {
-          map = new ConcurrentHashMap<Pattern, String>();
+          map = new ConcurrentHashMap<String, PatternDTO>();
           cache = new ConcurrentHashMap<String, String>();
       }
       
       public void add(Pattern pattern, TransactionPropagationType txAttribute) {
-          map.put(pattern, txAttribute.name());
+          map.put(pattern.pattern(), new PatternDTO(pattern, txAttribute.name()));
       }
       
     public TransactionPropagationType getAttribute(String name) {
@@ -68,19 +68,19 @@ public class TxComponentMetaDataHelperIm
         }
 
         if (size == 1) {
-            txAttribute = map.get(matches.get(0));
+            txAttribute = map.get(matches.get(0).pattern()).getTxAttributeName();
         } else {
             matches = selectPatternsWithFewestWildcards(matches);
             size = matches.size();
 
             if (size == 1) {
-                txAttribute = map.get(matches.get(0));
+                txAttribute = map.get(matches.get(0).pattern()).getTxAttributeName();
             } else {
                 matches = selectLongestPatterns(matches);
                 size = matches.size();
 
-                if (size == 1) {
-                    txAttribute = map.get(matches.get(0));
+                if (size >= 1) {
+                    txAttribute = map.get(matches.get(0).pattern()).getTxAttributeName();
                 } else {
                     throw new IllegalStateException(
                                                     Constants.MESSAGES
@@ -103,9 +103,9 @@ public class TxComponentMetaDataHelperIm
     private List<Pattern> findMatches(String name)
       {
         List<Pattern> matches = new ArrayList<Pattern>();
-        for (Pattern p : map.keySet()) {
-          if (p.matcher(name).matches()) {
-            matches.add(p);
+        for (PatternDTO patternDTO : map.values()) {
+          if (patternDTO.getPattern().matcher(name).matches()) {
+            matches.add(patternDTO.getPattern());
           }
         }
         return matches;
@@ -158,7 +158,29 @@ public class TxComponentMetaDataHelperIm
           return remainingMatches;
       }
     }
-    
+
+    private static class PatternDTO {
+        private Pattern pattern;
+        private String txAttributeName;
+
+        public PatternDTO(Pattern pattern, String txAttributeName) {
+            this.pattern = pattern;
+            this.txAttributeName = txAttributeName;
+        }
+
+        public Pattern getPattern() {
+            return pattern;
+        }
+
+        public String getTxAttributeName() {
+            return txAttributeName;
+        }
+        
+        public String toString() {
+            return pattern + ";" + txAttributeName;
+        }
+    }
+
     private static final Map<ComponentMetadata, TranData> data = new ConcurrentHashMap<ComponentMetadata, TranData>();
     // bundle transaction map keeps track of the default transaction behavior for the bundle at the bundle-wide level.
     // this is configured via top level tx:transaction element for the blueprint managed bundle