public class XFormParser
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private FormDef |
_f |
private org.kxml2.kdom.Document |
_instDoc |
private java.io.Reader |
_instReader |
private java.io.Reader |
_reader |
private org.kxml2.kdom.Document |
_xmldoc |
private java.util.List<TreeReference> |
actionTargets |
private static IAnswerResolver |
answerResolver |
private static java.lang.String |
APPEARANCE_ATTR |
private static java.lang.String |
BIND_ATTR |
private java.util.List<DataBinding> |
bindings |
private java.util.HashMap<java.lang.String,DataBinding> |
bindingsByID |
private static int |
CONTAINER_GROUP |
private static int |
CONTAINER_REPEAT |
private java.lang.String |
defaultNamespace |
private static java.lang.String |
FORM_ATTR |
private static java.util.HashMap<java.lang.String,IElementHandler> |
groupLevelHandlers |
private static java.lang.String |
ID_ATTR |
private java.util.List<java.lang.String> |
instanceNodeIdStrs |
private java.util.List<org.kxml2.kdom.Element> |
instanceNodes |
private java.util.List<ItemsetBinding> |
itemsets |
private static java.lang.String |
ITEXT_CLOSE |
private static java.lang.String |
ITEXT_OPEN |
private java.util.List<java.lang.String> |
itextKnownForms |
private static java.lang.String |
LABEL_ELEMENT |
private org.kxml2.kdom.Element |
mainInstanceNode |
private boolean |
modelFound |
private static PrototypeFactoryDeprecated |
modelPrototypes |
private java.util.List<java.lang.String> |
namedActions |
static java.lang.String |
NAMESPACE_HTML |
static java.lang.String |
NAMESPACE_JAVAROSA |
private static java.lang.String |
NODESET_ATTR |
private static java.lang.String |
REF_ATTR |
private java.util.List<TreeReference> |
repeats |
private FormInstance |
repeatTree |
(package private) XFormParserReporter |
reporter |
private static java.lang.String |
SELECT |
private java.util.List<TreeReference> |
selectMultis |
private static java.lang.String |
SELECTONE |
private java.util.List<TreeReference> |
selectOnes |
private int |
serialQuestionID |
(package private) CacheTable<java.lang.String> |
stringCache |
private java.util.HashMap<java.lang.String,IElementHandler> |
structuredActions |
private static java.util.List<SubmissionParser> |
submissionParsers |
private static java.util.HashMap<java.lang.String,IElementHandler> |
topLevelHandlers |
private static java.util.HashMap<java.lang.String,java.lang.Integer> |
typeMappings |
private static java.lang.String |
VALUE |
Constructor and Description |
---|
XFormParser(org.kxml2.kdom.Document doc) |
XFormParser(org.kxml2.kdom.Document form,
org.kxml2.kdom.Document instance) |
XFormParser(java.io.Reader reader) |
XFormParser(java.io.Reader form,
java.io.Reader instance) |
Modifier and Type | Method and Description |
---|---|
protected void |
addBinding(DataBinding binding) |
static void |
addDataType(java.lang.String type,
int dataType) |
private void |
addMainInstanceToFormDef(org.kxml2.kdom.Element e,
FormInstance instanceModel) |
static void |
addModelPrototype(int type,
TreeElement element) |
private void |
applyControlProperties(FormInstance instance) |
private void |
applyInstanceProperties(FormInstance instance) |
private static void |
attachBind(TreeElement node,
DataBinding bind) |
private static void |
attachBindGeneral(DataBinding bind) |
void |
attachReporter(XFormParserReporter reporter) |
private static Recalculate |
buildCalculate(java.lang.String xpath,
IDataReference contextRef) |
private Condition |
buildCondition(java.lang.String xpath,
java.lang.String type,
IDataReference contextRef) |
static TreeElement |
buildInstanceStructure(org.kxml2.kdom.Element node,
TreeElement parent) |
static TreeElement |
buildInstanceStructure(org.kxml2.kdom.Element node,
TreeElement parent,
java.lang.String instanceName,
java.lang.String docnamespace) |
private static FormInstance |
buildRepeatTree(java.util.List<TreeReference> repeatRefs,
java.lang.String topLevelName) |
private void |
checkDependencyCycles() |
private static void |
checkDuplicateNodesAreRepeatable(TreeElement node) |
private void |
checkHomogeneity(FormInstance instance) |
private static void |
checkRepeatsForTemplate(FormInstance instance,
FormInstance repeatTree,
java.util.List<TreeReference> missingTemplates) |
private static void |
checkRepeatsForTemplate(TreeElement repeatTreeNode,
TreeReference ref,
FormInstance instance,
java.util.List<TreeReference> missing) |
private static void |
collapseRepeatGroups(IFormElement fe) |
private void |
createMissingTemplates(FormInstance instance,
java.util.List<TreeReference> missingTemplates) |
private void |
flagRepeatables(FormInstance instance) |
private IDataReference |
getAbsRef(IDataReference ref,
IFormElement parent) |
private static IDataReference |
getAbsRef(IDataReference ref,
TreeReference parentRef) |
static IAnswerResolver |
getAnswerResolver() |
private int |
getDataType(java.lang.String type) |
private TreeReference |
getFormElementRef(IFormElement fe) |
private java.lang.String |
getLabel(org.kxml2.kdom.Element e) |
private java.util.List<TreeReference> |
getRepeatableRefs() |
static java.lang.String |
getVagueElementPrintout(org.kxml2.kdom.Element e,
int maxDepth) |
static java.lang.String |
getVagueLocation(org.kxml2.kdom.Element e) |
static org.kxml2.kdom.Document |
getXMLDocument(java.io.Reader reader) |
static org.kxml2.kdom.Document |
getXMLDocument(java.io.Reader reader,
CacheTable<java.lang.String> stringCache) |
static java.lang.String |
getXMLText(org.kxml2.kdom.Node n,
boolean trim) |
static java.lang.String |
getXMLText(org.kxml2.kdom.Node node,
int i,
boolean trim)
reads all subsequent text nodes and returns the combined string
needed because escape sequences are parsed into consecutive text nodes
e.g.
|
static QuestionDef |
ghettoGetQuestionDef(int dataType,
FormDef f,
TreeReference ref) |
private boolean |
hasITextMapping(java.lang.String textID,
java.lang.String locale) |
private boolean |
hasSpecialFormMapping(java.lang.String textID,
java.lang.String locale)
Tests whether or not there is any form (default or special) for the provided
text id.
|
private static void |
initProcessingRules() |
private void |
initState() |
private static void |
initTypeMappings() |
private static void |
loadInstanceData(org.kxml2.kdom.Element node,
TreeElement cur,
FormDef f) |
private static java.util.HashMap<java.lang.String,java.lang.String> |
loadNamespaces(org.kxml2.kdom.Element e,
FormInstance tree) |
static void |
loadXmlInstance(FormDef f,
org.kxml2.kdom.Document xmlInst)
Load a compatible xml instance into FormDef f
call before f.initialize()!
|
void |
loadXmlInstance(FormDef f,
java.io.Reader xmlReader) |
FormDef |
parse() |
protected void |
parseBind(org.kxml2.kdom.Element e) |
protected QuestionDef |
parseControl(IFormElement parent,
org.kxml2.kdom.Element e,
int controlType) |
protected QuestionDef |
parseControl(IFormElement parent,
org.kxml2.kdom.Element e,
int controlType,
java.util.List<java.lang.String> additionalUsedAtts) |
private void |
parseDoc() |
private void |
parseElement(org.kxml2.kdom.Element e,
java.lang.Object parent,
java.util.HashMap<java.lang.String,IElementHandler> handlers) |
private void |
parseGroup(IFormElement parent,
org.kxml2.kdom.Element e,
int groupType) |
private void |
parseGroupLabel(GroupDef g,
org.kxml2.kdom.Element e) |
private void |
parseHint(QuestionDef q,
org.kxml2.kdom.Element e) |
private FormInstance |
parseInstance(org.kxml2.kdom.Element e,
boolean isMainInstance) |
private void |
parseItem(QuestionDef q,
org.kxml2.kdom.Element e) |
private void |
parseItemset(QuestionDef q,
org.kxml2.kdom.Element e,
IFormElement qparent) |
private void |
parseIText(org.kxml2.kdom.Element itext) |
private void |
parseMeta(org.kxml2.kdom.Element e) |
private void |
parseModel(org.kxml2.kdom.Element e) |
private void |
parseNamedAction(org.kxml2.kdom.Element action) |
private java.lang.String |
parseOutput(org.kxml2.kdom.Element e) |
private void |
parseQuestionLabel(QuestionDef q,
org.kxml2.kdom.Element e) |
private void |
parseSetValueAction(FormDef form,
org.kxml2.kdom.Element e) |
private void |
parseSubmission(org.kxml2.kdom.Element submission) |
private void |
parseTextHandle(TableLocaleSource l,
org.kxml2.kdom.Element text) |
private void |
parseTitle(org.kxml2.kdom.Element e) |
private void |
parseTranslation(Localizer l,
org.kxml2.kdom.Element trans) |
protected QuestionDef |
parseUpload(IFormElement parent,
org.kxml2.kdom.Element e,
int controlUpload) |
protected void |
processAdditionalAttributes(QuestionDef question,
org.kxml2.kdom.Element e,
java.util.List<java.lang.String> usedAtts) |
private void |
processRepeats(FormInstance instance) |
protected DataBinding |
processStandardBindAttributes(java.util.List<java.lang.String> usedAtts,
org.kxml2.kdom.Element e) |
private void |
processTemplates(FormInstance instance) |
private void |
recurseForOutput(org.kxml2.kdom.Element e) |
static void |
registerControlType(java.lang.String type,
int typeId) |
static void |
registerHandler(java.lang.String type,
IElementHandler handler) |
private void |
removeInvalidTemplates(FormInstance instance,
FormInstance repeatTree) |
private boolean |
removeInvalidTemplates(TreeElement instanceNode,
TreeElement repeatTreeNode,
boolean templateAllowed) |
static FormInstance |
restoreDataModel(byte[] data,
java.lang.Class restorableType) |
static FormInstance |
restoreDataModel(org.kxml2.kdom.Document doc,
java.lang.Class restorableType) |
static FormInstance |
restoreDataModel(java.io.InputStream input,
java.lang.Class restorableType) |
private void |
saveInstanceNode(org.kxml2.kdom.Element instance) |
static void |
setAnswerResolver(IAnswerResolver answerResolver) |
void |
setStringCache(CacheTable<java.lang.String> stringCache) |
private static void |
staticInit() |
private static void |
trimRepeatChildren(TreeElement node) |
private void |
verifyActions(FormInstance instance) |
private void |
verifyBindings(FormInstance instance) |
private void |
verifyControlBindings(IFormElement fe,
FormInstance instance,
java.util.List<java.lang.String> errors) |
private void |
verifyItemsetBindings(FormInstance instance) |
private void |
verifyItemsetSrcDstCompatibility(FormInstance instance) |
private void |
verifyRepeatMemberBindings(IFormElement fe,
FormInstance instance,
GroupDef parentRepeat) |
private void |
verifyTextMappings(java.lang.String textID,
java.lang.String type,
boolean allowSubforms) |
private static final java.lang.String ID_ATTR
private static final java.lang.String FORM_ATTR
private static final java.lang.String APPEARANCE_ATTR
private static final java.lang.String NODESET_ATTR
private static final java.lang.String LABEL_ELEMENT
private static final java.lang.String VALUE
private static final java.lang.String ITEXT_CLOSE
private static final java.lang.String ITEXT_OPEN
private static final java.lang.String BIND_ATTR
private static final java.lang.String REF_ATTR
private static final java.lang.String SELECTONE
private static final java.lang.String SELECT
public static final java.lang.String NAMESPACE_JAVAROSA
public static final java.lang.String NAMESPACE_HTML
private static final int CONTAINER_GROUP
private static final int CONTAINER_REPEAT
private static java.util.HashMap<java.lang.String,IElementHandler> topLevelHandlers
private static java.util.HashMap<java.lang.String,IElementHandler> groupLevelHandlers
private static java.util.HashMap<java.lang.String,java.lang.Integer> typeMappings
private static PrototypeFactoryDeprecated modelPrototypes
private static java.util.List<SubmissionParser> submissionParsers
private java.io.Reader _reader
private org.kxml2.kdom.Document _xmldoc
private FormDef _f
private java.io.Reader _instReader
private org.kxml2.kdom.Document _instDoc
private boolean modelFound
private java.util.HashMap<java.lang.String,DataBinding> bindingsByID
private java.util.List<DataBinding> bindings
private java.util.List<TreeReference> actionTargets
private java.util.List<TreeReference> repeats
private java.util.List<ItemsetBinding> itemsets
private java.util.List<TreeReference> selectOnes
private java.util.List<TreeReference> selectMultis
private org.kxml2.kdom.Element mainInstanceNode
private java.util.List<org.kxml2.kdom.Element> instanceNodes
private java.util.List<java.lang.String> instanceNodeIdStrs
private java.lang.String defaultNamespace
private java.util.List<java.lang.String> itextKnownForms
private java.util.List<java.lang.String> namedActions
private java.util.HashMap<java.lang.String,IElementHandler> structuredActions
private FormInstance repeatTree
private int serialQuestionID
private static IAnswerResolver answerResolver
XFormParserReporter reporter
CacheTable<java.lang.String> stringCache
public XFormParser(java.io.Reader reader)
public XFormParser(org.kxml2.kdom.Document doc)
public XFormParser(java.io.Reader form, java.io.Reader instance)
public XFormParser(org.kxml2.kdom.Document form, org.kxml2.kdom.Document instance)
public static IAnswerResolver getAnswerResolver()
public static void setAnswerResolver(IAnswerResolver answerResolver)
private static void staticInit()
private static void initProcessingRules()
private static void initTypeMappings()
private void initState()
public void attachReporter(XFormParserReporter reporter)
public FormDef parse() throws java.io.IOException
java.io.IOException
public static org.kxml2.kdom.Document getXMLDocument(java.io.Reader reader) throws java.io.IOException
java.io.IOException
public static org.kxml2.kdom.Document getXMLDocument(java.io.Reader reader, CacheTable<java.lang.String> stringCache) throws java.io.IOException
java.io.IOException
private void parseDoc()
private void parseElement(org.kxml2.kdom.Element e, java.lang.Object parent, java.util.HashMap<java.lang.String,IElementHandler> handlers)
private void parseTitle(org.kxml2.kdom.Element e)
private void parseMeta(org.kxml2.kdom.Element e)
private void parseModel(org.kxml2.kdom.Element e)
private void parseNamedAction(org.kxml2.kdom.Element action)
private void parseSetValueAction(FormDef form, org.kxml2.kdom.Element e)
private void parseSubmission(org.kxml2.kdom.Element submission)
private void saveInstanceNode(org.kxml2.kdom.Element instance)
protected void processAdditionalAttributes(QuestionDef question, org.kxml2.kdom.Element e, java.util.List<java.lang.String> usedAtts)
protected QuestionDef parseUpload(IFormElement parent, org.kxml2.kdom.Element e, int controlUpload)
protected QuestionDef parseControl(IFormElement parent, org.kxml2.kdom.Element e, int controlType)
protected QuestionDef parseControl(IFormElement parent, org.kxml2.kdom.Element e, int controlType, java.util.List<java.lang.String> additionalUsedAtts)
private void parseQuestionLabel(QuestionDef q, org.kxml2.kdom.Element e)
private void parseGroupLabel(GroupDef g, org.kxml2.kdom.Element e)
private java.lang.String getLabel(org.kxml2.kdom.Element e)
private void recurseForOutput(org.kxml2.kdom.Element e)
private java.lang.String parseOutput(org.kxml2.kdom.Element e)
private void parseHint(QuestionDef q, org.kxml2.kdom.Element e)
private void parseItem(QuestionDef q, org.kxml2.kdom.Element e)
private void parseItemset(QuestionDef q, org.kxml2.kdom.Element e, IFormElement qparent)
private void parseGroup(IFormElement parent, org.kxml2.kdom.Element e, int groupType)
private TreeReference getFormElementRef(IFormElement fe)
private IDataReference getAbsRef(IDataReference ref, IFormElement parent)
private static IDataReference getAbsRef(IDataReference ref, TreeReference parentRef)
private static void collapseRepeatGroups(IFormElement fe)
private void parseIText(org.kxml2.kdom.Element itext)
private void parseTranslation(Localizer l, org.kxml2.kdom.Element trans)
private void parseTextHandle(TableLocaleSource l, org.kxml2.kdom.Element text)
private boolean hasITextMapping(java.lang.String textID, java.lang.String locale)
private void verifyTextMappings(java.lang.String textID, java.lang.String type, boolean allowSubforms)
private boolean hasSpecialFormMapping(java.lang.String textID, java.lang.String locale)
protected DataBinding processStandardBindAttributes(java.util.List<java.lang.String> usedAtts, org.kxml2.kdom.Element e)
protected void parseBind(org.kxml2.kdom.Element e)
private Condition buildCondition(java.lang.String xpath, java.lang.String type, IDataReference contextRef)
private static Recalculate buildCalculate(java.lang.String xpath, IDataReference contextRef) throws XPathSyntaxException
XPathSyntaxException
protected void addBinding(DataBinding binding)
private void addMainInstanceToFormDef(org.kxml2.kdom.Element e, FormInstance instanceModel)
private FormInstance parseInstance(org.kxml2.kdom.Element e, boolean isMainInstance)
private static java.util.HashMap<java.lang.String,java.lang.String> loadNamespaces(org.kxml2.kdom.Element e, FormInstance tree)
public static TreeElement buildInstanceStructure(org.kxml2.kdom.Element node, TreeElement parent)
public static TreeElement buildInstanceStructure(org.kxml2.kdom.Element node, TreeElement parent, java.lang.String instanceName, java.lang.String docnamespace)
private java.util.List<TreeReference> getRepeatableRefs()
private void processRepeats(FormInstance instance)
private void flagRepeatables(FormInstance instance)
private void processTemplates(FormInstance instance)
private static FormInstance buildRepeatTree(java.util.List<TreeReference> repeatRefs, java.lang.String topLevelName)
private static void checkRepeatsForTemplate(FormInstance instance, FormInstance repeatTree, java.util.List<TreeReference> missingTemplates)
private static void checkRepeatsForTemplate(TreeElement repeatTreeNode, TreeReference ref, FormInstance instance, java.util.List<TreeReference> missing)
private void removeInvalidTemplates(FormInstance instance, FormInstance repeatTree)
private boolean removeInvalidTemplates(TreeElement instanceNode, TreeElement repeatTreeNode, boolean templateAllowed)
private void createMissingTemplates(FormInstance instance, java.util.List<TreeReference> missingTemplates)
private static void trimRepeatChildren(TreeElement node)
private static void checkDuplicateNodesAreRepeatable(TreeElement node)
private void checkHomogeneity(FormInstance instance)
private void verifyBindings(FormInstance instance)
private void verifyActions(FormInstance instance)
private void verifyControlBindings(IFormElement fe, FormInstance instance, java.util.List<java.lang.String> errors)
private void verifyRepeatMemberBindings(IFormElement fe, FormInstance instance, GroupDef parentRepeat)
private void verifyItemsetBindings(FormInstance instance)
private void verifyItemsetSrcDstCompatibility(FormInstance instance)
private void applyInstanceProperties(FormInstance instance)
private static void attachBindGeneral(DataBinding bind)
private static void attachBind(TreeElement node, DataBinding bind)
private void applyControlProperties(FormInstance instance)
private static void loadInstanceData(org.kxml2.kdom.Element node, TreeElement cur, FormDef f)
public static QuestionDef ghettoGetQuestionDef(int dataType, FormDef f, TreeReference ref)
private void checkDependencyCycles()
public void loadXmlInstance(FormDef f, java.io.Reader xmlReader) throws java.io.IOException
java.io.IOException
public static void loadXmlInstance(FormDef f, org.kxml2.kdom.Document xmlInst)
private int getDataType(java.lang.String type)
public static void addModelPrototype(int type, TreeElement element)
public static void addDataType(java.lang.String type, int dataType)
public static void registerControlType(java.lang.String type, int typeId)
public static void registerHandler(java.lang.String type, IElementHandler handler)
public static java.lang.String getXMLText(org.kxml2.kdom.Node n, boolean trim)
public static java.lang.String getXMLText(org.kxml2.kdom.Node node, int i, boolean trim)
public static FormInstance restoreDataModel(java.io.InputStream input, java.lang.Class restorableType) throws java.io.IOException
java.io.IOException
public static FormInstance restoreDataModel(org.kxml2.kdom.Document doc, java.lang.Class restorableType)
public static FormInstance restoreDataModel(byte[] data, java.lang.Class restorableType)
public static java.lang.String getVagueLocation(org.kxml2.kdom.Element e)
public static java.lang.String getVagueElementPrintout(org.kxml2.kdom.Element e, int maxDepth)
public void setStringCache(CacheTable<java.lang.String> stringCache)