com.smash.revolance.ui.materials.mock.webdriver.handler.JSonWireController.java Source code

Java tutorial

Introduction

Here is the source code for com.smash.revolance.ui.materials.mock.webdriver.handler.JSonWireController.java

Source

package com.smash.revolance.ui.materials.mock.webdriver.handler;

/*
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Revolance-UI-Materials-Mock-Webdriver-Service
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Copyright (C) 2012 - 2013 RevoLance
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the 
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public 
 * License along with this program.  If not, see
 * <http://www.gnu.org/licenses/gpl-3.0.html>.
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */

import com.smash.revolance.ui.materials.mock.webdriver.browser.MockedBrowserController;
import com.smash.revolance.ui.materials.mock.webdriver.command.*;
import com.sun.jersey.server.impl.application.WebApplicationContext;
import org.openqa.selenium.remote.DriverCommand;

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import java.util.UUID;

/**
 * User: wsmash
 * Date: 28/09/13
 * Time: 14:59
 */
@Path("/hub")
public class JSonWireController {
    static {
        CommandExecutor.registerListener(new MockedBrowserController());
    }

    @Context
    Request request;

    @Context
    UriInfo uriInfo;

    /*
    public void setElementClicked(boolean b)
    {
        context.put( "elementClicked", "ok" );
    }
        
    public void setElementId(String id)
    {
        context.put( "elementIdAttribute", id );
    }
        
    public void setElementDisabled(boolean disabled)
    {
        context.put( "elementDisabledAttribute", String.valueOf( disabled ) );
    }
        
    public void setElementClass(String clazz)
    {
        context.put( "elementClassAttribute", clazz );
    }
        
    public void setElementHref(String href)
    {
        context.put( "elementHrefAttribute", href );
    }
        
    public void setElementType(String type)
    {
        context.put( "elementTypeAttribute", type );
    }
        
    public void setElementLocation(int x, int y)
    {
        context.put( "elementX", String.valueOf( x ) );
        context.put( "elementY", String.valueOf( y ) );
    }
        
    public void setElementSize(int w, int h)
    {
        context.put( "elementWidth", String.valueOf( w ) );
        context.put( "elementHeight", String.valueOf( h ) );
    }
        
    public void setElementText(String text)
    {
        context.put( "elementText", text );
    }
        
    public void setElementTagName(String tagName)
    {
        context.put( "elementTagName", tagName );
    }
        
    private void setSessionId(String id)
    {
        context.put( "sessionId", id );
    }
        
    public void setUrl(String url)
    {
        context.put( "currentUrl", url );
    }
        
    public void setAlertMessage(String msg)
    {
        context.put("alertMessage", msg);
    }
        
    public void setAlertStatusCode(WireProtocolResponseCode code)
    {
        context.put( "alertStatusCode", String.valueOf( code.getCode() ) );
    }
        
    private ResponseDefinitionBuilder buildJsonResponse(RequestMethod method, String url)
    {
        String body = buildJsonResponse(context, String.valueOf( method ), url);
        
        ResponseDefinitionBuilder builder = new ResponseDefinitionBuilder();
        builder.withHeader( "content-type", "application/json; charset=UTF-8" ).withBody( body );
        
        return builder;
    }
        
    private String buildJsonResponse(Map<String, Object> context, String method, String templatePath)
    {
        try
        {
            templatePath = templatePath+"/"+String.valueOf( method ).toLowerCase();
            return TemplateHelper.processTemplate(templatePath+"/body.json", context);
        }
        catch (IOException e)
        {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        catch (TemplateException e)
        {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
        return "";
    }
        
    */
    @POST
    @Path("/session")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response createSession() {
        Command cmd = new Command(UUID.randomUUID().toString(), DriverCommand.NEW_SESSION, "POST");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/timeouts")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response setTimeouts(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.SET_TIMEOUT, "POST");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/timeouts/implicit_wait")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response setTimeoutsImplicitWait(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.IMPLICITLY_WAIT, "POST");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/screenshot")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response takeScreenshot(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.SCREENSHOT, "GET");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/title")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response getTitle(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.GET_TITLE, "GET");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @DELETE
    @Path("/session/{sessionId}")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response closeSession(@PathParam("sessionId") String sessionId) {
        return Response.ok().build();
    }

    @POST
    @Path("/session/{sessionId}/window/current/size")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response setWindowSize(@PathParam("sessionId") String sessionId, String payload) {
        Command cmd = new Command(sessionId, DriverCommand.SET_WINDOW_SIZE, "POST", payload);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/alert_text")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getAlertText(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.GET_ALERT_TEXT, "GET");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/url")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getUrl(@PathParam("sessionId") String sessionId) {
        Command cmd = new Command(sessionId, DriverCommand.GET_CURRENT_URL, "GET");
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/url")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response setCurrentUrl(@PathParam("sessionId") String sessionId, String payload) {
        Command cmd = new Command(sessionId, DriverCommand.GET, "POST", payload);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/displayed")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response isElementDisplayed(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.IS_ELEMENT_DISPLAYED, "GET", "",
                elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/size")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElementSize(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.GET_ELEMENT_SIZE, "GET", "", elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/css/{property}")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getCssPropertyValue(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId, @PathParam("property") String property) {
        ElementCSSCommand cmd = new ElementCSSCommand(sessionId, DriverCommand.GET_ELEMENT_VALUE_OF_CSS_PROPERTY,
                "GET", "", elementId, property);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/location")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElementLocation(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.GET_ELEMENT_LOCATION, "GET", "",
                elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/name")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElementTagName(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.GET_ELEMENT_TAG_NAME, "GET", "",
                elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/text")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElementText(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.GET_ELEMENT_TEXT, "GET", "", elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/element/{elementId}/click")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response clickOnElement(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId, String payload) {
        ElementCommand cmd = new ElementCommand(sessionId, DriverCommand.CLICK_ELEMENT, "POST", payload, elementId);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @GET
    @Path("/session/{sessionId}/element/{elementId}/attribute/{attribute}")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElementClassAttribute(@PathParam("sessionId") String sessionId,
            @PathParam("elementId") String elementId, @PathParam("attribute") String attribute) {
        ElementAttributeCommand cmd = new ElementAttributeCommand(sessionId, DriverCommand.GET_ELEMENT_ATTRIBUTE,
                "GET", "", elementId, attribute);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/elements")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response getElements(@PathParam("sessionId") String sessionId, String payload) {
        Command cmd = new Command(sessionId, DriverCommand.FIND_ELEMENTS, "POST", payload);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    @POST
    @Path("/session/{sessionId}/execute")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Response executeJS(@PathParam("sessionId") String sessionId, String payload) {
        Command cmd = new Command(sessionId, DriverCommand.EXECUTE_SCRIPT, "POST", payload);
        CommandResult cmdResult = new CommandExecutor(cmd, getPath()).execute();
        return new CommandResponse(cmdResult).buildResponse();
    }

    public String getPath() {
        return ((WebApplicationContext) uriInfo).getMatchedMethod().getAnnotation(Path.class).value();
    }

}