diff -r be8fbcfed1c8 projectuiapi/apichanges.xml
--- a/projectuiapi/apichanges.xml Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/apichanges.xml Tue Mar 25 13:57:06 2008 +0100
@@ -104,6 +104,19 @@ is the proper place.
+
+
+
+ Adding template attribute project.encoding
+
+
+
+
+
+ Added the template attribute project.license
for templates using scripting language.
+
+
+
diff -r be8fbcfed1c8 projectuiapi/arch.xml
--- a/projectuiapi/arch.xml Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/arch.xml Tue Mar 25 13:57:06 2008 +0100
@@ -687,8 +687,10 @@ Nothing.
attributes from
org.openide.loaders.CreateFromTemplateAttributesProvider
s
registered in project lookups.
- It provides
- project.license attribute for file templates using scripting support.
+ It provides the
+ project.license and
+ project.encoding
+ attributes for file templates using scripting support.
@@ -697,6 +699,12 @@ Nothing.
templates.
It is used to import license templates.
The default
is used if the attribute was not found in any
+ project lookup.
+
+
+ project.encoding
attribute contains the project encoding as String
for newly created
+ templates.
+ The encoding of the parent folder of the new file is used if the attribute was not found in any
project lookup.
diff -r be8fbcfed1c8 projectuiapi/nbproject/project.properties
--- a/projectuiapi/nbproject/project.properties Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/nbproject/project.properties Tue Mar 25 13:57:06 2008 +0100
@@ -39,7 +39,7 @@
javac.compilerargs=-Xlint -Xlint:-serial
javac.source=1.5
-spec.version.base=1.28.0
+spec.version.base=1.29.0
is.autoload=true
javadoc.arch=${basedir}/arch.xml
javadoc.apichanges=${basedir}/apichanges.xml
diff -r be8fbcfed1c8 projectuiapi/nbproject/project.xml
--- a/projectuiapi/nbproject/project.xml Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/nbproject/project.xml Tue Mar 25 13:57:06 2008 +0100
@@ -154,6 +154,7 @@ made subject to such option by the copyr
org.openide.util
+
diff -r be8fbcfed1c8 projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java
--- a/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProvider.java Tue Mar 25 13:57:06 2008 +0100
@@ -41,11 +41,14 @@
package org.netbeans.modules.project.uiapi;
+import java.nio.charset.Charset;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
+import org.netbeans.api.queries.FileEncodingQuery;
+import org.openide.filesystems.FileObject;
import org.openide.loaders.CreateFromTemplateAttributesProvider;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObject;
@@ -60,7 +63,8 @@ public final class ProjectTemplateAttrib
private static final String ATTR_PROJECT = "project"; // NOI18N
private static final String ATTR_LICENSE = "license"; // NOI18N
-
+ private static final String ATTR_ENCODING = "encoding"; // NOI18N
+
public Map attributesFor(
DataObject template, DataFolder target, String name) {
@@ -78,18 +82,18 @@ public final class ProjectTemplateAttrib
}
}
- return checkProjectLicense(all);
+ return checkProjectAttrs(all, target.getPrimaryFile());
}
- static Map checkProjectLicense(Map m) {
+ static Map checkProjectAttrs(Map m, FileObject parent) {
Object prjAttrObj = m != null? m.get(ATTR_PROJECT): null;
if (prjAttrObj instanceof Map) {
@SuppressWarnings("unchecked")
Map prjAttrs = (Map) prjAttrObj;
- if (prjAttrs.get(ATTR_LICENSE) == null) {
+ if (prjAttrs.get(ATTR_LICENSE) == null || prjAttrs.get(ATTR_ENCODING) == null) {
Map newPrjAttrs = new HashMap(prjAttrs);
m.put(ATTR_PROJECT, newPrjAttrs);
- newPrjAttrs.put(ATTR_LICENSE, "default"); // NOI18N
+ ensureProjectAttrs(newPrjAttrs, parent);
}
return m;
}
@@ -97,11 +101,26 @@ public final class ProjectTemplateAttrib
// What can we do?
return m;
}
- Map licenseMap = Collections.singletonMap(ATTR_LICENSE, "default"); // NOI18N
+ Map projectMap = new HashMap();
+ ensureProjectAttrs(projectMap, parent);
if (m != null) {
- m.put(ATTR_PROJECT, licenseMap); // NOI18N
+ m.put(ATTR_PROJECT, projectMap); // NOI18N
return m;
}
- return Collections.singletonMap(ATTR_PROJECT, licenseMap);
+ return Collections.singletonMap(ATTR_PROJECT, projectMap);
+ }
+
+ private static void ensureProjectAttrs(Map map, FileObject parent) {
+ if (map.get(ATTR_LICENSE) == null) {
+ map.put(ATTR_LICENSE, "default"); // NOI18N
+ }
+ if (map.get(ATTR_ENCODING) == null) {
+ Charset charset = FileEncodingQuery.getEncoding(parent);
+ String encoding = charset != null ? charset.name() : "UTF-8"; // NOI18N
+ map.put(ATTR_ENCODING, encoding);
+ }
}
}
diff -r be8fbcfed1c8 projectuiapi/test/unit/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProviderTest.java
--- a/projectuiapi/test/unit/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProviderTest.java Tue Mar 25 11:36:37 2008 +0100
+++ b/projectuiapi/test/unit/src/org/netbeans/modules/project/uiapi/ProjectTemplateAttributesProviderTest.java Tue Mar 25 13:57:06 2008 +0100
@@ -39,46 +39,96 @@
package org.netbeans.modules.project.uiapi;
+import java.nio.charset.Charset;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import junit.framework.TestCase;
+import org.netbeans.api.project.TestUtil;
+import org.netbeans.api.queries.FileEncodingQuery;
+import org.netbeans.junit.NbTestCase;
+import org.netbeans.spi.queries.FileEncodingQueryImplementation;
+import org.openide.filesystems.FileObject;
+import org.openide.util.test.MockLookup;
/**
*
* @author Andrei Badea
*/
-public class ProjectTemplateAttributesProviderTest extends TestCase {
+public class ProjectTemplateAttributesProviderTest extends NbTestCase {
+
+ private FileObject scratch;
+ private FileObject folder;
public ProjectTemplateAttributesProviderTest(String testName) {
super(testName);
}
- public void testCheckProjectLicense() {
- Map checked = ProjectTemplateAttributesProvider.checkProjectLicense(null);
- assertLicense("default", checked);
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ scratch = TestUtil.makeScratchDir(this);
+ folder = scratch.createFolder("folder");
+ MockLookup.setInstances(new FEQImpl());
+ assertEquals(FEQImpl.ENCODING, FileEncodingQuery.getEncoding(folder).name());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ MockLookup.setInstances();
+ super.tearDown();
+ }
+
+ public void testcheckProjectAttrs() throws Exception {
+ Map checked = ProjectTemplateAttributesProvider.checkProjectAttrs(null, folder);
+ assertAttribute("default", checked, "license");
+ assertAttribute(FEQImpl.ENCODING, checked, "encoding");
Map map = new HashMap();
map.put("foo", "bar");
- checked = ProjectTemplateAttributesProvider.checkProjectLicense(map);
- assertLicense("default", checked);
+ checked = ProjectTemplateAttributesProvider.checkProjectAttrs(map, folder);
+ assertAttribute("default", checked, "license");
+ assertAttribute(FEQImpl.ENCODING, checked, "encoding");
assertEquals("bar", checked.get("foo"));
map.put("project", Collections.emptyMap());
- checked = ProjectTemplateAttributesProvider.checkProjectLicense(map);
- assertLicense("default", checked);
+ checked = ProjectTemplateAttributesProvider.checkProjectAttrs(map, folder);
+ assertAttribute("default", checked, "license");
+ assertAttribute(FEQImpl.ENCODING, checked, "encoding");
assertEquals("bar", checked.get("foo"));
map.put("project", Collections.singletonMap("license", "gpl"));
- checked = ProjectTemplateAttributesProvider.checkProjectLicense(map);
- assertLicense("gpl", checked);
+ checked = ProjectTemplateAttributesProvider.checkProjectAttrs(map, folder);
+ assertAttribute("gpl", checked, "license");
+ assertAttribute(FEQImpl.ENCODING, checked, "encoding");
+ assertEquals("bar", checked.get("foo"));
+
+ Map projectMap = new HashMap();
+ projectMap.put("license", "gpl");
+ projectMap.put("encoding", "UTF-8");
+ map.put("project", projectMap);
+ checked = ProjectTemplateAttributesProvider.checkProjectAttrs(map, folder);
+ assertAttribute("gpl", checked, "license");
+ assertAttribute("UTF-8", checked, "encoding");
assertEquals("bar", checked.get("foo"));
}
- private static void assertLicense(String license, Map map) {
+ private static void assertAttribute(String expected, Map map, String attribute) {
@SuppressWarnings("unchecked")
Map attrs = (Map) map.get("project");
- assertEquals(license, attrs.get("license"));
+ assertEquals(expected, attrs.get(attribute));
+ }
+
+ private final class FEQImpl extends FileEncodingQueryImplementation {
+
+ public static final String ENCODING = "ISO-8859-1";
+
+ @Override
+ public Charset getEncoding(FileObject file) {
+ if (file == folder) {
+ return Charset.forName(ENCODING);
+ }
+ return null;
+ }
}
}