package com.intuit.tank.script;
/*
* #%L
* JSF Support Beans
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import static com.intuit.tank.util.ButtonLabel.ADD_LABEL;
import static com.intuit.tank.util.ButtonLabel.EDIT_LABEL;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang3.math.NumberUtils;
import com.intuit.tank.util.Messages;
import com.intuit.tank.common.ScriptUtil;
import com.intuit.tank.project.RequestData;
import com.intuit.tank.project.ScriptStep;
import com.intuit.tank.script.ScriptConstants;
import com.intuit.tank.vm.common.TankConstants;
import com.intuit.tank.vm.common.util.ValidationUtil;
@Named
@ConversationScoped
public class ThinkTimeEditor implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private ScriptEditor scriptEditor;
@Inject
private Messages messages;
private String minTime = "";
private String maxTime = "";
private String buttonLabel = ADD_LABEL;
private ScriptStep step;
private boolean editMode;
public void editThinkTime(ScriptStep step) {
this.step = step;
this.editMode = true;
for (RequestData requestData : step.getData()) {
if (requestData.getKey().equals(ScriptConstants.MIN_TIME)) {
minTime = requestData.getValue();
} else if (requestData.getKey().equals(ScriptConstants.MAX_TIME)) {
maxTime = requestData.getValue();
}
}
setButtonLabel(EDIT_LABEL);
}
public void insertThinkTime() {
this.editMode = false;
minTime = "";
maxTime = "";
setButtonLabel(ADD_LABEL);
}
public void addToScript() {
if (validate()) {
if (editMode) {
done();
} else {
insert();
}
}
}
public void insert() {
scriptEditor.insert(ScriptStepFactory.createThinkTime(minTime, maxTime));
}
public void done() {
RequestData minTimedata = new RequestData();
minTimedata.setKey(ScriptConstants.MIN_TIME);
minTimedata.setValue(minTime);
RequestData maxTimedata = new RequestData();
maxTimedata.setKey(ScriptConstants.MAX_TIME);
maxTimedata.setValue(maxTime);
Set<RequestData> datas = new HashSet<RequestData>();
datas.add(minTimedata);
datas.add(maxTimedata);
step.setData(datas);
ScriptUtil.updateStepLabel(step);
minTime = "";
maxTime = "";
}
private boolean validate() {
boolean retVal = true;
if (!NumberUtils.isDigits(minTime) && !ValidationUtil.isVariable(minTime)
&& !ValidationUtil.isFunction(minTime)) {
if (!minTime.matches(TankConstants.EXPRESSION_REGEX)) {
retVal = false;
messages.error("Minimum think time has to be an integer, function, or variable.");
}
}
if (!NumberUtils.isDigits(maxTime) && !ValidationUtil.isVariable(maxTime)
&& !ValidationUtil.isFunction(maxTime)) {
if (!maxTime.matches(TankConstants.EXPRESSION_REGEX)) {
retVal = false;
messages.error("Maximum think time has to be an integer, function, or variable.");
}
}
if (NumberUtils.isDigits(minTime) && NumberUtils.isDigits(maxTime)) {
if (retVal && Integer.parseInt(minTime) > Integer.parseInt(maxTime)) {
messages.error("Minimum think time should be less than maximum think time.");
retVal = false;
}
}
return retVal;
}
/**
* @return the buttonLabel
*/
public String getButtonLabel() {
return buttonLabel;
}
/**
* @param buttonLabel
* the buttonLabel to set
*/
public void setButtonLabel(String buttonLabel) {
this.buttonLabel = buttonLabel;
}
/**
* @return the minTime
*/
public String getMinTime() {
return minTime;
}
/**
* @param minTime
* the minTime to set
*/
public void setMinTime(String minTime) {
this.minTime = minTime;
}
/**
* @return the maxTime
*/
public String getMaxTime() {
return maxTime;
}
/**
* @param maxTime
* the maxTime to set
*/
public void setMaxTime(String maxTime) {
this.maxTime = maxTime;
}
}