You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2008/06/20 08:27:09 UTC
svn commit: r669799 - in /cocoon/whiteboard/corona/trunk/corona-sitemap/src:
main/java/org/apache/cocoon/corona/sitemap/matcher/
main/java/org/apache/cocoon/corona/sitemap/node/
test/java/org/apache/cocoon/corona/sitemap/node/
Author: reinhard
Date: Thu Jun 19 23:27:09 2008
New Revision: 669799
URL: http://svn.apache.org/viewvc?rev=669799&view=rev
Log:
add startsWith and endsWith matching attributes
Added:
cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java (with props)
cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java (with props)
Modified:
cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/Matcher.java
cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/AbstractSitemapNode.java
cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/MatchNode.java
cocoon/whiteboard/corona/trunk/corona-sitemap/src/test/java/org/apache/cocoon/corona/sitemap/node/MatchNodeTest.java
Added: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java?rev=669799&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java Thu Jun 19 23:27:09 2008
@@ -0,0 +1,40 @@
+/*
+ * 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.cocoon.corona.sitemap.matcher;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class EndsWithMatcher implements Matcher {
+
+ public Map<String, String> match(String expression, String testValue) {
+ if (testValue == null) {
+ return null;
+ }
+
+ if (testValue.endsWith(expression)) {
+ Map<String, String> result = new HashMap<String, String>();
+ result.put("0", testValue);
+ String left = testValue.substring(0, testValue.length() - expression.length());
+ result.put("1", left);
+ return result;
+ }
+
+ return null;
+ }
+
+}
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/EndsWithMatcher.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/Matcher.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/Matcher.java?rev=669799&r1=669798&r2=669799&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/Matcher.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/Matcher.java Thu Jun 19 23:27:09 2008
@@ -20,5 +20,5 @@
public interface Matcher {
- Map<String, String> match(String testValue, String expression);
+ Map<String, String> match(String expression, String testValue);
}
Added: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java?rev=669799&view=auto
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java (added)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java Thu Jun 19 23:27:09 2008
@@ -0,0 +1,40 @@
+/*
+ * 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.cocoon.corona.sitemap.matcher;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class StartsWithMatcher implements Matcher {
+
+ public Map<String, String> match(String expression, String testValue) {
+ if (testValue == null) {
+ return null;
+ }
+
+ if (testValue.startsWith(expression)) {
+ Map<String, String> result = new HashMap<String, String>();
+ result.put("0", testValue);
+ String right = testValue.substring(expression.length());
+ result.put("1", right);
+ return result;
+ }
+
+ return null;
+ }
+
+}
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java
------------------------------------------------------------------------------
svn:keywords = Id
Propchange: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/matcher/StartsWithMatcher.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/AbstractSitemapNode.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/AbstractSitemapNode.java?rev=669799&r1=669798&r2=669799&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/AbstractSitemapNode.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/AbstractSitemapNode.java Thu Jun 19 23:27:09 2008
@@ -125,9 +125,13 @@
try {
parameterField.set(this, value);
} catch (IllegalArgumentException e) {
- this.logger.error("Failed to set parameter field " + key, e);
+ String message = "Failed to set parameter field " + key;
+ this.logger.error(message, e);
+ throw new RuntimeException(message, e);
} catch (IllegalAccessException e) {
- this.logger.error("Failed to set parameter field " + key, e);
+ String message = "Failed to set parameter field " + key;
+ this.logger.error(message, e);
+ throw new RuntimeException(message, e);
}
continue;
}
Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/MatchNode.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/MatchNode.java?rev=669799&r1=669798&r2=669799&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/MatchNode.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/main/java/org/apache/cocoon/corona/sitemap/node/MatchNode.java Thu Jun 19 23:27:09 2008
@@ -23,9 +23,11 @@
import org.apache.cocoon.corona.sitemap.Invocation;
import org.apache.cocoon.corona.sitemap.matcher.ContainsMatcher;
+import org.apache.cocoon.corona.sitemap.matcher.EndsWithMatcher;
import org.apache.cocoon.corona.sitemap.matcher.EqualsMatcher;
import org.apache.cocoon.corona.sitemap.matcher.Matcher;
import org.apache.cocoon.corona.sitemap.matcher.RegexpMatcher;
+import org.apache.cocoon.corona.sitemap.matcher.StartsWithMatcher;
import org.apache.cocoon.corona.sitemap.matcher.WildcardMatcher;
import org.apache.cocoon.corona.sitemap.node.annotations.Parameter;
import org.apache.commons.logging.Log;
@@ -57,6 +59,12 @@
@Parameter
private String wildcard;
+ @Parameter
+ private String startsWith;
+
+ @Parameter
+ private String endsWith;
+
private MatcherContext matcherContext;
/**
@@ -128,6 +136,12 @@
if (this.wildcard != null) {
matcherContextList.add(new MatcherContext(new WildcardMatcher(), this.wildcard));
}
+ if (this.startsWith != null) {
+ matcherContextList.add(new MatcherContext(new StartsWithMatcher(), this.startsWith));
+ }
+ if (this.endsWith != null) {
+ matcherContextList.add(new MatcherContext(new EndsWithMatcher(), this.endsWith));
+ }
if (matcherContextList.size() > 1) {
String message = "Only one matching attribute (regexp, equals, contains, wildcard, pattern) can be set: "
+ matcherContextList;
Modified: cocoon/whiteboard/corona/trunk/corona-sitemap/src/test/java/org/apache/cocoon/corona/sitemap/node/MatchNodeTest.java
URL: http://svn.apache.org/viewvc/cocoon/whiteboard/corona/trunk/corona-sitemap/src/test/java/org/apache/cocoon/corona/sitemap/node/MatchNodeTest.java?rev=669799&r1=669798&r2=669799&view=diff
==============================================================================
--- cocoon/whiteboard/corona/trunk/corona-sitemap/src/test/java/org/apache/cocoon/corona/sitemap/node/MatchNodeTest.java (original)
+++ cocoon/whiteboard/corona/trunk/corona-sitemap/src/test/java/org/apache/cocoon/corona/sitemap/node/MatchNodeTest.java Thu Jun 19 23:27:09 2008
@@ -28,6 +28,28 @@
public class MatchNodeTest {
@Test
+ public void endsWithMatchingAttribute() throws Exception {
+ MatchNode matchNode = new MatchNode();
+ PrivateAccessor.setField(matchNode, "endsWith", ".xml");
+ MatcherContext matcherContext = matchNode.lookupMatcherContext();
+ Map<String, String> matches = matcherContext.matcher.match(matcherContext.value, "abc.xml");
+ assertTrue(matches.containsValue("abc.xml"));
+ assertTrue(matches.containsValue("abc"));
+ assertEquals(2, matches.size());
+ }
+
+ @Test
+ public void startsWithMatchingAttribute() throws Exception {
+ MatchNode matchNode = new MatchNode();
+ PrivateAccessor.setField(matchNode, "startsWith", "abc");
+ MatcherContext matcherContext = matchNode.lookupMatcherContext();
+ Map<String, String> matches = matcherContext.matcher.match(matcherContext.value, "abc/44");
+ assertTrue(matches.containsValue("abc/44"));
+ assertTrue(matches.containsValue("/44"));
+ assertEquals(2, matches.size());
+ }
+
+ @Test
public void regexpMatchingAttribute() throws Exception {
MatchNode matchNode = new MatchNode();
PrivateAccessor.setField(matchNode, "regexp", "([a-zA-Z\\-]+)/(.*)");