Skip to content

Commit 8285906

Browse files
committed
Metadata compilation activated
1 parent 60416d1 commit 8285906

11 files changed

Lines changed: 254 additions & 32 deletions

File tree

EDI-T/.classpath

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
</attributes>
1919
</classpathentry>
2020
<classpathentry kind="lib" path="postgresql-9.4-1201.jdbc4.jar"/>
21+
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/saxon9he.jar"/>
2122
<classpathentry kind="output" path="target/classes"/>
2223
</classpath>

EDI-T/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@
6060
<artifactId>hibernate-jpa-2.0-api</artifactId>
6161
<version>1.0.0.Final</version>
6262
</dependency>
63+
<dependency>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-starter-data-solr</artifactId>
66+
</dependency>
6367
</dependencies>
6468
<build>
6569
<sourceDirectory>src</sourceDirectory>

EDI-T/src/it/cnr/irea/ediT/MetadataTemplateDocument.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import it.cnr.irea.ediT.exception.RootElementNotFoundException;
44
import it.cnr.irea.ediT.exception.Settings;
5+
import it.cnr.irea.ediT.model.Setting;
56
import it.cnr.irea.ediT.model.TemplateElement;
67
import it.cnr.irea.ediT.model.TemplateElementList;
78
import it.cnr.irea.ediT.model.TemplateItem;
9+
import it.cnr.irea.ediT.service.BaseService;
810

911
import java.io.ByteArrayInputStream;
1012
import java.io.ByteArrayOutputStream;
@@ -42,6 +44,9 @@
4244
import javax.xml.xpath.XPathFactoryConfigurationException;
4345

4446
import org.parboiled.common.StringUtils;
47+
import org.springframework.beans.factory.annotation.Autowired;
48+
import org.springframework.stereotype.Controller;
49+
import org.springframework.stereotype.Service;
4550
import org.w3c.dom.Attr;
4651
import org.w3c.dom.DOMException;
4752
import org.w3c.dom.Document;
@@ -51,11 +56,14 @@
5156
import org.w3c.dom.NodeList;
5257
import org.xml.sax.SAXException;
5358

59+
@Controller
5460
public class MetadataTemplateDocument {
5561
private static DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
5662
private static DocumentBuilder dBuilder;
5763
private static XPathFactory xPathfactory = XPathFactory.newInstance();
5864
private List<String> messages = new ArrayList<String>();
65+
@Autowired
66+
BaseService service;
5967
String starterKit;
6068

6169
/** The xpath. */
@@ -76,14 +84,17 @@ public class MetadataTemplateDocument {
7684

7785
private Document output = null;
7886

87+
public MetadataTemplateDocument() {
88+
super();
89+
}
7990
/*
8091
* Creates a new Metadata Template Document
8192
* @author Fabio Pavesi
8293
* @param templateObject the template this instance is supposed to work with
8394
* @param service the service to be used to persist results
8495
*/
85-
public MetadataTemplateDocument(/* MetadataTemplate templateObject, */ byte[] baseDocument) {
86-
this.starterKit = Settings.get("serverName");
96+
public MetadataTemplateDocument(/* MetadataTemplate templateObject, */ byte[] baseDocument, BaseService service) {
97+
this.starterKit = service.getSetting("starterKit", "noSK");
8798

8899
/*
89100
System.setProperty("jaxp.debug","1");
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package it.cnr.irea.ediT.exception;
2+
3+
public class HostNotConfiguredException extends Exception {
4+
5+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package it.cnr.irea.ediT.model;
2+
3+
import javax.xml.bind.annotation.XmlRootElement;
4+
5+
@XmlRootElement
6+
public class ErrorResponse {
7+
public static ErrorResponse HOST_NOT_CONFIGURED = new ErrorResponse(1000, "Host name has not been configured");
8+
9+
private int code;
10+
private String message;
11+
12+
public ErrorResponse(int code, String message) {
13+
this.code = code;
14+
this.message = message;
15+
}
16+
17+
public int getCode() {
18+
return code;
19+
}
20+
21+
public void setCode(int code) {
22+
this.code = code;
23+
}
24+
25+
public String getMessage() {
26+
return message;
27+
}
28+
29+
public void setMessage(String message) {
30+
this.message = message;
31+
}
32+
33+
}
34+
35+
36+

EDI-T/src/it/cnr/irea/ediT/model/Metadata.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import java.net.URISyntaxException;
77
import java.util.Date;
88

9+
import javax.persistence.Basic;
910
import javax.persistence.Entity;
11+
import javax.persistence.FetchType;
1012
import javax.persistence.GeneratedValue;
1113
import javax.persistence.GenerationType;
1214
import javax.persistence.Id;
@@ -40,11 +42,11 @@ public class Metadata {
4042

4143
private URI uri;
4244

43-
@Lob
45+
@Lob @Basic(fetch=FetchType.LAZY)
4446
private String input;
45-
@Lob
47+
@Lob @Basic(fetch=FetchType.LAZY)
4648
private String output;
47-
@Lob
49+
@Lob @Basic(fetch=FetchType.LAZY)
4850
private String template;
4951

5052
private Date metadataCreated;

EDI-T/src/it/cnr/irea/ediT/model/Setting.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,4 @@ public void setValue(String value) {
2929
this.value = value;
3030
}
3131

32-
3332
}

EDI-T/src/it/cnr/irea/ediT/model/TemplateElementList.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class TemplateElementList {
3636
private Date timestamp = new Date();
3737
private String queryString;
3838
private String templateName;
39-
private int fileId;
39+
private String fileId;
4040
private URI fileUri;
4141
private String user;
4242
private String version;
@@ -112,11 +112,11 @@ public void setTemplateName(String templateName) {
112112
}
113113

114114
@XmlElement(name = "fileId")
115-
public int getFileId() {
115+
public String getFileId() {
116116
return fileId;
117117
}
118118

119-
public void setFileId(int fileId) {
119+
public void setFileId(String fileId) {
120120
this.fileId = fileId;
121121
}
122122

EDI-T/src/it/cnr/irea/ediT/rest/RestBase.java

Lines changed: 123 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,53 @@
11
package it.cnr.irea.ediT.rest;
22

33
import it.cnr.irea.ediT.IdGenerator;
4+
import it.cnr.irea.ediT.MetadataTemplateDocument;
45
import it.cnr.irea.ediT.XsltService;
6+
import it.cnr.irea.ediT.exception.HostNotConfiguredException;
57
import it.cnr.irea.ediT.exception.Settings;
8+
import it.cnr.irea.ediT.model.ErrorResponse;
69
import it.cnr.irea.ediT.model.Metadata;
10+
import it.cnr.irea.ediT.model.PostMetadataResponse;
11+
import it.cnr.irea.ediT.model.TemplateElement;
12+
import it.cnr.irea.ediT.model.TemplateElementList;
13+
import it.cnr.irea.ediT.model.TemplateItem;
14+
import it.cnr.irea.ediT.model.XsltUrl;
715
import it.cnr.irea.ediT.service.BaseService;
816

17+
import java.io.ByteArrayInputStream;
18+
import java.io.IOException;
19+
import java.io.UnsupportedEncodingException;
20+
import java.util.Date;
21+
import java.util.HashMap;
922
import java.util.logging.Logger;
1023

1124
import javax.annotation.PostConstruct;
25+
import javax.persistence.EntityManager;
1226
import javax.servlet.http.HttpServletRequest;
27+
import javax.xml.bind.JAXBContext;
28+
import javax.xml.bind.JAXBException;
29+
import javax.xml.bind.Unmarshaller;
30+
import javax.xml.parsers.DocumentBuilder;
31+
import javax.xml.parsers.DocumentBuilderFactory;
32+
import javax.xml.parsers.ParserConfigurationException;
33+
import javax.xml.xpath.XPath;
34+
import javax.xml.xpath.XPathFactory;
1335

1436
import org.springframework.beans.factory.annotation.Autowired;
37+
import org.springframework.http.HttpStatus;
1538
import org.springframework.http.MediaType;
39+
import org.springframework.http.ResponseEntity;
40+
import org.springframework.web.bind.annotation.ExceptionHandler;
41+
import org.springframework.web.bind.annotation.PathVariable;
42+
import org.springframework.web.bind.annotation.RequestBody;
1643
import org.springframework.web.bind.annotation.RequestHeader;
1744
import org.springframework.web.bind.annotation.RequestMapping;
1845
import org.springframework.web.bind.annotation.RequestMethod;
1946
import org.springframework.web.bind.annotation.ResponseBody;
47+
import org.springframework.web.bind.annotation.ResponseStatus;
2048
import org.springframework.web.bind.annotation.RestController;
49+
import org.w3c.dom.Document;
50+
import org.xml.sax.SAXException;
2151

2252
@RestController
2353
public class RestBase extends CORSDecorator {
@@ -29,6 +59,7 @@ public class RestBase extends CORSDecorator {
2959
private IdGenerator generator;
3060
@Autowired
3161
private BaseService service;
62+
@Autowired EntityManager em;
3263

3364
public RestBase() {
3465
Settings.load();
@@ -40,35 +71,33 @@ public void postConstruct() {
4071
Metadata.service = service;
4172
}
4273

74+
@ExceptionHandler(HostNotConfiguredException.class)
75+
@ResponseStatus(value = HttpStatus.PRECONDITION_FAILED)
76+
public @ResponseBody ErrorResponse handleException(HostNotConfiguredException e) {
77+
log.severe("Host not configured");
78+
return ErrorResponse.HOST_NOT_CONFIGURED;
79+
}
80+
4381
@RequestMapping(method = RequestMethod.GET, value = "rest/ediml/requestId", produces = MediaType.APPLICATION_JSON_VALUE)
4482
@ResponseBody
45-
public Metadata getNewId(HttpServletRequest request, @RequestHeader("Host") String host) {
83+
public Metadata getNewId(HttpServletRequest request, @RequestHeader("Host") String host) throws HostNotConfiguredException {
84+
if ( service.getHostName() == null ) {
85+
throw new HostNotConfiguredException();
86+
}
4687
log.info("requestId " + host);
4788
log.info("request: " + request.getRequestURL());
4889
Metadata md = service.prepareMetadata();
4990
log.info("" + md.getId());
5091
return md;
5192
}
5293

53-
54-
/*
55-
@OPTIONS
56-
@Path("rest/metadata")
57-
@Consumes(value = {"application/xml", "text/xml"})
58-
@Produces("application/xml")
59-
public Response optionsPostMetadata(String xml) {
60-
return build(Response.ok());
61-
}
62-
63-
64-
@POST
65-
@Path("rest/metadata")
66-
@Consumes(value = {"application/xml", "text/xml"})
67-
@Produces("application/json")
68-
public Response postMetadataNG(@Context HttpServletRequest req, @HeaderParam("X-Forwarded-For") String ip, String xml, @HeaderParam("api_key") String apiKey) {
94+
@RequestMapping(method = RequestMethod.POST, value = "rest/metadata", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
95+
@ResponseBody
96+
public ResponseEntity<PostMetadataResponse> postMetadataNG(HttpServletRequest req, @RequestHeader(value = "X-Forwarded-For", required = false) String ip, @RequestBody String xml, @RequestHeader(value = "api_key", required = false) String apiKey) {
97+
log.info("xml: " + xml);
6998
PostMetadataResponse response = new PostMetadataResponse();
7099
MetadataTemplateDocument document = null;
71-
100+
// String ip = null;
72101
if ( ip == null ) {
73102
ip = req.getRemoteAddr();
74103
}
@@ -116,14 +145,17 @@ public Response postMetadataNG(@Context HttpServletRequest req, @HeaderParam("X-
116145
} else {
117146
baseDocument = elementList.getBaseDocument().getBytes("utf-8");
118147
}
119-
document = new MetadataTemplateDocument(baseDocument);
148+
document = new MetadataTemplateDocument(baseDocument, service);
120149
document.addAll(elementList);
121150
// return Response.ok(xml).build();
122151
Document xmlDoc = document.getOutput();
123152

153+
154+
service.saveMetadata(document, xml, elementList);
155+
124156
document.saveTo("/tmp/last_md.xml");
125157

126-
response.setEdimlId(elementList.getFileId());
158+
response.setEdimlId(Integer.parseInt(elementList.getFileId()));
127159
response.setResponseCode(200);
128160
response.setMessages(document.getMessages());
129161

@@ -144,7 +176,7 @@ public Response postMetadataNG(@Context HttpServletRequest req, @HeaderParam("X-
144176
response.setGeneratedXml(xmlTemp);
145177

146178
System.out.println("Морски");
147-
return build(Response.ok(response));
179+
return new ResponseEntity<PostMetadataResponse>(response, HttpStatus.OK);
148180
}
149181
} catch (Exception e) {
150182
e.printStackTrace();
@@ -154,7 +186,75 @@ public Response postMetadataNG(@Context HttpServletRequest req, @HeaderParam("X-
154186
response.setMessages(document.getMessages());
155187
}
156188
}
157-
return build(Response.status(500).entity(response));
189+
return new ResponseEntity<PostMetadataResponse>(response, HttpStatus.INTERNAL_SERVER_ERROR);
190+
}
191+
192+
@RequestMapping(method = RequestMethod.OPTIONS, value = "rest/metadata", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
193+
@ResponseBody
194+
public ResponseEntity<PostMetadataResponse> optionsPostMetadata(String xml) {
195+
return new ResponseEntity<PostMetadataResponse>(HttpStatus.OK);
158196
}
159-
*/
197+
198+
199+
@RequestMapping(method = RequestMethod.GET, value = "/rest/ediml/{id}", produces = MediaType.APPLICATION_XML_VALUE)
200+
@ResponseBody
201+
public String getEDIMLXml(@PathVariable int id) {
202+
log.info("getEDIMLXml " + id);
203+
Metadata md = service.getMetadata(id);
204+
return md.getInput();
205+
}
206+
207+
@RequestMapping(method = RequestMethod.GET, value = "/rest/ediml/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
208+
@ResponseBody
209+
public TemplateElementList getEDIML(@PathVariable int id) {
210+
log.info("getEDIML " + id);
211+
Metadata md = service.getMetadata(id);
212+
TemplateElementList elementList = null;
213+
String xml = md.getInput();
214+
215+
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
216+
DocumentBuilder dBuilder;
217+
218+
try {
219+
dBuilder = dbFactory.newDocumentBuilder();
220+
if ( xml != null ) {
221+
Document input = dBuilder.parse(new ByteArrayInputStream(xml.getBytes("utf-8")));
222+
JAXBContext jc = JAXBContext.newInstance(TemplateElementList.class);
223+
//Create unmarshaller
224+
Unmarshaller um = jc.createUnmarshaller();
225+
//Unmarshal XML contents of the file myDoc.xml into your Java object instance.
226+
elementList = (TemplateElementList) um.unmarshal(new ByteArrayInputStream(xml.getBytes("utf-8")));
227+
for ( TemplateElement element : elementList.getElements() ) {
228+
for ( TemplateItem item : element.getItems() ) {
229+
if ( item.getDataType() == null || item.getDataType().trim().equalsIgnoreCase("") ) {
230+
log.info("Item " + item.getId() + " has no datatype");
231+
}
232+
}
233+
}
234+
} else {
235+
elementList = new TemplateElementList();
236+
}
237+
if ( elementList != null && (elementList.getFileId() == null || elementList.getFileId().trim().equalsIgnoreCase("")) ) {
238+
elementList.setFileId("" + md.getId());
239+
elementList.setFileUri(md.getUri());
240+
elementList.setStarterKitUri(md.getStarterKit().getUri());
241+
}
242+
} catch (ParserConfigurationException e) {
243+
// TODO Auto-generated catch block
244+
e.printStackTrace();
245+
} catch (UnsupportedEncodingException e) {
246+
// TODO Auto-generated catch block
247+
e.printStackTrace();
248+
} catch (SAXException e) {
249+
// TODO Auto-generated catch block
250+
e.printStackTrace();
251+
} catch (IOException e) {
252+
// TODO Auto-generated catch block
253+
e.printStackTrace();
254+
} catch (JAXBException e) {
255+
// TODO Auto-generated catch block
256+
e.printStackTrace();
257+
}
258+
return elementList;
259+
}
160260
}

0 commit comments

Comments
 (0)