Changeset 8120


Ignore:
Timestamp:
2004-09-15T11:57:11+12:00 (20 years ago)
Author:
mdewsnip
Message:

More improvements to the new metadata code.

Location:
trunk/gli/src/org/greenstone/gatherer/metadata
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataSet.java

    r8037 r8120  
    114114    }
    115115
    116    
     116
     117    public File getMetadataSetFile()
     118    {
     119    return metadata_set_file;
     120    }
     121
     122
    117123    public String getNamespace()
    118124    {
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataSetManager.java

    r8023 r8120  
    6262
    6363
     64    static public ArrayList getMetadataSets()
     65    {
     66    return metadata_sets;
     67    }
     68
     69
    6470    static public ArrayList listMetadataSets(File directory)
    6571    {
     
    105111
    106112
    107     static private void loadMetadataSet(File metadata_set_file)
     113    static public void loadMetadataSet(File metadata_set_file)
    108114    {
    109115    MetadataSet metadata_set = new MetadataSet(metadata_set_file);
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataTools.java

    r8037 r8120  
    88
    99
    10     static public String getMetadataElementName(String metadata_element_name_full)
     10    static public MetadataElement getMetadataElement(String metadata_element_name_full)
    1111    {
    12     // Full element name contains namespace
    13     if (metadata_element_name_full.indexOf(NAMESPACE_SEPARATOR) != -1) {
    14         return metadata_element_name_full.substring(metadata_element_name_full.indexOf(NAMESPACE_SEPARATOR) + 1);
     12    String metadata_set_namespace = MetadataTools.getMetadataSetNamespace(metadata_element_name_full);
     13    MetadataSet metadata_set = MetadataSetManager.getMetadataSet(metadata_set_namespace);
     14    if (metadata_set == null) {
     15        return null;
    1516    }
    1617
    17     // No namespace
    18     return metadata_element_name_full;     
     18    String metadata_element_name = MetadataTools.getMetadataElementName(metadata_element_name_full);
     19    return metadata_set.getMetadataElement(metadata_element_name);
    1920    }
    2021
     
    3031
    3132    return metadata_element_attribute;
     33    }
     34
     35
     36    static public String getMetadataElementName(String metadata_element_name_full)
     37    {
     38    // Full element name contains namespace
     39    if (metadata_element_name_full.indexOf(NAMESPACE_SEPARATOR) != -1) {
     40        return metadata_element_name_full.substring(metadata_element_name_full.indexOf(NAMESPACE_SEPARATOR) + 1);
     41    }
     42
     43    // No namespace
     44    return metadata_element_name_full;     
    3245    }
    3346
  • trunk/gli/src/org/greenstone/gatherer/metadata/MetadataXMLFileManager.java

    r8013 r8120  
    1515
    1616
     17    static public void addMetadata(FileNode file_node, MetadataValue metadata_value)
     18    {
     19    FileNode[] file_nodes = new FileNode[1];
     20    file_nodes[0] = file_node;
     21    addMetadata(file_nodes, metadata_value);
     22    }
     23
     24
    1725    static public void addMetadata(FileNode[] file_nodes, MetadataValue metadata_value)
    1826    {
     27    // Add the metadata to each file node in turn
    1928    for (int i = 0; i < file_nodes.length; i++) {
    2029        File current_file = file_nodes[i].getFile();
     
    2736        MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(j);
    2837
    29         // This metadata.xml file is only potentially applicable if it is above or at the same level as the file
    30         if (current_file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
     38        // This metadata.xml file is only applicable if it is above or at the same level as the file
     39        // if (current_file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
     40        // This metadata.xml file is only applicable if it is at the same level as the file
     41        if (current_file_directory.getAbsolutePath().equals(metadata_xml_file.getParentFile().getAbsolutePath())) {
    3142            applicable_metadata_xml_file_found = true;
    3243            metadata_xml_file.addMetadata(current_file, metadata_value);
     
    5667
    5768
    58     static public ArrayList getMetadataAssignedToFile(File file)
    59     {
    60     // Build up a list of metadata values assigned to this file
    61     ArrayList metadata_values_all = new ArrayList();
    62 
    63     // Look at each loaded metadata.xml file to see if any assign metadata to this file
     69    /** Returns the metadata assigned to files outside the collection, excluding folder-level/inherited metadata. */
     70    static public ArrayList getMetadataAssignedDirectlyToExternalFile(File file)
     71    {
     72    System.err.println("Getting metadata assigned directly to external file " + file + "...");
     73
     74    // Build up a list of applicable metadata.xml files
     75    ArrayList applicable_metadata_xml_files = new ArrayList();
     76
     77    File directory = (file.isDirectory() ? file : file.getParentFile());
     78    while (directory != null) {
     79        File[] directory_files = directory.listFiles();
     80        for (int i = 0; i < directory_files.length; i++) {
     81        File child_file = directory_files[i];
     82        if (!child_file.isDirectory() && child_file.getName().equals("metadata.xml")) {
     83            System.err.println("Found: " + child_file);
     84            applicable_metadata_xml_files.add(new MetadataXMLFile(child_file.getAbsolutePath()));
     85        }
     86        }
     87
     88        directory = directory.getParentFile();
     89    }
     90
     91    // Get the metadata assigned to the specified file from the applicable metadata.xml files
     92    ArrayList assigned_metadata = getMetadataAssignedToFile(file, applicable_metadata_xml_files);
     93
     94    // Remove any folder-level metadata
     95    for (int i = assigned_metadata.size() - 1; i >= 0; i--) {
     96        if (((MetadataValue) assigned_metadata.get(i)).isInheritedMetadata()) {
     97        assigned_metadata.remove(i);
     98        }
     99    }
     100
     101    return assigned_metadata;
     102    }
     103
     104
     105    /** This excludes folder-level/inherited metadata. */
     106    static public ArrayList getMetadataAssignedDirectlyToFile(File file)
     107    {
     108    // Build up a list of applicable metadata.xml files
     109    ArrayList applicable_metadata_xml_files = new ArrayList();
     110
     111    // Look at each loaded metadata.xml file to see if it is potentially applicable
    64112    File file_directory = (file.isDirectory() ? file : file.getParentFile());
    65113    for (int i = 0; i < metadata_xml_files.size(); i++) {
    66114        MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(i);
    67115
     116        // This metadata.xml file is only applicable if it is at the same level as the file
     117        if (file_directory.getAbsolutePath().equals(metadata_xml_file.getParentFile().getAbsolutePath())) {
     118        applicable_metadata_xml_files.add(metadata_xml_file);
     119        }
     120    }
     121
     122    // Get the metadata assigned to the specified file from the applicable metadata.xml files
     123    ArrayList assigned_metadata = getMetadataAssignedToFile(file, applicable_metadata_xml_files);
     124
     125    // Remove any folder-level metadata
     126    for (int i = assigned_metadata.size() - 1; i >= 0; i--) {
     127        if (((MetadataValue) assigned_metadata.get(i)).isInheritedMetadata()) {
     128        assigned_metadata.remove(i);
     129        }
     130    }
     131
     132    return assigned_metadata;
     133    }
     134
     135
     136    static public ArrayList getMetadataAssignedToFile(File file)
     137    {
     138    // Build up a list of applicable metadata.xml files
     139    ArrayList applicable_metadata_xml_files = new ArrayList();
     140
     141    // Look at each loaded metadata.xml file to see if it is potentially applicable
     142    File file_directory = (file.isDirectory() ? file : file.getParentFile());
     143    for (int i = 0; i < metadata_xml_files.size(); i++) {
     144        MetadataXMLFile metadata_xml_file = (MetadataXMLFile) metadata_xml_files.get(i);
     145
    68146        // This metadata.xml file is only potentially applicable if it is above or at the same level as the file
    69147        if (file_directory.getAbsolutePath().startsWith(metadata_xml_file.getParentFile().getAbsolutePath())) {
    70         ArrayList metadata_values = metadata_xml_file.getMetadataAssignedToFile(file);
    71         for (int j = 0; j < metadata_values.size(); j++) {
    72             MetadataValue metadata_value = (MetadataValue) metadata_values.get(j);
    73 
    74             // Overriding metadata: remove any values with this metadata element
    75             if (metadata_value.isAccumulatingMetadata() == false) {
    76             for (int k = metadata_values_all.size() - 1; k >= 0; k--) {
    77                 if (((MetadataValue) metadata_values_all.get(k)).getMetadataElement().equals(metadata_value.getMetadataElement())) {
    78                 metadata_values_all.remove(k);
    79                 }
     148        applicable_metadata_xml_files.add(metadata_xml_file);
     149        }
     150    }
     151
     152    // Return the metadata assigned to the specified file from the applicable metadata.xml files
     153    return getMetadataAssignedToFile(file, applicable_metadata_xml_files);
     154    }
     155
     156
     157    static private ArrayList getMetadataAssignedToFile(File file, ArrayList applicable_metadata_xml_files)
     158    {
     159    // Build up a list of metadata values assigned to this file
     160    ArrayList metadata_values_all = new ArrayList();
     161
     162    // Look at each applicable metadata.xml file to see if it assigns metadata to this file
     163    for (int i = 0; i < applicable_metadata_xml_files.size(); i++) {
     164        MetadataXMLFile metadata_xml_file = (MetadataXMLFile) applicable_metadata_xml_files.get(i);
     165        System.err.println("Applicable metadata.xml file: " + metadata_xml_file);
     166
     167        ArrayList metadata_values = metadata_xml_file.getMetadataAssignedToFile(file);
     168        for (int j = 0; j < metadata_values.size(); j++) {
     169        MetadataValue metadata_value = (MetadataValue) metadata_values.get(j);
     170
     171        // Overriding metadata: remove any values with this metadata element
     172        if (metadata_value.isAccumulatingMetadata() == false) {
     173            for (int k = metadata_values_all.size() - 1; k >= 0; k--) {
     174            if (((MetadataValue) metadata_values_all.get(k)).getMetadataElement().equals(metadata_value.getMetadataElement())) {
     175                metadata_values_all.remove(k);
    80176            }
    81177            }
    82 
    83             metadata_values_all.add(metadata_value);
    84         }
     178        }
     179
     180        metadata_values_all.add(metadata_value);
    85181        }
    86182    }
     
    119215
    120216
     217    static public void removeMetadata(FileNode file_node, MetadataValue metadata_value)
     218    {
     219    FileNode[] file_nodes = new FileNode[1];
     220    file_nodes[0] = file_node;
     221    removeMetadata(file_nodes, metadata_value);
     222    }
     223
     224
    121225    static public void removeMetadata(FileNode[] file_nodes, MetadataValue metadata_value)
    122226    {
     227    // Remove the metadata from each file node in turn
    123228    for (int i = 0; i < file_nodes.length; i++) {
    124229        File current_file = file_nodes[i].getFile();
Note: See TracChangeset for help on using the changeset viewer.