
org.hisrc.jsonix.Jsonix.Model.AbstractElementsPropertyInfo.js Maven / Gradle / Ivy
Jsonix.Model.AbstractElementsPropertyInfo = Jsonix.Class(Jsonix.Binding.Unmarshalls.Element, Jsonix.Binding.Unmarshalls.WrapperElement, Jsonix.Model.PropertyInfo, {
wrapperElementName : null,
allowDom : false,
allowTypedObject : true,
mixed : false,
initialize : function(mapping) {
Jsonix.Util.Ensure.ensureObject(mapping);
Jsonix.Model.PropertyInfo.prototype.initialize.apply(this, [ mapping ]);
var wen = mapping.wrapperElementName||mapping.wen||undefined;
if (Jsonix.Util.Type.isObject(wen)) {
this.wrapperElementName = Jsonix.XML.QName.fromObject(wen);
} else if (Jsonix.Util.Type.isString(wen)) {
this.wrapperElementName = new Jsonix.XML.QName(this.defaultElementNamespaceURI, wen);
} else {
this.wrapperElementName = null;
}
},
unmarshal : function(context, input, scope) {
var result = null;
var that = this;
var callback = function(value) {
if (that.collection) {
if (result === null) {
result = [];
}
result.push(value);
} else {
if (result === null) {
result = value;
} else {
// TODO Report validation error
throw new Error("Value already set.");
}
}
};
if (Jsonix.Util.Type.exists(this.wrapperElementName)) {
this.unmarshalWrapperElement(context, input, scope, callback);
} else {
this.unmarshalElement(context, input, scope, callback);
}
return result;
},
marshal : function(value, context, output, scope) {
if (!Jsonix.Util.Type.exists(value)) {
// Do nothing
return;
}
if (Jsonix.Util.Type.exists(this.wrapperElementName)) {
output.writeStartElement(this.wrapperElementName);
}
if (!this.collection) {
this.marshalElement(value, context, output, scope);
} else {
Jsonix.Util.Ensure.ensureArray(value);
// TODO Exception if not array
for ( var index = 0; index < value.length; index++) {
var item = value[index];
// TODO Exception if item does not exist
this.marshalElement(item, context, output, scope);
}
}
if (Jsonix.Util.Type.exists(this.wrapperElementName)) {
output.writeEndElement();
}
},
convertFromTypedNamedValue : function(elementValue, context, input, scope) {
return elementValue.value;
},
buildStructure : function(context, structure) {
Jsonix.Util.Ensure.ensureObject(structure);
if (Jsonix.Util.Type.exists(structure.value)) {
// TODO better exception
throw new Error("The structure already defines a value property.");
} else if (!Jsonix.Util.Type.exists(structure.elements)) {
structure.elements = {};
}
if (Jsonix.Util.Type.exists(this.wrapperElementName)) {
structure.elements[this.wrapperElementName.key] = this;
} else {
this.buildStructureElements(context, structure);
}
},
buildStructureElements : function(context, structure) {
throw new Error("Abstract method [buildStructureElements].");
},
CLASS_NAME : 'Jsonix.Model.AbstractElementsPropertyInfo'
});
© 2015 - 2024 Weber Informatics LLC | Privacy Policy