You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2016/01/29 11:11:44 UTC

svn commit: r1727510 [2/2] - in /ace/trunk: org.apache.ace.client.automation/src/org/apache/ace/client/automation/ org.apache.ace.client.repository/src/org/apache/ace/client/repository/impl/ org.apache.ace.client.repository/src/org/apache/ace/client/re...

Modified: ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Activator.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Activator.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Activator.java (original)
+++ ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Activator.java Fri Jan 29 10:11:43 2016
@@ -31,9 +31,8 @@ import org.osgi.service.cm.ManagedServic
 import org.osgi.service.log.LogService;
 
 /**
- * Activator for the scheduler service. This activator will monitor <code>Runnable</code>s coming available,
- * and if they are intended to be scheduled, gets the necessary information and passes that to
- * the scheduler.
+ * Activator for the scheduler service. This activator will monitor <code>Runnable</code>s coming available, and if they
+ * are intended to be scheduled, gets the necessary information and passes that to the scheduler.
  */
 public class Activator extends DependencyActivatorBase {
     private Scheduler m_scheduler;
@@ -59,10 +58,12 @@ public class Activator extends Dependenc
 
     /**
      * Handler for both adding and updating runnable service registrations.
-     * @throws ConfigurationException Is thrown when the <code>SCHEDULER_RECIPE</code> contained in <code>ref</code>'s
-     * service dictionary cannot be parsed by the scheduler.
+     * 
+     * @throws ConfigurationException
+     *             Is thrown when the <code>SCHEDULER_RECIPE</code> contained in <code>ref</code>'s service dictionary
+     *             cannot be parsed by the scheduler.
      */
-    public void addRunnable(ServiceReference ref, Runnable task) throws ConfigurationException {
+    public void addRunnable(ServiceReference<Runnable> ref, Runnable task) throws ConfigurationException {
         String name = (String) ref.getProperty(SchedulerConstants.SCHEDULER_NAME_KEY);
         if (name != null) {
             String description = (String) ref.getProperty(SchedulerConstants.SCHEDULER_DESCRIPTION_KEY);
@@ -72,10 +73,10 @@ public class Activator extends Dependenc
         }
     }
 
-    public synchronized void removeRunnable(ServiceReference ref, Runnable task) {
+    public synchronized void removeRunnable(ServiceReference<Runnable> ref, Runnable task) {
         String name = (String) ref.getProperty(SchedulerConstants.SCHEDULER_NAME_KEY);
         if (name != null) {
             m_scheduler.removeRunnable(name);
         }
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Scheduler.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Scheduler.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Scheduler.java (original)
+++ ace/trunk/org.apache.ace.scheduler/src/org/apache/ace/scheduler/Scheduler.java Fri Jan 29 10:11:43 2016
@@ -18,11 +18,12 @@
  */
 package org.apache.ace.scheduler;
 
+import java.util.Collections;
 import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.HashMap;
 import java.util.Iterator;
-import java.util.Map;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.osgi.framework.Constants;
 import org.osgi.service.cm.ConfigurationException;
@@ -30,45 +31,48 @@ import org.osgi.service.cm.ManagedServic
 import org.osgi.service.log.LogService;
 
 /**
- * The scheduler periodically runs tasks based on a scheduling recipe. Tasks can be added and
- * removed using the <code>addRunnable</code> and <code>removeRunnable</code> methods. Recipes are
- * supplied using configuration properties using the <code>updated</code> method, or are
- * passed in the task's properties.<br>
+ * The scheduler periodically runs tasks based on a scheduling recipe. Tasks can be added and removed using the
+ * <code>addRunnable</code> and <code>removeRunnable</code> methods. Recipes are supplied using configuration properties
+ * using the <code>updated</code> method, or are passed in the task's properties.<br>
  *
- * A task will be scheduled if both a <code>Runnable</code> and a <code>recipe</code> are available
- * for it.
+ * A task will be scheduled if both a <code>Runnable</code> and a <code>recipe</code> are available for it.
  */
 public class Scheduler implements ManagedService {
-    protected final Map<String, SchedulerTask> m_tasks = new HashMap<>();
+    protected final ConcurrentMap<String, SchedulerTask> m_tasks = new ConcurrentHashMap<>();
     private volatile LogService m_log;
 
     /**
      * Makes sure that all tasks are indeed stopped when the scheduler is stopped.
      */
     public void stop() {
-        for (Iterator i = m_tasks.keySet().iterator(); i.hasNext();) {
-            String name = (String) i.next();
-            SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
+        for (SchedulerTask schedTask : m_tasks.values()) {
             schedTask.stop();
         }
+        m_tasks.clear();
     }
 
     /**
      * Adds a new runnable to this scheduler. The runnable will be created if necessary, registered, and processed.
-     * @param name A name for this task.
-     * @param task A runnable to run for this task.
-     * @param description A description of the task.
-     * @param recipe Optionally, a recipe for running this task.
-     * @param recipeOverride Indicates whether or not the <code>recipe</code> passed in prevails over
-     * any recipe provided by the <code>Scheduler</code>'s configuration.
-     * @throws ConfigurationException When <code>recipe</code> is not <code>null</code>, and cannot
-     * be decoded into a recipe.
+     * 
+     * @param name
+     *            A name for this task.
+     * @param task
+     *            A runnable to run for this task.
+     * @param description
+     *            A description of the task.
+     * @param recipe
+     *            Optionally, a recipe for running this task.
+     * @param recipeOverride
+     *            Indicates whether or not the <code>recipe</code> passed in prevails over any recipe provided by the
+     *            <code>Scheduler</code>'s configuration.
+     * @throws ConfigurationException
+     *             When <code>recipe</code> is not <code>null</code>, and cannot be decoded into a recipe.
      */
-    public synchronized void addRunnable(String name, Runnable task, String description, Object recipe, boolean recipeOverride) throws ConfigurationException {
-        SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
+    public void addRunnable(String name, Runnable task, String description, Object recipe, boolean recipeOverride) throws ConfigurationException {
+        SchedulerTask schedTask = m_tasks.get(name);
         if (schedTask == null) {
             schedTask = new SchedulerTask(name);
-            m_tasks.put(name, schedTask);
+            m_tasks.putIfAbsent(name, schedTask);
         }
         schedTask.updateTask(task, description, recipe, recipeOverride);
         schedTask.process();
@@ -76,11 +80,12 @@ public class Scheduler implements Manage
 
     /**
      * Removes a runnable from this scheduler.
-     * @param name The name of the runnable. If the name does not indicate a valid runnable,
-     * nothing is done.
+     * 
+     * @param name
+     *            The name of the runnable. If the name does not indicate a valid runnable, nothing is done.
      */
-    public synchronized void removeRunnable(String name) {
-        SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
+    public void removeRunnable(String name) {
+        SchedulerTask schedTask = m_tasks.get(name);
         if (schedTask != null) {
             try {
                 schedTask.updateTask(null, null, null, false);
@@ -95,48 +100,48 @@ public class Scheduler implements Manage
     }
 
     /**
-     * Updates the configuration of the scheduler. The scheduler expects the configuration
-     * to contain recipes for scheduling. The key of a property should be the name identifying
-     * a task and the value should be a string describing the scheduling recipe for this task.
+     * Updates the configuration of the scheduler. The scheduler expects the configuration to contain recipes for
+     * scheduling. The key of a property should be the name identifying a task and the value should be a string
+     * describing the scheduling recipe for this task.
      */
-    public void updated(Dictionary properties) throws ConfigurationException {
-        if (properties != null) {
-            // first remove all the old schedules.
-            for (Iterator i = m_tasks.keySet().iterator(); i.hasNext();) {
-                String name = (String) i.next();
-                SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
-                schedTask.updateConfigurationRecipe(null);
-            }
-
-            // then apply the new ones
-            properties.remove(Constants.SERVICE_PID);
-            Enumeration keys = properties.keys();
-            while (keys.hasMoreElements()) {
-                String name = (String) keys.nextElement();
-                SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
-                if (schedTask == null) {
-                    schedTask = new SchedulerTask(name);
-                    m_tasks.put(name, schedTask);
-                }
-                try {
-                    schedTask.updateConfigurationRecipe(properties.get(name));
-                }
-                catch (ConfigurationException ce) {
-                    // This is most likely an illegal recipe, caused by an config property we don't understand.
-                    // So, no problem.
-                    m_log.log(LogService.LOG_INFO,
-                            name + "=" + properties.get(name) + " does not look like a valid schedule recipe.");
-                }
-            }
-
-            // and remove all tasks that now have no schedule or runnable
-            for (Iterator i = m_tasks.keySet().iterator(); i.hasNext();) {
-                String name = (String) i.next();
-                SchedulerTask schedTask = (SchedulerTask) m_tasks.get(name);
-                if (!schedTask.process()) {
-                    i.remove();
-                }
+    public void updated(Dictionary<String, ?> properties) throws ConfigurationException {
+        if (properties == null) {
+            return;
+        }
+
+        // first remove all the old schedules.
+        for (SchedulerTask schedTask : m_tasks.values()) {
+            schedTask.updateConfigurationRecipe(null);
+        }
+
+        // then apply the new ones
+        properties.remove(Constants.SERVICE_PID);
+
+        List<String> keys = Collections.list(properties.keys());
+        for (String name : keys) {
+            SchedulerTask schedTask = m_tasks.get(name);
+            if (schedTask == null) {
+                schedTask = new SchedulerTask(name);
+                m_tasks.putIfAbsent(name, schedTask);
+            }
+
+            try {
+                schedTask.updateConfigurationRecipe(properties.get(name));
+            }
+            catch (ConfigurationException ce) {
+                // This is most likely an illegal recipe, caused by an config property we don't understand.
+                // So, no problem.
+                m_log.log(LogService.LOG_INFO, name + "=" + properties.get(name) + " does not look like a valid schedule recipe.");
+            }
+        }
+
+        // and remove all tasks that now have no schedule or runnable
+        Iterator<String> i = m_tasks.keySet().iterator();
+        while (i.hasNext()) {
+            SchedulerTask schedTask = m_tasks.get(i.next());
+            if (!schedTask.process()) {
+                i.remove();
             }
         }
     }
-}
\ No newline at end of file
+}

Modified: ace/trunk/org.apache.ace.scheduler/test/org/apache/ace/scheduler/SchedulerTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.scheduler/test/org/apache/ace/scheduler/SchedulerTest.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.scheduler/test/org/apache/ace/scheduler/SchedulerTest.java (original)
+++ ace/trunk/org.apache.ace.scheduler/test/org/apache/ace/scheduler/SchedulerTest.java Fri Jan 29 10:11:43 2016
@@ -20,7 +20,8 @@ package org.apache.ace.scheduler;
 
 import static org.apache.ace.test.utils.TestUtils.UNIT;
 
-import java.util.Properties;
+import java.util.Dictionary;
+import java.util.Hashtable;
 
 import org.apache.ace.test.utils.TestUtils;
 import org.osgi.service.log.LogService;
@@ -44,7 +45,8 @@ public class SchedulerTest {
 
     @Test(groups = { UNIT })
     public synchronized void testUpdate() throws Exception {
-        Properties props = new Properties();
+        Dictionary<String, Object> props = new Hashtable<>();
+
         props.put("local.mock.task1", 1000l);
         props.put("local.mock.task2", 2000l);
         props.put("local.mock.task3", 3000l);
@@ -60,7 +62,8 @@ public class SchedulerTest {
 
     @Test( groups = { UNIT } )
     public synchronized void testAdditionalProperties() throws Exception {
-        Properties props = new Properties();
+        Dictionary<String, Object> props = new Hashtable<>();
+
         props.put("local.mock.task1", "invalidValue");
         m_scheduler.updated(props);
         m_scheduler.addRunnable("local.mock.task1", new Runnable() {
@@ -93,7 +96,8 @@ public class SchedulerTest {
 
     @Test(groups = { UNIT })
     public synchronized void testProcessTask() throws Exception {
-        Properties props = new Properties();
+        Dictionary<String, Object> props = new Hashtable<>();
+
         props.put("local.mock.task1", 1000);
         m_scheduler.updated(props);
 
@@ -106,7 +110,8 @@ public class SchedulerTest {
 
     @Test(groups = { UNIT })
     public synchronized void testSchedulePrevailanceAndRemoval() throws Exception {
-        Properties props = new Properties();
+        Dictionary<String, Object> props = new Hashtable<>();
+
         props.put("local.mock.task1", 1000l);
         m_scheduler.updated(props);
 
@@ -127,7 +132,7 @@ public class SchedulerTest {
         assert ((SchedulerTask) m_scheduler.m_tasks.get("local.mock.task1")).getCurrentRecipe().equals(new Long(1000)) : "The schedule for mock task 1 should specify interval 1000, but it specifies " + ((SchedulerTask) m_scheduler.m_tasks.get("local.mock.task1")).getCurrentRecipe();
         assert ((SchedulerTask) m_scheduler.m_tasks.get("local.mock.task1")).isScheduled() : "Since we have now provided a runnable for the scheduler, the tasks should be scheduled.";
 
-        props = new Properties();
+        props = new Hashtable<>();
         m_scheduler.updated(props);
 
         assert ((SchedulerTask) m_scheduler.m_tasks.get("local.mock.task1")).getCurrentRecipe().equals(new Long(2000)) : "The schedule for mock task 1 should specify interval 2000, but it specifies " + ((SchedulerTask) m_scheduler.m_tasks.get("local.mock.task1")).getCurrentRecipe();

Modified: ace/trunk/org.apache.ace.verifier/src/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.verifier/src/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.verifier/src/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java (original)
+++ ace/trunk/org.apache.ace.verifier/src/org/apache/ace/deployment/verifier/impl/VerifyEnvironmentImpl.java Fri Jan 29 10:11:43 2016
@@ -226,7 +226,7 @@ public class VerifyEnvironmentImpl imple
         }
         
         @SuppressWarnings("unused")
-        public void log(final ServiceReference ref, final int level, final String message, final Throwable t) {
+        public void log(final ServiceReference<?> ref, final int level, final String message, final Throwable t) {
             final long time = System.currentTimeMillis();
 
             m_reporter.reportLog(new LogEntry() {
@@ -246,7 +246,7 @@ public class VerifyEnvironmentImpl imple
                     return message;
                 }
 
-                public ServiceReference getServiceReference() {
+                public ServiceReference<?> getServiceReference() {
                     return ref;
                 }
 

Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinClient.java Fri Jan 29 10:11:43 2016
@@ -520,7 +520,7 @@ public class VaadinClient extends com.va
         ShortcutHelper.addCrossPlatformShortcut(context.getBrowser(), button, description, keycode, ModifierKey.SHIFT);
     }
 
-    private void addDependency(Component component, Class service) {
+    private void addDependency(Component component, Class<?> service) {
         component.add(m_manager.createServiceDependency()
             .setService(service)
             .setRequired(true)
@@ -540,7 +540,7 @@ public class VaadinClient extends com.va
         m_manager.add(component);
     }
 
-    private void addSessionDependency(Component component, Class service) {
+    private void addSessionDependency(Component component, Class<?> service) {
         component.add(m_manager.createServiceDependency()
             .setService(service, "(" + SessionFactory.SERVICE_SID + "=" + m_sessionID + ")")
             .setRequired(true)

Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/VaadinServlet.java Fri Jan 29 10:11:43 2016
@@ -108,7 +108,7 @@ public class VaadinServlet extends Abstr
     }
 
     @Override
-    public void updated(Dictionary dictionary) throws ConfigurationException {
+    public void updated(Dictionary<String, ?> dictionary) throws ConfigurationException {
         boolean useAuth = DEFAULT_USE_AUTHENTICATION;
         String userName = DEFAULT_USER_NAME;
         String password = DEFAULT_PASSWORD;
@@ -195,7 +195,7 @@ public class VaadinServlet extends Abstr
         return msgs;
     }
 
-    private boolean getBoolean(Dictionary dictionary, String key) throws ConfigurationException {
+    private boolean getBoolean(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Object value = dictionary.get(key);
         if (value == null || !(value instanceof String)) {
             throw new ConfigurationException(key, "Missing property");
@@ -207,7 +207,7 @@ public class VaadinServlet extends Abstr
         return Boolean.parseBoolean(valueStr);
     }
 
-    private int getInteger(Dictionary dictionary, String key) throws ConfigurationException {
+    private int getInteger(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Integer value = getOptionalInteger(dictionary, key);
         if (value == null) {
             throw new ConfigurationException(key, "Missing property");
@@ -215,7 +215,7 @@ public class VaadinServlet extends Abstr
         return value.intValue();
     }
 
-    private Double getOptionalDouble(Dictionary dictionary, String key) throws ConfigurationException {
+    private Double getOptionalDouble(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Object value = dictionary.get(key);
         if (value == null) {
             return null;
@@ -236,7 +236,7 @@ public class VaadinServlet extends Abstr
         }
     }
 
-    private Integer getOptionalInteger(Dictionary dictionary, String key) throws ConfigurationException {
+    private Integer getOptionalInteger(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Object value = dictionary.get(key);
         if (value == null) {
             return null;
@@ -257,7 +257,7 @@ public class VaadinServlet extends Abstr
         }
     }
 
-    private String getOptionalString(Dictionary dictionary, String key) throws ConfigurationException {
+    private String getOptionalString(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Object value = dictionary.get(key);
         if (value != null && !(value instanceof String)) {
             throw new ConfigurationException(key, "Missing property");
@@ -265,7 +265,7 @@ public class VaadinServlet extends Abstr
         return (value == null) ? "" : ((String) value).trim();
     }
 
-    private URL getURL(Dictionary dictionary, String key) throws ConfigurationException {
+    private URL getURL(Dictionary<String, ?> dictionary, String key) throws ConfigurationException {
         Object value = dictionary.get(key);
         if (value == null || !(value instanceof String)) {
             throw new ConfigurationException(key, "Missing property");

Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/BaseObjectPanel.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/BaseObjectPanel.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/BaseObjectPanel.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/BaseObjectPanel.java Fri Jan 29 10:11:43 2016
@@ -129,10 +129,10 @@ abstract class BaseObjectPanel<REPO_OBJ
      * Provides a small container for {@link UIExtensionFactory} instances.
      */
     private static class UIExtensionFactoryHolder implements Comparable<UIExtensionFactoryHolder> {
-        private final ServiceReference m_serviceRef;
+        private final ServiceReference<UIExtensionFactory> m_serviceRef;
         private final WeakReference<UIExtensionFactory> m_extensionFactory;
 
-        public UIExtensionFactoryHolder(ServiceReference serviceRef, UIExtensionFactory extensionFactory) {
+        public UIExtensionFactoryHolder(ServiceReference<UIExtensionFactory> serviceRef, UIExtensionFactory extensionFactory) {
             m_serviceRef = serviceRef;
             m_extensionFactory = new WeakReference<>(extensionFactory);
         }
@@ -141,8 +141,8 @@ abstract class BaseObjectPanel<REPO_OBJ
          * {@inheritDoc}
          */
         public int compareTo(UIExtensionFactoryHolder other) {
-            ServiceReference thatServiceRef = other.m_serviceRef;
-            ServiceReference thisServiceRef = m_serviceRef;
+            ServiceReference<UIExtensionFactory> thatServiceRef = other.m_serviceRef;
+            ServiceReference<UIExtensionFactory> thisServiceRef = m_serviceRef;
             // Sort in reverse order so that the highest rankings come first...
             return thatServiceRef.compareTo(thisServiceRef);
         }
@@ -272,7 +272,7 @@ abstract class BaseObjectPanel<REPO_OBJ
      * @param factory
      *            the extension instance itself.
      */
-    public final void addExtension(ServiceReference ref, UIExtensionFactory factory) {
+    public final void addExtension(ServiceReference<UIExtensionFactory> ref, UIExtensionFactory factory) {
         synchronized (m_extensionFactories) {
             m_extensionFactories.add(new UIExtensionFactoryHolder(ref, factory));
         }
@@ -381,7 +381,7 @@ abstract class BaseObjectPanel<REPO_OBJ
      * @param factory
      *            the extension instance itself.
      */
-    public final void removeExtension(ServiceReference ref, UIExtensionFactory factory) {
+    public final void removeExtension(ServiceReference<UIExtensionFactory> ref, UIExtensionFactory factory) {
         synchronized (m_extensionFactories) {
             m_extensionFactories.remove(new UIExtensionFactoryHolder(ref, factory));
         }
@@ -928,14 +928,14 @@ abstract class BaseObjectPanel<REPO_OBJ
 
     protected final void refreshAllRowCaches(Direction direction) {
         if (direction.isGoLeft()) {
-            BaseObjectPanel ptr = this;
+            BaseObjectPanel<?, ?, ?, ?> ptr = this;
             while (ptr != null) {
                 ptr.refreshRowCache();
                 ptr = ptr.m_leftTable;
             }
         }
         if (direction.isGoRight()) {
-            BaseObjectPanel ptr = this;
+            BaseObjectPanel<?, ?, ?, ?> ptr = this;
             while (ptr != null) {
                 ptr.refreshRowCache();
                 ptr = ptr.m_rightTable;

Modified: ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java?rev=1727510&r1=1727509&r2=1727510&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java (original)
+++ ace/trunk/org.apache.ace.webui.vaadin/src/org/apache/ace/webui/vaadin/component/MainActionToolbar.java Fri Jan 29 10:11:43 2016
@@ -25,6 +25,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.ace.client.repository.RepositoryAdmin;
 import org.apache.ace.webui.UIExtensionFactory;
@@ -243,7 +244,7 @@ public abstract class MainActionToolbar
         }
     }
 
-    private final ConcurrentHashMap<ServiceReference, UIExtensionFactory> m_extensions;
+    private final ConcurrentMap<ServiceReference<UIExtensionFactory>, UIExtensionFactory> m_extensions;
     private final boolean m_showLogoutButton;
 
     private Button m_retrieveButton;
@@ -309,7 +310,7 @@ public abstract class MainActionToolbar
         m_revertButton.setEnabled(modified);
     }
 
-    protected final void add(ServiceReference ref, UIExtensionFactory factory) {
+    protected final void add(ServiceReference<UIExtensionFactory> ref, UIExtensionFactory factory) {
         m_extensions.put(ref, factory);
         setExtraComponents();
     }
@@ -342,19 +343,18 @@ public abstract class MainActionToolbar
      */
     protected abstract void doAfterRevert() throws IOException;
 
-    @SuppressWarnings("unchecked")
     protected final List<Component> getExtraComponents() {
         // create a shapshot of the current extensions...
-        Map<ServiceReference, UIExtensionFactory> extensions = new HashMap<>(m_extensions);
+        Map<ServiceReference<UIExtensionFactory>, UIExtensionFactory> extensions = new HashMap<>(m_extensions);
 
         // Make sure we've got a predictable order of the components...
-        List<ServiceReference> refs = new ArrayList<>(extensions.keySet());
+        List<ServiceReference<UIExtensionFactory>> refs = new ArrayList<>(extensions.keySet());
         Collections.sort(refs);
 
         Map<String, Object> context = new HashMap<>();
 
         List<Component> result = new ArrayList<>();
-        for (ServiceReference ref : refs) {
+        for (ServiceReference<UIExtensionFactory> ref : refs) {
             UIExtensionFactory factory = extensions.get(ref);
 
             result.add(factory.create(context));
@@ -379,7 +379,7 @@ public abstract class MainActionToolbar
         );
     }
 
-    protected final void remove(ServiceReference ref, UIExtensionFactory factory) {
+    protected final void remove(ServiceReference<UIExtensionFactory> ref, UIExtensionFactory factory) {
         m_extensions.remove(ref);
         setExtraComponents();
     }