001: /*
002: * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/db/CategoryCache.java,v 1.14 2007/12/17 09:09:40 minhnn Exp $
003: * $Author: minhnn $
004: * $Revision: 1.14 $
005: * $Date: 2007/12/17 09:09:40 $
006: *
007: * ====================================================================
008: *
009: * Copyright (C) 2002-2007 by MyVietnam.net
010: *
011: * All copyright notices regarding mvnForum MUST remain
012: * intact in the scripts and in the outputted HTML.
013: * The "powered by" text/logo with a link back to
014: * http://www.mvnForum.com and http://www.MyVietnam.net in
015: * the footer of the pages MUST remain visible when the pages
016: * are viewed on the internet or intranet.
017: *
018: * This program is free software; you can redistribute it and/or modify
019: * it under the terms of the GNU General Public License as published by
020: * the Free Software Foundation; either version 2 of the License, or
021: * any later version.
022: *
023: * This program is distributed in the hope that it will be useful,
024: * but WITHOUT ANY WARRANTY; without even the implied warranty of
025: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
026: * GNU General Public License for more details.
027: *
028: * You should have received a copy of the GNU General Public License
029: * along with this program; if not, write to the Free Software
030: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031: *
032: * Support can be obtained from support forums at:
033: * http://www.mvnForum.com/mvnforum/index
034: *
035: * Correspondence and Marketing Questions can be sent to:
036: * info at MyVietnam net
037: *
038: * @author: Minh Nguyen
039: * @author: Mai Nguyen
040: */
041: package com.mvnforum.db;
042:
043: import java.util.*;
044:
045: import net.myvietnam.mvncore.exception.DatabaseException;
046: import net.myvietnam.mvncore.exception.ObjectNotFoundException;
047: import net.myvietnam.mvncore.util.DateUtil;
048:
049: import org.apache.commons.logging.Log;
050: import org.apache.commons.logging.LogFactory;
051:
052: import com.mvnforum.MVNForumConfig;
053: import com.whirlycott.cache.*;
054:
055: public class CategoryCache {
056:
057: private static Log log = LogFactory.getLog(CategoryCache.class);
058:
059: public static final long TIME_OUT = DateUtil.HOUR;
060:
061: // static singleton variable
062: static private CategoryCache instance = new CategoryCache();
063:
064: // instance variable
065: private Cache cache;
066:
067: public CategoryCache() {
068: //Use the cache manager to create the default cache
069: try {
070: if (MVNForumConfig.getEnableCacheCategory()) {
071: cache = CacheManager.getInstance().getCache("category");
072: }
073: } catch (CacheException ex) {
074: log
075: .error(
076: "Cannot get the WhirlyCache. Category caching is disabled.",
077: ex);
078: } catch (LinkageError e) {
079: // @todo: Should be never throw
080: log
081: .error(
082: "Cannot get the WhirlyCache caused by Package Conflict. Category caching is disabled.",
083: e);
084: }
085: }
086:
087: /**
088: * Returns the single instance
089: * @return CategoryCache : the singleton instance.
090: *
091: * NOTE: if use normal singleton pattern, this method should be synchronized
092: */
093: static public CategoryCache getInstance() {
094: return instance;
095: }
096:
097: public String getEfficiencyReport() {
098: String result = "No report";
099: if (cache == null) {
100: if (MVNForumConfig.getEnableCacheCategory() == false) {
101: result = "Cache is disabled.";
102: } else {
103: result = "Cache cannot be inited";
104: }
105: } else if (cache instanceof CacheDecorator) {
106: result = ((CacheDecorator) cache).getEfficiencyReport();
107: }
108: return result;
109: }
110:
111: public void clear() {
112: if (cache != null) {
113: cache.clear();
114: }
115: }
116:
117: // instance variable
118: // private List beanArray = null;
119:
120: /**
121: * IMPORTANT NOTE: The caller must not alter the returned collection.
122: * Any attempt to modify it will throw an <code>UnsupportedOperationException</code>.
123: */
124: public List getBeans() throws DatabaseException {
125: List result = null;
126: if (cache != null) {
127: StringBuffer buffer = new StringBuffer(128);
128: buffer.append("getBeans");
129: String key = buffer.toString();
130: result = (List) cache.retrieve(key);
131: if (result == null) {
132: result = (List) DAOFactory.getCategoryDAO()
133: .getCategories();
134: cache.store(key, result, TIME_OUT);
135: }
136: } else {
137: result = (List) DAOFactory.getCategoryDAO().getCategories();
138: }
139: return Collections.unmodifiableList(result);
140: }
141:
142: public CategoryBean getBean(int categoryID)
143: throws DatabaseException, ObjectNotFoundException {
144:
145: // ensureNewData();
146: List beans = getBeans(); // We do not want the list to change in the process.
147:
148: int size = beans.size();
149: for (int i = 0; i < size; i++) {
150: CategoryBean bean = (CategoryBean) beans.get(i);
151: if (bean.getCategoryID() == categoryID) {
152: return bean;
153: }
154: }
155: // @todo : localize me
156: throw new ObjectNotFoundException(
157: "Cannot find the row in table Category "
158: + "where primary key = (" + categoryID + ").");
159: }
160:
161: public CategoryBean getBean(String categoryName)
162: throws DatabaseException, ObjectNotFoundException {
163:
164: // ensureNewData();
165: List beans = getBeans(); // We do not want the list to change in the process.
166:
167: for (Iterator it = beans.iterator(); it.hasNext();) {
168: CategoryBean bean = (CategoryBean) it.next();
169: if (bean.getCategoryName().equals(categoryName)) {
170: return bean;
171: }
172: }
173: // @todo : localize me
174: throw new ObjectNotFoundException(
175: "Cannot find a category with the given name: "
176: + categoryName);
177: }
178:
179: }
|