Skip to content

Commit d463353

Browse files
committed
2 parents 5c6bb41 + 1fb9b54 commit d463353

File tree

6 files changed

+107
-7
lines changed

6 files changed

+107
-7
lines changed

logicaldoc-webservice/src/main/java/com/logicaldoc/webservice/rest/DocumentService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import javax.ws.rs.QueryParam;
1818
import javax.ws.rs.core.MediaType;
1919
import javax.ws.rs.core.PathSegment;
20+
import javax.ws.rs.core.Response;
2021

2122
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
2223
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
@@ -542,7 +543,7 @@ public void createThumbnail(@QueryParam("docId")
542543
@GET
543544
@Path("/thumbnail/{type}/{docpath:.*}")
544545
@Produces("image/jpeg")
545-
public DataHandler getThumbnail(@PathParam("type")
546+
public Response getThumbnail(@PathParam("type")
546547
String type, @PathParam("docpath")
547548
String docPath, @PathParam("docpath")
548549
List<PathSegment> docPathList)

logicaldoc-webservice/src/main/java/com/logicaldoc/webservice/rest/endpoint/RestDocumentService.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package com.logicaldoc.webservice.rest.endpoint;
22

33
import java.io.IOException;
4+
import java.time.ZoneId;
5+
import java.time.ZonedDateTime;
6+
import java.time.format.DateTimeFormatter;
7+
import java.util.Calendar;
8+
import java.util.Date;
49
import java.util.List;
510

611
import javax.activation.DataHandler;
@@ -18,6 +23,7 @@
1823
import javax.ws.rs.WebApplicationException;
1924
import javax.ws.rs.core.MediaType;
2025
import javax.ws.rs.core.PathSegment;
26+
import javax.ws.rs.core.Response;
2127

2228
import org.apache.cxf.jaxrs.ext.multipart.Attachment;
2329
import org.apache.cxf.jaxrs.ext.multipart.Multipart;
@@ -932,7 +938,7 @@ public boolean unprotect(@FormParam("docId")
932938
@Produces("image/png")
933939
@ApiResponses(value = {
934940
@ApiResponse(description = "default response", content = @Content(mediaType = "image/png", schema = @Schema(type = "string", format = "binary"))) })
935-
public DataHandler getThumbnail(@PathParam("type")
941+
public Response getThumbnail(@PathParam("type")
936942
String type, @PathParam("docpath")
937943
String docPath, @PathParam("docpath")
938944
List<PathSegment> docPathList) throws AuthenticationException, WebserviceException, PersistenceException,
@@ -948,12 +954,27 @@ public DataHandler getThumbnail(@PathParam("type")
948954
if (!type.toLowerCase().endsWith(".png"))
949955
type += ".png";
950956

957+
DataHandler dh = null;
951958
try {
952-
return super.getResource(sid, doc.getId(), doc.getFileVersion(), type);
959+
dh = super.getResource(sid, doc.getId(), doc.getFileVersion(), type);
953960
} catch (Exception e) {
954961
super.createThumbnail(sid, doc.getId(), doc.getFileVersion(), type);
955-
return super.getResource(sid, doc.getId(), doc.getFileVersion(), type);
962+
dh = super.getResource(sid, doc.getId(), doc.getFileVersion(), type);
956963
}
964+
965+
Response resp = Response.ok(dh.getInputStream()).build();
966+
resp.getHeaders().add("Cache-Control", "max-age=86400, must-revalidate");
967+
resp.getHeaders().add("Pragma", "no-cache");
968+
resp.getHeaders().add("Content-Type", dh.getContentType());
969+
970+
Calendar cal = Calendar.getInstance();
971+
cal.add(Calendar.HOUR, 24);
972+
Date expdate = cal.getTime();
973+
ZonedDateTime date = ZonedDateTime.ofInstant(expdate.toInstant(), ZoneId.systemDefault());
974+
975+
resp.getHeaders().add("Expires", date.format(DateTimeFormatter.RFC_1123_DATE_TIME));
976+
977+
return resp;
957978
}
958979

959980
@Override
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.logicaldoc.webservice.rest.endpoint;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
5+
6+
import java.io.FileInputStream;
7+
import java.io.IOException;
8+
import java.sql.SQLException;
9+
10+
import javax.activation.DataHandler;
11+
import javax.ws.rs.core.MultivaluedMap;
12+
import javax.ws.rs.core.Response;
13+
14+
import org.apache.cxf.jaxrs.ext.multipart.InputStreamDataSource;
15+
import org.junit.Test;
16+
17+
import com.logicaldoc.core.PersistenceException;
18+
import com.logicaldoc.core.security.authentication.AuthenticationException;
19+
import com.logicaldoc.core.security.authorization.PermissionException;
20+
import com.logicaldoc.util.plugin.PluginException;
21+
import com.logicaldoc.webservice.AbstractWebserviceTestCase;
22+
import com.logicaldoc.webservice.WebserviceException;
23+
24+
/**
25+
* Test case for <code>SoapDocumentService</code>
26+
*
27+
* @author Alessandro Gasparini
28+
* @since 9.1.1
29+
*/
30+
public class RestDocumentServiceTest extends AbstractWebserviceTestCase {
31+
32+
// Instance under test
33+
private RestDocumentService testSubject;
34+
35+
@Override
36+
public void setUp() throws IOException, SQLException, PluginException {
37+
super.setUp();
38+
39+
// Make sure that this is a DocumentServiceImpl instance
40+
testSubject = new RestDocumentService();
41+
testSubject.setValidateSession(false);
42+
}
43+
44+
@Test
45+
public void testGetThumbnail() throws AuthenticationException, PersistenceException, PermissionException,
46+
WebserviceException, IOException, InterruptedException {
47+
48+
// First upload the resource
49+
FileInputStream fis = new FileInputStream("src/test/resources/fortnightemail-(1)-(1).png");
50+
DataHandler dh = new DataHandler(new InputStreamDataSource(fis, "image/png"));
51+
testSubject.uploadResource("", 1, "1.0", "mobile.png", dh);
52+
53+
// Then check that the server return the resource
54+
Response res = testSubject.getThumbnail("mobile", "menu.adminxxx/text/menu.admin103/pippo", null);
55+
assertNotNull(res);
56+
57+
MultivaluedMap<String, Object> sss = res.getHeaders();
58+
for (String element : sss.keySet()) {
59+
System.out.println("element: " + element + ", value: " + sss.get(element));
60+
}
61+
62+
assertEquals("image/png", res.getHeaderString("Content-Type"));
63+
assertNotNull(res.getHeaderString("Expires"));
64+
}
65+
66+
}

logicaldoc-webservice/src/test/java/com/logicaldoc/webservice/soap/endpoint/SoapFolderServiceTest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void testDelete() throws Exception {
105105
public void testRename() throws Exception {
106106
Folder folder = folderDao.findById(103);
107107
assertNotNull(folder);
108-
assertEquals("menu.admin", folder.getName());
108+
assertEquals("menu.admin103", folder.getName());
109109
folderDao.initialize(folder);
110110

111111
soapFolderService.rename("", 103, "paperino");
@@ -125,7 +125,7 @@ public void testGetFolder() throws Exception {
125125
WSFolder wsFolder = soapFolderService.getFolder("", 103);
126126

127127
assertEquals(103, wsFolder.getId());
128-
assertEquals("menu.admin", wsFolder.getName());
128+
assertEquals("menu.admin103", wsFolder.getName());
129129
assertEquals(101, wsFolder.getParentId());
130130
assertEquals("description", wsFolder.getDescription());
131131

@@ -196,4 +196,16 @@ public void testListWorkspaces() throws Exception {
196196
assertEquals(1, folders.size());
197197
assertEquals("Default", folders.get(0).getName());
198198
}
199+
200+
@Test
201+
public void testGetPath() throws Exception {
202+
List<WSFolder> sss = soapFolderService.getPath("", 103);
203+
for (WSFolder wsFolder : sss) {
204+
System.out.println(wsFolder.getId());
205+
System.out.println(wsFolder.getName());
206+
}
207+
assertNotNull(sss);
208+
assertEquals(sss.size(), 4);
209+
}
210+
199211
}

logicaldoc-webservice/src/test/resources/data.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ insert into ld_folder
9393
values (102,'2008-10-22 00:00:00','2008-10-22 00:00:00',0,'menu.admin',101,5,0,1,1,3,0);
9494
insert into ld_folder
9595
(ld_id,ld_lastmodified, ld_creation,ld_deleted,ld_name,ld_parentid,ld_type,ld_description,ld_templocked,ld_tenantid,ld_recordversion,ld_position,ld_hidden)
96-
values (103,'2008-10-22 00:00:00','2008-10-22 00:00:00',0,'menu.admin',101,3,'description',0,1,1,5,0);
96+
values (103,'2008-10-22 00:00:00','2008-10-22 00:00:00',0,'menu.admin103',101,3,'description',0,1,1,5,0);
9797

9898
insert into ld_folder
9999
(ld_id,ld_lastmodified, ld_creation,ld_deleted,ld_name,ld_parentid,ld_type,ld_templocked,ld_tenantid,ld_recordversion,ld_position,ld_hidden)
62.9 KB
Loading

0 commit comments

Comments
 (0)