ApplicationResource.java

1
package org.maxur.perfmodel.backend.rest.resources;
2
3
import com.fasterxml.jackson.core.JsonFactory;
4
import com.fasterxml.jackson.core.type.TypeReference;
5
import com.fasterxml.jackson.databind.ObjectMapper;
6
import com.google.common.base.Charsets;
7
import com.google.common.io.Resources;
8
import org.jsondoc.core.annotation.*;
9
import org.jsondoc.core.pojo.ApiVerb;
10
import org.maxur.perfmodel.backend.service.Application;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13
14
import javax.inject.Inject;
15
import javax.inject.Named;
16
import javax.ws.rs.*;
17
import javax.ws.rs.core.MediaType;
18
import javax.ws.rs.core.Response;
19
import java.io.IOException;
20
import java.net.URL;
21
import java.util.HashMap;
22
import java.util.Map;
23
24
import static org.maxur.perfmodel.backend.rest.WebException.badRequestException;
25
import static org.maxur.perfmodel.backend.utils.DateTimeUtils.schedule;
26
27
/**
28
 * @author Maxim Yunusov
29
 * @version 1.0
30
 * @since <pre>11/29/13</pre>
31
 */
32
@Path("/{a:application}")
33
@Api(name = "Application Resource", description = "Methods for managing PMC Application")
34
@ApiVersion(since = "1.0")
35
public class ApplicationResource {
36
37
    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationResource.class);
38
39
    @Inject
40
    private Application application;
41
42
43
    @SuppressWarnings("unused")
44
    @Named("webapp.url")
45
    private String webappUrl;
46
47
    @GET
48
    @Path("/jsondoc")
49
    @Produces(MediaType.APPLICATION_JSON)
50
    @ApiMethod(
51
            path = "/application/jsondoc",
52
            verb = ApiVerb.GET,
53
            description = "Gets a application documentation",
54
            produces = { MediaType.APPLICATION_JSON },
55
            responsestatuscode = "200 - OK"
56
    )
57
    @ApiErrors(apierrors={
58
            @ApiError(code="500", description="Application critical error")
59
    })
60
    public @ApiResponseObject String getJsonDoc() {
61
        URL url = Resources.getResource("jsondoc.json");
62
        try {
63
            final String jsonDoc = Resources.toString(url, Charsets.UTF_8);
64 1 1. getJsonDoc : mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::getJsonDoc to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
            return jsonDoc.replaceAll("http://127.0.0.1:8080/api", webappUrl + "api");
65
        } catch (IOException e) {
66
            throw new IllegalStateException(e);
67
        }
68
    }
69
70
    @GET
71
    @Path("/version")
72
    @Produces(MediaType.APPLICATION_JSON)
73
    @ApiMethod(
74
        path = "/application/version",
75
        verb = ApiVerb.GET,
76
        description = "Gets a application version",
77
        produces = { MediaType.APPLICATION_JSON },
78
        responsestatuscode = "200 - OK"
79
    )
80
    @ApiErrors(apierrors={
81
            @ApiError(code="500", description="Application critical error")
82
    })
83
    public @ApiResponseObject String getVersion() {
84 1 1. getVersion : mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::getVersion to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
        return application.version();
85
    }
86
87
    @PUT
88
    @Path("/status")
89
    @Consumes(MediaType.APPLICATION_JSON)
90
    @Produces(MediaType.APPLICATION_JSON)
91
    @ApiMethod(
92
            path = "/application/status",
93
            verb = ApiVerb.PUT,
94
            description = "Sets a application status to stopped",
95
            produces = { MediaType.APPLICATION_JSON },
96
            consumes = { MediaType.APPLICATION_JSON },
97
            responsestatuscode = "200 - OK"
98
    )
99
    @ApiErrors(apierrors={
100
            @ApiError(code="500", description="Application critical error")
101
    })
102
    public Response action(@ApiBodyObject final String object) {
103
        try {
104
            final ObjectMapper mapper = new ObjectMapper(new JsonFactory());
105
            final Map<String, Object> map = mapper.readValue(object, new TypeReference<HashMap<String, Object>>() {
106
            });
107
            final String status = (String) map.get("status");
108 1 1. action : negated conditional → NO_COVERAGE
            switch (status) {
109
                case "stopped":
110
                    schedule(application::stop, 100);
111
                    break;
112
                default:
113
                    throw badRequestException("Status '%s' is not valid", status);
114
            }
115 1 1. action : mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::action to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE
            return Response.status(Response.Status.ACCEPTED).build();
116
        } catch (IOException e) {
117
            LOGGER.error("Operation is not valid", e);
118
            throw badRequestException("Operation is not valid", e.getMessage());
119
        }
120
    }
121
}

Mutations

64

1.1
Location : getJsonDoc
Killed by : none
mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::getJsonDoc to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

84

1.1
Location : getVersion
Killed by : none
mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::getVersion to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

108

1.1
Location : action
Killed by : none
negated conditional → NO_COVERAGE

115

1.1
Location : action
Killed by : none
mutated return of Object value for org/maxur/perfmodel/backend/rest/resources/ApplicationResource::action to ( if (x != null) null else throw new RuntimeException ) → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.1.6