Ignore:
Timestamp:
2008-08-15T18:37:16+12:00 (16 years ago)
Author:
ak19
Message:

Moved the displayString and toString() added recently in CollectionTreeNode into the superclass FileNode class, since WorkspaceTreeNode may also want to attempt to display filenames with proper encoding (if UTF8)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gli/trunk/src/org/greenstone/gatherer/file/FileNode.java

    r11762 r16838  
    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
     
    3234        this.allows_children = false;
    3335    }
    34     }
    35 
     36    displayFileName = calcDisplayString();
     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;     
    315358    }
    316359    }
Note: See TracChangeset for help on using the changeset viewer.