package com.nvarghese.beowulf.scs.categorizers.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.bson.types.ObjectId;
import com.google.code.morphia.Datastore;
import com.nvarghese.beowulf.common.http.txn.AbstractHttpTransaction;
import com.nvarghese.beowulf.common.scan.model.WebScanDocument;
import com.nvarghese.beowulf.common.webtest.JobStatus;
import com.nvarghese.beowulf.common.webtest.WebTestType;
import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJob;
import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJobDAO;
import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJobDocument;
import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestParameterDocument;
import com.nvarghese.beowulf.scs.categorizers.TokenSingleSetTransactionCategorizer;
public class HttpQueryParameterCategorizer extends TokenSingleSetTransactionCategorizer {
private static final String DELIM = "$DELIM$";
public HttpQueryParameterCategorizer(Datastore ds, WebScanDocument webScanDocument) {
super(ds, webScanDocument, WebTestType.HTTP_QUERY_PARAM_TEST);
}
@Override
protected String[] getTokens(AbstractHttpTransaction transaction) {
String tokens[];
List<NameValuePair> parameterNames = transaction.getQueryParameters();
List<String> tmpTokens = new ArrayList<String>(1);
String resourcePath = transaction.getResourcePath();
for (NameValuePair name : parameterNames) {
String tokenWithPrefix = resourcePath + DELIM + name.getName();
tmpTokens.add(tokenWithPrefix);
}
tokens = tmpTokens.toArray(new String[0]);
return tokens;
}
@Override
protected TestJob makeTestJob(AbstractHttpTransaction transaction, long moduleNumber, String token) {
String parameterName = token.split(DELIM)[1];
TestJobDocument testJobDocument = new TestJobDocument();
testJobDocument.setJobStatus(JobStatus.INIT);
testJobDocument.setModuleNumber(moduleNumber);
testJobDocument.setTestType(testType);
testJobDocument.setTxnObjId(transaction.getObjId());
testJobDocument.setWebScanObjId(webScanDocument.getId());
//add test params
List<TestParameterDocument> params = new ArrayList<TestParameterDocument>();
TestParameterDocument parameterDocument = new TestParameterDocument();
parameterDocument.setParameterType(token.getClass().getName());
parameterDocument.setParameterValue(parameterName);
params.add(parameterDocument);
testJobDocument.setTestParameters(params);
TestJobDAO testJobDAO = new TestJobDAO(ds);
ObjectId id = testJobDAO.createTestJobDocument(testJobDocument);
TestJob testJob = new TestJob();
testJob.setDatabaseName(ds.getDB().getName());
testJob.setTestJobObjId(id.toString());
testJob.setWebScanObjId(webScanDocument.getId().toString());
return testJob;
}
}