RegistryAPI.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */

  20. package org.openspcoop2.core.registry.rest;

  21. import java.io.Serializable;
  22. import java.net.URL;
  23. import java.util.List;

  24. import javax.xml.namespace.QName;

  25. import org.openspcoop2.core.registry.AccordoServizioParteComune;
  26. import org.openspcoop2.core.registry.Resource;
  27. import org.openspcoop2.core.registry.ResourceParameter;
  28. import org.openspcoop2.core.registry.ResourceRepresentation;
  29. import org.openspcoop2.core.registry.ResourceResponse;
  30. import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
  31. import org.openspcoop2.utils.UtilsException;
  32. import org.openspcoop2.utils.rest.api.Api;
  33. import org.openspcoop2.utils.rest.api.ApiBodyParameter;
  34. import org.openspcoop2.utils.rest.api.ApiCookieParameter;
  35. import org.openspcoop2.utils.rest.api.ApiHeaderParameter;
  36. import org.openspcoop2.utils.rest.api.ApiOperation;
  37. import org.openspcoop2.utils.rest.api.ApiParameterSchema;
  38. import org.openspcoop2.utils.rest.api.ApiParameterSchemaComplexType;
  39. import org.openspcoop2.utils.rest.api.ApiReference;
  40. import org.openspcoop2.utils.rest.api.ApiRequest;
  41. import org.openspcoop2.utils.rest.api.ApiRequestDynamicPathParameter;
  42. import org.openspcoop2.utils.rest.api.ApiRequestFormParameter;
  43. import org.openspcoop2.utils.rest.api.ApiRequestQueryParameter;
  44. import org.openspcoop2.utils.rest.api.ApiResponse;
  45. import org.openspcoop2.utils.transport.http.HttpRequestMethod;

  46. /**
  47.  * RegistryAPI
  48.  *
  49.  * @author Poli Andrea (apoli@link.it)
  50.  * @author $Author$
  51.  * @version $Rev$, $Date$
  52.  */
  53. public class RegistryAPI extends Api implements Serializable {

  54.     /**
  55.      *
  56.      */
  57.     private static final long serialVersionUID = 1L;
  58.    
  59.     private AccordoServizioParteComune aspc = null;
  60.        
  61.     public AccordoServizioParteComune getAspc() {
  62.         return this.aspc;
  63.     }

  64.     public RegistryAPI(AccordoServizioParteComune aspc,String baseURL) throws DriverRegistroServiziException {
  65.         try {
  66.        
  67.             this.aspc = aspc;
  68.            
  69.             this.setName(aspc.getNome());
  70.             this.setDescription(aspc.getDescrizione());
  71.             this.setBaseURL(new URL(baseURL));
  72.            
  73.             if(aspc.sizeResourceList()>0) {
  74.                 for (Resource resource : aspc.getResourceList()) {
  75.                     HttpRequestMethod httpMethod = null;
  76.                     if(resource.getMethod()!=null) {
  77.                         httpMethod = HttpRequestMethod.valueOf(resource.getMethod().getValue());
  78.                     }
  79.                     ApiOperation apiOp = new ApiOperation(httpMethod, resource.getPath());
  80.                     apiOp.setDescription(resource.getDescrizione());
  81.                    
  82.                     // Richiesta
  83.                     if(resource.getRequest()!=null) {
  84.                         apiOp.setRequest(new ApiRequest());                    
  85.                         if(resource.getRequest().sizeParameterList()>0) {
  86.                             initParameterList(resource.getRequest().getParameterList(), apiOp.getRequest(), null);
  87.                         }
  88.                         if(resource.getRequest().sizeRepresentationList()>0) {
  89.                             initRepresentationList(resource.getRequest().getRepresentationList(), apiOp.getRequest(), null);
  90.                         }
  91.                     }
  92.                    
  93.                     // Risposta
  94.                     if(resource.sizeResponseList()>0) {
  95.                         for (ResourceResponse response : resource.getResponseList()) {
  96.                             ApiResponse apiResponse = new ApiResponse();
  97.                             if(ApiResponse.isDefaultHttpReturnCode(response.getStatus())) {
  98.                                 apiResponse.setDefaultHttpReturnCode();
  99.                             }
  100.                             else {
  101.                                 apiResponse.setHttpReturnCode(response.getStatus());
  102.                             }
  103.                             apiResponse.setDescription(response.getDescrizione());
  104.                             if(response.sizeParameterList()>0) {
  105.                                 initParameterList(response.getParameterList(), null, apiResponse);
  106.                             }
  107.                             if(response.sizeRepresentationList()>0) {
  108.                                 initRepresentationList(response.getRepresentationList(), null, apiResponse);
  109.                             }
  110.                             apiOp.addResponse(apiResponse);
  111.                         }
  112.                     }
  113.                    
  114.                     this.addOperation(apiOp);
  115.                 }
  116.             }
  117.            
  118.         }catch(Exception e) {
  119.             throw new DriverRegistroServiziException(e.getMessage(),e);
  120.         }
  121.     }
  122.    
  123.     private static void initParameterList(List<ResourceParameter> rpList, ApiRequest apiRequest, ApiResponse apiResponse) throws UtilsException {
  124.         for (ResourceParameter rp : rpList) {
  125.            
  126. //          ApiSchemaTypeRestriction schema = null;
  127. //          if(rp.getRestrizioni()!=null) {
  128. //              schema = ApiSchemaTypeRestriction.toApiSchemaTypeRestriction(rp.getRestrizioni());
  129. //          }
  130. //          if(schema==null) {
  131. //              schema = new ApiSchemaTypeRestriction();
  132. //              schema.setType(rp.getTipo());
  133. //          }
  134. //          else if(schema.getType()==null) {
  135. //              schema.setType(rp.getTipo());
  136. //          }
  137.             ApiParameterSchema apiParameterSchema = ApiParameterSchema.toApiParameterSchema(rp.getRestrizioni());
  138.             if(apiParameterSchema==null) {
  139.                 apiParameterSchema = new ApiParameterSchema();
  140.                 apiParameterSchema.setComplexType(ApiParameterSchemaComplexType.simple);
  141.                 apiParameterSchema.addType(rp.getTipo(), null);
  142.             }
  143.            
  144.             switch (rp.getParameterType()) {
  145.             case COOKIE:
  146.                 ApiCookieParameter cookie = new ApiCookieParameter(rp.getNome(), apiParameterSchema);
  147.                 cookie.setDescription(rp.getDescrizione());
  148.                 cookie.setRequired(rp.isRequired());
  149.                 if(apiRequest!=null) {
  150.                     apiRequest.addCookieParameter(cookie);
  151.                 }
  152.                 else if(apiResponse!=null) {
  153.                     apiResponse.addCookieParameter(cookie);
  154.                 }
  155.                 break;
  156.             case DYNAMIC_PATH:
  157.                 ApiRequestDynamicPathParameter dynamicPath = new ApiRequestDynamicPathParameter(rp.getNome(), apiParameterSchema);
  158.                 dynamicPath.setDescription(rp.getDescrizione());
  159.                 dynamicPath.setRequired(rp.isRequired());
  160.                 if(apiRequest!=null) {
  161.                     apiRequest.addDynamicPathParameter(dynamicPath);
  162.                 }
  163.                 break;
  164.             case FORM:
  165.                 ApiRequestFormParameter form = new ApiRequestFormParameter(rp.getNome(), apiParameterSchema);
  166.                 form.setDescription(rp.getDescrizione());
  167.                 form.setRequired(rp.isRequired());
  168.                 if(apiRequest!=null) {
  169.                     apiRequest.addFormParameter(form);
  170.                 }
  171.                 break;
  172.             case HEADER:
  173.                 ApiHeaderParameter header = new ApiHeaderParameter(rp.getNome(), apiParameterSchema);
  174.                 header.setDescription(rp.getDescrizione());
  175.                 header.setRequired(rp.isRequired());
  176.                 if(apiRequest!=null) {
  177.                     apiRequest.addHeaderParameter(header);
  178.                 }
  179.                 else if(apiResponse!=null) {
  180.                     apiResponse.addHeaderParameter(header);
  181.                 }
  182.                 break;
  183.             case QUERY:
  184.                 ApiRequestQueryParameter query = new ApiRequestQueryParameter(rp.getNome(), apiParameterSchema);
  185.                 query.setDescription(rp.getDescrizione());
  186.                 query.setRequired(rp.isRequired());
  187.                 if(apiRequest!=null) {
  188.                     apiRequest.addQueryParameter(query);
  189.                 }
  190.                 break;
  191.             default:
  192.                 break;
  193.             }  
  194.         }
  195.     }
  196.    
  197.     private static void initRepresentationList(List<ResourceRepresentation> rrList, ApiRequest apiRequest, ApiResponse apiResponse) {
  198.         for (ResourceRepresentation rr : rrList) {
  199.             ApiBodyParameter parameter = new ApiBodyParameter(rr.getNome());
  200.             parameter.setDescription(rr.getDescrizione());
  201.             parameter.setMediaType(rr.getMediaType());
  202.             if(rr.getRepresentationType()!=null) {
  203.                 switch (rr.getRepresentationType()) {
  204.                 case JSON:
  205.                     if(rr.getJson()!=null) {
  206.                         String tipo = rr.getJson().getTipo();
  207.                         if(tipo!=null && tipo.contains("#")) {
  208.                             ApiReference ref = new ApiReference(tipo.split("#")[0], tipo.split("#")[1]);
  209.                             parameter.setElement(ref);
  210.                         }
  211.                         else {
  212.                             parameter.setElement(tipo);
  213.                         }
  214.                     }
  215.                     break;
  216.                 case XML:
  217.                     if(rr.getXml()!=null) {
  218.                         parameter.setElement(new QName(rr.getXml().getNamespace(),rr.getXml().getNome()));
  219.                     }
  220.                     break;
  221.                 }
  222.             }
  223.             if(apiRequest!=null) {
  224.                 apiRequest.addBodyParameter(parameter);
  225.             }
  226.             else {
  227.                 apiResponse.addBodyParameter(parameter);
  228.             }
  229.         }
  230.     }
  231. }