=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeValue.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeValue.java 2011-12-09 18:08:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/attribute/AttributeValue.java 2012-03-07 12:10:37 +0000 @@ -27,13 +27,11 @@ package org.hisp.dhis.attribute; +import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.hisp.dhis.common.Dxf2Namespace; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.*; import java.io.Serializable; /** @@ -65,6 +63,8 @@ this.value = value; } + @XmlTransient + @JsonIgnore public int getId() { return id; @@ -82,6 +82,11 @@ return attribute.getUid(); } + public void setAttributeTypeRef( String uid ) + { + // this is just here so that we don't confuse Jackson (it will try and use setId which takes an integer) + } + @XmlAttribute( name = "name" ) @JsonProperty( value = "name" ) public String getAttributeName() @@ -89,6 +94,11 @@ return attribute.getName(); } + public void setAttributeName( String name ) + { + // this is just here so that we don't confuse Jackson + } + public Attribute getAttribute() { return attribute; === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2012-01-30 09:49:36 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryOptionCombo.java 2012-03-07 12:10:37 +0000 @@ -28,6 +28,7 @@ */ import org.apache.commons.lang.StringEscapeUtils; +import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hisp.dhis.common.BaseIdentifiableObject; @@ -265,7 +266,7 @@ @Override public void setName( String name ) { - throw new UnsupportedOperationException( "Cannot set name on DataElementCategoryOptionCombo: " + name ); + // throw new UnsupportedOperationException( "Cannot set name on DataElementCategoryOptionCombo: " + name ); } @Override @@ -277,7 +278,7 @@ @Override public void setShortName( String shortName ) { - throw new UnsupportedOperationException( "Cannot set shortName on DataElementCategoryOptionCombo: " + shortName ); + // throw new UnsupportedOperationException( "Cannot set shortName on DataElementCategoryOptionCombo: " + shortName ); } @Override @@ -289,8 +290,8 @@ @Override public void setAlternativeName( String alternativeName ) { - throw new UnsupportedOperationException( "Cannot set alternativename on DataElementCategoryOptionCombo: " - + alternativeName ); + // throw new UnsupportedOperationException( "Cannot set alternativeName on DataElementCategoryOptionCombo: " + // + alternativeName ); } @XmlElement === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2012-02-21 11:39:05 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnit.java 2012-03-07 12:10:37 +0000 @@ -567,7 +567,7 @@ public void setAlternativeName( String alternativeName ) { - throw new UnsupportedOperationException( "Cannot set alternativeName on OrganisationUnit: " + alternativeName ); + // throw new UnsupportedOperationException( "Cannot set alternativeName on OrganisationUnit: " + alternativeName ); } @XmlElement === added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ExportController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ExportController.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ExportController.java 2012-03-07 12:10:37 +0000 @@ -0,0 +1,113 @@ +package org.hisp.dhis.api.controller; + +/* + * Copyright (c) 2004-2012, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import org.hisp.dhis.api.webdomain.DXF2; +import org.hisp.dhis.dataelement.*; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.indicator.Indicator; +import org.hisp.dhis.indicator.IndicatorGroup; +import org.hisp.dhis.indicator.IndicatorGroupSet; +import org.hisp.dhis.indicator.IndicatorService; +import org.hisp.dhis.organisationunit.*; +import org.hisp.dhis.validation.ValidationRule; +import org.hisp.dhis.validation.ValidationRuleGroup; +import org.hisp.dhis.validation.ValidationRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import java.util.ArrayList; + +/** + * @author Morten Olav Hansen + */ +@Controller +@RequestMapping( value = ExportController.RESOURCE_PATH ) +public class ExportController +{ + public static final String RESOURCE_PATH = "/export"; + + @Autowired + private DataElementService dataElementService; + + @Autowired + private DataElementCategoryService dataElementCategoryService; + + @Autowired + private IndicatorService indicatorService; + + @Autowired + private OrganisationUnitService organisationUnitService; + + @Autowired + private OrganisationUnitGroupService organisationUnitGroupService; + + @Autowired + private DataSetService dataSetService; + + @Autowired + private ValidationRuleService validationRuleService; + + @RequestMapping( method = RequestMethod.GET ) + @PreAuthorize( "hasRole('ALL') or hasRole('F_METADATA_EXPORT')" ) + public String export( Model model ) + { + DXF2 dxf2 = new DXF2(); + + dxf2.setDataElements( new ArrayList( dataElementService.getAllDataElements() ) ); + dxf2.setDataElementGroups( new ArrayList( dataElementService.getAllDataElementGroups() ) ); + dxf2.setDataElementGroupSets( new ArrayList( dataElementService.getAllDataElementGroupSets() ) ); + dxf2.setCategories( new ArrayList( dataElementCategoryService.getAllDataElementCategories() ) ); + dxf2.setCategoryCombos( new ArrayList( dataElementCategoryService.getAllDataElementCategoryCombos() ) ); + dxf2.setCategoryOptions( new ArrayList( dataElementCategoryService.getAllDataElementCategoryOptions() ) ); + dxf2.setCategoryOptionCombos( new ArrayList( dataElementCategoryService.getAllDataElementCategoryOptionCombos() ) ); + + dxf2.setIndicators( new ArrayList( indicatorService.getAllIndicators() ) ); + dxf2.setIndicatorGroups( new ArrayList( indicatorService.getAllIndicatorGroups() ) ); + dxf2.setIndicatorGroupSets( new ArrayList( indicatorService.getAllIndicatorGroupSets() ) ); + + dxf2.setOrganisationUnits( new ArrayList( organisationUnitService.getAllOrganisationUnits() ) ); + dxf2.setOrganisationUnitLevels( new ArrayList( organisationUnitService.getOrganisationUnitLevels() ) ); + dxf2.setOrganisationUnitGroups( new ArrayList( organisationUnitGroupService.getAllOrganisationUnitGroups() ) ); + dxf2.setOrganisationUnitGroupSets( new ArrayList( organisationUnitGroupService.getAllOrganisationUnitGroupSets() ) ); + + dxf2.setDataSets( new ArrayList( dataSetService.getAllDataSets() ) ); + + dxf2.setValidationRules( new ArrayList( validationRuleService.getAllValidationRules() ) ); + dxf2.setValidationRuleGroups( new ArrayList( validationRuleService.getAllValidationRuleGroups() ) ); + + model.addAttribute( "model", dxf2 ); + + return "export"; + } +} === added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ImportController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ImportController.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/ImportController.java 2012-03-07 12:10:37 +0000 @@ -0,0 +1,71 @@ +package org.hisp.dhis.api.controller; + +/* + * Copyright (c) 2004-2012, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import org.hisp.dhis.api.view.JacksonUtils; +import org.hisp.dhis.api.view.Jaxb2Utils; +import org.hisp.dhis.api.webdomain.DXF2; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.http.HttpServletResponse; +import javax.xml.bind.JAXBException; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author Morten Olav Hansen + */ +@Controller +@RequestMapping( value = ImportController.RESOURCE_PATH ) +public class ImportController +{ + public static final String RESOURCE_PATH = "/import"; + + @RequestMapping( method = RequestMethod.POST, headers = {"Content-Type=application/xml, text/xml"} ) + @PreAuthorize( "hasRole('ALL') or hasRole('F_METADATA_IMPORT')" ) + public String importXML( HttpServletResponse response, InputStream input ) throws JAXBException + { + DXF2 dxf2 = Jaxb2Utils.unmarshal( DXF2.class, input ); + System.err.println( dxf2.getDataSets().size() ); + + return "import"; + } + + @RequestMapping( method = RequestMethod.POST, headers = {"Content-Type=application/json"} ) + @PreAuthorize( "hasRole('ALL') or hasRole('F_METADATA_IMPORT')" ) + public String importJSON( HttpServletResponse response, InputStream input ) throws IOException + { + DXF2 dxf2 = JacksonUtils.readValueAs( DXF2.class, input ); + System.err.println( dxf2.getDataSets().size() ); + + return "import"; + } +} === added file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/DXF2.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/DXF2.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/webdomain/DXF2.java 2012-03-07 12:10:37 +0000 @@ -0,0 +1,309 @@ +package org.hisp.dhis.api.webdomain; + +/* + * Copyright (c) 2004-2012, University of Oslo + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of the HISP project nor the names of its contributors may + * be used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import org.codehaus.jackson.annotate.JsonProperty; +import org.hisp.dhis.common.Dxf2Namespace; +import org.hisp.dhis.dataelement.*; +import org.hisp.dhis.dataset.DataSet; +import org.hisp.dhis.indicator.Indicator; +import org.hisp.dhis.indicator.IndicatorGroup; +import org.hisp.dhis.indicator.IndicatorGroupSet; +import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitGroup; +import org.hisp.dhis.organisationunit.OrganisationUnitGroupSet; +import org.hisp.dhis.organisationunit.OrganisationUnitLevel; +import org.hisp.dhis.validation.ValidationRule; +import org.hisp.dhis.validation.ValidationRuleGroup; + +import javax.xml.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Morten Olav Hansen + */ +@XmlRootElement( name = "DXF2", namespace = Dxf2Namespace.NAMESPACE ) +@XmlAccessorType( value = XmlAccessType.NONE ) +public class DXF2 +{ + private List dataElements = new ArrayList(); + + private List dataElementGroups = new ArrayList(); + + private List dataElementGroupSets = new ArrayList(); + + private List categories = new ArrayList(); + + private List categoryOptions = new ArrayList(); + + private List categoryCombos = new ArrayList(); + + private List categoryOptionCombos = new ArrayList(); + + private List indicators = new ArrayList(); + + private List indicatorGroups = new ArrayList(); + + private List indicatorGroupSets = new ArrayList(); + + private List organisationUnits = new ArrayList(); + + private List organisationUnitGroups = new ArrayList(); + + private List organisationUnitGroupSets = new ArrayList(); + + private List organisationUnitLevels = new ArrayList(); + + private List dataSets = new ArrayList(); + + private List validationRules = new ArrayList(); + + private List validationRuleGroups = new ArrayList(); + + @XmlElementWrapper( name = "dataElements" ) + @XmlElement( name = "dataElement" ) + @JsonProperty( value = "dataElements" ) + public List getDataElements() + { + return dataElements; + } + + public void setDataElements( List dataElements ) + { + this.dataElements = dataElements; + } + + @XmlElementWrapper( name = "dataElementGroups" ) + @XmlElement( name = "dataElementGroup" ) + @JsonProperty( value = "dataElementGroups" ) + public List getDataElementGroups() + { + return dataElementGroups; + } + + public void setDataElementGroups( List dataElementGroups ) + { + this.dataElementGroups = dataElementGroups; + } + + @XmlElementWrapper( name = "dataElementGroupSets" ) + @XmlElement( name = "dataElementGroupSet" ) + @JsonProperty( value = "dataElementGroupSets" ) + public List getDataElementGroupSets() + { + return dataElementGroupSets; + } + + public void setDataElementGroupSets( List dataElementGroupSets ) + { + this.dataElementGroupSets = dataElementGroupSets; + } + + @XmlElementWrapper( name = "categories" ) + @XmlElement( name = "category" ) + @JsonProperty( value = "categories" ) + public List getCategories() + { + return categories; + } + + public void setCategories( List categories ) + { + this.categories = categories; + } + + @XmlElementWrapper( name = "categoryOptions" ) + @XmlElement( name = "categoryOption" ) + @JsonProperty( value = "categoryOptions" ) + public List getCategoryOptions() + { + return categoryOptions; + } + + public void setCategoryOptions( List categoryOptions ) + { + this.categoryOptions = categoryOptions; + } + + @XmlElementWrapper( name = "categoryCombos" ) + @XmlElement( name = "categoryCombo" ) + @JsonProperty( value = "categoryCombos" ) + public List getCategoryCombos() + { + return categoryCombos; + } + + public void setCategoryCombos( List categoryCombos ) + { + this.categoryCombos = categoryCombos; + } + + @XmlElementWrapper( name = "categoryOptionCombos" ) + @XmlElement( name = "categoryOptionCombo" ) + @JsonProperty( value = "categoryOptionCombos" ) + public List getCategoryOptionCombos() + { + return categoryOptionCombos; + } + + public void setCategoryOptionCombos( List categoryOptionCombos ) + { + this.categoryOptionCombos = categoryOptionCombos; + } + + @XmlElementWrapper( name = "indicators" ) + @XmlElement( name = "indicator" ) + @JsonProperty( value = "indicators" ) + public List getIndicators() + { + return indicators; + } + + public void setIndicators( List indicators ) + { + this.indicators = indicators; + } + + @XmlElementWrapper( name = "indicatorGroups" ) + @XmlElement( name = "indicatorGroup" ) + @JsonProperty( value = "indicatorGroups" ) + public List getIndicatorGroups() + { + return indicatorGroups; + } + + public void setIndicatorGroups( List indicatorGroups ) + { + this.indicatorGroups = indicatorGroups; + } + + @XmlElementWrapper( name = "indicatorGroupSets" ) + @XmlElement( name = "indicatorGroupSet" ) + @JsonProperty( value = "indicatorGroupSets" ) + public List getIndicatorGroupSets() + { + return indicatorGroupSets; + } + + public void setIndicatorGroupSets( List indicatorGroupSets ) + { + this.indicatorGroupSets = indicatorGroupSets; + } + + @XmlElementWrapper( name = "organisationUnits" ) + @XmlElement( name = "organisationUnit" ) + @JsonProperty( value = "organisationUnits" ) + public List getOrganisationUnits() + { + return organisationUnits; + } + + public void setOrganisationUnits( List organisationUnits ) + { + this.organisationUnits = organisationUnits; + } + + @XmlElementWrapper( name = "organisationUnitGroups" ) + @XmlElement( name = "organisationUnitGroup" ) + @JsonProperty( value = "organisationUnitGroups" ) + public List getOrganisationUnitGroups() + { + return organisationUnitGroups; + } + + public void setOrganisationUnitGroups( List organisationUnitGroups ) + { + this.organisationUnitGroups = organisationUnitGroups; + } + + @XmlElementWrapper( name = "organisationUnitGroupSets" ) + @XmlElement( name = "organisationUnitGroupSet" ) + @JsonProperty( value = "organisationUnitGroupSets" ) + public List getOrganisationUnitGroupSets() + { + return organisationUnitGroupSets; + } + + public void setOrganisationUnitGroupSets( List organisationUnitGroupSets ) + { + this.organisationUnitGroupSets = organisationUnitGroupSets; + } + + @XmlElementWrapper( name = "organisationUnitLevels" ) + @XmlElement( name = "organisationUnitLevel" ) + @JsonProperty( value = "organisationUnitLevels" ) + public List getOrganisationUnitLevels() + { + return organisationUnitLevels; + } + + public void setOrganisationUnitLevels( List organisationUnitLevels ) + { + this.organisationUnitLevels = organisationUnitLevels; + } + + @XmlElementWrapper( name = "dataSets" ) + @XmlElement( name = "dataSet" ) + @JsonProperty( value = "dataSets" ) + public List getDataSets() + { + return dataSets; + } + + public void setDataSets( List dataSets ) + { + this.dataSets = dataSets; + } + + @XmlElementWrapper( name = "validationRules" ) + @XmlElement( name = "validationRule" ) + @JsonProperty( value = "validationRules" ) + public List getValidationRules() + { + return validationRules; + } + + public void setValidationRules( List validationRules ) + { + this.validationRules = validationRules; + } + + @XmlElementWrapper( name = "validationRuleGroups" ) + @XmlElement( name = "validationRuleGroup" ) + @JsonProperty( value = "validationRuleGroups" ) + public List getValidationRuleGroups() + { + return validationRuleGroups; + } + + public void setValidationRuleGroups( List validationRuleGroups ) + { + this.validationRuleGroups = validationRuleGroups; + } +}