You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@karaf.apache.org by Guillaume Nodet <gn...@gmail.com> on 2011/02/11 16:46:25 UTC
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
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
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