1 /***
2 * Redistribution and use in source and binary forms, with or without
3 * modification, are permitted provided that the following conditions are
4 * met :
5 *
6 * . Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 *
9 * . Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * . The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $Id: RecordBuffer.java 377 2005-12-29 05:25:52Z mat007 $
29 */
30
31 package palmed.buffer;
32
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.io.OutputStream;
36 import palmed.edit.ITextBox;
37 import palmed.file.IFile;
38 import palmed.io.IRecord;
39 import palmed.io.IRecordFactory;
40
41 /***
42 * This class provides an adapter between records and buffers.
43 *
44 * @author Mathieu Champlon
45 * @version $Revision: 377 $ $Date: 2005-12-29 14:25:52 +0900 (jeu., 29 déc. 2005) $
46 */
47 public final class RecordBuffer implements IRecordBuffer
48 {
49 /***
50 * The buffer.
51 */
52 private final IBuffer buffer_;
53 /***
54 * The record.
55 */
56 private final IRecord record_;
57
58 /***
59 * Create a record buffer.
60 *
61 * @param factory the record factory
62 * @param textBox the text box
63 */
64 public RecordBuffer( final IRecordFactory factory, final ITextBox textBox )
65 {
66 if( factory == null )
67 throw new IllegalArgumentException( "parameter 'factory' is null" );
68 if( textBox == null )
69 throw new IllegalArgumentException( "parameter 'textBox' is null" );
70 buffer_ = new Buffer( textBox );
71 record_ = factory.createRecord( buffer_ );
72 }
73
74 /***
75 * {@inheritDoc}
76 */
77 public void open( final IFile file )
78 {
79 buffer_.open( file );
80 }
81
82 /***
83 * {@inheritDoc}
84 */
85 public boolean save()
86 {
87 return buffer_.save();
88 }
89
90 /***
91 * {@inheritDoc}
92 */
93 public void save( final IFile file )
94 {
95 buffer_.save( file );
96 }
97
98 /***
99 * {@inheritDoc}
100 */
101 public boolean hasBeenModified()
102 {
103 return buffer_.hasBeenModified();
104 }
105
106 /***
107 * {@inheritDoc}
108 */
109 public boolean hasFile( final IFile file )
110 {
111 return buffer_.hasFile( file );
112 }
113
114 /***
115 * {@inheritDoc}
116 */
117 public void unmarshall( final InputStream stream ) throws IOException
118 {
119 buffer_.unmarshall( stream );
120 }
121
122 /***
123 * {@inheritDoc}
124 */
125 public void marshall( final OutputStream stream ) throws IOException
126 {
127 buffer_.marshall( stream );
128 }
129
130 /***
131 * {@inheritDoc}
132 */
133 public void persist()
134 {
135 record_.persist();
136 }
137
138 /***
139 * {@inheritDoc}
140 */
141 public void restore()
142 {
143 record_.restore();
144 }
145
146 /***
147 * {@inheritDoc}
148 */
149 public void delete()
150 {
151 record_.delete();
152 buffer_.delete();
153 }
154
155 /***
156 * {@inheritDoc}
157 */
158 public void readReference( final InputStream stream ) throws IOException
159 {
160 record_.unmarshall( stream );
161 }
162
163 /***
164 * {@inheritDoc}
165 */
166 public void writeReference( final OutputStream stream ) throws IOException
167 {
168 record_.marshall( stream );
169 }
170 }