You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by io...@apache.org on 2011/02/11 16:36:19 UTC

svn commit: r1069840 - in /karaf/trunk/shell/config/src/main: java/org/apache/karaf/shell/config/EditCommand.java resources/OSGI-INF/blueprint/shell-config.xml

Author: iocanel
Date: Fri Feb 11 15:36:18 2011
New Revision: 1069840

URL: http://svn.apache.org/viewvc?rev=1069840&view=rev
Log:
[KARAF-415] Added flag in config:edit command which allows editing the configuration by leveraging the felix.fileinstall.filename property

Modified:
    karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
    karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml

Modified: karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java?rev=1069840&r1=1069839&r2=1069840&view=diff
==============================================================================
--- karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java (original)
+++ karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java Fri Feb 11 15:36:18 2011
@@ -16,34 +16,97 @@
  */
 package org.apache.karaf.shell.config;
 
-import java.util.Dictionary;
-import java.util.Properties;
-
 import org.apache.felix.gogo.commands.Argument;
-import org.apache.felix.gogo.commands.Option;
 import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Properties;
+
 @Command(scope = "config", name = "edit", description = "Creates or edits a configuration.")
 public class EditCommand extends ConfigCommandSupport {
 
+	private static final String PID_FILTER="(service.pid=%s*)";
+	private static final String FILE_PREFIX="file:";
+	private static final String CONFIG_SUFFIX=".cfg";
+	private static final String FACTORY_SEPARATOR = "-";
+	private static final String FILEINSTALL_FILE_NAME="felix.fileinstall.filename";
+
     @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
     String pid;
 
     @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
     boolean force;
 
+	@Option(name = "-f", aliases = {"--use-file"}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
+    boolean useFile;
+
+	 private File storage;
+
     protected void doExecute(ConfigurationAdmin admin) throws Exception {
         String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
         if (oldPid != null && !oldPid.equals(pid) && !force) {
             System.err.println("Another config is being edited.  Cancel / update first, or use the --force option");
             return;
         }
-        Dictionary props = admin.getConfiguration(pid).getProperties();
-        if (props == null) {
-            props = new Properties();
-        }
+	    Dictionary props;
+
+	    //User selected to use file instead.
+	    if (useFile) {
+		    Configuration configuration = this.findConfigurationByFileName(admin, pid);
+		    if(configuration == null) {
+			    System.err.println("Could not find configuration with file install property set to:"+pid);
+			    return;
+		    }
+		    props = configuration.getProperties();
+		    pid = (String) configuration.getPid();
+	    } else {
+		    props = admin.getConfiguration(pid).getProperties();
+		    if (props == null) {
+			    props = new Properties();
+		    }
+	    }
         this.session.put(PROPERTY_CONFIG_PID, pid);
         this.session.put(PROPERTY_CONFIG_PROPS, props);
     }
+
+	/**
+	 * <p>
+	 * Returns the Configuration object of the given (felix fileinstall) file name.
+	 * </p>
+	 * @param fileName
+	 * @return
+	 */
+	public Configuration findConfigurationByFileName(ConfigurationAdmin admin, String fileName) throws IOException, InvalidSyntaxException {
+		if (fileName != null && fileName.contains(FACTORY_SEPARATOR)) {
+			String factoryPid = fileName.substring(0, fileName.lastIndexOf(FACTORY_SEPARATOR));
+			String absoluteFileName = FILE_PREFIX+storage.getAbsolutePath() + File.separator + fileName + CONFIG_SUFFIX;
+			Configuration[] configurations = admin.listConfigurations(String.format(PID_FILTER, factoryPid));
+			if (configurations != null) {
+				for (Configuration configuration : configurations) {
+					Dictionary dictionary = configuration.getProperties();
+					if (dictionary != null) {
+						String fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
+						if (absoluteFileName.equals(fileInstallFileName)) {
+							return configuration;
+						}
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	public File getStorage() {
+        return storage;
+    }
+
+    public void setStorage(File storage) {
+        this.storage = storage;
+    }
 }

Modified: karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml?rev=1069840&r1=1069839&r2=1069840&view=diff
==============================================================================
--- karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml (original)
+++ karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml Fri Feb 11 15:36:18 2011
@@ -27,7 +27,9 @@
             <action class="org.apache.karaf.shell.config.CancelCommand"/>
         </command>
         <command name="config/edit">
-            <action class="org.apache.karaf.shell.config.EditCommand"/>
+            <action class="org.apache.karaf.shell.config.EditCommand">
+                <property name="storage" value="${storage}" />
+            </action>
             <completers>
                 <ref component-id="configCompleter" />
                 <null/>



Re: svn commit: r1069840 - in /karaf/trunk/shell/config/src/main: java/org/apache/karaf/shell/config/EditCommand.java resources/OSGI-INF/blueprint/shell-config.xml

Posted by Ioannis Canellos <io...@gmail.com>.
I guess that you are referring to the -b option. But no it doesn't solve the
problem.

With or without the use of the -b option the file will be created under etc.
For example my.config-instance1.

The problem is that the pid that will be generated for it will be unknown to
me. So I need a way to edit that configuration using my.config-instance1.
I can't see how the -b option helps in that case.


On Fri, Feb 11, 2011 at 5:46 PM, Guillaume Nodet <gn...@gmail.com> wrote:

> Isnt' that already done by the config:update command which actually
> save to the disk and overwrite the properties file ?
>
> On Fri, Feb 11, 2011 at 16:36,  <io...@apache.org> wrote:
> > Author: iocanel
> > Date: Fri Feb 11 15:36:18 2011
> > New Revision: 1069840
> >
> > URL: http://svn.apache.org/viewvc?rev=1069840&view=rev
> > Log:
> > [KARAF-415] Added flag in config:edit command which allows editing the
> configuration by leveraging the felix.fileinstall.filename property
> >
> > Modified:
> >
>  karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
> >
>  karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
> >
> > Modified:
> karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
> > URL:
> http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java?rev=1069840&r1=1069839&r2=1069840&view=diff
> >
> ==============================================================================
> > ---
> karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
> (original)
> > +++
> karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
> Fri Feb 11 15:36:18 2011
> > @@ -16,34 +16,97 @@
> >  */
> >  package org.apache.karaf.shell.config;
> >
> > -import java.util.Dictionary;
> > -import java.util.Properties;
> > -
> >  import org.apache.felix.gogo.commands.Argument;
> > -import org.apache.felix.gogo.commands.Option;
> >  import org.apache.felix.gogo.commands.Command;
> > +import org.apache.felix.gogo.commands.Option;
> > +import org.osgi.framework.InvalidSyntaxException;
> > +import org.osgi.service.cm.Configuration;
> >  import org.osgi.service.cm.ConfigurationAdmin;
> >
> > +import java.io.File;
> > +import java.io.IOException;
> > +import java.util.Dictionary;
> > +import java.util.Properties;
> > +
> >  @Command(scope = "config", name = "edit", description = "Creates or
> edits a configuration.")
> >  public class EditCommand extends ConfigCommandSupport {
> >
> > +       private static final String PID_FILTER="(service.pid=%s*)";
> > +       private static final String FILE_PREFIX="file:";
> > +       private static final String CONFIG_SUFFIX=".cfg";
> > +       private static final String FACTORY_SEPARATOR = "-";
> > +       private static final String
> FILEINSTALL_FILE_NAME="felix.fileinstall.filename";
> > +
> >     @Argument(index = 0, name = "pid", description = "PID of the
> configuration", required = true, multiValued = false)
> >     String pid;
> >
> >     @Option(name = "--force", aliases = {}, description = "Force the
> edition of this config, even if another one was under edition", required =
> false, multiValued = false)
> >     boolean force;
> >
> > +       @Option(name = "-f", aliases = {"--use-file"}, description =
> "Force the edition of this config, even if another one was under edition",
> required = false, multiValued = false)
> > +    boolean useFile;
> > +
> > +        private File storage;
> > +
> >     protected void doExecute(ConfigurationAdmin admin) throws Exception {
> >         String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
> >         if (oldPid != null && !oldPid.equals(pid) && !force) {
> >             System.err.println("Another config is being edited.  Cancel /
> update first, or use the --force option");
> >             return;
> >         }
> > -        Dictionary props = admin.getConfiguration(pid).getProperties();
> > -        if (props == null) {
> > -            props = new Properties();
> > -        }
> > +           Dictionary props;
> > +
> > +           //User selected to use file instead.
> > +           if (useFile) {
> > +                   Configuration configuration =
> this.findConfigurationByFileName(admin, pid);
> > +                   if(configuration == null) {
> > +                           System.err.println("Could not find
> configuration with file install property set to:"+pid);
> > +                           return;
> > +                   }
> > +                   props = configuration.getProperties();
> > +                   pid = (String) configuration.getPid();
> > +           } else {
> > +                   props = admin.getConfiguration(pid).getProperties();
> > +                   if (props == null) {
> > +                           props = new Properties();
> > +                   }
> > +           }
> >         this.session.put(PROPERTY_CONFIG_PID, pid);
> >         this.session.put(PROPERTY_CONFIG_PROPS, props);
> >     }
> > +
> > +       /**
> > +        * <p>
> > +        * Returns the Configuration object of the given (felix
> fileinstall) file name.
> > +        * </p>
> > +        * @param fileName
> > +        * @return
> > +        */
> > +       public Configuration
> findConfigurationByFileName(ConfigurationAdmin admin, String fileName)
> throws IOException, InvalidSyntaxException {
> > +               if (fileName != null &&
> fileName.contains(FACTORY_SEPARATOR)) {
> > +                       String factoryPid = fileName.substring(0,
> fileName.lastIndexOf(FACTORY_SEPARATOR));
> > +                       String absoluteFileName =
> FILE_PREFIX+storage.getAbsolutePath() + File.separator + fileName +
> CONFIG_SUFFIX;
> > +                       Configuration[] configurations =
> admin.listConfigurations(String.format(PID_FILTER, factoryPid));
> > +                       if (configurations != null) {
> > +                               for (Configuration configuration :
> configurations) {
> > +                                       Dictionary dictionary =
> configuration.getProperties();
> > +                                       if (dictionary != null) {
> > +                                               String
> fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
> > +                                               if
> (absoluteFileName.equals(fileInstallFileName)) {
> > +                                                       return
> configuration;
> > +                                               }
> > +                                       }
> > +                               }
> > +                       }
> > +               }
> > +               return null;
> > +       }
> > +
> > +       public File getStorage() {
> > +        return storage;
> > +    }
> > +
> > +    public void setStorage(File storage) {
> > +        this.storage = storage;
> > +    }
> >  }
> >
> > Modified:
> karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
> > URL:
> http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml?rev=1069840&r1=1069839&r2=1069840&view=diff
> >
> ==============================================================================
> > ---
> karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
> (original)
> > +++
> karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
> Fri Feb 11 15:36:18 2011
> > @@ -27,7 +27,9 @@
> >             <action class="org.apache.karaf.shell.config.CancelCommand"/>
> >         </command>
> >         <command name="config/edit">
> > -            <action class="org.apache.karaf.shell.config.EditCommand"/>
> > +            <action class="org.apache.karaf.shell.config.EditCommand">
> > +                <property name="storage" value="${storage}" />
> > +            </action>
> >             <completers>
> >                 <ref component-id="configCompleter" />
> >                 <null/>
> >
> >
> >
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>



-- 
*Ioannis Canellos*
http://iocanel.blogspot.com

Integration Engineer @ Upstream S.A. <http://www.upstreamsystems.com>

Re: svn commit: r1069840 - in /karaf/trunk/shell/config/src/main: java/org/apache/karaf/shell/config/EditCommand.java resources/OSGI-INF/blueprint/shell-config.xml

Posted by Guillaume Nodet <gn...@gmail.com>.
Forget that, I misunderstood the patch.
Could you please fix the description on the @Option annotation for the
useFile field ...

On Fri, Feb 11, 2011 at 16:46, Guillaume Nodet <gn...@gmail.com> wrote:
> Isnt' that already done by the config:update command which actually
> save to the disk and overwrite the properties file ?
>
> On Fri, Feb 11, 2011 at 16:36,  <io...@apache.org> wrote:
>> Author: iocanel
>> Date: Fri Feb 11 15:36:18 2011
>> New Revision: 1069840
>>
>> URL: http://svn.apache.org/viewvc?rev=1069840&view=rev
>> Log:
>> [KARAF-415] Added flag in config:edit command which allows editing the configuration by leveraging the felix.fileinstall.filename property
>>
>> Modified:
>>    karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
>>    karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
>>
>> Modified: karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java?rev=1069840&r1=1069839&r2=1069840&view=diff
>> ==============================================================================
>> --- karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java (original)
>> +++ karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java Fri Feb 11 15:36:18 2011
>> @@ -16,34 +16,97 @@
>>  */
>>  package org.apache.karaf.shell.config;
>>
>> -import java.util.Dictionary;
>> -import java.util.Properties;
>> -
>>  import org.apache.felix.gogo.commands.Argument;
>> -import org.apache.felix.gogo.commands.Option;
>>  import org.apache.felix.gogo.commands.Command;
>> +import org.apache.felix.gogo.commands.Option;
>> +import org.osgi.framework.InvalidSyntaxException;
>> +import org.osgi.service.cm.Configuration;
>>  import org.osgi.service.cm.ConfigurationAdmin;
>>
>> +import java.io.File;
>> +import java.io.IOException;
>> +import java.util.Dictionary;
>> +import java.util.Properties;
>> +
>>  @Command(scope = "config", name = "edit", description = "Creates or edits a configuration.")
>>  public class EditCommand extends ConfigCommandSupport {
>>
>> +       private static final String PID_FILTER="(service.pid=%s*)";
>> +       private static final String FILE_PREFIX="file:";
>> +       private static final String CONFIG_SUFFIX=".cfg";
>> +       private static final String FACTORY_SEPARATOR = "-";
>> +       private static final String FILEINSTALL_FILE_NAME="felix.fileinstall.filename";
>> +
>>     @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
>>     String pid;
>>
>>     @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
>>     boolean force;
>>
>> +       @Option(name = "-f", aliases = {"--use-file"}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
>> +    boolean useFile;
>> +
>> +        private File storage;
>> +
>>     protected void doExecute(ConfigurationAdmin admin) throws Exception {
>>         String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
>>         if (oldPid != null && !oldPid.equals(pid) && !force) {
>>             System.err.println("Another config is being edited.  Cancel / update first, or use the --force option");
>>             return;
>>         }
>> -        Dictionary props = admin.getConfiguration(pid).getProperties();
>> -        if (props == null) {
>> -            props = new Properties();
>> -        }
>> +           Dictionary props;
>> +
>> +           //User selected to use file instead.
>> +           if (useFile) {
>> +                   Configuration configuration = this.findConfigurationByFileName(admin, pid);
>> +                   if(configuration == null) {
>> +                           System.err.println("Could not find configuration with file install property set to:"+pid);
>> +                           return;
>> +                   }
>> +                   props = configuration.getProperties();
>> +                   pid = (String) configuration.getPid();
>> +           } else {
>> +                   props = admin.getConfiguration(pid).getProperties();
>> +                   if (props == null) {
>> +                           props = new Properties();
>> +                   }
>> +           }
>>         this.session.put(PROPERTY_CONFIG_PID, pid);
>>         this.session.put(PROPERTY_CONFIG_PROPS, props);
>>     }
>> +
>> +       /**
>> +        * <p>
>> +        * Returns the Configuration object of the given (felix fileinstall) file name.
>> +        * </p>
>> +        * @param fileName
>> +        * @return
>> +        */
>> +       public Configuration findConfigurationByFileName(ConfigurationAdmin admin, String fileName) throws IOException, InvalidSyntaxException {
>> +               if (fileName != null && fileName.contains(FACTORY_SEPARATOR)) {
>> +                       String factoryPid = fileName.substring(0, fileName.lastIndexOf(FACTORY_SEPARATOR));
>> +                       String absoluteFileName = FILE_PREFIX+storage.getAbsolutePath() + File.separator + fileName + CONFIG_SUFFIX;
>> +                       Configuration[] configurations = admin.listConfigurations(String.format(PID_FILTER, factoryPid));
>> +                       if (configurations != null) {
>> +                               for (Configuration configuration : configurations) {
>> +                                       Dictionary dictionary = configuration.getProperties();
>> +                                       if (dictionary != null) {
>> +                                               String fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
>> +                                               if (absoluteFileName.equals(fileInstallFileName)) {
>> +                                                       return configuration;
>> +                                               }
>> +                                       }
>> +                               }
>> +                       }
>> +               }
>> +               return null;
>> +       }
>> +
>> +       public File getStorage() {
>> +        return storage;
>> +    }
>> +
>> +    public void setStorage(File storage) {
>> +        this.storage = storage;
>> +    }
>>  }
>>
>> Modified: karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
>> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml?rev=1069840&r1=1069839&r2=1069840&view=diff
>> ==============================================================================
>> --- karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml (original)
>> +++ karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml Fri Feb 11 15:36:18 2011
>> @@ -27,7 +27,9 @@
>>             <action class="org.apache.karaf.shell.config.CancelCommand"/>
>>         </command>
>>         <command name="config/edit">
>> -            <action class="org.apache.karaf.shell.config.EditCommand"/>
>> +            <action class="org.apache.karaf.shell.config.EditCommand">
>> +                <property name="storage" value="${storage}" />
>> +            </action>
>>             <completers>
>>                 <ref component-id="configCompleter" />
>>                 <null/>
>>
>>
>>
>
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
> ------------------------
> Open Source SOA
> http://fusesource.com
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Re: svn commit: r1069840 - in /karaf/trunk/shell/config/src/main: java/org/apache/karaf/shell/config/EditCommand.java resources/OSGI-INF/blueprint/shell-config.xml

Posted by Guillaume Nodet <gn...@gmail.com>.
Isnt' that already done by the config:update command which actually
save to the disk and overwrite the properties file ?

On Fri, Feb 11, 2011 at 16:36,  <io...@apache.org> wrote:
> Author: iocanel
> Date: Fri Feb 11 15:36:18 2011
> New Revision: 1069840
>
> URL: http://svn.apache.org/viewvc?rev=1069840&view=rev
> Log:
> [KARAF-415] Added flag in config:edit command which allows editing the configuration by leveraging the felix.fileinstall.filename property
>
> Modified:
>    karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
>    karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
>
> Modified: karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java?rev=1069840&r1=1069839&r2=1069840&view=diff
> ==============================================================================
> --- karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java (original)
> +++ karaf/trunk/shell/config/src/main/java/org/apache/karaf/shell/config/EditCommand.java Fri Feb 11 15:36:18 2011
> @@ -16,34 +16,97 @@
>  */
>  package org.apache.karaf.shell.config;
>
> -import java.util.Dictionary;
> -import java.util.Properties;
> -
>  import org.apache.felix.gogo.commands.Argument;
> -import org.apache.felix.gogo.commands.Option;
>  import org.apache.felix.gogo.commands.Command;
> +import org.apache.felix.gogo.commands.Option;
> +import org.osgi.framework.InvalidSyntaxException;
> +import org.osgi.service.cm.Configuration;
>  import org.osgi.service.cm.ConfigurationAdmin;
>
> +import java.io.File;
> +import java.io.IOException;
> +import java.util.Dictionary;
> +import java.util.Properties;
> +
>  @Command(scope = "config", name = "edit", description = "Creates or edits a configuration.")
>  public class EditCommand extends ConfigCommandSupport {
>
> +       private static final String PID_FILTER="(service.pid=%s*)";
> +       private static final String FILE_PREFIX="file:";
> +       private static final String CONFIG_SUFFIX=".cfg";
> +       private static final String FACTORY_SEPARATOR = "-";
> +       private static final String FILEINSTALL_FILE_NAME="felix.fileinstall.filename";
> +
>     @Argument(index = 0, name = "pid", description = "PID of the configuration", required = true, multiValued = false)
>     String pid;
>
>     @Option(name = "--force", aliases = {}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
>     boolean force;
>
> +       @Option(name = "-f", aliases = {"--use-file"}, description = "Force the edition of this config, even if another one was under edition", required = false, multiValued = false)
> +    boolean useFile;
> +
> +        private File storage;
> +
>     protected void doExecute(ConfigurationAdmin admin) throws Exception {
>         String oldPid = (String) this.session.get(PROPERTY_CONFIG_PID);
>         if (oldPid != null && !oldPid.equals(pid) && !force) {
>             System.err.println("Another config is being edited.  Cancel / update first, or use the --force option");
>             return;
>         }
> -        Dictionary props = admin.getConfiguration(pid).getProperties();
> -        if (props == null) {
> -            props = new Properties();
> -        }
> +           Dictionary props;
> +
> +           //User selected to use file instead.
> +           if (useFile) {
> +                   Configuration configuration = this.findConfigurationByFileName(admin, pid);
> +                   if(configuration == null) {
> +                           System.err.println("Could not find configuration with file install property set to:"+pid);
> +                           return;
> +                   }
> +                   props = configuration.getProperties();
> +                   pid = (String) configuration.getPid();
> +           } else {
> +                   props = admin.getConfiguration(pid).getProperties();
> +                   if (props == null) {
> +                           props = new Properties();
> +                   }
> +           }
>         this.session.put(PROPERTY_CONFIG_PID, pid);
>         this.session.put(PROPERTY_CONFIG_PROPS, props);
>     }
> +
> +       /**
> +        * <p>
> +        * Returns the Configuration object of the given (felix fileinstall) file name.
> +        * </p>
> +        * @param fileName
> +        * @return
> +        */
> +       public Configuration findConfigurationByFileName(ConfigurationAdmin admin, String fileName) throws IOException, InvalidSyntaxException {
> +               if (fileName != null && fileName.contains(FACTORY_SEPARATOR)) {
> +                       String factoryPid = fileName.substring(0, fileName.lastIndexOf(FACTORY_SEPARATOR));
> +                       String absoluteFileName = FILE_PREFIX+storage.getAbsolutePath() + File.separator + fileName + CONFIG_SUFFIX;
> +                       Configuration[] configurations = admin.listConfigurations(String.format(PID_FILTER, factoryPid));
> +                       if (configurations != null) {
> +                               for (Configuration configuration : configurations) {
> +                                       Dictionary dictionary = configuration.getProperties();
> +                                       if (dictionary != null) {
> +                                               String fileInstallFileName = (String) dictionary.get(FILEINSTALL_FILE_NAME);
> +                                               if (absoluteFileName.equals(fileInstallFileName)) {
> +                                                       return configuration;
> +                                               }
> +                                       }
> +                               }
> +                       }
> +               }
> +               return null;
> +       }
> +
> +       public File getStorage() {
> +        return storage;
> +    }
> +
> +    public void setStorage(File storage) {
> +        this.storage = storage;
> +    }
>  }
>
> Modified: karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml
> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml?rev=1069840&r1=1069839&r2=1069840&view=diff
> ==============================================================================
> --- karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml (original)
> +++ karaf/trunk/shell/config/src/main/resources/OSGI-INF/blueprint/shell-config.xml Fri Feb 11 15:36:18 2011
> @@ -27,7 +27,9 @@
>             <action class="org.apache.karaf.shell.config.CancelCommand"/>
>         </command>
>         <command name="config/edit">
> -            <action class="org.apache.karaf.shell.config.EditCommand"/>
> +            <action class="org.apache.karaf.shell.config.EditCommand">
> +                <property name="storage" value="${storage}" />
> +            </action>
>             <completers>
>                 <ref component-id="configCompleter" />
>                 <null/>
>
>
>



-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com