Merge branch 'develop' into feature/update/3.192.5
This commit is contained in:
commit
e9334bfe30
9 changed files with 155 additions and 47 deletions
|
|
@ -1,13 +1,11 @@
|
|||
package org.micord.models;
|
||||
|
||||
import lombok.Setter;
|
||||
import org.micord.enums.RequestArgumentType;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlElementWrapper;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author Maksim Tereshin
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package org.micord.models.requests;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
|
|
@ -7,8 +9,6 @@ import jakarta.xml.bind.annotation.XmlElementWrapper;
|
|||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
|
|
@ -17,6 +17,9 @@ public class AqlRequest extends BaseRequest {
|
|||
@XmlElement(name = "AqlConnectionParams")
|
||||
private AqlConnectionParams aqlConnectionParams;
|
||||
|
||||
@XmlElement(name = "AqlRequestParameters")
|
||||
private AqlRequestParameters aqlRequestParameters;
|
||||
|
||||
@XmlElementWrapper(name = "AqlRequestCollections")
|
||||
@XmlElement(name = "AqlRequestCollection")
|
||||
private List<AqlRequestCollection> aqlRequestCollections;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
package org.micord.models.requests;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "AqlRequestParameter")
|
||||
public class AqlRequestParameter {
|
||||
|
||||
private String type;
|
||||
private SqlConnectionParams sqlConnectionParams;
|
||||
private String aqlRequestParameterURL;
|
||||
|
||||
@XmlAttribute(name = "type")
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@XmlElement(name = "SqlConnectionParams")
|
||||
public SqlConnectionParams getSqlConnectionParams() {
|
||||
return sqlConnectionParams;
|
||||
}
|
||||
|
||||
public void setSqlConnectionParams(SqlConnectionParams sqlConnectionParams) {
|
||||
this.sqlConnectionParams = sqlConnectionParams;
|
||||
}
|
||||
|
||||
@XmlElement(name = "AqlRequestParameterURL")
|
||||
public String getAqlRequestParameterURL() {
|
||||
return aqlRequestParameterURL;
|
||||
}
|
||||
|
||||
public void setAqlRequestParameterURL(String aqlRequestParameterURL) {
|
||||
this.aqlRequestParameterURL = aqlRequestParameterURL;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package org.micord.models.requests;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement(name = "AqlRequestParameters")
|
||||
public class AqlRequestParameters {
|
||||
|
||||
private List<AqlRequestParameter> parameters = new ArrayList<>();
|
||||
|
||||
@XmlElement(name = "AqlRequestParameter")
|
||||
public List<AqlRequestParameter> getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public void setParameters(List<AqlRequestParameter> parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,15 +1,12 @@
|
|||
package org.micord.models.requests;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlSeeAlso;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.micord.models.requests.downloads.AQLDownloadRequest;
|
||||
import org.micord.models.requests.downloads.SQLDownloadRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
package org.micord.models.requests;
|
||||
|
||||
import org.micord.enums.RequestArgumentType;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||
import lombok.Setter;
|
||||
import org.micord.enums.RequestArgumentType;
|
||||
|
||||
/**
|
||||
* @author Maksim Tereshin
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
package org.micord.models.requests.downloads;
|
||||
|
||||
import jakarta.xml.bind.annotation.*;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import java.util.List;
|
||||
|
||||
import org.micord.models.requests.AqlConnectionParams;
|
||||
import org.micord.models.requests.AqlRequestCollection;
|
||||
import org.micord.models.requests.SqlConnectionParams;
|
||||
|
||||
import java.util.List;
|
||||
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlElementWrapper;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
package org.micord.models.requests.downloads;
|
||||
|
||||
import org.micord.models.requests.BaseRequest;
|
||||
|
||||
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||
import jakarta.xml.bind.annotation.XmlElement;
|
||||
import jakarta.xml.bind.annotation.XmlSeeAlso;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.micord.models.requests.BaseRequest;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
|
|
|
|||
|
|
@ -1,28 +1,5 @@
|
|||
package org.micord.service;
|
||||
|
||||
import com.arangodb.ArangoCursor;
|
||||
import com.arangodb.ArangoDBException;
|
||||
import com.arangodb.ArangoDatabase;
|
||||
import com.arangodb.entity.StreamTransactionEntity;
|
||||
import com.arangodb.model.AqlQueryOptions;
|
||||
import com.arangodb.model.StreamTransactionOptions;
|
||||
import org.micord.config.ArangoDBConnection;
|
||||
import org.micord.config.DatabaseConnection;
|
||||
import org.micord.config.S3HttpConnection;
|
||||
import org.micord.enums.RequestArgumentType;
|
||||
import org.micord.exceptions.IllegalRequestParametersException;
|
||||
import org.micord.models.requests.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.StringReader;
|
||||
import java.net.HttpURLConnection;
|
||||
|
|
@ -34,10 +11,46 @@ import java.sql.PreparedStatement;
|
|||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
import javax.xml.parsers.DocumentBuilderFactory;
|
||||
|
||||
import org.micord.config.ArangoDBConnection;
|
||||
import org.micord.config.DatabaseConnection;
|
||||
import org.micord.config.S3HttpConnection;
|
||||
import org.micord.enums.RequestArgumentType;
|
||||
import org.micord.models.requests.AqlRequest;
|
||||
import org.micord.models.requests.AqlRequestParameter;
|
||||
import org.micord.models.requests.BaseRequest;
|
||||
import org.micord.models.requests.RequestArgument;
|
||||
import org.micord.models.requests.RequestParameters;
|
||||
import org.micord.models.requests.Requests;
|
||||
import org.micord.models.requests.S3Request;
|
||||
import org.micord.models.requests.SqlRequest;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import com.arangodb.ArangoCursor;
|
||||
import com.arangodb.ArangoDBException;
|
||||
import com.arangodb.ArangoDatabase;
|
||||
import com.arangodb.entity.StreamTransactionEntity;
|
||||
import com.arangodb.model.AqlQueryOptions;
|
||||
import com.arangodb.model.StreamTransactionOptions;
|
||||
|
||||
@Service
|
||||
public class RequestService {
|
||||
|
||||
|
|
@ -549,23 +562,23 @@ public class RequestService {
|
|||
// TODO: implement for multiple request arguments
|
||||
RequestArgument requestArgument = request.getRequestArguments().get(0);
|
||||
|
||||
List<String> collectionTypes = new ArrayList<>();
|
||||
List<String> collectionNames = new ArrayList<>();
|
||||
|
||||
request.getAqlRequestCollections().forEach(collection -> {
|
||||
collectionTypes.add(collection.getType());
|
||||
collectionNames.add(collection.getType());
|
||||
});
|
||||
StreamTransactionEntity tx = null;
|
||||
try {
|
||||
StreamTransactionOptions options = new StreamTransactionOptions()
|
||||
.writeCollections(collectionTypes.toArray(new String[0]))
|
||||
.readCollections(collectionTypes.toArray(new String[0]));
|
||||
.writeCollections(collectionNames.toArray(new String[0]))
|
||||
.readCollections(collectionNames.toArray(new String[0]));
|
||||
|
||||
tx = arangoDb.beginStreamTransaction(options);
|
||||
String transactionId = tx.getId();
|
||||
|
||||
logger.info("Stream transaction started with ID: {}", transactionId);
|
||||
|
||||
Map<String, Object> entities = executeSelectAqlRequest(arangoDb, requestArgument, ids, transactionId, validationResults);
|
||||
Map<String, Object> entities = executeSelectAqlRequest(arangoDb, request, requestArgument, ids, transactionId, validationResults);
|
||||
|
||||
if (entities.isEmpty()) {
|
||||
logger.warn("No entities found for main AQL request.");
|
||||
|
|
@ -607,6 +620,7 @@ public class RequestService {
|
|||
}
|
||||
|
||||
private Map<String, Object> executeSelectAqlRequest(ArangoDatabase arangoDb,
|
||||
AqlRequest request,
|
||||
RequestArgument requestArgument,
|
||||
List<String> ids, String transactionId, Map<String, Boolean> validationResults) {
|
||||
Map<String, Object> entities = new HashMap<>();
|
||||
|
|
@ -621,8 +635,38 @@ public class RequestService {
|
|||
|
||||
if (!emptyIdsAllowed) bindVars.put("ids", ids);
|
||||
|
||||
if (request.getAqlRequestParameters() != null) {
|
||||
for (AqlRequestParameter parameter : request.getAqlRequestParameters().getParameters()) {
|
||||
try (Connection connection = DatabaseConnection.getConnection(parameter.getSqlConnectionParams())) {
|
||||
String sqlQuery = parameter.getAqlRequestParameterURL();
|
||||
if (sqlQuery.contains("${endpointArguments}")) {
|
||||
String inClause = ids.stream()
|
||||
.map(id -> "'" + id + "'")
|
||||
.collect(Collectors.joining(", "));
|
||||
sqlQuery = sqlQuery.replace("${endpointArguments}", "(" + inClause + ")");
|
||||
}
|
||||
|
||||
logger.info("Executing SQL query: {}", sqlQuery);
|
||||
List<String> parameterValues = fetchFileListFromDatabaseSQL(connection, sqlQuery);
|
||||
if (parameterValues != null && !parameterValues.isEmpty()) {
|
||||
logger.info("Parameter type: {}; values: {}", parameter.getType(), parameterValues.get(0));
|
||||
} else {
|
||||
logger.info("No values found for parameter type: {}", parameter.getType());
|
||||
}
|
||||
bindVars.put(parameter.getType(), parameterValues);
|
||||
} catch (SQLException e) {
|
||||
logger.error("Failed to fetch parameter values for type: {}", parameter.getType(), e);
|
||||
throw new RuntimeException("Failed to execute SQL query: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AqlQueryOptions aqlQueryOptions = new AqlQueryOptions().streamTransactionId(transactionId);
|
||||
|
||||
bindVars.forEach((key, value) -> {
|
||||
logger.info("Key: {}; Value: {}", key, value);
|
||||
});
|
||||
|
||||
try (ArangoCursor<Map> cursor = arangoDb.query(url, Map.class, bindVars, aqlQueryOptions)) {
|
||||
while (cursor.hasNext()) {
|
||||
Map<String, Object> result = cursor.next();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue