package openadk.library.impl.surrogates; import java.util.Calendar; import javax.xml.stream.XMLStreamReader; import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.jxpath.ri.model.NodePointer; import openadk.library.*; import openadk.util.XMLWriter; public class SIFTimeSurrogate extends AbstractRenderSurrogate implements RenderSurrogate { public SIFTimeSurrogate( ElementDef def ) { super( def ); } public void renderRaw(XMLWriter writer, SIFVersion version, Element o, SIFFormatter formatter) throws SIFException { String elementName = fElementDef.name(); SIFTime time = (SIFTime)o.getSIFValue(); if( time.getValue() != null ){ writeSIFTime( writer, formatter, elementName, time.getValue() ); } } public static void writeSIFTime( XMLWriter writer, SIFFormatter formatter, String elementName, Calendar time ) { String xmlTime = formatter.toTimeString( time ); writer.tab(); writer.write( '<' ); writer.write( elementName ); // TODO: Write the proper time zone out writer.write( " Zone=\"UTC-06:00\"" ); writer.write( '>' ); writer.write( xmlTime ); writer.write( "</" ); writer.write( elementName ); writer.write( ">\r\n" ); } public boolean readRaw(XMLStreamReader reader, SIFVersion version, SIFElement parent, SIFFormatter formatter) throws ADKParsingException { String elementName = fElementDef.name(); if( !reader.getLocalName().equals( elementName ) ){ return false; } String value = consumeElementTextValue( reader, version ); if( value != null && value.length() > 0 ){ Calendar time = formatter.toTime( value ); SIFTime sifTime = new SIFTime( time ); parent.setField( sifTime.createField( parent, fElementDef ) ); } return true; } public NodePointer createChild(NodePointer parentPointer, SIFFormatter formatter, SIFVersion version, JXPathContext context ) { // TODO Auto-generated method stub return null; } public NodePointer createNodePointer(NodePointer parent, Element element, SIFVersion version) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see openadk.library.impl.surrogates.RenderSurrogate#getPath() */ public String getPath() { return "SIF_Time"; } }