Skip to content

Commit

Permalink
Produces expTemplate as a service and on the command line (closes #127)
Browse files Browse the repository at this point in the history
Change-Id: I361b13ccdeb4e655474f8c4309b0a9772e31f417
  • Loading branch information
hebasta committed Oct 9, 2024
1 parent e7cc5a2 commit dc1aaeb
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 3 deletions.
56 changes: 56 additions & 0 deletions src/main/java/de/ids_mannheim/korap/plkexport/ExpTempl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package de.ids_mannheim.korap.plkexport;

import org.tinylog.Logger;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;


public class ExpTempl {

/*
* Returns export template as JSON
*/
public static String getExportTempl(String scheme, String host, String port){

String json = "";
try {

ObjectMapper mapper = new ObjectMapper();
ObjectNode templ = mapper.createObjectNode();

templ.put("name", "Export");
templ.put("desc", "Exports Kalamar results");

ObjectNode embed = mapper.createObjectNode();
embed.put("panel", "result");
embed.put("title", "exports KWICs and snippets");
embed.put("icon", "\uf019");

ArrayNode classes = mapper.createArrayNode();
classes.add("button-icon");
classes.add("plugin");
embed.set("classes", classes);

ObjectNode onClick = mapper.createObjectNode();
onClick.put("action", "addWidget");
onClick.put("template", scheme + "://" + host + ":" + port +"/export");

ArrayNode perm = mapper.createArrayNode();
perm.add("forms");
perm.add("scripts");
perm.add("downloads");

onClick.set("permissions", perm);
embed.set("onClick", onClick);
templ.set("embed", embed);

json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(templ);

} catch (Exception ex) {
Logger.error(ex);
return null;
}
return json;
}
}
41 changes: 38 additions & 3 deletions src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.ids_mannheim.korap.plkexport;


import java.util.Properties;

import org.eclipse.jetty.server.Handler;
Expand All @@ -14,6 +15,7 @@

import org.tinylog.Logger;


import jakarta.servlet.Servlet;

/**
Expand All @@ -28,11 +30,27 @@ public static void main (String[] args) throws Exception {
contextHandler.setContextPath("/");

String propfile = null;
if(args.length >= 1) {
propfile = args[0];

boolean printhelp = false;
boolean argexc = false;

if(args.length >= 1 & args.length <= 2) {
for (int i = 0; i <= args.length-1; i++) {
if (args[i].equals("-h" ) | args[i].equals("--help")){
printhelp = true;
}
else {
propfile = args[i];
}
}
}
else if(args.length >= 3){
argexc = true;
}
Properties properties = ExWSConf.properties(propfile);


String usage = "\n Usage is java -jar KalamarExportPlugin-"+ ExWSConf.version() +".jar [-h|--help] [myconf_exportPlugin.conf]";

// Default: Server is available under http://localhost:7070/
String portStr = properties.getProperty("server.port", "7070");
String host = properties.getProperty("server.host", "localhost");
Expand Down Expand Up @@ -72,11 +90,28 @@ public static void main (String[] args) throws Exception {
properties.getProperty("api.port") +
properties.getProperty("api.path","")
);


if(printhelp){
System.out.println(usage);
String templString = ExpTempl.getExportTempl(properties.getProperty("server.scheme"), properties.getProperty("server.host"), properties.getProperty("server.port"));
System.out.println(" \n Export template to pass to the plugin registration handler: \n "
+ templString);
}
else {
System.out.println("\n You can use -h or --help for more information about usage");
}

if(argexc){
System.out.println("\n Too much arguments: " + usage);
}

jettyServer.join();
}
finally {
jettyServer.stop();
jettyServer.destroy();
}
}

}
12 changes: 12 additions & 0 deletions src/main/java/de/ids_mannheim/korap/plkexport/Service.java
Original file line number Diff line number Diff line change
Expand Up @@ -577,6 +577,18 @@ public Response exportHTML () {
};


/**
*
* Returns the export template as JSON.
*/
@GET
@Path("export/template")
@Produces(MediaType.APPLICATION_JSON)
public String exportDisplayTemplate () {
Properties properties = ExWSConf.properties(null);
return ExpTempl.getExportTempl(properties.getProperty("server.scheme"),properties.getProperty("server.host"), properties.getProperty("server.port"));
};

/**
* The export script.
*
Expand Down
57 changes: 57 additions & 0 deletions src/test/java/de/ids_mannheim/korap/plkexport/ExpTemlTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package de.ids_mannheim.korap.plkexport;

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.Response.Status;
import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.server.ResourceConfig;
import java.util.Properties;
import jakarta.ws.rs.core.Application;

/**
* @author Helge
*
* Tests if export template is correctly displayed
*/
public class ExpTemlTest extends JerseyTest {

@Override
protected Application configure () {
return new ResourceConfig(Service.class);
}

/*
* Tests if export template is produced from service /export/template
*/
@Test
public void testTemplService(){
Response response = target("/export/template").request()
.get();
assertEquals("Http Response should be 200:",
Status.OK.getStatusCode(), response.getStatus());
String json = response.readEntity(String.class);
assertTrue(json.contains("\"name\" : \"Export\""));
assertTrue(json.contains(" \"classes\" : [ \"button-icon\", \"plugin\" ]"));
Properties properties = ExWSConf.properties(null);
String templurl= properties.getProperty("server.scheme") + "://" + properties.getProperty("server.host")
+ ":" + properties.getProperty("server.port") + "/export";
assertTrue(json.contains(templurl));
}

/*
* Tests if exportTemplate is returned correctly
*/
@Test
public void testGetTempl(){
String scheme = "httpx";
String host = "xlocalhost";
String port = "1234";
String json = ExpTempl.getExportTempl("httpx", "xlocalhost", "1234");
assertTrue(json.contains("\"desc\" : \"Exports Kalamar results\""));
assertTrue(json.contains( "\"title\" : \"exports KWICs and snippets\""));
String templ = "\"template\" : \""+ scheme +"://"+host + ":" + port + "/export\"";
assertTrue(json.contains(templ));
}
}

0 comments on commit dc1aaeb

Please sign in to comment.