guru.nidi.ramltester.core.Usage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of raml-tester Show documentation
Show all versions of raml-tester Show documentation
Test if a request/response matches a given raml definition.
/*
* Copyright (C) 2014 Stefan Niederhauser ([email protected])
*
* 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 guru.nidi.ramltester.core;
import java.util.*;
/**
*
*/
public class Usage implements Iterable> {
private final Map resources = new HashMap<>();
private static T getOrCreate(Class clazz, Map map, String name) {
T res = map.get(name);
if (res == null) {
try {
res = clazz.newInstance();
map.put(name, res);
} catch (Exception e) {
throw new RamlCheckerException("Could not create instance of " + clazz, e);
}
}
return res;
}
public Resource resource(String path) {
return getOrCreate(Resource.class, resources, path);
}
public void add(Usage usage) {
for (final Map.Entry resourceEntry : usage) {
final Resource resource = resource(resourceEntry.getKey());
resource.incUses(resourceEntry.getValue().getUses());
for (final Map.Entry actionEntry : resourceEntry.getValue()) {
final Action action = resource.action(actionEntry.getKey());
final Action usageAction = actionEntry.getValue();
action.incUses(usageAction.getUses());
action.addQueryParameters(usageAction.getQueryParameters());
action.addRequestHeaders(usageAction.getRequestHeaders());
action.addResponseCodes(usageAction.getResponseCodes());
for (final Map.Entry responseEntry : usageAction.responses()) {
final Response response = action.response(responseEntry.getKey());
response.addResponseHeaders(responseEntry.getValue().getResponseHeaders());
}
for (final Map.Entry mimeTypeEntry : usageAction.mimeTypes()) {
final MimeType mimeType = action.mimeType(mimeTypeEntry.getKey());
mimeType.addFormParameters(mimeTypeEntry.getValue().getFormParameters());
}
}
}
}
@Override
public String toString() {
return "Usage" + resources;
}
@Override
public Iterator> iterator() {
return resources.entrySet().iterator();
}
public Set getUnusedResources() {
final Set res = new HashSet<>();
for (final Map.Entry resourceEntry : this) {
if (resourceEntry.getValue().getUses() == 0 && !resourceEntry.getValue().actions.isEmpty()) {
res.add(resourceEntry.getKey());
}
}
return res;
}
public Set getUnusedActions() {
return UsageCollector.ACTION.collect(this);
}
public Set getUnusedQueryParameters() {
return UsageCollector.QUERY_PARAM.collect(this);
}
public Set getUnusedFormParameters() {
return UsageCollector.FORM_PARAM.collect(this);
}
public Set getUnusedRequestHeaders() {
return UsageCollector.REQUEST_HEADER.collect(this);
}
public Set getUnusedResponseHeaders() {
return UsageCollector.RESPONSE_HEADER.collect(this);
}
public Set getUnusedResponseCodes() {
return UsageCollector.RESPONSE_CODE.collect(this);
}
static class UsageBase {
private int uses;
public void incUses(int count) {
uses += count;
}
public int getUses() {
return uses;
}
}
static class Resource extends UsageBase implements Iterable> {
private final Map actions = new HashMap<>();
public Action action(String name) {
return getOrCreate(Action.class, actions, name);
}
@Override
public String toString() {
return "Resource" + actions;
}
@Override
public Iterator> iterator() {
return actions.entrySet().iterator();
}
}
static class Action extends UsageBase {
private final Map responses = new HashMap<>();
private final Map mimeTypes = new HashMap<>();
private final CountSet queryParameters = new CountSet<>();
private final CountSet requestHeaders = new CountSet<>();
private final CountSet responseCodes = new CountSet<>();
public Response response(String name) {
return getOrCreate(Response.class, responses, name);
}
public Iterable> responses() {
return responses.entrySet();
}
public MimeType mimeType(String name) {
return getOrCreate(MimeType.class, mimeTypes, name);
}
public Iterable> mimeTypes() {
return mimeTypes.entrySet();
}
public void addQueryParameters(Set names) {
queryParameters.addAll(names);
}
public void initQueryParameters(Set names) {
queryParameters.addAll(names, 0);
}
public void addRequestHeaders(Set names) {
requestHeaders.addAll(names);
}
public void initRequestHeaders(Set names) {
requestHeaders.addAll(names, 0);
}
public void addResponseCode(String name) {
responseCodes.add(name);
}
public void addResponseCodes(Set names) {
responseCodes.addAll(names);
}
public void initResponseCodes(Set names) {
responseCodes.addAll(names, 0);
}
public CountSet getQueryParameters() {
return queryParameters;
}
public CountSet getRequestHeaders() {
return requestHeaders;
}
public CountSet getResponseCodes() {
return responseCodes;
}
@Override
public String toString() {
return "Action{" +
"responses=" + responses +
", mimeTypes=" + mimeTypes +
", queryParameters=" + queryParameters +
", requestHeaders=" + requestHeaders +
", responseCodes=" + responseCodes +
'}';
}
}
static class Response {
private final CountSet responseHeaders = new CountSet<>();
public void addResponseHeaders(Set names) {
responseHeaders.addAll(names);
}
public void initResponseHeaders(Set names) {
responseHeaders.addAll(names, 0);
}
public CountSet getResponseHeaders() {
return responseHeaders;
}
@Override
public String toString() {
return "Response{" +
"responseHeaders=" + responseHeaders +
'}';
}
}
static class MimeType {
private final CountSet formParameters = new CountSet<>();
public void addFormParameters(Set names) {
formParameters.addAll(names);
}
public void initFormParameters(Set names) {
formParameters.addAll(names, 0);
}
public CountSet getFormParameters() {
return formParameters;
}
@Override
public String toString() {
return "MimeType{" +
"formParameters=" + formParameters +
'}';
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy