Changeset 6889


Ignore:
Timestamp:
2004-02-25T11:40:41+13:00 (20 years ago)
Author:
mdewsnip
Message:

Fixed some bugs concerning file/folder level metadata.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/msm/MetadataXMLFile.java

    r6881 r6889  
    268268    }
    269269    /** Retrieve the metadata associated with the given filename. Keep track of what metadata should be overwritten and what should be accumulated. Also make note of the source file, and remove the metadata if required. Finally if purge is set retrieve every piece of metadata in this file. */
     270    // !! Michael has written a much nicer version of this function !!
    270271    public ArrayList getMetadata(String filename, boolean remove, ArrayList metadatum_so_far, File file, boolean append_folder_level, boolean purge) {
    271272    Gatherer.println("Get metadata for " + filename);
    272273    Gatherer.println("remove = " + remove + ", metadata_so_far = " + (metadatum_so_far != null ? String.valueOf(metadatum_so_far.size()) : "null") + ", file = " + file + ", append_folder_level = " + append_folder_level + ", purge = " + purge);
    273     // Of course null is not an acceptable filename
    274     //if(filename == null) {
    275     //    return metadatum_so_far;
    276     //}
     274
     275    // Determine the file's path relative to the location of the metadata.xml file
     276    String file_relative_path = ((filename != null) ? filename : "");
     277    if (file_relative_path.endsWith(File.separator)) {
     278        file_relative_path = file_relative_path.substring(0, file_relative_path.length() - File.separator.length());
     279    }
     280
    277281    ArrayList metadatum = null;
    278282    ArrayList queued_for_removal = new ArrayList();
     
    347351                    // Determine whether this metadata is file or folder level
    348352                    if (metadata != null) {
    349                     // The metadata is folder level if the file expression matches .*
    350                     if (filename_text != null && filename_text.equals(DIRECTORY_FILENAME)) {
     353                    // System.err.println("File relative path: " + file_relative_path + " Filename text: " + filename_text);
     354                    // Direct match to regular expression
     355                    if (file_relative_path.matches(filename_text)) {
     356                        boolean is_folder_level = filename_text.equals(".*") && !file_relative_path.equals("");
     357                        metadata.setFile(file);
     358                        metadata.setFileLevel(!is_folder_level);
     359                    }
     360                    // Indirect match to regular expression (always folder level)
     361                    else if (file_relative_path.startsWith(filename_text + File.separator)) {
     362                        metadata.setFile(new File(file, filename_text));
    351363                        metadata.setFileLevel(false);
    352364                    }
    353                     // Otherwise it must be file level
    354                     else {
    355                         metadata.setFileLevel(true);
    356                     }
    357 
    358                     metadata.setFile(file);
     365
    359366                    // If mode is overwrite, then remove any previous values for this metadata element.
    360367                    if(mode.equals("accumulate")) {
Note: See TracChangeset for help on using the changeset viewer.