Package org.pentaho.platform.engine.services.solution

Source Code of org.pentaho.platform.engine.services.solution.SolutionReposHelper

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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 General Public License for more details.
*
*
* Copyright 2006 - 2013 Pentaho Corporation.  All rights reserved.
*/

package org.pentaho.platform.engine.services.solution;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.pentaho.platform.api.engine.ISolutionAttributeContributor;
import org.pentaho.platform.api.engine.ISolutionFile;
import org.pentaho.platform.api.engine.ISolutionFilter;

import java.util.ArrayList;
import java.util.List;

public class SolutionReposHelper {

  public static final String TREE_NODE_NAME = "tree"; //$NON-NLS-1$

  public static final String ENTRY_NODE_NAME = "entry"; //$NON-NLS-1$

  public static final String TYPE_ATTR_NAME = "type"; //$NON-NLS-1$

  public static final String NAME_ATTR_NAME = "name"; //$NON-NLS-1$

  public static final String DIRECTORY_ATTR = "directory"; //$NON-NLS-1$

  public static final String FILE_ATTR = "file"; //$NON-NLS-1$

  public static final String BRANCH_NODE_NAME = "branch"; //$NON-NLS-1$

  public static final String BRANCH_TEXT_NODE_NAME = "branchText"; //$NON-NLS-1$

  public static final String ID_ATTR_NAME = "id"; //$NON-NLS-1$

  public static final String IS_DIR_ATTR_NAME = "isDir"; //$NON-NLS-1$

  public static final String LEAF_NODE_NAME = "leaf"; //$NON-NLS-1$

  public static final String LEAF_TEXT_NODE_NAME = "leafText"; //$NON-NLS-1$

  public static final String LINK_NODE_NAME = "link"; //$NON-NLS-1$

  public static final String PATH_TEXT_NODE_NAME = "path"; //$NON-NLS-1$

  public static final ISolutionFilter KEEP_ALL_FILTER = new ISolutionFilter() {
    public boolean keepFile( ISolutionFile solutionFile, int actionOperation ) {
      return solutionFile != null;
    }
  };

  public static final ISolutionFilter DEFAULT_FILTER = new ISolutionFilter() {
    public boolean keepFile( ISolutionFile solutionFile, int actionOperation ) {
      return solutionFile != null && !ignoreFile( solutionFile );
    }
  };

  public static final ISolutionAttributeContributor ADD_NOTHING_CONTRIBUTOR = new ISolutionAttributeContributor() {
    public void contributeAttributes( ISolutionFile solutionFile, Element childNode ) {

    }
  };

  static List ignoreDirectories = new ArrayList();

  static List ignoreFiles = new ArrayList();

  static {
    // all names in lower case to work correctly
    SolutionReposHelper.ignoreDirectories.add( "cvs" ); //$NON-NLS-1$
    SolutionReposHelper.ignoreDirectories.add( "system" ); //$NON-NLS-1$
    SolutionReposHelper.ignoreDirectories.add( ".svn" ); //$NON-NLS-1$

    SolutionReposHelper.ignoreFiles.add( ".cvsignore" ); //$NON-NLS-1$
  }

  private SolutionReposHelper() {
  }

  public static boolean ignoreFile( final ISolutionFile solutionFile ) {
    if ( solutionFile.isDirectory() ) {
      return ignoreDirectories.contains( solutionFile.getFileName().toLowerCase() );
    }
    return ignoreFiles.contains( solutionFile.getFileName().toLowerCase() );
  }

  public static boolean ignoreFile( final String fileName ) {
    return ( SolutionReposHelper.ignoreFiles.contains( fileName.toLowerCase() ) );
  }

  public static boolean ignoreDirectory( final String dirName ) {
    return ( SolutionReposHelper.ignoreDirectories.contains( dirName.toLowerCase() ) );
  }

  public static boolean isActionSequence( final ISolutionFile solutionFile ) {
    String fileName = solutionFile.getFileName();
    return ( ( fileName != null ) ? fileName.toLowerCase().endsWith( ".xaction" ) : false ); //$NON-NLS-1$
  }

  public static Document getActionSequences( final ISolutionFile targetFile, final int actionOperation ) {
    return SolutionReposHelper.getActionSequences( targetFile, SolutionReposHelper.ADD_NOTHING_CONTRIBUTOR,
        actionOperation );
  }

  public static Document getActionSequences( final ISolutionFile targetFile,
      final ISolutionAttributeContributor contributor, final int actionOperation ) {
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement( SolutionReposHelper.TREE_NODE_NAME );
    SolutionReposHelper.processSolutionTree( root, targetFile, new ISolutionFilter() {
      public boolean keepFile( final ISolutionFile solutionFile, final int actOperation ) {
        return ( solutionFile.isDirectory() || SolutionReposHelper.isActionSequence( solutionFile ) )
            && DEFAULT_FILTER.keepFile( solutionFile, actionOperation );
      }
    }, contributor, actionOperation );
    return ( document );
  }

  public static Document processSolutionTree( final ISolutionFile targetFile, final int actionOperation ) {
    Document document = DocumentHelper.createDocument();
    Element root = document.addElement( SolutionReposHelper.TREE_NODE_NAME );
    SolutionReposHelper.processSolutionTree( root, targetFile, null, actionOperation );
    return ( document );
  }

  public static void processSolutionTree( final Element parentNode, final ISolutionFile targetFile,
      final int actionOperation ) {
    SolutionReposHelper.processSolutionTree( parentNode, targetFile, null, actionOperation );
  }

  public static void processSolutionStructure( final Element parentNode, final ISolutionFile targetFile,
      final int actionOperation ) {
    SolutionReposHelper.processSolutionStructure( parentNode, targetFile, null, actionOperation );
  }

  public static void processSolutionTree( final Element parentNode, final ISolutionFile targetFile,
      final ISolutionFilter solutionFilter, final int actionOperation ) {
    SolutionReposHelper.processSolutionTree( parentNode, targetFile, solutionFilter,
        SolutionReposHelper.ADD_NOTHING_CONTRIBUTOR, actionOperation );
  }

  public static void processSolutionTree( final Element parentNode, final ISolutionFile targetFile,
      final ISolutionFilter solutionFilter, final ISolutionAttributeContributor contributor,
      final int actionOperation ) {
    ISolutionFilter sFilter = solutionFilter == null ? DEFAULT_FILTER : solutionFilter;
    if ( targetFile != null ) {
      if ( sFilter.keepFile( targetFile, actionOperation ) ) {
        if ( targetFile.isDirectory() ) {
          Element childNode =
              parentNode.addElement( SolutionReposHelper.BRANCH_NODE_NAME ).addAttribute(
                  SolutionReposHelper.ID_ATTR_NAME, targetFile.getFullPath() ).addAttribute(
                  SolutionReposHelper.IS_DIR_ATTR_NAME, "true" ); //$NON-NLS-1$
          contributor.contributeAttributes( targetFile, childNode );
          if ( targetFile.isRoot() ) {
            childNode.addElement( SolutionReposHelper.BRANCH_TEXT_NODE_NAME ).setText( "/" ); //$NON-NLS-1$
          } else {
            childNode.addElement( SolutionReposHelper.BRANCH_TEXT_NODE_NAME ).setText( targetFile.getFileName() );
          }
          ISolutionFile[] files = targetFile.listFiles();
          for ( ISolutionFile file : files ) {
            SolutionReposHelper.processSolutionTree( childNode, file, sFilter, contributor, actionOperation );
          }
        } else {
          Element childNode =
              parentNode.addElement( SolutionReposHelper.LEAF_NODE_NAME ).addAttribute(
                  SolutionReposHelper.IS_DIR_ATTR_NAME, "false" ); //$NON-NLS-1$
          contributor.contributeAttributes( targetFile, childNode );
          childNode.addElement( SolutionReposHelper.LEAF_TEXT_NODE_NAME ).setText( targetFile.getFileName() );
          childNode.addElement( SolutionReposHelper.PATH_TEXT_NODE_NAME ).setText( targetFile.getFullPath() );
          childNode.addElement( SolutionReposHelper.LINK_NODE_NAME ).setText( "#" ); //$NON-NLS-1$
        }
      }
    }
  }

  // //
  // Only analyzer uses this.. is this necessary?
  private static final ThreadLocal threadSolutionRepositories = new ThreadLocal();

  public static void setSolutionRepositoryThreadVariable( Object repository ) {
    SolutionReposHelper.threadSolutionRepositories.set( repository );
  }

  public static Object getSolutionRepositoryThreadVariable() {
    return SolutionReposHelper.threadSolutionRepositories.get();
  }

  //
  // //

  public static void processSolutionStructure( final Element parentNode, final ISolutionFile targetFile,
      final ISolutionFilter solutionFilter, final int actionOperation ) {
    SolutionReposHelper.processSolutionStructure( parentNode, targetFile, solutionFilter,
        SolutionReposHelper.ADD_NOTHING_CONTRIBUTOR, actionOperation );
  }

  public static void processSolutionStructure( final Element parentNode, final ISolutionFile targetFile,
      final ISolutionFilter solutionFilter, final ISolutionAttributeContributor contributor,
      final int actionOperation ) {
    ISolutionFilter sFilter = solutionFilter == null ? DEFAULT_FILTER : solutionFilter;
    if ( targetFile.isDirectory() ) {
      if ( !SolutionReposHelper.ignoreDirectories.contains( targetFile.getFileName() )
          && sFilter.keepFile( targetFile, actionOperation ) ) {
        Element childNode =
            parentNode.addElement( SolutionReposHelper.ENTRY_NODE_NAME ).addAttribute(
                SolutionReposHelper.TYPE_ATTR_NAME, SolutionReposHelper.DIRECTORY_ATTR ).addAttribute(
                SolutionReposHelper.NAME_ATTR_NAME, targetFile.getFileName() );
        contributor.contributeAttributes( targetFile, childNode );
        ISolutionFile[] files = targetFile.listFiles();
        for ( ISolutionFile file : files ) {
          SolutionReposHelper.processSolutionStructure( childNode, file, actionOperation );
        }
      }
    } else {
      if ( !SolutionReposHelper.ignoreFiles.contains( targetFile.getFileName() )
          && sFilter.keepFile( targetFile, actionOperation ) ) {
        Element childNode =
            parentNode.addElement( SolutionReposHelper.ENTRY_NODE_NAME ).addAttribute(
                SolutionReposHelper.TYPE_ATTR_NAME, SolutionReposHelper.FILE_ATTR ).addAttribute(
                SolutionReposHelper.NAME_ATTR_NAME, targetFile.getFileName() );
        contributor.contributeAttributes( targetFile, childNode );
      }
    }
  }

}
TOP

Related Classes of org.pentaho.platform.engine.services.solution.SolutionReposHelper

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.