Added ability to set copyright holder in license; minor tweaks to Nils' code
authorTim Boudreau <tboudreau@netbeans.org>
Fri, 14 Sep 2012 01:53:25 -0400
changeset 1788059cd23a98feb
parent 17879 aabfce61b717
child 17881 c59b3792e83d
child 17961 e4056f3326c8
Added ability to set copyright holder in license; minor tweaks to Nils' code
licensechanger/manifest.mf
licensechanger/src/org/netbeans/modules/licensechanger/api/FileHandler.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandler.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/Bundle.properties
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.form
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesWizardPanel.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewPanel.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewWizardPanel.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/LicenseChangerRunnable.java
licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/WizardProperties.java
licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/JavaFileHandlerTest.java
licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/PropertiesFileHandlerTest.java
licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandlerTest.java
     1.1 --- a/licensechanger/manifest.mf	Fri Sep 14 00:27:52 2012 -0400
     1.2 +++ b/licensechanger/manifest.mf	Fri Sep 14 01:53:25 2012 -0400
     1.3 @@ -1,6 +1,5 @@
     1.4  Manifest-Version: 1.0
     1.5 -OpenIDE-Module: org.netbeans.modules.licensechanger/1
     1.6 -OpenIDE-Module-Layer: org/netbeans/modules/licensechanger/layer.xml
     1.7 +OpenIDE-Module: org.netbeans.modules.licensechanger/2
     1.8  OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/licensechanger/Bundle.properties
     1.9  OpenIDE-Module-Requires: 
    1.10    javax.script.ScriptEngine.FreeMarker,
     2.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/api/FileHandler.java	Fri Sep 14 00:27:52 2012 -0400
     2.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/api/FileHandler.java	Fri Sep 14 01:53:25 2012 -0400
     2.3 @@ -43,6 +43,7 @@
     2.4  import java.util.ArrayList;
     2.5  import java.util.Date;
     2.6  import java.util.List;
     2.7 +import java.util.Map;
     2.8  import java.util.Properties;
     2.9  import java.util.regex.Matcher;
    2.10  import java.util.regex.Pattern;
    2.11 @@ -51,6 +52,7 @@
    2.12  import javax.script.ScriptEngineManager;
    2.13  import javax.script.ScriptException;
    2.14  import org.netbeans.modules.licensechanger.spi.wizard.utils.Offsets;
    2.15 +import org.netbeans.modules.licensechanger.spi.wizard.utils.WizardProperties;
    2.16  import org.openide.filesystems.FileObject;
    2.17  import org.openide.filesystems.FileUtil;
    2.18  import org.openide.util.Exceptions;
    2.19 @@ -91,7 +93,7 @@
    2.20       * @return the resolved licenseText
    2.21       * @throws RuntimeException
    2.22       */
    2.23 -    public String resolveLicenseTemplate(String licenseText) throws RuntimeException {
    2.24 +    public String resolveLicenseTemplate(String licenseText, Map<String, Object> additionalBindings) throws RuntimeException {
    2.25          if (licenseText.contains("${licenseFirst}") && licenseText.contains("${licensePrefix}") && licenseText.contains("${licenseLast}")) {
    2.26              System.out.println("License is a freemarker template!");
    2.27              //freemarker template
    2.28 @@ -103,27 +105,36 @@
    2.29                  Properties props = new Properties();
    2.30                  try {
    2.31                      props.load(licenseTemplates.getInputStream());
    2.32 -                    for (String key : props.stringPropertyNames()) {
    2.33 -                        bindings.put(key, props.getProperty(key));
    2.34 -                    }
    2.35                  } catch (IOException ex) {
    2.36                      Exceptions.printStackTrace(ex);
    2.37                      throw new RuntimeException(ex);
    2.38                  }
    2.39 +                for (String key : props.stringPropertyNames()) {
    2.40 +                    bindings.put(key, props.getProperty(key));
    2.41 +                }
    2.42 +                String copyrightHolder = props.getProperty(WizardProperties.KEY_COPYRIGHT_HOLDER);
    2.43 +                if (copyrightHolder != null && !copyrightHolder.trim().isEmpty()) {
    2.44 +                    bindings.put("user", copyrightHolder);
    2.45 +                }
    2.46                  bindings.put("licenseFirst", licenseFirst());
    2.47                  bindings.put("licensePrefix", licensePrefix());
    2.48                  bindings.put("licenseLast", licenseLast());
    2.49                  bindings.put("date", new Date());
    2.50 +                for (Map.Entry<String,Object> e : additionalBindings.entrySet()) {
    2.51 +                    bindings.put (e.getKey(), e.getValue());
    2.52 +                }
    2.53                  if (props.containsKey("project.organization")) {
    2.54                      Project project = new Project(props.getProperty("project.organization"));
    2.55                      System.out.println("Using project.organization: " + props.getProperty("project.organization"));
    2.56                      bindings.put("project", project);
    2.57                      bindings.put("user", null);
    2.58                  } else {
    2.59 -                    String user = props.getProperty("user", System.getProperty("user.name"));
    2.60 +                    Object user = additionalBindings.containsKey(WizardProperties.KEY_COPYRIGHT_HOLDER) ? additionalBindings.get(WizardProperties.KEY_COPYRIGHT_HOLDER) : props.getProperty("user", System.getProperty("user.name"));
    2.61                      System.out.println("Using user: " + user);
    2.62                      bindings.put("project", new Project(null));
    2.63 -                    bindings.put("user", user);
    2.64 +                    if (!bindings.containsKey("user")) {
    2.65 +                        bindings.put("user", user);
    2.66 +                    }
    2.67                  }
    2.68                  StringWriter writer = new StringWriter();
    2.69                  try {
    2.70 @@ -148,11 +159,11 @@
    2.71          }
    2.72      }
    2.73  
    2.74 -    public String transform(String origText, String licenseText) {
    2.75 +    public String transform(String origText, String licenseText, Map<String, Object> bindings) {
    2.76          Offsets offsets = getReplaceOffsets(origText);
    2.77          System.err.println("Will delete from " + offsets.getStart() + " to " + offsets.getEnd());
    2.78          StringBuilder after = new StringBuilder(origText);
    2.79 -        String escaped = resolveLicenseTemplate(licenseText);
    2.80 +        String escaped = resolveLicenseTemplate(licenseText, bindings);
    2.81          after.delete(offsets.getStart(), offsets.getEnd());
    2.82          after.insert(offsets.getStart(), escaped);
    2.83          return after.toString();
     3.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandler.java	Fri Sep 14 00:27:52 2012 -0400
     3.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandler.java	Fri Sep 14 01:53:25 2012 -0400
     3.3 @@ -39,11 +39,10 @@
     3.4  
     3.5  package org.netbeans.modules.licensechanger.spi.handlers;
     3.6  
     3.7 -import java.awt.Component;
     3.8  import java.io.CharConversionException;
     3.9 +import java.util.Map;
    3.10  import java.util.regex.Matcher;
    3.11  import java.util.regex.Pattern;
    3.12 -import org.netbeans.modules.licensechanger.api.Customizable;
    3.13  import org.netbeans.modules.licensechanger.api.FileHandler;
    3.14  import org.netbeans.modules.licensechanger.spi.wizard.utils.Offsets;
    3.15  import org.openide.filesystems.FileObject;
    3.16 @@ -156,7 +155,7 @@
    3.17      }
    3.18  
    3.19      @Override
    3.20 -    public String transform(String origText, String licenseText) {
    3.21 +    public String transform(String origText, String licenseText, Map<String,Object> bindings) {
    3.22          String[] lines = splitIntoLines(origText);
    3.23          XmlDeclarationLocator v = new XmlDeclarationLocator();
    3.24          for (int i=0; i < lines.length; i++) {
    3.25 @@ -170,7 +169,7 @@
    3.26              origText = sb.toString();
    3.27          }
    3.28  //        String license = escape (licenseText);
    3.29 -        String license = resolveLicenseTemplate(licenseText);
    3.30 +        String license = resolveLicenseTemplate(licenseText, bindings);
    3.31          license = "\n" + license;
    3.32          StringBuilder sb = new StringBuilder (origText);
    3.33          Offsets o = getReplaceOffsets(sb);
     4.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/Bundle.properties	Fri Sep 14 00:27:52 2012 -0400
     4.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/Bundle.properties	Fri Sep 14 01:53:25 2012 -0400
     4.3 @@ -28,3 +28,5 @@
     4.4  LineEndingsPanel.forceCrlf.text_1=Force CRLF
     4.5  LicenseChooserPanel.updateDefaultProjectLicense.text=Set as default project license
     4.6  PreviewPanel.fileList.border.title=Select File for Preview
     4.7 +ChooseFileTypesPanel.copyrightHolderLabel.text=Copyright Holder
     4.8 +ChooseFileTypesPanel.licensePropertiesPanel.border.title=License Properties
     5.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.form	Fri Sep 14 00:27:52 2012 -0400
     5.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.form	Fri Sep 14 01:53:25 2012 -0400
     5.3 @@ -24,7 +24,10 @@
     5.4                    <Group type="102" alignment="1" attributes="0">
     5.5                        <Component id="customizerPanel" pref="559" max="32767" attributes="0"/>
     5.6                        <EmptySpace max="-2" attributes="0"/>
     5.7 -                      <Component id="lineEndingsPanel1" min="-2" pref="239" max="-2" attributes="0"/>
     5.8 +                      <Group type="103" groupAlignment="0" max="-2" attributes="0">
     5.9 +                          <Component id="lineEndingsPanel1" pref="239" max="32767" attributes="0"/>
    5.10 +                          <Component id="licensePropertiesPanel" max="32767" attributes="0"/>
    5.11 +                      </Group>
    5.12                    </Group>
    5.13                </Group>
    5.14                <EmptySpace max="-2" attributes="0"/>
    5.15 @@ -43,7 +46,8 @@
    5.16                    <Component id="customizerPanel" pref="361" max="32767" attributes="0"/>
    5.17                    <Group type="102" attributes="0">
    5.18                        <Component id="lineEndingsPanel1" min="-2" max="-2" attributes="0"/>
    5.19 -                      <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
    5.20 +                      <EmptySpace type="separate" max="-2" attributes="0"/>
    5.21 +                      <Component id="licensePropertiesPanel" max="32767" attributes="0"/>
    5.22                    </Group>
    5.23                </Group>
    5.24                <EmptySpace max="-2" attributes="0"/>
    5.25 @@ -131,5 +135,67 @@
    5.26      </Container>
    5.27      <Component class="org.netbeans.modules.licensechanger.spi.wizard.LineEndingsPanel" name="lineEndingsPanel1">
    5.28      </Component>
    5.29 +    <Container class="javax.swing.JPanel" name="licensePropertiesPanel">
    5.30 +      <Properties>
    5.31 +        <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
    5.32 +          <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
    5.33 +            <TitledBorder title="License Properties">
    5.34 +              <ResourceString PropertyName="titleX" bundle="org/netbeans/modules/licensechanger/spi/wizard/Bundle.properties" key="ChooseFileTypesPanel.licensePropertiesPanel.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
    5.35 +            </TitledBorder>
    5.36 +          </Border>
    5.37 +        </Property>
    5.38 +      </Properties>
    5.39 +
    5.40 +      <Layout>
    5.41 +        <DimensionLayout dim="0">
    5.42 +          <Group type="103" groupAlignment="0" attributes="0">
    5.43 +              <Group type="102" attributes="0">
    5.44 +                  <EmptySpace max="-2" attributes="0"/>
    5.45 +                  <Group type="103" groupAlignment="0" attributes="0">
    5.46 +                      <Group type="102" attributes="0">
    5.47 +                          <Component id="copyrightHolderLabel" min="-2" max="-2" attributes="0"/>
    5.48 +                          <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
    5.49 +                      </Group>
    5.50 +                      <Component id="copyrightHolderField" max="32767" attributes="0"/>
    5.51 +                  </Group>
    5.52 +                  <EmptySpace max="-2" attributes="0"/>
    5.53 +              </Group>
    5.54 +          </Group>
    5.55 +        </DimensionLayout>
    5.56 +        <DimensionLayout dim="1">
    5.57 +          <Group type="103" groupAlignment="0" attributes="0">
    5.58 +              <Group type="102" alignment="0" attributes="0">
    5.59 +                  <EmptySpace max="-2" attributes="0"/>
    5.60 +                  <Component id="copyrightHolderLabel" min="-2" max="-2" attributes="0"/>
    5.61 +                  <EmptySpace max="-2" attributes="0"/>
    5.62 +                  <Component id="copyrightHolderField" min="-2" max="-2" attributes="0"/>
    5.63 +                  <EmptySpace max="32767" attributes="0"/>
    5.64 +              </Group>
    5.65 +          </Group>
    5.66 +        </DimensionLayout>
    5.67 +      </Layout>
    5.68 +      <SubComponents>
    5.69 +        <Component class="javax.swing.JLabel" name="copyrightHolderLabel">
    5.70 +          <Properties>
    5.71 +            <Property name="labelFor" type="java.awt.Component" editor="org.netbeans.modules.form.ComponentChooserEditor">
    5.72 +              <ComponentRef name="copyrightHolderField"/>
    5.73 +            </Property>
    5.74 +            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
    5.75 +              <ResourceString bundle="org/netbeans/modules/licensechanger/spi/wizard/Bundle.properties" key="ChooseFileTypesPanel.copyrightHolderLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, &quot;{key}&quot;)"/>
    5.76 +            </Property>
    5.77 +          </Properties>
    5.78 +        </Component>
    5.79 +        <Component class="javax.swing.JTextField" name="copyrightHolderField">
    5.80 +          <Properties>
    5.81 +            <Property name="text" type="java.lang.String" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
    5.82 +              <Connection code="System.getProperty(&quot;user.name&quot;) == null ? &quot;&quot; : System.getProperty(&quot;user.name&quot;)" type="code"/>
    5.83 +            </Property>
    5.84 +          </Properties>
    5.85 +          <Events>
    5.86 +            <EventHandler event="focusGained" listener="java.awt.event.FocusListener" parameters="java.awt.event.FocusEvent" handler="copyrightHolderFieldFocusGained"/>
    5.87 +          </Events>
    5.88 +        </Component>
    5.89 +      </SubComponents>
    5.90 +    </Container>
    5.91    </SubComponents>
    5.92  </Form>
     6.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.java	Fri Sep 14 00:27:52 2012 -0400
     6.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesPanel.java	Fri Sep 14 01:53:25 2012 -0400
     6.3 @@ -63,6 +63,7 @@
     6.4  import org.openide.nodes.Children;
     6.5  import org.openide.nodes.Node;
     6.6  import org.openide.util.Lookup;
     6.7 +import org.openide.util.NbPreferences;
     6.8  import org.openide.util.lookup.Lookups;
     6.9  
    6.10  /**
    6.11 @@ -75,6 +76,12 @@
    6.12  
    6.13      public ChooseFileTypesPanel() {
    6.14          initComponents();
    6.15 +        String copyrightHolder = 
    6.16 +                NbPreferences.forModule(ChooseFileTypesWizardPanel.class)
    6.17 +                .get(WizardProperties.KEY_COPYRIGHT_HOLDER, null);
    6.18 +        if (copyrightHolder != null && !copyrightHolder.trim().isEmpty()) {
    6.19 +            copyrightHolderField.setText(copyrightHolder);
    6.20 +        }
    6.21          mgr.setRootContext(new AbstractNode (Children.create(new FileHandlerChildren(), false)));
    6.22          ((CheckboxListView) jScrollPane1).setNodeCheckObserver(this);
    6.23          ((CheckboxListView) jScrollPane1).setListEnabled(true);
    6.24 @@ -104,6 +111,9 @@
    6.25          customizerPanel = new javax.swing.JPanel();
    6.26          noCustomizerLabel = new javax.swing.JLabel();
    6.27          lineEndingsPanel1 = new org.netbeans.modules.licensechanger.spi.wizard.LineEndingsPanel();
    6.28 +        licensePropertiesPanel = new javax.swing.JPanel();
    6.29 +        copyrightHolderLabel = new javax.swing.JLabel();
    6.30 +        copyrightHolderField = new javax.swing.JTextField();
    6.31  
    6.32          jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | java.awt.Font.BOLD));
    6.33          jLabel1.setText(org.openide.util.NbBundle.getMessage(ChooseFileTypesPanel.class, "ChooseFileTypesPanel.jLabel1.text")); // NOI18N
    6.34 @@ -120,6 +130,41 @@
    6.35          customizerPanel.add(noCustomizerLabel, java.awt.BorderLayout.CENTER);
    6.36          noCustomizerLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ChooseFileTypesPanel.class, "ChooseFileTypesPanel.noCustomizerLabel.text")); // NOI18N
    6.37  
    6.38 +        licensePropertiesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ChooseFileTypesPanel.class, "ChooseFileTypesPanel.licensePropertiesPanel.border.title"))); // NOI18N
    6.39 +
    6.40 +        copyrightHolderLabel.setLabelFor(copyrightHolderField);
    6.41 +        copyrightHolderLabel.setText(org.openide.util.NbBundle.getMessage(ChooseFileTypesPanel.class, "ChooseFileTypesPanel.copyrightHolderLabel.text")); // NOI18N
    6.42 +
    6.43 +        copyrightHolderField.setText(System.getProperty("user.name") == null ? "" : System.getProperty("user.name"));
    6.44 +        copyrightHolderField.addFocusListener(new java.awt.event.FocusAdapter() {
    6.45 +            public void focusGained(java.awt.event.FocusEvent evt) {
    6.46 +                copyrightHolderFieldFocusGained(evt);
    6.47 +            }
    6.48 +        });
    6.49 +
    6.50 +        javax.swing.GroupLayout licensePropertiesPanelLayout = new javax.swing.GroupLayout(licensePropertiesPanel);
    6.51 +        licensePropertiesPanel.setLayout(licensePropertiesPanelLayout);
    6.52 +        licensePropertiesPanelLayout.setHorizontalGroup(
    6.53 +            licensePropertiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    6.54 +            .addGroup(licensePropertiesPanelLayout.createSequentialGroup()
    6.55 +                .addContainerGap()
    6.56 +                .addGroup(licensePropertiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    6.57 +                    .addGroup(licensePropertiesPanelLayout.createSequentialGroup()
    6.58 +                        .addComponent(copyrightHolderLabel)
    6.59 +                        .addGap(0, 0, Short.MAX_VALUE))
    6.60 +                    .addComponent(copyrightHolderField))
    6.61 +                .addContainerGap())
    6.62 +        );
    6.63 +        licensePropertiesPanelLayout.setVerticalGroup(
    6.64 +            licensePropertiesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    6.65 +            .addGroup(licensePropertiesPanelLayout.createSequentialGroup()
    6.66 +                .addContainerGap()
    6.67 +                .addComponent(copyrightHolderLabel)
    6.68 +                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    6.69 +                .addComponent(copyrightHolderField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    6.70 +                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    6.71 +        );
    6.72 +
    6.73          javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
    6.74          this.setLayout(layout);
    6.75          layout.setHorizontalGroup(
    6.76 @@ -132,7 +177,9 @@
    6.77                      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
    6.78                          .addComponent(customizerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 559, Short.MAX_VALUE)
    6.79                          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
    6.80 -                        .addComponent(lineEndingsPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 239, javax.swing.GroupLayout.PREFERRED_SIZE)))
    6.81 +                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
    6.82 +                            .addComponent(lineEndingsPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE)
    6.83 +                            .addComponent(licensePropertiesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
    6.84                  .addContainerGap())
    6.85          );
    6.86          layout.setVerticalGroup(
    6.87 @@ -147,7 +194,8 @@
    6.88                      .addComponent(customizerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 361, Short.MAX_VALUE)
    6.89                      .addGroup(layout.createSequentialGroup()
    6.90                          .addComponent(lineEndingsPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
    6.91 -                        .addGap(0, 0, Short.MAX_VALUE)))
    6.92 +                        .addGap(18, 18, 18)
    6.93 +                        .addComponent(licensePropertiesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
    6.94                  .addContainerGap())
    6.95          );
    6.96  
    6.97 @@ -155,11 +203,18 @@
    6.98          customizerPanel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(ChooseFileTypesPanel.class, "ChooseFileTypesPanel.customizerPanel.border.title")); // NOI18N
    6.99      }// </editor-fold>//GEN-END:initComponents
   6.100  
   6.101 +    private void copyrightHolderFieldFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_copyrightHolderFieldFocusGained
   6.102 +        copyrightHolderField.selectAll();
   6.103 +    }//GEN-LAST:event_copyrightHolderFieldFocusGained
   6.104 +
   6.105  
   6.106      // Variables declaration - do not modify//GEN-BEGIN:variables
   6.107 +    private javax.swing.JTextField copyrightHolderField;
   6.108 +    private javax.swing.JLabel copyrightHolderLabel;
   6.109      private javax.swing.JPanel customizerPanel;
   6.110      private javax.swing.JLabel jLabel1;
   6.111      private javax.swing.JScrollPane jScrollPane1;
   6.112 +    private javax.swing.JPanel licensePropertiesPanel;
   6.113      private org.netbeans.modules.licensechanger.spi.wizard.LineEndingsPanel lineEndingsPanel1;
   6.114      private javax.swing.JLabel noCustomizerLabel;
   6.115      // End of variables declaration//GEN-END:variables
   6.116 @@ -197,6 +252,10 @@
   6.117      public void onNodeUnchecked(Node node) {
   6.118          updateMap();
   6.119      }
   6.120 +    
   6.121 +    public String getCopyrightHolder() {
   6.122 +        return copyrightHolderField.getText();
   6.123 +    }
   6.124  
   6.125      private static final class FileHandlerChildren extends ChildFactory<FileHandler> {
   6.126          @Override
     7.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesWizardPanel.java	Fri Sep 14 00:27:52 2012 -0400
     7.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/ChooseFileTypesWizardPanel.java	Fri Sep 14 01:53:25 2012 -0400
     7.3 @@ -47,6 +47,7 @@
     7.4  import org.openide.WizardValidationException;
     7.5  import org.openide.util.ChangeSupport;
     7.6  import org.openide.util.HelpCtx;
     7.7 +import org.openide.util.NbPreferences;
     7.8  
     7.9  /**
    7.10   * 
    7.11 @@ -112,6 +113,11 @@
    7.12      @Override
    7.13      public void storeSettings(WizardDescriptor wiz) {
    7.14          wiz.putProperty(WizardProperties.KEY_FILE_HANDLERS, getComponent().getFileHandlers());
    7.15 +        String copyrightHolder = getComponent().getCopyrightHolder();
    7.16 +        if (copyrightHolder != null && !copyrightHolder.isEmpty()) {
    7.17 +            wiz.putProperty(WizardProperties.KEY_COPYRIGHT_HOLDER, copyrightHolder);
    7.18 +            NbPreferences.forModule(ChooseFileTypesWizardPanel.class).put(WizardProperties.KEY_COPYRIGHT_HOLDER, copyrightHolder);
    7.19 +        }
    7.20      }
    7.21  
    7.22      @Override
     8.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewPanel.java	Fri Sep 14 00:27:52 2012 -0400
     8.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewPanel.java	Fri Sep 14 01:53:25 2012 -0400
     8.3 @@ -46,7 +46,7 @@
     8.4  import java.io.IOException;
     8.5  import java.io.PrintWriter;
     8.6  import java.io.StringReader;
     8.7 -import java.util.HashMap;
     8.8 +import java.util.Collections;
     8.9  import java.util.HashSet;
    8.10  import java.util.Map;
    8.11  import java.util.Set;
    8.12 @@ -81,6 +81,7 @@
    8.13      private ItemLoader loader;
    8.14      private String licenseText;
    8.15      private Diff diff;
    8.16 +    private Map<String, Object> properties;
    8.17  
    8.18      public PreviewPanel() {
    8.19          diff = Diff.getDefault();
    8.20 @@ -124,6 +125,10 @@
    8.21          this.licenseText = licenseText;
    8.22          firePropertyChange(WizardProperties.KEY_LICENSE_TEXT, null, this.licenseText);
    8.23      }
    8.24 +    
    8.25 +    void setProperties(Map<String, Object> properties) {
    8.26 +        this.properties = properties;
    8.27 +    }
    8.28  
    8.29      /** This method is called from within the constructor to
    8.30       * initialize the form.
    8.31 @@ -202,6 +207,7 @@
    8.32                  if (item != null) {
    8.33                      setFileItem(item);
    8.34                      // XXX use FileUtil.getFileDisplayName rather than FileObject.getPath
    8.35 +                    
    8.36                      jLabel3.setText (item.getFile().getPath());
    8.37                  } else {
    8.38  //                    before.setText("");
    8.39 @@ -347,7 +353,9 @@
    8.40          }
    8.41  
    8.42          private String transform(String beforeText, FileHandler handler) {
    8.43 -            return handler.transform(beforeText, licenseText);
    8.44 +            return handler.transform(beforeText, licenseText, 
    8.45 +                    properties == null ? Collections.<String,Object>emptyMap() : 
    8.46 +                    properties);
    8.47          }
    8.48      }
    8.49  }
     9.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewWizardPanel.java	Fri Sep 14 00:27:52 2012 -0400
     9.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/PreviewWizardPanel.java	Fri Sep 14 01:53:25 2012 -0400
     9.3 @@ -122,6 +122,7 @@
     9.4          if(license!=null) {
     9.5              getComponent().setLicenseText(license);
     9.6          }
     9.7 +        getComponent().setProperties(wiz.getProperties());
     9.8          Set<FileHandler> fileHandler = (Set<FileHandler>)wiz.getProperty(WizardProperties.KEY_FILE_HANDLERS);
     9.9          Set<FileObject> folders = (Set<FileObject>)wiz.getProperty(WizardProperties.KEY_FOLDERS);
    9.10          if(fileHandler!=null && folders != null) {
    10.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/LicenseChangerRunnable.java	Fri Sep 14 00:27:52 2012 -0400
    10.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/LicenseChangerRunnable.java	Fri Sep 14 01:53:25 2012 -0400
    10.3 @@ -40,12 +40,10 @@
    10.4  
    10.5  import java.io.*;
    10.6  import java.nio.charset.Charset;
    10.7 -import java.util.Properties;
    10.8  import java.util.Set;
    10.9  import org.netbeans.api.progress.ProgressHandle;
   10.10  import org.netbeans.api.progress.ProgressHandleFactory;
   10.11  import org.netbeans.api.project.*;
   10.12 -import org.netbeans.api.project.ui.OpenProjects;
   10.13  import org.netbeans.api.queries.FileEncodingQuery;
   10.14  import org.netbeans.modules.licensechanger.spi.wizard.LineEndingsPanel;
   10.15  import org.openide.WizardDescriptor;
   10.16 @@ -81,12 +79,11 @@
   10.17                  handle.progress(item.getFile().getNameExt(), ix);
   10.18                  try {
   10.19                      String content = FileLoader.loadFile(item.file);
   10.20 -                    String nue = item.handler.transform(content, licenseText);
   10.21 +                    String nue = item.handler.transform(content, licenseText, wizard.getProperties());
   10.22                      LineEndingPreference pref = LineEndingsPanel.getLineEndingPrefs();
   10.23                      nue = LineEndingPreference.convertLineEndings(pref, content, nue);
   10.24  
   10.25                      enc = FileEncodingQuery.getEncoding(item.file);
   10.26 -                    BufferedOutputStream out = new BufferedOutputStream(item.file.getOutputStream());
   10.27                      byte[] bytes;
   10.28                      try {
   10.29                          bytes = nue.getBytes(enc.name());
   10.30 @@ -95,6 +92,7 @@
   10.31                          bytes = nue.getBytes(FileEncodingQuery.getDefaultEncoding().name());
   10.32                      }
   10.33                      ByteArrayInputStream in = new ByteArrayInputStream(bytes);
   10.34 +                    BufferedOutputStream out = new BufferedOutputStream(item.file.getOutputStream());
   10.35                      try {
   10.36                          FileUtil.copy(in, out);
   10.37                      } finally {
   10.38 @@ -126,15 +124,20 @@
   10.39                                          try {
   10.40                                              InputStream istream = projectProps.getInputStream();
   10.41                                              EditableProperties props = new EditableProperties(true);
   10.42 -                                            props.load(istream);
   10.43 -                                            istream.close();
   10.44 +                                            try {
   10.45 +                                                props.load(istream);
   10.46 +                                            } finally {
   10.47 +                                                istream.close();
   10.48 +                                            }
   10.49                                              props.setProperty("project.license", licenseName);
   10.50                                              OutputStream ostream = projectProps.getOutputStream();
   10.51 -                                            props.store(ostream);
   10.52 -                                            ostream.close();
   10.53 +                                            try {
   10.54 +                                                props.store(ostream);
   10.55 +                                            } finally {
   10.56 +                                                ostream.close();
   10.57 +                                            }
   10.58                                          } catch (IOException ex) {
   10.59                                              Exceptions.printStackTrace(ex);
   10.60 -                                        } finally {
   10.61                                          }
   10.62                                      }
   10.63                                  });
    11.1 --- a/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/WizardProperties.java	Fri Sep 14 00:27:52 2012 -0400
    11.2 +++ b/licensechanger/src/org/netbeans/modules/licensechanger/spi/wizard/utils/WizardProperties.java	Fri Sep 14 01:53:25 2012 -0400
    11.3 @@ -44,7 +44,7 @@
    11.4   * 
    11.5   * @author Nils Hoffmann
    11.6   */
    11.7 -public class WizardProperties {
    11.8 +public final class WizardProperties {
    11.9  
   11.10      public static final String KEY_FILE_HANDLERS = "fileHandlers";
   11.11      public static final String KEY_ITEMS = "fileItems";
   11.12 @@ -57,4 +57,6 @@
   11.13      public static final String PROP_ENDING = "ending";
   11.14      public static final String KEY_ENDING = "line_terminator";
   11.15      public static final String KEY_PROJECT = "project";
   11.16 +    public static final String KEY_COPYRIGHT_HOLDER = "project.organization";
   11.17 +    private WizardProperties(){}
   11.18  }
    12.1 --- a/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/JavaFileHandlerTest.java	Fri Sep 14 00:27:52 2012 -0400
    12.2 +++ b/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/JavaFileHandlerTest.java	Fri Sep 14 01:53:25 2012 -0400
    12.3 @@ -41,6 +41,8 @@
    12.4  
    12.5  import java.io.ByteArrayOutputStream;
    12.6  import java.io.InputStream;
    12.7 +import java.util.Collections;
    12.8 +import java.util.Map;
    12.9  import static org.junit.Assert.*;
   12.10  import org.junit.Test;
   12.11  import org.netbeans.modules.licensechanger.api.FileHandler;
   12.12 @@ -52,6 +54,8 @@
   12.13   * @author Tim Boudreau
   12.14   */
   12.15  public class JavaFileHandlerTest {
   12.16 +    
   12.17 +    private final Map<String,Object> props = Collections.emptyMap();
   12.18  
   12.19      @Test
   12.20      public void testStuff() throws Exception {
   12.21 @@ -68,7 +72,7 @@
   12.22          System.out.println("Test " + filename);
   12.23          JavaFileHandler instance = new JavaFileHandler();
   12.24          String original = readFile (filename);
   12.25 -        String processed = instance.transform(original, license);
   12.26 +        String processed = instance.transform(original, license, props);
   12.27          assertEqualsLineByLine (golden, processed, filename);
   12.28      }
   12.29  
    13.1 --- a/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/PropertiesFileHandlerTest.java	Fri Sep 14 00:27:52 2012 -0400
    13.2 +++ b/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/PropertiesFileHandlerTest.java	Fri Sep 14 01:53:25 2012 -0400
    13.3 @@ -39,6 +39,8 @@
    13.4  
    13.5  package org.netbeans.modules.licensechanger.spi.handlers;
    13.6  
    13.7 +import java.util.Collections;
    13.8 +import java.util.Map;
    13.9  import org.netbeans.modules.licensechanger.spi.handlers.PropertiesFileHandler;
   13.10  import org.junit.Test;
   13.11  import static org.junit.Assert.*;
   13.12 @@ -48,6 +50,7 @@
   13.13   * @author Tim Boudreau
   13.14   */
   13.15  public class PropertiesFileHandlerTest {
   13.16 +    private final Map<String,Object> props = Collections.emptyMap();
   13.17  
   13.18      @Test
   13.19      public void testStuff() throws Exception {
   13.20 @@ -64,7 +67,7 @@
   13.21          System.out.println("Test " + filename);
   13.22          PropertiesFileHandler instance = new PropertiesFileHandler();
   13.23          String original = JavaFileHandlerTest.readFile (filename);
   13.24 -        String processed = instance.transform(original, license);
   13.25 +        String processed = instance.transform(original, license, props);
   13.26  //        if (!original.equals(processed)) {
   13.27  //            System.out.println("************************************");
   13.28  //            System.out.println(processed);
    14.1 --- a/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandlerTest.java	Fri Sep 14 00:27:52 2012 -0400
    14.2 +++ b/licensechanger/test/unit/src/org/netbeans/modules/licensechanger/spi/handlers/XmlFileHandlerTest.java	Fri Sep 14 01:53:25 2012 -0400
    14.3 @@ -39,6 +39,8 @@
    14.4  
    14.5  package org.netbeans.modules.licensechanger.spi.handlers;
    14.6  
    14.7 +import java.util.Collections;
    14.8 +import java.util.Map;
    14.9  import org.netbeans.modules.licensechanger.spi.handlers.XmlFileHandler;
   14.10  import java.util.StringTokenizer;
   14.11  import java.util.regex.Matcher;
   14.12 @@ -51,6 +53,8 @@
   14.13   * @author Tim Boudreau
   14.14   */
   14.15  public class XmlFileHandlerTest {
   14.16 +    private final Map<String,Object> props = Collections.emptyMap();
   14.17 +    
   14.18      @Test
   14.19      public void testDeclarationFinder() throws Exception {
   14.20          String xml = getGolden();
   14.21 @@ -93,7 +97,7 @@
   14.22          System.out.println("Test " + filename);
   14.23          XmlFileHandler instance = new XmlFileHandler();
   14.24          String original = JavaFileHandlerTest.readFile (filename);
   14.25 -        String processed = instance.transform(original, license);
   14.26 +        String processed = instance.transform(original, license, props);
   14.27          assertEqualsLineByLine (golden, processed, filename);
   14.28      }
   14.29