Skip to content
This repository was archived by the owner on Dec 30, 2022. It is now read-only.

Commit b66ef05

Browse files
authored
Merge pull request #18 from Pavel-Teplitsky/master
Restore reverted merges
2 parents bfbf531 + 6c6565f commit b66ef05

File tree

6 files changed

+133
-20
lines changed

6 files changed

+133
-20
lines changed

configuration.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,6 @@ resources:
5353
# Enable/disable documents browse
5454
browse: true
5555
# Enable/disable HTMl rendering mode, false for image mode
56-
htmlMode: true
56+
htmlMode: true
57+
# Enable/disable rewrite for uploaded file if file with the same name already exists
58+
rewrite: true

src/main/java/com/aliensoft/quickview/config/QuickViewConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ public class Resources{
140140
@JsonProperty
141141
private boolean htmlMode;
142142

143+
@Valid
144+
@JsonProperty
145+
private boolean rewrite;
146+
143147
public Boolean getRunAsService() {
144148
return runAsService;
145149
}
@@ -251,6 +255,14 @@ public boolean isHtmlMode() {
251255
public void setHtmlMode(boolean htmlMode) {
252256
this.htmlMode = htmlMode;
253257
}
258+
259+
public boolean isRewrite() {
260+
return rewrite;
261+
}
262+
263+
public void setRewrite(boolean rewrite) {
264+
this.rewrite = rewrite;
265+
}
254266
}
255267

256268
/**

src/main/java/com/aliensoft/quickview/domain/wrapper/ErrorMsgWrapper.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,23 @@
44
* @author Alex Bobkov
55
*/
66
public class ErrorMsgWrapper {
7-
private String error;
7+
private String message;
8+
private Exception exception;
89

9-
public String getError() {
10-
return error;
10+
public String getMessage() {
11+
return message;
1112
}
1213

13-
public void setError(String error) {
14-
this.error = error;
14+
public void setMessage(String message) {
15+
this.message = message;
1516
}
17+
18+
public Exception getException() {
19+
return exception;
20+
}
21+
22+
public void setException(Exception exception) {
23+
this.exception = exception;
24+
}
25+
1626
}

src/main/java/com/aliensoft/quickview/resources/QuickViewResource.java

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,12 @@
1818
import com.groupdocs.viewer.domain.options.DocumentInfoOptions;
1919
import com.groupdocs.viewer.domain.options.FileListOptions;
2020
import com.groupdocs.viewer.domain.options.RotatePageOptions;
21+
import com.groupdocs.viewer.exception.GroupDocsViewerException;
22+
import com.groupdocs.viewer.exception.InvalidPasswordException;
2123
import com.groupdocs.viewer.handler.ViewerHtmlHandler;
2224
import com.groupdocs.viewer.handler.ViewerImageHandler;
2325
import com.groupdocs.viewer.licensing.License;
26+
import com.groupdocs.viewer.localization.ILocalizationHandler;
2427
import io.dropwizard.jetty.ConnectorFactory;
2528
import io.dropwizard.jetty.HttpConnectorFactory;
2629
import io.dropwizard.server.SimpleServerFactory;
@@ -150,7 +153,8 @@ public Object loadFileTree(@Context HttpServletRequest request, @Context HttpSer
150153
}catch (Exception ex){
151154
// set exception message
152155
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
153-
errorMsgWrapper.setError(ex.getMessage());
156+
errorMsgWrapper.setMessage(ex.getMessage());
157+
errorMsgWrapper.setException(ex);
154158
return objectToJson(errorMsgWrapper);
155159
}
156160
}
@@ -166,31 +170,50 @@ public Object loadFileTree(@Context HttpServletRequest request, @Context HttpSer
166170
public Object loadDocumentDescription(@Context HttpServletRequest request, @Context HttpServletResponse response){
167171
// set response content type
168172
setResponseContentType(response, MediaType.APPLICATION_JSON);
173+
String password = "";
169174
try {
170175
// get request body
171176
String requestBody = getRequestBody(request);
172177
// get/set parameters
173178
String documentGuid = getJsonString(requestBody, "guid");
174179
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
180+
password = getJsonString(requestBody, "password");
175181
// check if documentGuid contains path or only file name
176182
if(!Paths.get(documentGuid).isAbsolute()){
177183
documentGuid = quickViewConfig.getApplication().getFilesDirectory() + "/" + documentGuid;
178184
}
179185
DocumentInfoContainer documentInfoContainer = new DocumentInfoContainer();
180186
// get document info options
181187
DocumentInfoOptions documentInfoOptions = new DocumentInfoOptions(documentGuid);
188+
// set password for protected document
189+
if(!password.isEmpty() && password != null) {
190+
documentInfoOptions.setPassword(password);
191+
}
182192
// get document info container
183-
if(htmlMode) {
193+
if (htmlMode) {
184194
documentInfoContainer = viewerHtmlHandler.getDocumentInfo(documentGuid, documentInfoOptions);
185195
} else {
186196
documentInfoContainer = viewerImageHandler.getDocumentInfo(documentGuid, documentInfoOptions);
187197
}
188198
// return document description
189199
return objectToJson(documentInfoContainer.getPages());
200+
}catch (GroupDocsViewerException ex){
201+
// Set exception message
202+
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
203+
if(GroupDocsViewerException.class.isAssignableFrom(InvalidPasswordException.class) && password.isEmpty()) {
204+
errorMsgWrapper.setMessage("Password Required");
205+
}else if(GroupDocsViewerException.class.isAssignableFrom(InvalidPasswordException.class) && !password.isEmpty()){
206+
errorMsgWrapper.setMessage("Incorrect password");
207+
}else{
208+
errorMsgWrapper.setMessage(ex.getMessage());
209+
}
210+
errorMsgWrapper.setException(ex);
211+
return objectToJson(errorMsgWrapper);
190212
}catch (Exception ex){
191213
// set exception message
192214
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
193-
errorMsgWrapper.setError(ex.getMessage());
215+
errorMsgWrapper.setMessage(ex.getMessage());
216+
errorMsgWrapper.setException(ex);
194217
return objectToJson(errorMsgWrapper);
195218
}
196219
}
@@ -213,6 +236,7 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt
213236
String documentGuid = getJsonString(requestBody, "guid");
214237
int pageNumber = getJsonInteger(requestBody, "page");
215238
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
239+
String password = getJsonString(requestBody, "password");
216240
LoadedPageWrapper loadedPage = new LoadedPageWrapper();
217241
String angle = "0";
218242
// set options
@@ -221,6 +245,10 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt
221245
htmlOptions.setPageNumber(pageNumber);
222246
htmlOptions.setCountPagesToRender(1);
223247
htmlOptions.setResourcesEmbedded(true);
248+
// set password for protected document
249+
if(!password.isEmpty() && password != null) {
250+
htmlOptions.setPassword(password);
251+
}
224252
// get page HTML
225253
loadedPage.setPageHtml(viewerHtmlHandler.getPages(documentGuid, htmlOptions).get(0).getHtmlContent());
226254
// get page rotation angle
@@ -229,6 +257,10 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt
229257
ImageOptions imageOptions = new ImageOptions();
230258
imageOptions.setPageNumber(pageNumber);
231259
imageOptions.setCountPagesToRender(1);
260+
// set password for protected document
261+
if(!password.isEmpty()) {
262+
imageOptions.setPassword(password);
263+
}
232264
// get page image
233265
byte[] bytes = IOUtils.toByteArray(viewerImageHandler.getPages(documentGuid, imageOptions).get(0).getStream());
234266
// encode ByteArray into String
@@ -245,7 +277,8 @@ public Object loadDocumentPage(@Context HttpServletRequest request, @Context Htt
245277
setResponseContentType(response, MediaType.APPLICATION_JSON);
246278
// set exception message
247279
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
248-
errorMsgWrapper.setError(ex.getMessage());
280+
errorMsgWrapper.setMessage(ex.getMessage());
281+
errorMsgWrapper.setException(ex);
249282
return objectToJson(errorMsgWrapper);
250283
}
251284
}
@@ -269,6 +302,7 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
269302
int angle = Integer.parseInt(getJsonString(requestBody, "angle"));
270303
JSONArray pages = new JSONObject(requestBody).getJSONArray("pages");
271304
boolean htmlMode = getJsonBoolean(requestBody, "htmlMode");
305+
String password = getJsonString(requestBody, "password");
272306
// a list of the rotated pages info
273307
ArrayList<RotatedPageWrapper> rotatedPages = new ArrayList<RotatedPageWrapper>();
274308
// rotate pages
@@ -279,6 +313,10 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
279313
RotatePageOptions rotateOptions = new RotatePageOptions(pageNumber, angle);
280314
// perform page rotation
281315
String resultAngle = "0";
316+
// set password for protected document
317+
if(!password.isEmpty() && password != null) {
318+
rotateOptions.setPassword(password);
319+
}
282320
if(htmlMode) {
283321
viewerHtmlHandler.rotatePage(documentGuid, rotateOptions);
284322
resultAngle = String.valueOf(viewerHtmlHandler.getDocumentInfo(documentGuid).getPages().get(pageNumber - 1).getAngle());
@@ -299,7 +337,8 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
299337
setResponseContentType(response, MediaType.APPLICATION_JSON);
300338
// set exception message
301339
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
302-
errorMsgWrapper.setError(ex.getMessage());
340+
errorMsgWrapper.setMessage(ex.getMessage());
341+
errorMsgWrapper.setException(ex);
303342
return objectToJson(errorMsgWrapper);
304343
}
305344
}
@@ -311,7 +350,7 @@ public Object rotateDocumentPages(@Context HttpServletRequest request, @Context
311350
*/
312351
@GET
313352
@Path(value = "/downloadDocument")
314-
public void downloadDocument(@Context HttpServletRequest request, @Context HttpServletResponse response) throws ServletException, IOException {
353+
public Object downloadDocument(@Context HttpServletRequest request, @Context HttpServletResponse response) throws ServletException, IOException {
315354
int bytesRead = 0;
316355
int count = 0;
317356
byte[] buff = new byte[16 * 1024];
@@ -329,9 +368,18 @@ public void downloadDocument(@Context HttpServletRequest request, @Context HttpS
329368
// download the document
330369
inputStream = new BufferedInputStream(new FileInputStream(documentGuid));
331370
outStream = new BufferedOutputStream(out);
332-
while((count = inputStream.read(buff)) != -1) {
371+
while ((count = inputStream.read(buff)) != -1) {
333372
outStream.write(buff, 0, count);
334373
}
374+
return outStream;
375+
} catch (Exception ex){
376+
// set response content type
377+
setResponseContentType(response, MediaType.APPLICATION_JSON);
378+
// set exception message
379+
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
380+
errorMsgWrapper.setMessage(ex.getMessage());
381+
errorMsgWrapper.setException(ex);
382+
return objectToJson(errorMsgWrapper);
335383
} finally {
336384
// close streams
337385
if (inputStream != null)
@@ -360,6 +408,8 @@ public Object uploadDocument(@Context HttpServletRequest request, @Context HttpS
360408
Part filePart = request.getPart("file");
361409
// get document URL
362410
String documentUrl = request.getParameter("url");
411+
// get rewrite mode
412+
boolean rewrite = Boolean.parseBoolean(request.getParameter("rewrite"));
363413
InputStream uploadedInputStream = null;
364414
String fileName = "";
365415
if(documentUrl.isEmpty() || documentUrl == null) {
@@ -376,7 +426,19 @@ public Object uploadDocument(@Context HttpServletRequest request, @Context HttpS
376426
String documentStoragePath = quickViewConfig.getApplication().getFilesDirectory();
377427
// save the file
378428
File file = new File(documentStoragePath + "/" + fileName);
379-
Files.copy(uploadedInputStream, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
429+
// check rewrite mode
430+
if(rewrite) {
431+
// save file with rewrite if exists
432+
Files.copy(uploadedInputStream, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
433+
} else {
434+
if (file.exists())
435+
{
436+
// get file with new name
437+
file = getFreeFileName(documentStoragePath, fileName);
438+
}
439+
// save file with out rewriting
440+
Files.copy(uploadedInputStream, file.toPath());
441+
}
380442
UploadedDocumentWrapper uploadedDocument = new UploadedDocumentWrapper();
381443
uploadedDocument.setGuid(documentStoragePath + "/" + fileName);
382444
return objectToJson(uploadedDocument);
@@ -385,7 +447,8 @@ public Object uploadDocument(@Context HttpServletRequest request, @Context HttpS
385447
setResponseContentType(response, MediaType.APPLICATION_JSON);
386448
// set exception message
387449
ErrorMsgWrapper errorMsgWrapper = new ErrorMsgWrapper();
388-
errorMsgWrapper.setError(ex.getMessage());
450+
errorMsgWrapper.setMessage(ex.getMessage());
451+
errorMsgWrapper.setException(ex);
389452
return objectToJson(errorMsgWrapper);
390453
}
391454
}

src/main/java/com/aliensoft/quickview/resources/QuickViewResourcesBase.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import com.fasterxml.jackson.databind.ObjectWriter;
6+
import com.google.gson.Gson;
7+
import org.apache.commons.io.FilenameUtils;
68
import org.json.JSONException;
79
import org.json.JSONObject;
810

@@ -12,6 +14,7 @@
1214
import java.io.IOException;
1315
import java.io.InputStream;
1416
import java.io.InputStreamReader;
17+
import java.io.File;
1518
import java.util.logging.Level;
1619
import java.util.logging.Logger;
1720

@@ -33,10 +36,9 @@ protected void setResponseContentType(HttpServletResponse response, String conte
3336

3437
protected String objectToJson(Object object){
3538
try {
36-
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
37-
String auxJson = ow.writeValueAsString(object);
39+
String auxJson = new Gson().toJson(object);
3840
return auxJson;
39-
} catch (JsonProcessingException ex) {
41+
} catch (Exception ex) {
4042
Logger.getLogger(QuickViewResourcesBase.class.getName()).log(Level.SEVERE, null, ex);
4143
return null;
4244
}
@@ -113,4 +115,25 @@ protected boolean getJsonBoolean(String json, String key){
113115
return value;
114116
}
115117

118+
protected File getFreeFileName(String directory, String fileName){
119+
File file = null;
120+
try {
121+
File folder = new File(directory);
122+
File[] listOfFiles = folder.listFiles();
123+
for (int i = 0; i < listOfFiles.length; i++) {
124+
int number = i + 1;
125+
String newFileName = FilenameUtils.removeExtension(fileName) + "-Copy(" + number + ")." + FilenameUtils.getExtension(fileName);
126+
file = new File(directory + "/" + newFileName);
127+
if(file.exists()) {
128+
continue;
129+
} else {
130+
break;
131+
}
132+
}
133+
} catch (Exception e) {
134+
e.printStackTrace();
135+
}
136+
return file;
137+
}
138+
116139
}

src/main/resources/com/aliensoft/quickview/views/quickview.ftl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
<link type="text/css" rel="stylesheet" href="assets/css/quickview.css"/>
88
<link type="text/css" rel="stylesheet" href="assets/css/quickview.mobile.css"/>
99
<link type="text/css" rel="stylesheet" href="assets/css/quickview-dark.css"/>
10-
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
10+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.2/css/swiper.min.css">
11+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
12+
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.2/js/swiper.min.js"></script>
1113
<script type="text/javascript" src="assets/js/quickview.js"></script>
1214
</head>
1315
<body>
@@ -26,7 +28,8 @@
2628
print: ${config.resources.print?c},
2729
defaultDocument: '${config.resources.defaultDocument}',
2830
browse: ${config.resources.browse?c},
29-
htmlMode: ${config.resources.htmlMode?c}
31+
htmlMode: ${config.resources.htmlMode?c},
32+
rewrite: ${config.resources.rewrite?c}
3033
});
3134
</script>
3235
</body>

0 commit comments

Comments
 (0)