You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2011/10/31 23:07:56 UTC

svn commit: r1195697 - in /aries/trunk/sandbox/jmx-next: jmx-api/src/main/java/org/osgi/jmx/framework/ jmx-core/src/main/java/org/apache/aries/jmx/framework/ jmx-itests/src/test/java/org/apache/aries/jmx/framework/

Author: davidb
Date: Mon Oct 31 22:07:56 2011
New Revision: 1195697

URL: http://svn.apache.org/viewvc?rev=1195697&view=rev
Log:
Add support for localized getHeader()/getHeaders() calls.

Modified:
    aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java
    aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
    aries/trunk/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java

Modified: aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java?rev=1195697&r1=1195696&r2=1195697&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-api/src/main/java/org/osgi/jmx/framework/BundleStateMBean.java Mon Oct 31 22:07:56 2011
@@ -32,7 +32,7 @@ import org.osgi.jmx.JmxConstants;
  * emits events that clients can use to get notified of the changes in the
  * bundle state of the framework.
  *
- * @version $Revision$
+ * @version $Id: f5d5197fdabb4e0c420bc47812d38fd14edb61d0 $
  * @ThreadSafe
  */
 public interface BundleStateMBean {
@@ -427,7 +427,12 @@ public interface BundleStateMBean {
 																BUNDLE_TYPE,
 																IDENTIFIER);
 
-    CompositeData getBundle(long id) throws IOException;
+	/** New!!
+	 * @param id The Bundle ID
+	 * @return The Bundle Data
+	 * @throws IOException
+	 */
+	CompositeData getBundle(long id) throws IOException;
 
 	/**
 	 * Answer the list of identifiers of the bundles this bundle depends upon
@@ -494,7 +499,9 @@ public interface BundleStateMBean {
 	 *             if the bundle indicated does not exist
 	 */
 	TabularData getHeaders(long bundleId) throws IOException;
+    TabularData getHeaders(long bundleId, String locale) throws IOException;
     String getHeader(long bundleId, String key) throws IOException;
+    String getHeader(long bundleId, String key, String locale) throws IOException;
 
 	/**
 	 * Answer the list of bundle ids of the bundles which host a fragment

Modified: aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java?rev=1195697&r1=1195696&r2=1195697&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/framework/BundleState.java Mon Oct 31 22:07:56 2011
@@ -115,11 +115,23 @@ public class BundleState extends Notific
     /**
      * @see org.osgi.jmx.framework.BundleStateMBean#getHeaders(long)
      */
-    @SuppressWarnings("unchecked")
     public TabularData getHeaders(long bundleId) throws IOException, IllegalArgumentException {
         Bundle bundle = resolveBundle(bundleContext, bundleId);
-        List<Header> headers = new ArrayList<Header>();
         Dictionary<String, String> bundleHeaders = bundle.getHeaders();
+        return getHeaders(bundleHeaders);
+    }
+
+    /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeaders(long, java.lang.String)
+     */
+    public TabularData getHeaders(long bundleId, String locale) throws IOException, IllegalArgumentException {
+        Bundle bundle = resolveBundle(bundleContext, bundleId);
+        Dictionary<String, String> bundleHeaders = bundle.getHeaders(locale);
+        return getHeaders(bundleHeaders);
+    }
+
+    private TabularData getHeaders(Dictionary<String, String> bundleHeaders) {
+        List<Header> headers = new ArrayList<Header>();
         Enumeration<String> keys = bundleHeaders.keys();
         while (keys.hasMoreElements()) {
             String key = keys.nextElement();
@@ -132,12 +144,23 @@ public class BundleState extends Notific
         return headerTable;
     }
 
+    /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeader(long, java.lang.String)
+     */
     public String getHeader(long bundleId, String key) throws IOException {
         Bundle bundle = resolveBundle(bundleContext, bundleId);
         return bundle.getHeaders().get(key);
     }
 
     /**
+     * @see org.osgi.jmx.framework.BundleStateMBean#getHeader(long, java.lang.String, java.lang.String)
+     */
+    public String getHeader(long bundleId, String key, String locale) throws IOException {
+        Bundle bundle = resolveBundle(bundleContext, bundleId);
+        return bundle.getHeaders(locale).get(key);
+    }
+
+    /**
      * @see org.osgi.jmx.framework.BundleStateMBean#getHosts(long)
      */
     public long[] getHosts(long fragmentId) throws IOException, IllegalArgumentException {

Modified: aries/trunk/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java?rev=1195697&r1=1195696&r2=1195697&view=diff
==============================================================================
--- aries/trunk/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java (original)
+++ aries/trunk/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleStateMBeanTest.java Mon Oct 31 22:07:56 2011
@@ -28,13 +28,20 @@ import static org.ops4j.pax.swissbox.tin
 import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.withBnd;
 import static org.osgi.jmx.framework.BundleStateMBean.OBJECTNAME;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
+import java.util.Properties;
 
 import javax.management.Notification;
 import javax.management.NotificationListener;
 import javax.management.ObjectName;
+import javax.management.openmbean.CompositeData;
 import javax.management.openmbean.TabularData;
 
 import org.apache.aries.jmx.AbstractIntegrationTest;
@@ -109,10 +116,28 @@ public class BundleStateMBeanTest extend
                                 .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundled")
                                 .set(Constants.BUNDLE_VERSION, "3.0.0")
                                 .set(Constants.REQUIRE_BUNDLE, "org.apache.aries.jmx.test.bundlea;bundle-version=2.0.0")
+                                .build(withBnd())),
+                        provision(newBundle()
+                                .set(Constants.BUNDLE_SYMBOLICNAME, "org.apache.aries.jmx.test.bundlee")
+                                .set(Constants.BUNDLE_DESCRIPTION, "%desc")
+                                .add("OSGI-INF/l10n/bundle.properties", getBundleProps("desc", "Description"))
+                                .add("OSGI-INF/l10n/bundle_nl.properties", getBundleProps("desc", "Omschrijving"))
                                 .build(withBnd()))
                         );
     }
 
+    private static InputStream getBundleProps(String key, String value) {
+        try {
+            Properties p = new Properties();
+            p.put(key, value);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            p.store(baos, "");
+            return new ByteArrayInputStream(baos.toByteArray());
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     @Override
     public void doSetUp() throws Exception {
         waitForMBean(new ObjectName(BundleStateMBean.OBJECTNAME));
@@ -265,6 +290,43 @@ public class BundleStateMBeanTest extend
 
     }
 
+    @Test
+    @SuppressWarnings({ "unchecked" })
+    public void testHeaderLocalization() throws Exception {
+        BundleStateMBean mbean = getMBean(OBJECTNAME, BundleStateMBean.class);
+        Bundle b = context().getBundleByName("org.apache.aries.jmx.test.bundlee");
+
+        CompositeData cd = mbean.getBundle(b.getBundleId());
+        long id = (Long) cd.get(BundleStateMBean.IDENTIFIER);
+        assertEquals("Description", mbean.getHeader(id, Constants.BUNDLE_DESCRIPTION));
+        assertEquals("Description", mbean.getHeader(id, Constants.BUNDLE_DESCRIPTION, "en"));
+        assertEquals("Omschrijving", mbean.getHeader(id, Constants.BUNDLE_DESCRIPTION, "nl"));
+
+        TabularData td = mbean.getHeaders(id);
+        boolean found = false;
+        for (CompositeData d : (Collection<CompositeData>) td.values()) {
+            if (Constants.BUNDLE_DESCRIPTION.equals(d.get(BundleStateMBean.KEY))) {
+                assertEquals("Description", d.get(BundleStateMBean.VALUE));
+                found = true;
+                break;
+            }
+        }
+        assertTrue(found);
+
+        TabularData tdNL = mbean.getHeaders(id, "nl");
+        boolean foundNL = false;
+        for (CompositeData d : (Collection<CompositeData>) tdNL.values()) {
+            if (Constants.BUNDLE_DESCRIPTION.equals(d.get(BundleStateMBean.KEY))) {
+                assertEquals("Omschrijving", d.get(BundleStateMBean.VALUE));
+                foundNL = true;
+                break;
+            }
+        }
+        assertTrue(foundNL);
+    }
+
+
+    @SuppressWarnings({ "rawtypes", "deprecation" })
     private Version getPackageVersion(String packageName) {
         ServiceReference paRef = context().getServiceReference(PackageAdmin.class.getName());
         PackageAdmin pa = (PackageAdmin) context().getService(paRef);