[hg] main-silver: #205007: In NB module project at the end of wi...

  • From: Martin Kozeny < >
  • To:
  • Subject: [hg] main-silver: #205007: In NB module project at the end of wi...
  • Date: Mon, 07 Jan 2013 08:21:57 -0800

changeset 3aef98f2b716 in main-silver ((none))
details: http://hg.netbeans.org/main-silver/rev/3aef98f2b716
description:
        #205007: In NB module project at the end of wizard for adding e.g. 
library descriptor when button Finish is invoked, localizing property bundle 
is created if not exists and information about library are written there. 
Displayed name of the module is fetched from manifest file (property 
OpenIDE-Module-Name).

diffstat:

 
apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/CreatedModifiedFiles.java
                    |  292 ++++++---
 
apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/CreatedModifiedFilesProvider.java
 |   36 +-
 2 files changed, 208 insertions(+), 120 deletions(-)

diffs (853 lines):

diff --git 
a/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/CreatedModifiedFiles.java
 
b/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/CreatedModifiedFiles.java
--- 
a/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/CreatedModifiedFiles.java
+++ 
b/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/common/CreatedModifiedFiles.java
@@ -41,7 +41,6 @@
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  */
-
 package org.netbeans.modules.apisupport.project.ui.wizard.common;
 
 import com.sun.source.tree.AnnotationTree;
@@ -108,6 +107,7 @@
 import org.openide.loaders.DataObject;
 import org.openide.loaders.DataObjectNotFoundException;
 import org.openide.modules.SpecificationVersion;
+import org.openide.util.Exceptions;
 import org.openide.util.Lookup;
 import org.openide.util.Parameters;
 import org.openide.util.lookup.ServiceProvider;
@@ -120,9 +120,10 @@
  * <code>CreatedModifiedFiles</code> instance client may create {@link
  * Operation} which then may be added to the
  * <code>CreatedModifiedFiles</code> instance or just used itself. Both
- * <code>CreatedModifiedFiles</code> and <code>Operation</code> provide 
methods
- * to get sets of relative (to a project's base directory) paths which are
- * going to be created and/or modified. These sets may be obtained
+ * <code>CreatedModifiedFiles</code> and
+ * <code>Operation</code> provide methods to get sets of relative (to a
+ * project's base directory) paths which are going to be created and/or
+ * modified. These sets may be obtained
  * <strong>before</strong> added operation are run so they can be e.g. shown 
by
  * wizard before any files are actually created.
  *
@@ -131,21 +132,23 @@
 public final class CreatedModifiedFiles {
     
     /**
-     * Operation that may be added to a <code>CreatedModifiedFiles</code>
-     * instance or can just be used alone. See {@link CreatedModifiedFiles} 
for
-     * more information.
+     * Operation that may be added to a
+     * <code>CreatedModifiedFiles</code> instance or can just be used alone. 
See
+     * {@link CreatedModifiedFiles} for more information.
      */
     public interface Operation {
         
-        /** Perform this operation. */
+        /**
+         * Perform this operation.
+         */
         void run() throws IOException;
         
         /**
          * Returns sorted array of path which are going to modified after 
this
          * {@link CreatedModifiedFiles} instance is run. Paths are relative 
to
          * the project's base directory. It is available immediately after an
-         * operation instance is created.
-         * XXX why is this sorted, and not a simple Set<String>?
+         * operation instance is created. XXX why is this sorted, and not a
+         * simple Set<String>?
          */
         String[] getModifiedPaths();
         
@@ -158,12 +161,11 @@
         String[] getCreatedPaths();
         
         /**
-         * returns paths that are already existing but the operaton expects 
to create it.
-         * Is an error condition and should be shown in UI.
+         * returns paths that are already existing but the operaton expects 
to
+         * create it. Is an error condition and should be shown in UI.
          *
          */
         String[] getInvalidPaths();
-        
         /* XXX should perhaps also have:
         /**
          * True if the created or modified path is relevant to the user and 
should
@@ -175,7 +177,6 @@
          * /
         boolean isForEditing(String path);
          */
-        
     }
     
     public static abstract class AbstractOperation implements Operation {
@@ -275,20 +276,19 @@
                     FileUtil.toFile(getProject().getProjectDirectory()),
                     FileUtil.normalizeFile(FileUtil.toFile(file)));
         }
-        
     }
-    
     private final SortedSet<String> createdPaths = new TreeSet<String>();
     private final SortedSet<String> modifiedPaths = new TreeSet<String>();
     private final SortedSet<String> invalidPaths = new TreeSet<String>();
-    
-    /** {@link Project} this instance manage. */
+    /**
+     * {@link Project} this instance manage.
+     */
     private final Project project;
     private final List<Operation> operations = new ArrayList<Operation>();
-    
     // For use from LayerModifications; XXX would be better to have an 
operation context or similar
     // (so that multiple operations could group pre- and post-actions)
     private LayerHandle layerHandle;
+
     LayerHandle getLayerHandle() {
         if (layerHandle == null) {
             layerHandle = LayerHandle.forProject(project);
@@ -298,6 +298,7 @@
     
     /**
      * Create instance for managing given {@link NbModuleProject}'s files.
+     *
      * @param project project this instance will operate upon
      */
     public CreatedModifiedFiles(Project project) {
@@ -309,8 +310,9 @@
      * after calling {@link #run()}. Operations are run in the order in which
      * they have been added. Also files which would be created by a given
      * operation are added to lists of paths returned by {@link
-     * #getModifiedPaths()} or {@link #getCreatedPaths()} immediately. @param
-     * operation operation to be added
+     * #getModifiedPaths()} or {@link #getCreatedPaths()} immediately.
+     *
+     * @param operation operation to be added
      */
     public void add(Operation operation) {
         operations.add(operation);
@@ -391,8 +393,10 @@
 
     /**
      * Convenience method to load a file template from the standard location.
+     *
      * @param name a simple filename
-     * @return that file from the 
<code>Templates/NetBeansModuleDevelopment-files</code> layer folder
+     * @return that file from      * the 
<code>Templates/NetBeansModuleDevelopment-files</code> layer
+     * folder
      */
     public static FileObject getTemplate(String name) {
         FileObject f = 
FileUtil.getConfigFile("Templates/NetBeansModuleDevelopment-files/" + name);
@@ -403,6 +407,7 @@
     /**
      * Returns {@link Operation} for creating custom file in the project file
      * hierarchy.
+     *
      * @param path relative to a project directory where a file to be created
      * @param content content for the file being created. Content may address
      *        either text or binary data.
@@ -410,16 +415,18 @@
     public Operation createFile(String path, FileObject content) {
         return new CreateFile(project, path, content);
     }
+
     /**
-     * Returns an {@link Operation} for creating custom file in the project
-     * file hierarchy with an option to replace <em>token</em>s from a given
-     * <code>content</code> with custom string. The result will be stored 
into
-     * a file representing by a given <code>path</code>.
+     * Returns an {@link Operation} for creating custom file in the project 
file
+     * hierarchy with an option to replace <em>token</em>s from a given
+     * <code>content</code> with custom string. The result will be stored 
into a
+     * file representing by a given
+     * <code>path</code>.
      *
      * @param path relative to a project directory where a file to be created
      * @param content content for the file being created
-     * @param tokens properties with values to be passed to FreeMarker
-     *               (in addition to: name, nameAndExt, user, date, time, 
and project.license)
+     * @param tokens properties with values to be passed to FreeMarker (in
+     * addition to: name, nameAndExt, user, date, time, and project.license)
      */
     public Operation createFileWithSubstitutions(String path,
             FileObject content, Map<String,? extends Object> tokens) {
@@ -428,6 +435,7 @@
         }
         return new CreateFile(project, path, content, tokens);
     }
+
     private static final class CreateFile extends AbstractOperation {
         
         private String path;
@@ -467,25 +475,40 @@
                 target.setAttribute("justCreatedByNewWizard", true); // 
NOI18N
             }
         }
-        
     }
     
     /**
-     * Provides {@link Operation} that will add given <code>value</code> 
under
-     * a specified <code>key</code> into the custom <em>bundle</em> which is
-     * specified by the <code>bundlePath</code> parameter.
+     * Provides {@link Operation} that will add given
+     * <code>value</code> under a specified
+     * <code>key</code> into the custom <em>bundle</em> which is specified by
+     * the
+     * <code>packageBundlePath</code> parameter.
+     */
+    public Operation bundleKeyFromPackagePath(String bundlePath, String key, 
String value) {
+        return new BundleKey(project, key, value, bundlePath, true);
+    }
+
+    /**
+     * Provides {@link Operation} that will add given
+     * <code>value</code> under a specified
+     * <code>key</code> into the custom <em>bundle</em> which is specified by
+     * the
+     * <code>bundlePath</code> parameter.
      */
     public Operation bundleKey(String bundlePath, String key, String value) {
-        return new BundleKey(project, key, value, bundlePath);
+        return new BundleKey(project, key, value, bundlePath, false);
     }
+
     /**
-     * Provides {@link Operation} that will add given <code>value</code> 
under
-     * a specified <code>key</code> into the project's default <em>localized
-     * bundle</em> which is specified in the project's <em>manifest</em>.
+     * Provides {@link Operation} that will add given
+     * <code>value</code> under a specified
+     * <code>key</code> into the project's default <em>localized bundle</em>
+     * which is specified in the project's <em>manifest</em>.
      */
     public Operation bundleKeyDefaultBundle(String key, String value) {
         return new BundleKey(project, key, value);
     }
+
     private static final class BundleKey extends AbstractOperation {
         
         private final String bundlePath;
@@ -493,10 +516,10 @@
         private final String value;
         
         public BundleKey(Project project, String key, String value) {
-            this(project, key, value, null);
+            this(project, key, value, null, false);
         }
         
-        public BundleKey(Project project, String key, String value, String 
bundlePath) {
+        public BundleKey(Project project, String key, String value, String 
bundlePath, Boolean packageBundlePath) {
             super(project);
             this.key = key;
             this.value = value;
@@ -506,8 +529,14 @@
                 String srcDir = 
getModuleInfo().getResourceDirectoryPath(false);
                 this.bundlePath = srcDir + "/" + mm.getLocalizingBundle(); 
// NOI18N
             } else {
+                if (packageBundlePath) {
+                    String srcDir = 
getModuleInfo().getResourceDirectoryPath(false);
+                    this.bundlePath = srcDir + "/" + bundlePath.replace('.', 
'/') + ".properties";
+                } else {
                 this.bundlePath = bundlePath;
             }
+
+            }
             addCreatedOrModifiedPath(this.bundlePath, true);
         }
         
@@ -519,7 +548,6 @@
             ep.setProperty(key, value);
             Util.storeProperties(bundleFO, ep);
         }
-        
     }
     
     /**
@@ -540,10 +568,10 @@
     public Operation addLoaderSection(String dataLoaderClass, String 
installBefore) {
         return new AddLoaderSection(project, dataLoaderClass, installBefore);
     }
+
     private static final class AddLoaderSection extends AbstractOperation {
         
         private FileObject mfFO;
-        
         private String dataLoaderClass;
         private String installBefore;
         
@@ -577,14 +605,15 @@
             }
             Util.storeManifest(mfFO, em);
         }
-        
     }
     
     /**
-     * Provides {@link Operation} that will register an 
<code>implClass</code>
-     * implementation of <code>interfaceClass</code> interface in the lookup.
-     * If a file representing <code>interfaceClass</code> service already
-     * exists in <em>META-INF/services</em> directory
+     * Provides {@link Operation} that will register an
+     * <code>implClass</code> implementation of
+     * <code>interfaceClass</code> interface in the lookup. If a file
+     * representing
+     * <code>interfaceClass</code> service already exists in
+     * <em>META-INF/services</em> directory
      * <code>implClass</code> will be appended to the end of the list of
      * implementations. If it doesn't exist a new file will be created.
      * <p><strong>Note:</strong> this style of registration should not be 
used
@@ -592,11 +621,13 @@
      *
      * @param interfaceClass e.g. org.example.spi.somemodule.ProvideMe
      * @param implClass e.g. org.example.module1.ProvideMeImpl
-     * @param inTests if true, add to test/unit/src/META-INF/services/, else 
to src/META-INF/services/
+     * @param inTests if true, add to test/unit/src/META-INF/services/, else 
to
+     * src/META-INF/services/
      */
     public Operation addLookupRegistration(String interfaceClass, String 
implClass, boolean inTests) {
         return new AddLookupRegistration(project, interfaceClass, implClass, 
inTests);
     }
+
     private static final class AddLookupRegistration extends 
AbstractOperation {
         
         private String interfaceClassPath;
@@ -648,33 +679,36 @@
     
     /**
      * Add a dependency to a list of module dependencies of this project. 
This
-     * means editing of project's <em>nbproject/project.xml</em>. All
-     * parameters refers to a module this module will depend on. If a project
-     * already has a given dependency it will not be added.
+     * means editing of project's <em>nbproject/project.xml</em>. All 
parameters
+     * refers to a module this module will depend on. If a project already 
has a
+     * given dependency it will not be added.
      *
      * @param codeNameBase codename base
-     * @param releaseVersion release version, if <code>null</code> will be 
taken from the
-     *        entry found in platform
+     * @param releaseVersion release version, if <code>null</code> will be 
taken
+     * from the entry found in platform
      * @param version specification version (see {@link 
SpecificationVersion}),
      *        if null will be taken from the entry found in platform
      * @param useInCompiler do this module needs a module beeing added at a
      *        compile time?
      */
-    public Operation addModuleDependency(String codeNameBase, String
-            releaseVersion, SpecificationVersion version, boolean 
useInCompiler) {
+    public Operation addModuleDependency(String codeNameBase, String 
releaseVersion, SpecificationVersion version, boolean useInCompiler) {
         return new AddModuleDependency(project, codeNameBase, 
releaseVersion, version, useInCompiler, false);
     }
+
     /**
      * Delegates to {@link #addModuleDependency(String, String,
      * SpecificationVersion, boolean)} passing a given code name base,
-     * <code>null</code> as release version, <code>null</code> as version and
+     * <code>null</code> as release version,
+     * <code>null</code> as version and
      * <code>true</code> as useInCompiler arguments.
      */
     public Operation addModuleDependency(String codeNameBase) {
         return addModuleDependency(codeNameBase, null, null, true);
     }
+
     /**
      * Adds a test dependency to list of test dependencies.
+     *
      * @param codeNameBase
      * @return 
      */
@@ -687,7 +721,6 @@
         private List<NbModuleProvider.ModuleDependency> dependencies;
         private Map<String, ModuleDependency> codenamebaseMap;
         
-        
         public AddModuleDependency(Project project, String codeNameBase,
                 String releaseVersion, SpecificationVersion specVersion, 
boolean useInCompiler, boolean test) {
             super(project);
@@ -723,12 +756,13 @@
                 }
             }
         }
-        
     }
     
     /**
      * Adds new attributes into manifest file.
-     * @param section the name of the section or <code>null</code> for the 
main section.
+     *
+     * @param section the name of the section or <code>null</code> for the 
main
+     * section.
      * @param attributes attribute names and values
      * @return see {@link Operation}
      */
@@ -740,9 +774,13 @@
         }
         return retval;
     }
+
     /**
-     * Adds a token to a list given by a manifest header (creating it if it 
does not already exist).
-     * @param header a header such as {@link 
ManifestManager#OPENIDE_MODULE_REQUIRES} (in the main section)
+     * Adds a token to a list given by a manifest header (creating it if it 
does
+     * not already exist).
+     *
+     * @param header a header such as
+     * {@link ManifestManager#OPENIDE_MODULE_REQUIRES} (in the main section)
      * @param token a token to add
      * @return see {@link Operation}
      */
@@ -751,7 +789,9 @@
             {
                 setAttribute(header, token, null);
             }
-            protected @Override void performModification(EditableManifest 
em, String name, String value, String section) throws 
IllegalArgumentException {
+
+            protected @Override
+            void performModification(EditableManifest em, String name, 
String value, String section) throws IllegalArgumentException {
                 String originalValue = em.getAttribute(name, section);
                 if (originalValue != null) {
                     if (!Arrays.asList(originalValue.split("[, 
]+")).contains(value)) {
@@ -763,7 +803,9 @@
             }
         };
     }
+
     private static class ModifyManifest extends AbstractOperation {
+
         private final FileObject manifestFile;
         private Map<String,Map<String,String>> attributesToAdd;
         
@@ -777,8 +819,10 @@
         }
         
         /**
-         * Adds requirement for modifying attribute. How attribute
-         * will be modified depends on implementation of method {@link 
performModification}.
+         * Adds requirement for modifying attribute. How attribute will be
+         * modified depends on implementation of method
+         * {@link performModification}.
+         *
          * @param name the attribute name
          * @param value the new attribute value
          * @param section the name of the section or null for the main 
section
@@ -794,11 +838,13 @@
         
         /**
          * Creates section if doesn't exists and set all attributes
+         *
          * @param em EditableManifest where attribute represented by other
          * parameters is going to be added
          * @param name the attribute name
          * @param value the new attribute value
-         * @param section the name of the section to add it to, or null for 
the main section
+         * @param section the name of the section to add it to, or null for 
the
+         * main section
          */
         protected void performModification(final EditableManifest em,final 
String name,final String value,
                 final String section)  {
@@ -808,7 +854,8 @@
             em.setAttribute(name, value, section);
         }
         
-        public @Override final void run() throws IOException {
+        public @Override
+        final void run() throws IOException {
             if (manifestFile == null) {
                 throw new IOException("No manifest.mf to edit"); // #189389
             }
@@ -827,7 +874,6 @@
             Util.storeManifest(manifestFile, em);
         }
         
-        
         private void ensureSavingFirst() throws IOException {
             //#65420 it can happen the manifest is currently being edited. 
save it
             // and cross fingers because it can be in inconsistent state
@@ -845,9 +891,12 @@
     
     /**
      * Adds new properties into property file.
-     * @param propertyPath path representing properties file relative to a 
project directory where all
-     * properties will be put in. If such a file does not exist it is 
created.
-     * @param properties &lt;String,String&gt; map mapping properties names 
and values.
+     *
+     * @param propertyPath path representing properties file relative to a
+     * project directory where all properties will be put in. If such a file
+     * does not exist it is created.
+     * @param properties &lt;String,String&gt; map mapping properties names 
and
+     * values.
      * @return see {@link Operation}
      */
     public Operation propertiesModification(String propertyPath,
@@ -859,7 +908,9 @@
         }
         return retval;
     }
+
     private static class ModifyProperties extends AbstractOperation {
+
         private Map<String,String> properties;
         private final String propertyPath;
         private EditableProperties ep;
@@ -906,34 +957,39 @@
     }
     
     /**
-     * Make structural modifications to the project's XML layer.
-     * The operations may be expressed as filesystem calls.
+     * Make structural modifications to the project's XML layer. The 
operations
+     * may be expressed as filesystem calls.
+     *
      * @param op a callback for the actual changes to make
-     * @param externalFiles a list of <em>simple filenames</em> of new data 
files which
-     *                      are to be created in the layer and which will 
therefore appear
-     *                      on disk alongside the layer, usually with the 
same names (unless
+     * @param externalFiles a list of <em>simple filenames</em> of new data
+     * files which are to be created in the layer and which will therefore
+     * appear on disk alongside the layer, usually with the same names 
(unless
      *                      they conflict with existing files); you still 
need to create them
-     *                      yourself using e.g. {@link 
FileObject#createData} and {@link FileObject#getOutputStream};
-     *                      you must use {@link LayerUtil#findGeneratedName} 
to translate names to a safer version
+     * yourself using e.g. {@link FileObject#createData} and
+     * {@link FileObject#getOutputStream}; you must use
+     * {@link LayerUtil#findGeneratedName} to translate names to a safer 
version
      * @return the operation handle
      */
     public Operation layerModifications(final LayerOperation op, final 
Set<String> externalFiles) {
         return new LayerModifications(project, op, externalFiles, this);
     }
+
     /**
      * Callback for modifying the project's XML layer.
+     *
      * @see #layerModifications
      */
     public interface LayerOperation {
         
         /**
          * Actually change the layer.
+         *
          * @param layer the layer to make changes to using Filesystems API 
calls
          * @throws IOException if the changes fail somehow
          */
         void run(FileSystem layer) throws IOException;
+    }
         
-    }
     private static final class LayerModifications implements Operation {
         
         private final Project project;
@@ -953,17 +1009,19 @@
             op.run(cmf.getLayerHandle().layer(true));
         }
         
-        @Override public String[] getModifiedPaths() {
+        @Override
+        public String[] getModifiedPaths() {
             FileObject layer = cmf.getLayerHandle().getLayerFile();
             return layer != null ? new String[] 
{FileUtil.getRelativePath(project.getProjectDirectory(), layer)} : new 
String[0];
         }
         
-        @Override public String[] getCreatedPaths() {
+        @Override
+        public String[] getCreatedPaths() {
             LayerHandle handle = cmf.getLayerHandle();
             FileObject layer = handle.getLayerFile();
-            String layerPath = layer != null ?
-                    FileUtil.getRelativePath(project.getProjectDirectory(), 
layer) :
-                    
project.getLookup().lookup(NbModuleProvider.class).getResourceDirectoryPath(false)
 + '/' + handle.newLayerPath();
+            String layerPath = layer != null
+                    ? 
FileUtil.getRelativePath(project.getProjectDirectory(), layer)
+                    : 
project.getLookup().lookup(NbModuleProvider.class).getResourceDirectoryPath(false)
 + '/' + handle.newLayerPath();
             int slash = layerPath.lastIndexOf('/');
             String prefix = layerPath.substring(0, slash + 1);
             SortedSet<String> s = new TreeSet<String>();
@@ -981,27 +1039,25 @@
             //TODO applicable here?
             return new String[0];
         }
-        
     }
     
     /**
-     * Creates an entry (<em>file</em> element) in the project's layer. Also
-     * may create and/or modify other files as it is needed.
+     * Creates an entry (<em>file</em> element) in the project's layer. Also 
may
+     * create and/or modify other files as it is needed.
      *
-     * @param layerPath path in a project's layer. Folders which don't exist
-     *        yet will be created. (e.g.
+     * @param layerPath path in a project's layer. Folders which don't exist 
yet
+     * will be created. (e.g.
      *        <em>Menu/Tools/org-example-module1-BeepAction.instance</em>).
      * @param content became content of a file, or null
-     * @param substitutionTokens see {@link #createFileWithSubstitutions} 
for details;
-     *                           may be <code>null</code> to not use 
FreeMarker
+     * @param substitutionTokens see {@link #createFileWithSubstitutions} for
+     * details; may be <code>null</code> to not use FreeMarker
      * @param localizedDisplayName if it is not a <code>null</code>
-     *        <em>displayName</em> attribute will be
-     *        created with the bundlevalue to a new entry in default bundle 
(from manifest).
-     *        The entry will also be added into the bundle.
-     * @param fileAttributes key in the map is the
-     *        name of the file attribute value is the actual value, currently
-     *        supported types are Boolean and String Generates
-     *        <pre>
+     * <em>displayName</em> attribute will be created with the bundlevalue 
to a
+     * new entry in default bundle (from manifest). The entry will also be 
added
+     * into the bundle.
+     * @param fileAttributes key in the map is the name of the file attribute
+     * value is the actual value, currently supported types are Boolean and
+     * String Generates      <pre>
      *          &lt;attr name="KEY" stringvalue="VALUE"/&gt; or &lt;attr 
name="KEY" booleanvalue="VALUE"/&gt;
      *        </pre>
      * @return see {@link Operation}
@@ -1015,6 +1071,7 @@
         return new CreateLayerEntry(this, project, layerPath, content,
                 substitutionTokens, localizedDisplayName, fileAttributes);
     }
+
     private static final class CreateLayerEntry extends AbstractOperation {
         
         private final Operation createBundleKey;
@@ -1072,14 +1129,17 @@
                     public void run() throws IOException {
                         throw new IOException("cannot overwrite " + 
layerPath); // NOI18N
                     }
+
                     @Override
                     public String[] getModifiedPaths() {
                         return new String[0];
                     }
+
                     @Override
                     public String[] getCreatedPaths() {
                         return new String[0];
                     }
+
                     @Override
                     public String[] getInvalidPaths() {
                         // #85138: make sure we do not overwrite an existing 
entry.
@@ -1114,7 +1174,8 @@
      *        project's layer. It <strong>must</strong> exist.
      * @param attrName value of the name attribute of the 
<em>&lt;attr&gt;</em>
      *        element.
-     * @param attrValue value of the attribute (may specially be a string 
prefixed with "newvalue:", "bundlevalue:" or "methodvalue:")
+     * @param attrValue value of the attribute (may specially be a string
+     * prefixed with "newvalue:", "bundlevalue:" or "methodvalue:")
      * @return see {@link Operation}
      */
     public Operation createLayerAttribute(final String parentPath,
@@ -1143,10 +1204,13 @@
     /**
      * Order a new entry in a project layer between two others.
      *
-     * @param layerPath folder path in a project's layer. (e.g. 
<em>Loaders/text/x-java/Actions</em>).
-     * @param precedingItemName item to be before <em>newItemName</em> (may 
be null)
+     * @param layerPath folder path in a project's layer. (e.g.
+     * <em>Loaders/text/x-java/Actions</em>).
+     * @param precedingItemName item to be before <em>newItemName</em> (may 
be
+     * null)
      * @param newItemName the new item (must already exist!)
-     * @param followingItemName item to be after <em>newItemName</em> (may 
be null)
+     * @param followingItemName item to be after <em>newItemName</em> (may be
+     * null)
      */
     public Operation orderLayerEntry(final String layerPath, final String 
precedingItemName, final String newItemName,
             final String followingItemName) {
@@ -1178,6 +1242,7 @@
                     }
                 }
             }
+
             private Integer getPosition(FileObject folder, String name) {
                 if (name == null) {
                     return null;
@@ -1194,16 +1259,19 @@
     }
     
     /**
-     * Provides {@link Operation} that will create a {@code 
package-info.java} if needed
-     * and optionally add some annotations to the package.
-     * Each annotation is of the form FQN -> {key -> val}.
+     * Provides {@link Operation} that will create a {@code 
package-info.java}
+     * if needed and optionally add some annotations to the package. Each
+     * annotation is of the form FQN -> {key -> val}.
      */
     public Operation packageInfo(String packageName, Map<String,? extends 
Map<String,?>> annotations) {
         return new PackageInfo(project, packageName, annotations);
     }
+
     private static class PackageInfo extends AbstractOperation {
+
         private final Map<String,? extends Map<String,?>> annotations;
         private final String srcRootPath, srcRelPath;
+
         PackageInfo(Project project, String packageName, Map<String,? 
extends Map<String,?>> annotations) {
             super(project);
             this.annotations = annotations;
@@ -1211,10 +1279,13 @@
             srcRelPath = packageName.replace('.', '/') + 
"/package-info.java"; // NOI18N
             addCreatedOrModifiedPath(srcRootPath + '/' + srcRelPath, true);
         }
-        public @Override void run() throws IOException {
+
+        public @Override
+        void run() throws IOException {
             final FileObject top = getProject().getProjectDirectory();
             top.getFileSystem().runAtomicAction(new 
FileSystem.AtomicAction() {
-                public @Override void run() throws IOException {
+                public @Override
+                void run() throws IOException {
                     final FileObject srcRoot = FileUtil.createFolder(top, 
srcRootPath);
                     final FileObject srcFile = 
srcRoot.getFileObject(srcRelPath);
                     final JavaSource source;
@@ -1228,9 +1299,11 @@
                     }
                     try {
                         source.runWhenScanFinished(new 
Task<CompilationController>() { // #194569
-                            @Override public void run(CompilationController 
parameter) throws Exception {
+                            @Override
+                            public void run(CompilationController parameter) 
throws Exception {
                         source.runModificationTask(new Task<WorkingCopy>() {
-                            public @Override void run(WorkingCopy wc) throws 
Exception {
+                                    public @Override
+                                    void run(WorkingCopy wc) throws 
Exception {
                                 wc.toPhase(JavaSource.Phase.RESOLVED);
                                 TreeMaker make = wc.getTreeMaker();
                                 List<AnnotationTree> anns = new 
ArrayList<AnnotationTree>();
@@ -1314,9 +1387,9 @@
         }
         ScriptEngineManager scriptEngineManager = new ScriptEngineManager(l);
         ScriptEngine engine = 
scriptEngineManager.getEngineByName("freemarker");
-        assert engine != null : "#163878: " + 
scriptEngineManager.getEngineFactories() + " lacks freemarker using " +
-                l + " though lookup has " +
-                Lookup.getDefault().lookupAll(ScriptEngineFactory.class);
+        assert engine != null : "#163878: " + 
scriptEngineManager.getEngineFactories() + " lacks freemarker using "
+                + l + " though lookup has "
+                + Lookup.getDefault().lookupAll(ScriptEngineFactory.class);
         Map<String,Object> bindings = 
engine.getContext().getBindings(ScriptContext.ENGINE_SCOPE);
         String basename = target.getName();
         for (CreateFromTemplateAttributesProvider provider : 
Lookup.getDefault().lookupAll(CreateFromTemplateAttributesProvider.class)) {
@@ -1352,5 +1425,4 @@
             w.close();
         }
     }
-        
 }
diff --git 
a/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/CreatedModifiedFilesProvider.java
 
b/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/CreatedModifiedFilesProvider.java
--- 
a/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/CreatedModifiedFilesProvider.java
+++ 
b/apisupport.wizards/src/org/netbeans/modules/apisupport/project/ui/wizard/librarydescriptor/CreatedModifiedFilesProvider.java
@@ -41,7 +41,6 @@
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  */
-
 package org.netbeans.modules.apisupport.project.ui.wizard.librarydescriptor;
 
 import java.io.File;
@@ -64,6 +63,7 @@
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.filesystems.URLMapper;
+/*import org.openide.util.Exceptions;*/
 
 /**
  *
@@ -71,12 +71,11 @@
  */
 final class CreatedModifiedFilesProvider  {
 
-    private CreatedModifiedFilesProvider() {}
-
+    private CreatedModifiedFilesProvider() {
+    }
     private static final String VOLUME_CLASS = "classpath";//NOI18N
     private static final String VOLUME_SRC = "src";//NOI18N
     private static final String VOLUME_JAVADOC = "javadoc";//NOI18N
-    
     private static final String LIBRARY_LAYER_ENTRY = 
"org-netbeans-api-project-libraries/Libraries";//NOI18N
     
     static CreatedModifiedFiles 
createInstance(NewLibraryDescriptor.DataModel data)  {
@@ -96,10 +95,10 @@
                 fileSupport.createLayerEntry(layerEntry, template, tokens, 
null, null));
         
         fileSupport.add(
-                fileSupport.bundleKeyDefaultBundle(data.getLibraryName(), 
data.getLibraryDisplayName()));
+                fileSupport.bundleKeyFromPackagePath(tokens.get("BUNDLE"),
+                data.getLibraryName(), data.getLibraryDisplayName()));
     }
     
-    
     private static String getPackagePlusBundle(Project project) {
         NbModuleProvider mod = 
project.getLookup().lookup(NbModuleProvider.class);
         if (mod != null) {
@@ -107,10 +106,20 @@
             if (mf != null) {
                 File mff = FileUtil.toFile(mf);
                 if (mff != null) {
-                    String bundle = ManifestManager.getInstance(mff, 
false).getLocalizingBundle().replace('/', '.');
+                    String bundle = ManifestManager.getInstance(mff, 
false).getLocalizingBundle();
+                    if (bundle != null) {
+                        bundle = bundle.replace('/', '.');
                     if (bundle.endsWith(".properties")) { // NOI18N
                         return bundle.substring(0, bundle.length() - 11);
                     }
+                    } else {
+                        String newBundleFilePath = 
ManifestManager.getInstance(mff, false).getCodeNameBase()
+                                + "/Bundle.properties";
+
+                        newBundleFilePath = newBundleFilePath.replace('/', 
'.');
+                        return newBundleFilePath.substring(0, 
newBundleFilePath.length() - 11);
+
+                    }
                 }
             }
         }
@@ -144,7 +153,8 @@
         final NbModuleProvider nbmp = data.getModuleInfo();
         fileSupport.add(new 
CreatedModifiedFiles.AbstractOperation(data.getProject()) {
             // XXX abstract this into a standard operation; should also add 
pom.xml as a modified file when a Maven project
-            public @Override void run() throws IOException {
+            public @Override
+            void run() throws IOException {
                 nbmp.getReleaseDirectory();
             }
         });
@@ -163,7 +173,10 @@
         return sb.toString();
     }
     
-    /** returns archive name or temporarily null cause there is no zip 
support for file protocol  */
+    /**
+     * returns archive name or temporarily null cause there is no zip support
+     * for file protocol
+     */
     private static String addArchiveToCopy(CreatedModifiedFiles 
fileSupport,NewLibraryDescriptor.DataModel data, URL originalURL, String 
pathPrefix) {
         String retval = null;
         
@@ -192,8 +205,10 @@
     }
     
     private static class ZipAndCopyOperation extends 
CreatedModifiedFiles.AbstractOperation {
+
         private FileObject folderToZip;
         private String relativePath;
+
         ZipAndCopyOperation(Project prj, FileObject folderToZip, String 
relativePath) {
             super(prj);
             this.folderToZip = folderToZip;
@@ -201,7 +216,8 @@
             addCreatedOrModifiedPath(relativePath, false);
         }
         
-        public @Override void run() throws IOException {
+        public @Override
+        void run() throws IOException {
             Collection<? extends FileObject> files = 
Collections.list(folderToZip.getChildren(true));
             if (files.isEmpty()) {
                 return;

[hg] main-silver: #205007: In NB module project at the end of wi...

Martin Kozeny 01/07/2013

<Possible follow-up(s)>

[hg] main-silver: #205007: In NB module project at the end of wi...

Martin Kozeny 01/07/2013

Project Features

About this Project

APIsupport was started in November 2009, is owned by Antonin Nebuzelsky, and has 43 members.
By use of this website, you agree to the NetBeans Policies and Terms of Use (revision 20131025.e7cbc9d). © 2013, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo
 
 
Close
loading
Please Confirm
Close