package edu.vt.marian.Document; import java.io.*; import java.net.*; import java.util.*; import edu.vt.marian.common.*; /** A "variable field" in a US MARC record that contains a personal name: that is, a 100, 400, 600, 700, or 800 field. @author Robert France */ public class MarcPersNameField extends PresentableMarcVarField { /** Labels for subfields reported in a long description. */ private final static String person_name_labels = "abcdeknpqt"; /** Create a MarcPersNameField object with no subfields. @param id -- the variable field id. @param xMap -- used to convert ANSEL to (e.g.) XML. @param debug -- used for debugging */ public MarcPersNameField(int id, EntityMap xMap, Debug debug) { super(id, xMap, debug); isPersName = true; } /** "Short" presentation for a personal name variable field: use 'a' and 'b' subfields. @param markupType see edu.vt.marian.common.DigInfObj @param out A BufferedWriter (presumably String or OutputStream) to present on. @return OK -- everything jake.
IO_ERROR or PARSE_ERROR -- problems. */ public int presentShort(int markupType, BufferedWriter out) throws IOException { int Err; switch ( markupType ) { default: debug.dumpTrace("MarcPersNameField.presentShort(): Unexpected markup type " + markupType + ": treating as ASCII."); // Fall through: case DigInfObj.XML: case DigInfObj.SGML: case DigInfObj.HTML: case DigInfObj.ASCII: case DigInfObj.ANSEL: Enumeration subfld = subfields.elements(); try { while ( true ) { MarcSubField sf = (MarcSubField) subfld.nextElement(); if ( ( sf.getLabel() == 'a' ) || ( sf.getLabel() == 'b' ) ) if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); if ( subfld.hasMoreElements() ) out.write(' '); } } catch( NoSuchElementException e) {}; } return( ReturnCodes.OK ); } /** "Long" presentation for a personal name variable field. @param markupType see edu.vt.marian.common.DigInfObj @param out A BufferedWriter (presumably String or OutputStream) to present on. @return OK -- everything jake.
IO_ERROR or PARSE_ERROR -- problems. */ public int presentLong(int markupType, BufferedWriter out) throws IOException { Enumeration subfld = subfields.elements(); int Err; switch ( markupType ) { case DigInfObj.XML: // Use default. case DigInfObj.SGML: return( super.presentLong(markupType, out) ); case DigInfObj.HTML: // Presentation: make the (unique) 'a' subfield a hot link // using the full indexed form of the name as exact query text. // Build URL. StringWriter sw = new StringWriter(); BufferedWriter bsw = new BufferedWriter( sw ); if ( (Err = presentLong(DigInfObj.ANSEL, bsw)) != ReturnCodes.OK ) return( Err ); bsw.flush(); String queryString = "text1_type=Exact Personal Authors/text1=" + sw.toString(); try { while ( true ) { MarcSubField sf = (MarcSubField) subfld.nextElement(); if (sf.getLabel() == 'a') { presentUrl(queryString, out); if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); out.write(""); } else if (sf.getLabel() == '4') { out.write("["); if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); out.write("]"); } else if (person_name_labels.indexOf(sf.getLabel()) != -1) { if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); } if ( subfld.hasMoreElements() ) out.write(' '); } } catch( NoSuchElementException e) {}; return( ReturnCodes.OK ); default: debug.dumpTrace("MarcPersNameField.presentLong(): Unexpected markup type " + markupType + ": treating as ASCII."); // Fall through: case DigInfObj.ASCII: case DigInfObj.ANSEL: try { while ( true ) { MarcSubField sf = (MarcSubField) subfld.nextElement(); if (sf.getLabel() == '4') { out.write("["); if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); out.write("]"); } else if (person_name_labels.indexOf(sf.getLabel()) != -1) { if ( (Err = sf.present(markupType, out)) != ReturnCodes.OK ) return( Err ); } if ( subfld.hasMoreElements() ) out.write(' '); } } catch( NoSuchElementException e) {}; return( ReturnCodes.OK ); } } }