/*
* Tanaguru - Automated webpage assessment
* Copyright (C) 2008-2015 Tanaguru.org
*
* This file is part of Tanaguru.
*
* Tanaguru is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact us by mail: tanaguru AT tanaguru DOT org
*/
package org.tanaguru.sebuilder.tools;
import java.util.Iterator;
import java.util.List;
/**
*
* @author jkowalczyk
*/
public abstract class ScenarioBuilder {
private static final String SELENIUM_VERSION_KEY="\"seleniumVersion\"";
private static final String SELENIUM_VERSION_VALUE="\"2\"";
private static final String FORMAT_VERSION_KEY="\"formatVersion\"";
private static final String FORMAT_VERSION_VALUE="1";
private static final String STEPS_KEY="\"steps\"";
private static final String TYPE_KEY="\"type\"";
private static final String URL_KEY="\"url\"";
private static final String GET_TYPE="\"get\"";
private static final char LEFT_SQUARE_BRACKET = '[';
private static final char RIGHT_SQUARE_BRACKET = ']';
private static final char COMMA = ',';
private static final char COLON = ':';
private static final char LEFT_BRACE = '{';
private static final char RIGHT_BRACE = '}';
private static final char DOUBLE_QUOTE = '"';
private static String header;
private static String footer;
/**
* Private constructor : Hide Utility Class Constructor
*/
private ScenarioBuilder() {}
/**
* Build a scenario from a simple Url.
*
* @param url
* @return
*/
public static String buildScenario(String url) {
if (url == null) {
return null;
}
StringBuilder strb = new StringBuilder();
strb.append(buildHeader());
strb.append(buildGetStep(url));
strb.append(buildFooter());
return strb.toString();
}
/**
* Build a scenario from a list of url
*
* @param urlList
* @return
*/
public static String buildScenario(List<String> urlList) {
if (urlList == null || urlList.isEmpty()) {
return null;
}
StringBuilder strb = new StringBuilder();
strb.append(buildHeader());
Iterator<String> iter = urlList.iterator();
while (iter.hasNext()) {
strb.append(buildGetStep((iter.next())));
if (iter.hasNext()) {
strb.append(COMMA);
}
}
strb.append(buildFooter());
return strb.toString();
}
/**
* Build the header of a scenario
*
* @return
*/
private static String buildHeader() {
if (header == null) {
StringBuilder strb = new StringBuilder();
strb.append(LEFT_BRACE);
strb.append(SELENIUM_VERSION_KEY);
strb.append(COLON);
strb.append(SELENIUM_VERSION_VALUE);
strb.append(COMMA);
strb.append(FORMAT_VERSION_KEY);
strb.append(COLON);
strb.append(FORMAT_VERSION_VALUE);
strb.append(COMMA);
strb.append(STEPS_KEY);
strb.append(COLON);
strb.append(LEFT_SQUARE_BRACKET);
header = strb.toString();
}
return header;
}
/**
* Build the footer of a scenario
*
* @return
*/
private static String buildFooter() {
if (footer == null) {
StringBuilder strb = new StringBuilder();
strb.append(RIGHT_SQUARE_BRACKET);
strb.append(RIGHT_BRACE);
footer = strb.toString();
}
return footer;
}
/**
* Build a get step
*
* @param url
* @return
*/
private static String buildGetStep(String url) {
StringBuilder strb = new StringBuilder();
strb.append(LEFT_BRACE);
strb.append(TYPE_KEY);
strb.append(COLON);
strb.append(GET_TYPE);
strb.append(COMMA);
strb.append(URL_KEY);
strb.append(COLON);
strb.append(DOUBLE_QUOTE);
strb.append(url);
strb.append(DOUBLE_QUOTE);
strb.append(RIGHT_BRACE);
return strb.toString();
}
}