You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by cc...@apache.org on 2009/03/09 07:21:43 UTC

svn commit: r751597 - in /servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main: java/org/apache/servicemix/kernel/gshell/features/completers/ java/org/apache/servicemix/kernel/gshell/features/management/ resources/META-INF/spring/

Author: ccustine
Date: Mon Mar  9 06:21:39 2009
New Revision: 751597

URL: http://svn.apache.org/viewvc?rev=751597&view=rev
Log:
SMX4KNL-233 - Add argument completion for core gshell commands

Added:
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java   (contents, props changed)
      - copied, changed from r751373, servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/commands/FeaturesCommandSupport.java
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/FeatureRepositoryCompleter.java
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/InstalledFeatureCompleter.java
Modified:
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/management/ManagedFeaturesRegistry.java
    servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml

Copied: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java (from r751373, servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/commands/FeaturesCommandSupport.java)
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java?p2=servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java&p1=servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/commands/FeaturesCommandSupport.java&r1=751373&r2=751597&rev=751597&view=diff
==============================================================================
--- servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/commands/FeaturesCommandSupport.java (original)
+++ servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java Mon Mar  9 06:21:39 2009
@@ -14,36 +14,47 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicemix.kernel.gshell.features.commands;
+package org.apache.servicemix.kernel.gshell.features.completers;
+
+import java.util.List;
+import java.util.Set;
+import java.util.Collection;
 
 import org.apache.servicemix.kernel.gshell.core.OsgiCommandSupport;
 import org.apache.servicemix.kernel.gshell.features.FeaturesService;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeaturesRegistry;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeature;
+import org.apache.geronimo.gshell.console.completer.StringsCompleter;
 import org.osgi.framework.ServiceReference;
+import jline.Completor;
 
-public abstract class FeaturesCommandSupport extends OsgiCommandSupport {
+/**
+ * {@link jline.Completor} for available features.
+ *
+ * Displays a list of available features from installed repositories.
+ *
+ */
+public class AvailableFeatureCompleter implements Completor {
 
-    protected Object doExecute() throws Exception {
-        // Get repository admin service.
-        ServiceReference ref = getBundleContext().getServiceReference(FeaturesService.class.getName());
-        if (ref == null) {
-            io.out.println("FeaturesService service is unavailable.");
-            return null;
-        }
-        try {
-            FeaturesService admin = (FeaturesService) getBundleContext().getService(ref);
-            if (admin == null) {
-                io.out.println("FeaturesService service is unavailable.");
-                return null;
-            }
+    private ManagedFeaturesRegistry featuresRegistry;
+    private StringsCompleter delegate;
 
-            doExecute(admin);
-        }
-        finally {
-            getBundleContext().ungetService(ref);
+    public void setFeaturesRegistry(ManagedFeaturesRegistry featuresRegistry) {
+        this.featuresRegistry = featuresRegistry;
+    }
+
+    @Override
+    public int complete(final String buffer, final int cursor, final List candidates) {
+
+        Collection<ManagedFeature> features = featuresRegistry.getAvailableFeatures().values();
+        delegate = new StringsCompleter();
+
+        for (ManagedFeature feature : features) {
+            delegate.getStrings().add(feature.getName());
         }
-        return null;
+        
+        return delegate.complete(buffer, cursor, candidates);
     }
 
-    protected abstract void doExecute(FeaturesService admin) throws Exception;
 
-}
+}
\ No newline at end of file

Propchange: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/AvailableFeatureCompleter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/FeatureRepositoryCompleter.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/FeatureRepositoryCompleter.java?rev=751597&view=auto
==============================================================================
--- servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/FeatureRepositoryCompleter.java (added)
+++ servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/FeatureRepositoryCompleter.java Mon Mar  9 06:21:39 2009
@@ -0,0 +1,52 @@
+/*
+ * 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.servicemix.kernel.gshell.features.completers;
+
+import java.util.List;
+import java.util.Collection;
+
+import org.apache.servicemix.kernel.gshell.core.OsgiCommandSupport;
+import org.apache.servicemix.kernel.gshell.features.FeaturesService;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeaturesRegistry;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeature;
+import org.apache.geronimo.gshell.console.completer.StringsCompleter;
+import org.osgi.framework.ServiceReference;
+import jline.Completor;
+
+/**
+ * {@link jline.Completor} for Feature Repository URLs.
+ *
+ * Displays a list of currently installed Feature repositories.
+ *
+ */
+
+public class FeatureRepositoryCompleter implements Completor {
+
+    private ManagedFeaturesRegistry featuresRegistry;
+
+    public void setFeaturesRegistry(ManagedFeaturesRegistry featuresRegistry) {
+        this.featuresRegistry = featuresRegistry;
+    }
+
+    @Override
+    public int complete(final String buffer, final int cursor, final List candidates) {
+        StringsCompleter delegate = new StringsCompleter(featuresRegistry.getRepositories().keySet());
+        return delegate.complete(buffer, cursor, candidates);
+    }
+
+
+}
\ No newline at end of file

Added: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/InstalledFeatureCompleter.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/InstalledFeatureCompleter.java?rev=751597&view=auto
==============================================================================
--- servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/InstalledFeatureCompleter.java (added)
+++ servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/completers/InstalledFeatureCompleter.java Mon Mar  9 06:21:39 2009
@@ -0,0 +1,58 @@
+/*
+ * 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.servicemix.kernel.gshell.features.completers;
+
+import java.util.List;
+import java.util.Collection;
+
+import org.apache.servicemix.kernel.gshell.core.OsgiCommandSupport;
+import org.apache.servicemix.kernel.gshell.features.FeaturesService;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeaturesRegistry;
+import org.apache.servicemix.kernel.gshell.features.management.ManagedFeature;
+import org.apache.geronimo.gshell.console.completer.StringsCompleter;
+import org.osgi.framework.ServiceReference;
+import jline.Completor;
+
+/**
+ * {@link jline.Completor} for installed features.
+ *
+ * Displays a list of currently installed features.
+ *
+ */
+public class InstalledFeatureCompleter implements Completor {
+
+    private ManagedFeaturesRegistry featuresRegistry;
+    private StringsCompleter delegate;
+
+    public void setFeaturesRegistry(ManagedFeaturesRegistry featuresRegistry) {
+        this.featuresRegistry = featuresRegistry;
+    }
+
+    @Override
+    public int complete(final String buffer, final int cursor, final List candidates) {
+        Collection<ManagedFeature> features = featuresRegistry.getInstalledFeatures().values();
+        delegate = new StringsCompleter();
+
+        for (ManagedFeature feature : features) {
+            delegate.getStrings().add(feature.getName());
+        }
+
+        return delegate.complete(buffer, cursor, candidates);
+    }
+
+
+}
\ No newline at end of file

Modified: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/management/ManagedFeaturesRegistry.java
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/management/ManagedFeaturesRegistry.java?rev=751597&r1=751596&r2=751597&view=diff
==============================================================================
--- servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/management/ManagedFeaturesRegistry.java (original)
+++ servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/java/org/apache/servicemix/kernel/gshell/features/management/ManagedFeaturesRegistry.java Mon Mar  9 06:21:39 2009
@@ -70,6 +70,18 @@
         repositories = new ConcurrentHashMap<String, ManagedRepository>();
     }
 
+    public Map<String, ManagedFeature> getAvailableFeatures() {
+        return availableFeatures;
+    }
+
+    public Map<String, ManagedFeature> getInstalledFeatures() {
+        return installedFeatures;
+    }
+
+    public Map<String, ManagedRepository> getRepositories() {
+        return repositories;
+    }
+
     public void setFeaturesService(FeaturesService featuresService) {
         this.featuresService = featuresService;
     }

Modified: servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml
URL: http://svn.apache.org/viewvc/servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml?rev=751597&r1=751596&r2=751597&view=diff
==============================================================================
--- servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml (original)
+++ servicemix/smx4/kernel/trunk/gshell/gshell-features/src/main/resources/META-INF/spring/gshell-features.xml Mon Mar  9 06:21:39 2009
@@ -49,15 +49,24 @@
         </gshell:command>
         <gshell:command name="features/removeUrl">
             <gshell:action class="org.apache.servicemix.kernel.gshell.features.commands.RemoveUrlCommand" />
+            <gshell:completers>
+                <ref bean="removeUrlCompleter" />
+            </gshell:completers>
         </gshell:command>
         <gshell:command name="features/refreshUrl">
             <gshell:action class="org.apache.servicemix.kernel.gshell.features.commands.RefreshUrlCommand" />
         </gshell:command>
         <gshell:command name="features/install">
             <gshell:action class="org.apache.servicemix.kernel.gshell.features.commands.InstallFeatureCommand" />
+            <gshell:completers>
+                <ref bean="installFeatureCompleter" /> 
+            </gshell:completers>
         </gshell:command>
         <gshell:command name="features/uninstall">
             <gshell:action class="org.apache.servicemix.kernel.gshell.features.commands.UninstallFeatureCommand" />
+            <gshell:completers>
+                <ref bean="uninstallFeatureCompleter" />
+            </gshell:completers>
         </gshell:command>
         <gshell:command name="features/list">
             <gshell:action class="org.apache.servicemix.kernel.gshell.features.commands.ListFeaturesCommand" />
@@ -111,4 +120,16 @@
         <osgi:listener ref="featureServiceRegistry" bind-method="registerMBeanServer" />
     </osgi:reference>
 
+    <bean id="installFeatureCompleter" class="org.apache.servicemix.kernel.gshell.features.completers.AvailableFeatureCompleter">
+        <property name="featuresRegistry" ref="featureServiceRegistry" />
+    </bean>
+
+    <bean id="uninstallFeatureCompleter" class="org.apache.servicemix.kernel.gshell.features.completers.InstalledFeatureCompleter">
+        <property name="featuresRegistry" ref="featureServiceRegistry" />
+    </bean>
+
+    <bean id="removeUrlCompleter" class="org.apache.servicemix.kernel.gshell.features.completers.FeatureRepositoryCompleter">
+        <property name="featuresRegistry" ref="featureServiceRegistry" />
+    </bean>
+
 </beans>
\ No newline at end of file