/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2011 Aimluck,Inc.
 * http://www.aipo.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.aimluck.eip.services.storage;

import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Calendar;

import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.resources.JetspeedResources;

/**
 *
 */
public abstract class ALStorageHandler {

  @SuppressWarnings("unused")
  private static final JetspeedLogger logger = JetspeedLogFactoryService
    .getLogger(ALStorageHandler.class.getName());

  public static final String FOLDER_TMP_FOR_ATTACHMENT_FILES =
    JetspeedResources.getString("aipo.tmp.fileupload.attachment.directory", "");

  public abstract void createNewTmpFile(InputStream is, int uid, String dir,
      String fileName, String realFileName);

  public abstract void createNewFile(InputStream is, String folderPath,
      String filename);

  public long getTmpFolderSize(int uid, String dir) {
    return getFolderSize(FOLDER_TMP_FOR_ATTACHMENT_FILES, uid
      + ALStorageService.separator()
      + dir);
  }

  public boolean copyTmpFile(int uid, String srcDir, String srcFileName,
      String destRootPath, String destDir, String destFileName) {
    return copyFile(FOLDER_TMP_FOR_ATTACHMENT_FILES, uid
      + ALStorageService.separator()
      + srcDir, srcFileName, destRootPath, destDir, destFileName);
  }

  public boolean deleteTmpFolder(int uid, String dir) {
    return deleteFolder(FOLDER_TMP_FOR_ATTACHMENT_FILES, uid
      + ALStorageService.separator()
      + dir);
  }

  public InputStream getTmpFile(int uid, String folderName, String finename)
      throws FileNotFoundException {
    return getFile(FOLDER_TMP_FOR_ATTACHMENT_FILES, uid
      + ALStorageService.separator()
      + folderName, finename);
  }

  public abstract boolean copyFile(String srcRootPath, String srcDir,
      String srcFileName, String destRootPath, String destDir,
      String destFileName);

  public abstract long getFolderSize(String rootPath, String dir);

  public abstract long getFileSize(String rootPath, String dir, String filename);

  public abstract boolean deleteFolder(String rootPath, String dir);

  public abstract boolean deleteFile(String rootPath, String dir,
      String filename);

  public abstract boolean deleteFile(String filePath);

  public abstract InputStream getFile(String rootPath, String dir,
      String fineName) throws FileNotFoundException;

  public abstract InputStream getFile(String filePath)
      throws FileNotFoundException;

  public abstract String getDocumentPath(String rootPath, String categoryKey);

  public abstract String separator();

  public abstract void saveFile(InputStream is, String folderPath,
      String fileName);

  public abstract boolean deleteOldFolder(String folderPath, Calendar cal);

  public abstract void createNewFile(InputStream inputStream, String filepath);
}
