Commit 56757fa1 authored by Matija Obreza's avatar Matija Obreza
Browse files

Path must not end with /

parent e5941740
...@@ -65,7 +65,7 @@ public class ClamAVScanner implements VirusScanner, InitializingBean { ...@@ -65,7 +65,7 @@ public class ClamAVScanner implements VirusScanner, InitializingBean {
LOG.info("Connecting to clamd at {}:{}", clamAvHost, clamAvPort); LOG.info("Connecting to clamd at {}:{}", clamAvHost, clamAvPort);
ClamavClient c = new ClamavClient(clamAvHost, clamAvPort, Platform.UNIX); ClamavClient c = new ClamavClient(clamAvHost, clamAvPort, Platform.UNIX);
c.ping(); c.ping();
LOG.info("Connected to cland at {}:{} version={}", clamAvHost, clamAvPort, c.version()); LOG.info("Connected to clamd at {}:{} version={}", clamAvHost, clamAvPort, c.version());
synchronized (this) { synchronized (this) {
this.client = c; this.client = c;
} }
......
/* /*
* Copyright 2016 Global Crop Diversity Trust, www.croptrust.org * Copyright 2017 Global Crop Diversity Trust, www.croptrust.org
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -17,11 +17,15 @@ ...@@ -17,11 +17,15 @@
package org.genesys.filerepository.service.impl; package org.genesys.filerepository.service.impl;
import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.InvalidRepositoryPathException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* Simple path validator. * Simple path validator.
*/ */
public class PathValidator { public class PathValidator {
private final static Logger LOG = LoggerFactory.getLogger(PathValidator.class);
/** /**
* Checks if path is valid. * Checks if path is valid.
* *
...@@ -29,7 +33,7 @@ public class PathValidator { ...@@ -29,7 +33,7 @@ public class PathValidator {
* @return true, if path is valid * @return true, if path is valid
*/ */
protected static boolean isValidPath(final String path) { protected static boolean isValidPath(final String path) {
return path != null && path.startsWith("/") && path.endsWith("/") && !path.contains("//") && !path.contains(" /") && !path.contains("/ ") && !path.contains("?") && !path.contains("&") return path != null && path.startsWith("/") && (path.equals("/") || ! path.endsWith("/")) && !path.contains("//") && !path.contains(" /") && !path.contains("/ ") && !path.contains("?") && !path.contains("&")
&& !path.contains("\\"); && !path.contains("\\");
} }
...@@ -41,6 +45,7 @@ public class PathValidator { ...@@ -41,6 +45,7 @@ public class PathValidator {
*/ */
public static void checkValidPath(final String path) throws InvalidRepositoryPathException { public static void checkValidPath(final String path) throws InvalidRepositoryPathException {
if (!isValidPath(path)) { if (!isValidPath(path)) {
LOG.warn("Invalid repository path {}", path);
throw new InvalidRepositoryPathException(path); throw new InvalidRepositoryPathException(path);
} }
} }
......
...@@ -50,7 +50,7 @@ public class FileRepositoryAddTest { ...@@ -50,7 +50,7 @@ public class FileRepositoryAddTest {
private static final byte[] EMPTY_BYTES = new byte[0]; private static final byte[] EMPTY_BYTES = new byte[0];
/** The Constant PATH. */ /** The Constant PATH. */
private final static String PATH = "/temp/" + System.currentTimeMillis() + "/"; private final static String PATH = "/temp/" + System.currentTimeMillis();
/** The Constant DEFAULT_EXT. */ /** The Constant DEFAULT_EXT. */
private static final String DEFAULT_EXT = ".txt"; private static final String DEFAULT_EXT = ".txt";
...@@ -90,7 +90,7 @@ public class FileRepositoryAddTest { ...@@ -90,7 +90,7 @@ public class FileRepositoryAddTest {
*/ */
@Test @Test
public void addFileWithMetadata() throws InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException { public void addFileWithMetadata() throws InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException {
final String path = "/test1/test2/"; final String path = "/test1/test2";
final String contentType = "text/plain;charset=UTF-8"; final String contentType = "text/plain;charset=UTF-8";
final String extension = ".txt"; final String extension = ".txt";
final String originalFilename = "requirements" + extension; final String originalFilename = "requirements" + extension;
...@@ -144,7 +144,7 @@ public class FileRepositoryAddTest { ...@@ -144,7 +144,7 @@ public class FileRepositoryAddTest {
*/ */
@Test(expected = InvalidRepositoryFileDataException.class) @Test(expected = InvalidRepositoryFileDataException.class)
public void invalidMissingOriginalFilename() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException { public void invalidMissingOriginalFilename() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException {
fileRepoService.addFile("/valid/path/", null, "contentType", FileRepositoryAddTest.EMPTY_BYTES, null); fileRepoService.addFile("/valid/path", null, "contentType", FileRepositoryAddTest.EMPTY_BYTES, null);
} }
/** /**
...@@ -156,7 +156,7 @@ public class FileRepositoryAddTest { ...@@ -156,7 +156,7 @@ public class FileRepositoryAddTest {
*/ */
@Test @Test
public void defaultContentType() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException { public void defaultContentType() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException {
RepositoryFile f = fileRepoService.addFile("/valid/path/", "orignalFilename.txt", null, FileRepositoryAddTest.EMPTY_BYTES, null); RepositoryFile f = fileRepoService.addFile("/valid/path", "orignalFilename.txt", null, FileRepositoryAddTest.EMPTY_BYTES, null);
assertThat(f.getContentType(), is("application/octet-stream")); assertThat(f.getContentType(), is("application/octet-stream"));
} }
...@@ -169,7 +169,7 @@ public class FileRepositoryAddTest { ...@@ -169,7 +169,7 @@ public class FileRepositoryAddTest {
*/ */
@Test(expected = InvalidRepositoryFileDataException.class) @Test(expected = InvalidRepositoryFileDataException.class)
public void invalidMissingBytes() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException { public void invalidMissingBytes() throws InvalidRepositoryFileDataException, InvalidRepositoryPathException, IOException {
fileRepoService.addFile("/valid/path/", "orignalFilename.txt", "contentType", null, null); fileRepoService.addFile("/valid/path", "orignalFilename.txt", "contentType", null, null);
} }
/** /**
...@@ -233,7 +233,7 @@ public class FileRepositoryAddTest { ...@@ -233,7 +233,7 @@ public class FileRepositoryAddTest {
*/ */
@Test(expected = InvalidRepositoryPathException.class) @Test(expected = InvalidRepositoryPathException.class)
public void invalidAddMissingEndSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException { public void invalidAddMissingEndSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException {
fileRepoService.addFile("/invalidpath/here", "originalFilename.txt", "contentType", FileRepositoryAddTest.EMPTY_BYTES, null); fileRepoService.addFile("/invalidpath/here/", "originalFilename.txt", "contentType", FileRepositoryAddTest.EMPTY_BYTES, null);
} }
/** /**
...@@ -247,7 +247,7 @@ public class FileRepositoryAddTest { ...@@ -247,7 +247,7 @@ public class FileRepositoryAddTest {
@Test @Test
public void validSpacesInPath() throws NoSuchRepositoryFileException, InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException { public void validSpacesInPath() throws NoSuchRepositoryFileException, InvalidRepositoryPathException, InvalidRepositoryFileDataException, IOException {
for (final String validPath : new String[] { "/valid/he re/", "/va lid/her e/", "/va lid/e/", "/va lid/1 e/" }) { for (final String validPath : new String[] { "/valid/he re", "/va lid/her e", "/va lid/e", "/va lid/1 e" }) {
try { try {
final RepositoryFile repoFile = fileRepoService.addFile(validPath, "originalFilename.txt", "contentType", FileRepositoryAddTest.EMPTY_BYTES, null); final RepositoryFile repoFile = fileRepoService.addFile(validPath, "originalFilename.txt", "contentType", FileRepositoryAddTest.EMPTY_BYTES, null);
fileRepoService.removeFile(repoFile); fileRepoService.removeFile(repoFile);
......
...@@ -50,7 +50,7 @@ public class FileRepositoryDirectoryTest { ...@@ -50,7 +50,7 @@ public class FileRepositoryDirectoryTest {
private final long timestamp = System.currentTimeMillis(); private final long timestamp = System.currentTimeMillis();
/** The Constant PATH. */ /** The Constant PATH. */
private final String PATH = "/temp/" + timestamp + "/"; private final String PATH = "/temp/" + timestamp;
/** The file repo service. */ /** The file repo service. */
@Autowired @Autowired
...@@ -71,43 +71,43 @@ public class FileRepositoryDirectoryTest { ...@@ -71,43 +71,43 @@ public class FileRepositoryDirectoryTest {
final String originalFilename = "folderfile" + extension; final String originalFilename = "folderfile" + extension;
final List<RepositoryFile> repoFiles = new ArrayList<RepositoryFile>(20); final List<RepositoryFile> repoFiles = new ArrayList<RepositoryFile>(20);
repoFiles.add(fileRepoService.addFile(PATH + "aa/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/", 3 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa", 3 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/", 4 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa", 4 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/", 5 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa", 5 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa/dd", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa/dd", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee/gg/", originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "aa/dd/ee/gg", originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/", 3 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb", 3 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/", 4 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb", 4 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/", 5 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb", 5 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb/cc", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb/cc", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee/", 1 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee", 1 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee/", 2 + originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee", 2 + originalFilename, contentType, SOME_BYTES, null));
repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee/ff/", originalFilename, contentType, SOME_BYTES, null)); repoFiles.add(fileRepoService.addFile(PATH + "bb/cc/ee/ff", originalFilename, contentType, SOME_BYTES, null));
List<String> paths = fileRepoService.listPaths(PATH + "aa/", new PageRequest(0, 10)); List<String> paths = fileRepoService.listPaths(PATH + "aa", new PageRequest(0, 10));
assertThat("Paths definitely exist", paths, notNullValue()); assertThat("Paths definitely exist", paths, notNullValue());
// paths.stream().forEach(path -> { // paths.stream().forEach(path -> {
// System.err.println("Distinct path=" + path); // System.err.println("Distinct path=" + path);
// }); // });
assertThat("Paths definitely exist", paths, hasSize(3)); assertThat("Paths definitely exist", paths, hasSize(3));
assertThat("Paths not in correct order", paths, contains(PATH + "aa/dd/", PATH + "aa/dd/ee/", PATH + "aa/dd/ee/gg/")); assertThat("Paths not in correct order", paths, contains(PATH + "aa/dd", PATH + "aa/dd/ee", PATH + "aa/dd/ee/gg"));
paths = fileRepoService.listPaths(PATH + "bb/", new PageRequest(0, 10)); paths = fileRepoService.listPaths(PATH + "bb", new PageRequest(0, 10));
assertThat("Paths definitely exist", paths, notNullValue()); assertThat("Paths definitely exist", paths, notNullValue());
// paths.stream().forEach(path -> { // paths.stream().forEach(path -> {
// System.err.println("Distinct path=" + path); // System.err.println("Distinct path=" + path);
// }); // });
assertThat("Paths definitely exist", paths, hasSize(3)); assertThat("Paths definitely exist", paths, hasSize(3));
assertThat("Paths not in correct order", paths, contains(PATH + "bb/cc/", PATH + "bb/cc/ee/", PATH + "bb/cc/ee/ff/")); assertThat("Paths not in correct order", paths, contains(PATH + "bb/cc", PATH + "bb/cc/ee", PATH + "bb/cc/ee/ff"));
for (final RepositoryFile repoFile : repoFiles) { for (final RepositoryFile repoFile : repoFiles) {
fileRepoService.removeFile(repoFile); fileRepoService.removeFile(repoFile);
......
...@@ -42,7 +42,7 @@ public class FileRepositoryExtensionTest { ...@@ -42,7 +42,7 @@ public class FileRepositoryExtensionTest {
private final String initialContentType = "text/plain"; private final String initialContentType = "text/plain";
/** The initial path. */ /** The initial path. */
private final String initialPath = "/initial/" + System.currentTimeMillis() + "/"; private final String initialPath = "/initial/" + System.currentTimeMillis();
/** The initial extension. */ /** The initial extension. */
private final String initialExtension = ".txt"; private final String initialExtension = ".txt";
......
...@@ -49,7 +49,7 @@ public class FileRepositoryUpdateTest { ...@@ -49,7 +49,7 @@ public class FileRepositoryUpdateTest {
private final String initialContentType = "text/plain"; private final String initialContentType = "text/plain";
/** The initial path. */ /** The initial path. */
private final String initialPath = "/initial/" + System.currentTimeMillis() + "/"; private final String initialPath = "/initial/" + System.currentTimeMillis();
/** The initial extension. */ /** The initial extension. */
private final String initialExtension = ".txt"; private final String initialExtension = ".txt";
...@@ -203,7 +203,7 @@ public class FileRepositoryUpdateTest { ...@@ -203,7 +203,7 @@ public class FileRepositoryUpdateTest {
FileRepositoryTestUtil.assertMetadataIsBlank(fileData); FileRepositoryTestUtil.assertMetadataIsBlank(fileData);
// Move // Move
final String newPath = "/new/" + System.currentTimeMillis() + "/"; final String newPath = "/new/" + System.currentTimeMillis();
fileData = fileRepoService.moveFile(fileData, newPath); fileData = fileRepoService.moveFile(fileData, newPath);
FileRepositoryTestUtil.checkFile(fileData, newPath, initialOriginalFilename, initialExtension, initialContentType); FileRepositoryTestUtil.checkFile(fileData, newPath, initialOriginalFilename, initialExtension, initialContentType);
...@@ -245,7 +245,7 @@ public class FileRepositoryUpdateTest { ...@@ -245,7 +245,7 @@ public class FileRepositoryUpdateTest {
@Test(expected = InvalidRepositoryPathException.class) @Test(expected = InvalidRepositoryPathException.class)
public void invalidMoveDoubleSlashPath() throws NoSuchRepositoryFileException, InvalidRepositoryPathException { public void invalidMoveDoubleSlashPath() throws NoSuchRepositoryFileException, InvalidRepositoryPathException {
RepositoryFile fileData = fileRepoService.getFile(fileUuid); RepositoryFile fileData = fileRepoService.getFile(fileUuid);
fileData = fileRepoService.moveFile(fileData, "/fo//bar/"); fileData = fileRepoService.moveFile(fileData, "/fo//bar");
} }
/** /**
...@@ -257,11 +257,11 @@ public class FileRepositoryUpdateTest { ...@@ -257,11 +257,11 @@ public class FileRepositoryUpdateTest {
@Test(expected = InvalidRepositoryPathException.class) @Test(expected = InvalidRepositoryPathException.class)
public void invalidMoveMissingStartSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException { public void invalidMoveMissingStartSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException {
RepositoryFile fileData = fileRepoService.getFile(fileUuid); RepositoryFile fileData = fileRepoService.getFile(fileUuid);
fileData = fileRepoService.moveFile(fileData, "validpath/here/"); fileData = fileRepoService.moveFile(fileData, "validpath/here");
} }
/** /**
* Path must end with / test. * Path must not end with / test.
* *
* @throws NoSuchRepositoryFileException the no such repository file exception * @throws NoSuchRepositoryFileException the no such repository file exception
* @throws InvalidRepositoryPathException the invalid repository path exception * @throws InvalidRepositoryPathException the invalid repository path exception
...@@ -269,7 +269,7 @@ public class FileRepositoryUpdateTest { ...@@ -269,7 +269,7 @@ public class FileRepositoryUpdateTest {
@Test(expected = InvalidRepositoryPathException.class) @Test(expected = InvalidRepositoryPathException.class)
public void invalidMoveMissingEndSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException { public void invalidMoveMissingEndSlash() throws NoSuchRepositoryFileException, InvalidRepositoryPathException {
RepositoryFile fileData = fileRepoService.getFile(fileUuid); RepositoryFile fileData = fileRepoService.getFile(fileUuid);
fileData = fileRepoService.moveFile(fileData, "/validpath/here"); fileData = fileRepoService.moveFile(fileData, "/validpath/here/");
} }
} }
...@@ -59,7 +59,7 @@ public class ImageGalleryTest { ...@@ -59,7 +59,7 @@ public class ImageGalleryTest {
private final long timestamp = System.currentTimeMillis(); private final long timestamp = System.currentTimeMillis();
/** The initial path. */ /** The initial path. */
private final String initialPath = "/gallery/" + timestamp + "/"; private final String initialPath = "/gallery/" + timestamp;
/** The image gallery service. */ /** The image gallery service. */
@Autowired @Autowired
......
...@@ -60,7 +60,7 @@ public class ImageGalleryThumbnailsTest { ...@@ -60,7 +60,7 @@ public class ImageGalleryThumbnailsTest {
private final long timestamp = System.currentTimeMillis(); private final long timestamp = System.currentTimeMillis();
/** The initial path. */ /** The initial path. */
private final String initialPath = "/gallery/" + timestamp + "/"; private final String initialPath = "/gallery/" + timestamp;
/** The image gallery service. */ /** The image gallery service. */
@Autowired @Autowired
......
...@@ -32,7 +32,27 @@ public class PathValidatorTest { ...@@ -32,7 +32,27 @@ public class PathValidatorTest {
*/ */
@Test @Test
public void testValidPaths() throws InvalidRepositoryPathException { public void testValidPaths() throws InvalidRepositoryPathException {
PathValidator.checkValidPath("/ding/"); PathValidator.checkValidPath("/ding");
}
/**
* / is okay, should not throw exception
*
* @throws InvalidRepositoryPathException
*/
@Test
public void testRoot() throws InvalidRepositoryPathException {
PathValidator.checkValidPath("/");
}
/**
* blank is not okay
*
* @throws InvalidRepositoryPathException
*/
@Test(expected = InvalidRepositoryPathException.class)
public void testBlank() throws InvalidRepositoryPathException {
PathValidator.checkValidPath("");
} }
@Test(expected = InvalidRepositoryPathException.class) @Test(expected = InvalidRepositoryPathException.class)
......
...@@ -46,7 +46,7 @@ public class RepositoryImageAddTest { ...@@ -46,7 +46,7 @@ public class RepositoryImageAddTest {
private final String initialContentType = "image/png"; private final String initialContentType = "image/png";
/** The initial path. */ /** The initial path. */
private final String initialPath = "/initial/" + System.currentTimeMillis() + "/"; private final String initialPath = "/initial/" + System.currentTimeMillis();
/** The initial extension. */ /** The initial extension. */
private final String initialExtension = ".png"; private final String initialExtension = ".png";
......
...@@ -46,7 +46,7 @@ public class RepositoryImageUpdateTest { ...@@ -46,7 +46,7 @@ public class RepositoryImageUpdateTest {
private final String initialContentType = "image/png"; private final String initialContentType = "image/png";
/** The initial path. */ /** The initial path. */
private final String initialPath = "/initial/" + System.currentTimeMillis() + "/"; private final String initialPath = "/initial/" + System.currentTimeMillis();
/** The initial extension. */ /** The initial extension. */
private final String initialExtension = ".png"; private final String initialExtension = ".png";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment