This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 94676
Collapse All | Expand All

(-)openide/templates/nbproject/project.xml (+17 lines)
Lines 15-20 Link Here
15
                    </run-dependency>
15
                    </run-dependency>
16
                </dependency>
16
                </dependency>
17
                <dependency>
17
                <dependency>
18
                    <code-name-base>org.netbeans.modules.queries</code-name-base>
19
                    <build-prerequisite/>
20
                    <compile-dependency/>
21
                    <run-dependency>
22
                        <release-version>1</release-version>
23
                        <specification-version>1.10</specification-version>
24
                    </run-dependency>
25
                </dependency>
26
                <dependency>
18
                    <code-name-base>org.openide.dialogs</code-name-base>
27
                    <code-name-base>org.openide.dialogs</code-name-base>
19
                    <build-prerequisite/>
28
                    <build-prerequisite/>
20
                    <compile-dependency/>
29
                    <compile-dependency/>
Lines 68-73 Link Here
68
                    <name>unit</name>
77
                    <name>unit</name>
69
                    <test-dependency>
78
                    <test-dependency>
70
                        <code-name-base>org.netbeans.libs.freemarker</code-name-base>
79
                        <code-name-base>org.netbeans.libs.freemarker</code-name-base>
80
                        <compile-dependency/>
81
                    </test-dependency>
82
                    <test-dependency>
83
                        <code-name-base>org.openide.text</code-name-base>
84
                        <compile-dependency/>
85
                    </test-dependency>
86
                    <test-dependency>
87
                        <code-name-base>org.openide.windows</code-name-base>
71
                        <compile-dependency/>
88
                        <compile-dependency/>
72
                    </test-dependency>
89
                    </test-dependency>
73
                </test-type>
90
                </test-type>
(-)openide/templates/src/org/netbeans/modules/templates/ScriptingCreateFromTemplateHandler.java (-3 / +7 lines)
Lines 25-30 Link Here
25
import java.io.OutputStreamWriter;
25
import java.io.OutputStreamWriter;
26
import java.io.Reader;
26
import java.io.Reader;
27
import java.io.Writer;
27
import java.io.Writer;
28
import java.nio.charset.Charset;
28
import java.util.Map;
29
import java.util.Map;
29
import java.util.logging.Logger;
30
import java.util.logging.Logger;
30
import javax.script.Bindings;
31
import javax.script.Bindings;
Lines 33-38 Link Here
33
import javax.script.ScriptEngineManager;
34
import javax.script.ScriptEngineManager;
34
import javax.script.ScriptException;
35
import javax.script.ScriptException;
35
import javax.swing.text.PlainDocument;
36
import javax.swing.text.PlainDocument;
37
import org.netbeans.api.queries.FileEncodingQuery;
36
import org.openide.filesystems.FileObject;
38
import org.openide.filesystems.FileObject;
37
import org.openide.filesystems.FileUtil;
39
import org.openide.filesystems.FileUtil;
38
import org.openide.loaders.CreateFromTemplateHandler;
40
import org.openide.loaders.CreateFromTemplateHandler;
Lines 65-75 Link Here
65
        
67
        
66
        String nameUniq = FileUtil.findFreeFileName(f, name, template.getExt());
68
        String nameUniq = FileUtil.findFreeFileName(f, name, template.getExt());
67
        FileObject output = FileUtil.createData(f, nameUniq + '.' + template.getExt());
69
        FileObject output = FileUtil.createData(f, nameUniq + '.' + template.getExt());
68
70
        Charset targetEnc = FileEncodingQuery.getEncoding(output);
71
        Charset sourceEnc = FileEncodingQuery.getEncoding(template);
72
        
69
        Writer w = null;
73
        Writer w = null;
70
        Reader is = null;
74
        Reader is = null;
71
        try {
75
        try {
72
            w = new OutputStreamWriter(output.getOutputStream());
76
            w = new OutputStreamWriter(output.getOutputStream(), targetEnc);
73
            
77
            
74
            IndentEngine format = IndentEngine.find(template.getMIMEType());
78
            IndentEngine format = IndentEngine.find(template.getMIMEType());
75
            if (format != null) {
79
            if (format != null) {
Lines 83-89 Link Here
83
            //eng.getContext().setBindings(bind, ScriptContext.ENGINE_SCOPE);
87
            //eng.getContext().setBindings(bind, ScriptContext.ENGINE_SCOPE);
84
            eng.getContext().setAttribute(FileObject.class.getName(), template, ScriptContext.ENGINE_SCOPE);
88
            eng.getContext().setAttribute(FileObject.class.getName(), template, ScriptContext.ENGINE_SCOPE);
85
            eng.getContext().setAttribute(ScriptEngine.FILENAME, template.getNameExt(), ScriptContext.ENGINE_SCOPE);
89
            eng.getContext().setAttribute(ScriptEngine.FILENAME, template.getNameExt(), ScriptContext.ENGINE_SCOPE);
86
            is = new InputStreamReader(template.getInputStream());
90
            is = new InputStreamReader(template.getInputStream(), sourceEnc);
87
            eng.eval(is);
91
            eng.eval(is);
88
        }catch (ScriptException ex) {
92
        }catch (ScriptException ex) {
89
            IOException io = new IOException(ex.getMessage());
93
            IOException io = new IOException(ex.getMessage());
(-)openide/templates/test/unit/src/org/netbeans/modules/templates/SCFTHandlerTest.java (-1 / +78 lines)
Lines 21-39 Link Here
21
package org.netbeans.modules.templates;
21
package org.netbeans.modules.templates;
22
22
23
import java.awt.Dialog;
23
import java.awt.Dialog;
24
import java.io.BufferedReader;
24
import java.io.IOException;
25
import java.io.IOException;
26
import java.io.InputStreamReader;
25
import java.io.OutputStream;
27
import java.io.OutputStream;
28
import java.nio.CharBuffer;
29
import java.nio.charset.Charset;
26
import java.util.Collections;
30
import java.util.Collections;
27
import java.util.Enumeration;
31
import java.util.Enumeration;
28
import java.util.Map;
32
import java.util.Map;
29
import javax.swing.JDialog;
33
import javax.swing.JDialog;
30
import org.netbeans.junit.MockServices;
34
import org.netbeans.junit.MockServices;
31
import org.netbeans.junit.NbTestCase;
35
import org.netbeans.junit.NbTestCase;
36
import org.netbeans.spi.queries.FileEncodingQueryImplementation;
32
import org.openide.DialogDescriptor;
37
import org.openide.DialogDescriptor;
33
import org.openide.DialogDisplayer;
38
import org.openide.DialogDisplayer;
34
import org.openide.NotifyDescriptor;
39
import org.openide.NotifyDescriptor;
35
import org.openide.filesystems.FileObject;
40
import org.openide.filesystems.FileObject;
41
import org.openide.filesystems.FileStateInvalidException;
42
import org.openide.filesystems.FileSystem;
36
import org.openide.filesystems.FileUtil;
43
import org.openide.filesystems.FileUtil;
44
import org.openide.filesystems.Repository;
37
import org.openide.loaders.DataFolder;
45
import org.openide.loaders.DataFolder;
38
import org.openide.loaders.DataLoader;
46
import org.openide.loaders.DataLoader;
39
import org.openide.loaders.DataLoaderPool;
47
import org.openide.loaders.DataLoaderPool;
Lines 43-54 Link Here
43
import org.openide.loaders.MultiDataObject;
51
import org.openide.loaders.MultiDataObject;
44
import org.openide.loaders.MultiFileLoader;
52
import org.openide.loaders.MultiFileLoader;
45
import org.openide.util.Enumerations;
53
import org.openide.util.Enumerations;
54
import org.openide.util.Exceptions;
46
55
47
/**
56
/**
48
 *
57
 *
49
 * @author Jaroslav Tulach
58
 * @author Jaroslav Tulach
50
 */
59
 */
51
public class SCFTHandlerTest extends NbTestCase {
60
public class SCFTHandlerTest extends NbTestCase {
61
    static {
62
        // confuse the system a bit, if your system runs with UTF-8 default locale...
63
        //System.setProperty("file.encoding", "cp1252");
64
    }
52
    
65
    
53
    public SCFTHandlerTest(String testName) {
66
    public SCFTHandlerTest(String testName) {
54
        super(testName);
67
        super(testName);
Lines 59-65 Link Here
59
    }
72
    }
60
    
73
    
61
    protected void setUp() throws Exception {
74
    protected void setUp() throws Exception {
62
        MockServices.setServices(DD.class, Pool.class);
75
        MockServices.setServices(DD.class, Pool.class, FEQI.class);
63
    }
76
    }
64
77
65
    protected void tearDown() throws Exception {
78
    protected void tearDown() throws Exception {
Lines 161-166 Link Here
161
        assertEquals("Fully read", arr.length, len);
174
        assertEquals("Fully read", arr.length, len);
162
        return new String(arr);
175
        return new String(arr);
163
    }
176
    }
177
178
    private static String readChars(FileObject fo, Charset set) throws IOException {
179
        CharBuffer arr = CharBuffer.allocate((int)fo.getSize() * 2);
180
        BufferedReader r = new BufferedReader(new InputStreamReader(fo.getInputStream(), set));
181
        while (r.read(arr) != -1) {
182
            // again
183
        }
184
        r.close();
185
        
186
        arr.flip();
187
        return arr.toString();
188
    }
189
190
     public void testUTF8() throws Exception {
191
         FileObject root = Repository.getDefault().getDefaultFileSystem().getRoot();
192
         FileObject xmldir = FileUtil.createFolder(root, "xml");
193
         FileObject xml = FileUtil.createData(xmldir, "class.txt");
194
         OutputStream os = xml.getOutputStream();
195
         FileUtil.copy(getClass().getResourceAsStream("utf8.xml"), os);
196
         xml.setAttribute("javax.script.ScriptEngine", "freemarker");
197
         os.close();
198
         
199
         DataObject obj = DataObject.find(xml);
200
         
201
         
202
         FileObject target = FileUtil.createFolder(FileUtil.createMemoryFileSystem().getRoot(), "dir");
203
         DataFolder folder = DataFolder.findFolder(FileUtil.createFolder(target, "target"));
204
         
205
         
206
         
207
         Charset set = Charset.forName("iso-8859-2");
208
         FEQI.fs = target.getFileSystem();
209
         FEQI.result = set;
210
         
211
         
212
         Map<String,String> parameters = Collections.singletonMap("title", "Nazdar");
213
         DataObject n = obj.createFromTemplate(folder, "complex", parameters);
214
         
215
         assertEquals("Created in right place", folder, n.getFolder());
216
         assertEquals("Created with right name", "complex.txt", n.getName());
217
         
218
         
219
         String read = readChars(n.getPrimaryFile(), set);
220
         
221
         String exp = readChars(xml, Charset.forName("utf-8"));
222
         assertEquals(exp, read);
223
         
224
     }
164
    
225
    
165
    public static final class DD extends DialogDisplayer {
226
    public static final class DD extends DialogDisplayer {
166
        public Object notify(NotifyDescriptor descriptor) {
227
        public Object notify(NotifyDescriptor descriptor) {
Lines 187-192 Link Here
187
                }
248
                }
188
            };
249
            };
189
             */
250
             */
251
        }
252
    }
253
254
    public static final class FEQI extends FileEncodingQueryImplementation {
255
        public static FileSystem fs;
256
        public static Charset result;
257
    
258
        public Charset getEncoding(FileObject f) {
259
            try {
260
                if (f.getFileSystem() == fs) {
261
                    return result;
262
                }
263
                return null;
264
            } catch (FileStateInvalidException ex) {
265
                return null;
266
            }
190
        }
267
        }
191
    }
268
    }
192
    
269
    
(-)openide/templates/test/unit/src/org/netbeans/modules/templates/utf8.xml (+4 lines)
Added Link Here
1
<?xml version="1.0"?>
2
<root>
3
    Žluťoučký kůň skákal přes čtvero mezí.
4
</root>
(-)projects/queries/apichanges.xml (+19 lines)
Lines 81-86 Link Here
81
    <!-- ACTUAL CHANGES BEGIN HERE: -->
81
    <!-- ACTUAL CHANGES BEGIN HERE: -->
82
82
83
    <changes>
83
    <changes>
84
      <change id="FileEncodingQueryOnDefaultFS">
85
        <api name="general"/>
86
        <summary>Default Encoding of System File System is always UTF-8</summary>
87
        <version major="1" minor="10"/>
88
        <date day="28" month="3" year="2007"/>
89
        <author login="jtulach"/>
90
        <compatibility addition="yes" binary="compatible" semantic="compatible" source="compatible">
91
        </compatibility>
92
        <description>
93
          <p>
94
          Whenever someone queries for encoding of a file object on default
95
          file system (e.g. the one that is provided by layers), it will get
96
          UTF-8 as the default encoding and not the system one. As a result
97
          all resources on layers should be in UTF-8 encoding.
98
          </p>
99
        </description>
100
        <class package="org.netbeans.api.queries" name="FileEncodingQuery"/>
101
        <issue number="94676"/>
102
      </change>
84
      <change id="FileEncodingQuery">
103
      <change id="FileEncodingQuery">
85
        <api name="general"/>
104
        <api name="general"/>
86
        <summary>Added support for obtaining encoding of files</summary>
105
        <summary>Added support for obtaining encoding of files</summary>
(-)projects/queries/manifest.mf (-1 / +1 lines)
Lines 1-5 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.netbeans.modules.queries/1
2
OpenIDE-Module: org.netbeans.modules.queries/1
3
OpenIDE-Module-Specification-Version: 1.9
3
OpenIDE-Module-Specification-Version: 1.10
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/queries/Bundle.properties
4
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/queries/Bundle.properties
5
5
(-)projects/queries/src/org/netbeans/api/queries/FileEncodingQuery.java (-1 / +10 lines)
Lines 33-38 Link Here
33
import org.netbeans.modules.queries.UnknownEncoding;
33
import org.netbeans.modules.queries.UnknownEncoding;
34
import org.netbeans.spi.queries.FileEncodingQueryImplementation;
34
import org.netbeans.spi.queries.FileEncodingQueryImplementation;
35
import org.openide.filesystems.FileObject;
35
import org.openide.filesystems.FileObject;
36
import org.openide.filesystems.FileStateInvalidException;
36
import org.openide.util.Lookup;
37
import org.openide.util.Lookup;
37
import org.openide.util.NbPreferences;
38
import org.openide.util.NbPreferences;
38
39
Lines 71-77 Link Here
71
                delegates.add(encoding);
72
                delegates.add(encoding);
72
            }
73
            }
73
        }
74
        }
74
        delegates.add(Charset.defaultCharset());
75
        try {
76
            if (file.getFileSystem().isDefault()) {            
77
                delegates.add(Charset.forName(UTF_8));
78
            } else {
79
                delegates.add(Charset.defaultCharset());
80
            }
81
        } catch (FileStateInvalidException ex) {
82
            delegates.add(Charset.defaultCharset());
83
        }
75
        return new ProxyCharset (delegates);
84
        return new ProxyCharset (delegates);
76
    }   
85
    }   
77
    
86
    
(-)projects/queries/test/unit/src/org/netbeans/api/queries/FileEncodingQueryTest.java (+11 lines)
Lines 60-71 Link Here
60
import org.openide.filesystems.FileLock;
60
import org.openide.filesystems.FileLock;
61
import org.openide.filesystems.FileObject;
61
import org.openide.filesystems.FileObject;
62
import org.openide.filesystems.FileUtil;
62
import org.openide.filesystems.FileUtil;
63
import org.openide.filesystems.Repository;
63
64
64
/**
65
/**
65
 *
66
 *
66
 * @author Tomas Zezula
67
 * @author Tomas Zezula
67
 */
68
 */
68
public class FileEncodingQueryTest extends NbTestCase {
69
public class FileEncodingQueryTest extends NbTestCase {
70
    static {
71
        // confuse the system a bit, if your system runs with UTF-8 default locale...
72
        //System.setProperty("file.encoding", "cp1252");
73
    }
69
    
74
    
70
    private final String expectedEncoding;
75
    private final String expectedEncoding;
71
    private final File file;
76
    private final File file;
Lines 181-186 Link Here
181
        out.close();
186
        out.close();
182
        assertEquals(testString, new String(outbs.toByteArray()));
187
        assertEquals(testString, new String(outbs.toByteArray()));
183
        
188
        
189
    }
190
    
191
    public void testDefaultEncodingOnSFSIsUTF8() throws IOException {
192
        FileObject fo = FileUtil.createData(Repository.getDefault().getDefaultFileSystem().getRoot(), "some.file");
193
        Charset enc = FileEncodingQuery.getEncoding(fo);
194
        assertEquals("utf-8", enc.toString());
184
    }
195
    }
185
    
196
    
186
    private void performTest(File templ, String expectedEncoding) throws Exception {
197
    private void performTest(File templ, String expectedEncoding) throws Exception {

Return to bug 94676