dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #19761
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 8750: Removed old FormDefinitionController.
------------------------------------------------------------
revno: 8750
committer: Bob Jolliffe <bobjolliffe@xxxxxxxxx>
branch nick: dhis2
timestamp: Mon 2012-10-29 13:52:55 +0000
message:
Removed old FormDefinitionController.
Implemented a data structure definition endpoint on DataSet controller.
removed:
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/FormDefinitionController.java
added:
dhis-2/dhis-web/dhis-web-api/src/main/resources/templates/metadata2dsd.xsl
modified:
dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DataSetController.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DataSetController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DataSetController.java 2012-10-17 17:04:50 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DataSetController.java 2012-10-29 13:52:55 +0000
@@ -27,23 +27,38 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
import org.hisp.dhis.api.utils.ContextUtils;
import org.hisp.dhis.api.utils.FormUtils;
+import org.hisp.dhis.api.view.ClassPathUriResolver;
import org.hisp.dhis.api.webdomain.form.Form;
+import org.hisp.dhis.common.view.ExportView;
import org.hisp.dhis.dataset.DataSet;
import org.hisp.dhis.datavalue.DataValue;
import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.dxf2.metadata.ExportService;
+import org.hisp.dhis.dxf2.metadata.MetaData;
import org.hisp.dhis.dxf2.utils.JacksonUtils;
import org.hisp.dhis.organisationunit.OrganisationUnit;
import org.hisp.dhis.period.Period;
import org.hisp.dhis.period.PeriodType;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -59,18 +74,40 @@
extends AbstractCrudController<DataSet>
{
public static final String RESOURCE_PATH = "/dataSets";
-
+ public static final String DSD_TRANSFORM = "/templates/metadata2dsd.xsl";
+
// -------------------------------------------------------------------------
// Dependencies
// -------------------------------------------------------------------------
@Autowired
+ private ExportService exportService;
+
+ @Autowired
private DataValueService dataValueService;
// -------------------------------------------------------------------------
// Controller
// -------------------------------------------------------------------------
+ @RequestMapping( produces = "application/dsd+xml" )
+ public void getStructureDefinition( @RequestParam Map<String, String> parameters, HttpServletResponse response )
+ throws IOException, TransformerConfigurationException, TransformerException
+ {
+ WebOptions options = filterMetadataOptions();
+
+ MetaData metaData = exportService.getMetaData( options );
+
+ InputStream input = new ByteArrayInputStream(JacksonUtils.toXmlWithViewAsString( metaData, ExportView.class ).getBytes("UTF-8"));
+
+ TransformerFactory tf = TransformerFactory.newInstance();
+ tf.setURIResolver( new ClassPathUriResolver());
+
+ Transformer transformer = tf.newTransformer( new StreamSource( new ClassPathResource(DSD_TRANSFORM).getInputStream()) );
+
+ transformer.transform( new StreamSource(input), new StreamResult( response.getOutputStream() ) );
+ }
+
@RequestMapping( value = "/{uid}/form", method = RequestMethod.GET, produces = "application/json" )
public void getFormJson( @PathVariable( "uid" ) String uid, @RequestParam( value = "ou", required = false ) String orgUnit,
@RequestParam( value = "pe", required = false ) String period, HttpServletResponse response ) throws IOException
@@ -134,4 +171,20 @@
public void postFormXml( @PathVariable( "uid" ) String uid, HttpServletRequest request, HttpServletResponse response )
{
}
+
+ /**
+ * select only the metadata required to describe form definitions
+ *
+ * @return the filtered options
+ */
+ private WebOptions filterMetadataOptions()
+ {
+ WebOptions options = new WebOptions(new HashMap<String,String>());
+ options.setAssumeTrue( false);
+ options.addOption( "categoryOptionCombos", "true" );
+ options.addOption( "dataElements","true" );
+ options.addOption( "dataSets", "true" );
+ return options;
+ }
+
}
=== removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/FormDefinitionController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/FormDefinitionController.java 2012-09-15 21:52:33 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/FormDefinitionController.java 1970-01-01 00:00:00 +0000
@@ -1,112 +0,0 @@
-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 java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.hisp.dhis.api.utils.ContextUtils;
-import org.hisp.dhis.common.view.ExportView;
-import org.hisp.dhis.dxf2.metadata.ExportService;
-import org.hisp.dhis.dxf2.metadata.MetaData;
-import org.hisp.dhis.dxf2.utils.JacksonUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-/**
- * Exports a filtered view of the metadata sufficient for defining dataset reports
- * Caveats:
- * - there is still much too much data.
- * - duplicated code
- * - It would be better to render this as more form oriented view
- * - It would be good to select individual forms based on dataset identifier
- *
- * @author Bob Jolliffe <bobjolliffe@xxxxxxxxx>
- */
-@Controller
-@RequestMapping( value = FormDefinitionController.RESOURCE_PATH )
-public class FormDefinitionController
-{
- public static final String RESOURCE_PATH = "/forms";
-
- @Autowired
- private ExportService exportService;
-
- @Autowired
- private ContextUtils contextUtils;
-
- @RequestMapping( value = FormDefinitionController.RESOURCE_PATH )
- public String export( @RequestParam Map<String, String> parameters, Model model )
- {
- // Ignore web options to avoid security exploit
- // WebOptions options = new WebOptions( parameters );
- WebOptions options = setOptions();
-
- MetaData metaData = exportService.getMetaData( options );
-
- model.addAttribute( "model", metaData );
- model.addAttribute( "viewClass", "export" );
-
- return "export";
- }
-
- @RequestMapping( value = FormDefinitionController.RESOURCE_PATH + ".xml", produces = "*/*" )
- public void exportXml( @RequestParam Map<String, String> parameters, HttpServletResponse response ) throws IOException
- {
- WebOptions options = setOptions();
-
- MetaData metaData = exportService.getMetaData( options );
-
- contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_XML, ContextUtils.CacheStrategy.NO_CACHE, "metaData.xml", true );
-
- JacksonUtils.toXmlWithView( response.getOutputStream(), metaData, ExportView.class );
- }
-
- /**
- * select only the metadata required to describe form definitions
- *
- * @return the filtered options
- */
- protected WebOptions setOptions()
- {
- WebOptions options = new WebOptions(new HashMap<String,String>());
- options.setAssumeTrue( false);
- options.addOption( "categoryOptionCombos", "true" );
- options.addOption( "dataElements","true" );
- options.addOption( "dataSets", "true" );
- return options;
- }
-}
-
\ No newline at end of file
=== added file 'dhis-2/dhis-web/dhis-web-api/src/main/resources/templates/metadata2dsd.xsl'
--- dhis-2/dhis-web/dhis-web-api/src/main/resources/templates/metadata2dsd.xsl 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/resources/templates/metadata2dsd.xsl 2012-10-29 13:52:55 +0000
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet
+ xmlns:d2="http://dhis2.org/schema/dxf/2.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:key name="disaggs_per_categorycombo"
+ match="/d2:metaData/d2:categoryOptionCombos/d2:categoryOptionCombo"
+ use="d2:categoryCombo/@id"/>
+
+ <xsl:template match="/">
+ <reportTemplates>
+ <dataElements>
+ <xsl:apply-templates select="/d2:metaData/d2:dataElements"/>
+ </dataElements>
+ <disaggregations>
+ <xsl:apply-templates select="/d2:metaData/d2:categoryOptionCombos"/>
+ </disaggregations>
+ <xsl:apply-templates select="/d2:metaData/d2:dataSets"/>
+ </reportTemplates>
+ </xsl:template>
+
+ <xsl:template match="d2:dataElement">
+ <dataElement uid="{@id}" code="{@code}" name="{@name}" type="{d2:type}"/>
+ </xsl:template>
+
+ <xsl:template match="d2:categoryOptionCombo">
+ <!-- catoptcombos have no code :-(
+ <disaggregation uid="{@id}" code="{@code}" name="{@name}" />
+ -->
+ <disaggregation uid="{@id}" code="{@id}" name="{@name}" />
+ </xsl:template>
+
+ <xsl:template match="d2:dataSet">
+ <reportTemplate>
+ <name>
+ <xsl:value-of select="@name"/>
+ </name>
+ <uid>
+ <xsl:value-of select="@id"/>
+ </uid>
+ <code>
+ <xsl:value-of select="@code"/>
+ </code>
+ <periodType>
+ <xsl:value-of select="d2:periodType"/>
+ </periodType>
+ <dataValueTemplates>
+ <xsl:apply-templates select="d2:dataElements" mode="dataset"/>
+ </dataValueTemplates>
+ </reportTemplate>
+ </xsl:template>
+
+ <xsl:template match="d2:dataElement" mode="dataset">
+ <xsl:variable name="de_id" select="@id"/>
+ <xsl:variable name="de_code" select="@code"/>
+ <xsl:variable name="catcombo"
+ select="/d2:metaData/d2:dataElements/d2:dataElement[@id=$de_id]/d2:categoryCombo/@id"/>
+ <xsl:for-each select="key('disaggs_per_categorycombo',$catcombo)">
+ <xsl:element name="dataValueTemplate">
+ <xsl:attribute name="dataElement">
+ <xsl:value-of select="$de_code"/>
+ </xsl:attribute>
+ <xsl:attribute name="disaggregation">
+ <xsl:value-of select="@id"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file