public Handler<?> startTag(String aQName, Attributes anAttributes, Context aCtx) { if (text != null) { text.complete(aCtx); } if (tags == null) { return getIgnore(); } for (TagHandler<?> _h : tags) { if (_h.handlesTag(aQName)) { return _h.moveDown(aQName, anAttributes, aCtx); } } return getIgnore(); }
@Override public Handler<?> startTag(String aQName, Attributes anAttributes, Context aCtx) { if (root.handlesTag(aQName)) { return root.moveDown(aQName, anAttributes, aCtx); } else { throw new InvalidStateException("unexpected root element: " + aQName); } }
@Override public void characters(char[] aChars, int aStart, int aLength) throws SAXException { handler = handler.characters(aChars, aStart, aLength, context); } }
public TagHandler<R> characters(char[] aChars, int aStart, int aLength, Context aContext) { if (tags == null && text == null) { text = new TextHandler(tagName); } if (text != null) { text.handle(aChars, aStart, aLength, aContext); } return this; }
public TagHandler<R> with(AttributesHandler anAttributes, TagHandler<?>... aTags) { attributes = anAttributes; return to(aTags); }
private Handler<R> getIgnore() { if (ignore == null) { ignore = new IgnoreHandler<R>(this); return ignore; } else { return ignore; } }
public SAXLegacyDocumentReader<T> to(AttributesHandler anAttributes) { root.with(anAttributes); return this; }
public TagHandler<R> to(TagHandler<?>... aTags) { tags = aTags; for (int i=0; i<aTags.length; i++) { tags[i].setParent(this); } return this; }
@Override public void startElement( String aUri, String aLocalName, String aQName, Attributes anAttributes) throws SAXException { handler = handler.startTag(aQName, anAttributes, context); }
@Override public void endElement( String aUri, String aLocalName, String aQName ) throws SAXException { handler = handler.moveUp(aQName, context); }
@Override public Handler<?> characters(char[] aChars, int aStart, int aLength, Context aContext) { return root.characters(aChars, aStart, aLength, aContext); } }
public void setParent(TagHandler<?> aParent) { if ((parent != null) && (parent != this)) throw new InvalidStateException("Parent is already set!"); parent = aParent; }
private ContextMutator getMutator(Class<?> aFor, Class<?> aWith, String aTagName) { if (mutator == null) { mutator = new ContextMutator(aFor, aWith, aTagName); } return mutator; }
public static <R> TagHandler<R> tag(String aTagName, Class<R> aClass) { return new TagHandler<R>(aTagName, aClass); }
public TagHandler<R> withPCDataMappedTo(String aFieldName) { text = new TextHandler(aFieldName); return this; }
@SuppressWarnings("unchecked") public R getResult() { return (R) context.getResult(); }
public void prepare(StringConverter<?>... aConverters) { context = new Context(aConverters); handler = root; }
public SAXLegacyDocumentReader<T> to(TagHandler<?>... aHandlers) { root.to(aHandlers); return this; }
@Override public Handler<?> startTag(String aQName, Attributes anAttributes, Context aCtx) { if (child == null) { child = new IgnoreHandler<T>(this); } return child; }
public SAXLegacyDocumentReader<T> to(AttributesHandler anAttributes, TagHandler<?>... aHandlers) { root.with(anAttributes, aHandlers); return this; }