blob: 835c46a1d6b60c4ecb71b833c584a3c8dc67713f [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
-->
<html>
<head>
<title>org.openoffice.xmerge package</title>
</head>
<body bgcolor="white">
<p>Provides interfaces for converting between two <code>Document</code>
formats, and supports a &quot;merge&quot; interface for merging back
changes from a &quot;lossy&quot; format back into a rich format.</p>
<p>The {@link org.openoffice.xmerge.Convert
Convert} object encapsulates the conversion of one format to/from another
format. The user requests a <code>Convert</code> object via the
<code>ConverterFactory</code>.</p>
<p>The <code>Convert</code> class encapsulates a specific plug-in.
A plug-in can support deserialization (convert from &quot;Device&quot;
to &quot;Office&quot;) and/or serialization (convert from
&quot;Office&quot; to &quot;Device&quot;). If a plug-in supports
both deserialization and serialization, then it can also support
&quot;merge&quot;.</p>
<p>To support conversions where a single input <code>Document</code> can
create multiple output <code>Document</code> objects, data is passed in
and out of the conversion functions via a <code>ConvertData</code> object.
This <code>ConvertData</code> can contain one or more <code>Document</code>
objects. It is assumed that the client will know when to pass multiple
files into a specific plug-in, and that the plug-in will know how to
handle the multiple files.</p>
<p>Merging is useful when converting from a rich <code>Document</code>
format to a more lossy format. Then the user may modify the
<code>Document</code> in the lossy format, and &quot;merge&quot; those
changes back into the original &quot;rich&quot; <code>Document</code>.
Each merge implementation provides a <code>ConverterCapabilities</code>
implementation so that the merge logic knows what changes from the
&quot;lossy&quot; format to merge into the original &quot;rich&quot;
<code>Document</code>.</p>
<p>Each plug-in must be registed via the singleton ConverterInfoMgr
object via its {@link
org.openoffice.xmerge.util.registry.ConverterInfoMgr#addPlugIn
addPlugIn} method.</p>
<h2>Providing implementations</h2>
<p>The plug-in implementation must include the <code>getDeviceDocument</code>
and <code>getOfficeDocument</code> methods. These functions need to return
the appropriate type of <code>Document</code> for the plug-in. It may be
necessary to create a new implementation of the <code>Document</code>
interface if one does not exist that meets the needs of the plug-in.</p>
<p>Currently, base implementations for working with StarWriter XML
<code>Document</code> objects are available via the
<a href="converter/xml/sxc/package-summary.html#package_description">
org.openoffice.xmerge.xml.sxw</a>
package, and StarCalc XML <code>Document</code> objects via the
<a href="converter/xml/sxw/package-summary.html#package_description">
org.openoffice.xmerge.xml.sxc</a>
package.</p>
<h2>TODO/IDEAS list</h2>
<p><ol>
<li>An idea is to combine the <code>ConvertData</code> and the
<code>Convert</code> classes, so that a <code>ConvertData</code>
knows what it can convert into and whether or not it can merge.
Then a user would call convert/merge methods on the
<code>ConvertData</code> class, which returns a
<code>ConvertData</code> object that likewise knows what it can
convert/merge into.</li>
<li><code>DocumentSerialize</code> constructors and the
<code>DocumentDeserializer.deserializer</code> method could pass
in a <code>ConvertData</code> object rather than assuming
a single <code>Document</code> will represent a &quot;rich&quot;
<code>Document</code>.</li>
<li>May need to add a <code>PluginFactory.setProperties</code>
method for adding properties specific to each converter.</li>
</ol></p>
</body>
</html>