Author: lukaszlenart
Date: Fri Apr 20 22:21:40 2012
New Revision: 1328527

URL: http://svn.apache.org/viewvc?rev=1328527&view=rev
Log:
WW-3803 solves problem with package name contains the package locator

Added:
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/TransNameAction.java
Modified:
    
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
    
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java

Modified: 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java?rev=1328527&r1=1328526&r2=1328527&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 (original)
+++ 
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
 Fri Apr 20 22:21:40 2012
@@ -767,12 +767,13 @@ public class PackageBasedActionConfigBui
 
         if (pkgPart == null && packageLocators != null) {
             for (String packageLocator : packageLocators) {
-                int index = pkg.lastIndexOf(packageLocator);
+                // check subpackage and not a part of package name, eg. 
actions -> my.actions.transactions - WW-3803
+                int index = pkg.lastIndexOf("." + packageLocator + ".");
 
                 // This ensures that the match is at the end, beginning or has 
a dot on each side of it
                 if (index >= 0 && (index + packageLocator.length() == 
pkg.length() || index == 0 ||
-                        (pkg.charAt(index - 1) == '.' && pkg.charAt(index + 
packageLocator.length()) == '.'))) {
-                    pkgPart = actionClass.getName().substring(index + 
packageLocator.length() + 1);
+                        (pkg.charAt(index) == '.' && pkg.charAt(index + 1 + 
packageLocator.length()) == '.'))) {
+                    pkgPart = actionClass.getName().substring(index + 
packageLocator.length() + 2);
                 }
             }
         }

Modified: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=1328527&r1=1328526&r2=1328527&view=diff
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 (original)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
 Fri Apr 20 22:21:40 2012
@@ -80,6 +80,7 @@ import org.apache.struts2.convention.act
 import 
org.apache.struts2.convention.actions.resultpath.ClassLevelResultPathAction;
 import 
org.apache.struts2.convention.actions.resultpath.PackageLevelResultPathAction;
 import org.apache.struts2.convention.actions.skip.Index;
+import org.apache.struts2.convention.actions.transactions.TransNameAction;
 import org.apache.struts2.convention.annotation.Action;
 import org.apache.struts2.convention.annotation.Actions;
 import org.apache.struts2.convention.dontfind.DontFindMeAction;
@@ -193,6 +194,8 @@ public class PackageBasedActionConfigBui
             "/skip", strutsDefault, null);
         PackageConfig chainPkg = 
makePackageConfig("org.apache.struts2.convention.actions.chain#struts-default#/chain",
             "/chain", strutsDefault, null);
+        PackageConfig transPkg = 
makePackageConfig("org.apache.struts2.convention.actions.transactions#struts-default#/transactions",
+            "/transactions", strutsDefault, null);
 
         ResultMapBuilder resultMapBuilder = 
createStrictMock(ResultMapBuilder.class);
         checkOrder(resultMapBuilder, false);
@@ -293,6 +296,10 @@ public class PackageBasedActionConfigBui
         expect(resultMapBuilder.build(ChainedAction.class, 
getAnnotation(ChainedAction.class, "foo", Action.class), "foo", 
chainPkg)).andReturn(results);
         expect(resultMapBuilder.build(ChainedAction.class, 
getAnnotation(ChainedAction.class, "bar", Action.class), "foo-bar", 
chainPkg)).andReturn(results);
 
+        /* org.apache.struts2.convention.actions.transactions */
+        expect(resultMapBuilder.build(TransNameAction.class, 
getAnnotation(TransNameAction.class, "trans1", Action.class), "trans1", 
transPkg)).andReturn(results);
+        expect(resultMapBuilder.build(TransNameAction.class, 
getAnnotation(TransNameAction.class, "trans2", Action.class), "trans2", 
transPkg)).andReturn(results);
+
         EasyMock.replay(resultMapBuilder);
 
         final DummyContainer mockContainer = new DummyContainer();
@@ -552,6 +559,11 @@ public class PackageBasedActionConfigBui
         verifyActionConfig(pkgConfig, "idx", 
org.apache.struts2.convention.actions.idx.Index.class, "execute",
             "org.apache.struts2.convention.actions.idx#struts-default#/idx");
 
+        /* org.apache.struts2.convention.actions.transactions */
+        pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.transactions#struts-default#/transactions");
+        verifyActionConfig(pkgConfig, "trans1", TransNameAction.class, 
"trans1", pkgConfig.getName());
+        verifyActionConfig(pkgConfig, "trans2", TransNameAction.class, 
"trans2", pkgConfig.getName());
+
         //test unknown handler automatic chaining
         pkgConfig = 
configuration.getPackageConfig("org.apache.struts2.convention.actions.chain#struts-default#/chain");
         ServletContext context = EasyMock.createNiceMock(ServletContext.class);

Added: 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/TransNameAction.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/TransNameAction.java?rev=1328527&view=auto
==============================================================================
--- 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/TransNameAction.java
 (added)
+++ 
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/transactions/TransNameAction.java
 Fri Apr 20 22:21:40 2012
@@ -0,0 +1,40 @@
+/*
+ * $Id: ActionNameAction.java 655902 2008-05-13 15:15:12Z bpontarelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.apache.struts2.convention.actions.transactions;
+
+import org.apache.struts2.convention.annotation.Action;
+
+/**
+ * <p>
+ * This is a test action.
+ * </p>
+ */
+public class TransNameAction {
+    @Action("trans1")
+    public String trans1() {
+        return null;
+    }
+
+    @Action("trans2")
+    public String trans2() {
+        return null;
+    }
+}


Reply via email to