package edu.vt.marian.Document;
import java.io.*;
import java.net.*;
import java.util.*;
import edu.vt.marian.common.*;
import edu.vt.marian.Document.SOIFException;
import gnu.regexp.*;
//import edu.vt.marian.common.*;
import edu.vt.marian.search.*;
import org.xml.sax.Parser;
import org.xml.sax.DocumentHandler;
import org.xml.sax.helpers.ParserFactory;
import edu.vt.marian.search.Wrapper.*;
import org.xml.sax.InputSource;
/**
* A set of data encapsulated in a SOIF
*/
public class OAMSDocument implements Document
{
/** this string contains all the information of this document
the format of the string is in SGML
*/
private String OAMSString = null;
/**
* Property list for the OAMS
*/
//private Hashtable attributeValues;
static final String parserClass = "com.jclark.xml.sax.Driver";
/**
* Allows us to pull things out of the property list in the order they
* were inserted.
*/
public String title;
public String fullID;
public String author;
public String organization;
public String Abstract;
public String subject;
public String displayID;
private Vector keyList;
/**
* Common delimitter that separates SOIF attributes and values
*/
static final String soifDelimitter = ":: ";
Debug debug;
/**
Build a new SOIF object
*/
public OAMSDocument(Debug debug) {
this.debug = debug;
//attributeValues = new Hashtable();
keyList = new Vector();
}
/**
* Build a new SOIF object from an input stream
* @param soifInput input stream from which the SOIF should be built.
*/
public OAMSDocument(String OAMSInput, Debug debug) {
this(debug);
OAMSString = OAMSInput;
System.out.println(OAMSString);
ParseOAMSBody();
}
/**
* Parse the body of the SOIF extracting the attribute/value pairs
* @param body the body to parse
*/
public void ParseOAMSBody() {
try{
//InputStreamReader in = new InputStreamReader(new DataInputStream(new ByteArrayInputStream(OAMSString.getBytes())));
StringReader in = new StringReader(OAMSString);
Parser parser = ParserFactory.makeParser(parserClass);
DocumentHandler handler = new OAiHandler();
parser.setDocumentHandler(handler);
parser.parse(new InputSource(in));
author = OAiHandler.author();
title = OAiHandler.title();
subject = OAiHandler.subject();
displayID = OAiHandler.displayID();
Abstract = OAiHandler.Abstract();
} catch (Exception e) {};
}
/**
Return a short description
(probably only one sentence) of the document this represents.
@param markupType -- specifies the charater set type need to be returned
@return the short description of this object as a string
*/
public String presentShort(int markupType)
{
StringWriter sw = new StringWriter();
BufferedWriter out = new BufferedWriter( sw );
int Err;
try {
if ( (Err = presentShort(markupType, out)) != ReturnCodes.OK )
return( null );
out.flush();
} catch( Exception e ) { return( null ); }
return(sw.toString());
}
public int presentShort(int markupType, BufferedWriter out) throws IOException
{
int Err;
String AttributeValue,AUTHOR, TITLE;
String shortPresentation;
shortPresentation = "";
AUTHOR= null;
TITLE = null;
switch ( markupType )
{
default:
// only ASCII and XML are supported now. ASCII produces the sort
// of single-line description used in results lists. XML produces
// an OAMS description of the document.
debug.dumpTrace("MarcDocument.presentShort(): unsupported markup type: using ASCII.");
// FALL THROUGH:
case DigInfObj.ASCII:
boolean seenAuthor = false;
if(author != null)
{
seenAuthor = true;
shortPresentation = shortPresentation + author;
}
//Main title
if(title!=null)
{
if (seenAuthor)
{
// add separator
shortPresentation = shortPresentation + ", ";
}
shortPresentation = shortPresentation + title;
}
shortPresentation = shortPresentation + "\n";
out.write(shortPresentation);
} // end -- switch
return( ReturnCodes.OK );
}
public String presentLong(int markupType)
{
StringWriter sw = new StringWriter();
BufferedWriter out = new BufferedWriter( sw );
int Err;
try {
if ( (Err = presentLong(markupType, out)) != ReturnCodes.OK )
return( null );
out.flush();
} catch( Exception e ) { return( null ); }
return(sw.toString());
}
public int presentLong(int markupType, BufferedWriter out) throws IOException
{
String lineBreak="";;
String paraBreak;
int Err;
String AttributeValue;
String presentLong = null;
switch ( markupType )
{
case DigInfObj.HTML:
lineBreak = new String("
\n");
paraBreak = new String("
\n"); //System.out.println("ENTREI AQUI"); // out.write("Call Number: "); break; default: debug.dumpTrace("MarcDocument.presentLong(): unsupported markup type: using ASCII."); // FALL THROUGH. break; case DigInfObj.ASCII: case DigInfObj.ANSEL: lineBreak = System.getProperty("line.separator"); paraBreak = new String(System.getProperty("line.separator") + System.getProperty("line.separator")); break; } // out.write(fullID); //out.write(paraBreak); //out.write(lineBreak); if(title != null){ out.write(title); out.write(lineBreak); out.write(lineBreak); } if (author !=null) { out.write(author); out.write(lineBreak); out.write(lineBreak); } if (Abstract !=null) { out.write(Abstract); out.write(lineBreak); out.write(lineBreak); } if (displayID !=null) { out.write("" + displayID + ""); out.write(lineBreak); out.write(lineBreak); } //this.presentShort(markupType, out); //presentLong= OAMSString; //out.write(presentLong); return( ReturnCodes.OK ); } public boolean isValid() { return( true ); } public DigInfObj copy() { return null; } public String presentFull(int markupType) { StringWriter sw = new StringWriter(); BufferedWriter out = new BufferedWriter( sw ); int Err; try { if ( (Err = presentFull(markupType, out)) != ReturnCodes.OK ) return( null ); out.flush(); } catch( Exception e ) { return( null ); } return(sw.toString()); } public Vector attributes() { return null; } public Vector attributes(int markupType) { return null; } public Vector presentAttributes(int markupType) { return null; } public Object presentAttribute(int attrID, int markupType) { return null; } public int presentFull(int markupType, BufferedWriter out) throws IOException { return( ReturnCodes.NOT_YET_IMPLEMENTED ); } }