package org.anodyneos.xpImpl.tld;
import org.anodyneos.commons.xml.sax.BooleanProcessor;
import org.anodyneos.commons.xml.sax.CDATAProcessor;
import org.anodyneos.commons.xml.sax.ElementProcessor;
import org.anodyneos.xp.tagext.TagAttributeInfo;
import org.xml.sax.SAXException;
class ProcessorAttribute extends TLDProcessor {
private TagAttributeInfo attributeInfo;
private CDATAProcessor nameProcessor;
private CDATAProcessor descriptionProcessor;
private CDATAProcessor typeProcessor;
private BooleanProcessor requiredProcessor;
private BooleanProcessor requestTimeOKProcessor;
private BooleanProcessor fragmentProcessor;
public static final String E_NAME = "name";
public static final String E_DESCRIPTION = "description";
public static final String E_TYPE = "type";
public static final String E_REQUIRED = "required";
public static final String E_REQUEST_TIME_OK = "request-time-ok";
public static final String E_FRAGMENT = "fragment";
public ProcessorAttribute(TLDContext ctx) {
super(ctx);
nameProcessor = new CDATAProcessor(ctx);
descriptionProcessor = new CDATAProcessor(ctx);
typeProcessor = new CDATAProcessor(ctx);
requiredProcessor = new BooleanProcessor(ctx);
requestTimeOKProcessor = new BooleanProcessor(ctx);
fragmentProcessor = new BooleanProcessor(ctx);
}
public ElementProcessor getProcessorFor(String uri, String localName, String qName)
throws SAXException {
if (E_NAME.equals(localName)) {
return nameProcessor;
} else if (E_DESCRIPTION.equals(localName)) {
return descriptionProcessor;
} else if (E_TYPE.equals(localName)) {
return typeProcessor;
} else if (E_REQUIRED.equals(localName)) {
return requiredProcessor;
} else if (E_REQUEST_TIME_OK.equals(localName)) {
return requestTimeOKProcessor;
} else if (E_FRAGMENT.equals(localName)) {
return fragmentProcessor;
} else {
return super.getProcessorFor(uri, localName, qName);
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
String type = typeProcessor.getCDATA();
type = (null == type || "".equals(type)) ? "java.lang.String" : type;
boolean required = requiredProcessor.getBoolean() == null ? false : requiredProcessor
.getBoolean().booleanValue();
boolean rtok = requestTimeOKProcessor.getBoolean() == null ? false : requestTimeOKProcessor
.getBoolean().booleanValue();
boolean isFragment = fragmentProcessor.getBoolean() == null ? false : fragmentProcessor
.getBoolean().booleanValue();
if (isFragment && !"org.anodyneos.xp.tagext.XpFragment".equals(type)) {
throw new SAXException(
"Attribute for fragment must be type org.anodyneos.xp.tagext.XpFragment");
}
attributeInfo = new TagAttributeInfo(
nameProcessor.getCDATA(),
descriptionProcessor.getCDATA(),
type, required, rtok, isFragment);
nameProcessor = null;
descriptionProcessor = null;
typeProcessor = null;
requiredProcessor = null;
requestTimeOKProcessor = null;
}
public TagAttributeInfo getTagAttributeInfo() {
return attributeInfo;
}
}