Package org.pentaho.platform.plugin.services.pluginmgr

Source Code of org.pentaho.platform.plugin.services.pluginmgr.PerspectiveUtil

/*
* Copyright 2002 - 2013 Pentaho Corporation.  All rights reserved.
*
* This software was developed by Pentaho Corporation and is provided under the terms
* of the Mozilla Public License, Version 1.1, 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://www.mozilla.org/MPL/MPL-1.1.txt. TThe Initial Developer is Pentaho Corporation.
*
* 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 org.pentaho.platform.plugin.services.pluginmgr;

import org.dom4j.Element;
import org.dom4j.Node;
import org.pentaho.platform.api.engine.perspective.pojo.IPluginPerspective;
import org.pentaho.platform.plugin.services.pluginmgr.perspective.pojo.DefaultPluginPerspective;
import org.pentaho.ui.xul.XulOverlay;
import org.pentaho.ui.xul.impl.DefaultXulOverlay;

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

/**
* @author wseyler
*
*/
public class PerspectiveUtil {
  public static final int DEFAULT_LAYOUT_PRIORITY = 1000;

  static IPluginPerspective createPerspective( Element perspectiveNode ) {
    if ( perspectiveNode != null ) {
      String title = perspectiveNode.attributeValue( "title" ); //$NON-NLS-1$
      String id = perspectiveNode.attributeValue( "id" ); //$NON-NLS-1$
      String contentUrl = perspectiveNode.attributeValue( "content-url" ); //$NON-NLS-1$
      String resourceBundleUri = perspectiveNode.attributeValue( "resourcebundle" ); //$NON-NLS-1$
      String layoutPriorityStr = perspectiveNode.attributeValue( "layout-priority" ); //$NON-NLS-1$
      int layoutPriority = DEFAULT_LAYOUT_PRIORITY;
      if ( layoutPriorityStr != null && layoutPriorityStr.length() > 0 ) {
        try {
          layoutPriority = Integer.parseInt( layoutPriorityStr );
        } catch ( Exception e ) {
          layoutPriority = DEFAULT_LAYOUT_PRIORITY;
        }
      }

      String securityActionStr = perspectiveNode.attributeValue( "required-security-action" );
      ArrayList<String> actions = new ArrayList<String>();
      if ( securityActionStr != null ) {
        StringTokenizer st = new StringTokenizer( securityActionStr, ";, " );
        while ( st.hasMoreTokens() ) {
          String action = st.nextToken();
          actions.add( action );
        }
      }

      ArrayList<XulOverlay> overlays = processOverlays( perspectiveNode ); //$NON-NLS-1$

      IPluginPerspective perspective = new DefaultPluginPerspective();
      perspective.setTitle( title );
      perspective.setId( id );
      perspective.setContentUrl( contentUrl );
      perspective.setLayoutPriority( layoutPriority );
      perspective.setOverlays( overlays );
      perspective.setRequiredSecurityActions( actions );
      perspective.setResourceBundleUri( resourceBundleUri );

      return perspective;
    }
    return null;
  }

  private static ArrayList<XulOverlay> processOverlays( Element node ) {
    if ( node == null ) {
      return null;
    }
    ArrayList<XulOverlay> overlays = new ArrayList<XulOverlay>();

    @SuppressWarnings( "unchecked" )
    List<Node> overlayElements = (List<Node>) node.selectNodes( "overlay" );
    for ( Node overlayNode : overlayElements ) {
      DefaultXulOverlay overlay;

      // reuse static method to honor overlay priorities as well
      overlay = SystemPathXmlPluginProvider.processOverlay( (Element) overlayNode );
      if ( overlay != null ) {
        overlays.add( overlay );
      }
    }

    return overlays;
  }
}
TOP

Related Classes of org.pentaho.platform.plugin.services.pluginmgr.PerspectiveUtil

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.