/[xulu]/trunk/src/appl/parallel/data/AbstractDataHandler.java
ViewVC logotype

Annotation of /trunk/src/appl/parallel/data/AbstractDataHandler.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2 - (hide annotations)
Wed Feb 25 11:54:01 2009 UTC (15 years, 9 months ago) by mojays
File size: 5132 byte(s)
First Commit, corresponds to Revision 1008 of Wikisquare-SVN 
1 mojays 2 package appl.parallel.data;
2    
3     import java.awt.Rectangle;
4     import java.io.IOException;
5     import java.io.Serializable;
6     import java.net.InetAddress;
7     import java.net.UnknownHostException;
8     import java.rmi.Naming;
9    
10     import org.apache.log4j.LogManager;
11     import org.apache.log4j.Logger;
12    
13     import appl.data.LoadingException;
14     import appl.parallel.client.DataServer;
15     import appl.parallel.client.ClientDataServer;
16     import appl.parallel.spmd.split.DataPartition;
17     import appl.parallel.spmd.split.SplittableResource;
18    
19     /**
20     * This class is used as a base class for loaders. It is especially intended for
21     * use with the SPMD-Paradigm, but may be used with other loaders, too. It
22     * implements the reusable stuff of the {@link PartitionDataHandler} Interface.
23     * Notice that each loader is responsible for exactly one data element. It must
24     * be {@link Cloneable}, so that multi-data elements can add another element.
25     *
26     * @author Dominik Appl
27     */
28     public abstract class AbstractDataHandler implements PartitionDataHandler {
29    
30     protected transient Logger LOG = LogManager.getLogger(this.getClass()
31     .getName());
32    
33     /**
34     * The id of the currently handled {@link SplittableResource}
35     */
36     protected int rootID;
37    
38     /**
39     * The partition bounds (the whole bounds) of the current
40     * {@link SplittableResource}
41     */
42     protected Rectangle partitionBounds;
43    
44     /**
45     * the currently handled data (must be initialized before calling
46     * {@link #unload()}
47     */
48     protected transient DataPartition data;
49    
50     /**
51     * The unload bounds differ may differ from the partitionBounds. If there is
52     * a neighborhood region it is important, that only the core-region (without
53     * the neighborhood) is unloaded.
54     */
55     protected Rectangle unloadBounds;
56    
57     /**
58     * A {@link ClientDataServer} may be used locally for faster access.
59     */
60     protected transient ClientDataServer spmdClient;
61    
62     /**
63     * Constructs a new {@link AbstractDataHandler}. The local IP address at
64     * the time of construction is later used on serverside for communication
65     * (e.g. unloading).
66     *
67     * @param rootID
68     * the id of the data
69     * @param client
70     * a {@link ClientDataServer} which may be used to get meta
71     * information on client side before transferring the loader to
72     * its destination
73     * @param partitionBounds
74     * the bounds of the partition to be retrieved on server side
75     * @param unloadBounds
76     * the bounds of the partition which is to be uploaded to the
77     * client after calculation (may only be the calculation area)
78     */
79     public AbstractDataHandler(int rootID, ClientDataServer client,
80     Rectangle partitionBounds, Rectangle unloadBounds) {
81     this.spmdClient = client;
82     this.rootID = rootID;
83     this.partitionBounds = partitionBounds;
84     this.unloadBounds = unloadBounds;
85     }
86    
87     /**
88     * sets a local {@link ClientDataServer} which MAY be used by the handler
89     * for local access
90     *
91     * @param localSPMDClient
92     */
93     public void setSPMDClient(ClientDataServer localSPMDClient) {
94     this.spmdClient = localSPMDClient;
95     }
96    
97     /**
98     * (empty constructors are important for deserialization)
99     *
100     * @see #AbstractDataHandler(int, ClientDataServer, Rectangle, Rectangle)
101     */
102     public AbstractDataHandler() {
103     this(-1, null, new Rectangle(0, 0, 0, 0), new Rectangle(0, 0, 0, 0));
104     }
105    
106     /*
107     * (non-Javadoc)
108     *
109     * @see appl.data.DataLoader#getLoadInfo()
110     */
111     public abstract String getLoadInfo();
112    
113     /*
114     * (non-Javadoc)
115     *
116     * @see appl.data.DataLoader#getLoadInfo()
117     */
118     public abstract String getUnloadInfo();
119    
120     /*
121     * (non-Javadoc)
122     *
123     * @see appl.data.DataLoader#load()
124     */
125     public abstract DataPartition load() throws LoadingException;
126    
127     /**
128     * Initializes the {@link Logger} after deserialization (used by
129     * {@link java.io.Serializable})
130     *
131     * @throws IOException
132     * @see Serializable
133     */
134     private synchronized void readObject(java.io.ObjectInputStream s)
135     throws IOException, ClassNotFoundException {
136     // reading standard fields
137     s.defaultReadObject();
138     // initialize Logger
139     LOG = LogManager.getLogger(this.getClass().getName());
140     }
141    
142     /*
143     * (non-Javadoc)
144     *
145     * @see appl.data.PartitionDataHandler#setUnloadPartition(java.awt.Rectangle)
146     */
147     public void setUnloadBounds(Rectangle unloadBounds) {
148     this.unloadBounds = unloadBounds;
149     }
150    
151     /*
152     * (non-Javadoc)
153     *
154     * @see appl.data.PartitionDataHandler#setBasePartition(appl.parallel.spmd.split.DataPartition)
155     */
156     public void setBasePartition(DataPartition data) {
157     this.data = data;
158     }
159    
160     /*
161     * (non-Javadoc)
162     *
163     * @see appl.data.DataUnloader#unload()
164     */
165     public abstract void unload();
166    
167     /*
168     * (non-Javadoc)
169     *
170     * @see appl.data.PartitionDataHandler#setRootID(int)
171     */
172     public void setRootID(int rootID) {
173     this.rootID = rootID;
174     }
175    
176     /*
177     * (non-Javadoc)
178     *
179     * @see java.lang.Object#clone()
180     */
181     public PartitionDataHandler clone() {
182     return newInstance(rootID, spmdClient, this.unloadBounds,
183     this.partitionBounds);
184     }
185    
186     }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26