1 /* 2 * Copyright (c) 2003-2008 by Cosylab d. d. 3 * 4 * This file is part of Java-Common. 5 * 6 * Java-Common is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * Java-Common is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with Java-Common. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package com.cosylab.application.state; 21 22 import java.awt.Color; 23 import java.awt.Dimension; 24 import java.awt.Font; 25 import java.awt.Rectangle; 26 27 import java.io.IOException; 28 import java.io.Writer; 29 30 import java.util.Set; 31 32 33 /** 34 * This interface should be implemented by the object which will be exchanged 35 * with a component in the state saving/restoring process. This is basically 36 * <code>java.util.Properties</code> with extension for other useful types of 37 * objects that are not strings. A <code>State</code> can be used to create 38 * and store other <code>State</code> object as well and in such way the 39 * hierarchy can be builded easily. For example a component can use this code 40 * snippet to produce a <code>State</code> object which has two child object 41 * 'Window' and 'Splitter'. This allows the component to easy distinguish 42 * between parts of the state later in process of restoring. 43 * <pre> 44 * <code> 45 * public State getState() { 46 * State state = StateFactory.createState(); 47 * State s = state.createChild("Window"); 48 * getWindow().setProperties(s); 49 * s = state.createChild("Splitter"); 50 * getSplitter().setProperties(s); 51 * } 52 * </code> 53 * </pre> 54 * Beside that the enumeration of stored objects is added to allow different 55 * <code>StateStorage</code> objects to iterate over. 56 * 57 * @author dvitas 58 */ 59 public interface State 60 { 61 /** 62 * Adds child State with given key. 63 * 64 * @param key the key under state is stored 65 * @param state the state to be added 66 */ 67 public void putState(String key, State state); 68 69 /** 70 * Creates new child and adds it to contaiment with provided key. 71 * 72 * @param key the key of new state inside this containment 73 * 74 * @return new state contained with provided key 75 */ 76 public State createState(String key); 77 78 /** 79 * DOCUMENT ME! 80 * 81 * @param key DOCUMENT ME! 82 * @param defaultValue DOCUMENT ME! 83 * 84 * @return DOCUMENT ME! 85 */ 86 public boolean getBoolean(String key, boolean defaultValue); 87 88 /** 89 * DOCUMENT ME! 90 * 91 * @param key DOCUMENT ME! 92 * 93 * @return DOCUMENT ME! 94 */ 95 public State getState(String key); 96 97 /** 98 * DOCUMENT ME! 99 * 100 * @param key DOCUMENT ME! 101 * 102 * @return DOCUMENT ME! 103 */ 104 public Class getClass(String key); 105 106 /** 107 * DOCUMENT ME! 108 * 109 * @param key DOCUMENT ME! 110 * 111 * @return DOCUMENT ME! 112 */ 113 public Color getColor(String key); 114 115 public Color[] getColorSeq(String key); 116 117 /** 118 * DOCUMENT ME! 119 * 120 * @param key DOCUMENT ME! 121 * 122 * @return DOCUMENT ME! 123 */ 124 public Dimension getDimension(String key); 125 126 /** 127 * DOCUMENT ME! 128 * 129 * @param key DOCUMENT ME! 130 * @param defaultValue DOCUMENT ME! 131 * 132 * @return DOCUMENT ME! 133 */ 134 public double getDouble(String key, double defaultValue); 135 136 /** 137 * DOCUMENT ME! 138 * 139 * @param key DOCUMENT ME! 140 * 141 * @return DOCUMENT ME! 142 */ 143 public double[] getDoubleSeq(String key); 144 145 /** 146 * DOCUMENT ME! 147 * 148 * @param key DOCUMENT ME! 149 * 150 * @return DOCUMENT ME! 151 */ 152 public Font getFont(String key); 153 154 public Font[] getFontSeq(String key); 155 156 /** 157 * Returns ID, which is used to distinguish different states. 158 * 159 * @return state identification 160 */ 161 public String getID(); 162 163 /** 164 * Sets ID to state. 165 * 166 * @param id the new ID string 167 */ 168 public void setID(String id); 169 170 /** 171 * DOCUMENT ME! 172 * 173 * @param key DOCUMENT ME! 174 * @param defaultValue DOCUMENT ME! 175 * 176 * @return DOCUMENT ME! 177 */ 178 public int getInt(String key, int defaultValue); 179 180 /** 181 * DOCUMENT ME! 182 * 183 * @param key DOCUMENT ME! 184 * 185 * @return DOCUMENT ME! 186 */ 187 public int[] getIntSeq(String key); 188 189 /** 190 * DOCUMENT ME! 191 * 192 * @param key DOCUMENT ME! 193 * 194 * @return DOCUMENT ME! 195 */ 196 public Object getObject(String key); 197 198 /** 199 * DOCUMENT ME! 200 * 201 * @param key DOCUMENT ME! 202 * 203 * @return DOCUMENT ME! 204 */ 205 public Class getType(String key); 206 207 // convinient types 208 public Rectangle getRectangle(String key); 209 210 // basic types 211 public String getString(String key, String defaultValue); 212 213 // sequences 214 public String[] getStringSeq(String key); 215 216 // listing 217 public Set keySet(); 218 219 /** 220 * DOCUMENT ME! 221 * 222 * @param key DOCUMENT ME! 223 * @param value DOCUMENT ME! 224 */ 225 public void putBoolean(String key, boolean value); 226 227 /** 228 * DOCUMENT ME! 229 * 230 * @param key DOCUMENT ME! 231 * @param value DOCUMENT ME! 232 */ 233 public void putClass(String key, Class value); 234 235 /** 236 * DOCUMENT ME! 237 * 238 * @param key DOCUMENT ME! 239 * @param value DOCUMENT ME! 240 */ 241 public void putColor(String key, Color value); 242 243 public void putColorSeq(String key, Color[] value); 244 245 /** 246 * DOCUMENT ME! 247 * 248 * @param key DOCUMENT ME! 249 * @param value DOCUMENT ME! 250 */ 251 public void putDimension(String key, Dimension value); 252 253 /** 254 * DOCUMENT ME! 255 * 256 * @param key DOCUMENT ME! 257 * @param value DOCUMENT ME! 258 */ 259 public void putDouble(String key, double value); 260 261 /** 262 * DOCUMENT ME! 263 * 264 * @param key DOCUMENT ME! 265 * @param value DOCUMENT ME! 266 */ 267 public void putDoubleSeq(String key, double[] value); 268 269 /** 270 * DOCUMENT ME! 271 * 272 * @param key DOCUMENT ME! 273 * @param value DOCUMENT ME! 274 */ 275 public void putFont(String key, Font value); 276 277 public void putFontSeq(String key, Font[] value); 278 279 /** 280 * DOCUMENT ME! 281 * 282 * @param key DOCUMENT ME! 283 * @param value DOCUMENT ME! 284 */ 285 public void putInt(String key, int value); 286 287 /** 288 * DOCUMENT ME! 289 * 290 * @param key DOCUMENT ME! 291 * @param value DOCUMENT ME! 292 */ 293 public void putIntSeq(String key, int[] value); 294 295 /** 296 * DOCUMENT ME! 297 * 298 * @param key DOCUMENT ME! 299 * @param value DOCUMENT ME! 300 */ 301 public void putRectangle(String key, Rectangle value); 302 303 /** 304 * DOCUMENT ME! 305 * 306 * @param key DOCUMENT ME! 307 * @param value DOCUMENT ME! 308 */ 309 public void putString(String key, String value); 310 311 /** 312 * DOCUMENT ME! 313 * 314 * @param key DOCUMENT ME! 315 * @param value DOCUMENT ME! 316 */ 317 public void putStringSeq(String key, String[] value); 318 319 /** 320 * DOCUMENT ME! 321 * 322 * @param writer DOCUMENT ME! 323 * 324 * @throws IOException DOCUMENT ME! 325 */ 326 public void writeXML(Writer writer) throws IOException; 327 } 328 329 /* __oOo__ */