diff --git a/pom.xml b/pom.xml
index 76a71366..b98c6720 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@
false
Cytoscape Snapshots
- http://code.cytoscape.org/nexus/content/repositories/snapshots/
+ https://code.cytoscape.org/nexus/content/repositories/snapshots/
cytoscape_releases
@@ -90,7 +90,7 @@
true
Cytoscape Releases
- http://code.cytoscape.org/nexus/content/repositories/releases/
+ https://code.cytoscape.org/nexus/content/repositories/releases/
apache-repo-releases
@@ -106,6 +106,7 @@
true
+
@@ -249,6 +250,39 @@
${osgi.api.version}
provided
+
+ org.projectlombok
+ lombok
+ 1.18.34
+ provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ 5.8.2
+ test
+
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ 5.8.2
+ test
+
+
+
+ org.junit.platform
+ junit-platform-runner
+ 1.8.2
+ test
+
+
+ org.testng
+ testng
+ RELEASE
+ test
+
diff --git a/src/main/java/uk/ac/ebi/intact/app/internal/CyActivator.java b/src/main/java/uk/ac/ebi/intact/app/internal/CyActivator.java
index 31294209..5e40a014 100644
--- a/src/main/java/uk/ac/ebi/intact/app/internal/CyActivator.java
+++ b/src/main/java/uk/ac/ebi/intact/app/internal/CyActivator.java
@@ -18,6 +18,7 @@
import uk.ac.ebi.intact.app.internal.tasks.query.NoGUIQueryTask;
import uk.ac.ebi.intact.app.internal.tasks.query.factories.ExactQueryTaskFactory;
import uk.ac.ebi.intact.app.internal.tasks.query.factories.FuzzySearchTaskFactory;
+import uk.ac.ebi.intact.app.internal.tasks.query.factories.AdvancedSearchTaskFactory;
import uk.ac.ebi.intact.app.internal.tasks.settings.SettingsTask;
import uk.ac.ebi.intact.app.internal.tasks.version.factories.VersionTaskFactory;
import uk.ac.ebi.intact.app.internal.tasks.view.extract.ExtractNetworkViewTaskFactory;
@@ -222,6 +223,11 @@ public TaskIterator createTaskIterator() {
Properties propsSearch = new Properties();
registerService(bc, intactSearch, NetworkSearchTaskFactory.class, propsSearch);
}
+ {
+ AdvancedSearchTaskFactory advancedSearchTaskFactory = new AdvancedSearchTaskFactory(manager);
+ Properties propsSearch = new Properties();
+ registerService(bc, advancedSearchTaskFactory, NetworkSearchTaskFactory.class, propsSearch);
+ }
manager.utils.info("Intact App initialized");
}
diff --git a/src/main/java/uk/ac/ebi/intact/app/internal/io/HttpUtils.java b/src/main/java/uk/ac/ebi/intact/app/internal/io/HttpUtils.java
index 39e2822f..5d72892a 100644
--- a/src/main/java/uk/ac/ebi/intact/app/internal/io/HttpUtils.java
+++ b/src/main/java/uk/ac/ebi/intact/app/internal/io/HttpUtils.java
@@ -1,11 +1,17 @@
package uk.ac.ebi.intact.app.internal.io;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.node.NullNode;
import org.cytoscape.io.util.StreamUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import uk.ac.ebi.intact.app.internal.model.managers.Manager;
+import uk.ac.ebi.intact.app.internal.ui.components.query.advanced.Field;
import java.io.*;
import java.net.*;
@@ -19,11 +25,53 @@
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
+import static uk.ac.ebi.intact.app.internal.model.managers.Manager.INTACT_GRAPH_WS;
+
public class HttpUtils {
+
private static final HttpClient httpClient = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.build();
+ private static final HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
+ .header("Content-Type", "application/json")
+ .header("Accept", "application/json");
+
+ private static final ObjectMapper mapper = JsonMapper.builder()
+ .configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
+ .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true)
+ .build();
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(HttpUtils.class);
+
+ public static JsonNode getJsonNetworkWithRequestBody(String query, int page) throws IOException, InterruptedException {
+ String baseUrl = INTACT_GRAPH_WS + "network/fromPagedInteractions";
+
+ Map params = Map.of(
+ "query", query,
+ "advancedSearch", isAdvancedSearch(query),
+ "page", page
+ );
+
+ HttpRequest request = requestBuilder
+ .uri(URI.create(baseUrl))
+ .POST(HttpRequest.BodyPublishers.ofString(mapper.writeValueAsString(params)))
+ .build();
+
+ HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofInputStream());
+
+ return mapper.readTree(response.body());
+ }
+
+ public static boolean isAdvancedSearch(String query) {
+ for (Field field : Field.values()) {
+ if (query.contains(field.getMiqlQuery())) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public static JsonNode getJSON(String url, Map queryMap, Manager manager) {
URL trueURL;
try {
@@ -48,7 +96,7 @@ public static JsonNode getJSON(String url, Map queryMap, Manager
entityStream.close();
} catch (Exception e) {
- e.printStackTrace();
+ logError(e.getMessage());
}
return jsonObject;
}
@@ -65,11 +113,11 @@ public static JsonNode postJSON(String url, Map