- All Implemented Interfaces:
DtoFactory<UserName>,FastExternalizable,Internable<User.Name>,Externalizable,Serializable,Comparable<User.Name>
- Enclosing class:
User
User names must:
- Be non-null
- Be non-empty
- Be between 1 and 32 characters
- Must start with
[a-z] - Uses only ASCII 0x21 through 0x7f, excluding
space , : ( ) [ ] ' " | & ; A-Z \ / - If contains any @ symbol, must also be a valid email address. Please note that the reverse is not implied - email addresses may exist that are not valid user names.
- May not start with cyrus@
- TODO: May only end on "$"?
- TODO: "+" is allowed, "lost+found" should be specifically disallowed due to /home/lost+found on mount points.
- Must be a valid
User.Name- this is implied by the above rules
- Author:
- AO Industries, Inc.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe maximum length of a Linux username.Fields inherited from class com.aoindustries.aoserv.client.account.User.Name
MAX_LENGTH, name -
Constructor Summary
Constructors -
Method Summary
Methods inherited from class com.aoindustries.aoserv.client.account.User.Name
compareTo, equals, hashCode, readExternal, toString, writeExternalMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.io.Externalizable
readExternal, writeExternal
-
Field Details
-
LINUX_NAME_MAX_LENGTH
public static final int LINUX_NAME_MAX_LENGTHThe maximum length of a Linux username.Implementation Note:
32 characters- See Also:
-
-
Constructor Details
-
Name
- Throws:
ValidationException
-
Name
- Parameters:
name- Does not validate, should only be used with a known valid value.
-
Name
Deprecated.Only required for implementation, do not use directly.- See Also:
-
-
Method Details
-
validate
Validates aUsername. -
valueOf
- Parameters:
name- whennull, returnsnull- Throws:
ValidationException
-
validate
- Overrides:
validatein classUser.Name- Throws:
ValidationException
-
intern
Description copied from class:User.NameInterns this name much in the same fashion asString.intern().Because this has subtypes, two
User.Namethat areUser.Name.equals(java.lang.Object)may not necessarily return the same instance object after interning. Thus, unless you know objects are of the same class,User.Name.equals(java.lang.Object)should still be used for equality check instead of theobj1 == obj2shortcut.To more efficiently check post-interned equivalence, one could also do
obj1 == obj2 || (obj1.getClass() != obj2.getClass() && obj1.equals(obj2)), but is it worth it?And then if we abuse the fact that interned user ids have an interned name, one could check equivalence of post-interned user ids as
obj1.getId() == obj2.getId(), but once again, is it worth it? Just callUser.Name.equals(java.lang.Object).- Specified by:
internin interfaceInternable<User.Name>- Overrides:
internin classUser.Name- See Also:
-
getDto
- Specified by:
getDtoin interfaceDtoFactory<UserName>- Overrides:
getDtoin classUser.Name
-
getSerialVersionUID
public long getSerialVersionUID()- Specified by:
getSerialVersionUIDin interfaceFastExternalizable- Overrides:
getSerialVersionUIDin classUser.Name
-
