/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package org.glassfish.admingui.common.handlers;
import java.util.ArrayList;
import java.util.List;
/**
* <p> Tag Class.</p>
*
* @author Ken Paulsen (ken.paulsen@sun.com)
*/
public class Tag implements java.io.Serializable {
private static final long serialVersionUID = 7437635853139196986L;
private String tagViewId = null;
private String tagName = null;
private String displayName = null;
private List<String> users = null;
/**
* <p> Default constructor.</p>
*/
Tag() {
}
/**
* <p> The constructor that should normally be used.</p>
*/
public Tag(String tagName, String tagViewId, String displayName, String user) {
this.tagName = tagName;
this.tagViewId = tagViewId;
this.displayName = displayName;
if (user != null) {
this.users = new ArrayList<String>();
this.users.add(user);
}
}
/**
* <p> Allows an additional user to be added as a Tag creator.</p>
*/
public void addUser(String name) {
if (users == null) {
users = new ArrayList<String>();
}
users.add(name);
}
/**
* <p> Provides access to all the users that have created this Tag. This
* may be null.</p>
*/
public List<String> getUsers() {
return users;
}
/**
* <p> Checks to see if the given user is an owner of this Tag.</p>
*/
public boolean containsUser(String name) {
return (users == null) ? false : users.contains(name);
}
/**
* <p> This method ensures the specified <code>user</code> is removed
* from the list of users for this <code>Tag</code>.</p>
*
* <p> While a <code>Tag</code> is of little or no use when 0 users own
* the <code>Tag</code>, it is not the responsibility of this method
* to remove the <code>Tag</code> if this state occurs as a result of
* a call to this method.</p>
*
* @return The <code>List</code> of users remaining after removing this
* user, or <code>null</code> if none.
*/
public List<String> removeUser(String name) {
if (users != null) {
users.remove(name);
if (users.size() == 0) {
users = null;
}
}
return users;
}
/**
* <p> This implementation of equals only checks the tagName and the
* tagViewId for equality. This means 2 tags with different user
* Lists are still considered equal. The Display Name is also of no
* importance to this implementation of equality.</p>
*/
@Override
public boolean equals(Object obj) {
boolean result = false;
if (obj instanceof Tag) {
Tag testTag = (Tag) obj;
result = getTagName().equals(testTag.getTagName()) && getTagViewId().equals(testTag.getTagViewId());
}
return result;
}
@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + (this.tagViewId != null ? this.tagViewId.hashCode() : 0);
hash = 89 * hash + (this.tagName != null ? this.tagName.hashCode() : 0);
hash = 89 * hash + (this.displayName != null ? this.displayName.hashCode() : 0);
return hash;
}
/**
* <p> String representation of this Tag.</p>
*/
@Override
public String toString() {
return "[" + getTagName() + ", " + getTagViewId() + ", " + getDisplayName() + ", Users: {" + users + "}]";
}
/**
* <p> This provides access to the tag name.</p>
*/
public String getTagName() {
return tagName;
}
/**
* <p> This provides access to the TagViewId value.</p>
*/
public String getTagViewId() {
return tagViewId;
}
/**
* <p> This returns a <code>String</code> that is meaningful to the user
* which represents the content of this <code>Tag</code> instance.</p>
*/
public String getDisplayName() {
// FIXME: I have I18N concerns about this... perhaps it's acceptible to
// FIXME: store a String localized at the time the page is tagged.
// FIXME: Multiple language environments may not like this. To fix
// FIXME: this correctly, we not only need the ValueExpression (i.e.
// FIXME: #{i18n.foo}), but we also need the resource bundle to use.
return displayName;
}
}