From fd555e4dce47a25232d4f686d9db07ca51439280 Mon Sep 17 00:00:00 2001
From: Andreas Romeyke <art1@andreas-romeyke.de>
Date: Thu, 22 Oct 2020 18:44:53 +0200
Subject: [PATCH] - because NFSStoragePlugin.java outdated, replaced with jar
 from 6.3.0

---
 .../plugin/storage/nfs/NFSStoragePlugin.jar   | Bin 0 -> 16147 bytes
 .../plugin/storage/nfs/NFSStoragePlugin.java  | 453 ------------------
 2 files changed, 453 deletions(-)
 create mode 100644 java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.jar
 delete mode 100644 java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.java

diff --git a/java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.jar b/java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.jar
new file mode 100644
index 0000000000000000000000000000000000000000..53d2dd65cfe6e6781c22279e990f53df03c113c6
GIT binary patch
literal 16147
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

literal 0
HcmV?d00001

diff --git a/java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.java b/java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.java
deleted file mode 100644
index 4c798a3..0000000
--- a/java/org/slub/rosetta/dps/repository/plugin/storage/nfs/NFSStoragePlugin.java
+++ /dev/null
@@ -1,453 +0,0 @@
-// decompiled for interoperability via java decompiler
-package com.exlibris.dps.repository.plugin.storage.nfs;
-
-import com.exlibris.core.infra.common.exceptions.logging.ExLogger;
-import com.exlibris.core.infra.common.util.IOUtil;
-import com.exlibris.core.infra.svc.api.scriptRunner.ExecExternalProcess;
-import com.exlibris.core.sdk.storage.containers.StoredEntityMetaData;
-import com.exlibris.core.sdk.storage.handler.AbstractStorageHandler;
-import com.exlibris.core.sdk.storage.handler.StorageUtil;
-import com.exlibris.core.sdk.utils.FileUtil;
-import com.exlibris.digitool.common.storage.Fixity;
-import com.exlibris.digitool.common.storage.Fixity.FixityAlgorithm;
-import com.exlibris.digitool.infrastructure.utils.Checksummer;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import org.apache.commons.lang.StringUtils;
-
-public class NFSStoragePlugin
-extends AbstractStorageHandler
-{
-  private static final String DIR_PREFIX = "DIR_PREFIX";
-  private static final String FILE_PER_DIR = "FILE_PER_DIR";
-  private static final String DIR_ROOT = "DIR_ROOT";
-  private static final String FILES_HANDLING_METHOD = "FILES_HANDLING_METHOD";
-  private static final ExLogger log = ExLogger.getExLogger(NFSStoragePlugin.class);
-  private final String RELATIVE_DIRECTORY_PATH = "relativeDirectoryPath";
-  private final String DEST_FILE_PATH = "destFilePath";
-
-  public boolean deleteEntity(String storedEntityIdentifier)
-  {
-    File file = new File((String)this.parameters.get("DIR_ROOT") + storedEntityIdentifier);
-    try
-    {
-      return file.delete();
-    }
-    catch (Exception e)
-    {
-      log.warn("failed to delete entity with path: " + file.getPath(), new String[0]);
-    }
-    return true;
-  }
-
-  public InputStream retrieveEntity(String storedEntityIdentifier)
-    throws IOException
-    {
-      return retrieveEntity(storedEntityIdentifier, true);
-    }
-
-  public InputStream retrieveEntity(String storedEntityIdentifier, boolean isRelative)
-    throws IOException
-    {
-      return new FileInputStream((isRelative ? (String)this.parameters.get("DIR_ROOT") : "") + storedEntityIdentifier);
-    }
-
-  public String storeEntity(InputStream is, StoredEntityMetaData storedEntityMetadata)
-    throws Exception
-    {
-      String existsDescPath = getFilePathInDescIfExists(storedEntityMetadata);
-
-      String destFilePath = null;
-
-      boolean isCopyFileNeeded = true;
-      if (existsDescPath != null)
-      {
-        destFilePath = existsDescPath;
-        isCopyFileNeeded = !checkFixity(storedEntityMetadata.getFixities(), destFilePath, false);
-      }
-      Map<String, String> paths = getStoreEntityIdentifier(storedEntityMetadata, destFilePath);
-      String storedEntityIdentifier = (String)paths.get("relativeDirectoryPath");
-      destFilePath = (String)paths.get("destFilePath");
-      if (isCopyFileNeeded)
-      {
-        if (canHandleSourcePath(storedEntityMetadata.getCurrentFilePath()))
-        {
-          if (is != null) {
-            is.close();
-          }
-          copyStream(storedEntityMetadata, destFilePath);
-        }
-        else
-        {
-          log.info("Cannot handle source path: " + storedEntityMetadata.getCurrentFilePath());
-          if (is == null)
-          {
-            log.warn("InputStream is null", new String[0]);
-            return null;
-          }
-          FileOutputStream output = null;
-          try
-          {
-            output = new FileOutputStream(new File(destFilePath));
-            IOUtil.copy(is, output);
-          }
-          finally
-          {
-            IOUtil.closeQuietly(output);
-          }
-        }
-        if (!checkFixity(storedEntityMetadata.getFixities(), storedEntityIdentifier)) {
-          return null;
-        }
-      }
-      return storedEntityIdentifier;
-    }
-
-  public boolean checkFixity(List<Fixity> fixities, String storedEntityIdentifier)
-    throws Exception
-    {
-      return checkFixity(fixities, storedEntityIdentifier, true);
-    }
-
-  public boolean checkFixity(List<Fixity> fixities, String storedEntityIdentifier, boolean isRelativePath)
-    throws Exception
-    {
-      boolean result = true;
-      if (fixities != null)
-      {
-        boolean calcMD5 = false;
-        boolean calcSHA1 = false;
-        boolean calcCRC32 = false;
-        for (Fixity fixity : fixities)
-        {
-          fixity.setResult(null);
-          if (Fixity.FixityAlgorithm.MD5.toString().equals(fixity.getAlgorithm()))
-          {
-            calcMD5 = true;
-          }
-          else if (Fixity.FixityAlgorithm.SHA1.toString().equals(fixity.getAlgorithm()))
-          {
-            calcSHA1 = true;
-          }
-          else if (Fixity.FixityAlgorithm.CRC32.toString().equals(fixity.getAlgorithm()))
-          {
-            calcCRC32 = true;
-          }
-          else
-          {
-            String oldValue = fixity.getValue();
-            fixity.setValue(getChecksumUsingPlugin(isRelativePath ? getLocalFilePath(storedEntityIdentifier) : storedEntityIdentifier, fixity.getPluginName(), oldValue));
-            fixity.setResult(Boolean.valueOf((oldValue == null) || (oldValue.equals(fixity.getValue()))));
-            result &= fixity.getResult().booleanValue();
-          }
-        }
-        if ((calcMD5) || (calcSHA1) || (calcCRC32))
-        {
-          InputStream is = null;
-          try
-          {
-            is = retrieveEntity(storedEntityIdentifier, isRelativePath);
-            checksummer = new Checksummer(is, calcMD5, calcSHA1, calcCRC32);
-            for (Fixity fixity : fixities)
-            {
-              int checksummerAlgorithmIndex = getChecksummerAlgorithmIndex(fixity.getAlgorithm());
-              if (checksummerAlgorithmIndex != -1)
-              {
-                String oldValue = fixity.getValue();
-                fixity.setValue(checksummer.getChecksum(fixity.getAlgorithm()));
-                fixity.setResult(Boolean.valueOf((oldValue == null) || (oldValue.equalsIgnoreCase(fixity.getValue()))));
-                result &= fixity.getResult().booleanValue();
-              }
-            }
-          }
-          finally
-          {
-            Checksummer checksummer;
-            if (is != null) {
-              is.close();
-            }
-          }
-        }
-      }
-      return result;
-    }
-
-  private int getChecksummerAlgorithmIndex(String algorithm)
-  {
-    try
-    {
-      Fixity.FixityAlgorithm fixityAlgorithm = Fixity.FixityAlgorithm.valueOf(algorithm);
-      return fixityAlgorithm.ordinal();
-    }
-    catch (Exception e) {}
-    return -1;
-  }
-
-  private String getStreamRelativePath(String destFilePath)
-  {
-    StringBuffer relativeDirectoryPath = new StringBuffer();
-
-    String year = null;String month = null;String day = null;
-    if (destFilePath == null)
-    {
-      Date date = new Date();
-      year = new SimpleDateFormat("yyyy").format(date);
-      month = new SimpleDateFormat("MM").format(date);
-      day = new SimpleDateFormat("dd").format(date);
-    }
-    else
-    {
-      String nextDir = getNextDir(destFilePath);
-      String[] splitted = destFilePath.split(nextDir);
-      splitted = StringUtils.split(splitted[0], File.separator);
-      day = splitted[(splitted.length - 1)];
-      month = splitted[(splitted.length - 2)];
-      year = splitted[(splitted.length - 3)];
-    }
-    relativeDirectoryPath.append(File.separator).append(year).append(File.separator).append(month).append(File.separator).append(day).append(File.separator);
-
-
-
-
-
-
-    return relativeDirectoryPath.toString();
-  }
-
-  private File getStreamDirectory(String path, String fileName)
-  {
-    String directoryPrefix = "fileset_";
-    int maxFilesPerDir = 100;
-    if (!StringUtils.isEmpty((String)this.parameters.get("DIR_PREFIX"))) {
-      directoryPrefix = (String)this.parameters.get("DIR_PREFIX");
-    }
-    if (!StringUtils.isEmpty((String)this.parameters.get("FILE_PER_DIR"))) {
-      maxFilesPerDir = Integer.valueOf((String)this.parameters.get("FILE_PER_DIR")).intValue();
-    }
-    File newDir = new File((String)this.parameters.get("DIR_ROOT") + File.separator + path);
-    newDir.mkdirs();
-    File destDir = FileUtil.getNextDirectory(newDir, directoryPrefix, maxFilesPerDir);
-
-    return new File(destDir.getAbsolutePath() + File.separator + fileName);
-  }
-
-  private String getNextDir(String fullPath)
-  {
-    String[] dirs = fullPath.split("\\" + File.separator);
-    return dirs[(dirs.length - 2)];
-  }
-
-  private boolean canHandleSourcePath(String srcPath)
-  {
-    try
-    {
-      File file = new File(srcPath);
-      return file.canRead();
-    }
-    catch (Exception e) {}
-    return false;
-  }
-
-  protected void copyStream(StoredEntityMetaData storedEntityMetadata, String destPath)
-    throws IOException
-    {
-      String filesHandlingMethod = (String)this.parameters.get("FILES_HANDLING_METHOD");
-      String srcPath = storedEntityMetadata.getCurrentFilePath();
-
-      String pid = storedEntityMetadata.getEntityPid();
-      String iePid = storedEntityMetadata.getIePid();
-      if ("move".equalsIgnoreCase(filesHandlingMethod))
-      {
-        File canonicalSrcFile = getCanonicalFile(srcPath);
-        FileUtil.moveFile(canonicalSrcFile, new File(destPath));
-        saveDestPathsTmpFile(iePid, pid, destPath);
-      }
-      else if ("soft_link".equalsIgnoreCase(filesHandlingMethod))
-      {
-        softLink(srcPath, destPath);
-      }
-      else if ("hard_link".equalsIgnoreCase(filesHandlingMethod))
-      {
-        hardLink(srcPath, destPath);
-      }
-      else
-      {
-        FileUtil.copyFile(srcPath, destPath);
-        saveDestPathsTmpFile(iePid, pid, destPath);
-      }
-    }
-
-  private void saveDestPathsTmpFile(String folder, String key, String path)
-  {
-    if (folder == null) {
-      return;
-    }
-    String tmpFilePath = getTempStorageDirectory(false) + "destPath";
-
-
-    File destPathDir = new File(getTempStorageDirectory(false) + "destPath" + File.separator);
-    if (!destPathDir.exists()) {
-      destPathDir.mkdirs();
-    }
-    StorageUtil.saveDestPathToTmpFile(folder, tmpFilePath, key, path);
-  }
-
-  protected String getFilePathInDescIfExists(StoredEntityMetaData storedEntityMetadata)
-  {
-    String tmpFilePath = getTempStorageDirectory(false) + "destPath";
-    if (storedEntityMetadata.getIePid() == null) {
-      return null;
-    }
-    String existsDescPath = StorageUtil.readDestPathFromTmpFile(storedEntityMetadata.getIePid(), tmpFilePath, storedEntityMetadata.getEntityPid());
-    return existsDescPath;
-  }
-
-  private File getCanonicalFile(String srcPath)
-  {
-    String fileName = srcPath.split("\\" + File.separator)[(srcPath.split("\\" + File.separator).length - 1)];
-    File canonicalSrcDir = null;
-    try
-    {
-      canonicalSrcDir = new File(srcPath).getParentFile().getCanonicalFile();
-      return new File(canonicalSrcDir, fileName).getCanonicalFile();
-    }
-    catch (IOException e) {}
-    return null;
-  }
-
-  private void hardLink(String srcPath, String destPath)
-    throws IOException
-    {
-      String command = "ln";
-      ExecExternalProcess proc = new ExecExternalProcess();
-      List<String> args = new LinkedList();
-      args.add(srcPath);
-      args.add(destPath);
-      int retValue = proc.execExternalProcess(command, args);
-      if (retValue != 0) {
-        throw new IOException("ln " + srcPath + " " + destPath + " failed " + proc.getErrorStream() + proc.getInputStream());
-      }
-    }
-
-  private void softLink(String srcPath, String destPath)
-    throws IOException
-    {
-      File source = new File(srcPath);
-      if (!source.exists()) {
-        throw new IOException("File " + source + " does not exist");
-      }
-      String command = "ln";
-      ExecExternalProcess proc = new ExecExternalProcess();
-      List<String> args = new ArrayList();
-      args.add("-s");
-      args.add(srcPath);
-      args.add(destPath);
-      int retValue = proc.execExternalProcess(command, args);
-      if (retValue != 0) {
-        throw new IOException("ln -s " + srcPath + " " + destPath + " failed " + proc.getErrorStream() + proc.getInputStream());
-      }
-    }
-
-  public String getFullFilePath(String storedEntityIdentifier)
-  {
-    return (String)this.parameters.get("DIR_ROOT") + storedEntityIdentifier;
-  }
-
-  public String getLocalFilePath(String storedEntityIdentifier)
-  {
-    return getFullFilePath(storedEntityIdentifier);
-  }
-
-  public boolean isAvailable()
-  {
-    try
-    {
-      File file = new File((String)this.parameters.get("DIR_ROOT"));
-      if ((!file.exists()) &&
-          (!file.mkdirs()))
-      {
-        log.error("No access to folder" + (String)this.parameters.get("DIR_ROOT"), new String[0]);
-        return false;
-      }
-      if (!file.canRead())
-      {
-        log.error("No read access to folder: " + (String)this.parameters.get("DIR_ROOT"), new String[0]);
-        return false;
-      }
-      if (!file.canWrite())
-      {
-        log.error("No write access to folder: " + (String)this.parameters.get("DIR_ROOT"), new String[0]);
-        return false;
-      }
-    }
-    catch (Exception e)
-    {
-      log.error("isAvailable method fell for storage: " + getStorageId(), e, new String[0]);
-      return false;
-    }
-    return true;
-  }
-
-  public byte[] retrieveEntityByRange(String storedEntityIdentifier, long start, long end)
-    throws Exception
-    {
-      bytes = new byte[(int)(end - start + 1L)];
-      RandomAccessFile file = null;
-      try
-      {
-        file = new RandomAccessFile((String)this.parameters.get("DIR_ROOT") + storedEntityIdentifier, "r");
-        file.seek(start);
-        file.readFully(bytes, 0, (int)(end - start + 1L));
-
-
-
-
-
-
-
-
-
-        return bytes;
-      }
-      finally
-      {
-        if (file != null) {
-          try
-          {
-            file.close();
-          }
-          catch (Exception e)
-          {
-            log.warn("Failed closing file", new String[0]);
-          }
-        }
-      }
-    }
-
-  private Map<String, String> getStoreEntityIdentifier(StoredEntityMetaData storedEntityMetadata, String destFilePath)
-  {
-    Map<String, String> paths = new HashMap();
-
-    String fileName = createFileName(storedEntityMetadata);
-    String relativeDirectoryPath = getStreamRelativePath(destFilePath);
-    if (destFilePath == null)
-    {
-      File destFile = getStreamDirectory(relativeDirectoryPath, fileName);
-      destFilePath = destFile.getAbsolutePath();
-    }
-    paths.put("destFilePath", destFilePath);
-    paths.put("relativeDirectoryPath", relativeDirectoryPath + getNextDir(destFilePath) + File.separator + fileName);
-    return paths;
-  }
-}
-- 
GitLab