Package pt.webdetails.cdf.dd.extapi

Source Code of pt.webdetails.cdf.dd.extapi.FileHandler

/*!
* Copyright 2002 - 2014 Webdetails, a Pentaho company.  All rights reserved.
*
* This software was developed by Webdetails and is provided under the terms
* of the Mozilla Public License, Version 2.0, or any later version. You may not use
* this file except in compliance with the license. If you need a copy of the license,
* please go to  http://mozilla.org/MPL/2.0/. The Initial Developer is Webdetails.
*
* Software distributed under the Mozilla Public License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or  implied. Please refer to
* the license for the specific language governing your rights and limitations.
*/
package pt.webdetails.cdf.dd.extapi;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.platform.engine.security.SecurityHelper;
import pt.webdetails.cdf.dd.CdeConstants;
import pt.webdetails.cdf.dd.PentahoCdeEnvironment;
import pt.webdetails.cdf.dd.structure.DashboardStructure;
import pt.webdetails.cdf.dd.util.CdeEnvironment;
import pt.webdetails.cdf.dd.util.Utils;
import pt.webdetails.cpf.impl.FileContent;
import pt.webdetails.cpf.repository.api.IRWAccess;
import pt.webdetails.cpf.utils.CharsetHelper;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.concurrent.Callable;

public class FileHandler implements IFileHandler {

  protected static Log logger = LogFactory.getLog( FileHandler.class );

  @Override
  public boolean saveDashboardAs( String path, String title, String description, String cdfdeJsText, boolean isPreview )
    throws Exception {

    // 1. Read empty wcdf file or get original wcdf file if previewing dashboard
    InputStream wcdfFile;
    if ( isPreview ) {
      String wcdfPath = path.replace( "_tmp", "" );
      wcdfFile = Utils.getSystemOrUserRWAccess( wcdfPath ).getFileInputStream( wcdfPath );
    } else {
      wcdfFile = CdeEnvironment.getPluginSystemReader().getFileInputStream(
          DashboardStructure.SYSTEM_PLUGIN_EMPTY_WCDF_FILE_PATH );

      // [CDE-130] CDE Dash saves file with name @DASHBOARD_TITLE@
      if ( CdeConstants.DASHBOARD_TITLE_TAG.equals( title ) ) {
        title = FilenameUtils.getBaseName( path );
      }
      if ( CdeConstants.DASHBOARD_DESCRIPTION_TAG.equals( description ) ) {
        description = FilenameUtils.getBaseName( path );
      }
    }

    String wcdfContentAsString = IOUtils.toString( wcdfFile, CharsetHelper.getEncoding() );

    // 2. Fill-in wcdf file title and description
    wcdfContentAsString = wcdfContentAsString.replaceFirst( CdeConstants.DASHBOARD_TITLE_TAG, title );
    wcdfContentAsString = wcdfContentAsString.replaceFirst( CdeConstants.DASHBOARD_DESCRIPTION_TAG, description );

    // 3. Publish new wcdf file
    ByteArrayInputStream bais = new ByteArrayInputStream( wcdfContentAsString.getBytes( CharsetHelper.getEncoding() ) );

    if ( isPreview ) {
      return Utils.getSystemOrUserRWAccess( path ).saveFile( path, bais );

    } else {
      FileContent file = new FileContent();
      file.setPath( path );
      file.setContents( bais );
      file.setTitle( title );
      file.setDescription( description );

      return PentahoCdeEnvironment.getInstance().getContentAccessFactory().getUserContentAccess( null )
        .saveFile( file );

    }
  }

  @Override
  /**
   * Implementation of the Basic CDE files creation; temporarily switches session to create folders as admin
   *
   * @see org.pentaho.platform.engine.security.SecurityHelper#runAsSystem()
   * @param access repositoryAccessor
   * @param file name of the basic CDE file ( widget.cdfde, widget.wcdf, widget.cda, widget.xml )
   * @param content content of the basic CDE file
   * @return operation success
   */
  public boolean createBasicFileIfNotExists( final IRWAccess access, final String file, final InputStream content ) {

    if ( access == null || StringUtils.isEmpty( file ) || content == null ) {
      return false;
    }

    // skip creation if file already exists
    if ( !access.fileExists( file ) ) {

      try {
        // current user may not have necessary create permissions; this is an admin task
        SecurityHelper.getInstance().runAsSystem( new Callable<Boolean>() {

          @Override
          public Boolean call() throws Exception {
            return access.saveFile( file, content );
          }
        } );

      } catch ( Exception e ) {
        logger.error( "Couldn't find or create CDE " + file + "  file", e );
        return false;
      }
    }

    return true;
  }

  @Override
  /**
   * Implementation of the Basic CDE folders creation; temporarily switches session to create folders as admin
   *
   * @see org.pentaho.platform.engine.security.SecurityHelper#runAsSystem()
   * @param access repositoryAccessor
   * @param relativeFolderPath name of the basic CDE folder ( styles, templates, components, wigdets )
   * @return operation success
   */
  public boolean createBasicDirIfNotExists( final IRWAccess access, final String relativeFolderPath ) {

    if ( access == null || StringUtils.isEmpty( relativeFolderPath ) ) {
      return false;
    }

    // skip creation if folder already exists
    if ( !access.fileExists( relativeFolderPath ) ) {

      try {
        // current user may not have necessary create permissions; this is an admin task
        SecurityHelper.getInstance().runAsSystem( new Callable<Boolean>() {

          @Override
          public Boolean call() throws Exception {
            return access.createFolder( relativeFolderPath );
          }
        } );
      } catch ( Exception e ) {
        logger.error( "Couldn't find or create CDE " + relativeFolderPath + "  dir", e );
        return false;
      }
    }

    return true;
  }
}
TOP

Related Classes of pt.webdetails.cdf.dd.extapi.FileHandler

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.