Browse Source

First changes after code review, making use of prepared statements, code cleanup

db_schema
Leonid Bossis 3 years ago
parent
commit
c6385a7544
  1. 24
      src/main/java/dto/BrewObj.java
  2. 24
      src/main/java/dto/BrewObjPayload.java
  3. 5
      src/main/java/dto/ConnectDB.java
  4. 15
      src/main/java/dto/GitObj.java
  5. 21
      src/main/java/dto/GitObjPayload.java
  6. 10
      src/main/java/dto/PncObj.java
  7. 19
      src/main/java/dto/PncObjPayload.java
  8. 5
      src/main/java/dto/ScanObj.java
  9. 24
      src/main/java/dto/ScanObjPayload.java
  10. 61
      src/main/java/rest/CreateGetResource.java
  11. 92
      src/main/java/rest/CreateScanRequest.java
  12. 42
      src/main/java/rest/CreateScanResource.java
  13. 110
      src/main/java/rest/CreateStartScan.java

24
src/main/java/dto/BrewObj.java

@ -5,9 +5,6 @@ import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.jackson.Jacksonized;
// import org.jboss.pnc.api.dto.Request;
import java.io.Serializable;
@ToString
@ -16,11 +13,16 @@ import java.io.Serializable;
@Jacksonized
@Builder
public class BrewObj implements Serializable {
public String buildSystemType;
public String brewId;
public String brewNvr;
public String pncId;
public String artifactType;
public String fileName;
public String buildFromSource;
}
public static final String SQL = "INSERT INTO brewscans " +
"(buildSystemType, brewId, brewNVR, pncId, artifactType, fileName, builtfromSource)" +
"VALUES (? ? ? ? ? ? ?)";
private String buildSystemType;
private String brewId;
private String brewNvr;
private String pncId;
private String artifactType;
private String fileName;
private Boolean builtFromSource;
}

24
src/main/java/dto/BrewObjPayload.java

@ -1,23 +1,19 @@
package dto;
import org.eclipse.microprofile.config.ConfigProvider;
// import org.jboss.pnc.api.deliverablesanalyzer.dto.AnalyzePayload;
// import org.jboss.pnc.api.dto.HeartbeatConfig;
// import org.jboss.pnc.api.dto.Request;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.sql.Struct;
import java.util.*;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONObject;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
public class BrewObjPayload {
public static BrewObj constructScanPayload(JSONObject brewObj) throws URISyntaxException {
return new BrewObj(brewObj.getString("buildSystemType"),brewObj.getString("brewId"),brewObj.getString("brewNvr"),brewObj.getString("pncId"),brewObj.getString("artifactType"),brewObj.getString("fileName"),brewObj.getString("builtFromSource"));
return new BrewObj(
brewObj.getString("buildSystemType"),
brewObj.getString("brewId"),
brewObj.getString("brewNVR"),
brewObj.getString("pncId"),
brewObj.getString("artifactType"),
brewObj.getString("fileName"),
brewObj.getBoolean("builtfromSource"));
}
}
}

5
src/main/java/dto/ConnectDB.java

@ -1,7 +1,5 @@
package dto;
import constants.PSGQL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
@ -10,8 +8,7 @@ import static constants.PSGQL.user;
import static constants.PSGQL.password;
import static constants.PSGQL.url;
public class ConnectDB{
public class ConnectDB {
// private final String url = "jdbc:postgresql://localhost:5432/scandb";
// private final String user = "postgres";
// private final String password = "password";

15
src/main/java/dto/GitObj.java

@ -6,8 +6,6 @@ import lombok.Getter;
import lombok.ToString;
import lombok.extern.jackson.Jacksonized;
// import org.jboss.pnc.api.dto.Request;
import java.io.Serializable;
@ToString
@ -16,8 +14,13 @@ import java.io.Serializable;
@Jacksonized
@Builder
public class GitObj implements Serializable {
public String buildSystemType;
public String repository;
public String reference;
public String commitId;
public static final String SQL = "INSERT INTO gitscans " +
"(buildSystemType, repository, reference, commitId)" +
"VALUES (? ? ? ?)";
private String buildSystemType;
private String repository;
private String reference;
private String commitId;
}

21
src/main/java/dto/GitObjPayload.java

@ -1,23 +1,16 @@
package dto;
import org.eclipse.microprofile.config.ConfigProvider;
// import org.jboss.pnc.api.deliverablesanalyzer.dto.AnalyzePayload;
// import org.jboss.pnc.api.dto.HeartbeatConfig;
// import org.jboss.pnc.api.dto.Request;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.sql.Struct;
import java.util.*;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONObject;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
public class GitObjPayload {
public static GitObj constructScanPayload(JSONObject gitObj) throws URISyntaxException {
return new GitObj(gitObj.getString("buildSystemType"),gitObj.getString("repository"),gitObj.getString("reference"),gitObj.getString("commitId"));
return new GitObj(
gitObj.getString("buildSystemType"),
gitObj.getString("repository"),
gitObj.getString("reference"),
gitObj.getString("commitId"));
}
}
}

10
src/main/java/dto/PncObj.java

@ -5,9 +5,6 @@ import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
import lombok.extern.jackson.Jacksonized;
// import org.jboss.pnc.api.dto.Request;
import java.io.Serializable;
@ToString
@ -16,6 +13,9 @@ import java.io.Serializable;
@Jacksonized
@Builder
public class PncObj implements Serializable {
public String buildSystemType;
public String buildId;
public static final String SQL = "INSERT INTO pncscans (buildSystemType, buildId) VALUES (? ?)";
private String buildSystemType;
private String buildId;
}

19
src/main/java/dto/PncObjPayload.java

@ -1,23 +1,14 @@
package dto;
import org.eclipse.microprofile.config.ConfigProvider;
// import org.jboss.pnc.api.deliverablesanalyzer.dto.AnalyzePayload;
// import org.jboss.pnc.api.dto.HeartbeatConfig;
// import org.jboss.pnc.api.dto.Request;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.sql.Struct;
import java.util.*;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONObject;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
public class PncObjPayload {
public static PncObj constructScanPayload(JSONObject pncObj) throws URISyntaxException {
return new PncObj(pncObj.getString("buildSystemType"),pncObj.getString("buildId"));
return new PncObj(
pncObj.getString("buildSystemType"),
pncObj.getString("buildId"));
}
}
}

5
src/main/java/dto/ScanObj.java

@ -6,7 +6,6 @@ import lombok.Getter;
import lombok.ToString;
import lombok.extern.jackson.Jacksonized;
// import org.jboss.pnc.api.dto.Request;
//still need to fix all the scan objects to be significantly less poorly written
//TODO add interface for the scan objects (is probably the cleanest solution)
import java.io.Serializable;
@ -18,6 +17,10 @@ import java.io.Serializable;
@Builder
public class ScanObj implements Serializable {
public static final String SQL = "INSERT INTO scans " +
"(scanID, offeringId, eventID, isManagedService, componentlist) " +
"VALUES (? ? ? ? ?)";
public String scanId;
public String productId;
public String eventId;

24
src/main/java/dto/ScanObjPayload.java

@ -1,23 +1,15 @@
package dto;
import org.eclipse.microprofile.config.ConfigProvider;
// import org.jboss.pnc.api.deliverablesanalyzer.dto.AnalyzePayload;
// import org.jboss.pnc.api.dto.HeartbeatConfig;
// import org.jboss.pnc.api.dto.Request;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.sql.Struct;
import java.util.*;
import org.json.JSONObject;
import org.json.JSONArray;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
import org.json.JSONObject;
public class ScanObjPayload {
public static ScanObj constructScanPayload(JSONObject scanObj) throws URISyntaxException {
return new ScanObj(scanObj.getString("scanId"),scanObj.getString("productId"),scanObj.getString("eventId"),scanObj.getString("isManagedService"),scanObj.getString("componentList"));
return new ScanObj(
scanObj.getString("scanID"),
scanObj.getString("offeringId"),
scanObj.getString("eventID"),
scanObj.getString("isManagedService"),
scanObj.getString("componentList"));
}
}
}

61
src/main/java/rest/CreateGetResource.java

@ -5,45 +5,12 @@ import java.util.LinkedHashMap;
import java.util.Set;
import dto.ScanObj;
import dto.ConnectDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import java.util.Set;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import java.sql.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
// import org.hibernate.EntityManager;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Cacheable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.NamedQuery;
import jakarta.persistence.QueryHint;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
// @Path("/api/v1/[osh-scan]")
@Path("/scanGet")
@ -64,22 +31,24 @@ public class CreateGetResource {
@Path("/{scanId}")
public Set<ScanObj> list(@PathParam("scanId") String scanId) {
//use to return specific scanIds just use usual fetch from sets, will be querying hte db directly here
try {
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
Statement stmt = null;
String sql = "SELECT * FROM scans WHERE scanid=" +scanId;
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ConnectDB connectDB = new ConnectDB();
String sql = "SELECT * FROM scans WHERE scanid=?";
try(Connection conn = connectDB.connect();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, scanId);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
//very ugly solution needs some change to where we put the query
Scans.add(new ScanObj(rs.getString("scanid"),rs.getString("productid"),rs.getString("eventid"),rs.getString("ismanagedservice"),rs.getString("componentlist")));
conn.close();
Scans.add(new ScanObj(
rs.getString("scanID"),
rs.getString("offeringId"),
rs.getString("eventID"),
rs.getString("isManagedService"),
rs.getString("componentlist")));
}
} catch (SQLException e){
System.out.println(e);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return Scans;
}
}
}

92
src/main/java/rest/CreateScanRequest.java

@ -1,66 +1,48 @@
package rest;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import dto.ScanObj;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;
import org.json.JSONArray;
import dto.ScanObj;
import java.sql.*;
import org.json.JSONObject;
import dto.BrewObj;
import dto.ConnectDB;
import dto.ScanObjPayload;
import dto.BrewObjPayload;
import dto.GitObj;
import dto.GitObjPayload;
import dto.PncObj;
import dto.PncObjPayload;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
@Path("/scanRequest")
public class CreateScanRequest {
//all of these need cleaning up to be a more sensible soution
// all of these need cleaning up to be a more sensible solution
@RestClient
CreateScanService createScanService;
@POST
@Path("/brew")
@Consumes({ "application/json" })
//in theory should take List<String> to clean it up
public BrewObj invokeScanAnalyze(@Valid String scanInvocation) throws URISyntaxException {
// in theory should take List<String> to clean it up
public BrewObj invokeBrewScanAnalyze(@Valid String scanInvocation) throws URISyntaxException {
JSONObject jsonData = new JSONObject(scanInvocation);
BrewObj brewObj = BrewObjPayload.constructScanPayload(jsonData);
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
Statement stmt = null;
String sql = "INSERT INTO brewscans (buildsystemtype, brewid, brewnvr, pncid, artifacttype, filename, builtfromsource) VALUES ('"+brewObj.buildSystemType+"','"+brewObj.brewId+"','"+brewObj.brewNvr+"','"+brewObj.pncId+"','"+brewObj.artifactType+"','"+brewObj.fileName+"','"+brewObj.buildFromSource+"')";
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
conn.close();
} catch (SQLException e){
System.out.println(e);
try(Connection conn = connectDB.connect();
PreparedStatement pstmt = conn.prepareStatement(BrewObj.SQL)) {
pstmt.setString(1, brewObj.getBuildSystemType());
pstmt.setString(2, brewObj.getBrewId());
pstmt.setString(3, brewObj.getBrewNvr());
pstmt.setString(4, brewObj.getPncId());
pstmt.setString(5, brewObj.getArtifactType());
pstmt.setString(6, brewObj.getFileName());
pstmt.setBoolean(7, brewObj.getBuiltFromSource());
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return brewObj;
}
@ -71,18 +53,17 @@ public class CreateScanRequest {
public GitObj invokeGitScanAnalyze(@Valid String scanInvocation)throws URISyntaxException {
JSONObject jsonData = new JSONObject(scanInvocation);
GitObj gitObj = GitObjPayload.constructScanPayload(jsonData);
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
Statement stmt = null;
String sql = "INSERT INTO gitscans (buildsystemtype, repository, reference, commitid) VALUES ('"+gitObj.buildSystemType+"','"+gitObj.repository+"','"+gitObj.reference+"','"+gitObj.commitId+"')";
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
conn.close();
} catch (SQLException e){
System.out.println(e);
}
try(Connection conn = connectDB.connect();
PreparedStatement pstmt = conn.prepareStatement(GitObj.SQL)) {
pstmt.setString(1, gitObj.getBuildSystemType());
pstmt.setString(2, gitObj.getRepository());
pstmt.setString(3, gitObj.getReference());
pstmt.setString(4, gitObj.getCommitId());
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return gitObj;
}
@ -92,18 +73,15 @@ public class CreateScanRequest {
public PncObj invokePncScanAnalyze(@Valid String scanInvocation)throws URISyntaxException {
JSONObject jsonData = new JSONObject(scanInvocation);
PncObj pncObj = PncObjPayload.constructScanPayload(jsonData);
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
Statement stmt = null;
String sql = "INSERT INTO pncscans (buildsystemtype, buildid) VALUES ('"+pncObj.buildSystemType+"','"+pncObj.buildId+"')";
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
conn.close();
} catch (SQLException e){
System.out.println(e);
}
try(Connection conn = connectDB.connect();
PreparedStatement pstmt = conn.prepareStatement(PncObj.SQL)) {
pstmt.setString(1, pncObj.getBuildSystemType());
pstmt.setString(2, pncObj.getBuildId());
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return pncObj;
}
}

42
src/main/java/rest/CreateScanResource.java

@ -1,34 +1,17 @@
package rest;
import dto.*;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import dto.ScanObj;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;
import org.json.JSONArray;
import java.sql.*;
import org.json.JSONObject;
import dto.ScanObj;
import dto.ConnectDB;
import dto.ScanObjPayload;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
@Path("/")
public class CreateScanResource {
@ -43,15 +26,16 @@ public class CreateScanResource {
JSONObject jsonData = new JSONObject(scanInvocation);
ScanObj scanObj = ScanObjPayload.constructScanPayload(jsonData);
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
Statement stmt = null;
String sql = "INSERT INTO scans (scanid, productid, eventid, ismanagedservice, componentlist) VALUES ('" +scanObj.scanId+"', '"+scanObj.productId+"', '"+scanObj.eventId+"', '"+scanObj.isManagedService+"', '"+scanObj.componentList+"')";
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
conn.close();
} catch (SQLException e){
System.out.println(e);
try(Connection conn = connectDB.connect();
PreparedStatement pstmt = conn.prepareStatement(ScanObj.SQL)) {
pstmt.setString(1, scanObj.scanId);
pstmt.setString(2, scanObj.productId);
pstmt.setString(3, scanObj.eventId);
pstmt.setString(4, scanObj.isManagedService);
pstmt.setString(5, scanObj.componentList);
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return scanObj;
}

110
src/main/java/rest/CreateStartScan.java

@ -1,37 +1,14 @@
package rest;
import dto.ConnectDB;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import dto.ScanObj;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PUT;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;
import org.json.JSONArray;
import dto.ScanObj;
import dto.ConnectDB;
import dto.ScanObjPayload;
import javax.ws.rs.PathParam;
import java.net.URISyntaxException;
import java.sql.*;
import static constants.HttpHeaders.AUTHORIZATION_STRING;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
@Path("/startScan")
public class CreateStartScan {
@ -42,35 +19,66 @@ public class CreateStartScan {
@PUT
@Path("/{scanId}")
public ScanObj invokeScanAnalyze(@PathParam("scanId") String scanId) throws URISyntaxException {
ScanObj finalScan = null;
ConnectDB connectDB = new ConnectDB();
Connection conn = connectDB.connect();
//this is ugly needs to berewritten
Statement stmt = null;
try (Connection conn = connectDB.connect()) {
finalScan = selectDataForArchiving(conn, scanId);
ArchiveSelectedScans(conn, finalScan);
PostArchivingCleanup(conn, scanId);
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return finalScan;
}
private ScanObj selectDataForArchiving(Connection conn, String scanId) {
ScanObj finalScan = null;
String qry = "SELECT * FROM scans WHERE scanid=?";
try (PreparedStatement pstmt = conn.prepareStatement(qry)) {
pstmt.setString(1, scanId);
ResultSet rs = pstmt.executeQuery();
String sql = "SELECT * FROM scans WHERE scanid=" + scanId;
//need to add figure out an archieve system and wether its nessacery (archieve value??)
try{
stmt = conn.createStatement();
//terrible solution has to be a better way of doing this
ResultSet rs = stmt.executeQuery(sql);
//fix for individual results (not resultset)
//TODO: need to add unique keys to DBs
finalScan = new ScanObj(rs.getString("scanid"),rs.getString("productid"),rs.getString("eventid"),rs.getString("ismanagedservice"),rs.getString("componentlist"));
String copySql = "INSERT INTO archive (scanid, productid, eventid, ismanagedservice, componentlist) VALUES ('" +finalScan.scanId+"', '"+finalScan.productId+"', '"+finalScan.eventId+"', '"+finalScan.isManagedService+"', '"+finalScan.componentList+"')";
stmt.executeUpdate(copySql);
//fix for individual results (not resultset)
finalScan = new ScanObj(
rs.getString("scanID"),
rs.getString("offeringId"),
rs.getString("eventID"),
rs.getString("isManagedService"),
rs.getString("componentlist"));
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return finalScan;
}
private void ArchiveSelectedScans(Connection conn, ScanObj finalScan) {
String qry = "INSERT INTO archive " +
"(scanID, offeringId, eventID, isManagedService, componentlist) " +
"VALUES (? ? ? ? ?)";
try (PreparedStatement pstmt = conn.prepareStatement(qry)) {
pstmt.setString(1, finalScan.scanId);
pstmt.setString(2, finalScan.productId);
pstmt.setString(3, finalScan.eventId);
pstmt.setString(4, finalScan.isManagedService);
pstmt.setString(5, finalScan.componentList);
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
//TODO add proper checks
String deleteSql = "DELETE FROM scans WHERE scanid=" + scanId;
stmt.executeUpdate(deleteSql);
private void PostArchivingCleanup(Connection conn, String scanId) {
//TODO add proper checks
//send task to the actual interface here using the resultset returned (should multiple scanids be allowed):
//once the task is complete AND we have confirmation that the scan is done run the following sql
//send task to the actual interface here using the resultset returned (should multiple scanids be allowed):
//once the task is complete AND we have confirmation that the scan is done run the following sql
conn.close();
} catch (SQLException e){
System.out.println(e);
}
return finalScan;
String qry = "DELETE FROM scans WHERE scanid=?";
try (PreparedStatement pstmt = conn.prepareStatement(qry)) {
pstmt.setString(1, scanId);
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
}
Loading…
Cancel
Save