You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jb...@apache.org on 2010/09/21 22:56:35 UTC
svn commit: r999635 - in /incubator/aries/trunk:
application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/
application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/
jmx/jmx-core/ jmx/jm...
Author: jbohn
Date: Tue Sep 21 20:56:34 2010
New Revision: 999635
URL: http://svn.apache.org/viewvc?rev=999635&view=rev
Log:
ARIES-408 consolidate manifest header split processing in aries.utils - patch by Emily Jiang
Added:
incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java (with props)
Modified:
incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java
incubator/aries/trunk/application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/APPUTILSmessages.properties
incubator/aries/trunk/jmx/jmx-core/pom.xml
incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/util/FrameworkUtils.java
incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java
incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/FrameworkMBeanTest.java
incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/PackageStateMBeanTest.java
incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java
incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/permissionadmin/PermissionAdminMBeanTest.java
incubator/aries/trunk/util/src/main/resources/org/apache/aries/util/messages/UTILmessages.properties
Modified: incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java (original)
+++ incubator/aries/trunk/application/application-utils/src/main/java/org/apache/aries/application/utils/manifest/ManifestHeaderProcessor.java Tue Sep 21 20:56:34 2010
@@ -33,6 +33,7 @@ import org.apache.aries.application.Vers
import org.apache.aries.application.impl.ContentImpl;
import org.apache.aries.application.impl.VersionRangeImpl;
import org.apache.aries.application.utils.internal.MessageUtil;
+import org.apache.aries.util.ManifestHeaderUtils;
import org.osgi.framework.Constants;
@@ -187,47 +188,10 @@ public class ManifestHeaderProcessor
*/
public static List<String> split(String value, String delimiter)
{
- List<String> result = new ArrayList<String>();
- if (value != null) {
- String[] packages = value.split(delimiter);
-
- for (int i = 0; i < packages.length; ) {
- String tmp = packages[i++].trim();
- // if there is a odd number of " in a string, we need to append
- while (count(tmp, "\"") % 2 != 0) {
- // check to see if we need to append the next package[i++]
- if (i<packages.length)
- tmp = tmp + delimiter + packages[i++].trim();
- else
- // oops. The double quotes are not paired up. We have reached to the end of the string.
- throw new IllegalArgumentException(MessageUtil.getMessage("APPUTILS0008E",tmp));
- }
-
- result.add(tmp);
-
- }
- }
- return result;
+ return ManifestHeaderUtils.split(value, delimiter);
}
- /**
- * count the number of characters in a string
- * @param parent The string to be searched
- * @param subString The substring to be found
- * @return the number of occurrence of the subString
- */
- private static int count(String parent, String subString) {
-
- int count = 0 ;
- int i = parent.indexOf(subString);
- while (i > -1) {
- if (parent.length() >= i+1)
- parent = parent.substring(i+1);
- count ++;
- i = parent.indexOf(subString);
- }
- return count;
- }
+
/**
* Internal method to parse headers with the format<p>
* [Name](;[Name])*(;[attribute-name]=[attribute-value])*<br>
Modified: incubator/aries/trunk/application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/APPUTILSmessages.properties
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/APPUTILSmessages.properties?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/APPUTILSmessages.properties (original)
+++ incubator/aries/trunk/application/application-utils/src/main/resources/org/apache/aries/application/utils/messages/APPUTILSmessages.properties Tue Sep 21 20:56:34 2010
@@ -18,5 +18,4 @@
#
APPUTILS0004E=APPUTILS0004E: Unable to create ContentImpl object based on content: {0}.
APPUTILS0007E=APPUTILS0007E: The path {0} does not denote a valid file.
-APPUTILS0008E=APPUTILS0008E: Unable to parse the string, because one of the quotations marks (") is missing: {0}.
APPUTILS0012E=APPUTILS0012E: Unable to create temporary output directory for file {0}.
Modified: incubator/aries/trunk/jmx/jmx-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-core/pom.xml?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-core/pom.xml (original)
+++ incubator/aries/trunk/jmx/jmx-core/pom.xml Tue Sep 21 20:56:34 2010
@@ -81,6 +81,11 @@
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <artifactId>org.apache.aries.util</artifactId>
+ <groupId>org.apache.aries</groupId>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</project>
Modified: incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/util/FrameworkUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/util/FrameworkUtils.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/util/FrameworkUtils.java (original)
+++ incubator/aries/trunk/jmx/jmx-core/src/main/java/org/apache/aries/jmx/util/FrameworkUtils.java Tue Sep 21 20:56:34 2010
@@ -31,6 +31,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.apache.aries.util.ManifestHeaderUtils;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -278,14 +279,10 @@ public class FrameworkUtils {
List<String> importPackages = new ArrayList<String>();
String importPackageHeader = bundleHeaders.get(Constants.IMPORT_PACKAGE);
if (importPackageHeader != null && importPackageHeader.length() > 0) {
- for (String headerDeclaration : extractHeaderDeclaration(importPackageHeader)) {
- importPackages.addAll(removeParameters(headerDeclaration));
- }
+ importPackages.addAll(extractHeaderDeclaration(importPackageHeader));
}
if (dynamicImportHeader != null) {
- for (String headerDeclaration : extractHeaderDeclaration(dynamicImportHeader)) {
- importPackages.addAll(removeParameters(headerDeclaration));
- }
+ importPackages.addAll(extractHeaderDeclaration(dynamicImportHeader));
}
for (String packageName : importPackages) {
ExportedPackage[] candidateExports = packageAdmin.getExportedPackages(packageName);
@@ -496,10 +493,7 @@ public class FrameworkUtils {
Dictionary<String, String> bundleHeaders = bundle.getHeaders();
String requireBundleHeader = bundleHeaders.get(Constants.REQUIRE_BUNDLE);
if (requireBundleHeader != null) { // only check if Require-Bundle is used
- List<String> bundleSymbolicNames = new ArrayList<String>();
- for (String headerDeclaration : extractHeaderDeclaration(requireBundleHeader)) {
- bundleSymbolicNames.addAll(removeParameters(headerDeclaration));
- }
+ List<String> bundleSymbolicNames = extractHeaderDeclaration(requireBundleHeader);
for (String bundleSymbolicName: bundleSymbolicNames) {
RequiredBundle[] candidateRequiredBundles = packageAdmin.getRequiredBundles(bundleSymbolicName);
if (candidateRequiredBundles != null) {
@@ -628,59 +622,14 @@ public class FrameworkUtils {
public static List<String> extractHeaderDeclaration(String headerStatement) {
List<String> result = new ArrayList<String>();
- while(true){
- int commaPoz = headerStatement.indexOf(",");
-
- while (commaPoz!= -1){
- String testStr = headerStatement.substring(0, commaPoz);
-
- int quoteNum = 0;
- int bracketNum = 0;
- for(char testStrChar : testStr.toCharArray()){
- switch (testStrChar) {
- case '"': quoteNum++; break;
- case '[':
- case ']':
- case '(':
- case ')': bracketNum++;
- }
- }
-
- // there might be odd numbered quote marks or brackets in the left part,
- // which indicates the comma appears in version=[1.0,3.5) or uses="xxx,yyy,zzz"
- if (quoteNum % 2 == 1 || bracketNum %2 ==1){
- commaPoz = headerStatement.indexOf(",", commaPoz+1);
- }else {
- break;
- }
- }
-
- if (commaPoz == -1){ //to the end
- result.add(headerStatement.trim());
- break;
- }else{
- result.add(headerStatement.substring(0,commaPoz).trim());
- if (commaPoz+1 < headerStatement.trim().length()){ //commaPoz is not the last char
- headerStatement = headerStatement.substring(commaPoz+1, headerStatement.length());
- }else{
- break;
- }
- }
+ for (String headerDeclaration : ManifestHeaderUtils.split(headerStatement, ",")) {
+ String name = headerDeclaration.contains(";") ? headerDeclaration.substring(0, headerDeclaration
+ .indexOf(";")) : headerDeclaration;
+ result.add(name);
}
return result;
}
- private static List<String> removeParameters(String headerDeclaration) {
- List<String> result = new ArrayList<String>();
-
- for (String headerSentence : headerDeclaration.split("\\s*;\\s*")) {
- if (headerSentence.indexOf("=") == -1){
- result.add(headerSentence.trim());
- }
- }
-
- return result;
- }
}
Modified: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java (original)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java Tue Sep 21 20:56:34 2010
@@ -62,6 +62,7 @@ public class BundleStateMBeanTest extend
mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
mavenBundle("org.osgi", "org.osgi.compendium"),
mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx"),
+ mavenBundle("org.apache.aries", "org.apache.aries.util"),
provision(newBundle()
.add(org.apache.aries.jmx.test.bundlea.Activator.class)
.add(org.apache.aries.jmx.test.bundlea.api.InterfaceA.class)
Modified: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/FrameworkMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/FrameworkMBeanTest.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/FrameworkMBeanTest.java (original)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/FrameworkMBeanTest.java Tue Sep 21 20:56:34 2010
@@ -52,7 +52,8 @@ public class FrameworkMBeanTest extends
CoreOptions.equinox(),
mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
- mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx")
+ mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx"),
+ mavenBundle("org.apache.aries", "org.apache.aries.util")
);
options = updateOptions(options);
Modified: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/PackageStateMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/PackageStateMBeanTest.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/PackageStateMBeanTest.java (original)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/PackageStateMBeanTest.java Tue Sep 21 20:56:34 2010
@@ -46,7 +46,7 @@ public class PackageStateMBeanTest exten
public static Option[] configuration() {
Option[] options = CoreOptions.options(CoreOptions.equinox(), mavenBundle("org.ops4j.pax.logging",
"pax-logging-api"), mavenBundle("org.ops4j.pax.logging", "pax-logging-service"), mavenBundle(
- "org.apache.aries.jmx", "org.apache.aries.jmx"));
+ "org.apache.aries.jmx", "org.apache.aries.jmx"),mavenBundle("org.apache.aries", "org.apache.aries.util"));
options = updateOptions(options);
return options;
}
Modified: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java (original)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/framework/ServiceStateMBeanTest.java Tue Sep 21 20:56:34 2010
@@ -69,6 +69,7 @@ public class ServiceStateMBeanTest exten
mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
mavenBundle("org.osgi", "org.osgi.compendium"),
mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx"),
+ mavenBundle("org.apache.aries", "org.apache.aries.util"),
new Customizer() {
public InputStream customizeTestProbe(InputStream testProbe) throws Exception {
return modifyBundle(testProbe)
Modified: incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/permissionadmin/PermissionAdminMBeanTest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/permissionadmin/PermissionAdminMBeanTest.java?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/permissionadmin/PermissionAdminMBeanTest.java (original)
+++ incubator/aries/trunk/jmx/jmx-itests/src/test/java/org/apache/aries/jmx/permissionadmin/PermissionAdminMBeanTest.java Tue Sep 21 20:56:34 2010
@@ -52,6 +52,7 @@ public class PermissionAdminMBeanTest ex
mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
mavenBundle("org.apache.aries.jmx", "org.apache.aries.jmx"),
+ mavenBundle("org.apache.aries", "org.apache.aries.util"),
provision(newBundle()
.add(org.apache.aries.jmx.test.bundlea.Activator.class)
.add(org.apache.aries.jmx.test.bundlea.api.InterfaceA.class)
Added: incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java?rev=999635&view=auto
==============================================================================
--- incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java (added)
+++ incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java Tue Sep 21 20:56:34 2010
@@ -0,0 +1,87 @@
+/*
+ * 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 WARRANTIESOR 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.aries.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.aries.util.internal.MessageUtil;
+
+
+
+public class ManifestHeaderUtils {
+
+ /**
+ *
+ * Splits a delimiter separated string, tolerating presence of non separator commas
+ * within double quoted segments.
+ *
+ * Eg.
+ * com.ibm.ws.eba.helloWorldService;version="[1.0.0, 1.0.0]" &
+ * com.ibm.ws.eba.helloWorldService;version="1.0.0"
+ * com.ibm.ws.eba.helloWorld;version="2";bundle-version="[2,30)"
+ * com.acme.foo;weirdAttr="one;two;three";weirdDir:="1;2;3"
+ * @param value the value to be split
+ * @param delimiter the delimiter string such as ',' etc.
+ * @return List<String> the components of the split String in a list
+ */
+ public static List<String> split(String value, String delimiter)
+ {
+ List<String> result = new ArrayList<String>();
+ if (value != null) {
+ String[] packages = value.split(delimiter);
+
+ for (int i = 0; i < packages.length; ) {
+ String tmp = packages[i++].trim();
+ // if there is a odd number of " in a string, we need to append
+ while (count(tmp, "\"") % 2 != 0) {
+ // check to see if we need to append the next package[i++]
+ if (i<packages.length)
+ tmp = tmp + delimiter + packages[i++].trim();
+ else
+ // oops. The double quotes are not paired up. We have reached to the end of the string.
+ throw new IllegalArgumentException(MessageUtil.getMessage("UTIL0008E",tmp));
+ }
+
+ result.add(tmp);
+
+ }
+ }
+ return result;
+ }
+
+ /**
+ * count the number of characters in a string
+ * @param parent The string to be searched
+ * @param subString The substring to be found
+ * @return the number of occurrence of the subString
+ */
+ private static int count(String parent, String subString) {
+
+ int count = 0 ;
+ int i = parent.indexOf(subString);
+ while (i > -1) {
+ if (parent.length() >= i+1)
+ parent = parent.substring(i+1);
+ count ++;
+ i = parent.indexOf(subString);
+ }
+ return count;
+ }
+}
Propchange: incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: incubator/aries/trunk/util/src/main/java/org/apache/aries/util/ManifestHeaderUtils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/aries/trunk/util/src/main/resources/org/apache/aries/util/messages/UTILmessages.properties
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/util/src/main/resources/org/apache/aries/util/messages/UTILmessages.properties?rev=999635&r1=999634&r2=999635&view=diff
==============================================================================
--- incubator/aries/trunk/util/src/main/resources/org/apache/aries/util/messages/UTILmessages.properties (original)
+++ incubator/aries/trunk/util/src/main/resources/org/apache/aries/util/messages/UTILmessages.properties Tue Sep 21 20:56:34 2010
@@ -16,6 +16,7 @@
# specific language governing permissions and limitations
# under the License.
#
+UTIL0008E=UTIL0008E: Unable to parse the string, because one of the quotations marks (") is missing: {0}.
UTIL0009E=UTIL0009E: Unable to parse the version. Could not parse {0}.
UTIL0010E=UTIL0010E: Unable to parse the version. Could not parse empty string.
UTIL0011E=UTIL0011E: Unable to parse {0} for the exact version. Could not parse {0}.