/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
package org.pentaho.di.ui.repository.repositoryexplorer.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.pentaho.di.repository.IUser;
import org.pentaho.di.repository.ObjectRecipient.Type;
import org.pentaho.di.repository.RepositorySecurityManager;
import org.pentaho.ui.xul.XulEventSourceAdapter;
public class UISecurity extends XulEventSourceAdapter {
public static enum Mode {
ADD, EDIT, EDIT_MEMBER
}
private Type selectedDeck;
protected IUIUser selectedUser;
private int selectedUserIndex;
protected List<IUIUser> userList;
public UISecurity() {
userList = new ArrayList<IUIUser>();
}
public UISecurity( RepositorySecurityManager rsm ) throws Exception {
this();
if ( rsm != null && rsm.getUsers() != null ) {
for ( IUser user : rsm.getUsers() ) {
userList.add( UIObjectRegistry.getInstance().constructUIRepositoryUser( user ) );
}
Collections.sort( userList );
this.firePropertyChange( "userList", null, userList );
}
}
public Type getSelectedDeck() {
return selectedDeck;
}
public void setSelectedDeck( Type selectedDeck ) {
this.selectedDeck = selectedDeck;
this.firePropertyChange( "selectedDeck", null, selectedDeck );
}
public int getSelectedUserIndex() {
return selectedUserIndex;
}
public void setSelectedUserIndex( int selectedUserIndex ) {
this.selectedUserIndex = selectedUserIndex;
this.firePropertyChange( "selectedUserIndex", null, selectedUserIndex );
}
public IUIUser getSelectedUser() {
return selectedUser;
}
public void setSelectedUser( IUIUser selectedUser ) {
this.selectedUser = selectedUser;
this.firePropertyChange( "selectedUser", null, selectedUser );
setSelectedUserIndex( getIndexOfUser( selectedUser ) );
}
public List<IUIUser> getUserList() {
return userList;
}
public void setUserList( List<IUIUser> userList ) {
this.userList.clear();
this.userList.addAll( userList );
this.firePropertyChange( "userList", null, userList );
}
public void updateUser( IUIUser userToUpdate ) {
IUIUser user = getUser( userToUpdate.getName() );
user.setDescription( userToUpdate.getDescription() );
this.firePropertyChange( "userList", null, userList );
setSelectedUser( user );
}
public void addUser( IUIUser userToAdd ) {
userList.add( userToAdd );
this.firePropertyChange( "userList", null, userList );
setSelectedUser( userToAdd );
}
public void removeUser( String name ) {
removeUser( getUser( name ) );
}
public void removeUser( IUIUser userToRemove ) {
int index = getIndexOfUser( userToRemove );
userList.remove( userToRemove );
this.firePropertyChange( "userList", null, userList );
if ( index - 1 >= 0 ) {
setSelectedUser( getUserAtIndex( index - 1 ) );
}
}
protected IUIUser getUser( String name ) {
for ( IUIUser user : userList ) {
if ( user.getName().equals( name ) ) {
return user;
}
}
return null;
}
private IUIUser getUserAtIndex( int index ) {
return this.userList.get( index );
}
private int getIndexOfUser( IUIUser ru ) {
for ( int i = 0; i < this.userList.size(); i++ ) {
IUIUser user = this.userList.get( i );
if ( ru.getName().equals( user.getName() ) ) {
return i;
}
}
return -1;
}
}