components/visual-panels/usermgr/src/java/vpanels/app/usermgr/com/oracle/solaris/vp/panels/usermgr/client/swing/UserManagedObject.java
author Lokanath Das <lokanath.das@oracle.com>
Thu, 16 May 2013 14:50:57 -0700
changeset 1305 d11b04684351
parent 894 8e0753ec3941
child 1410 ca9946e5736c
permissions -rw-r--r--
16808665 User Manager Panel can assign profiles, but not authenticated profiles

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */

/*
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
 */

package com.oracle.solaris.vp.panels.usermgr.client.swing;

import java.util.*;
import javax.swing.*;
import com.oracle.solaris.vp.panel.common.model.AbstractManagedObject;
import com.oracle.solaris.rad.usermgr.*;
import com.oracle.solaris.vp.util.misc.*;
import com.oracle.solaris.vp.util.misc.finder.Finder;
import com.oracle.solaris.vp.util.misc.property.*;
import com.oracle.solaris.vp.util.swing.HasIcon;

/**
 * User Managed Object represents user object
 */
@SuppressWarnings({"serial"})
public class UserManagedObject
    extends AbstractManagedObject<UserManagedObject> implements HasIcon {

    //
    // Static data
    //

    // Icons - for user, roles
    protected static final List<ImageIcon> userIcons = Finder.getIcons(
	"images/user-24.png");

    protected static final List<ImageIcon> roleIcons = Finder.getIcons(
	"images/role-24.png");

    //
    // Instance data
    //

    private UserMgrPanelDescriptor descriptor;
    private UserType type = UserType.NORMAL;
    private boolean isNewUser = false;
    private UserChangeFieldsImpl modChanges = null;

    private MutableProperty<Long> groupIdProperty =
	new LongProperty();

    private MutableProperty<String> homeDirProperty =
	new StringProperty();

    private MutableProperty<String> rightsProperty =
	new StringProperty();

    private MutableProperty<String> authRightsProperty =
	new StringProperty();

    private MutableProperty<String> rolesProperty =
	new StringProperty();

    private MutableProperty<String> groupsProperty =
	new StringProperty();

    private MutableProperty<String> authsProperty =
	new StringProperty();

    private MutableProperty<String> shellProperty =
	new StringProperty();

    private MutableProperty<String> userDescProperty =
	new StringProperty();

    private MutableProperty<Long> userIdProperty =
	new LongProperty();

    private MutableProperty<String> userNameProperty =
	new StringProperty();

    private MutableProperty<String> accountStatusProperty =
	new StringProperty();

    private MutableProperty<char[]> passProperty =
	new BasicMutableProperty<char[]>();
    {
        ChangeableAggregator aggregator = getChangeableAggregator();
	aggregator.addChangeables(groupIdProperty, homeDirProperty,
	    passProperty, shellProperty, rolesProperty, rightsProperty,
	    authRightsProperty, authsProperty, groupsProperty,
	    userDescProperty, userIdProperty, userNameProperty);
    }

    //
    // Constructors
    //

    UserManagedObject(UserMgrPanelDescriptor descriptor,
	User user, UserType type,
	char[] password, boolean bNewUser) {

	this.descriptor = descriptor;
	this.type = type;
	this.isNewUser = bNewUser;

	userNameProperty.update(user.getUsername(), true);
	userDescProperty.update(user.getDescription(), true);
	userIdProperty.update(user.getUserID(), true);
	groupIdProperty.update(user.getGroupID(), true);
	homeDirProperty.update(user.getHomeDirectory(), true);
	shellProperty.update(user.getDefaultShell(), true);

	rolesProperty.update(listToString(user.getRoles()), true);
	rightsProperty.update(listToString(user.getProfiles()), true);
	authRightsProperty.update(listToString(user.getAuthProfiles()), true);
	authsProperty.update(listToString(user.getAuths()), true);
	groupsProperty.update(listToString(user.getGroups()), true);
	accountStatusProperty.update(user.getAccountStatus() == null ? ""
		: user.getAccountStatus(), true);

	if (password != null) {
	    passProperty.update(password, true);
        }
    }

    UserManagedObject(UserMgrPanelDescriptor descriptor,
	User user, char[] password) {
	this(descriptor, user, UserType.NORMAL, password, true);
    }

    //
    // HasIcon methods
    //

    @Override
    public Icon getIcon(int height) {
	List<ImageIcon> icons = (getUserType() == UserType.NORMAL) ?
	    userIcons : roleIcons;
	return IconUtil.getClosestIcon(icons, height);
    }

    //
    // AbstractManagedObject methods
    //

    @Override
    public String getName() {
	return userNameProperty.getValue();
    }

    @Override
    public String getId() {
	return userNameProperty.getValue();
    }

    @Override
    public String toString() {
	StringBuilder sb = new StringBuilder();
	sb.append("\n\tname: ").append(getUsername())
	    .append("\n\tuid: ").append(getUserId())
	    .append("\n\tgid: ").append(getGroupId())
	    .append("\n\tdescription: ").append(getUserDescription())
	    .append("\n\thome dir: ").append(getHomedir())
	    .append("\n\tshell: ").append(getShell())
	    .append("\n\ttype: ")
	    .append(type == UserType.NORMAL ? "user" : "role")
	    .append("\n\trights: ").append(getRights())
	    .append("\n\tauth_rights: ").append(getAuthRights())
	    .append("\n\tauths: ").append(getAuths())
	    .append("\n\tgroups: ").append(getGroups())
	    .append("\n\troles: ").append(getRoles())
	    .append("\n\tstatus: ").append(getAccountStatus());
	return sb.toString();
    }

    public void setUser(User user) {

	userNameProperty.update(user.getUsername(), true);
	userDescProperty.update(user.getDescription(), true);
	userIdProperty.update(user.getUserID(), true);
	groupIdProperty.update(user.getGroupID(), true);
	homeDirProperty.update(user.getHomeDirectory(), true);
	shellProperty.update(user.getDefaultShell(), true);

	// Additional attributes
	rolesProperty.update(listToString(user.getRoles()), true);
	rightsProperty.update(listToString(user.getProfiles()), true);
	authRightsProperty.update(listToString(user.getAuthProfiles()), true);
	authsProperty.update(listToString(user.getAuths()), true);
	groupsProperty.update(listToString(user.getGroups()), true);

    }

    public void setUser(User user, char[] password) {

	setUser(user);

	passProperty.update(password, true);
    }
    //
    // UserManagedObject methods
    //

    public MutableProperty<Long> getGroupIdProperty() {
	return groupIdProperty;
    }

    public MutableProperty<String> getHomeDirProperty() {
	return homeDirProperty;
    }

    public MutableProperty<String> getRightsProperty() {
	return rightsProperty;
    }

    public MutableProperty<String> getAuthRightsProperty() {
	return authRightsProperty;
    }

    public MutableProperty<String> getRolesProperty() {
	return rolesProperty;
    }

    public MutableProperty<String> getGroupsProperty() {
	return groupsProperty;
    }

    public MutableProperty<String> getAuthsProperty() {
	return authsProperty;
    }

    public MutableProperty<String> getUserDescProperty() {
	return userDescProperty;
    }

    public MutableProperty<char[]> getPassProperty() {
	return passProperty;
    }

    public MutableProperty<String> getShellProperty() {
	return shellProperty;
    }

    public MutableProperty<Long> getUserIdProperty() {
	return userIdProperty;
    }

    public MutableProperty<String> getUserNameProperty() {
	return userNameProperty;
    }

    public UserMgrPanelDescriptor getPanelDescriptor() {
	return descriptor;
    }

    public String getUsername() {
	return userNameProperty.getValue();
    }

    public String getUserDescription() {
	return userDescProperty.getValue();
    }

    public long getUserId() {
	return userIdProperty.getValue();
    }

    public long getGroupId() {
	return groupIdProperty.getValue();
    }

    public String getHomedir() {
	return homeDirProperty.getValue();
    }

    public char[] getPassword() {
	return passProperty.getValue();
    }

    public String getShell() {
	return shellProperty.getValue();
    }

    public UserType getUserType() {
	return type;
    }

    public String getRights() {
	return rightsProperty.getValue();
    }

    public String getAuthRights() {
	return authRightsProperty.getValue();
    }

    public String getRoles() {
	return rolesProperty.getValue();
    }

    public String getGroups() {
	return groupsProperty.getValue();
    }

    public String getAuths() {
	return authsProperty.getValue();
    }

    public String getAccountStatus() {
	return accountStatusProperty.getValue();
    }

    public boolean isUserNormal() {
	return type == UserType.NORMAL;
    }

    public boolean isRole() {
	return type == UserType.ROLE;
    }

    public boolean isNewUser() {
	return isNewUser;
    }

    // Update the "auto-generated" properties for the newly created user
    public void updateUser(User user) {
	userIdProperty.update(user.getUserID(), true);
	homeDirProperty.update(user.getHomeDirectory(), true);
	this.isNewUser = false;
    }

    // Construct a new User object from the defined properties
    public User getNewUser() {

	UserImpl newUser = new UserImpl();
	newUser.setUsername(getUsername());
	newUser.setUserID(getUserId());
	newUser.setGroupID(getGroupId());
	newUser.setDescription(getUserDescription());
	if (homeDirProperty.isChanged())
	    newUser.setHomeDirectory(getHomedir());
	else // must be null
	    newUser.setHomeDirectory(null);

	newUser.setDefaultShell(getShell());

	if (getRights() != null) {
	    // System.out.println("new user rights:" + getRights());
	    newUser.setProfiles(stringToList(getRights()));
	}

	if (getAuthRights() != null) {
	    // System.out.println("new user auth rights:" + getAuthRights());
	    newUser.setAuthProfiles(stringToList(getAuthRights()));
	}
	if (getRoles() != null) {
	    // System.out.println("new user roles:" + getRoles());
	    newUser.setRoles(stringToList(getRoles()));
	}

	if (getAuths() != null) {
	    newUser.setAuths(stringToList(getAuths()));
	}

	if (getGroups() != null) {
	    newUser.setGroups(stringToList(getGroups()));
	}

	return newUser;
    }

    // Construct a User object with only modified properties set
    public User getModifiedUser() {
	boolean bChanged = false;
	UserImpl modUser = new UserImpl();
	modChanges = new UserChangeFieldsImpl();

	// check each property for changes
	if (userDescProperty.isChanged()) {
	    modUser.setDescription(getUserDescription());
	    bChanged = true;
	}
	if (shellProperty.isChanged()) {
	    modUser.setDefaultShell(getShell());
	    bChanged = true;
	}
	if (groupIdProperty.isChanged()) {
	    modUser.setGroupID(getGroupId());
	    bChanged = true;
	}
	if (passProperty.isChanged()) {
	    bChanged = true;
	}

	if (rightsProperty.isChanged()) {
	    // System.out.println("mod user rights " + getRights());
	    modUser.setProfiles(stringToList(getRights()));
	    modChanges.setProfilesChanged(true);
	    bChanged = true;
	}

	if (authRightsProperty.isChanged()) {
	    // System.out.println("mod user auth rights " + getAuthRights());
	    modUser.setAuthProfiles(stringToList(getAuthRights()));
	    modChanges.setAuthProfilesChanged(true);
	    bChanged = true;
	}

	if (rolesProperty.isChanged()) {
	    // System.out.println("mod user roles " + getRoles());
	    modUser.setRoles(stringToList(getRoles()));
	    modChanges.setRolesChanged(true);
	    bChanged = true;
	}

	if (authsProperty.isChanged()) {
	    // System.out.println("mod user auths " + getAuths());
	    modUser.setAuths(stringToList(getAuths()));
	    modChanges.setAuthsChanged(true);
	    bChanged = true;
	}

	if (groupsProperty.isChanged()) {
	    // System.out.println("mod user groups " + getGroups());
	    modUser.setGroups(stringToList(getGroups()));
	    modChanges.setGroupsChanged(true);
	    bChanged = true;
	}

	if (bChanged) {
	    modUser.setUsername(getUsername());
	} else {
	    modUser = null;
	}

	return modUser;
    }

    public String listToString(List<String> list) {
	String str;

	if (list == null) {
	    return ("");
	}

	if (list.size() > 0) {
		str = list.get(0);
	} else {
		str = "";
	}

	for (int i = 1; i < list.size(); i++) {
	    str = str.concat(",");
	    str = str.concat(list.get(i));
        }

	return (str);
    }

    public List<String> stringToList(String str) {
	List<String> list = new ArrayList<String>();
	String[] strings = str.split(",");

	for (String s : strings) {
	    list.add(s);
        }

	return (list);
    }

    public UserChangeFieldsImpl getModifiedChanges() {
        return (modChanges);
    }
}