/* * Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of Business Objects nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Category.java * Creation date: Oct 29, 2002. * By: Edward Lam */ package org.openquark.gems.client.browser; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import org.openquark.cal.services.GemEntity; /** * A GemCategory is a simple encapsulation of a list of entities, plus a key to represent the category. * A simple category key might be its name (a string). * @author Edward Lam */ public class GemCategory { /** * A container that represents the object key used by the GemCategorizer * @author Ken Wong * Creation Date: December 16th 2002 */ public static final class CategoryKey<T>{ /** the actual key used */ private final T value; /** * Default constructor for the CategoryKey class * @param value */ public CategoryKey(T value) { this.value = value; } /** * Returns the string representation of this key * @return String */ public String getName() { return value.toString(); } /** * Returns the value that this object is holding on to */ public T getValue() { return value; } /** * Allows the equality evaluation of two keys. * Really just calls the equals method of the objects * @return true if they keys are the same, false otherwise */ @Override public boolean equals(Object obj) { if (obj instanceof CategoryKey) { return getValue().equals(((CategoryKey<?>)obj).getValue()); } return false; } /** * Allows the hashing of the key. * Really just calls the hashCode method of the objects * @return int */ @Override public int hashCode() { return value.hashCode(); } /** * {@inheritDoc} */ @Override public String toString() { return "CategoryKey (" + value.toString() + ")"; } } /** The key representing the category. */ private final CategoryKey<?> categoryKey; /** The list of items in the category. */ private final List<GemEntity> categoryItems; /** * Constructor for an empty GemCategory. * @param categoryKey the key representing the category. */ public GemCategory(CategoryKey<?> categoryKey) { this.categoryKey = categoryKey; categoryItems = Collections.emptyList(); } /** * Constructor for a GemCategory. * @param categoryKey the key representing the category. * @param categoryItems the items in the category. */ public GemCategory(CategoryKey<?> categoryKey, Collection<GemEntity> categoryItems) { this.categoryKey = categoryKey; this.categoryItems = new ArrayList<GemEntity>(categoryItems); } /** * Get the category key. * @return CategoryKey the key. */ public CategoryKey<?> getCategoryKey() { return categoryKey; } /** * Get the items in the category. * @return List the items in the category. */ public List<GemEntity> getCategoryItems() { return new ArrayList<GemEntity>(categoryItems); } /** * {@inheritDoc} */ @Override public String toString() { return "GemCategory " + categoryKey.getName() + " (" + categoryItems.size() + " items)"; } }