Changeset 5154
- Timestamp:
- 2003-08-18T13:56:31+12:00 (21 years ago)
- Location:
- trunk/gli/src/org/greenstone/gatherer/msm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gli/src/org/greenstone/gatherer/msm/ElementWrapper.java
r4837 r5154 35 35 *######################################################################## 36 36 */ 37 38 39 40 41 42 43 /* GPL_HEADER */44 37 package org.greenstone.gatherer.msm; 45 38 /************************************************************************************** … … 52 45 import java.util.TreeSet; 53 46 import org.greenstone.gatherer.msm.MSMUtils; 47 import org.greenstone.gatherer.util.StaticStrings; 54 48 import org.greenstone.gatherer.util.Utility; 55 49 import org.w3c.dom.Element; … … 185 179 return Utility.formatHTMLWidth(MSMUtils.getDescription(element), 60); 186 180 } 181 182 public boolean hasValueTree() { 183 return element.getAttribute(StaticStrings.VALUE_TREE_ATTRIBUTE).equalsIgnoreCase(StaticStrings.TRUE_STR); 184 } 185 187 186 /** Increment the number of occurances of this metadata element. 188 189 187 * @see org.greenstone.gatherer.msm.MSMUtils 188 */ 190 189 public void inc() { 191 190 MSMUtils.setOccurance(element, 1); 192 191 } 193 192 194 193 public boolean isHierarchy() { 195 return element.getAttribute( "hierarchy").equalsIgnoreCase("true");194 return element.getAttribute(StaticStrings.HIERARCHY_ATTRIBUTE).equalsIgnoreCase(StaticStrings.TRUE_STR); 196 195 } 197 196 -
trunk/gli/src/org/greenstone/gatherer/msm/MSMUtils.java
r5085 r5154 6 6 * University of Waikato, New Zealand. 7 7 * 8 * <BR><BR>9 *10 8 * Author: John Thompson, Greenstone Digital Library, University of Waikato 11 9 * 12 * <BR><BR>13 *14 10 * Copyright (C) 1999 New Zealand Digital Library Project 15 *16 * <BR><BR>17 11 * 18 12 * This program is free software; you can redistribute it and/or modify … … 21 15 * (at your option) any later version. 22 16 * 23 * <BR><BR>24 *25 17 * This program is distributed in the hope that it will be useful, 26 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 27 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 28 20 * GNU General Public License for more details. 29 *30 * <BR><BR>31 21 * 32 22 * You should have received a copy of the GNU General Public License … … 35 25 *######################################################################## 36 26 */ 37 38 39 40 41 42 43 /* GPL_HEADER */44 27 package org.greenstone.gatherer.msm; 45 28 /************************************************************************************** … … 49 32 * Written: / /01 50 33 * Revised: 16/08/02 Improved 34 * 06/08/03 Bug fixes 51 35 * @author John Thompson, Greenstone Digital Libraries 52 36 * @version 2.3 … … 59 43 import org.greenstone.gatherer.msm.MetadataSet; 60 44 import org.greenstone.gatherer.util.ArrayTools; 45 import org.greenstone.gatherer.util.StaticStrings; 61 46 import org.greenstone.gatherer.util.Utility; 62 47 import org.greenstone.gatherer.valuetree.GValueModel; … … 79 64 /** The character used to separate name space from metadata element. */ 80 65 static public final char NS_SEP= '.'; 66 /** The character used to separate subfields from metadata element. */ 67 static public final String SF_SEP= "#"; 81 68 /** Method to add one node as a child of another, after migrating into the target document. 82 69 * @param parent The <strong>Node</strong> we are inserting into. … … 392 379 comment = getValue(comment_node); 393 380 } 381 if(!definition.endsWith(StaticStrings.SPACE_CHARACTER) && !comment.startsWith(StaticStrings.SPACE_CHARACTER)) { 382 comment = StaticStrings.SPACE_CHARACTER + comment; 383 } 394 384 String description = definition + comment; 395 385 return Utility.stripNL(description.trim()); … … 417 407 */ 418 408 static final public String getFullIdentifier(Node element, String namespace) { 409 StringBuffer identifier_buffer = new StringBuffer(); 419 410 if(element == null) { 420 411 return "Error"; 421 412 } 422 // Get namespace for given element. 423 Element root = (Element)element.getParentNode(); 413 // First get the root node. 414 Document document = element.getOwnerDocument(); 415 Element root = document.getDocumentElement(); 416 document = null; 417 // Retrieve this elements identifier 418 identifier_buffer.append(getIdentifier(element)); 419 // Now we check if element has a parent node, other than root. If so we begin building up the full identifier 420 Element parent_element = (Element) element.getParentNode(); 421 while(parent_element != null && parent_element != root) { 422 identifier_buffer.insert(0, SF_SEP); 423 identifier_buffer.insert(0, getIdentifier(parent_element)); 424 parent_element = (Element)parent_element.getParentNode(); 425 } 426 parent_element = null; 427 // Finally insert the namespace and we are all done. 424 428 if(root != null) { 425 String identifier = root.getAttribute("namespace"); 426 // Get name and return it. 427 if(identifier.equals("")) { 428 identifier = Utility.EXTRACTED_METADATA_NAMESPACE; 429 } 430 return identifier + NS_SEP + getIdentifier(element); 429 namespace = root.getAttribute("namespace"); 431 430 } 432 if (namespace.equals("")) { 433 return getIdentifier(element); // No namespace anymore 434 } 435 return namespace + NS_SEP + getIdentifier(element); 431 root = null; 432 // If no root, or no namespace found, assume its extracted (at least then they can't edit it) 433 if(namespace == null || namespace.equals("")) { 434 namespace = Utility.EXTRACTED_METADATA_NAMESPACE; 435 } 436 identifier_buffer.insert(0, NS_SEP); 437 identifier_buffer.insert(0, namespace); 438 namespace = null; 439 return identifier_buffer.toString(); 436 440 } // static public String getFullIdentier(Node element) 437 441 … … 450 454 * @return A <strong>String</strong> representing this given elements fully namespace qualified name. 451 455 */ 452 static final public String getFullName(Element element, String def_namespace) { 456 static final public String getFullName(Element element, String namespace) { 457 StringBuffer name_buffer = new StringBuffer(); 453 458 if(element == null) { 454 return null; 455 } 456 // Get namespace for given element. 457 Element root = (Element)element.getParentNode(); 458 String namespace = ""; 459 if (root==null) { 460 namespace = def_namespace; 461 } else { 462 namespace = root.getAttribute("namespace") ; 463 } 464 String identifier = namespace + NS_SEP + element.getAttribute("name"); 465 // Get name and return it. 466 if(identifier.startsWith(".")) { 467 identifier = identifier.substring(1); 468 } 469 return identifier; 459 return "Error"; 460 } 461 // First get the root node. 462 Document document = element.getOwnerDocument(); 463 Element root = document.getDocumentElement(); 464 document = null; 465 // Retrieve this elements name 466 name_buffer.append(element.getAttribute("name")); 467 // Now we check if element has a parent node, other than root. If so we begin building up the full name 468 Element parent_element = (Element) element.getParentNode(); 469 while(parent_element != null && parent_element != root) { 470 name_buffer.insert(0, SF_SEP); 471 name_buffer.insert(0, parent_element.getAttribute("name")); 472 parent_element = (Element)parent_element.getParentNode(); 473 } 474 parent_element = null; 475 // Finally insert the namespace and we are all done. 476 if(root != null) { 477 namespace = root.getAttribute("namespace"); 478 } 479 root = null; 480 // If no root, or no namespace found, assume its extracted (at least then they can't edit it) 481 if(namespace == null || namespace.equals("")) { 482 namespace = Utility.EXTRACTED_METADATA_NAMESPACE; 483 } 484 name_buffer.insert(0, NS_SEP); 485 name_buffer.insert(0, namespace); 486 namespace = null; 487 return name_buffer.toString(); 470 488 } // static public String getFullName(Element element) 471 489 -
trunk/gli/src/org/greenstone/gatherer/msm/MetadataSet.java
r4837 r5154 398 398 return null; 399 399 } 400 401 public Element getElement(Element parent_element, String name) { 402 Gatherer.println("Get element named " + name + " from " + parent_element.getAttribute("name")); 403 NodeList elements = parent_element.getElementsByTagName("Element"); 404 for(int i = 0; i < elements.getLength(); i++) { 405 Element element = (Element) elements.item(i); 406 if(element.getAttribute("name").equals(name) && element.getParentNode() == parent_element) { 407 elements = null; 408 return element; 409 } 410 } 411 elements = null; 412 return null; 413 } 400 414 /** Method to acquire a list of all the elements in this metadata set. 401 415 * @return A <strong>NodeList</strong> containing all of this sets elements. -
trunk/gli/src/org/greenstone/gatherer/msm/MetadataSetManager.java
r5039 r5154 40 40 import javax.swing.*; 41 41 import javax.swing.filechooser.*; 42 import org.greenstone.gatherer.Configuration; 42 43 import org.greenstone.gatherer.Gatherer; 43 44 import org.greenstone.gatherer.cdm.CommandTokenizer; … … 306 307 for(int i = elements.size(); i != 0; i--) { 307 308 ElementWrapper element = (ElementWrapper) elements.get(i - 1); 308 if(element.getOccurances() == 0 && element.getNamespace().length() > 0 ) { //&& !element.toString().equals("Source")) {309 if(element.getOccurances() == 0 && element.getNamespace().length() > 0 && !element.getNamespace().equals(Utility.EXTRACTED_METADATA_NAMESPACE)) { 309 310 elements.remove(element); 310 311 } … … 324 325 return getElements(false); 325 326 } 327 328 public Vector getElements(boolean all) { 329 return getElements(all, false); 330 } 331 326 332 /** Used to get all the elements in this manager. 327 333 * @param all <i>true</i> if all elements, including hidden, should be returned. 328 334 * @return A Vector of ElementWrappers. 329 335 */ 330 public Vector getElements(boolean all ) {336 public Vector getElements(boolean all, boolean force_extracted) { 331 337 Vector all_elements = new Vector(); 332 338 for(Enumeration keys = mds_hashtable.keys(); keys.hasMoreElements(); ) { 333 339 MetadataSet mds = (MetadataSet)mds_hashtable.get(keys.nextElement()); 334 if(all || !mds.getNamespace().equals(HIDDEN)) { 340 if((!mds.getNamespace().equals(Utility.EXTRACTED_METADATA_NAMESPACE) && !mds.getNamespace().equals(HIDDEN)) 341 || (mds.getNamespace().equals(Utility.EXTRACTED_METADATA_NAMESPACE) && (Gatherer.config.get("general.view_extracted_metadata", Configuration.COLLECTION_SPECIFIC) || force_extracted)) 342 || (mds.getNamespace().equals(Utility.EXTRACTED_METADATA_NAMESPACE) && mds.getNamespace().equals(HIDDEN) && all)) { 335 343 NodeList set_elements = mds.getElements(); 336 ///ystem.err.println("The set " + mds + " has " + set_elements.getLength() + " elements.");344 System.err.println("The set " + mds + " has " + set_elements.getLength() + " elements."); 337 345 for(int i = 0; i < set_elements.getLength(); i++) { 338 ElementWrapper element = new ElementWrapper((Element)set_elements.item(i)); 339 // if(!element.toString().equals("Source")) { 340 all_elements.add(element); 341 // } 346 Element raw_element = (Element)set_elements.item(i); 347 ElementWrapper element = new ElementWrapper(raw_element); 348 // For now we do not add subfield elements and their parents, just the subfields. 349 NodeList child_elements = raw_element.getElementsByTagName("Element"); 350 if(child_elements.getLength() == 0) { 351 all_elements.add(element); 352 } 342 353 } 343 354 } … … 376 387 */ 377 388 public ElementWrapper getElement(String name) { 389 return getElement(name, false); 390 } 391 392 public ElementWrapper getElement(String name, boolean perfect) { 378 393 ///ystem.err.println("Retrieve element " + name); 379 394 if(name == null) { 380 395 ///ystem.err.println("No name!"); 381 396 return null; 382 397 } … … 386 401 // First we seperate off what set it is in, where we have '<set><namespace_separator><element>'. 387 402 if(name.indexOf(MSMUtils.NS_SEP) != -1) { 388 if(name.startsWith(Utility.EXTRACTED_METADATA_NAMESPACE)) { 389 // Retrieve the correct set if possible. 390 set = (MetadataSet)mds_hashtable.get(""); 391 // Now retrieve the element name. 392 element = name.substring(name.indexOf(MSMUtils.NS_SEP) + 1); 393 } 394 else { 395 String namespace = name.substring(0, name.indexOf(MSMUtils.NS_SEP)); 396 // Retrieve the correct set if possible. 397 set = (MetadataSet)mds_hashtable.get(namespace); 398 namespace = null; 399 // Now retrieve the element name. 400 element = name.substring(name.indexOf(MSMUtils.NS_SEP) + 1); 401 } 402 } 403 else { 404 // No namespace so assume ns = "". 405 set = (MetadataSet)mds_hashtable.get(""); 403 String namespace = name.substring(0, name.indexOf(MSMUtils.NS_SEP)); 404 // Retrieve the correct set if possible. 405 set = (MetadataSet)mds_hashtable.get(namespace); 406 namespace = null; 407 // Now retrieve the element name. 408 element = name.substring(name.indexOf(MSMUtils.NS_SEP) + 1); 409 } 410 // If we are looking for a perfect match, we can assume that no namespace means extracted metadata 411 else if(!perfect) { 412 // No namespace so assume that its extracted metadata. 413 set = (MetadataSet)mds_hashtable.get(Utility.EXTRACTED_METADATA_NAMESPACE); 406 414 element = name; 407 415 } 408 416 if(set != null) { 409 ///ystem.err.print("Trying to match element " + element +"?"); 410 Element temp = set.getElement(element); 411 if(temp != null) { 412 ///ystem.err.println("Found!"); 413 result = new ElementWrapper(temp); 414 } 415 else { 416 ///ystem.err.println("Not found."); 417 } 418 element = null; 419 temp = null; 420 } 421 else { 422 ///ystem.err.println("No such set"); 423 } 424 set = null; 425 if(result == null) { 426 ///ystem.err.println("Shouldn't return null unless this is greenstone archive parsing."); 427 } 417 // Now we have a set we are ready to locate the requested element. Break the remaining element name down by the subfield separator, attempting to retrieve the element indicated by each step. 418 if(element.indexOf(MSMUtils.SF_SEP) != -1) { 419 StringTokenizer tokenizer = new StringTokenizer(element, MSMUtils.SF_SEP); 420 // Has to be at least two tokens 421 if(tokenizer.countTokens() >= 2) { 422 Element current_element = set.getElement(tokenizer.nextToken()); 423 while(current_element != null && tokenizer.hasMoreTokens()) { 424 current_element = set.getElement(current_element, tokenizer.nextToken()); 425 } 426 if(current_element != null) { 427 result = new ElementWrapper(current_element); 428 current_element = null; 429 } 430 } 431 tokenizer = null; 432 } 433 // No subfields - much easier. 434 if(result == null) { 435 ///ystem.err.print("Trying to match element " + element +"?"); 436 Element temp = set.getElement(element); 437 if(temp != null) { 438 result = new ElementWrapper(temp); 439 } 440 temp = null; 441 } 442 set = null; 443 } 444 element = null; 428 445 return result; 429 446 } … … 465 482 return (MetadataSet) mds_hashtable.get(name); 466 483 } 467 else if(name.equals(Utility.EXTRACTED_METADATA_NAMESPACE)) { 468 return (MetadataSet) mds_hashtable.get(""); 469 } 470 else { 471 ///ystem.err.println("Couldn't find metadata set."); 472 if(name.equals(HIDDEN)) { 473 return createHidden(); 474 } 484 else if(name.equals(HIDDEN)) { 485 return createHidden(); 475 486 } 476 487 return null; … … 483 494 return getSets(true); 484 495 } 496 485 497 public Vector getSets(boolean include_greenstone) { 486 498 Vector result = new Vector(); 487 499 for(Enumeration keys = mds_hashtable.keys(); keys.hasMoreElements(); ) { 488 500 MetadataSet set = (MetadataSet)mds_hashtable.get(keys.nextElement()); 489 if(!set.getNamespace().equals(HIDDEN) && (include_greenstone || !set.getNamespace().equals( ""))) {501 if(!set.getNamespace().equals(HIDDEN) && (include_greenstone || !set.getNamespace().equals(Utility.EXTRACTED_METADATA_NAMESPACE))) { 490 502 result.add(set); 491 503 } … … 493 505 return result; 494 506 } 507 495 508 /** Find the total number of elements loaded. 496 509 * @return The element count as an int. … … 939 952 MetadataSet set = (MetadataSet) mds_hashtable.get(namespace); 940 953 try { 941 File mds_file = null; 942 if(!namespace.equals("")) { 943 mds_file = new File(file, set.getNamespace() + ".mds"); 944 } 945 else { 946 mds_file = new File(file, Utility.METADATA_EXTRACTED); 947 } 954 File mds_file = new File(file, set.getNamespace() + ".mds"); 948 955 Utility.export(set.getDocument(), mds_file); 949 956 set.setFile(mds_file); 950 957 // Now for each element attempt to save its value tree. 951 958 NodeList elements = set.getElements(); 952 for(int i = elements.getLength() - 1; !namespace.equals("") &&i >= 0; i--) {959 for(int i = elements.getLength() - 1; i >= 0; i--) { 953 960 ElementWrapper value_element = new ElementWrapper((Element)elements.item(i)); 954 GValueModel value_tree = set.getValueTree(value_element); 955 if(value_tree != null) { 956 File value_file = new File(file, value_element.getName() + ".mdv"); 957 ///ystem.err.println("Saving value file: " + value_file.toString()); 958 Utility.export(value_tree.getDocument(), value_file); 959 // If this is a hierarchy element, write hierarchy file. 960 if(value_element.getNamespace().equals(MetadataSetManager.HIDDEN) || value_tree.isHierarchy()) { 961 MetadataXML.write(value_tree, this, Gatherer.c_man.getCollectionEtc()); 961 if(value_element.hasValueTree()) { 962 GValueModel value_tree = set.getValueTree(value_element); 963 if(value_tree != null) { 964 File value_file = new File(file, value_element.getName() + ".mdv"); 965 ///ystem.err.println("Saving value file: " + value_file.toString()); 966 Utility.export(value_tree.getDocument(), value_file); 967 // If this is a hierarchy element, write hierarchy file. 968 if(value_element.getNamespace().equals(MetadataSetManager.HIDDEN) || value_tree.isHierarchy()) { 969 MetadataXML.write(value_element, value_tree, this, Gatherer.c_man.getCollectionEtc()); 970 } 962 971 } 963 }964 else {965 ///ystem.err.println("No value tree for " + value_element.toString());966 972 } 967 973 }
Note:
See TracChangeset
for help on using the changeset viewer.