Package org.structr.files.ftp

Source Code of org.structr.files.ftp.FileOrFolder

/**
* Copyright (C) 2010-2014 Morgner UG (haftungsbeschränkt)
*
* This file is part of Structr <http://structr.org>.
*
* Structr 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.
*
* Structr 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 General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Structr.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.structr.files.ftp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
import org.apache.ftpserver.ftplet.FtpFile;
import org.structr.common.SecurityContext;
import org.structr.common.error.FrameworkException;
import org.structr.core.app.App;
import org.structr.core.app.StructrApp;
import org.structr.core.entity.AbstractNode;
import org.structr.core.graph.CreateNodeCommand;
import org.structr.core.graph.NodeAttribute;
import org.structr.core.graph.Tx;
import org.structr.dynamic.File;
import org.structr.web.common.FileHelper;
import org.structr.web.entity.AbstractFile;
import org.structr.web.entity.Folder;

/**
* This class is an equivalent to Java's native File class for file and folder
* creation.
*
* It's a thin wrapper, implementing mkdir() and createOutputStream() only.
*
* @author Axel Morgner
*/
public class FileOrFolder extends AbstractStructrFtpFile {

  private static final Logger logger = Logger.getLogger(FileOrFolder.class.getName());

  public FileOrFolder(final String newPath, final StructrFtpUser user) {
    super(newPath, user);
  }

  @Override
  public boolean isDirectory() {
    logger.log(Level.SEVERE, "isDirectory()");
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean isFile() {
    logger.log(Level.SEVERE, "isFile()");
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public long getSize() {
    logger.log(Level.SEVERE, "getSize()");
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public boolean mkdir() {

    final App app = StructrApp.getInstance();
    try (final Tx tx = app.tx()) {

      logger.log(Level.INFO, "mkdir() Folder");

      AbstractFile existing = FileHelper.getFileByAbsolutePath(SecurityContext.getSuperUserInstance(), newPath);
      if (existing != null) {
        logger.log(Level.WARNING, "File {0} already exists.", newPath);
        return false;
      }

      final Folder parentFolder = (Folder) FileHelper.getFileByAbsolutePath(SecurityContext.getSuperUserInstance(), StringUtils.substringBeforeLast(newPath, "/"));

      try {
        Folder newFolder = (Folder) StructrApp.getInstance().command(CreateNodeCommand.class).execute(
          new NodeAttribute(AbstractNode.type, Folder.class.getSimpleName()),
          new NodeAttribute(AbstractNode.owner, owner.getStructrUser()),
          new NodeAttribute(AbstractNode.name, getName())
        );

        if (parentFolder != null) {
          newFolder.setProperty(AbstractFile.parent, parentFolder);
        }

      } catch (FrameworkException ex) {
        logger.log(Level.SEVERE, null, ex);
        return false;
      }

      tx.success();

      return true;

    } catch (FrameworkException ex) {
      logger.log(Level.SEVERE, null, ex);
      return false;
    }
  }

  @Override
  public List<FtpFile> listFiles() {
    logger.log(Level.SEVERE, "listFiles()");
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

  @Override
  public OutputStream createOutputStream(final long l) throws IOException {

    try (Tx tx = StructrApp.getInstance().tx()) {

      if (structrFile == null) {

        final Folder parentFolder = (Folder) FileHelper.getFileByAbsolutePath(SecurityContext.getSuperUserInstance(), StringUtils.substringBeforeLast(newPath, "/"));

        try {
          structrFile = FileHelper.createFile(SecurityContext.getSuperUserInstance(), new byte[0], null, File.class, getName());
          structrFile.setProperty(AbstractNode.type, File.class.getSimpleName());
          structrFile.setProperty(AbstractNode.owner, owner.getStructrUser());

          if (parentFolder != null) {
            structrFile.setProperty(AbstractFile.parent, parentFolder);
          }

        } catch (FrameworkException ex) {
          logger.log(Level.SEVERE, null, ex);
          return null;
        }
      }

      tx.success();

      return ((File) structrFile).getOutputStream();

    } catch (FrameworkException fex) {
      logger.log(Level.SEVERE, null, fex);
    }

    return null;
  }

  @Override
  public InputStream createInputStream(long l) throws IOException {
    logger.log(Level.SEVERE, "createInputStream()");
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
  }

}
TOP

Related Classes of org.structr.files.ftp.FileOrFolder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.