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