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

Source Code of org.pentaho.platform.web.http.api.resources.services.SystemService

/*!
* 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.services;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.tree.DefaultElement;
import org.pentaho.platform.api.engine.IPentahoAclEntry;
import org.pentaho.platform.api.engine.IUserRoleListService;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.security.acls.PentahoAclEntry;
import org.pentaho.platform.web.http.api.resources.utils.SystemUtils;

import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* Service class for System endpoints
*/
public class SystemService {

  private static SystemService systemService;

  //This class does not need to be a singleton but putting a get instance method here removes the need to reproduce
  //getter code in the several resource classes grabbing thing object. Getter code is required in case the class is being
  //set through spring.
  public static SystemService getSystemService() {
    if ( systemService == null ) {
      systemService = PentahoSystem.get( SystemService.class );
      if ( systemService == null ) {
        systemService = new SystemService();
      }
    }
    return systemService;
  }

  /**
   * Returns XML for list of users in the platform.
   */
  public Document getUsers() throws ServletException, IOException, IllegalAccessException {
    if ( !canAdminister() ) {
      throw new IllegalAccessException();
    }

    IUserRoleListService service = PentahoSystem.get( IUserRoleListService.class );
    Element rootElement = new DefaultElement( "users" ); //$NON-NLS-1$
    Document doc = DocumentHelper.createDocument( rootElement );
    if ( service != null ) {
      List<String> users = service.getAllUsers();
      for ( Iterator<String> usersIterator = users.iterator(); usersIterator.hasNext(); ) {
        String username = usersIterator.next().toString();
        if ( ( null != username ) && ( username.length() > 0 ) ) {
          rootElement.addElement( "user" ).setText( username ); //$NON-NLS-1$
        }
      }
    }
    return doc;
  }

  /**
   * Returns XML for list of roles.
   */
  public Document getRoles() throws ServletException, IOException {
    IUserRoleListService service = PentahoSystem.get( IUserRoleListService.class );
    Element rootElement = new DefaultElement( "roles" ); //$NON-NLS-1$
    Document doc = DocumentHelper.createDocument( rootElement );
    if ( service != null ) {
      List<String> roles = service.getAllRoles();
      for ( Iterator<String> rolesIterator = roles.iterator(); rolesIterator.hasNext(); ) {
        String roleName = rolesIterator.next().toString();
        if ( ( null != roleName ) && ( roleName.length() > 0 ) ) {
          rootElement.addElement( "role" ).setText( roleName ); //$NON-NLS-1$
        }
      }
    }
    return doc;
  }

  /**
   * Returns XML for list of Roles for a given User.
   */
  public Document getRolesForUser( String user ) throws ServletException, IOException {
    IUserRoleListService service = PentahoSystem.get( IUserRoleListService.class );
    Element rootElement = new DefaultElement( "roles" ); //$NON-NLS-1$
    Document doc = DocumentHelper.createDocument( rootElement );
    if ( service != null ) {
      List<String> roles = service.getRolesForUser( null, user );
      for ( Iterator<String> rolesIterator = roles.iterator(); rolesIterator.hasNext(); ) {
        String roleName = rolesIterator.next().toString();
        if ( ( null != roleName ) && ( roleName.length() > 0 ) ) {
          rootElement.addElement( "role" ).setText( roleName ); //$NON-NLS-1$
        }
      }
    }
    return doc;
  }

  /**
   * Returns XML for list of Users for a given Role.
   */
  public Document getUsersInRole( String role ) throws ServletException, IOException {
    IUserRoleListService service = PentahoSystem.get( IUserRoleListService.class );
    Element rootElement = new DefaultElement( "users" ); //$NON-NLS-1$
    Document doc = DocumentHelper.createDocument( rootElement );
    if ( service != null ) {
      List<String> users = service.getUsersInRole( null, role );
      for ( Iterator<String> usersIterator = users.iterator(); usersIterator.hasNext(); ) {
        String username = usersIterator.next().toString();
        if ( ( null != username ) && ( username.length() > 0 ) ) {
          rootElement.addElement( "user" ).setText( username ); //$NON-NLS-1$
        }
      }
    }
    return doc;
  }

  /**
   * Returns XML for list of Permission.
   */
  public Document getPermissions() throws ServletException, IOException {
    Map<?, ?> validPermissionsNameMap =
        PentahoAclEntry.getValidPermissionsNameMap( IPentahoAclEntry.PERMISSIONS_LIST_ALL );
    Element rootElement = new DefaultElement( "acls" ); //$NON-NLS-1$
    Document doc = DocumentHelper.createDocument( rootElement );
    if ( validPermissionsNameMap != null ) {
      Set<?> aclsKeySet = validPermissionsNameMap.keySet();
      for ( Iterator<?> aclsIterator = aclsKeySet.iterator(); aclsIterator.hasNext(); ) {
        String aclName = aclsIterator.next().toString();
        String aclMask =
            null != validPermissionsNameMap.get( aclName ) ? validPermissionsNameMap.get( aclName ).toString() : null;

        if ( ( null != aclName ) && ( aclName.length() > 0 ) && ( null != aclMask ) && ( aclMask.length() > 0 ) ) {
          Element aclElement = rootElement.addElement( "acl" ); //$NON-NLS-1$
          aclElement.addElement( "name" ).setText( aclName ); //$NON-NLS-1$
          aclElement.addElement( "mask" ).setText( aclMask ); //$NON-NLS-1$
        }

      }
    }
    return doc;
  }

  public Document getAll() throws ServletException, IOException, IllegalAccessException {
    Document userDoc = getUsers();
    Document roleDoc = getRoles();
    Document permissionDoc = getPermissions();
    return mergeAllDocument( new Document[] { userDoc, roleDoc, permissionDoc } );
  }

  private Document mergeAllDocument( Document[] documents ) {
    Document document = DocumentHelper.createDocument();
    Element element = new DefaultElement( "content" ); //$NON-NLS-1$
    document.add( element );
    for ( Document contentDocument : documents ) {
      if ( ( contentDocument != null ) && ( contentDocument.getRootElement() != null ) ) {
        element.add( contentDocument.getRootElement() );
      }
    }
    return document;
  }

  protected boolean canAdminister() {
    return SystemUtils.canAdminister();
  }
}
TOP

Related Classes of org.pentaho.platform.web.http.api.resources.services.SystemService

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.