package org.atomnuke.atom.io.reader.sax;
import org.atomnuke.atom.model.builder.AuthorBuilder;
import org.atomnuke.atom.model.builder.CategoryBuilder;
import org.atomnuke.atom.model.builder.EntryBuilder;
import org.atomnuke.atom.model.builder.GeneratorBuilder;
import org.atomnuke.atom.model.builder.IconBuilder;
import org.atomnuke.atom.model.builder.IdBuilder;
import org.atomnuke.atom.model.builder.LinkBuilder;
import org.atomnuke.atom.model.builder.LogoBuilder;
import org.atomnuke.atom.model.builder.RightsBuilder;
import org.atomnuke.atom.model.builder.SourceBuilder;
import org.atomnuke.atom.model.builder.SubtitleBuilder;
import org.atomnuke.atom.model.builder.TitleBuilder;
import org.atomnuke.atom.model.builder.UpdatedBuilder;
import org.atomnuke.atom.xml.AtomElement;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
*
* @author zinic
*/
public class SourceHandler extends AtomHandler {
public SourceHandler(AtomHandler delegate) {
super(delegate);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
final AtomElement currentElement = AtomElement.find(localName, AtomElement.SOURCE_ELEMENTS);
if (currentElement == null) {
return;
}
handleCommonElement(this, contextManager, currentElement, attributes);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
final AtomElement currentElement = contextManager.peek().getElementDef();
if (!currentElement.elementName().equals(localName)) {
return;
}
switch (currentElement) {
case SOURCE:
endSource(this, contextManager);
break;
case AUTHOR:
endAuthor(contextManager);
break;
case GENERATOR:
endGenerator(contextManager);
break;
case UPDATED:
endUpdated(contextManager);
break;
case LINK:
endLink(contextManager);
break;
case CATEGORY:
endCategory(contextManager);
break;
case ID:
endId(contextManager);
break;
case ICON:
endIcon(contextManager);
break;
case LOGO:
endLogo(contextManager);
break;
case RIGHTS:
endRights(contextManager);
break;
case TITLE:
endTitle(contextManager);
break;
case SUBTITLE:
endSubtitle(contextManager);
break;
case NAME:
case URI:
case EMAIL:
contextManager.pop();
break;
}
}
private static void endSource(SourceHandler self, DocumentContextManager contextManager) {
final HandlerContext<SourceBuilder> sourceBuilder = contextManager.pop(SourceBuilder.class);
contextManager.peek(EntryBuilder.class).builder().setSource(sourceBuilder.builder().build());
self.releaseToParent();
}
private static void endAuthor(DocumentContextManager contextManager) {
final HandlerContext<AuthorBuilder> personContext = contextManager.pop(AuthorBuilder.class);
contextManager.peek(SourceBuilder.class).builder().addAuthor(personContext.builder().build());
}
private static void endId(DocumentContextManager contextManager) {
final HandlerContext<IdBuilder> idContext = contextManager.pop(IdBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setId(idContext.builder().build());
}
private static void endLogo(DocumentContextManager contextManager) {
final HandlerContext<LogoBuilder> logoContext = contextManager.pop(LogoBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setLogo(logoContext.builder().build());
}
private static void endIcon(DocumentContextManager contextManager) {
final HandlerContext<IconBuilder> iconContext = contextManager.pop(IconBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setIcon(iconContext.builder().build());
}
private static void endUpdated(DocumentContextManager contextManager) {
final HandlerContext<UpdatedBuilder> updatedContext = contextManager.pop(UpdatedBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setUpdated(updatedContext.builder().build());
}
private static void endCategory(DocumentContextManager contextManager) {
final HandlerContext<CategoryBuilder> category = contextManager.pop(CategoryBuilder.class);
contextManager.peek(SourceBuilder.class).builder().addCategory(category.builder().build());
}
private static void endLink(DocumentContextManager contextManager) {
final HandlerContext<LinkBuilder> link = contextManager.pop(LinkBuilder.class);
contextManager.peek(SourceBuilder.class).builder().addLink(link.builder().build());
}
private static void endGenerator(DocumentContextManager contextManager) {
final HandlerContext<GeneratorBuilder> generatorContext = contextManager.pop(GeneratorBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setGenerator(generatorContext.builder().build());
}
private static void endRights(DocumentContextManager contextManager) {
final HandlerContext<RightsBuilder> textConstructContext = contextManager.pop(RightsBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setRights(textConstructContext.builder().build());
}
private static void endTitle(DocumentContextManager contextManager) {
final HandlerContext<TitleBuilder> textConstructContext = contextManager.pop(TitleBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setTitle(textConstructContext.builder().build());
}
private static void endSubtitle(DocumentContextManager contextManager) {
final HandlerContext<SubtitleBuilder> textConstructContext = contextManager.pop(SubtitleBuilder.class);
contextManager.peek(SourceBuilder.class).builder().setSubtitle(textConstructContext.builder().build());
}
}