test_class.declarator: FOLDERPATH = "http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/"
test_class.modifier: private static final
test_class.original_string: private static final String FOLDERPATH = "http%253A%252F%252Fwinery.opentosca.org%252Ftest%252Fservicetemplates%252Ffruits/baobab_serviceTemplate/topologytemplate/";
test_class.type: String
test_class.var_name: FOLDERPATH
test_class.declarator: ENTITY_TYPE = "topologytemplates/"
test_class.modifier: private static final
test_class.original_string: private static final String ENTITY_TYPE = "topologytemplates/";
test_class.type: String
test_class.var_name: ENTITY_TYPE
test_class.declarator: INSTANCE_XML_PATH = "servicetemplates/" + ENTITY_TYPE + "fruits-at-3fe0df76e98d46ead68295920e5d1cf1354bdea1.xml"
test_class.modifier: private static final
test_class.original_string: private static final String INSTANCE_XML_PATH = "servicetemplates/" + ENTITY_TYPE + "fruits-at-3fe0df76e98d46ead68295920e5d1cf1354bdea1.xml";
test_class.type: String
test_class.var_name: INSTANCE_XML_PATH
test_class.declarator: BAOBAB_JSON_PATH = "servicetemplates/" + ENTITY_TYPE + "list-at-3fe0df76e98d46ead68295920e5d1cf1354bdea1.json"
test_class.modifier: private static final
test_class.original_string: private static final String BAOBAB_JSON_PATH = "servicetemplates/" + ENTITY_TYPE + "list-at-3fe0df76e98d46ead68295920e5d1cf1354bdea1.json";
test_class.type: String
test_class.var_name: BAOBAB_JSON_PATH
test_class.declarator: INSTANCE_URL = "servicetemplates/" + FOLDERPATH
test_class.modifier: private static final
test_class.original_string: private static final String INSTANCE_URL = "servicetemplates/" + FOLDERPATH;
test_class.type: String
test_class.var_name: INSTANCE_URL
test_class.file: org.eclipse.winery.repository.rest/src/test/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResourceTest.java
test_class.identifier: TopologyTemplateResourceTest
test_class.superclass: extends AbstractResourceTest
test_case.body: @Test
      public void getAvailableFeatures() throws Exception {
          this.setRevisionTo("origin/plain");
  
          this.assertGet("servicetemplates/http%253A%252F%252Fopentosca.org%252Fadd%252Fmanagement%252Fto%252Finstances%252Fservicetemplates/STWithBasicManagementOnly_w1-wip1/topologytemplate/availablefeatures",
              "entitytypes/servicetemplates/topologytemplates/availableFeaturesForBasicManagementST.json");
      }
test_case.class_method_signature: TopologyTemplateResourceTest.getAvailableFeatures()
test_case.full_signature: @Test public void getAvailableFeatures()
test_case.identifier: getAvailableFeatures
test_case.invocations: setRevisionTo assertGet
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void getAvailableFeatures()
focal_class.declarator: LOGGER = LoggerFactory.getLogger(TopologyTemplateResource.class)
focal_class.modifier: private static final
focal_class.original_string: private static final Logger LOGGER = LoggerFactory.getLogger(TopologyTemplateResource.class);
focal_class.type: Logger
focal_class.var_name: LOGGER
focal_class.declarator: topologyTemplate
focal_class.modifier: private final
focal_class.original_string: private final TTopologyTemplate topologyTemplate;
focal_class.type: TTopologyTemplate
focal_class.var_name: topologyTemplate
focal_class.declarator: parent
focal_class.modifier: private final
focal_class.original_string: private final AbstractComponentInstanceResourceContainingATopology parent;
focal_class.type: AbstractComponentInstanceResourceContainingATopology
focal_class.var_name: parent
focal_class.declarator: type
focal_class.modifier: private final
focal_class.original_string: private final String type;
focal_class.type: String
focal_class.var_name: type
focal_class.file: org.eclipse.winery.repository.rest/src/main/java/org/eclipse/winery/repository/rest/resources/servicetemplates/topologytemplates/TopologyTemplateResource.java
focal_class.identifier: TopologyTemplateResource
focal_class.class_method_signature: TopologyTemplateResource.TopologyTemplateResource(AbstractComponentInstanceResourceContainingATopology parent, TTopologyTemplate topologyTemplate, String type)
focal_class.full_signature: public  TopologyTemplateResource(AbstractComponentInstanceResourceContainingATopology parent, TTopologyTemplate topologyTemplate, String type)
focal_class.identifier: TopologyTemplateResource
focal_class.modifiers: public
focal_class.parameters: (AbstractComponentInstanceResourceContainingATopology parent, TTopologyTemplate topologyTemplate, String type)
focal_class.signature:  TopologyTemplateResource(AbstractComponentInstanceResourceContainingATopology parent, TTopologyTemplate topologyTemplate, String type)
focal_class.class_method_signature: TopologyTemplateResource.getHTML(
          @QueryParam(value = "edit") String edit,
          @QueryParam(value = "script") @ApiParam(value = "the script to include in a <script> tag. The function wineryViewExternalScriptOnLoad if it is defined. Only available if 'view' is also set") String script,
          @QueryParam(value = "view") String view,
          @QueryParam(value = "autoLayoutOnLoad") String autoLayoutOnLoad,
          @Context UriInfo uriInfo)
focal_class.full_signature: @GET @ApiOperation(value = "?edit is used in the URL to get the jsPlumb-based editor") @Produces(MediaType.TEXT_HTML) // @formatter:off public Response getHTML(
          @QueryParam(value = "edit") String edit,
          @QueryParam(value = "script") @ApiParam(value = "the script to include in a <script> tag. The function wineryViewExternalScriptOnLoad if it is defined. Only available if 'view' is also set") String script,
          @QueryParam(value = "view") String view,
          @QueryParam(value = "autoLayoutOnLoad") String autoLayoutOnLoad,
          @Context UriInfo uriInfo)
focal_class.identifier: getHTML
focal_class.modifiers: @GET @ApiOperation(value = "?edit is used in the URL to get the jsPlumb-based editor") @Produces(MediaType.TEXT_HTML) // @formatter:off public
focal_class.parameters: (
          @QueryParam(value = "edit") String edit,
          @QueryParam(value = "script") @ApiParam(value = "the script to include in a <script> tag. The function wineryViewExternalScriptOnLoad if it is defined. Only available if 'view' is also set") String script,
          @QueryParam(value = "view") String view,
          @QueryParam(value = "autoLayoutOnLoad") String autoLayoutOnLoad,
          @Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response getHTML(
          @QueryParam(value = "edit") String edit,
          @QueryParam(value = "script") @ApiParam(value = "the script to include in a <script> tag. The function wineryViewExternalScriptOnLoad if it is defined. Only available if 'view' is also set") String script,
          @QueryParam(value = "view") String view,
          @QueryParam(value = "autoLayoutOnLoad") String autoLayoutOnLoad,
          @Context UriInfo uriInfo)
focal_class.class_method_signature: TopologyTemplateResource.getTopologyTempalte()
focal_class.full_signature: @GET @ApiOperation(value = "Returns a JSON representation of the topology template." + "X and Y coordinates are embedded as attributes. QName string with Namespace: " + "{@link org.eclipse.winery.repository.common.constants.Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE}" + "@return The JSON representation of the topology template <em>without</em> associated artifacts and without the parent service template") @Produces(MediaType.APPLICATION_JSON) // @formatter:on public TTopologyTemplate getTopologyTempalte()
focal_class.identifier: getTopologyTempalte
focal_class.modifiers: @GET @ApiOperation(value = "Returns a JSON representation of the topology template." + "X and Y coordinates are embedded as attributes. QName string with Namespace: " + "{@link org.eclipse.winery.repository.common.constants.Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE}" + "@return The JSON representation of the topology template <em>without</em> associated artifacts and without the parent service template") @Produces(MediaType.APPLICATION_JSON) // @formatter:on public
focal_class.parameters: ()
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate getTopologyTempalte()
focal_class.class_method_signature: TopologyTemplateResource.mergeWithOtherTopologyTemplate(String strOtherServiceTemplateQName)
focal_class.full_signature: @Path("merge/") @Consumes(MediaType.TEXT_PLAIN) @POST public Response mergeWithOtherTopologyTemplate(String strOtherServiceTemplateQName)
focal_class.identifier: mergeWithOtherTopologyTemplate
focal_class.modifiers: @Path("merge/") @Consumes(MediaType.TEXT_PLAIN) @POST public
focal_class.parameters: (String strOtherServiceTemplateQName)
focal_class.return: Response
focal_class.signature: Response mergeWithOtherTopologyTemplate(String strOtherServiceTemplateQName)
focal_class.class_method_signature: TopologyTemplateResource.getNodeTemplatesResource()
focal_class.full_signature: @Path("nodetemplates/") public NodeTemplatesResource getNodeTemplatesResource()
focal_class.identifier: getNodeTemplatesResource
focal_class.modifiers: @Path("nodetemplates/") public
focal_class.parameters: ()
focal_class.return: NodeTemplatesResource
focal_class.signature: NodeTemplatesResource getNodeTemplatesResource()
focal_class.class_method_signature: TopologyTemplateResource.getRelationshipTemplatesResource()
focal_class.full_signature: @Path("relationshiptemplates/") public RelationshipTemplatesResource getRelationshipTemplatesResource()
focal_class.identifier: getRelationshipTemplatesResource
focal_class.modifiers: @Path("relationshiptemplates/") public
focal_class.parameters: ()
focal_class.return: RelationshipTemplatesResource
focal_class.signature: RelationshipTemplatesResource getRelationshipTemplatesResource()
focal_class.class_method_signature: TopologyTemplateResource.setModel(TTopologyTemplate topologyTemplate)
focal_class.full_signature: @PUT @ApiOperation(value = "Replaces the topology by the information given in the XML") @Consumes(MediaType.TEXT_XML) public Response setModel(TTopologyTemplate topologyTemplate)
focal_class.identifier: setModel
focal_class.modifiers: @PUT @ApiOperation(value = "Replaces the topology by the information given in the XML") @Consumes(MediaType.TEXT_XML) public
focal_class.parameters: (TTopologyTemplate topologyTemplate)
focal_class.return: Response
focal_class.signature: Response setModel(TTopologyTemplate topologyTemplate)
focal_class.class_method_signature: TopologyTemplateResource.setModelJson(TTopologyTemplate topologyTemplate)
focal_class.full_signature: @PUT @ApiOperation(value = "Replaces the topology by the information given in the JSON") @Consumes(MediaType.APPLICATION_JSON) public Response setModelJson(TTopologyTemplate topologyTemplate)
focal_class.identifier: setModelJson
focal_class.modifiers: @PUT @ApiOperation(value = "Replaces the topology by the information given in the JSON") @Consumes(MediaType.APPLICATION_JSON) public
focal_class.parameters: (TTopologyTemplate topologyTemplate)
focal_class.return: Response
focal_class.signature: Response setModelJson(TTopologyTemplate topologyTemplate)
focal_class.class_method_signature: TopologyTemplateResource.getComponentInstanceXML()
focal_class.full_signature: @GET @ApiOperation(value = "<p>Returns an XML representation of the topology template." + " X and Y coordinates are embedded as attributes. Namespace:" + "{@link org.eclipse.winery.repository.common.constants.Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE} </p>" + "<p>{@link org.eclipse.winery.repository.client.WineryRepositoryClient." + "getTopologyTemplate(QName)} consumes this template</p>" + "<p>@return The XML representation of the topology template <em>without</em>" + "associated artifacts and without the parent service template </p>") @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML}) // @formatter:on public Response getComponentInstanceXML()
focal_class.identifier: getComponentInstanceXML
focal_class.modifiers: @GET @ApiOperation(value = "<p>Returns an XML representation of the topology template." + " X and Y coordinates are embedded as attributes. Namespace:" + "{@link org.eclipse.winery.repository.common.constants.Namespaces.TOSCA_WINERY_EXTENSIONS_NAMESPACE} </p>" + "<p>{@link org.eclipse.winery.repository.client.WineryRepositoryClient." + "getTopologyTemplate(QName)} consumes this template</p>" + "<p>@return The XML representation of the topology template <em>without</em>" + "associated artifacts and without the parent service template </p>") @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML}) // @formatter:on public
focal_class.parameters: ()
focal_class.return: Response
focal_class.signature: Response getComponentInstanceXML()
focal_class.class_method_signature: TopologyTemplateResource.split(@Context UriInfo uriInfo)
focal_class.full_signature: @Path("split/") @Produces(MediaType.TEXT_PLAIN) @POST public Response split(@Context UriInfo uriInfo)
focal_class.identifier: split
focal_class.modifiers: @Path("split/") @Produces(MediaType.TEXT_PLAIN) @POST public
focal_class.parameters: (@Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response split(@Context UriInfo uriInfo)
focal_class.class_method_signature: TopologyTemplateResource.match(@Context UriInfo uriInfo)
focal_class.full_signature: @Path("match/") @Produces(MediaType.TEXT_PLAIN) @POST public Response match(@Context UriInfo uriInfo)
focal_class.identifier: match
focal_class.modifiers: @Path("match/") @Produces(MediaType.TEXT_PLAIN) @POST public
focal_class.parameters: (@Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response match(@Context UriInfo uriInfo)
focal_class.class_method_signature: TopologyTemplateResource.allocate(@Context UriInfo uriInfo, AllocationRequest allocationRequest)
focal_class.full_signature: @Path("allocate") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @POST public Response allocate(@Context UriInfo uriInfo, AllocationRequest allocationRequest)
focal_class.identifier: allocate
focal_class.modifiers: @Path("allocate") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @POST public
focal_class.parameters: (@Context UriInfo uriInfo, AllocationRequest allocationRequest)
focal_class.return: Response
focal_class.signature: Response allocate(@Context UriInfo uriInfo, AllocationRequest allocationRequest)
focal_class.class_method_signature: TopologyTemplateResource.composeServiceTemplates(CompositionData compositionData, @Context UriInfo uriInfo)
focal_class.full_signature: @POST @Path("compose/") @Consumes( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) public Response composeServiceTemplates(CompositionData compositionData, @Context UriInfo uriInfo)
focal_class.identifier: composeServiceTemplates
focal_class.modifiers: @POST @Path("compose/") @Consumes( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) @Produces( {MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) public
focal_class.parameters: (CompositionData compositionData, @Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response composeServiceTemplates(CompositionData compositionData, @Context UriInfo uriInfo)
focal_class.class_method_signature: TopologyTemplateResource.resolve(@Context UriInfo uriInfo)
focal_class.full_signature: @POST @Path("resolve/") @Produces(MediaType.TEXT_PLAIN) public Response resolve(@Context UriInfo uriInfo)
focal_class.identifier: resolve
focal_class.modifiers: @POST @Path("resolve/") @Produces(MediaType.TEXT_PLAIN) public
focal_class.parameters: (@Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response resolve(@Context UriInfo uriInfo)
focal_class.class_method_signature: TopologyTemplateResource.computeDi(UpdateInfo updateInfo)
focal_class.full_signature: @POST @Path("kvcomparison") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public PropertyDiffList computeDi(UpdateInfo updateInfo)
focal_class.identifier: computeDi
focal_class.modifiers: @POST @Path("kvcomparison") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: (UpdateInfo updateInfo)
focal_class.return: PropertyDiffList
focal_class.signature: PropertyDiffList computeDi(UpdateInfo updateInfo)
focal_class.class_method_signature: TopologyTemplateResource.updateVersionOfNodeTemplate(UpdateInfo updateInfo)
focal_class.full_signature: @POST @Path("update") @Consumes(MediaType.APPLICATION_JSON) public TTopologyTemplate updateVersionOfNodeTemplate(UpdateInfo updateInfo)
focal_class.identifier: updateVersionOfNodeTemplate
focal_class.modifiers: @POST @Path("update") @Consumes(MediaType.APPLICATION_JSON) public
focal_class.parameters: (UpdateInfo updateInfo)
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate updateVersionOfNodeTemplate(UpdateInfo updateInfo)
focal_class.class_method_signature: TopologyTemplateResource.applySolution(SolutionInputData data)
focal_class.full_signature: @POST @Path("applysolution") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public TTopologyTemplate applySolution(SolutionInputData data)
focal_class.identifier: applySolution
focal_class.modifiers: @POST @Path("applysolution") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: (SolutionInputData data)
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate applySolution(SolutionInputData data)
focal_class.class_method_signature: TopologyTemplateResource.determineStatefulComponents()
focal_class.full_signature: @GET @Produces(MediaType.APPLICATION_JSON) @Path("determinestatefulcomponents") public TTopologyTemplate determineStatefulComponents()
focal_class.identifier: determineStatefulComponents
focal_class.modifiers: @GET @Produces(MediaType.APPLICATION_JSON) @Path("determinestatefulcomponents") public
focal_class.parameters: ()
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate determineStatefulComponents()
focal_class.class_method_signature: TopologyTemplateResource.determineFreezableComponents()
focal_class.full_signature: @GET @Produces(MediaType.APPLICATION_JSON) @Path("determinefreezablecomponents") public TopologyAndErrorList determineFreezableComponents()
focal_class.identifier: determineFreezableComponents
focal_class.modifiers: @GET @Produces(MediaType.APPLICATION_JSON) @Path("determinefreezablecomponents") public
focal_class.parameters: ()
focal_class.return: TopologyAndErrorList
focal_class.signature: TopologyAndErrorList determineFreezableComponents()
focal_class.class_method_signature: TopologyTemplateResource.cleanFreezableComponents()
focal_class.full_signature: @GET @Produces(MediaType.APPLICATION_JSON) @Path("cleanfreezablecomponents") public TTopologyTemplate cleanFreezableComponents()
focal_class.identifier: cleanFreezableComponents
focal_class.modifiers: @GET @Produces(MediaType.APPLICATION_JSON) @Path("cleanfreezablecomponents") public
focal_class.parameters: ()
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate cleanFreezableComponents()
focal_class.class_method_signature: TopologyTemplateResource.getAvailableFeatures()
focal_class.full_signature: @GET @Path("availablefeatures") @Produces(MediaType.APPLICATION_JSON) public ArrayList<AvailableFeaturesApiData> getAvailableFeatures()
focal_class.identifier: getAvailableFeatures
focal_class.modifiers: @GET @Path("availablefeatures") @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: ()
focal_class.return: ArrayList<AvailableFeaturesApiData>
focal_class.signature: ArrayList<AvailableFeaturesApiData> getAvailableFeatures()
focal_class.class_method_signature: TopologyTemplateResource.applyAvailableFeatures(ArrayList<AvailableFeaturesApiData> featuresList)
focal_class.full_signature: @PUT @Path("availablefeatures") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public TTopologyTemplate applyAvailableFeatures(ArrayList<AvailableFeaturesApiData> featuresList)
focal_class.identifier: applyAvailableFeatures
focal_class.modifiers: @PUT @Path("availablefeatures") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: (ArrayList<AvailableFeaturesApiData> featuresList)
focal_class.return: TTopologyTemplate
focal_class.signature: TTopologyTemplate applyAvailableFeatures(ArrayList<AvailableFeaturesApiData> featuresList)
focal_class.class_method_signature: TopologyTemplateResource.getNewVersionList()
focal_class.full_signature: @GET @Path("newversions") @Produces(MediaType.APPLICATION_JSON) public List<NewVersionListElement> getNewVersionList()
focal_class.identifier: getNewVersionList
focal_class.modifiers: @GET @Path("newversions") @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: ()
focal_class.return: List<NewVersionListElement>
focal_class.signature: List<NewVersionListElement> getNewVersionList()
focal_class.class_method_signature: TopologyTemplateResource.applyGroupingAndPlacement(@Context UriInfo uriInfo)
focal_class.full_signature: @POST @Path("applyplacement") @Produces(MediaType.APPLICATION_JSON) public Response applyGroupingAndPlacement(@Context UriInfo uriInfo)
focal_class.identifier: applyGroupingAndPlacement
focal_class.modifiers: @POST @Path("applyplacement") @Produces(MediaType.APPLICATION_JSON) public
focal_class.parameters: (@Context UriInfo uriInfo)
focal_class.return: Response
focal_class.signature: Response applyGroupingAndPlacement(@Context UriInfo uriInfo)
focal_method.body: @GET
      @Path("availablefeatures")
      @Produces(MediaType.APPLICATION_JSON)
      public ArrayList<AvailableFeaturesApiData> getAvailableFeatures() {
          ArrayList<AvailableFeaturesApiData> apiData = new ArrayList<>();
  
          String deploymentTechnology = null;
          if (this.parent.getElement() instanceof HasTags && ((HasTags) this.parent.getElement()).getTags() != null) {
              for (TTag tag : ((HasTags) this.parent.getElement()).getTags().getTag()) {
                  if (tag.getName().toLowerCase().contains("deploymentTechnology".toLowerCase())) {
                      deploymentTechnology = tag.getValue();
                      break;
                  }
              }
          }
  
          EnhancementUtils.getAvailableFeaturesForTopology(this.topologyTemplate, deploymentTechnology)
              .forEach((nodeTemplateId, featuresMap) -> {
                  ArrayList<AvailableFeaturesApiData.Features> features = new ArrayList<>();
                  featuresMap.forEach(
                      (featureType, featureName) -> features.add(new AvailableFeaturesApiData.Features(featureType, featureName))
                  );
                  apiData.add(new AvailableFeaturesApiData(nodeTemplateId, features));
              });
  
          return apiData;
      }
focal_method.class_method_signature: TopologyTemplateResource.getAvailableFeatures()
focal_method.full_signature: @GET @Path("availablefeatures") @Produces(MediaType.APPLICATION_JSON) public ArrayList<AvailableFeaturesApiData> getAvailableFeatures()
focal_method.identifier: getAvailableFeatures
focal_method.invocations: getElement getTags getElement getTag getTags getElement contains toLowerCase getName toLowerCase getValue forEach getAvailableFeaturesForTopology forEach add add
focal_method.modifiers: @GET @Path("availablefeatures") @Produces(MediaType.APPLICATION_JSON) public
focal_method.parameters: ()
focal_method.return: ArrayList<AvailableFeaturesApiData>
focal_method.signature: ArrayList<AvailableFeaturesApiData> getAvailableFeatures()