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 <[email protected]> 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,  <[email protected]> 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>

Reply via email to