View Javadoc

1   /*
2    * Copyright (C) 2004-2006 Christian Siefkes <christian@siefkes.net>.
3    * Development of this software is supported by the German Research Society,
4    * Berlin-Brandenburg Graduate School in Distributed Information Systems
5    * (DFG grant no. GRK 316).
6    *
7    * This program is free software; you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation; either version 2 of the License, or
10   * (at your option) any later version.
11   *
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   *
17   * You should have received a copy of the GNU General Public License
18   * along with this program; if not, visit
19   * http://www.gnu.org/licenses/gpl.html or write to the Free Software
20   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21   */
22  package de.fu_berlin.ties.io;
23  
24  /***
25   * Classes implementing this interface support serialization in a
26   * human-readable format, by storing all relevant fields in a
27   * {@link de.fu_berlin.ties.io.FieldMap}.
28   *
29   * <p>Non-abstract implementations of this interface must support
30   * deserialization by providing a public constructor that accepts a
31   * {@link de.fu_berlin.ties.io.FieldMap} as single parameter that reads all
32   * relevant field values from the map. There is no way to enforce this
33   * convention (as interfaces cannot contain constructors), but
34   * deserialization via {@link de.fu_berlin.ties.io.FieldMap#createObject(Class)}
35   * will fail when it is violated. Deserialization is based on a constructor
36   * instead of a "restore" or "init" method to allow the deserialization of
37   * immutable objects (whose fields cannot be changed after construction).
38   *
39   * @author Christian Siefkes
40   * @version $Revision: 1.4 $, $Date: 2006/10/21 16:04:22 $, $Author: siefkes $
41   */
42  public interface Storable {
43  
44      /***
45       * Stores all relevant fields of this object in a field map for
46       * serialization. An equivalent object can be created by calling
47       * {@link de.fu_berlin.ties.io.FieldMap#createObject(Class)} on the created
48       * field map.
49       *
50       * @return the created field map
51       */
52      FieldMap storeFields();
53  
54  }