public StructureDocument build()

in SdmxStructureParser/src/main/java/org/sdmxsource/sdmx/structureparser/builder/xmlBeans/v2/StructureXmlBeanBuilder.java [99:264]


    public StructureDocument build(SdmxBeans buildFrom) throws SdmxException {
        StructureDocument doc = StructureDocument.Factory.newInstance();

        StructureType returnType = doc.addNewStructure();

        // HEADER
        HeaderType headerType = null;
        if (buildFrom.getHeader() != null) {
            headerType = structureHeaderXmlBeanBuilder.build(buildFrom.getHeader());
            returnType.setHeader(headerType);
        } else {
            headerType = returnType.addNewHeader();
            V2Helper.setHeader(headerType, buildFrom);
        }

        // TOP LEVEL STRUCTURES ELEMENT
        Set<CategorisationBean> categorisations = buildFrom.getCategorisations();

        //GET CATEGORY SCHEMES
        if (buildFrom.getCategorySchemes().size() > 0) {
            CategorySchemesType catSchemesType = returnType.addNewCategorySchemes();
            for (CategorySchemeBean cateogrySchemeBean : buildFrom.getCategorySchemes()) {
                Set<CategorisationBean> matchingCategorisations = new HashSet<CategorisationBean>();
                for (CategorisationBean cat : categorisations) {
                    if (cat.isExternalReference().isTrue()) {
                        continue;
                    }
                    if (MaintainableUtil.match(cateogrySchemeBean, cat.getCategoryReference())) {
                        matchingCategorisations.add(cat);
                    }
                }
                catSchemesType.getCategorySchemeList().add(build(cateogrySchemeBean, categorisations));
            }
        }


        //GET CODELISTS
        if (buildFrom.getCodelists().size() > 0) {
            CodeListsType codeListsType = returnType.addNewCodeLists();
            for (CodelistBean codelistBean : buildFrom.getCodelists()) {
                codeListsType.getCodeListList().add(build(codelistBean));
            }
        }


        //CONCEPT SCHEMES
        if (buildFrom.getConceptSchemes().size() > 0) {
            ConceptsType conceptsType = returnType.addNewConcepts();
            for (ConceptSchemeBean conceptSchemeBean : buildFrom.getConceptSchemes()) {
                conceptsType.getConceptSchemeList().add(build(conceptSchemeBean));
            }
        }


        //DATAFLOWS
        if (buildFrom.getDataflows().size() > 0) {
            DataflowsType dataflowsType = returnType.addNewDataflows();
            for (DataflowBean currentBean : buildFrom.getDataflows()) {
                dataflowsType.getDataflowList().add(build(currentBean, getCategorisations(currentBean, categorisations)));
            }
        }


        //HIERARCIC CODELIST
        if (buildFrom.getHierarchicalCodelists().size() > 0) {
            HierarchicalCodelistsType hierarchicalCodelistsType = returnType.addNewHierarchicalCodelists();
            for (HierarchicalCodelistBean currentBean : buildFrom.getHierarchicalCodelists()) {
                hierarchicalCodelistsType.getHierarchicalCodelistList().add(build(currentBean));
            }
        }


        //KEY FAMILY
        if (buildFrom.getDataStructures().size() > 0) {
            KeyFamiliesType keyFamiliesType = returnType.addNewKeyFamilies();
            for (DataStructureBean currentBean : buildFrom.getDataStructures()) {
                keyFamiliesType.getKeyFamilyList().add(build(currentBean));
            }
        }


        //METADATA FLOW
        if (buildFrom.getMetadataflows().size() > 0) {
            MetadataflowsType metadataflowsType = returnType.addNewMetadataflows();
            for (MetadataFlowBean currentBean : buildFrom.getMetadataflows()) {
                metadataflowsType.getMetadataflowList().add(build(currentBean, getCategorisations(currentBean, categorisations)));
            }
        }

        //METADATA STRUCTURE
        if (buildFrom.getMetadataStructures().size() > 0) {
            MetadataStructureDefinitionsType msdsType = returnType.addNewMetadataStructureDefinitions();
            for (MetadataStructureDefinitionBean currentBean : buildFrom.getMetadataStructures()) {
                msdsType.getMetadataStructureDefinitionList().add(build(currentBean));
            }
        }

        //ORGAISATION SCHEME
        if (buildFrom.getOrganisationUnitSchemes().size() > 0) {
            throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, SDMX_STRUCTURE_TYPE.ORGANISATION_UNIT_SCHEME.getType());
        }

        OrganisationSchemesType orgSchemesType = null;

        //AGENCY SCHEMES
        if (buildFrom.getAgenciesSchemes().size() > 0) {
            orgSchemesType = returnType.addNewOrganisationSchemes();
            for (AgencySchemeBean currentBean : buildFrom.getAgenciesSchemes()) {
                orgSchemesType.getOrganisationSchemeList().add(organisationSchemeXmlBeanBuilder.build(currentBean));
            }
        }

        //DATA CONSUMER SCHEMES
        if (buildFrom.getDataConsumerSchemes().size() > 0) {
            if (orgSchemesType == null) {
                orgSchemesType = returnType.addNewOrganisationSchemes();
            }
            for (DataConsumerSchemeBean currentBean : buildFrom.getDataConsumerSchemes()) {
                orgSchemesType.getOrganisationSchemeList().add(organisationSchemeXmlBeanBuilder.build(currentBean));
            }
        }

        //DATA PROVIDER SCHEMES
        if (buildFrom.getDataProviderSchemes().size() > 0) {
            if (orgSchemesType == null) {
                orgSchemesType = returnType.addNewOrganisationSchemes();
            }
            for (DataProviderSchemeBean currentBean : buildFrom.getDataProviderSchemes()) {
                orgSchemesType.getOrganisationSchemeList().add(organisationSchemeXmlBeanBuilder.build(currentBean));
            }
        }

        //PROCESSES
        if (buildFrom.getProcesses().size() > 0) {
            ProcessesType processesType = returnType.addNewProcesses();
            for (ProcessBean currentBean : buildFrom.getProcesses()) {
                processesType.getProcessList().add(build(currentBean));
            }
        }

        //STRUCTURE SETS
        if (buildFrom.getStructureSets().size() > 0) {
            StructureSetsType structureSetsType = returnType.addNewStructureSets();
            for (StructureSetBean currentBean : buildFrom.getStructureSets()) {
                structureSetsType.getStructureSetList().add(build(currentBean));
            }
        }

        //REPORTING TAXONOMIES
        if (buildFrom.getReportingTaxonomys().size() > 0) {
            ReportingTaxonomiesType reportingTaxonomiesType = returnType.addNewReportingTaxonomies();
            for (ReportingTaxonomyBean currentBean : buildFrom.getReportingTaxonomys()) {
                reportingTaxonomiesType.getReportingTaxonomyList().add(build(currentBean));
            }
        }
        if (buildFrom.getAttachmentConstraints().size() > 0) {
            throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, "Attachment Constraint at SMDX v2.0 - please use SDMX v2.1");
        }
        if (buildFrom.getContentConstraintBeans().size() > 0) {
            throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, "Content Constraint at SMDX v2.0 - please use SDMX v2.1");
        }
        if (buildFrom.getMetadataStructures().size() > 0) {
            throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, "Metadata Structure Definition at SMDX v2.0 - please use SDMX v2.1");
        }
        return doc;
    }