Package com.substanceofcode.rssreader.businessentities

Source Code of com.substanceofcode.rssreader.businessentities.RssFeedStore

/*
* RssFeedStore.java
*
* Copyright (C) 2005-2006 Irving Bunton
* http://www.substanceofcode.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*/

// Expand to define logging define
//#define DNOLOGGING
// Expand to define itunes define
//#define DNOITUNES
package com.substanceofcode.rssreader.businessentities;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;

import com.substanceofcode.rssreader.businessentities.RssItunesFeed;
import com.substanceofcode.rssreader.businessentities.RssItunesItem;
import com.substanceofcode.utils.CauseException;
import com.substanceofcode.utils.CauseMemoryException;

//#ifdef DLOGGING
//@import net.sf.jlogmicro.util.logging.Logger;
//@import net.sf.jlogmicro.util.logging.Level;
//#endif

/**
* RssFeedStore class stores feeds and manages different ways to store to save
* memory.
*
* @author Irving Bunton
*/
final public class RssFeedStore extends Hashtable {
   
  private boolean m_saveMemoryEnabled;
  private RssItunesFeed m_feed = null;

  //#ifdef DLOGGING
//@    private Logger m_logger = Logger.getLogger("RssFeedStore");
//@    private boolean m_fineLoggable = m_logger.isLoggable(Level.FINE);
//@    private boolean m_finestLoggable = m_logger.isLoggable(Level.FINEST);
  //#endif
   
    /** Creates a new instance of RssFeedStore */
    public RssFeedStore(boolean saveMemoryEnabled) {
    super();
    m_saveMemoryEnabled = saveMemoryEnabled;
  }

    /** Creates a new instance of RssFeedStore */
    public RssFeedStore(boolean saveMemoryEnabled, int initialCapacity){
    super(initialCapacity);
    m_saveMemoryEnabled = saveMemoryEnabled;
    }

  /**
   * Put feed store string into store and use compact to save memory or full
   * class
   *
   * @param name - Name of feed to put into store
   * @param storeString - Feed store string to put into store
   * @author Irv Bunton
   */
  final public void put(String name, String storeString, boolean encoded)
  throws CauseMemoryException, CauseException {
    if (m_saveMemoryEnabled) {
      if (encoded) {
        super.put(name, RssItunesFeed.getStoreStringInfo(true, false,
              storeString, encoded).getStoreString());
      } else {
        super.put(name, storeString);
      }
    } else {
      super.put(name, RssItunesFeed.deserialize(encoded, storeString));
    }
  }

  /**
   * Put feed into store and use compact to save memory or full class
   *
   * @param name - Name of feed to put into store
   * @param feed - Feed to put into store
   * @author Irv Bunton
   */
  final public void put(String name, RssItunesFeed feed)
  throws CauseMemoryException, CauseException {
    if (m_saveMemoryEnabled) {
      super.put(name, feed.getStoreString(true, true, false));
    } else {
      super.put(name, feed);
    }
  }

  /**
   * Put feed into store and use compact to save memory or full class
   *
   * @param feed - Feed to put into store
   * @author Irv Bunton
   */
  final public void put(RssItunesFeed feed)
  throws CauseMemoryException, CauseException {
    put(feed.getName(), feed);
  }

  /**
   * Get version of RssItunesFeed from feed name.  If allowWrite, the feed
   * can be modified.  The next get will cause the previous changed feed to
   * be stored.
   *
   * @param name - feed name
   * @param allowWrite - true to allow right
   * @return    RssItunesFeed - feed for feed name
   * @author Irv Bunton
   */
  final private Object get(final String name, final boolean getStore,
                  final boolean allowWrite)
  throws CauseMemoryException, CauseException {
    Object obj = super.get(name);
    if (obj == null) {
      return null;
    }
    RssItunesFeed cfeed = null;
    String cstore = null;
    if (obj instanceof RssItunesFeed) {
      if (getStore) {
        cstore = ((RssItunesFeed)obj).getStoreString(true, true, false);
      } else {
        cfeed = (RssItunesFeed)obj;
      }
    } else {
      if (getStore) {
        cstore = (String)obj;
      } else {
        cfeed = RssItunesFeed.deserialize( false, (String)obj );
      }
    }
    if (m_feed != null) {
      put(m_feed);
    }
    if (allowWrite && !getStore) {
      m_feed = cfeed;
    } else {
      m_feed = null;
    }
    if (getStore) {
      return cstore;
    } else {
      return cfeed;
    }
  }
   
  /**
   * Get read only version of RssItunesFeed from feed name.  If this returned
   * feed is modified, it will not change what is stored.  One can change what
   * is stored by doing put of the modified feed.
   *
   * @param name - feed name
   * @return    RssItunesFeed - feed for feed name
   * @author Irv Bunton
   */
  final public RssItunesFeed getRo(final String name)
  throws CauseMemoryException, CauseException {
    return (RssItunesFeed)get(name, false, false);
  }

  /**
   * Get read only version of RssItunesFeed store string from feed name.
   * If this returned store string is modified, it will not change what is
   * stored.  One can change what is stored by doing put of the modified feed.
   *
   * @param name - feed name
   * @return    String - Store string for feed name
   * @author Irv Bunton
   */
  final public String getRoStoreStr(final String name)
  throws CauseMemoryException, CauseException {
    return (String)get(name, true, false);
  }

  /**
   * Get update version of RssItunesFeed from feed name.  If this returned
   * feed is modified, it will change what is stored.
   *
   * @param name - feed name
   * @return    RssItunesFeed - feed for feed name
   * @author Irv Bunton
   */
  final public RssItunesFeed get(final String name)
  throws CauseMemoryException, CauseException {
    return (RssItunesFeed)get(name, false, true);
  }

  /* Free memory by getting rid of items. */
  final public void freeFeedItems()
  throws CauseMemoryException, CauseException {
    Enumeration keyEnum = super.keys();
    int ic = 1;
    while(keyEnum.hasMoreElements()) {
      final String fname = (String)keyEnum.nextElement();
      RssItunesFeed feed = (RssItunesFeed)get(fname);
      feed.setItems(null);
      feed.setItems(new Vector());
      put(fname, feed);
    }
  }

    public void setSaveMemoryEnabled(boolean saveMemoryEnabled) {
        this.m_saveMemoryEnabled = saveMemoryEnabled;
    }

    public boolean isSaveMemoryEnabled() {
        return (m_saveMemoryEnabled);
    }

}
TOP

Related Classes of com.substanceofcode.rssreader.businessentities.RssFeedStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.