=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/IndexController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/IndexController.java 2014-05-27 08:46:50 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/IndexController.java 2014-05-27 13:46:18 +0000 @@ -28,8 +28,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.schema.Schema; +import org.hisp.dhis.schema.SchemaService; import org.hisp.dhis.webapi.utils.ContextUtils; +import org.hisp.dhis.webapi.webdomain.Resource; +import org.hisp.dhis.webapi.webdomain.Resources; +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.RequestMethod; @@ -43,6 +49,9 @@ @Controller public class IndexController { + @Autowired + private SchemaService schemaService; + //-------------------------------------------------------------------------- // GET //-------------------------------------------------------------------------- @@ -50,14 +59,30 @@ @RequestMapping( value = "/api", method = RequestMethod.GET ) public void getIndex( HttpServletRequest request, HttpServletResponse response ) throws IOException { - String location = response.encodeRedirectURL( "/resources" ); + String location = response.encodeRedirectURL( "/" ); response.sendRedirect( ContextUtils.getRootPath( request ) + location ); } @RequestMapping( value = "/", method = RequestMethod.GET ) - public void getIndexWithSlash( HttpServletRequest request, HttpServletResponse response ) throws IOException + public String getResources( Model model, HttpServletRequest request ) { - String location = response.encodeRedirectURL( "/resources" ); - response.sendRedirect( ContextUtils.getRootPath( request ) + location ); + Resources resources = new Resources(); + + for ( Schema schema : schemaService.getSchemas() ) + { + if ( schema.haveEndpoint() ) + { + Resource resource = new Resource(); + resource.setSingular( schema.getSingular() ); + resource.setPlural( schema.getPlural() ); + resource.setHref( ContextUtils.getRootPath( request ) + schema.getApiEndpoint() ); + + resources.getResources().add( resource ); + } + } + + model.addAttribute( "model", resources ); + + return "resources"; } } === removed file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ResourceController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ResourceController.java 2014-05-22 12:40:24 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ResourceController.java 1970-01-01 00:00:00 +0000 @@ -1,74 +0,0 @@ -package org.hisp.dhis.webapi.controller; - -/* - * Copyright (c) 2004-2014, 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.webapi.utils.ContextUtils; -import org.hisp.dhis.webapi.webdomain.Resource; -import org.hisp.dhis.webapi.webdomain.Resources; -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 org.springframework.web.bind.annotation.RequestParam; - -import java.util.Map; - -/** - * @author Morten Olav Hansen - */ -@Controller -@RequestMapping( value = ResourceController.RESOURCE_PATH ) -public class ResourceController -{ - public static final String RESOURCE_PATH = "/resources"; - - //------------------------------------------------------------------------------------------------------- - // GET - //------------------------------------------------------------------------------------------------------- - - @RequestMapping( method = RequestMethod.GET ) - public String getResources( @RequestParam Map parameters, Model model ) - { - WebOptions options = new WebOptions( parameters ); - Resources resources = new Resources(); - - if ( options.hasLinks() ) - { - for ( Resource resource : resources.getResources() ) - { - resource.setHref( ContextUtils.getPath( resource.getClazz() ) ); - } - } - - model.addAttribute( "model", resources ); - model.addAttribute( "viewClass", "detailed" ); - - return "resources"; - } -} === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resource.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resource.java 2014-05-22 12:40:24 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resource.java 2014-05-27 13:46:18 +0000 @@ -29,16 +29,9 @@ */ import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonView; -import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; -import org.hisp.dhis.common.BaseLinkableObject; import org.hisp.dhis.common.DxfNamespaces; -import org.hisp.dhis.common.view.DetailedView; - -import java.util.ArrayList; -import java.util.List; /** * At some point this class will be extended to show all available options @@ -46,77 +39,59 @@ * * @author Morten Olav Hansen */ -@JacksonXmlRootElement( localName = "resource", namespace = DxfNamespaces.DXF_2_0 ) +@JacksonXmlRootElement(localName = "resource", namespace = DxfNamespaces.DXF_2_0) public class Resource - extends BaseLinkableObject { - private String name; - - private Class clazz; - - private List methods = new ArrayList(); - - private List mediaTypes = new ArrayList(); + private String singular; + + private String plural; + + private String href; public Resource() { } - public Resource( String name, Class clazz, List methods, List mediaTypes ) - { - this.name = name; - this.clazz = clazz; - this.methods = methods; - this.mediaTypes = mediaTypes; - } - - @JsonProperty - @JsonView( {DetailedView.class} ) - @JacksonXmlProperty( isAttribute = true ) - public String getName() - { - return name; - } - - public void setName( String name ) - { - this.name = name; - } - - @JsonProperty - @JacksonXmlElementWrapper( localName = "methods", namespace = DxfNamespaces.DXF_2_0 ) - @JacksonXmlProperty( localName = "method", namespace = DxfNamespaces.DXF_2_0 ) - public List getMethods() - { - return methods; - } - - public void setMethods( List methods ) - { - this.methods = methods; - } - - @JsonProperty - @JacksonXmlElementWrapper( localName = "mediaTypes", namespace = DxfNamespaces.DXF_2_0 ) - @JacksonXmlProperty( localName = "mediaType", namespace = DxfNamespaces.DXF_2_0 ) - public List getMediaTypes() - { - return mediaTypes; - } - - public void setMediaTypes( List mediaTypes ) - { - this.mediaTypes = mediaTypes; - } - - public Class getClazz() - { - return clazz; - } - - public void setClazz( Class clazz ) - { - this.clazz = clazz; + public Resource( String singular, String plural ) + { + this.singular = singular; + this.plural = plural; + } + + @JsonProperty + @JacksonXmlProperty( isAttribute = true ) + public String getSingular() + { + return singular; + } + + public void setSingular( String singular ) + { + this.singular = singular; + } + + @JsonProperty + @JacksonXmlProperty( isAttribute = true ) + public String getPlural() + { + return plural; + } + + public void setPlural( String plural ) + { + this.plural = plural; + } + + @JsonProperty + @JacksonXmlProperty( isAttribute = true ) + public String getHref() + { + return href; + } + + public void setHref( String href ) + { + this.href = href; } } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resources.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resources.java 2014-05-22 12:40:24 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/webdomain/Resources.java 2014-05-27 13:46:18 +0000 @@ -34,21 +34,14 @@ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import org.hisp.dhis.common.BaseCollection; import org.hisp.dhis.common.DxfNamespaces; -import org.hisp.dhis.common.IdentifiableObject; -import org.hisp.dhis.dxf2.metadata.ExchangeClasses; -import org.springframework.http.MediaType; -import org.springframework.util.StringUtils; -import org.springframework.web.bind.annotation.RequestMethod; -import java.util.*; +import java.util.ArrayList; +import java.util.List; /** - * At some point this class will be extended to show all available options - * for a current user for this resource. For now it is only used for index page. - * * @author Morten Olav Hansen */ -@JacksonXmlRootElement( localName = "dxf2", namespace = DxfNamespaces.DXF_2_0 ) +@JacksonXmlRootElement(localName = "dxf2", namespace = DxfNamespaces.DXF_2_0) public class Resources extends BaseCollection { @@ -56,12 +49,12 @@ public Resources() { - generateResources(); + } @JsonProperty - @JacksonXmlElementWrapper( localName = "resources", namespace = DxfNamespaces.DXF_2_0 ) - @JacksonXmlProperty( localName = "resource", namespace = DxfNamespaces.DXF_2_0 ) + @JacksonXmlElementWrapper(localName = "resources", namespace = DxfNamespaces.DXF_2_0) + @JacksonXmlProperty(localName = "resource", namespace = DxfNamespaces.DXF_2_0) public List getResources() { return resources; @@ -71,34 +64,4 @@ { this.resources = resources; } - - //---------------------------------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------------------------------- - - private void generateResources() - { - List requestMethods = new ArrayList(); - requestMethods.add( RequestMethod.GET.toString() ); - - List mediaTypes = new ArrayList(); - mediaTypes.add( MediaType.TEXT_HTML.toString() ); - mediaTypes.add( MediaType.APPLICATION_JSON.toString() ); - mediaTypes.add( MediaType.APPLICATION_XML.toString() ); - mediaTypes.add( new MediaType( "application", "javascript" ).toString() ); - - for ( Map.Entry, String> entry : ExchangeClasses.getAllExportMap().entrySet() ) - { - resources.add( new Resource( StringUtils.capitalize( entry.getValue() ), entry.getKey(), requestMethods, mediaTypes ) ); - } - - Collections.sort(resources, new Comparator() - { - @Override - public int compare( Resource o1, Resource o2 ) - { - return o1.getName().compareTo( o2.getName() ); - } - }); - } }