From 32f3301dd19e67f5331b63a9fb91a196bde3ae70 Mon Sep 17 00:00:00 2001 From: Cesare Date: Wed, 21 Oct 2020 10:08:48 +0200 Subject: [PATCH] first commit --- pom.xml | 235 ++++++++++++++++++ .../service/CitationContextListener.java | 28 +++ .../service/CitationServiceStart.java | 48 ++++ .../citation/service/CitationServiceWAR.java | 18 ++ .../sshoc/citation/service/SwaggerConfig.java | 80 ++++++ .../citation/service/TestGetCitation.java | 13 + .../service/services/CitationHarvester.java | 87 +++++++ .../service/services/CitationService.java | 103 ++++++++ .../services/CitationServiceController.java | 80 ++++++ .../impl/CitationHarvesterImpl.java | 133 ++++++++++ .../impl/CitationServiceImpl.java | 38 +++ .../wfconfigurator/impl/MDListener.javazzi | 61 +++++ .../resources/META-INF/spring/app-context.xml | 57 +++++ .../resources/NodeService-0.0.3-SNAPSHOT.jar | Bin 0 -> 67070 bytes src/main/resources/Settings.properties | 31 +++ src/main/resources/templates/logo.png | Bin 0 -> 26760 bytes src/main/resources/templates/main_index.html | 36 +++ src/main/resources/templates/welcome.html | 29 +++ 18 files changed, 1077 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/eu/sshoc/citation/service/CitationContextListener.java create mode 100644 src/main/java/eu/sshoc/citation/service/CitationServiceStart.java create mode 100644 src/main/java/eu/sshoc/citation/service/CitationServiceWAR.java create mode 100644 src/main/java/eu/sshoc/citation/service/SwaggerConfig.java create mode 100644 src/main/java/eu/sshoc/citation/service/TestGetCitation.java create mode 100644 src/main/java/eu/sshoc/citation/service/services/CitationHarvester.java create mode 100644 src/main/java/eu/sshoc/citation/service/services/CitationService.java create mode 100644 src/main/java/eu/sshoc/citation/service/services/CitationServiceController.java create mode 100644 src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationHarvesterImpl.java create mode 100644 src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationServiceImpl.java create mode 100644 src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/MDListener.javazzi create mode 100644 src/main/resources/META-INF/spring/app-context.xml create mode 100644 src/main/resources/NodeService-0.0.3-SNAPSHOT.jar create mode 100644 src/main/resources/Settings.properties create mode 100644 src/main/resources/templates/logo.png create mode 100644 src/main/resources/templates/main_index.html create mode 100644 src/main/resources/templates/welcome.html diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c2913ce --- /dev/null +++ b/pom.xml @@ -0,0 +1,235 @@ + + 4.0.0 + eu.sshoc + citation + 0.0.2-SNAPSHOT + war + CitationService + The Citation Service of the SSHOC system + + true + 0.0.1-SNPSHOT + eu.sshoc.citation.service.CitationServiceStart + + + org.springframework.boot + spring-boot-starter-parent + 1.5.1.RELEASE + + + + + + + + com.rabbitmq + rabbitmq-client + 1.3.0 + + + junit + junit + 4.12 + test + + + org.springframework + spring-context-support + 4.1.6.RELEASE + + + + + org.springframework + spring-aop + 4.3.6.RELEASE + + + + springframework + spring-orm + 1.2.6 + + + javax.transaction + jta + 1.1 + + + + org.springframework.boot + spring-boot-starter-web + 1.5.1.RELEASE + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + + io.springfox + springfox-swagger2 + 2.6.1 + + + + + io.springfox + springfox-data-rest + 2.6.1 + + + + io.springfox + springfox-bean-validators + 2.6.1 + + + io.springfox + springfox-swagger-ui + 2.6.1 + + + + org.springframework.boot + spring-boot-starter-activemq + + + log4j + log4j + 1.2.16 + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.apache.curator + apache-curator + 3.3.0 + pom + + + org.apache.curator + curator-client + 3.3.0 + + + org.apache.curator + curator-framework + 3.3.0 + + + org.json + json + 20180130 + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + com.auth0 + java-jwt + 3.3.0 + + + + org.apache.curator + curator-x-discovery + 4.0.1 + + + + org.apache.curator + curator-x-async + 4.0.1 + + + org.apache.curator + curator-recipes + 4.0.1 + + + + + + data-local + data + file://${project.basedir}/repo + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + repackage + + + + + + + + + maven-war-plugin + + + false + + + true + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.0 + + + + + \ No newline at end of file diff --git a/src/main/java/eu/sshoc/citation/service/CitationContextListener.java b/src/main/java/eu/sshoc/citation/service/CitationContextListener.java new file mode 100644 index 0000000..b5edf3c --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/CitationContextListener.java @@ -0,0 +1,28 @@ +package eu.sshoc.citation.service; + +import javax.servlet.ServletContextEvent; +import javax.servlet.ServletContextListener; +import javax.servlet.annotation.WebListener; + +import org.springframework.context.annotation.Configuration; + +@Configuration +@WebListener +public class CitationContextListener implements ServletContextListener { + + @Override + + public void contextDestroyed(ServletContextEvent arg0) { + System.out.println("******************CitationService context stopping "); + + } + + @Override + + public void contextInitialized(ServletContextEvent arg0) { + System.out.println("******************CitationService context initialized " + this); + + } + + + } \ No newline at end of file diff --git a/src/main/java/eu/sshoc/citation/service/CitationServiceStart.java b/src/main/java/eu/sshoc/citation/service/CitationServiceStart.java new file mode 100644 index 0000000..16105a0 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/CitationServiceStart.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright (c) 2018 VRE4EIC Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package eu.sshoc.citation.service; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.SpringApplication; + + + +//@Configuration +//@ComponentScan + +//@EnableAutoConfiguration +@SpringBootApplication +@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) + +public class CitationServiceStart { + + + /*private static AuthModule module; + private static MDModule MDmodule; +*/ + public static void main(String[] args) { + + //ZKServer.init(); + + + SpringApplication.run(CitationServiceStart.class, args); + + + + } +} diff --git a/src/main/java/eu/sshoc/citation/service/CitationServiceWAR.java b/src/main/java/eu/sshoc/citation/service/CitationServiceWAR.java new file mode 100644 index 0000000..784a126 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/CitationServiceWAR.java @@ -0,0 +1,18 @@ + +package eu.sshoc.citation.service; + + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.support.SpringBootServletInitializer; + +//@SpringBootApplication +public class CitationServiceWAR extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(CitationServiceStart.class); + } + + +} diff --git a/src/main/java/eu/sshoc/citation/service/SwaggerConfig.java b/src/main/java/eu/sshoc/citation/service/SwaggerConfig.java new file mode 100644 index 0000000..2df6bdb --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/SwaggerConfig.java @@ -0,0 +1,80 @@ +package eu.sshoc.citation.service; + + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.google.common.base.Predicate; + +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +import static springfox.documentation.builders.PathSelectors.*; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + + +import static com.google.common.base.Predicates.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Configuration +//@SpringBootApplication +@EnableSwagger2 +//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) +public class SwaggerConfig { + private Logger log = LoggerFactory.getLogger(this.getClass()); + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .groupName("citationservice-api") + .apiInfo(apiInfo()) + .select() + //.apis(!(RequestHandlerSelectors.withClassAnnotation(JsonIgnore.class)) + .apis(RequestHandlerSelectors.any()) + //.paths(PathSelectors.any()) + //.paths(PathSelectors.regex("/user.*")) + .paths(paths()) + .build() + .pathMapping("/"); + } + + private Predicate paths() { + //return or(PathSelectors.regex("/wfservice.*"), + // PathSelectors.regex("/wfservice.*")); + return or(PathSelectors.regex("/citservice.*"), + PathSelectors.regex("/citharvester.*")); + } + private ApiInfo apiInfo() { + InputStream in; + Properties property = new Properties(); + try { + in = this.getClass().getClassLoader() + .getResourceAsStream("Settings.properties"); + property.load(in); + in.close(); + } catch (FileNotFoundException e) { + + log.error(e.getMessage()); + } catch (IOException e) { + log.error(e.getMessage()); + } + return new ApiInfoBuilder() + .title("SSHOC Citation Service") + .description("This page shows the Web Services entry points for the SSHOC Citation Service.") + .version(property.getProperty("Version_default")) + .termsOfServiceUrl("http://terms-of-services.sshoc") + .license("Apache License, Version 2.0") + .licenseUrl("https://www.apache.org/licenses/LICENSE-2.0") + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/eu/sshoc/citation/service/TestGetCitation.java b/src/main/java/eu/sshoc/citation/service/TestGetCitation.java new file mode 100644 index 0000000..594be66 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/TestGetCitation.java @@ -0,0 +1,13 @@ +package eu.sshoc.citation.service; + +import eu.sshoc.citation.service.wfconfigurator.impl.CitationHarvesterImpl; +public class TestGetCitation { + + public static void main(String[] args) { + CitationHarvesterImpl chi= new CitationHarvesterImpl(); + + chi.getCitation("test", "test", "test"); + + } + +} diff --git a/src/main/java/eu/sshoc/citation/service/services/CitationHarvester.java b/src/main/java/eu/sshoc/citation/service/services/CitationHarvester.java new file mode 100644 index 0000000..3628b16 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/services/CitationHarvester.java @@ -0,0 +1,87 @@ +package eu.sshoc.citation.service.services; + + + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Properties; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import eu.sshoc.citation.service.wfconfigurator.impl.CitationHarvesterImpl; +import io.swagger.annotations.ApiOperation; + + + +/** + * + * @author Cesare + * + */ + +@RestController +public class CitationHarvester { + + Properties property = new Properties(); + CitationHarvesterImpl wfc= new CitationHarvesterImpl(); + public CitationHarvester() { + super(); + + /*InputStream in; + + try { + in = this.getClass().getClassLoader() + .getResourceAsStream("Settings.properties"); + property.load(in); + in.close(); + } catch (FileNotFoundException e) { + + } catch (IOException e) { + + }*/ + } + + @ApiOperation(value = "Returns a list of citations from specific citation source", + notes = "A client with a valid identifier can invoke this web service to obtain a list of citations from a specified source", + response = String.class) + @RequestMapping(value="/citharvester/getcitationlist", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String getCitationList(@RequestParam(value="sourceid") String sourceid, @RequestParam(value="token") String token) { + + return wfc.getCitationList(sourceid, token); + } + + + @ApiOperation(value = "Retrieves the metadata of a citation via the API of the specified DOI Registration Agency", + notes = "A client with a valid identifier can invoke this web service to retrieve the citation metadata using the API provided by the DOI Registration Agency", + response = String.class) + @RequestMapping(value="/citharvester/getmetadataapi", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String getCitation(@RequestParam(value="doira") String sourceid, @RequestParam(value="pid") String pid, @RequestParam(value="token") String token) { + + return wfc.getCitation(sourceid, pid, token).toString(); + } + + @ApiOperation(value = "Returns a metadata of a citation via Content Negotiated requests", + notes = "A client with a valid identifier can invoke this web service to to retrieve the citation metadata using DOI content negotiated requests", + response = String.class) + @RequestMapping(value="/citharvester/getmetadatacn", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String getCitationMD(@RequestParam(value="pid") String pid, @RequestParam(value="token") String token) { + + return wfc.getCitationMetadata(pid, token).toString(); + } + + @ApiOperation(value = "Returns formatted citation using via content negotiated request", + notes = "A client with a valid identifier can invoke this web service to obtain a formatted citation, the text/bibliography content type is used ", + response = String.class) + @RequestMapping(value="/citharvester/getformcit", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String getCitationCSL(@RequestParam(value="pid") String pid, @RequestParam(value="token") String token) { + + return wfc.getCitationCSL(pid, token).toString(); + } + +} diff --git a/src/main/java/eu/sshoc/citation/service/services/CitationService.java b/src/main/java/eu/sshoc/citation/service/services/CitationService.java new file mode 100644 index 0000000..012ebe6 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/services/CitationService.java @@ -0,0 +1,103 @@ +/******************************************************************************* + * Copyright (c) 2018 VRE4EIC Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +package eu.sshoc.citation.service.services; + + + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Properties; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import eu.sshoc.citation.service.wfconfigurator.impl.CitationServiceImpl; +import io.swagger.annotations.ApiOperation; + + + +/** + * + * @author Cesare + * + */ + +@RestController +public class CitationService { + + Properties property = new Properties(); + CitationServiceImpl wfc= new CitationServiceImpl(); + public CitationService() { + super(); + + /*InputStream in; + + try { + in = this.getClass().getClassLoader() + .getResourceAsStream("Settings.properties"); + property.load(in); + in.close(); + } catch (FileNotFoundException e) { + + } catch (IOException e) { + + }*/ + } + + @ApiOperation(value = "Returns a list of citations", + notes = "A client with a valid identifier can invoke this web service to obtain a list of citations stored in SSHOC citation repository", + response = String.class) + @RequestMapping(value="/citservice/getcitation", method=RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String getServiceDescriptions(@RequestParam(value="sshocid") String sshocid, @RequestParam(value="token") String token) { + + return wfc.getServiceDescriptions(sshocid, token); + } + + @ApiOperation(value = "Search for citation", + notes = "A client with a valid identifier can invoke this web service to search the SSHOC repository for citations", + response = String.class) + @RequestMapping(value="/citservice/searchcitation", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String searchServiceDescriptions(@RequestParam(value="sshocid") String sshocid, @RequestParam(value="query") String query, @RequestParam(value="token") String token){ + + return null; + } + + @ApiOperation(value = "Save a citation", + notes = "A client with a valid identifier can invoke this web service to save the citation in the SSHOC repository", + response = String.class) + @RequestMapping(value="/citservice/savecitation", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String saveCitations(@RequestParam(value="sshocid") String sshocid, @RequestParam(value="description") String description, @RequestParam(value="token") String token){ + + + return wfc.saveCitations(sshocid, description, token); + } + @ApiOperation(value = "Search for citations ", + notes = "A client with a valid identifier can invoke this web service to search the SSHOC repository for citations", + response = String.class) + @RequestMapping(value="/citservice/searchcite", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + public String searchWfDescriptions(@RequestParam(value="sshocid") String sshocid, @RequestParam(value="query") String query, @RequestParam(value="token") String token){ + + return wfc.getCitations(sshocid, query, token); + } + + +} diff --git a/src/main/java/eu/sshoc/citation/service/services/CitationServiceController.java b/src/main/java/eu/sshoc/citation/service/services/CitationServiceController.java new file mode 100644 index 0000000..774d4c9 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/services/CitationServiceController.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2018 VRE4EIC Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +package eu.sshoc.citation.service.services; + + + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Properties; + +import javax.servlet.http.HttpSession; + +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + + +import io.swagger.annotations.ApiOperation; + + + +/** + * This class contains methods for managing users. + * @author Cesare + * + */ + +@Controller +public class CitationServiceController { + + private static final String RELEASE = "release"; + private static final String WELCOME_PAGE = "welcome"; + Properties property = new Properties(); + public CitationServiceController() { + super(); + + InputStream in; + + try { + in = this.getClass().getClassLoader() + .getResourceAsStream("Settings.properties"); + property.load(in); + in.close(); + } catch (FileNotFoundException e) { + + } catch (IOException e) { + + } + } + + //@JsonIgnore + @RequestMapping(value="/", method=RequestMethod.GET) + public String WelcomePage(ModelMap model, HttpSession session) { + + session.setAttribute(RELEASE, property.getProperty("Version_default")); + + return WELCOME_PAGE; + } + +} diff --git a/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationHarvesterImpl.java b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationHarvesterImpl.java new file mode 100644 index 0000000..c7f3083 --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationHarvesterImpl.java @@ -0,0 +1,133 @@ +package eu.sshoc.citation.service.wfconfigurator.impl; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.Charset; + +import javax.net.ssl.HttpsURLConnection; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + + + +public class CitationHarvesterImpl { + + + public CitationHarvesterImpl(){ + + + } + + private static String readAll(Reader rd) throws IOException { + StringBuilder sb = new StringBuilder(); + int cp; + while ((cp = rd.read()) != -1) { + sb.append((char) cp); + } + return sb.toString(); + } + + public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException { + InputStream is = new URL(url).openStream(); + try { + BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); + String jsonText = readAll(rd); + JSONObject json = new JSONObject(jsonText); + return json; + } finally { + is.close(); + } + } + private static String getStandardCitation(String citurl) throws IOException{ + URL myURL = new URL(citurl); + HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection(); + myURLConnection.setRequestProperty("Accept", "text/x-bibliography; style=harvard3; locale=fr-FR"); + InputStream mis = myURLConnection.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(mis, Charset.forName("UTF-8"))); + return (readAll(rd)); + + } + public String getCitationList(String id, String token){ + return null; + } + + public JSONObject getCitation(String id, String pid, String token){ + JSONObject jsondata=null; + try { + String sid="10.1007/s11082-018-1327-1"; + if (pid!=null && pid.trim()!="" && !pid.trim().equalsIgnoreCase("test")) + sid=pid.trim(); + + jsondata = readJsonFromUrl("https://api.test.datacite.org/dois/"+sid); + System.out.println(jsondata.toString()); + // System.out.println(json.get("id")); + } catch (IOException | JSONException e) { + + e.printStackTrace(); + } + + return jsondata; + } + public JSONObject getCitationMetadata(String pid, String token){ + JSONObject jsondata=null; + try { + String sid="10.1007/s11082-018-1327-1"; + if (pid!=null && pid.trim()!="" && !pid.trim().equalsIgnoreCase("test")) + sid=pid.trim(); + URL myURL = new URL("https://doi.org/"+sid); + HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection(); + myURLConnection.setRequestProperty("Accept", "application/rdf+xml;q=0.5, application/vnd.citationstyles.csl+json;q=1.0"); + InputStream mis = myURLConnection.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(mis, Charset.forName("UTF-8"))); + String jsonText = readAll(rd); + jsondata = new JSONObject(jsonText); + System.out.println(jsondata.toString()); + //JSONObject jsoncit = new JSONObject(); + //jsondata.put("citation", getStandardCitation("https://doi.org/"+sid)); + + } catch (Exception e) { + + e.printStackTrace(); + } + + return jsondata; + } + + public JSONObject getCitationCSL(String pid, String token){ + String jsonText=""; + JSONObject jsondata=null; + try { + String sid="10.1007/s11082-018-1327-1"; //10.1126/science.169.3946.635 + if (pid!=null && pid.trim()!="" && !pid.trim().equalsIgnoreCase("test")) + sid=pid.trim(); + URL myURL = new URL("https://doi.org/"+sid); + //URL myURL = new URL("https://doi.org/10.1126/science.169.3946.635"); + HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection(); + myURLConnection.setRequestProperty("Accept", "text/x-bibliography; style=harvard3; locale=en-EN"); + InputStream mis = myURLConnection.getInputStream(); + BufferedReader rd = new BufferedReader(new InputStreamReader(mis, Charset.forName("UTF-8"))); + jsonText = readAll(rd); + + System.out.println(jsonText); + jsondata = new JSONObject(); + jsondata.put("citation", jsonText); + + } catch (Exception e) { + + e.printStackTrace(); + } + + return jsondata; + } + +} diff --git a/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationServiceImpl.java b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationServiceImpl.java new file mode 100644 index 0000000..37b377f --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/CitationServiceImpl.java @@ -0,0 +1,38 @@ +package eu.sshoc.citation.service.wfconfigurator.impl; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; +import java.net.URLEncoder; + +import javax.net.ssl.HttpsURLConnection; + +import org.json.JSONArray; +import org.json.JSONObject; + + + +public class CitationServiceImpl { + + + public CitationServiceImpl(){ + + + } + + public String getServiceDescriptions(String id, String token){ + return null; + } + + public String saveCitations(String userId, String citation, String token){ + return null; + } + public String getCitations(String userId, String query, String token){ + return null; + } + +} diff --git a/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/MDListener.javazzi b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/MDListener.javazzi new file mode 100644 index 0000000..b8f714a --- /dev/null +++ b/src/main/java/eu/sshoc/citation/service/wfconfigurator/impl/MDListener.javazzi @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2018 VRE4EIC Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package eu.sshoc.citation.service.wfconfigurator.impl; + +import java.time.LocalDateTime; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import eu.vre4eic.evre.core.messages.AuthenticationMessage; +import eu.vre4eic.evre.core.messages.MetadataMessage; +import eu.vre4eic.evre.nodeservice.modules.metadata.MDModule; +import eu.vre4eic.evre.core.comm.MessageListener; + +/** + * + * Class used to receive asynchronous messages related to users authenticated by the system. + * The authentication message can represent Login or Logout operations and contains token which must be used by users for each service invocation. + * @author francesco + * + */ +public class MDListener implements MessageListener{ + + private MDModule module; + private Logger log = LoggerFactory.getLogger(this.getClass()); + + public MDListener(MDModule mdModule) { + this.module = mdModule; + } + + /* (non-Javadoc) + * @see javax.jms.MessageListener#onMessage(javax.jms.Message) + */ + @Override + public void onMessage(MetadataMessage message) { + + log.info("##### metadata message arrived #####"); + //log.info("token: " + am.getToken()); + //log.info("time limit: "+ am.getTimeLimit()); + + log.info(message.getToken()+" "+message.getMessage()); + + + } + + + +} diff --git a/src/main/resources/META-INF/spring/app-context.xml b/src/main/resources/META-INF/spring/app-context.xml new file mode 100644 index 0000000..32768ac --- /dev/null +++ b/src/main/resources/META-INF/spring/app-context.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/NodeService-0.0.3-SNAPSHOT.jar b/src/main/resources/NodeService-0.0.3-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..da48487e4b0ddb57e7948da848c7b3ba030fd631 GIT binary patch literal 67070 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�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 literal 0 HcmV?d00001 diff --git a/src/main/resources/Settings.properties b/src/main/resources/Settings.properties new file mode 100644 index 0000000..7df6e9c --- /dev/null +++ b/src/main/resources/Settings.properties @@ -0,0 +1,31 @@ +# Orchestra Repository Settings + +ZooKeeper_default=localhost:2181 + +Version_path=/evre/settings/version +Version_default=0.0.1 + + +TokenTimeout_path=/evre/settings/authentication/token_timeout +TokenTimeout_default=60 + +TokenSecret_path=/evre/services/authentication/token_secret + +CodeTimeout_path=/evre/settings/authentication/code_timeout +CodeTimeout_default=60 + +MessageBroker_path=/evre/services/MessageBroker/URL +MessageBroker_default=tcp://v4e-lab.isti.cnr.it:61616 + + +ProfileStorage_path=/evre/services/ProfileStorage/URL +ProfileStorage_default=127.0.0.1 + +ProfileStoragePort_path=/evre/services/ProfileStorage/Port +ProfileStoragePort_default=27017 + +AAAI_login=/evre/services/ProfileStorage/login +AAAI_login_default=user_test + +AAAI_pwd=/evre/services/ProfileStorage/pwd +AAAI_pwd_default=pwd_test \ No newline at end of file diff --git a/src/main/resources/templates/logo.png b/src/main/resources/templates/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..57fb00b717ce3533ef616653d1ab13f7559f5992 GIT binary patch literal 26760 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 + + + e-VRE + + + + + +

+ + + + + diff --git a/src/main/resources/templates/welcome.html b/src/main/resources/templates/welcome.html new file mode 100644 index 0000000..78daefa --- /dev/null +++ b/src/main/resources/templates/welcome.html @@ -0,0 +1,29 @@ + + + + SSHOC: Citation Service description page + + + + + +
+

Welcome to SSHOC Citation Service (release )

+

+

+

+ The Web Services API documentation

+

The Citation Viewer example

+ + + +
+ + + +