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.CreateFromTemplateAttributesProviders 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; + } } }