org.continuousassurance.swamp.session.handlers.AssessmentRunHandler Maven / Gradle / Ivy
package org.continuousassurance.swamp.session.handlers;
import edu.uiuc.ncsa.security.core.Identifier;
import org.continuousassurance.swamp.api.*;
import org.continuousassurance.swamp.session.MyResponse;
import org.continuousassurance.swamp.session.Session;
import org.continuousassurance.swamp.session.util.ConversionMapImpl;
import org.continuousassurance.swamp.session.util.SWAMPIdentifiers;
import net.sf.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import static org.continuousassurance.swamp.session.handlers.PlatformHandler.PLATFORM_UUID_KEY;
import static org.continuousassurance.swamp.session.handlers.ToolHandler.TOOL_UUID_KEY;
/**
* Created by Jeff Gaynor
* on 12/10/14 at 11:00 AM
*/
public class AssessmentRunHandler extends AbstractHandler {
public static final String ASSESSMENT_RUN_UUID = "assessment_run_uuid";
public static final String PROJECT_UUID = "project_uuid";
public static final String PACKAGE_VERSION_UUID = "package_version_uuid";
public static final String PLATFORM_VERSION_UUID = "platform_version_uuid";
public static final String TOOL_VERSION_UUID = "tool_version_uuid"; // tool version uuid.
public AssessmentRunHandler(Session session) {
super(session);
}
public ProjectHandler getProjectHandler() {
if (projectHandler == null) {
projectHandler = new ProjectHandler<>(getSession());
}
return projectHandler;
}
public void setProjectHandler(ProjectHandler projectHandler) {
this.projectHandler = projectHandler;
}
ProjectHandler projectHandler;
/**
* Caution: This gets every assessment for every project that the current user has. It is more
* efficient to get assessments per project by using {@link #getAllAssessments(Project)}.
*
* @return
*/
@Override
public List getAll() {
List projects = getProjectHandler().getAll();
List assessments = new ArrayList<>();
for (Project project : projects) {
assessments.addAll(getAllAssessments(project));
}
return assessments;
}
public AssessmentRun create(Project project, PackageThing pkg, Platform platform, Tool tool) {
String url = createURL("assessment_runs");
HashMap parameters = new HashMap<>();
parameters.put("project_uuid", project.getUUIDString());
parameters.put(PackageHandler.PACKAGE_UUID_KEY, pkg.getUUIDString());
parameters.put(PLATFORM_UUID_KEY, platform.getUUIDString());
parameters.put(TOOL_UUID_KEY, tool.getUUIDString());
MyResponse myResponse = getClient().rawPost(url, parameters);
AssessmentRun result = fromJSON(myResponse.json);
result.setProject(project);
result.setPkg(pkg);
result.setPlatform(platform);
result.setTool(tool);
return result;
}
public AssessmentRun create(Project project, PackageVersion pkg_ver, Platform platform, Tool tool) {
String url = createURL("assessment_runs");
HashMap parameters = new HashMap<>();
parameters.put("project_uuid", project.getUUIDString());
parameters.put("package_version_uuid", pkg_ver.getUUIDString());
parameters.put(PackageHandler.PACKAGE_UUID_KEY, pkg_ver.getPackageThing().getUUIDString());
parameters.put(PLATFORM_UUID_KEY, platform.getUUIDString());
parameters.put(TOOL_UUID_KEY, tool.getUUIDString());
//parameters.put("tool_version_uuid", tool.getUUIDString());
MyResponse myResponse = getClient().rawPost(url, parameters);
AssessmentRun result = fromJSON(myResponse.json);
result.setProject(project);
result.setPkg(pkg_ver.getPackageThing());
result.setPlatform(platform);
result.setTool(tool);
return result;
}
public T get(Identifier identifier) {
String url = createURL("assessment_runs/" + SWAMPIdentifiers.fromIdentifier(identifier));
MyResponse mr = getClient().rawGet(url, null);
return fromJSON(mr.json);
}
/**
* Extremely goofy responses from SWAMP do not actually return enough information to recover the
* package, tool or platform. Only names of these are returned and there is no easy way to recover
* the actual item from its name. Therefore, this call is made and the set of assessments is searched
* by uuid. Wasteful.
*
* @param project
* @return
*/
public List getAllAssessments(Project project) {
String url = createURL("projects/" + project.getUUIDString() + "/assessment_runs");
MyResponse mr = getClient().rawGet(url, null);
ArrayList assessments = new ArrayList<>();
for (int i = 0; i < mr.jsonArray.size(); i++) {
JSONObject jo = mr.jsonArray.getJSONObject(i);
Object v = jo.get(ASSESSMENT_RUN_UUID); // this is actually the uuid of the assessment run.
T a = (T) new AssessmentRun(getSession());
a.setIdentifier(SWAMPIdentifiers.toIdentifier(v.toString()));
a.setProject(project);
assessments.add(a);
}
return assessments;
}
public List getAssessments(Project project) {
String pUrl = createURL("projects/" + project.getUUIDString() + "/assessment_runs");
// need to get this from the same server that has the assessments, not the projects server.
MyResponse mr0 = getClient().rawGet(pUrl, null);
ArrayList list = new ArrayList<>();
for(int i = 0; i < mr0.jsonArray.size(); i++){
T a = fromJSON((JSONObject) mr0.jsonArray.get(i));
list.add(a);
}
return list;
}
@Override
protected T fromJSON(JSONObject json) {
T a = (T) new AssessmentRun(getSession());
ConversionMapImpl map = new ConversionMapImpl();
String[] uAttrib = {ASSESSMENT_RUN_UUID, PROJECT_UUID,
PackageHandler.PACKAGE_UUID_KEY, PACKAGE_VERSION_UUID, TOOL_UUID_KEY, TOOL_VERSION_UUID,
PLATFORM_VERSION_UUID, PLATFORM_UUID_KEY};
setAttributes(map, uAttrib, json, DATA_TYPE_IDENTIFIER);
a.setConversionMap(map);
return a;
}
@Override
public String getURL() {
return createURL("assessment_runs");
}
}