/* * 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 implements HasIcon { // // Static data // // Icons - for user, roles protected static final List userIcons = Finder.getIcons( "images/user-24.png"); protected static final List 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 groupIdProperty = new LongProperty(); private MutableProperty homeDirProperty = new StringProperty(); private MutableProperty rightsProperty = new StringProperty(); private MutableProperty authRightsProperty = new StringProperty(); private MutableProperty rolesProperty = new StringProperty(); private MutableProperty groupsProperty = new StringProperty(); private MutableProperty authsProperty = new StringProperty(); private MutableProperty shellProperty = new StringProperty(); private MutableProperty userDescProperty = new StringProperty(); private MutableProperty userIdProperty = new LongProperty(); private MutableProperty userNameProperty = new StringProperty(); private MutableProperty accountStatusProperty = new StringProperty(); private MutableProperty passProperty = new BasicMutableProperty(); { 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 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 getGroupIdProperty() { return groupIdProperty; } public MutableProperty getHomeDirProperty() { return homeDirProperty; } public MutableProperty getRightsProperty() { return rightsProperty; } public MutableProperty getAuthRightsProperty() { return authRightsProperty; } public MutableProperty getRolesProperty() { return rolesProperty; } public MutableProperty getGroupsProperty() { return groupsProperty; } public MutableProperty getAuthsProperty() { return authsProperty; } public MutableProperty getUserDescProperty() { return userDescProperty; } public MutableProperty getPassProperty() { return passProperty; } public MutableProperty getShellProperty() { return shellProperty; } public MutableProperty getUserIdProperty() { return userIdProperty; } public MutableProperty 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 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 stringToList(String str) { List list = new ArrayList(); String[] strings = str.split(","); for (String s : strings) { list.add(s); } return (list); } public UserChangeFieldsImpl getModifiedChanges() { return (modChanges); } }