Ignore:
Timestamp:
2009-01-12T11:17:50+13:00 (15 years ago)
Author:
kjdon
Message:

updated the rtl-gli branch with files from trunk. Result of a merge 14807:18318

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gli/branches/rtl-gli/src/org/greenstone/gatherer/file/FileNode.java

    r11762 r18354  
    2020    protected FileSystemModel model = null;
    2121    protected MutableTreeNode parent = null;
     22    /** The string that is displayed as the filename. Attempts to be in the correct encoding. */
     23    protected String displayFileName = null;
    2224
    2325
     
    2729
    2830    // Files cannot have children
    29     if (file != null && file.isFile()) {
     31    if (file != null && !file.isDirectory()) { //file.isFile()) {
    3032        // Cache this result to prevent unceasing missing disk messages being thrown if the
    3133        // removable media was, um, removed after directory mapped
    3234        this.allows_children = false;
    33     }
    34     }
    35 
     35        displayFileName = calcDisplayString();
     36    }   
     37    }
     38
     39
     40     /** This method returns a string representation of the filenodes in the Collection
     41     * Tree, that can then be displayed in the tree.
     42     * We'll initially assume that the filenames are utf8 encoded and so convert the
     43     * filename into utf8 for proper presentation in the Collection tree pane.
     44     * If the filenames are not utf8, then the conversion would have introduced funny
     45     * characters. Therefore, when converting to utf8, if the converted filename
     46     * contains the special character '\ufffd', then we know the conversion did not work
     47     * and we return the original string which may or may not be properly presented by
     48     * default.
     49     * See http://java.sun.com/j2se/1.4.2/docs/api/java/nio/charset/CharsetDecoder.html
     50     * which says "How a decoding error is handled depends upon the action requested for
     51     * that type of error, which is described by an instance of the CodingErrorAction class.
     52     * The possible error actions are to ignore the erroneous input, report the error to
     53     * the invoker via the returned CoderResult object, or replace the erroneous input with
     54     * the current value of the replacement string. The replacement has the initial value
     55     * "\uFFFD"; its value may be changed via the replaceWith method."
     56     * The following made me think that String(byte[], String charsetName) constructor may
     57     * use the replacement value \uFFFD.
     58     * http://www.experts-exchange.com/Programming/Programming_Languages/Java/Q_20512969.html
     59     * mentions the following which made me think of this:
     60     * convertedStr = convertedStr.replace('\ufffd', ' ');
     61     */
     62    protected String calcDisplayString() {
     63    String filename = file.getName();
     64    try{
     65        String utf8filename = new String(filename.getBytes(), "UTF8");
     66        if(utf8filename.indexOf('\ufffd') == -1) {
     67        return utf8filename;
     68        } else { // contains the character indicating that it's invalid utf8
     69        // return the original string
     70        return filename;
     71        }
     72    } catch(java.io.UnsupportedEncodingException e) {
     73        return filename;
     74    }
     75    }
    3676
    3777    /** Returns the children of the node as an Enumeration. */
     
    312352    }
    313353    else {
    314         return file.getName();
     354        if(displayFileName == null) {   
     355        displayFileName = calcDisplayString();
     356        }
     357        return displayFileName; //return file.getName();       
    315358    }
    316359    }
Note: See TracChangeset for help on using the changeset viewer.