001: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
002:
003: This file is part of the db4o open source object database.
004:
005: db4o is free software; you can redistribute it and/or modify it under
006: the terms of version 2 of the GNU General Public License as published
007: by the Free Software Foundation and as clarified by db4objects' GPL
008: interpretation policy, available at
009: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
010: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
011: Suite 350, San Mateo, CA 94403, USA.
012:
013: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
014: WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: for more details.
017:
018: You should have received a copy of the GNU General Public License along
019: with this program; if not, write to the Free Software Foundation, Inc.,
020: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
021: package com.db4o.config;
022:
023: import java.io.*;
024:
025: /**
026: * Defines a scope of applicability of a config setting.<br><br>
027: * Some of the configuration settings can be either: <br><br>
028: * - enabled globally; <br>
029: * - enabled individually for a specified class; <br>
030: * - disabled.<br><br>
031: * @see com.db4o.config.Configuration#generateUUIDs(ConfigScope)
032: * @see com.db4o.config.Configuration#generateVersionNumbers(ConfigScope)
033: */
034: public final class ConfigScope implements Serializable {
035:
036: public static final int DISABLED_ID = -1;
037: public static final int INDIVIDUALLY_ID = 1;
038: public static final int GLOBALLY_ID = Integer.MAX_VALUE;
039:
040: private static final String DISABLED_NAME = "disabled";
041: private static final String INDIVIDUALLY_NAME = "individually";
042: private static final String GLOBALLY_NAME = "globally";
043:
044: /**
045: * Marks a configuration feature as globally disabled.
046: */
047: public static final ConfigScope DISABLED = new ConfigScope(
048: DISABLED_ID, DISABLED_NAME);
049:
050: /**
051: * Marks a configuration feature as individually configurable.
052: */
053: public static final ConfigScope INDIVIDUALLY = new ConfigScope(
054: INDIVIDUALLY_ID, INDIVIDUALLY_NAME);
055:
056: /**
057: * Marks a configuration feature as globally enabled.
058: */
059: public static final ConfigScope GLOBALLY = new ConfigScope(
060: GLOBALLY_ID, GLOBALLY_NAME);
061:
062: private final int _value;
063: private final String _name;
064:
065: private ConfigScope(int value, String name) {
066: _value = value;
067: _name = name;
068: }
069:
070: /**
071: * Checks if the current configuration scope is globally
072: * enabled or disabled.
073: * @param defaultValue - default result
074: * @return false if disabled, true if globally enabled, default
075: * value otherwise
076: */
077: public boolean applyConfig(boolean defaultValue) {
078: switch (_value) {
079: case DISABLED_ID:
080: return false;
081: case GLOBALLY_ID:
082: return true;
083: default:
084: return defaultValue;
085: }
086: }
087:
088: /**
089: * @deprecated
090: */
091: public static ConfigScope forID(int id) {
092: switch (id) {
093: case DISABLED_ID:
094: return DISABLED;
095: case INDIVIDUALLY_ID:
096: return INDIVIDUALLY;
097: }
098: return GLOBALLY;
099: }
100:
101: public boolean equals(Object obj) {
102: if (this == obj) {
103: return true;
104: }
105: if (obj == null || getClass() != obj.getClass()) {
106: return false;
107: }
108: ConfigScope tb = (ConfigScope) obj;
109: return _value == tb._value;
110: }
111:
112: public int hashCode() {
113: return _value;
114: }
115:
116: private Object readResolve() {
117: switch (_value) {
118: case DISABLED_ID:
119: return DISABLED;
120: case INDIVIDUALLY_ID:
121: return INDIVIDUALLY;
122: default:
123: return GLOBALLY;
124: }
125: }
126:
127: public String toString() {
128: return _name;
129: }
130: }
|