All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openqa.selenium.server.CommandHolder Maven / Gradle / Ivy

There is a newer version: 4.0.0-alpha-2
Show newest version
/*
 * Copyright 2011 Software Freedom Conservancy.
 *
 *  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.openqa.selenium.server;

import java.util.logging.Logger;

/**
 * 

* Holds the command to be next run in the browser *

* * @author Jennifer Bevan * @version $Revision: 734 $ */ public class CommandHolder { private static final Logger log = Logger.getLogger(CommandHolder.class.getName()); private static final int defaultTimeout = 10; // seconds private static final RemoteCommand poisonCommand = new DefaultRemoteCommand( "CommandHolder.POISON", "", ""); protected static final String RETRY_CMD_STRING = "retryLast"; protected static final RemoteCommand retryCommand = new DefaultRemoteCommand(RETRY_CMD_STRING, "", "", ""); private final String queueId; private final SingleEntryAsyncQueue queue; public CommandHolder(String queueId) { this(queueId, defaultTimeout); } public CommandHolder(String queueId, int timeoutInSeconds) { this.queueId = queueId; queue = new SingleEntryAsyncQueue(timeoutInSeconds); queue.setPoison(poisonCommand); } /** * Get, and remove from the holder, the next command to run. If the next command doesn't show up * within timeoutInSeconds seconds, then return a "retry" command. * * @return the next command to execute. */ public RemoteCommand getCommand() { RemoteCommand command; log.fine(hdr() + "called"); command = queue.pollToGetContentUntilTimeout(); if (null == command) { // if there is no new command, send a retryLast. // Purpose: to get around the 2-connections per host issue // by sending a request in response to the frame's looking for // work -- this allows frame to close the connection. command = retryCommand; } else if (queue.isPoison(command)) { // if the queue was poisoned, just exit with a null command. command = null; } log.fine(hdr() + "-> " + ((null == command) ? "null" : command.toString())); return command; } public boolean putCommand(RemoteCommand cmd) { log.fine(hdr()); return queue.putContent(cmd); } public boolean isEmpty() { return queue.isEmpty(); } public RemoteCommand peek() { return queue.peek(); } public void poisonPollers() { log.fine(hdr() + " poisoning pollers"); queue.poisonPollers(); } private String hdr() { return "\t" + CommandQueue.getIdentification("commandHolder", queueId) + " getCommand() "; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy