001 /* 002 * $Id: DefaultUserNameStore.java 3253 2009-02-09 14:54:04Z kschaefe $ 003 * 004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, 005 * Santa Clara, California 95054, U.S.A. All rights reserved. 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021 package org.jdesktop.swingx.auth; 022 023 import java.util.prefs.Preferences; 024 025 /** 026 * Saves the user names in Preferences. Because any string could be part 027 * of the user name, for every user name that must be saved a new Preferences 028 * key/value pair must be stored. 029 * 030 * @author Bino George 031 * @author rbair 032 */ 033 public class DefaultUserNameStore extends UserNameStore { 034 /** 035 * The key for one of the preferences 036 */ 037 private static final String USER_KEY = "usernames"; 038 /** 039 */ 040 private static final String NUM_KEY = "usernames.length"; 041 /** 042 * The preferences node 043 */ 044 private Preferences prefs; 045 /** 046 * Contains the user names. Since the list of user names is not 047 * frequently updated, there is no penalty in storing the values 048 * in an array. 049 */ 050 private String[] userNames; 051 052 /** 053 * Creates a new instance of DefaultUserNameStore 054 */ 055 public DefaultUserNameStore() { 056 userNames = new String[0]; 057 } 058 059 /** 060 * Loads the user names from Preferences 061 */ 062 public void loadUserNames() { 063 initPrefs(); 064 if (prefs != null) { 065 int n = prefs.getInt(NUM_KEY, 0); 066 String[] names = new String[n]; 067 for (int i = 0; i < n; i++) { 068 names[i] = prefs.get(USER_KEY + "." + i, null); 069 } 070 setUserNames(names); 071 } 072 } 073 074 /** 075 * Saves the user names to Preferences 076 */ 077 public void saveUserNames() { 078 initPrefs(); 079 if (prefs != null) { 080 prefs.putInt(NUM_KEY, userNames.length); 081 for (int i = 0; i < userNames.length; i++) { 082 prefs.put(USER_KEY + "." + i, userNames[i]); 083 } 084 } 085 } 086 087 /** 088 * {@inheritDoc} 089 */ 090 public String[] getUserNames() { 091 String[] copy = new String[userNames.length]; 092 System.arraycopy(userNames, 0, copy, 0, userNames.length); 093 094 return copy; 095 } 096 097 /** 098 * {@inheritDoc} 099 */ 100 public void setUserNames(String[] userNames) { 101 userNames = userNames == null ? new String[0] : userNames; 102 String[] old = getUserNames(); 103 this.userNames = userNames; 104 firePropertyChange("userNames", old, getUserNames()); 105 } 106 107 /** 108 * Add a username to the store. 109 * @param name 110 */ 111 public void addUserName(String name) { 112 if (!containsUserName(name)) { 113 String[] newNames = new String[userNames.length + 1]; 114 for (int i=0; i<userNames.length; i++) { 115 newNames[i] = userNames[i]; 116 } 117 newNames[newNames.length - 1] = name; 118 setUserNames(newNames); 119 } 120 } 121 122 /** 123 * Removes a username from the list. 124 * 125 * @param name 126 */ 127 public void removeUserName(String name) { 128 if (containsUserName(name)) { 129 String[] newNames = new String[userNames.length - 1]; 130 int index = 0; 131 for (String s : userNames) { 132 if (!s.equals(name)) { 133 newNames[index++] = s; 134 } 135 } 136 setUserNames(newNames); 137 } 138 } 139 140 /** 141 * {@inheritDoc} 142 */ 143 public boolean containsUserName(String name) { 144 for (String s : userNames) { 145 if (s.equals(name)) { 146 return true; 147 } 148 } 149 return false; 150 } 151 152 /** 153 * @return Returns Preferences node in which the user names will be stored 154 */ 155 public Preferences getPreferences() { 156 return prefs; 157 } 158 159 /** 160 * @param prefs the Preferences node to store the user names in. If null, 161 * or undefined, then they are stored in /org/jdesktop/swingx/auth/DefaultUserNameStore. 162 */ 163 public void setPreferences(Preferences prefs) { 164 Preferences old = getPreferences(); 165 initPrefs(); 166 this.prefs = prefs; 167 firePropertyChange("preferences", old, getPreferences()); 168 if (this.prefs != old) { 169 //if prefs is null, this next method will create the default prefs node 170 loadUserNames(); 171 } 172 } 173 174 /** 175 * Creates the default prefs node 176 */ 177 private void initPrefs() { 178 if (prefs == null) { 179 prefs = Preferences.userNodeForPackage(DefaultUserNameStore.class); 180 prefs = prefs.node("DefaultUserNameStore"); 181 } 182 } 183 }