/*
* Copyright (c) MuleSoft, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*/
package org.raml.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.raml.model.parameter.UriParameter;
import org.raml.parser.annotation.Mapping;
import org.raml.parser.annotation.Scalar;
import org.raml.parser.annotation.Sequence;
import org.raml.parser.resolver.ResourceHandler;
import org.raml.parser.rule.SecurityReferenceSequenceRule;
public class Raml
{
@Scalar(required = true)
private String title;
@Scalar()
private String version;
@Scalar(rule = org.raml.parser.rule.BaseUriRule.class)
private String baseUri;
@Sequence
private List<Protocol> protocols = new ArrayList<Protocol>();
@Mapping(rule = org.raml.parser.rule.UriParametersRule.class)
private Map<String, UriParameter> baseUriParameters = new HashMap<String, UriParameter>();
@Scalar()
private String mediaType;
@Sequence(rule = org.raml.parser.rule.GlobalSchemasRule.class)
private List<Map<String, String>> schemas = new ArrayList<Map<String, String>>();
@Sequence
private List<Map<String, Template>> resourceTypes;
@Sequence
private List<Map<String, Template>> traits;
@Sequence
private List<Map<String, SecurityScheme>> securitySchemes = new ArrayList<Map<String, SecurityScheme>>();
@Sequence(rule = SecurityReferenceSequenceRule.class)
private List<SecurityReference> securedBy = new ArrayList<SecurityReference>();
@Mapping(handler = ResourceHandler.class, implicit = true)
private Map<String, Resource> resources = new LinkedHashMap<String, Resource>();
@Sequence
private List<DocumentationItem> documentation;
public Raml()
{
}
public void setDocumentation(List<DocumentationItem> documentation)
{
this.documentation = documentation;
}
public List<DocumentationItem> getDocumentation()
{
return documentation;
}
public void setBaseUriParameters(Map<String, UriParameter> uriParameters)
{
this.baseUriParameters = uriParameters;
}
public void setResources(Map<String, Resource> resources)
{
this.resources = resources;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getVersion()
{
return version;
}
public void setVersion(String version)
{
this.version = version;
}
public String getBaseUri()
{
return baseUri;
}
public void setBaseUri(String baseUri)
{
this.baseUri = baseUri;
}
public String getBasePath()
{
//skip protocol separator "//"
int start = baseUri.indexOf("//") + 2;
if (start == -1)
{
start = 0;
}
start = baseUri.indexOf("/", start);
return baseUri.substring(start);
}
public String getUri()
{
return "";
}
public String getMediaType()
{
return mediaType;
}
public void setMediaType(String mediaType)
{
this.mediaType = mediaType;
}
public Map<String, Resource> getResources()
{
return resources;
}
public Map<String, UriParameter> getBaseUriParameters()
{
return baseUriParameters;
}
public List<Map<String, Template>> getResourceTypes()
{
return resourceTypes;
}
public void setResourceTypes(List<Map<String, Template>> resourceTypes)
{
this.resourceTypes = resourceTypes;
}
public List<Map<String, Template>> getTraits()
{
return traits;
}
public void setTraits(List<Map<String, Template>> traits)
{
this.traits = traits;
}
public List<Map<String, String>> getSchemas()
{
return schemas;
}
public void setSchemas(List<Map<String, String>> schemas)
{
this.schemas = schemas;
}
public List<Protocol> getProtocols()
{
return protocols;
}
public void setProtocols(List<Protocol> protocols)
{
this.protocols = protocols;
}
public List<Map<String, SecurityScheme>> getSecuritySchemes()
{
return securitySchemes;
}
public void setSecuritySchemes(List<Map<String, SecurityScheme>> securitySchemes)
{
this.securitySchemes = securitySchemes;
}
public List<SecurityReference> getSecuredBy()
{
return securedBy;
}
public void setSecuredBy(List<SecurityReference> securedBy)
{
this.securedBy = securedBy;
}
public Map<String, String> getConsolidatedSchemas()
{
Map<String, String> consolidated = new HashMap<String, String>();
for (Map<String, String> map : getSchemas())
{
consolidated.putAll(map);
}
return consolidated;
}
public Resource getResource(String path)
{
for (Resource resource : resources.values())
{
if (path.startsWith(resource.getRelativeUri()))
{
if (path.length() == resource.getRelativeUri().length())
{
return resource;
}
if (path.charAt(resource.getRelativeUri().length()) == '/')
{
return resource.getResource(path.substring(resource.getRelativeUri().length()));
}
}
}
return null;
}
}