Package org.pentaho.platform.web.http.api.resources

Source Code of org.pentaho.platform.web.http.api.resources.PluginManagerResource

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.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 Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.web.http.api.resources;

import org.apache.commons.lang.StringUtils;
import org.codehaus.enunciate.Facet;
import org.pentaho.platform.api.engine.IAuthorizationPolicy;
import org.pentaho.platform.api.engine.IPluginManager;
import org.pentaho.platform.api.engine.perspective.IPluginPerspectiveManager;
import org.pentaho.platform.api.engine.perspective.pojo.IPluginPerspective;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.security.policy.rolebased.actions.AdministerSecurityAction;
import org.pentaho.platform.security.policy.rolebased.actions.RepositoryCreateAction;
import org.pentaho.platform.security.policy.rolebased.actions.RepositoryReadAction;
import org.pentaho.ui.xul.XulOverlay;

import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;

import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;

@Path( "/plugin-manager/" )
public class PluginManagerResource {

  private static final String NEW_TOOLBAR_BUTTON_SETTING = "new-toolbar-button"; //$NON-NLS-1$

  public PluginManagerResource() {
  }

  /**
   * Retrieve the list of XUL overlays for the provided id
   *
   * @param id
   * @return list of <code> Overlay </code>
   */
  @GET
  @Path( "/overlays" )
  @Produces( { APPLICATION_JSON } )
  @Facet( name = "Unsupported" )
  public List<Overlay> getOverlays( @QueryParam( "id" ) @DefaultValue( "" ) String id ) {
    IPluginManager pluginManager = PentahoSystem.get( IPluginManager.class, PentahoSessionHolder.getSession() ); //$NON-NLS-1$
    List<XulOverlay> overlays = pluginManager.getOverlays();
    ArrayList<Overlay> result = new ArrayList<Overlay>();
    for ( XulOverlay overlay : overlays ) {
      if ( !id.isEmpty() && !overlay.getId().equals( id ) ) {
        continue;
      }
      Overlay tempOverlay =
          new Overlay( overlay.getId(), overlay.getOverlayUri(), overlay.getSource(), overlay.getResourceBundleUri(),
              overlay.getPriority() );
      result.add( tempOverlay );
    }
    return result;
  }

  /**
   * Retrieve the list of plugin perspective in the platform
   *
   * @return list of <code> PluginPerspective </code>
   */
  @GET
  @Path( "/perspectives" )
  @Produces( { APPLICATION_JSON } )
  @Facet ( name = "Unsupported" )
  public ArrayList<PluginPerspective> getPluginPerpectives() {
    IPluginPerspectiveManager manager =
        PentahoSystem.get( IPluginPerspectiveManager.class, PentahoSessionHolder.getSession() ); //$NON-NLS-1$

    ArrayList<PluginPerspective> perspectives = new ArrayList<PluginPerspective>();

    for ( IPluginPerspective perspective : manager.getPluginPerspectives() ) {
      PluginPerspective pp = new PluginPerspective();
      pp.setId( perspective.getId() );
      pp.setTitle( perspective.getTitle() );
      pp.setContentUrl( perspective.getContentUrl() );
      pp.setLayoutPriority( perspective.getLayoutPriority() );
      pp.setRequiredSecurityActions( perspective.getRequiredSecurityActions() );
      pp.setResourceBundleUri( perspective.getResourceBundleUri() );
      if ( perspective.getOverlays() != null ) {
        ArrayList<Overlay> safeOverlays = new ArrayList<Overlay>();
        for ( XulOverlay orig : perspective.getOverlays() ) {
          Overlay tempOverlay =
              new Overlay( orig.getId(), orig.getOverlayUri(), orig.getSource(), orig.getResourceBundleUri(), orig
                  .getPriority() );
          safeOverlays.add( tempOverlay );
        }
        pp.setOverlays( safeOverlays );
      }
      perspectives.add( pp );
    }

    return perspectives;
  }

  /**
   * Retrieve the list of registered plugin IDs
   *
   * @return list of ids
   */
  @GET
  @Path( "/ids" )
  @Produces( { APPLICATION_JSON } )
  @Facet ( name = "Unsupported" )
  public Response getPluginIds() {
    if ( canAdminister() ) {
      IPluginManager pluginManager = PentahoSystem.get( IPluginManager.class, PentahoSessionHolder.getSession() );
      return Response.ok( new StringListWrapper( pluginManager.getRegisteredPlugins() ), MediaType.APPLICATION_JSON )
          .build();
    } else {
      return Response.status( UNAUTHORIZED ).build();
    }
  }

  /**
   * Retrieve the plugins setting with a provided setting name. This will search the plugins's settings.xml and return
   * the selected setting
   * @param pluginId (Plugin ID for the setting being searched)
   * @param settingName (Setting name of a selected plugin)
   * @return Value of the setting
   */
  @GET
  @Path( "/{pluginId}/setting/{settingName}" )
  @Produces( { APPLICATION_JSON } )
  @Facet ( name = "Unsupported" )
  public String getPluginSetting( @PathParam( "pluginId" ) String pluginId,
      @PathParam( "settingName" ) String settingName ) {
    IPluginManager pluginManager = PentahoSystem.get( IPluginManager.class, PentahoSessionHolder.getSession() ); //$NON-NLS-1$
    return (String) pluginManager.getPluginSetting( pluginId, settingName, null );
  }

  /**
   * Retrieve the list of setting of a selected setting name from all registered plugins.
   *
   * @param settingName (name of the plugin setting)
   * @return list of <code> Setting </code>
   */
  @GET
  @Path( "/settings/{settingName}" )
  @Produces( { APPLICATION_JSON } )
  @Facet ( name = "Unsupported" )
  public Response getPluginSettings( @PathParam( "settingName" ) String settingName ) {
    // A non-admin still require this setting. All other settings should be admin only
    if ( !NEW_TOOLBAR_BUTTON_SETTING.equals( settingName ) ) {
      if ( !canAdminister() ) {
        return Response.status( UNAUTHORIZED ).build();
      }
    }
    IPluginManager pluginManager = PentahoSystem.get( IPluginManager.class, PentahoSessionHolder.getSession() ); //$NON-NLS-1$
    ArrayList<Setting> settings = new ArrayList<Setting>();
    for ( String id : pluginManager.getRegisteredPlugins() ) {
      Setting s = new Setting( id, (String) pluginManager.getPluginSetting( id, settingName, null ) );
      if ( !StringUtils.isEmpty( s.getValue() ) ) {
        settings.add( s );
      }
    }
    return Response.ok( new JaxbList<Setting>( settings ), MediaType.APPLICATION_JSON ).build();
  }

  private boolean canAdminister() {
    IAuthorizationPolicy policy = PentahoSystem.get( IAuthorizationPolicy.class );
    return policy.isAllowed( RepositoryReadAction.NAME ) && policy.isAllowed( RepositoryCreateAction.NAME )
        && ( policy.isAllowed( AdministerSecurityAction.NAME ) );
  }
}
TOP

Related Classes of org.pentaho.platform.web.http.api.resources.PluginManagerResource

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.