Project

General

Profile

« Previous | Next » 

Revision 5752

use detected XML encoding when reading/writing files
use UTF-8 as default when performing queries in the DB (assume DB is using UTF-8)
remove as many PrintWriters (uses system default character encoding only) as possible and construct OutputStreamWriters where explicit encoding can be given.
http://bugzilla.ecoinformatics.org/show_bug.cgi?id=2495

View differences:

Eml200SAXHandler.java
29 29

  
30 30
import java.io.BufferedReader;
31 31
import java.io.File;
32
import java.io.FileReader;
33
import java.io.FileWriter;
32
import java.io.FileInputStream;
33
import java.io.FileOutputStream;
34 34
import java.io.IOException;
35
import java.io.InputStream;
36
import java.io.InputStreamReader;
37
import java.io.OutputStream;
38
import java.io.OutputStreamWriter;
35 39
import java.io.Reader;
40
import java.io.Writer;
36 41
import java.sql.PreparedStatement;
37 42
import java.sql.ResultSet;
38 43
import java.sql.SQLException;
......
213 218

  
214 219
    private Hashtable inlineDataNameSpace = null;
215 220

  
216
    private FileWriter inlineDataFileWriter = null;
221
    private Writer inlineDataFileWriter = null;
217 222

  
218 223
    private String inlineDataFileName = null;
219 224

  
......
629 634
                // the new file name will look like docid.rev.2
630 635
                inlineDataFileName = docidWithoutRev + seperator + revision
631 636
                        + seperator + inLineDataIndex;
632
                inlineDataFileWriter = createInlineDataFileWriter(inlineDataFileName);
637
                inlineDataFileWriter = createInlineDataFileWriter(inlineDataFileName, encoding);
633 638
                // put the inline file id into a vector. If upload failed,
634 639
                // metacat will
635 640
                // delete the inline data file
......
1514 1519
			File inlineDataDirectory = new File(path);
1515 1520
			File inlineDataFile = new File(inlineDataDirectory, fileName);
1516 1521

  
1517
			FileReader inlineFileReader = new FileReader(inlineDataFile);
1522
			Reader inlineFileReader = new InputStreamReader(new FileInputStream(inlineDataFile), encoding);
1518 1523
			BufferedReader inlineStringReader = new BufferedReader(inlineFileReader);
1519 1524
			String string = inlineStringReader.readLine();
1520 1525
			// at the end oldstring will be null
......
2366 2371
    }//deleteAccessSubTreeRecord
2367 2372

  
2368 2373
    // open a file writer for writing inline data to file
2369
    private FileWriter createInlineDataFileWriter(String fileName)
2374
    private Writer createInlineDataFileWriter(String fileName, String encoding)
2370 2375
            throws SAXException
2371 2376
    {
2372
        FileWriter writer = null;
2377
        Writer writer = null;
2373 2378
        String path;
2374 2379
        try {
2375 2380
        	 path = PropertyService.getProperty("application.inlinedatafilepath");
......
2383 2388
        logMetacat.info("inline file name: " + newFile);
2384 2389
        try {
2385 2390
            // true means append
2386
            writer = new FileWriter(newFile, true);
2391
        	writer = new OutputStreamWriter(new FileOutputStream(newFile, true), encoding);
2387 2392
        } catch (IOException ioe) {
2388 2393
            throw new SAXException(ioe.getMessage());
2389 2394
        }
......
2391 2396
    }
2392 2397

  
2393 2398
    // write inline data into file system and return file name(without path)
2394
    private void writeInlineDataIntoFile(FileWriter writer, StringBuffer data)
2399
    private void writeInlineDataIntoFile(Writer writer, StringBuffer data)
2395 2400
            throws SAXException
2396 2401
    {
2397 2402
        try {
......
2422 2427
			File oldDataFile = new File(inlineDataDirectory, oldFileName);
2423 2428
			File newDataFile = new File(inlineDataDirectory, newFileName);
2424 2429

  
2425
            FileReader oldFileReader = new FileReader(oldDataFile);
2430
            Reader oldFileReader = new InputStreamReader(new FileInputStream(oldDataFile), encoding);
2426 2431
            BufferedReader oldStringReader = new BufferedReader(oldFileReader);
2427
            FileReader newFileReader = new FileReader(newDataFile);
2432
            Reader newFileReader = new InputStreamReader(new FileInputStream(newDataFile), encoding);
2428 2433
            BufferedReader newStringReader = new BufferedReader(newFileReader);
2429 2434
            // read first line of data
2430 2435
            String oldString = oldStringReader.readLine();
......
2476 2481
		logMetacat.info("the inline data file name from xml_access is: "
2477 2482
				+ oldInlineInternalFileName);
2478 2483

  
2479
		FileReader oldFileReader = null;
2480
		FileWriter newFileWriter = null;
2484
		InputStream oldFileReader = null;
2485
		OutputStream newFileWriter = null;
2481 2486
		try {
2482 2487
			String path = PropertyService.getProperty("application.inlinedatafilepath");
2483 2488
			// the new file name will look like path/docid.rev.2
......
2485 2490
			File oldDataFile = new File(inlineDataDirectory, oldInlineInternalFileName);
2486 2491
			File newDataFile = new File(inlineDataDirectory, newFileName);
2487 2492

  
2488
			oldFileReader = new FileReader(oldDataFile);
2489
			newFileWriter = new FileWriter(newDataFile);
2490
			char[] buf = new char[4 * 1024]; // 4K buffer
2493
			oldFileReader = new FileInputStream(oldDataFile);
2494
			newFileWriter = new FileOutputStream(newDataFile);
2495
			byte[] buf = new byte[4 * 1024]; // 4K buffer
2491 2496
			int b = oldFileReader.read(buf);
2492 2497
			while (b != -1) {
2493 2498
				newFileWriter.write(buf, 0, b);
......
2548 2553
	 * In eml2, the inline data wouldn't store in db, it store in file system
2549 2554
	 * The db stores file name(without path).
2550 2555
	 */
2551
	public static Reader readInlineDataFromFileSystem(String fileName)
2556
	public static Reader readInlineDataFromFileSystem(String fileName, String encoding)
2552 2557
			throws McdbException {
2553 2558
		// BufferedReader stringReader = null;
2554
		FileReader fileReader = null;
2559
		Reader fileReader = null;
2555 2560
		try {
2556 2561
			String path = PropertyService.getProperty("application.inlinedatafilepath");
2557 2562
			// the new file name will look like path/docid.rev.2
2558 2563
			File inlineDataDirectory = new File(path);
2559 2564
			File dataFile = new File(inlineDataDirectory, fileName);
2560 2565

  
2561
			fileReader = new FileReader(dataFile);
2566
			fileReader = new InputStreamReader(new FileInputStream(dataFile), encoding);
2562 2567
			// stringReader = new BufferedReader(fileReader);
2563 2568
		} catch (Exception e) {
2564 2569
			throw new McdbException(e.getMessage());

Also available in: Unified diff