You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by xu...@apache.org on 2011/08/24 07:02:21 UTC
svn commit: r1160977 - in /geronimo/xbean/trunk/xbean-bundleutils/src:
main/java/org/apache/xbean/osgi/bundle/util/
test/java/org/apache/xbean/osgi/bundle/util/
Author: xuhaihong
Date: Wed Aug 24 05:02:21 2011
New Revision: 1160977
URL: http://svn.apache.org/viewvc?rev=1160977&view=rev
Log:
XBEAN-182 Provide a builder class to convert the header elements to header string
Added:
geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java (with props)
Modified:
geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderParser.java
geronimo/xbean/trunk/xbean-bundleutils/src/test/java/org/apache/xbean/osgi/bundle/util/HeaderParserTest.java
Added: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java?rev=1160977&view=auto
==============================================================================
--- geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java (added)
+++ geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java Wed Aug 24 05:02:21 2011
@@ -0,0 +1,66 @@
+/**
+ * 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.xbean.osgi.bundle.util;
+
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+import org.apache.xbean.osgi.bundle.util.HeaderParser.HeaderElement;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class HeaderBuilder {
+
+ private static final Pattern EXTENDED_PATTERN = Pattern.compile("[\\w_\\-\\.]+");
+
+ public static String build(List<HeaderElement> headerElements) {
+ if (headerElements == null || headerElements.size() == 0) {
+ return "";
+ }
+ StringBuilder header = new StringBuilder();
+ for (HeaderElement headerElement : headerElements) {
+ String name = headerElement.getName();
+ if (name == null || name.length() == 0) {
+ throw new IllegalArgumentException("Invalid header name for the header elment " + headerElement);
+ }
+ if (header.length() > 0) {
+ header.append(",");
+ }
+ header.append(name);
+ for (Map.Entry<String, String> attribute : headerElement.getAttributes().entrySet()) {
+ header.append(";").append(attribute.getKey()).append("=");
+ if (EXTENDED_PATTERN.matcher(attribute.getValue()).matches()) {
+ header.append(attribute.getValue());
+ } else {
+ header.append("\"").append(attribute.getValue()).append("\"");
+ }
+ }
+ for (Map.Entry<String, String> directive : headerElement.getDirectives().entrySet()) {
+ header.append(";").append(directive.getKey()).append(":=");
+ if (EXTENDED_PATTERN.matcher(directive.getValue()).matches()) {
+ header.append(directive.getValue());
+ } else {
+ header.append("\"").append(directive.getValue()).append("\"");
+ }
+ }
+ }
+ return header.toString();
+ }
+}
Propchange: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderParser.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderParser.java?rev=1160977&r1=1160976&r2=1160977&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderParser.java (original)
+++ geronimo/xbean/trunk/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/HeaderParser.java Wed Aug 24 05:02:21 2011
@@ -158,7 +158,48 @@ public class HeaderParser {
public void addDirective(String name, String value) {
directives.put(name, value);
- }
-
+ }
+
+ @Override
+ public String toString() {
+ return "HeaderElement [path=" + path + ", attributes=" + attributes + ", directives=" + directives + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
+ result = prime * result + ((directives == null) ? 0 : directives.hashCode());
+ result = prime * result + ((path == null) ? 0 : path.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ HeaderElement other = (HeaderElement) obj;
+ if (attributes == null) {
+ if (other.attributes != null)
+ return false;
+ } else if (!attributes.equals(other.attributes))
+ return false;
+ if (directives == null) {
+ if (other.directives != null)
+ return false;
+ } else if (!directives.equals(other.directives))
+ return false;
+ if (path == null) {
+ if (other.path != null)
+ return false;
+ } else if (!path.equals(other.path))
+ return false;
+ return true;
+ }
}
}
Modified: geronimo/xbean/trunk/xbean-bundleutils/src/test/java/org/apache/xbean/osgi/bundle/util/HeaderParserTest.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-bundleutils/src/test/java/org/apache/xbean/osgi/bundle/util/HeaderParserTest.java?rev=1160977&r1=1160976&r2=1160977&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-bundleutils/src/test/java/org/apache/xbean/osgi/bundle/util/HeaderParserTest.java (original)
+++ geronimo/xbean/trunk/xbean-bundleutils/src/test/java/org/apache/xbean/osgi/bundle/util/HeaderParserTest.java Wed Aug 24 05:02:21 2011
@@ -36,10 +36,13 @@ public class HeaderParserTest extends Te
assertEquals("/foo/bar.xml", paths.get(1).getName());
assertEquals(0, paths.get(1).getAttributes().size());
assertEquals(0, paths.get(1).getDirectives().size());
+
+ assertEquals(paths, HeaderParser.parseHeader(HeaderBuilder.build(paths)));
}
public void testComplex() throws Exception {
- List<HeaderElement> paths = HeaderParser.parseHeader("OSGI-INF/blueprint/comp1_named.xml;ignored-directive:=true,OSGI-INF/blueprint/comp2_named.xml;some-other-attribute=1");
+ String header = "OSGI-INF/blueprint/comp1_named.xml;ignored-directive:=true,OSGI-INF/blueprint/comp2_named.xml;some-other-attribute=1";
+ List<HeaderElement> paths = HeaderParser.parseHeader(header);
assertEquals(2, paths.size());
assertEquals("OSGI-INF/blueprint/comp1_named.xml", paths.get(0).getName());
assertEquals(0, paths.get(0).getAttributes().size());
@@ -49,10 +52,12 @@ public class HeaderParserTest extends Te
assertEquals(1, paths.get(1).getAttributes().size());
assertEquals("1", paths.get(1).getAttribute("some-other-attribute"));
assertEquals(0, paths.get(1).getDirectives().size());
+ assertEquals(paths, HeaderParser.parseHeader(HeaderBuilder.build(paths)));
}
public void testPaths() throws Exception {
- List<HeaderElement> paths = HeaderParser.parseHeader("OSGI-INF/blueprint/comp1_named.xml;ignored-directive:=true,OSGI-INF/blueprint/comp2_named.xml;foo.xml;a=b;1:=2;c:=d;4=5");
+ String header = "OSGI-INF/blueprint/comp1_named.xml;ignored-directive:=true,OSGI-INF/blueprint/comp2_named.xml;foo.xml;a=b;1:=2;c:=d;4=5";
+ List<HeaderElement> paths = HeaderParser.parseHeader(header);
assertEquals(3, paths.size());
assertEquals("OSGI-INF/blueprint/comp1_named.xml", paths.get(0).getName());
assertEquals(0, paths.get(0).getAttributes().size());
@@ -68,10 +73,13 @@ public class HeaderParserTest extends Te
assertEquals(2, paths.get(2).getDirectives().size());
assertEquals("d", paths.get(2).getDirective("c"));
assertEquals("2", paths.get(2).getDirective("1"));
+ System.out.println(HeaderBuilder.build(paths));
+ assertEquals(paths, HeaderParser.parseHeader(HeaderBuilder.build(paths)));
}
public void testExportPackages() throws Exception {
- List<HeaderElement> paths = HeaderParser.parseHeader("org.apache.geronimo.kernel.rmi;uses:=\"javax.rmi.ssl,org.apache.geronimo.gbean,org.slf4j\",org.apache.geronimo.kernel.proxy");
+ String header = "org.apache.geronimo.kernel.rmi;uses:=\"javax.rmi.ssl,org.apache.geronimo.gbean,org.slf4j\",org.apache.geronimo.kernel.proxy";
+ List<HeaderElement> paths = HeaderParser.parseHeader(header);
assertEquals(2, paths.size());
assertEquals("org.apache.geronimo.kernel.rmi", paths.get(0).getName());
@@ -82,10 +90,12 @@ public class HeaderParserTest extends Te
assertEquals("org.apache.geronimo.kernel.proxy", paths.get(1).getName());
assertEquals(0, paths.get(1).getAttributes().size());
assertEquals(0, paths.get(1).getDirectives().size());
+ assertEquals(paths, HeaderParser.parseHeader(HeaderBuilder.build(paths)));
}
public void testImportPackages() throws Exception {
- List<HeaderElement> paths = HeaderParser.parseHeader("com.thoughtworks.xstream;version=\"1.3\",com.thoughtworks.xstream.converters");
+ String header = "com.thoughtworks.xstream;version=\"1.3\",com.thoughtworks.xstream.converters";
+ List<HeaderElement> paths = HeaderParser.parseHeader(header);
assertEquals(2, paths.size());
assertEquals("com.thoughtworks.xstream", paths.get(0).getName());
@@ -96,5 +106,7 @@ public class HeaderParserTest extends Te
assertEquals("com.thoughtworks.xstream.converters", paths.get(1).getName());
assertEquals(0, paths.get(1).getAttributes().size());
assertEquals(0, paths.get(1).getDirectives().size());
+
+ assertEquals(paths, HeaderParser.parseHeader(HeaderBuilder.build(paths)));
}
}