import java.nio.file.Path;\r
import java.nio.file.Paths;\r
import java.nio.file.SimpleFileVisitor;\r
+import java.nio.file.StandardCopyOption;\r
import java.nio.file.attribute.BasicFileAttributes;\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
import java.util.ArrayList;\r
+import java.util.Date;\r
import java.util.List;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
\r
+import org.apache.commons.io.FilenameUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
\r
public class MoveJpegToIsilonStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
\r
@StepEntry\r
- public Object[] execute(StoreUri uri, String protocol) throws Exception {\r
- // TODO szerezzük a path-t meg az uri-ból\r
- Path sourcePath;\r
- List<String> files = new ArrayList<>();\r
- String fileNamePattern = "yyyymmdd";\r
+ public Object[] execute(String sourceUri, String sourceProtocol, String sourceFolder, String targetUri,\r
+ String targetProtocol, String targetFolder, String userName, String password, int port) throws Exception {\r
+ StoreUri sourceStoreUri = new StoreUri(sourceUri);\r
+// StoreUri targetStoreUri = new StoreUri(targetUri);\r
+ if (sourceFolder.endsWith("/")) {\r
+ sourceFolder = sourceFolder.substring(0, sourceFolder.length() - 1);\r
+ }\r
\r
- try {\r
- sourcePath = Paths.get(uri.toString());\r
+// logger.info("sourceFolder: {}", sourceFolder);\r
+ List<String> foundItems = new ArrayList<>();\r
+ sourceStoreUri.setRootPath(sourceFolder);\r
+ sourceStoreUri.setPortNumber(port);\r
+ sourceStoreUri.setPassword(password);\r
+ sourceStoreUri.setUserName(userName);\r
+ sourceStoreUri.setProtocol(RemoteStoreProtocol.valueOf(sourceProtocol));\r
+// logger.info("sourceStoreUri.toString(): {}", sourceStoreUri.toString());\r
+\r
+// targetStoreUri.setProtocol(RemoteStoreProtocol.valueOf(targetProtocol));\r
\r
- Pattern pattern = Pattern.compile(fileNamePattern, Pattern.CASE_INSENSITIVE);\r
+ FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {\r
+ String fileNamePattern = "yyyymmdd";\r
+ SimpleDateFormat dateFormatter = new SimpleDateFormat(fileNamePattern);\r
+ Date currentDate = new Date(); // initializes with the current date\r
+ Date dateFromFileName;\r
\r
- FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {\r
+ @Override\r
+ public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {\r
+ try {\r
+ if (Files.isDirectory(path)) {\r
+ dateFromFileName = dateFormatter.parse(path.toString().substring(0, 8));\r
+ if (!(dateFromFileName.compareTo(currentDate) > 0)) {\r
+ return FileVisitResult.SKIP_SUBTREE;\r
+ } else {\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
+ } else {\r
+ String fileExtension = FilenameUtils.getExtension(path.toString());\r
\r
- @Override\r
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {\r
- if (!file.getFileName().toString().contains("_DONE")) {\r
- Matcher matcher = pattern.matcher(file.getFileName().toString());\r
- if (matcher.find())\r
- files.add(file.toString());\r
+ if (fileExtension.equals("jpg") || fileExtension.equals("jpeg")) {\r
+ logger.info("path: {}", path.toString());\r
+ foundItems.add(path.toString());\r
+// logger.info("getRootPath(): {}", sourceStoreUri.getRootPath());\r
+ StoreUri targetStoreUri = getManager()\r
+ .createStoreUri(RemoteStoreProtocol.valueOf(targetProtocol), targetUri);\r
+ targetStoreUri.setProtocol(RemoteStoreProtocol.valueOf(targetProtocol));\r
+ targetStoreUri.setRootPath(targetFolder);\r
+\r
+// if (!targetStoreUri.fileExists(URLEncoder.encode(path.toString(), "UTF-8"))) {\r
+ logger.info("Paths.get(targetStoreUri.getRootPath()): {}", targetStoreUri.getRootPath());\r
+ copyFile(path, Paths.get(targetStoreUri.getRootPath()));\r
+// getManager().createStore();\r
+// getPathUntilCurrentFile(sourceStoreUri.getRootPath().toString(), path), "" );\r
+// }\r
+ }\r
}\r
- return FileVisitResult.CONTINUE;\r
+ } catch (ParseException e) {\r
+ logger.info("Illegal argument to parse as date: {}", path.getFileName().toString().substring(0, 8));\r
+ } catch (Exception e) {\r
+ logger.info("Exception: {}", e.getStackTrace());\r
}\r
+ return FileVisitResult.CONTINUE;\r
+ }\r
\r
- @Override\r
- public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {\r
- return FileVisitResult.CONTINUE;\r
- }\r
- };\r
-\r
- try {\r
- Files.walkFileTree(sourcePath, visitor);\r
- } catch (Exception e) {\r
- logger.error(getMarker(), "Error processing '{}'. System message: {}", sourcePath, e.getMessage());\r
- logger.catching(e);\r
- throw e;\r
- } finally {\r
+ @Override\r
+ public FileVisitResult visitFileFailed(Path path, IOException exc) throws IOException {\r
+ return FileVisitResult.CONTINUE;\r
}\r
+ };\r
+\r
+ try {\r
+ Files.walkFileTree(Paths.get(sourceStoreUri.getRootPath()), visitor);\r
+ } catch (IOException e) {\r
+ logger.info("Error processing Paths.get(sourceStoreUri.getRootPath()) '{}'. System message: {}",\r
+ Paths.get(sourceStoreUri.getRootPath()), e.getStackTrace());\r
+ logger.catching(e);\r
+ throw e;\r
+ } catch (SecurityException se) {\r
+ logger.info("SecurityException: {}", se.getStackTrace());\r
+ } finally {\r
+ }\r
+\r
+ logger.info("Found {} files", foundItems.size());\r
+ logger.info("files: {}", foundItems);\r
+ return new Object[] { foundItems };\r
+ }\r
\r
- logger.info(getMarker(), "Found {} files", files.size());\r
+ private void copyFile(Path sourceFullPath, Path targetRootPath) {\r
+ Path targetPath = Paths.get(targetRootPath.toString(), sourceFullPath.getFileName().toString());\r
+ logger.info(getMarker(), "Root {} exists {}", targetRootPath, Files.exists(targetRootPath));\r
\r
+ if (Files.exists(targetPath)) {\r
+ logger.info(getMarker(), "Skipping {}, target exists", targetPath);\r
+ return;\r
+ }\r
+\r
+ logger.info(getMarker(), "Target {} synchronization required", targetPath);\r
+\r
+ try {\r
+ Files.copy(sourceFullPath, targetPath, StandardCopyOption.REPLACE_EXISTING);\r
} catch (Exception e) {\r
- logger.debug("e.stackTrace: {}", e.getStackTrace());\r
+ logger.error(getMarker(), "Error synchronize {} to {}. System message: {}", sourceFullPath, targetPath,\r
+ e.getMessage());\r
+ }\r
+ }\r
+\r
+ protected String getPathUntilCurrentFile(String rootFolder, Path fullPath) {\r
+ String tempRootfolder = "";\r
+ if (rootFolder.contains("/") && fullPath.toString().contains("\\")) {\r
+ tempRootfolder = rootFolder.replace('/', '\\');\r
+ if (!tempRootfolder.endsWith("\\")) {\r
+ tempRootfolder = tempRootfolder.concat("\\");\r
+ }\r
+ }\r
+ if (rootFolder.contains("\\") && fullPath.toString().contains("/")) {\r
+ tempRootfolder = rootFolder.replace('\\', '/');\r
+ if (!tempRootfolder.endsWith("/")) {\r
+ tempRootfolder = tempRootfolder.concat("/");\r
+ }\r
}\r
\r
-// return new Object[] { files };\r
- return null;\r
+// logger.info("Path until file: {}", fullPath.toString().replace(tempRootfolder, ""));\r
+ return fullPath.toString().replace(rootFolder, "").substring(1);\r
}\r
-}
\ No newline at end of file
+}\r