001: /*
002: * Copyright (C) 2005 Jeff Tassin
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2.1 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018:
019: package com.jeta.swingbuilder.store;
020:
021: import java.awt.Color;
022: import java.io.Externalizable;
023: import java.io.IOException;
024: import java.util.ArrayList;
025: import java.util.Iterator;
026:
027: import com.jeta.forms.logger.FormsLogger;
028: import com.jeta.forms.store.properties.ColorHolder;
029: import com.jeta.open.registry.JETARegistry;
030: import com.jeta.swingbuilder.common.ComponentNames;
031: import com.jeta.swingbuilder.interfaces.app.ObjectStore;
032:
033: /**
034: * Model for storing recent colors selected with the JETAColorChooser
035: *
036: * @author Jeff Tassin
037: */
038: public class RecentColorsModel implements Externalizable {
039: static final long serialVersionUID = 6974055371373328348L;
040:
041: public static final String COMPONENT_ID = "recent.colors.model";
042:
043: /**
044: * A list of ColorHolder objects.
045: */
046: private ArrayList m_colors = new ArrayList();
047: private int m_size = 30;
048:
049: /**
050: * verion of this class
051: */
052: public static final int VERSION = 1;
053:
054: public RecentColorsModel() {
055: }
056:
057: private RecentColorsModel(int size) {
058: m_size = size;
059: }
060:
061: public static RecentColorsModel createInstance(int size) {
062: RecentColorsModel model = null;
063: try {
064: ObjectStore os = (ObjectStore) JETARegistry
065: .lookup(ComponentNames.APPLICATION_STATE_STORE);
066: model = (RecentColorsModel) os.load(COMPONENT_ID);
067: if (model != null) {
068: model.m_size = size;
069: if (size < model.m_colors.size()) {
070: ArrayList newlist = new ArrayList();
071: for (int index = 0; index < size; index++) {
072: newlist.add(model.m_colors.get(index));
073: }
074: model.m_colors = newlist;
075: }
076: }
077: } catch (Exception e) {
078: FormsLogger.severe(e);
079: }
080:
081: if (model == null)
082: model = new RecentColorsModel(size);
083: return model;
084: }
085:
086: /**
087: * Return the number of colors in this model
088: */
089: public int size() {
090: return m_colors.size();
091: }
092:
093: /**
094: * Returns the ColorHolder at the given index. If the index is invalid null
095: * is returned.
096: */
097: public ColorHolder getColor(int index) {
098: return getColor(index, null);
099: }
100:
101: /**
102: * Returns the ColorHolder at the given index. If the index is invalid the
103: * defaultColor is returned.
104: *
105: * @param index
106: * the index
107: * @param defaultColor
108: * the color to return if the index is outside the valid range or
109: * if a null is found at the given index.
110: */
111: public ColorHolder getColor(int index, ColorHolder defaultColor) {
112: if (index < 0 || index >= size())
113: return defaultColor;
114:
115: ColorHolder result = (ColorHolder) m_colors.get(index);
116: return result == null ? defaultColor : result;
117: }
118:
119: public static void save(RecentColorsModel model) {
120: try {
121: ObjectStore os = (ObjectStore) JETARegistry
122: .lookup(ComponentNames.APPLICATION_STATE_STORE);
123: os.store(COMPONENT_ID, model);
124: } catch (Exception e) {
125: FormsLogger.severe(e);
126: }
127: }
128:
129: public void setRecentColor(Color c) {
130: setRecentColor(new ColorHolder(c));
131: }
132:
133: public void setRecentColor(ColorHolder colorHolder) {
134: if (colorHolder == null)
135: return;
136:
137: Iterator iter = m_colors.iterator();
138: while (iter.hasNext()) {
139: ColorHolder ch = (ColorHolder) iter.next();
140: if (colorHolder.equals(ch))
141: iter.remove();
142: }
143: m_colors.add(0, colorHolder);
144:
145: if (m_colors.size() > m_size)
146: m_colors.remove(m_colors.size() - 1);
147: }
148:
149: /**
150: * Externalizable Implementation
151: */
152: public void readExternal(java.io.ObjectInput in)
153: throws ClassNotFoundException, IOException {
154: int version = in.readInt();
155: m_colors = (ArrayList) in.readObject();
156: m_size = in.readInt();
157: }
158:
159: /**
160: * Externalizable Implementation
161: */
162: public void writeExternal(java.io.ObjectOutput out)
163: throws IOException {
164: out.writeInt(VERSION);
165: out.writeObject(m_colors);
166: out.writeInt(m_size);
167: }
168:
169: }
|