From fab80c872af697d61f200fd410a7ecc64ca0a537 Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Mon, 06 Mar 2017 22:59:47 +0000
Subject: [PATCH] dekodieren fuer Codemirror

---
 src/java/de/uhilger/filecms/api/FileMgr.java |  153 +++++++++++++++++++++++++++++++++-----------------
 1 files changed, 101 insertions(+), 52 deletions(-)

diff --git a/src/java/de/uhilger/filecms/api/FileMgr.java b/src/java/de/uhilger/filecms/api/FileMgr.java
index b3adeaf..840a223 100644
--- a/src/java/de/uhilger/filecms/api/FileMgr.java
+++ b/src/java/de/uhilger/filecms/api/FileMgr.java
@@ -21,10 +21,13 @@
 import de.uhilger.filecms.data.FileRef;
 import de.uhilger.filecms.web.Initialiser;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -32,6 +35,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringEscapeUtils;
 
 /**
  *
@@ -103,9 +107,12 @@
     
     Object p = getRequest().getUserPrincipal();
     if(p instanceof Principal) {
-      FileReader reader = null;
+      Reader reader = null;
       try {
         File targetFile = new File(getTargetDir(relPath), fileName);
+        
+        //reader = new InputStreamReader(new FileInputStream(targetFile), "UTF8");
+        
         reader = new FileReader(targetFile);
         StringBuffer buf = new StringBuffer();
         char[] readBuffer = new char[1024];
@@ -166,6 +173,14 @@
   }
   
   public String copyFiles(String fromPath, String toPath, List fileNames) {
+    return copyOrMoveFiles(fromPath, toPath, fileNames, OP_COPY);
+  }
+  
+  public String moveFiles(String fromPath, String toPath, List fileNames) {
+    return copyOrMoveFiles(fromPath, toPath, fileNames, OP_MOVE);
+  }
+  
+  private String copyOrMoveFiles(String fromPath, String toPath, List fileNames, int operation) {
     String result = null;
     try {
       File srcDir = getTargetDir(fromPath);
@@ -177,11 +192,17 @@
           ArrayList al = (ArrayList) o;
           File srcFile = new File(srcDir, al.get(0).toString());
           if(srcFile.isDirectory()) {
-            logger.fine("copy dir " + srcFile.getAbsolutePath() + " to dir " + targetDir.getAbsolutePath());
-            FileUtils.copyDirectoryToDirectory(srcFile, targetDir);
+            if(operation == OP_MOVE) {
+              FileUtils.moveDirectoryToDirectory(srcFile, targetDir, false);
+            } else {
+              FileUtils.copyDirectoryToDirectory(srcFile, targetDir);
+            }
           } else {
-            logger.fine("copy srcFile " + srcFile.getAbsolutePath() + " to dir " + targetDir.getAbsolutePath());
-            FileUtils.copyFileToDirectory(srcFile, targetDir);
+            if(operation == OP_MOVE) {
+              FileUtils.moveFileToDirectory(srcFile, targetDir, false);
+            } else {
+              FileUtils.copyFileToDirectory(srcFile, targetDir);              
+            }
           }
         }
       }
@@ -191,62 +212,90 @@
     return result;
   }
   
-  public String moveFiles(String fromPath, String toPath, List fileNames) {
-    String result = null;
-    try {
-      File srcDir = getTargetDir(fromPath);
-      File targetDir = getTargetDir(toPath);
-      Iterator i = fileNames.iterator();
-      while(i.hasNext()) {
-        Object o = i.next();
-        if (o instanceof ArrayList) {
-          ArrayList al = (ArrayList) o;
-          File srcFile = new File(srcDir, al.get(0).toString());
-          if(srcFile.isDirectory()) {
-            FileUtils.moveDirectoryToDirectory(srcFile, targetDir, false);
-          } else {
-            FileUtils.moveFileToDirectory(srcFile, targetDir, false);
-          }
-        }
+  public FileRef saveTextFileAs(String relPath, String fileName, String contents) {
+    FileRef savedFile = null;
+    logger.fine(relPath + " " + fileName);
+    //FileRef datenRef = getBase();
+    Object p = getRequest().getUserPrincipal();
+    if(p instanceof Principal) {
+      File targetFile = new File(getTargetDir(relPath), fileName);
+      if(targetFile.exists()) {
+        targetFile = getNewFileName(targetFile);
+      } else {
+        targetFile.getParentFile().mkdirs();
       }
+      saveToFile(targetFile, contents);
+    }
+    return savedFile;
+  }
+  
+  private File getNewFileName(File file) {
+    File dir = file.getParentFile();
+    String targetName = file.getName();
+    logger.fine("targetName: " + targetName);
+    String ext = "";
+    int dotpos = targetName.indexOf(".");
+    if(dotpos > -1) {
+      ext = targetName.substring(dotpos);
+      targetName = targetName.substring(0, dotpos);
+    }
+    logger.fine("targetName: " + targetName + ", ext: " + ext);
+    int i = 1;
+    while(file.exists()) {
+      StringBuffer buf = new StringBuffer();
+      buf.append(targetName);
+      buf.append("-");
+      buf.append(i);
+      if(ext.length() > 0) {
+        buf.append(ext);
+      }
+      file = new File(dir, buf.toString());
+      i++;
+    }
+    logger.fine("new file: " + file.getName());
+    return file;
+  }  
+  
+  private FileRef saveToFile(File targetFile, String contents) {
+    FileRef savedFile = null;
+    try {
+      targetFile.createNewFile();
+      FileWriter w = new FileWriter(targetFile);
+      //w.write(StringEscapeUtils.unescapeHtml(contents));
+      w.write(contents);
+      w.flush();
+      w.close();
+      savedFile = new FileRef(
+              targetFile.getAbsolutePath(),
+              targetFile.isDirectory(),
+              targetFile.isHidden(),
+              targetFile.lastModified(),
+              targetFile.length());
     } catch (IOException ex) {
       logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
     }
-    return result;
+    return savedFile;
   }
   
   public FileRef saveTextFile(String relPath, String fileName, String contents) {
     FileRef savedFile = null;
-    try {
-      FileRef datenRef = getBase();
-      Object p = getRequest().getUserPrincipal();
-      if(p instanceof Principal) {
-        File targetFile = new File(getTargetDir(relPath), fileName);
-        if(targetFile.exists()) {
-          /*
-            muss delete() sein?
-            pruefen: ueberschreibt der FileWriter den alteen Inhalt oder 
-            entsteht eine unerwuenschte Mischung aus altem und neuem 
-            Inhalt?
-          */
-          targetFile.delete();
-        } else {
-          targetFile.getParentFile().mkdirs();
-        }
-        targetFile.createNewFile();
-        FileWriter w = new FileWriter(targetFile);
-        w.write(contents);
-        w.flush();
-        w.close();
-        savedFile = new FileRef(
-                targetFile.getAbsolutePath(), 
-                targetFile.isDirectory(), 
-                targetFile.isHidden(), 
-                targetFile.lastModified(), 
-                targetFile.length());
+    logger.fine(relPath + " " + fileName);
+    //FileRef datenRef = getBase();
+    Object p = getRequest().getUserPrincipal();
+    if(p instanceof Principal) {
+      File targetFile = new File(getTargetDir(relPath), fileName);
+      if(targetFile.exists()) {
+        /*
+          muss delete() sein?
+          pruefen: ueberschreibt der FileWriter den alteen Inhalt oder 
+          entsteht eine unerwuenschte Mischung aus altem und neuem 
+          Inhalt?
+        */
+        targetFile.delete();
+      } else {
+        targetFile.getParentFile().mkdirs();
       }
-    } catch (IOException ex) {
-      logger.log(Level.SEVERE, null, ex);
+      saveToFile(targetFile, contents);
     }
     return savedFile;
   }

--
Gitblit v1.9.3