summaryrefslogtreecommitdiff
path: root/xmerge/source/xmerge/java/org/openoffice/xmerge/PluginFactory.java
blob: e9fda033833a07f9686249c1fe83f4079f821a47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2008 by Sun Microsystems, Inc.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * $RCSfile: PluginFactory.java,v $
 * $Revision: 1.4 $
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

package org.openoffice.xmerge;

import org.openoffice.xmerge.util.registry.ConverterInfo;
import java.io.InputStream;
import java.io.IOException;

/**
 *  <p>A <code>PluginFactory</code> encapsulates the
 *  conversions from one <code>Document</code> format to another.
 *  It provides conversions in both directions.  Refer to the
 *  <a href="package-summary.html#package_description">
 *  package description</a> for its usage.</p>
 *
 *  <p>Conversion from the &quot;Office&quot; <code>Document</code>
 *  format to a &quot;Device&quot; <code>Document</code> format may
 *  be lossy, i.e. some information may be lost.  If a plug-in
 *  implements the <code>DocumentMergerFactory</code> interface,
 *  then there is the possibility for merging the changes done on the
 *  &quot;Device&quot; <code>Document</code> back to the original
 *  &quot;Office&quot; <code>Document</code> via the
 *  <code>DocumentMerger</code> interface.</p>
 *
 *  <p>Plug-ins that convert from the &quot;Device&quot;
 *  <code>Document</code> format to the &quot;Office&quot;
 *  <code>Document</code> format must implement the
 *  <code>DocumentDeserializerFactory</code> interface.  Plug-ins
 *  that convert from the &quot;Office&quot; <code>Document</code>
 *  format to the &quot;Device&quot; format must implement the
 *  <code>DocumentSerializerFactory</code> interface.
 *
 *  <p>All plug-ins should have an associated Plugin Configuration XML
 *  File which describes the capabilities of the plug-in.  If the
 *  plug-in is bundled in a jarfile, then this XML file is also bundled
 *  with the jarfile.  The data in the XML file is managed by the
 *  <code>ConverterInfo</code> object.  The <code>ConverterInfoMgr</code>
 *  manages a registry of all <code>ConverterInfo</code> objects.  For
 *  more information about this XML file, refer to
 *  <a href="converter/xml/sxc/package-summary.html">
 *  org.openoffice.xmerge.util.registry</a>.</p>
 *
 *  @author  Herbie Ong
 *  @see     Document
 *  @see     DocumentSerializer
 *  @see     DocumentSerializerFactory
 *  @see     DocumentDeserializer
 *  @see     DocumentDeserializerFactory
 *  @see     DocumentMerger
 *  @see     DocumentMergerFactory
 *  @see     ConverterInfo
 *  @see     org.openoffice.xmerge.util.registry.ConverterInfoMgr
 */

public abstract class PluginFactory {

   /**
    *  Cached <code>ConvertInfo</code> object.
    */
    private ConverterInfo ciCache;


   /**
    *  Constructor that caches the <code>ConvertInfo</code> that
    *  corresponds to the registry information for this plug-in.
    *
    *  @param  ci  <code>ConvertInfo</code> object.
    */
    public PluginFactory(ConverterInfo ci) {
        ciCache=ci;
    }


   /**
    *  Returns the <code>ConvertInfo</code> that corresponds to this
    *  plug-in.
    *
    *  @return  The <code>ConvertInfo</code> that corresponds to this
    *           plug-in.
    */
    public ConverterInfo getConverterInfo () {
        return ciCache;
    }


    /**
     *  <p>Create a <code>Document</code> object that corresponds to
     *  the Office data passed in via the <code>InputStream</code>
     *  object.  This abstract method must be implemented for each
     *  plug-in.</p>
     *
     *  <p>This method will read from the given <code>InputStream</code>
     *  object.  The returned <code>Document</code> object will contain
     *  the necessary data for the other objects created by the
     *  <code>PluginFactory</code> to process, like a
     *  <code>DocumentSerializer</code> object and a
     *  <code>DocumentMerger</code> object.</p>
     *
     *  @param  name  The <code>Document</code> name.
     *  @param  is    <code>InputStream</code> object corresponding
     *                to the <code>Document</code>.
     *
     *  @return  A <code>Document</code> object representing the
     *           particular <code>Document</code> format for the
     *           <code>PluginFactory</code>.
     *
     *  @throws   IOException   If any I/O error occurs.
     */
    public abstract Document createOfficeDocument(String name, InputStream is)
        throws IOException;


    /**
     *  <p>Create a <code>Document</code> object that corresponds to
     *  the Office data passed in via the <code>InputStream</code>
     *  object.  This abstract method must be implemented for each
     *  plug-in.</p>
     *
     *  <p>This method will read from the given <code>InputStream</code>
     *  object.  The returned <code>Document</code> object will contain
     *  the necessary data for the other objects created by the
     *  <code>PluginFactory</code> to process, like a
     *  <code>DocumentSerializer</code> object and a
     *  <code>DocumentMerger</code> object.</p>
     *
     *  @param  name  The <code>Document</code> name.
     *  @param  is    <code>InputStream</code> object corresponding
     *                to the <code>Document</code>.
     *  @param  isZip <code>boolean</code> to show that the created office
     *                document is to be zipped.
     *
     *  @return  A <code>Document</code> object representing the
     *           particular <code>Document</code> format for the
     *           <code>PluginFactory</code>.
     *
     *  @throws   IOException   If any I/O error occurs.
     */
    public abstract Document createOfficeDocument(String name, InputStream is,boolean isZip)
        throws IOException;


    /**
     *  <p>Create a <code>Document</code> object that corresponds to
     *  the device data passed in via the <code>InputStream</code>
     *  object.  This abstract method must be implemented for each
     *  plug-in.</p>
     *
     *  <p>This method will read from the given <code>InputStream</code>
     *  object.  The returned <code>Document</code> object will contain
     *  the necessary data for the other objects created by the
     *  <code>PluginFactory</code> to process, like a
     *  <code>DocumentSerializer</code> object and a
     *  <code>DocumentMerger</code> object.</p>
     *
     *  @param  name  The <code>Document</code> name.
     *  @param  is    <code>InputStream</code> object corresponding
     *                to the <code>Document</code>.
     *
     *  @return  A <code>Document</code> object representing the
     *           particular <code>Document</code> format for the
     *           <code>PluginFactory</code>.
     *
     *  @throws   IOException   If any I/O error occurs.
     */
    public abstract Document createDeviceDocument(String name, InputStream is)
        throws IOException;
}