in SdmxDataParser/src/main/java/org/sdmxsource/sdmx/dataparser/engine/reader/AbstractSdmxDataReaderEngine.java [178:268]
private HeaderBean processHeader() throws XMLStreamException {
//All the attributes required to build a header
Map<String, String> additionalAttributes = new HashMap<String, String>();
StructureReferenceBean dataProviderReference = null;
List<DatasetStructureReferenceBean> structure = new ArrayList<DatasetStructureReferenceBean>();
DATASET_ACTION datasetAction = null;
String id = null;
String datasetId = null;
Date embargoDate = null;
Date extracted = null;
Date prepared = null;
Date reportingBegin = null;
Date reportingEnd = null;
List<TextTypeWrapper> name = new ArrayList<TextTypeWrapper>();
List<TextTypeWrapper> source = new ArrayList<TextTypeWrapper>();
List<PartyBean> receiver = new ArrayList<PartyBean>();
PartyBean sender = null;
boolean test = false;
String dsdId = null;
String dsdAgency = null;
while (parser.hasNext()) {
int event = parser.next();
if (event == XMLStreamConstants.START_ELEMENT) {
String nodeName = parser.getLocalName();
if (nodeName.equals("ID")) {
id = parser.getElementText();
} else if (nodeName.equals("Test")) {
test = Boolean.valueOf(parser.getElementText());
} else if (nodeName.equals("Prepared")) {
prepared = DateUtil.formatDate(parser.getElementText(), true);
} else if (nodeName.equals("Sender")) {
sender = processParty(nodeName);
} else if (nodeName.equals("Receiver")) {
receiver.add(processParty(nodeName));
} else if (nodeName.equals("Name")) {
addItemToLangMap(name);
} else if (nodeName.equals("Structure")) {
structure.add(processStructure());
} else if (nodeName.equals("DataProvider")) {
dataProviderReference = parseStructureReference(nodeName, SDMX_STRUCTURE_TYPE.DATA_PROVIDER);
} else if (nodeName.equals("DataSetAction")) {
datasetAction = DATASET_ACTION.getAction(parser.getElementText());
} else if (nodeName.equals("DataSetID")) {
datasetId = parser.getElementText();
} else if (nodeName.equals("Extracted")) {
extracted = DateUtil.formatDate(parser.getElementText(), true);
} else if (nodeName.equals("ReportingBegin")) {
reportingBegin = DateUtil.formatDate(parser.getElementText(), true);
} else if (nodeName.equals("ReportingEnd")) {
reportingEnd = DateUtil.formatDate(parser.getElementText(), true);
} else if (nodeName.equals("EmbargoDate")) {
embargoDate = DateUtil.formatDate(parser.getElementText(), true);
} else if (nodeName.equals("Source")) {
addItemToLangMap(source);
} else if (nodeName.equals("KeyFamilyAgency")) {
dsdAgency = parser.getElementText();
} else if (nodeName.equals("KeyFamilyRef")) {
dsdId = parser.getElementText();
}
} else if (event == XMLStreamConstants.END_ELEMENT) {
String nodeName = parser.getLocalName();
if (nodeName.equals("Header")) {
if (dsdId != null) {
if (defaultDsd != null && dsdId.equals(defaultDsd.getId())) {
structure.add(new DatasetStructureReferenceBeanImpl(defaultDsd.asReference()));
} else {
structure.add(new DatasetStructureReferenceBeanImpl(new StructureReferenceBeanImpl(dsdAgency, dsdId, MaintainableBean.DEFAULT_VERSION, SDMX_STRUCTURE_TYPE.DSD)));
}
}
return new HeaderBeanImpl(additionalAttributes,
structure,
dataProviderReference,
datasetAction,
id,
datasetId,
embargoDate,
extracted,
prepared,
reportingBegin,
reportingEnd,
name,
source,
receiver,
sender,
test);
}
}
}
throw new IllegalArgumentException("Dataset does not contain a header");
}