DNA SVN: r1027 - trunk/docs/examples/gettingstarted/sequencers/src/test/java/org/jboss/example/dna/sequencer.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-10 00:43:17 -0400 (Wed, 10 Jun 2009)
New Revision: 1027
Modified:
trunk/docs/examples/gettingstarted/sequencers/src/test/java/org/jboss/example/dna/sequencer/SequencingClientTest.java
Log:
DNA-443 Added back in the unit test in the sequencer example that runs the Java sequencer.
Modified: trunk/docs/examples/gettingstarted/sequencers/src/test/java/org/jboss/example/dna/sequencer/SequencingClientTest.java
===================================================================
--- trunk/docs/examples/gettingstarted/sequencers/src/test/java/org/jboss/example/dna/sequencer/SequencingClientTest.java 2009-06-10 04:16:55 UTC (rev 1026)
+++ trunk/docs/examples/gettingstarted/sequencers/src/test/java/org/jboss/example/dna/sequencer/SequencingClientTest.java 2009-06-10 04:43:17 UTC (rev 1027)
@@ -39,7 +39,6 @@
import org.jboss.dna.sequencer.mp3.Mp3MetadataSequencer;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -159,7 +158,6 @@
client.search();
}
- @Ignore
@Test
public void shouldUploadAndSequenceJavaSourceFile() throws Exception {
client.setUserInterface(new MockUserInterface(this.javaSourceUrl, "/a/b/MySource.java", 1));
16 years, 6 months
DNA SVN: r1026 - in trunk/docs: gettingstarted/src/main/docbook/en-US and 4 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-10 00:16:55 -0400 (Wed, 10 Jun 2009)
New Revision: 1026
Modified:
trunk/docs/gettingstarted/pom.xml
trunk/docs/gettingstarted/src/main/docbook/en-US/content/repository_example.xml
trunk/docs/gettingstarted/src/main/docbook/en-US/content/sequencer_example.xml
trunk/docs/gettingstarted/src/main/docbook/en-US/master.xml
trunk/docs/reference/pom.xml
trunk/docs/reference/src/main/docbook/en-US/content/author_group.xml
trunk/docs/reference/src/main/docbook/en-US/master.xml
Log:
Minor tweaks to upgrade to the latest version of the JBoss.org docbook style, and to generate the single HTML forms of the docs.
Modified: trunk/docs/gettingstarted/pom.xml
===================================================================
--- trunk/docs/gettingstarted/pom.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/gettingstarted/pom.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -17,28 +17,30 @@
<extensions>true</extensions>
<dependencies>
<dependency>
+ <groupId>net.sf.docbook</groupId>
+ <artifactId>docbook</artifactId>
+ <version>1.74.0</version>
+ </dependency>
+ <dependency>
<groupId>org.jboss</groupId>
<artifactId>jbossorg-docbook-xslt</artifactId>
- <version>1.1.0.Beta1</version>
+ <version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jbossorg-jdocbook-style</artifactId>
- <version>1.1.0.Beta1</version>
+ <version>1.1.0</version>
<type>jdocbook-style</type>
</dependency>
</dependencies>
<configuration>
<sourceDocumentName>master.xml</sourceDocumentName>
- <imageResource>
- <directory>${basedir}/src/main/docbook/en-US/images</directory>
- <includes>
- <include>*.png</include>
- </includes>
- </imageResource>
- <!-- cssResource>
- <directory>${basedir}/src/main/docbook/css</directory>
- </cssResource-->
+ <imageResource>
+ <directory>${basedir}/src/main/docbook/en-US/images</directory>
+ <includes>
+ <include>*.png</include>
+ </includes>
+ </imageResource>
<targetDirectory>${basedir}/target/docbook/en-US</targetDirectory>
<formats>
<format>
@@ -46,18 +48,16 @@
<stylesheetResource>classpath:/xslt/org/jboss/xhtml.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
- <!--
<format>
<formatName>html_single</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/xhtml-single.xsl</stylesheetResource>
- <finalName>index.html</finalName>
+ <finalName>${pom.artifactId}.html</finalName>
</format>
<format>
<formatName>pdf</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/pdf.xsl</stylesheetResource>
- <finalName>userguide_en.pdf</finalName>
+ <finalName>${pom.artifactId}.pdf</finalName>
</format>
- -->
</formats>
<options>
<xincludeSupported>true</xincludeSupported>
Modified: trunk/docs/gettingstarted/src/main/docbook/en-US/content/repository_example.xml
===================================================================
--- trunk/docs/gettingstarted/src/main/docbook/en-US/content/repository_example.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/gettingstarted/src/main/docbook/en-US/content/repository_example.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -45,13 +45,13 @@
<para>This collection of repositories is shown in the following figure:
<figure id="example-repositories">
<title>Repositories used in the example client</title>
- <graphic align="center" scale="100" fileref="example-repositories.png"/>
+ <graphic align="center" scale="60" fileref="example-repositories.png"/>
</figure>
Most of the repositories are in-memory repositories (using the In-Memory repository connector), but the federated "Vehicles" repository
content is federated from the other repositories and cached into the "Cache" repository. This is shown in the following figure:
<figure id="example-federated-repository">
<title>Vehicles repository content is federated from the Cars, Airplanes and Configuration repositories</title>
- <graphic align="center" scale="100" fileref="example-federated-repository.png"/>
+ <graphic align="center" scale="60" fileref="example-federated-repository.png"/>
</figure>
</para>
<para>
@@ -59,7 +59,7 @@
directory and type <code>./run.sh</code>. You should see the command-line client and its menus in your terminal:
<figure id="example-repositories-client">
<title>Example Client</title>
- <graphic align="center" scale="100" fileref="example-repositories-client.png"/>
+ <graphic align="center" scale="60" fileref="example-repositories-client.png"/>
</figure>
From this menu, you can see the list of repositories, select one, and navigate through that repository in a manner similar
to a *nix command-line shell (although the client itself uses the JCR API to interact with the repositories).
@@ -88,7 +88,7 @@
<para>If you were to select the "Cars" repository and use some of the commands, you should see something similar to:
<figure id="example-repositories-navigating">
<title>Navigating the Cars repository</title>
- <graphic align="center" scale="100" fileref="example-repositories-navigating.png"/>
+ <graphic align="center" scale="60" fileref="example-repositories-navigating.png"/>
</figure>
</para>
<para>You can also choose to navigate the "Vehicles" repository, which projects the "Cars" repository content under the
Modified: trunk/docs/gettingstarted/src/main/docbook/en-US/content/sequencer_example.xml
===================================================================
--- trunk/docs/gettingstarted/src/main/docbook/en-US/content/sequencer_example.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/gettingstarted/src/main/docbook/en-US/content/sequencer_example.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -48,7 +48,7 @@
directory and type <code>./run.sh</code>. You should see the command-line client and its menus in your terminal:
<figure id="xample-sequencer-cli-client">
<title>Example client</title>
- <graphic align="center" scale="100" fileref="example-sequencer-client.png"/>
+ <graphic align="center" scale="60" fileref="example-sequencer-client.png"/>
</figure>
From this menu, you can upload a file into the repository, search for media in the repository, print sequencing statistics,
or quit the application.</para>
@@ -59,7 +59,7 @@
in that directory without specifying the path:
<figure id="example-sequencer-upload">
<title>Uploading an image using the example client</title>
- <graphic align="center" scale="100" fileref="example-sequencer-upload.png"/>
+ <graphic align="center" scale="60" fileref="example-sequencer-upload.png"/>
</figure>
You can specify any fully-qualified or relative path. The application will notify you if it cannot find the file you
specified. The example client configures JBoss DNA to sequence MP3 audio files, Java source files, or image files with one of
@@ -98,17 +98,17 @@
<para>So, after the file is uploaded, you can search the repository for the image metadata using the "s" menu option:
<figure id="example-sequencer-search">
<title>Searching for media using the example client</title>
- <graphic align="center" scale="100" fileref="example-sequencer-search.png"/>
+ <graphic align="center" scale="60" fileref="example-sequencer-search.png"/>
</figure>
Here are the search results after the <code>sample1.mp3</code> audio file has been uploaded (to the <code>/a/b/sample1.mp3</code> location):
<figure id="example-sequencer-search-with-mp3">
<title>Searching for media using the example client</title>
- <graphic align="center" scale="100" fileref="example-sequencer-search-with-mp3.png"/>
+ <graphic align="center" scale="60" fileref="example-sequencer-search-with-mp3.png"/>
</figure>
You can also display the sequencing statistics using the "d" menu option:
<figure id="example-sequencer-statistics">
<title>Sequencing statistics using the example client</title>
- <graphic align="center" scale="100" fileref="example-sequencer-statistics.png"/>
+ <graphic align="center" scale="60" fileref="example-sequencer-statistics.png"/>
</figure>
These stats show how many nodes were sequenced, and how many nodes were skipped because they didn't apply to the sequencer's
criteria.
@@ -341,7 +341,7 @@
<para>At this point, we've reviewed all of the interesting code in the example application related to JBoss DNA. However, feel free
to play with the application, trying different things.</para>
</sect1>
- <sect1 id="using_dna_whats_next">
+ <sect1>
<title>What's next</title>
<para>
This chapter walked through running the sequencer example and looked at the example code. With the sequencer client, you could upload files into a
Modified: trunk/docs/gettingstarted/src/main/docbook/en-US/master.xml
===================================================================
--- trunk/docs/gettingstarted/src/main/docbook/en-US/master.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/gettingstarted/src/main/docbook/en-US/master.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -34,7 +34,6 @@
<subtitle>Getting Started Guide</subtitle>
<releaseinfo>&versionNumber;</releaseinfo>
<productnumber>&versionNumber;</productnumber>
- <issuenum>5</issuenum>
<mediaobject>
<imageobject role="fo">
<imagedata fileref="dna-logo.png" align="center"/>
@@ -48,7 +47,6 @@
<holder>©rightHolder;</holder>
</copyright>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/author_group.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/legal_notice.xml"/>
</bookinfo>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/preface.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/introduction.xml"/>
Modified: trunk/docs/reference/pom.xml
===================================================================
--- trunk/docs/reference/pom.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/reference/pom.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -17,28 +17,30 @@
<extensions>true</extensions>
<dependencies>
<dependency>
+ <groupId>net.sf.docbook</groupId>
+ <artifactId>docbook</artifactId>
+ <version>1.74.0</version>
+ </dependency>
+ <dependency>
<groupId>org.jboss</groupId>
<artifactId>jbossorg-docbook-xslt</artifactId>
- <version>1.1.0.Beta1</version>
+ <version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.jboss</groupId>
<artifactId>jbossorg-jdocbook-style</artifactId>
- <version>1.1.0.Beta1</version>
+ <version>1.1.0</version>
<type>jdocbook-style</type>
</dependency>
</dependencies>
<configuration>
<sourceDocumentName>master.xml</sourceDocumentName>
- <imageResource>
- <directory>${basedir}/src/main/docbook/en-US/images</directory>
- <includes>
- <include>*.png</include>
- </includes>
- </imageResource>
- <!-- cssResource>
- <directory>${basedir}/src/main/docbook/css</directory>
- </cssResource-->
+ <imageResource>
+ <directory>${basedir}/src/main/docbook/en-US/images/</directory>
+ <includes>
+ <include>*.png</include>
+ </includes>
+ </imageResource>
<targetDirectory>${basedir}/target/docbook/en-US</targetDirectory>
<formats>
<format>
@@ -46,17 +48,15 @@
<stylesheetResource>classpath:/xslt/org/jboss/xhtml.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
- <!--
<format>
<formatName>html_single</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/xhtml-single.xsl</stylesheetResource>
- <finalName>index.html</finalName>
+ <finalName>${pom.artifactId}.html</finalName>
</format>
- -->
<format>
<formatName>pdf</formatName>
<stylesheetResource>classpath:/xslt/org/jboss/pdf.xsl</stylesheetResource>
- <finalName>userguide_en.pdf</finalName>
+ <finalName>${pom.artifactId}.pdf</finalName>
</format>
</formats>
<options>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/author_group.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/author_group.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/reference/src/main/docbook/en-US/content/author_group.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -30,4 +30,5 @@
]>
<authorgroup>
<corpauthor>Randall M. Hauch</corpauthor>
+ <corpauthor>Brian Carothers</corpauthor>
</authorgroup>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/master.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-10 00:18:54 UTC (rev 1025)
+++ trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-10 04:16:55 UTC (rev 1026)
@@ -34,7 +34,6 @@
<subtitle>Reference Guide</subtitle>
<releaseinfo>&versionNumber;</releaseinfo>
<productnumber>&versionNumber;</productnumber>
- <issuenum>4</issuenum>
<mediaobject>
<imageobject role="fo">
<imagedata fileref="dna-logo.png" align="center"/>
@@ -48,7 +47,6 @@
<holder>©rightHolder;</holder>
</copyright>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/author_group.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/legal_notice.xml"/>
</bookinfo>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/preface.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/introduction.xml"/>
16 years, 6 months
DNA SVN: r1025 - trunk/docs/reference/src/main/docbook/en-US/content/connectors.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-09 20:18:54 -0400 (Tue, 09 Jun 2009)
New Revision: 1025
Modified:
trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
Log:
Added to the Reference Guide more detail about how the federated connector can parallelize the fork-join processes. Also addressed the limitations of update requests when such requests do not map to a single projection.
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-09 23:57:54 UTC (rev 1024)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-10 00:18:54 UTC (rev 1025)
@@ -358,8 +358,46 @@
composing the results. Technically, Step 2 performs the fork and join operations, but this class uses &RequestProcessor;
implementations to do Step 1 and 3 (called &ForkRequestProcessor; and &JoinRequestProcessor;, respectively).
</para>
+ <para>
+ Such fork-join style techniques are well-suited to <emphasis>parallel processing</emphasis>. This connector uses an &ExecutorService;
+ to allow these different processors to operate concurrently. This can greatly improve the performance as perceived
+ by the clients, since indeed much of the operations on the different sources are occurring at the same time.
+ </para>
+ <para>
+ It is also possible that not every incoming &Request; get projected to all sources. Indeed, many operations can
+ effectively be mapped to a <emphasis>single projection</emphasis>. In such cases, the overhead of the federated
+ connector is quite minimal.
+ </para>
+ <note>
+ <para>
+ &Request;s that include the &Path; within the request's &Location; can be very quickly mapped to the correct projection,
+ and thus such federated requests can be processed with very little overhead. However, when requests contain &Location;s
+ that only contain identification properties (e.g., UUIDs), the connector may not be able to determine the correct
+ projection(s), and may have to simply forward the request to all of the projections. This is obviously less desirable,
+ so when possible ensure that the &Request; objects include the &Path;.
+ </para>
+ </note>
</sect1>
<sect1>
+ <title>Update operations</title>
+ <para>
+ The federated connector behavior for <emphasis>read-only</emphasis> requests is fairly obvious. In the best case, the connector determines the
+ appropriate projections, forwards the request into the appropriate sources, and then combines the results.
+ But what happens with <emphasis>change requests</emphasis>?
+ </para>
+ <para>
+ Currently, the federated connector requires that each &ChangeRequest; be mapped to <emphasis>one and only one</emphasis> projection.
+ However, when a single projection cannot be determined for a &ChangeRequest;, the connector throws an error.
+ </para>
+ <para>
+ This is thought to be a minimal problem that will not actually be an issue in most uses of the federated connector.
+ If you find that your usage does indeed fall into this category,
+ please let us know via the <ulink url="&Home;lists.html">mailing lists</ulink> or log
+ an enhancement request in <ulink url="&JIRA;">JIRA</ulink>. Be sure to include as much detail as possible about the scenario,
+ the problem condition, and the desired behavior.
+ </para>
+ </sect1>
+ <sect1>
<title>Configuration</title>
<para>
The federated repository uses other &RepositorySource;s that are to be federated and a &RepositorySource; that is to be used as the
16 years, 6 months
DNA SVN: r1024 - trunk/docs/reference/src/main/docbook/en-US/content/connectors.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-09 19:57:54 -0400 (Tue, 09 Jun 2009)
New Revision: 1024
Modified:
trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
Log:
Minor corrections to the chapter on the federated connector in the Reference Guide.
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-09 23:50:21 UTC (rev 1023)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-09 23:57:54 UTC (rev 1024)
@@ -46,9 +46,9 @@
<title>Projections</title>
<para>
Each federated repository source provides a unified repository consisting of information that is dynamically federated
- from multiple other &RepositorySource; instances. The connector is configured with a number of <strong>projections</strong>
+ from multiple other &RepositorySource; instances. The connector is configured with a number of <emphasis role="bold">projections</emphasis>
that each describe where in the unified repository the federated connector should place the content from another source.
- Projections consist of the name of the source containing the content and a number of <strong>rules</strong> that
+ Projections consist of the name of the source containing the content and a number of <emphasis role="bold">rules</emphasis> that
define the path mappings, where each rule is defined as a string with this format:
</para>
<programlisting>pathInFederatedRepository => pathInSourceRepository</programlisting>
@@ -61,11 +61,11 @@
<para>
is a trivial rule that states that all of the content in the underlying source should be mapped into the unified
repository such that the locations are the same. Therefore, a node at <code>/a/b/c</code> in the source would
- appear in the unified repository at <code>/a/b/c</code>. This is called a <strong>mirror projection</strong>,
+ appear in the unified repository at <code>/a/b/c</code>. This is called a <emphasis role="bold">mirror projection</emphasis>,
since the unified repository mirrors the underlying source repository.
</para>
<para>
- Another example is an <strong>offset projection</strong>, which is similar to the mirror projection except that
+ Another example is an <emphasis role="bold">offset projection</emphasis>, which is similar to the mirror projection except that
the federated path includes an offset not found in the source:
</para>
<programlisting>/alpha/beta => /</programlisting>
@@ -87,7 +87,6 @@
</sect1>
<sect1>
<title>Multiple Projections</title>
- <h3>Multiple Projections</h3>
<para>
Federated repositories that use a single projection are useful, but they aren't as interesting or powerful as
those that use multiple projections. Consider a federated repository that is defined by two projections:
@@ -141,14 +140,14 @@
<para>
Note how the <code>/foo/bum</code> branch does not even appear in the unified repository, since it is outside of the
branch being projected. Also, the <code>/alpha</code> node doesn't exist in S1 or S2; it's what is called a
- <strong>placeholder</strong> node that exists purely so that the nodes below it have a place to exist.
+ <emphasis role="bold">placeholder</emphasis> node that exists purely so that the nodes below it have a place to exist.
Placeholders are somewhat special: they allow any structure below them (including other placeholder nodes or real
projected nodes), but they cannot be modified.
</para>
<para>
Even more interesting are cases that involve more projections. Consider a federated repository that contains
information about different kinds of automobiles, aircraft, and spacecraft, except that the information
- about each kind of vehicle exists in a different source (and possibly a different <i>kind</i> of source, such as
+ about each kind of vehicle exists in a different source (and possibly a different <emphasis>kind</emphasis> of source, such as
a database, or file, or web service).
</para>
<para>
@@ -336,7 +335,7 @@
<listitem>
<para>
Process the incoming requests and for each generate the appropriate request(s) against the sources
- (dictated by the {@link FederatedWorkspace workspace's} {@link FederatedWorkspace#getProjections() projections}). These
+ (dictated by the workspace's projections). These
"projected requests" are then enqueued for each source.
</para>
</listitem>
@@ -354,7 +353,7 @@
</listitem>
</orderedlist>
<para>
- This process is a form of the <i>fork-join</i> divide-and-conquer algorithm, which involves splitting a problem into smaller
+ This process is a form of the <emphasis>fork-join</emphasis> divide-and-conquer algorithm, which involves splitting a problem into smaller
parts, forking new subtasks to execute each smaller part, joining on the subtasks (waiting until all have finished), and then
composing the results. Technically, Step 2 performs the fork and join operations, but this class uses &RequestProcessor;
implementations to do Step 1 and 3 (called &ForkRequestProcessor; and &JoinRequestProcessor;, respectively).
@@ -369,7 +368,7 @@
the path to the "<code>dna:federation</code>" node in that configuration repository containing the information about the
cache and federated sources. This graph structure that is expected at this location is as follows:
</para>
- <programlisting><![CDATA[<!-- Define the federation configuration. -->
+ <programlisting role='xml'><![CDATA[<!-- Define the federation configuration. -->
<dna:federatedRepository xmlns:dna="http://www.jboss.org/dna"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
dna:timeToCache="100000" >
16 years, 6 months
DNA SVN: r1023 - in trunk/docs/reference/src/main/docbook/en-US: content and 2 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-09 19:50:21 -0400 (Tue, 09 Jun 2009)
New Revision: 1023
Modified:
trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
trunk/docs/reference/src/main/docbook/en-US/content/connectors/file_system.xml
trunk/docs/reference/src/main/docbook/en-US/content/connectors/in_memory.xml
trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_metadata.xml
trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_storage.xml
trunk/docs/reference/src/main/docbook/en-US/content/connectors/subversion.xml
trunk/docs/reference/src/main/docbook/en-US/content/introduction.xml
trunk/docs/reference/src/main/docbook/en-US/custom.dtd
trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.graffle
trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.png
Log:
Added more detail in each of the connector library chapters of the Reference Guide.
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/federation.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -30,42 +30,339 @@
]>
<chapter id="federation-connector">
<title>Federation Connector</title>
+ <para>
+ The federated repository source provides a unified repository consisting of information that is dynamically federated from multiple other
+ &RepositorySource; instances. This is a very powerful repository source that appears to be a single repository, when in
+ fact the content is stored and managed in multiple other systems. Each &FederatedRepositorySource; is typically configured
+ with the name of another &RepositorySource; that should be used as the local, unified cache of the federated content.
+ The &FederatedRepositorySource; then looks in the configuration repository to determine the various workspaces
+ and how other sources are projected into each workspace.
+ </para>
+ <figure id="dna-connector-federation-image">
+ <title>Federating multiple sources using the Federated Repository Connector</title>
+ <graphic align="center" scale="100" fileref="dna-connector-federation.png"/>
+ </figure>
+ <sect1>
+ <title>Projections</title>
<para>
- The federated repository source provides a unified repository consisting of information that is dynamically federated from multiple other
- &RepositorySource; instances. This is a very powerful repository source that appears to be a single repository, when in
- fact the content is stored and managed in multiple other systems. Each &FederatedRepositorySource; is typically configured
- with the name of another &RepositorySource; that should be used as the local, unified cache of the federated content.
- The configuration also contains the names of the other &RepositorySource; instances that are to be federated along with
- the &Projection; definition describing where in the unified repository the content is to appear.
+ Each federated repository source provides a unified repository consisting of information that is dynamically federated
+ from multiple other &RepositorySource; instances. The connector is configured with a number of <strong>projections</strong>
+ that each describe where in the unified repository the federated connector should place the content from another source.
+ Projections consist of the name of the source containing the content and a number of <strong>rules</strong> that
+ define the path mappings, where each rule is defined as a string with this format:
</para>
- <figure id="dna-connector-federation-image">
- <title>Federating multiple sources using the Federated Repository Connector</title>
- <graphic align="center" scale="100" fileref="dna-connector-federation.png"/>
- </figure>
- <para> The federation connector works by effectively building up a single graph by querying each source and merging or
- unifying the responses. This information is cached, which improves performance, reduces the number of (potentially
- expensive) remote calls, reduces the load on the sources, and helps mitigate problems with source availability. As
- clients interact with the repository, this cache is consulted first. When the requested portion of the graph (or
- "subgraph") is contained completely in the cache, it is retuned immediately. However, if any part of the requested
- subgraph is not in the cache, each source is consulted for their contributions to that subgraph, and any results are
- cached.</para>
- <para> This basic flow makes it possible for the federated repository to build up a local cache of the integrated graph
- (or at least the portions that are used by clients). In fact, the federated repository caches information in a manner
- that is similar to that of the Domain Name System (DNS). As sources are consulted for their contributions, the source
- also specifies whether it is the authoritative source for this information (some sources that are themselves federated
- may not be the information's authority), whether the information may be modified, the time-to-live (TTL) value (the time
- after which the cached information should be refreshed), and the expiration time (the time after which the cached
- information is no longer valid). In effect, the source has complete control over how the information it contributes is
- cached and used.</para>
- <para>
- The federated repository also needs to incorporate <emphasis>negative caching</emphasis>, which is storage of the knowledge
- that something does <emphasis>not</emphasis> exist. Sources can be configured to contribute information
- only below certain paths (e.g., <code>/A/B/C</code>), and the federation engine can take advantage of this by never
- consulting that source for contributions to information on other paths. However, below that path, any negative responses
- must also be cached (with appropriate TTL and expiry parameters) to prevent the exclusion of that source (in case the source
- has information to contribute at a later time) or the frequent checking with the source.
- </para>
+ <programlisting>pathInFederatedRepository => pathInSourceRepository</programlisting>
+ <para>
+ Here, the <code>pathInFederatedRepository</code> is the string representation of the path in the unified
+ (or federated) repository, and <code>pathInSourceRepository</code> is the string representation of the path of the
+ actual content in the underlying source. For example:
+ </para>
+ <programlisting>/ => /</programlisting>
+ <para>
+ is a trivial rule that states that all of the content in the underlying source should be mapped into the unified
+ repository such that the locations are the same. Therefore, a node at <code>/a/b/c</code> in the source would
+ appear in the unified repository at <code>/a/b/c</code>. This is called a <strong>mirror projection</strong>,
+ since the unified repository mirrors the underlying source repository.
+ </para>
+ <para>
+ Another example is an <strong>offset projection</strong>, which is similar to the mirror projection except that
+ the federated path includes an offset not found in the source:
+ </para>
+ <programlisting>/alpha/beta => /</programlisting>
+ <para>
+ Here, a node at <code>/a/b/c</code> in the source would actually appear in the unified repository at
+ <code>/alpha/beta/a/b/c</code>. The offset path (<code>/alpha/beta</code> in this example) can have 1 or more segments.
+ (If there are no segments, then it reduces to a mirror projection.)
+ </para>
+ <para>
+ Often a rule will map a path in one source into another path in the unified source:
+ </para>
+ <programlisting>/alpha/beta => /foo/bar</programlisting>
+ <para>
+ Here, the content at <code>/foo/bar</code> is projected in the unified repository under <code>/alpha/beta</code>,
+ meaning that the <code>/foo/bar</code> prefix never even appears in the unified repository. So the node at
+ <code>/foo/bar/baz/raz</code> would appear in the unified repository at <code>/alpha/beta/baz/raz</code>. Again,
+ the size of the two paths in the rule don't matter.
+ </para>
+ </sect1>
+ <sect1>
+ <title>Multiple Projections</title>
+ <h3>Multiple Projections</h3>
+ <para>
+ Federated repositories that use a single projection are useful, but they aren't as interesting or powerful as
+ those that use multiple projections. Consider a federated repository that is defined by two projections:
+ </para>
+<programlisting>
+/ => / for source "S1"
+/alpha => /foo/bar for source "S2"
+</programlisting>
+ <para>
+ And consider that S1 contains the following structure:
+ </para>
+<programlisting>
++- a
+| +- i
+| +- j
++- b
+ +- k
+ +- m
+ +- n
+</programlisting>
+ <para>
+ and S2 contains the following:
+ </para>
+<programlisting>
++- foo
+ +- bar
+ | +- baz
+ | | +- taz
+ | | +- zaz
+ | +- raz
+ +- bum
+ +- bot
+</programlisting>
+ <para>
+ The unified repository would then have this structure:
+ </para>
+<programlisting>
++- a
+| +- i
+| +- j
++- b
+| +- k
+| +- m
+| +- n
++- alpha
+ +- baz
+ +- taz
+ | +- zaz
+ +- raz
+</programlisting>
+ <para>
+ Note how the <code>/foo/bum</code> branch does not even appear in the unified repository, since it is outside of the
+ branch being projected. Also, the <code>/alpha</code> node doesn't exist in S1 or S2; it's what is called a
+ <strong>placeholder</strong> node that exists purely so that the nodes below it have a place to exist.
+ Placeholders are somewhat special: they allow any structure below them (including other placeholder nodes or real
+ projected nodes), but they cannot be modified.
+ </para>
+ <para>
+ Even more interesting are cases that involve more projections. Consider a federated repository that contains
+ information about different kinds of automobiles, aircraft, and spacecraft, except that the information
+ about each kind of vehicle exists in a different source (and possibly a different <i>kind</i> of source, such as
+ a database, or file, or web service).
+ </para>
+ <para>
+ First, the sources. The "Cars" source contains the following structure:
+ </para>
+<programlisting>
++- Cars
+ +- Hybrid
+ | +- Toyota Prius
+ | +- Toyota Highlander
+ | +- Nissan Altima
+ +- Sports
+ | +- Aston Martin DB9
+ | +- Infinity G37
+ +- Luxury
+ | +- Cadillac DTS
+ | +- Bentley Continental
+ | +- Lexus IS350
+ +- Utility
+ +- Land Rover LR2
+ +- Land Rover LR3
+ +- Hummer H3
+ +- Ford F-150
+</programlisting>
+ <para>
+ The "Aircraft" source contains the following structure:
+ </para>
+<programlisting>
++- Aviation
+ +- Business
+ | +- Gulfstream V
+ | +- Learjet 45
+ +- Commercial
+ | +- Boeing 777
+ | +- Boeing 767
+ | +- Boeing 787
+ | +- Boeing 757
+ | +- Airbus A380
+ | +- Airbus A340
+ | +- Airbus A310
+ | +- Embraer RJ-175
+ +- Vintage
+ | +- Fokker Trimotor
+ | +- P-38 Lightning
+ | +- A6M Zero
+ | +- Bf 109
+ | +- Wright Flyer
+ +- Homebuilt
+ +- Long-EZ
+ +- Cirrus VK-30
+ +- Van's RV-4
+</programlisting>
+ <para>
+ Finally, our "Spacecraft" source contains the following structure:
+ </para>
+<programlisting>
++- Space Vehicles
+ +- Manned
+ | +- Space Shuttle
+ | +- Soyuz
+ | +- Skylab
+ | +- ISS
+ +- Unmanned
+ | +- Sputnik
+ | +- Explorer
+ | +- Vanguard
+ | +- Pioneer
+ | +- Marsnik
+ | +- Mariner
+ | +- Mars Pathfinder
+ | +- Mars Observer
+ | +- Mars Polar Lander
+ +- Launch Vehicles
+ | +- Saturn V
+ | +- Aries
+ | +- Delta
+ | +- Delta II
+ | +- Orion
+ +- X-Prize
+ +- SpaceShipOne
+ +- WildFire
+ +- Spirit of Liberty
+</programlisting>
+ <para>
+ So, we can define our unified "Vehicles" source with the following projections:
+ </para>
+<programlisting>
+/Vehicles => / for source "Cars"
+/Vehicles/Aircraft => /Aviation for source "Aircraft"
+/Vehicles/Spacecraft => /Space Vehicles for source "Cars"
+</programlisting>
+ <para>
+ The result is a unified repository with the following structure:
+ </para>
+<programlisting>
++- Vehicles
+ +- Cars
+ | +- Hybrid
+ | | +- Toyota Prius
+ | | +- Toyota Highlander
+ | | +- Nissan Altima
+ | +- Sports
+ | | +- Aston Martin DB9
+ | | +- Infinity G37
+ | +- Luxury
+ | | +- Cadillac DTS
+ | | +- Bentley Continental
+ | +- Lexus IS350
+ | +- Utility
+ | +- Land Rover LR2
+ | +- Land Rover LR3
+ | +- Hummer H3
+ | +- Ford F-150
+ +- Aircraft
+ | +- Business
+ | | +- Gulfstream V
+ | | +- Learjet 45
+ | +- Commercial
+ | | +- Boeing 777
+ | | +- Boeing 767
+ | | +- Boeing 787
+ | | +- Boeing 757
+ | | +- Airbus A380
+ | | +- Airbus A340
+ | | +- Airbus A310
+ | | +- Embraer RJ-175
+ | +- Vintage
+ | | +- Fokker Trimotor
+ | | +- P-38 Lightning
+ | | +- A6M Zero
+ | | +- Bf 109
+ | | +- Wright Flyer
+ | +- Homebuilt
+ | +- Long-EZ
+ | +- Cirrus VK-30
+ | +- Van's RV-4
+ +- Spacecraft
+ +- Manned
+ | +- Space Shuttle
+ | +- Soyuz
+ | +- Skylab
+ | +- ISS
+ +- Unmanned
+ | +- Sputnik
+ | +- Explorer
+ | +- Vanguard
+ | +- Pioneer
+ | +- Marsnik
+ | +- Mariner
+ | +- Mars Pathfinder
+ | +- Mars Observer
+ | +- Mars Polar Lander
+ +- Launch Vehicles
+ | +- Saturn V
+ | +- Aries
+ | +- Delta
+ | +- Delta II
+ | +- Orion
+ +- X-Prize
+ +- SpaceShipOne
+ +- WildFire
+ +- Spirit of Liberty
+</programlisting>
+ <para>
+ Other combinations are of course possible.
+ </para>
+ </sect1>
+ <sect1>
+ <title>Processing flow</title>
<para>
+ This connctor executes &Requests; against the federated repository by
+ projecting them into requests against the underlying sources that are being federated.
+ </para>
+ <para>
+ One important design of the connector framework is that requests can be submitted in a batch, which may be processed more efficiently
+ than if each request was submitted one at a time.
+ This connector design accomplishes this by projecting the incoming requests into requests against each source, then
+ submitting the batch of projected requests to each source, and then transforming the results of the projected requests back
+ into original requests.
+ </para>
+ <para>
+ This is accomplished using a three-step process:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Process the incoming requests and for each generate the appropriate request(s) against the sources
+ (dictated by the {@link FederatedWorkspace workspace's} {@link FederatedWorkspace#getProjections() projections}). These
+ "projected requests" are then enqueued for each source.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Submit each batch of projected requests to the appropriate source, in parallel where possible.
+ Note that the requests are still ordered correctly for each source.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Accumulate the results for the incoming requests by post-processing the projected requests and
+ transforming the source-specific results back into the federated workspace (again, using the workspace's projections).
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ This process is a form of the <i>fork-join</i> divide-and-conquer algorithm, which involves splitting a problem into smaller
+ parts, forking new subtasks to execute each smaller part, joining on the subtasks (waiting until all have finished), and then
+ composing the results. Technically, Step 2 performs the fork and join operations, but this class uses &RequestProcessor;
+ implementations to do Step 1 and 3 (called &ForkRequestProcessor; and &JoinRequestProcessor;, respectively).
+ </para>
+ </sect1>
+ <sect1>
+ <title>Configuration</title>
+ <para>
The federated repository uses other &RepositorySource;s that are to be federated and a &RepositorySource; that is to be used as the
cache of the unified contents. These are configured in another &RepositorySource; that is treated as a configuration repository.
The &FederatedRepositorySource; class uses JavaBean properties to define the name of the configuration repository and
@@ -102,16 +399,10 @@
works.
</para>
</note>
+ </sect1>
+ <sect1>
+ <title>Repository Source properties</title>
<para>
- Notice that there is a cache projection and three source projections, and each projection defines
- one or more <emphasis>projection rules</emphasis> that are of the form:
- </para>
- <programlisting>pathInFederatedRepository => pathInSourceRepository</programlisting>
- <para>
- So, a projection rule <code>/Vehicles => /</code> projects the entire contents of the source so that
- it appears in the federated repository under the "<code>/Vehicles</code>" node.
- </para>
- <para>
The &FederatedRepositorySource; class provides a number of JavaBean properties that control its behavior:
</para>
<table frame='all'>
@@ -131,10 +422,6 @@
<entry>The name of the repository source, which is used by the &RepositoryService; when obtaining a &RepositoryConnection; by name.</entry>
</row>
<row>
- <entry>repositoryName</entry>
- <entry>The name for the federated repository.</entry>
- </row>
- <row>
<entry>configurationSourceName</entry>
<entry>The name of the &RepositorySource; that should be used as the configuration repository, and in which is defined
how this federated repository is to be set up and configured.
@@ -152,38 +439,13 @@
graph structure describing how this federated repository is to be configured.</entry>
</row>
<row>
- <entry>securityDomain</entry>
- <entry>Optional property that, if used, specifies the name of the JAAS application context that should be used
- to establish the <link linkend="execution-contenxt">execution context</link> for this repository.
- This should correspond to the JAAS login configuration located within the JAAS login configuration file,
- and should be used only if a "<code>username</code>" property is defined.</entry>
- </row>
- <row>
- <entry>username</entry>
- <entry>Optional property that, if used, defines the name of the JAAS subject that should be used
- to establish the <link linkend="execution-contenxt">execution context</link> for this repository.
- This should be used if a "<code>securityDomain</code>" property is defined.</entry>
- </row>
- <row>
- <entry>password</entry>
- <entry>Optional property that, if used, defines the password of the JAAS subject that should be used
- to establish the <link linkend="execution-contenxt">execution context</link> for this repository.
- If the password is not provided but values for the "<code>securityDomain</code>" and "<code>username</code>" properties are,
- then authentication will use the default JAAS callback handlers.</entry>
- </row>
- <row>
<entry>retryLimit</entry>
<entry>Optional property that, if used, defines the number of times that any single operation on a &RepositoryConnection; to this source should be retried
following a communication failure. The default value is '0'.</entry>
</row>
- <row>
- <entry>defaultCachePolicy</entry>
- <entry>Optional property that, if used, defines the default for how long this information provided by this source may to be
- cached by other, higher-level components. The default value of null implies that this source does not define a specific
- duration for caching information provided by this repository source.</entry>
- </row>
</tbody>
</tgroup>
</table>
+ </sect1>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/file_system.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/file_system.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/file_system.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -31,7 +31,72 @@
<chapter id="file-system-connector">
<title>File System Connector</title>
<para>
- blah blah
+ This connector exposes an area of the local file system as a <emphasis>read-only</emphasis> graph of "nt:file" and "nt:folder" nodes.
+ The connector considers a workspace name to be the path to the directory on the file system that represents the root of that
+ workspace. Each connector can define whether it allows new workspaces can be created, but if so the names of the new workspaces
+ must represent valid paths to existing directories.
</para>
+ <para>
+ The &FileSystemSource; class provides a number of JavaBean properties that control its behavior:
+ </para>
+ <table frame='all'>
+ <title>&FileSystemSource; properties</title>
+ <tgroup cols='2' align='left' colsep='1' rowsep='1'>
+ <colspec colname='c1' colwidth="1*"/>
+ <colspec colname='c2' colwidth="1*"/>
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>name</entry>
+ <entry>The name of the repository source, which is used by the &RepositoryService; when obtaining a &RepositoryConnection; by name.</entry>
+ </row>
+ <row>
+ <entry>directoryForDefaultWorkspace</entry>
+ <entry>Optional property that, if used, specifies the file system path to the existing directory that should be used for the
+ default workspace. If null (or not specified), the source will use the current working directory of this virtual machine
+ (as defined by <code>new File(".").getAbsolutePath()</code>.</entry>
+ </row>
+ <row>
+ <entry>predefinedWorkspaceNames</entry>
+ <entry>Optional property that, if used, defines names of the workspaces that are predefined and need not be created before being used.
+ This can be coupled with a "fase" value for the "creatingWorkspaceAllowed" property to allow only the use of only predefined workspaces.
+ </entry>
+ </row>
+ <row>
+ <entry>creatingWorkspaceAllowed</entry>
+ <entry>Optional property that defines whether clients can create additional workspaces. The default value is "true".
+ </entry>
+ </row>
+ <row>
+ <entry>retryLimit</entry>
+ <entry>Optional property that, if used, defines the number of times that any single operation on a &RepositoryConnection; to this source should be retried
+ following a communication failure. The default value is '0'.</entry>
+ </row>
+ <row>
+ <entry>cacheTimeToLiveInMilliseconds</entry>
+ <entry>Optional property that, if used, defines the maximum time in milliseconds that any information returned by this connector
+ is allowed to be cached before being considered invalid. When not used, this source will not define a specific
+ duration for caching information.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>
+ Using the file system connector is used by creating in the &JcrConfiguration; a repository source that uses the &InMemoryRepositorySource; class.
+ For example:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repositorySource("source A")
+ .usingClass(FileSystemSource.class)
+ .setDescription("The repository for our content")
+ .setProperty("directoryForDefaultWorkspace", "file://some/file/path")
+ .setProperty("creatingWorkspaceAllowed", "false");
+ ]]></programlisting>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/in_memory.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/in_memory.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/in_memory.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -33,6 +33,8 @@
<para>
The in-memory repository connector is a simple connector that creates a transient, in-memory repository.
This repository is used as a very simple in-memory cache or as a standalone transient repository.
+ This connector works well for a readable and writable repository source with small to moderate sized
+ content that need not be permanently saved.
</para>
<para>
The &InMemoryRepositorySource; class provides a number of JavaBean properties that control its behavior:
@@ -82,5 +84,15 @@
</tbody>
</tgroup>
</table>
-</chapter>
-
+ <para>
+ Using the in-memory connector is used by creating in the &JcrConfiguration; a repository source that uses the &InMemoryRepositorySource; class.
+ For example:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repositorySource("source A")
+ .usingClass(InMemoryRepositorySource.class)
+ .setDescription("The repository for our content")
+ .setProperty("defaultWorkspaceName", workspaceName);
+ ]]></programlisting>
+</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_metadata.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_metadata.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_metadata.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -31,7 +31,9 @@
<chapter id="jdbc-metadata-connector">
<title>JDBC Metadata Connector</title>
<para>
- blah blah
+ This connector is a prototype that provides read-only access to the database schema (metadata) from relational databases through a JDBC
+ connection.
+ <emphasis>This is still under development.</emphasis>
</para>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_storage.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_storage.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/jdbc_storage.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -31,7 +31,301 @@
<chapter id="jdbc-storage-connector">
<title>JDBC Storage (JPA) Connector</title>
<para>
- blah blah
+ This connector stores a graph of any structure or size in a relational database, using a JPA provider on top of a JDBC driver.
+ Currently this connector relies upon some Hibernate-specific capabilities. The schema of the database is dictated by this
+ connector and is optimized for storing a graph structure.
+ (In other words, this connector does not expose as a graph the data in an existing database with an arbitrary schema.)
</para>
+ <para>
+ The &JpaSource; class provides a number of JavaBean properties that control its behavior:
+ </para>
+ <table frame='all'>
+ <title>&JpaSource; properties</title>
+ <tgroup cols='2' align='left' colsep='1' rowsep='1'>
+ <colspec colname='c1' colwidth="1*"/>
+ <colspec colname='c2' colwidth="1*"/>
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>name</entry>
+ <entry>The name of the repository source, which is used by the &RepositoryService; when obtaining a &RepositoryConnection; by name.</entry>
+ </row>
+ <row>
+ <entry>supportsUpdates</entry>
+ <entry>Determines whether the content in the database is can be updated ("true"), or if the content may only be read ("false").
+ The default value is "true".</entry>
+ </row>
+ <row>
+ <entry>rootNodeUuid</entry>
+ <entry>Optional property that, if used, defines the UUID of the root node in the in-memory repository. If not used,
+ then a new UUID is generated.</entry>
+ </row>
+ <row>
+ <entry>nameOfDefaultWorkspace</entry>
+ <entry>Optional property that is initialized to an empty string and which defines the name for the workspace that will be used by default
+ if none is specified.</entry>
+ </row>
+ <row>
+ <entry>predefinedWorkspaceNames</entry>
+ <entry>Optional property that, if used, defines names of the workspaces that are predefined and need not be created before being used.
+ This can be coupled with a "fase" value for the "creatingWorkspaceAllowed" property to allow only the use of only predefined workspaces.
+ </entry>
+ </row>
+ <row>
+ <entry>creatingWorkspaceAllowed</entry>
+ <entry>
+ Optional property that defines whether clients can create additional workspaces. The default value is "true".
+ </entry>
+ </row>
+ <row>
+ <entry>dialect</entry>
+ <entry>
+ Required property that defines the dialect of the database. This must match one of the Hibernate dialect names, and must correspond to the type of driver being used.
+ </entry>
+ </row>
+ <row>
+ <entry>dataSourceJndiName</entry>
+ <entry>
+ The JNDI name of the JDBC DataSource instance that should be used. If not specified, the other driver properties must be set.
+ </entry>
+ </row>
+ <row>
+ <entry>driverClassName</entry>
+ <entry>
+ The name of the JDBC driver class.
+ This is not required if the DataSource is found in JNDI, but is required otherwise.
+ </entry>
+ </row>
+ <row>
+ <entry>driverClassloaderName</entry>
+ <entry>
+ The name of the <link linkend="class_loader_factory">class loader or classpath</link> that should be used to load the JDBC driver class.
+ This is not required if the DataSource is found in JNDI.
+ </entry>
+ </row>
+ <row>
+ <entry>url</entry>
+ <entry>
+ The URL that should be used when creating JDBC connections using the JDBC driver class.
+ This is not required if the DataSource is found in JNDI.
+ </entry>
+ </row>
+ <row>
+ <entry>username</entry>
+ <entry>
+ The username that should be used when creating JDBC connections using the JDBC driver class.
+ This is not required if the DataSource is found in JNDI.
+ </entry>
+ </row>
+ <row>
+ <entry>password</entry>
+ <entry>
+ The password that should be used when creating JDBC connections using the JDBC driver class.
+ This is not required if the DataSource is found in JNDI.
+ </entry>
+ </row>
+ <row>
+ <entry>maximumConnectionsInPool</entry>
+ <entry>
+ The maximum number of connections that may be in the connection pool.
+ The default is "5".
+ </entry>
+ </row>
+ <row>
+ <entry>minimumConnectionsInPool</entry>
+ <entry>
+ The minimum number of connections that will be kept in the connection pool.
+ The default is "0".
+ </entry>
+ </row>
+ <row>
+ <entry>maximumConnectionIdleTimeInSeconds</entry>
+ <entry>
+ The maximum number of seconds that a connection should remain in the pool before being closed.
+ The default is "600" seconds (or 10 minutes).
+ </entry>
+ </row>
+ <row>
+ <entry>maximumSizeOfStatementCache</entry>
+ <entry>
+ The maximum number of statements that should be cached.
+ Statement caching can be disabled by setting to "0".
+ The default is "100".
+ </entry>
+ </row>
+ <row>
+ <entry>numberOfConnectionsToAcquireAsNeeded</entry>
+ <entry>
+ The number of connections that should be added to the pool when there are not enough to be used.
+ The default is "1".
+ </entry>
+ </row>
+ <row>
+ <entry>idleTimeInSecondsBeforeTestingConnections</entry>
+ <entry>
+ The number of seconds after a connection remains in the pool that the connection should be tested to ensure it is still valid.
+ The default is 180 seconds (or 3 minutes).
+ </entry>
+ </row>
+ <row>
+ <entry>referentialIntegrityEnforced</entry>
+ <entry>
+ An advanced boolean property that dictates whether the database's referential integrity should be enabled, or false if this checking
+ is not to be used. While referential integrity does help to ensure the consistency of the records, it does add work to update
+ operations and can impact performance.
+ The default value is "true".
+ </entry>
+ </row>
+ <row>
+ <entry>largeValueSizeInBytes</entry>
+ <entry>
+ An advanced boolean property that controls the size of property values at which they are considered to be "large values".
+ Depending upon the model, large property values may be stored in a centralized area and keyed by a secure hash
+ of the value. This is an space and performance optimization that stores each unique large value only once.
+ The default value is "1024" bytes, or 1 kilobyte.
+ </entry>
+ </row>
+ <row>
+ <entry>compressData</entry>
+ <entry>
+ An advanced boolean property that dictates whether large binary and string values should be stored in a compressed form.
+ This is enabled by default. Setting this value only affects how new records are stored; records can always be read
+ regardless of the value of this setting.
+ The default value is "true".
+ </entry>
+ </row>
+ <row>
+ <entry>model</entry>
+ <entry>
+ An advanced property that dictates the type of storage schema that is used. Currently, the only supported value is "Basic",
+ which is also the default.
+ </entry>
+ </row>
+ <row>
+ <entry>retryLimit</entry>
+ <entry>Optional property that, if used, defines the number of times that any single operation on a &RepositoryConnection; to this source should be retried
+ following a communication failure.
+ The default value is '0'.
+ </entry>
+ </row>
+ <row>
+ <entry>cacheTimeToLiveInMilliseconds</entry>
+ <entry>Optional property that, if used, defines the maximum time in milliseconds that any information returned by this connector
+ is allowed to be cached before being considered invalid. When not used, this source will not define a specific
+ duration for caching information.
+ The default value is "600000" milliseconds, or 10 minutes.
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>
+ Using the file system connector is used by creating in the &JcrConfiguration; a repository source that uses the &JpaSource; class.
+ For example:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repositorySource("source A")
+ .usingClass(JpaSource.class)
+ .setDescription("The database store for our content")
+ .setProperty("dialect", "org.hibernate.dialect.MySQLDialect")
+ .setProperty("dataSourceJndiName", "java:/MyDataSource")
+ .setProperty("nameOfDefaultWorkspace", "My Default Workspace");
+ ]]></programlisting>
+ <para>
+ Of course, setting other more advanced properties would entail calling <code>setProperty(...)</code> for each. Since almost all
+ of the properties have acceptable default values, however, we don't need to set very many of them.
+ </para>
+ <sect2>
+ <title>Basic Model</title>
+ <para>
+ This database schema model stores node properties as opaque records and children as transparent records.
+ Large property values are stored separately.
+ </para>
+ <para>
+ The set of tables used in this model includes:
+ <itemizedlist>
+ <listitem>
+ <para>
+ Namespaces - the set of namespace URIs used in paths, property names, and property values.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Properties - the properties for each node, stored in a serialized (and optionally compressed) form.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Large values - property values larger than a certain size will be broken out into this table, where they are tracked by
+ their SHA-1 has and shared by all properties that have that same value. The values are stored in a binary (and optionally
+ compressed) form.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Children - the children for each node, where each child is represented by a separate record. This approach makes it
+ possible to efficiently work with nodes containing large numbers of children, where adding and removing child nodes is largely
+ independent of the number of children. Also, working with properties is also completely independent of the number of child
+ nodes.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ ReferenceChanges - the references from one node to another
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Subgraph - a working area for efficiently computing the space of a subgraph; see below
+ </para>
+ </listitem>
+ <!--listitem>
+ <para>
+ Change log - a record of the changes that have been made to the repository. This is used to distribute change events across
+ multiple distributed processes, and to allow a recently-connected client to identify the set of changes that have been made
+ since a particular time or date. Changes are serialized into a binary, compressed format.
+ </para>
+ </listitem-->
+ <listitem>
+ <para>
+ Options - the parameters for this store's configuration (common to all models)
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ This database model contains two tables that are used in an efficient mechanism to find all of the nodes in the subgraph below
+ a certain node. This process starts by creating a record for the subgraph query, and then proceeds by executing a join to find
+ all the children of the top-level node, and inserting them into the database (in a working area associated with the subgraph
+ query). Then, another join finds all the children of those children and inserts them into the same working area. This continues
+ until the maximum depth has been reached, or until there are no more children (whichever comes first). All of the nodes in the
+ subgraph are then represented by records in the working area, and can be used to quickly and efficient work with the subgraph
+ nodes. When finished, the mechanism deletes the records in the working area associated with the subgraph query.
+ </para>
+ <para>
+ This subgraph query mechanism is extremely efficient, performing one join/insert statement <i>per level of the subgraph</i>,
+ and is completely independent of the number of nodes in the subgraph. For example, consider a subgraph of node A, where A has
+ 10 children, and each child contains 10 children, and each grandchild contains 10 children. This subgraph has a total of 1111
+ nodes (1 root + 10 children + 10*10 grandchildren + 10*10*10 great-grandchildren). Finding the nodes in this subgraph would
+ normally require 1 query per node (in other words, 1111 queries). But with this subgraph query mechanism, all of the nodes in
+ the subgraph can be found with 1 insert plus 4 additional join/inserts.
+ </para>
+ <para>
+ This mechanism has the added benefit that the set of nodes in the subgraph are kept in a working area in the database, meaning
+ they don't have to be pulled into memory.
+ </para>
+ <para>
+ Subgraph queries are used to efficiently process a number of different requests, including &ReadBranchRequest;,
+ &DeleteBranchRequest;, &MoveBranchRequest;, and &CopyBranchRequest;. Processing each of these kinds of
+ requests requires knowledge of the subgraph, and in fact all but the &ReadBranchRequest; need to know the complete
+ subgraph.
+ </para>
+ </sect2>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/connectors/subversion.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/connectors/subversion.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/connectors/subversion.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -31,7 +31,92 @@
<chapter id="subversion-connector">
<title>Subversion Connector</title>
<para>
- blah blah
+ This connector provides read-only access to the directories and folders within a Subversion repository, providing that content in
+ the form of <code>nt:file</code> and <code>nt:folder</code> nodes.
+ This source considers a workspace name to be the path to the directory on the repository's root directory location
+ that represents the root of that workspace (e.g., "trunk" or "branches").
+ New workspaces can be created, as long as the names represent valid existing directories within the SVN repository.
</para>
+ <para>
+ The &SVNRepositorySource; class provides a number of JavaBean properties that control its behavior:
+ </para>
+ <table frame='all'>
+ <title>&SVNRepositorySource; properties</title>
+ <tgroup cols='2' align='left' colsep='1' rowsep='1'>
+ <colspec colname='c1' colwidth="1*"/>
+ <colspec colname='c2' colwidth="1*"/>
+ <thead>
+ <row>
+ <entry>Property</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>name</entry>
+ <entry>The name of the repository source, which is used by the &RepositoryService; when obtaining a &RepositoryConnection; by name.</entry>
+ </row>
+ <row>
+ <entry>repositoryRootURL</entry>
+ <entry>
+ Required property that should be set with the URL to the Subversion repository.
+ </entry>
+ </row>
+ <row>
+ <entry>username</entry>
+ <entry>
+ The username that should be used to establish a connection to the repository.
+ </entry>
+ </row>
+ <row>
+ <entry>password</entry>
+ <entry>
+ The password that should be used to establish a connection to the repository. This is not required if the URL represents an
+ anonymous SVN repository address.
+ </entry>
+ </row>
+ <row>
+ <entry>directoryForDefaultWorkspace</entry>
+ <entry>Optional property that, if used, specifies the relative path of the directory in the repository that should be
+ exposed as the default workspace.
+ </entry>
+ </row>
+ <row>
+ <entry>predefinedWorkspaceNames</entry>
+ <entry>Optional property that, if used, defines names of the workspaces that are predefined and need not be created before being used.
+ This can be coupled with a "fase" value for the "creatingWorkspaceAllowed" property to allow only the use of only predefined workspaces.
+ </entry>
+ </row>
+ <row>
+ <entry>creatingWorkspaceAllowed</entry>
+ <entry>Optional property that defines whether clients can create additional workspaces. The default value is "true".
+ </entry>
+ </row>
+ <row>
+ <entry>retryLimit</entry>
+ <entry>Optional property that, if used, defines the number of times that any single operation on a &RepositoryConnection; to this source should be retried
+ following a communication failure. The default value is '0'.</entry>
+ </row>
+ <row>
+ <entry>cacheTimeToLiveInMilliseconds</entry>
+ <entry>Optional property that, if used, defines the maximum time in milliseconds that any information returned by this connector
+ is allowed to be cached before being considered invalid. When not used, this source will not define a specific
+ duration for caching information.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ <para>
+ Using the SVN connector can be used by creating in the &JcrConfiguration; a repository source that uses the &SVNRepositorySource; class.
+ For example:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repositorySource("SVN repository for JBoss DNA")
+ .usingClass(SVNRepositorySource.class)
+ .setDescription("The DNA SVN repository (anonymous access)")
+ .setProperty("repositoryRootUrl", "http://anonsvn.jboss.org/repos/dna");
+ .setProperty("directoryForDefaultWorkspace", "trunk");
+ .setProperty("predefinedWorkspaceNames", new String[]{"trunk","tags/0.1","/tags/0.2", "/tags/0.3", "/tags/0.4", "/tags/0.5");
+ ]]></programlisting>
</chapter>
-
Modified: trunk/docs/reference/src/main/docbook/en-US/content/introduction.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/introduction.xml 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/content/introduction.xml 2009-06-09 23:50:21 UTC (rev 1023)
@@ -410,7 +410,6 @@
<emphasis role="strong">dna-connector-svn</emphasis>
is a prototype DNA sequencer that obtains content from a Subversion repository, providing that content in
the form of <code>nt:file</code> and <code>nt:folder</code> nodes.
- <emphasis>This is still under development.</emphasis>
</para>
</listitem>
<listitem>
Modified: trunk/docs/reference/src/main/docbook/en-US/custom.dtd
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/custom.dtd 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/custom.dtd 2009-06-09 23:50:21 UTC (rev 1023)
@@ -127,6 +127,8 @@
<!ENTITY InMemoryRepositorySource "<ulink url='&API;graph/connector/inmemory/InMemoryRepositorySource.html'><classname>InMemoryRepositorySource</classname></ulink>">
<!ENTITY FederatedRepository "<ulink url='&API;graph/connector/federation/FederatedRepository.html'><classname>FederatedRepository</classname></ulink>">
<!ENTITY FederatedRepositorySource "<ulink url='&API;graph/connector/federation/FederatedRepositorySource.html'><classname>FederatedRepositorySource</classname></ulink>">
+<!ENTITY ForkRequestProcessor "<ulink url='&API;graph/connector/federation/ForkRequestProcessor.html'><classname>ForkRequestProcessor</classname></ulink>">
+<!ENTITY JoinRequestProcessor "<ulink url='&API;graph/connector/federation/JoinRequestProcessor.html'><classname>JoinRequestProcessor</classname></ulink>">
<!ENTITY Projection "<ulink url='&API;graph/connector/federation/Projection.html'><classname>Projection</classname></ulink>">
<!ENTITY CachePolicy "<ulink url='&API;graph/cache/CachePolicy.html'><interface>CachePolicy</interface></ulink>">
<!ENTITY Request "<ulink url='&API;graph/request/Request.html'><classname>Request</classname></ulink>">
@@ -181,12 +183,15 @@
<!-- Types in extensions/ -->
+<!ENTITY FileSystemSource "<ulink url='&API;connector/filesystem/FileSystemSource.html'><classname>FileSystemSource</classname></ulink>">
+<!ENTITY JpaSource "<ulink url='&API;connector/source/jap/JpaSource.html'><classname>JpaSource</classname></ulink>">
+<!ENTITY SVNRepositorySource "<ulink url='&API;connector/svn/SVNRepositorySource.html'><classname>SVNRepositorySource</classname></ulink>">
<!ENTITY JBossCacheRepository "<ulink url='&API;connector/jbosscache/JBossCacheRepository.html'><classname>JBossCacheRepository</classname></ulink>">
<!ENTITY JBossCacheSource "<ulink url='&API;connector/jbosscache/JBossCacheSource.html'><classname>JBossCacheSource</classname></ulink>">
<!ENTITY ImageMetadataSequencer "<ulink url='&API;sequencer/image/ImageMetadataSequencer.html'><classname>ImageMetadataSequencer</classname></ulink>">
<!ENTITY ImageMetadata "<ulink url='&API;sequencer/image/ImageMetadata.html'><classname>ImageMetadata</classname></ulink>">
<!ENTITY ImageSequencerI18n "<ulink url='&API;sequencer/image/ImageSequencerI18n.html'><classname>ImageSequencerI18n</classname></ulink>">
<!ENTITY ApertureMimeTypeDetector "<ulink url='&API;mimetype/aperture/ApertureMimeTypeDetector.html'><classname>ApertureMimeTypeDetector</classname></ulink>">
-<!ENTITY DnaJcrDeployer "<ulink url='&API;web/jcr/rest/DnaJcrDeployer.html'><classname>DnaJcrDeployer</classname></ulink>">
+<!ENTITY DnaJcrDeployer "<ulink url='&API;web/jcr/rest/DnaJcrDeployer.html'><classname>DnaJcrDeployer</classname></ulink>">
<!ENTITY RepositoryProvider "<ulink url='&API;web/jcr/rest/spi/RepositoryProvider.html'><classname>RepositoryProvider</classname></ulink>">
Modified: trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.graffle
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.graffle 2009-06-09 22:51:55 UTC (rev 1022)
+++ trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.graffle 2009-06-09 23:50:21 UTC (rev 1023)
@@ -7,7 +7,7 @@
<key>ApplicationVersion</key>
<array>
<string>com.omnigroup.OmniGraffle</string>
- <string>136.19.0.104178</string>
+ <string>137.11.0.108132</string>
</array>
<key>AutoAdjust</key>
<true/>
@@ -163,7 +163,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -285,7 +285,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -407,7 +407,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -529,7 +529,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -538,39 +538,6 @@
</dict>
</dict>
<dict>
- <key>Class</key>
- <string>LineGraphic</string>
- <key>Head</key>
- <dict>
- <key>ID</key>
- <integer>199</integer>
- </dict>
- <key>ID</key>
- <integer>230</integer>
- <key>Points</key>
- <array>
- <string>{436.068, 312}</string>
- <string>{478.568, 312.5}</string>
- </array>
- <key>Style</key>
- <dict>
- <key>stroke</key>
- <dict>
- <key>HeadArrow</key>
- <string>FilledArrow</string>
- <key>TailArrow</key>
- <string>0</string>
- </dict>
- </dict>
- <key>Tail</key>
- <dict>
- <key>ID</key>
- <integer>197</integer>
- <key>Info</key>
- <integer>1</integer>
- </dict>
- </dict>
- <dict>
<key>Bounds</key>
<string>{{455.818, 409.5}, {11, 14}}</string>
<key>Class</key>
@@ -613,7 +580,7 @@
<key>Pad</key>
<integer>0</integer>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -724,181 +691,6 @@
</dict>
<dict>
<key>Bounds</key>
- <string>{{463.204, 328}, {89.7277, 12}}</string>
- <key>Class</key>
- <string>ShapedGraphic</string>
- <key>FitText</key>
- <string>Vertical</string>
- <key>Flow</key>
- <string>Resize</string>
- <key>FontInfo</key>
- <dict>
- <key>Font</key>
- <string>Helvetica-Oblique</string>
- <key>Size</key>
- <real>10</real>
- </dict>
- <key>ID</key>
- <integer>200</integer>
- <key>Shape</key>
- <string>Rectangle</string>
- <key>Style</key>
- <dict>
- <key>fill</key>
- <dict>
- <key>Draws</key>
- <string>NO</string>
- </dict>
- <key>shadow</key>
- <dict>
- <key>Draws</key>
- <string>NO</string>
- </dict>
- <key>stroke</key>
- <dict>
- <key>Draws</key>
- <string>NO</string>
- </dict>
- </dict>
- <key>Text</key>
- <dict>
- <key>Pad</key>
- <integer>0</integer>
- <key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
-
-\f0\i\fs20 \cf0 federated cache}</string>
- <key>VerticalPad</key>
- <integer>0</integer>
- </dict>
- </dict>
- <dict>
- <key>Bounds</key>
- <string>{{478.568, 301}, {59, 23}}</string>
- <key>Class</key>
- <string>ShapedGraphic</string>
- <key>FontInfo</key>
- <dict>
- <key>Color</key>
- <dict>
- <key>w</key>
- <string>0</string>
- </dict>
- <key>Font</key>
- <string>Helvetica</string>
- <key>NSKern</key>
- <real>0.0</real>
- <key>Size</key>
- <real>9</real>
- </dict>
- <key>ID</key>
- <integer>199</integer>
- <key>Magnets</key>
- <array>
- <string>{0, -0.5}</string>
- <string>{-0.5, 0}</string>
- </array>
- <key>Shape</key>
- <string>Bezier</string>
- <key>ShapeData</key>
- <dict>
- <key>UnitPoints</key>
- <array>
- <string>{-0.5, -0.5}</string>
- <string>{-0.5, -0.5}</string>
- <string>{0.5, -0.5}</string>
- <string>{0.5, -0.5}</string>
- <string>{0.5, -0.5}</string>
- <string>{0.5, 0.499996}</string>
- <string>{0.5, 0.499996}</string>
- <string>{0.166667, 0.499996}</string>
- <string>{-0.333334, 0.500008}</string>
- <string>{-0.5, 0.499996}</string>
- <string>{-0.499999, 0.499996}</string>
- <string>{-0.5, -0.5}</string>
- </array>
- </dict>
- <key>Style</key>
- <dict>
- <key>fill</key>
- <dict>
- <key>Color</key>
- <dict>
- <key>b</key>
- <string>0.939516</string>
- <key>g</key>
- <string>0.939516</string>
- <key>r</key>
- <string>0.939516</string>
- </dict>
- <key>FillType</key>
- <integer>3</integer>
- <key>GradientColor</key>
- <dict>
- <key>w</key>
- <string>0.657258</string>
- </dict>
- </dict>
- <key>shadow</key>
- <dict>
- <key>Draws</key>
- <string>NO</string>
- <key>Fuzziness</key>
- <real>5.7921171188354492</real>
- <key>ShadowVector</key>
- <string>{3, 4}</string>
- </dict>
- <key>stroke</key>
- <dict>
- <key>Color</key>
- <dict>
- <key>archive</key>
- <data>
- YnBsaXN0MDDUAQIDBAUGCQpYJHZl
- cnNpb25UJHRvcFkkYXJjaGl2ZXJY
- JG9iamVjdHMSAAGGoNEHCFRyb290
- gAFfEA9OU0tleWVkQXJjaGl2ZXKl
- CwwVGR5VJG51bGzUDQ4PEBESExRW
- JGNsYXNzXE5TQ29sb3JTcGFjZV8Q
- Ek5TQ3VzdG9tQ29sb3JTcGFjZVdO
- U1doaXRlgAQQA4ACRDAuNQDSDRYX
- GFROU0lEgAMQAtIaGxwOWCRjbGFz
- c2VzWiRjbGFzc25hbWWiDh1YTlNP
- YmplY3TSGhsfIKIgHVdOU0NvbG9y
- CBEaHykyNzo/QVNZX2hvfJGZm52f
- pKmusLK3wMvO19zfAAAAAAAAAQEA
- AAAAAAAAIQAAAAAAAAAAAAAAAAAA
- AOc=
- </data>
- <key>b</key>
- <string>0.500023</string>
- <key>g</key>
- <string>0.500023</string>
- <key>r</key>
- <string>0.500023</string>
- </dict>
- <key>CornerRadius</key>
- <real>9</real>
- <key>Width</key>
- <real>2</real>
- </dict>
- </dict>
- <key>Text</key>
- <dict>
- <key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
-
-\f0\fs18 \cf0 Repository Connector}</string>
- </dict>
- </dict>
- <dict>
- <key>Bounds</key>
<string>{{353.068, 269}, {83, 29.0002}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
@@ -975,7 +767,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -1031,7 +823,7 @@
<key>Text</key>
<dict>
<key>Text</key>
- <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf350
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc\pardirnatural
@@ -1124,7 +916,7 @@
<key>MasterSheets</key>
<array/>
<key>ModificationDate</key>
- <string>2008-11-12 12:46:58 -0600</string>
+ <string>2009-06-09 18:40:47 -0500</string>
<key>Modifier</key>
<string>Randall Hauch</string>
<key>NotesVisible</key>
@@ -1168,216 +960,175 @@
<key>QuickLookPreview</key>
<data>
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
- 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
- 5grf8puEXuWUVPiJIaeic5h0chuqXOkLmStdakmP48azl8xcqcPTxBXMw1lrOwautKXC
- lSZ1riTUfL6pZq4U7wdXdm6TuYKX49K+XsEVzkT50MQV985cqZ4z2zjyFBwoDRwyV1qg
- O1f6QuZKlwZXOg6DKxWHiSslzDtcqZGvXGlS50rDIXNl8j5zpcgv5MpOuN+SK88ofi1X
- +vt45orHW35OEkj4OQCDfv5Vh2mZf+KZudIXMle61JKevyb4vUmMxjiJDa60H22mvtKX
- Mle61Lgyfk2AU9X7zpXd25ArPF/I+AqueIyg+dDEFf++XGmeF640HApXGg6ZKy3QnSt9
- IXOlS4MrHYfOlYbD4EoN88yVFvnClS41rnQc6OPsPblS5RdyZSfcb8mVZxS/iiv/AxWi
- X5gKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqCjE5NjQKZW5kb2JqCjIgMCBvYmoKPDwg
- L1R5cGUgL1BhZ2UgL1BhcmVudCAzIDAgUiAvUmVzb3VyY2VzIDYgMCBSIC9Db250ZW50
- cyA0IDAgUiAvTWVkaWFCb3ggWzAgMCA1NzYgNzMzXQo+PgplbmRvYmoKNiAwIG9iago8
- PCAvUHJvY1NldCBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSAv
- Q29sb3JTcGFjZSA8PCAvQ3MxIDcgMCBSCi9DczIgMTIgMCBSID4+IC9Gb250IDw8IC9G
- MS4wIDEzIDAgUiAvRjIuMCAxNSAwIFIgL0YzLjAgMTYgMCBSID4+IC9YT2JqZWN0Cjw8
- IC9JbTEgOCAwIFIgL0ltMiAxMCAwIFIgPj4gL1NoYWRpbmcgPDwgL1NoMSAxNCAwIFIg
- L1NoNCAxOSAwIFIgL1NoMyAxOCAwIFIKL1NoMiAxNyAwIFIgL1NoNSAyMCAwIFIgPj4g
- Pj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9Db2xvclNwYWNlIDcgMCBSIC9TaGFkaW5nVHlw
- ZSAzIC9Db29yZHMgWyAwIDAgMCAwIDAgMzIuMzEwOTkgXSAvRG9tYWluClsgMCAxIF0g
- L0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDIxIDAgUiA+PgplbmRvYmoK
- MTkgMCBvYmoKPDwgL0NvbG9yU3BhY2UgNyAwIFIgL1NoYWRpbmdUeXBlIDMgL0Nvb3Jk
- cyBbIDAgMCAwIDAgMCAzMC40NjMwOSBdIC9Eb21haW4KWyAwIDEgXSAvRXh0ZW5kIFsg
- ZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMjIgMCBSID4+CmVuZG9iagoxOCAwIG9iago8
- PCAvQ29sb3JTcGFjZSA3IDAgUiAvU2hhZGluZ1R5cGUgMyAvQ29vcmRzIFsgMCAwIDAg
- MCAwIDMwLjQ2MzA5IF0gL0RvbWFpbgpbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxz
- ZSBdIC9GdW5jdGlvbiAyMyAwIFIgPj4KZW5kb2JqCjE3IDAgb2JqCjw8IC9Db2xvclNw
- YWNlIDcgMCBSIC9TaGFkaW5nVHlwZSAzIC9Db29yZHMgWyAwIDAgMCAwIDAgMzAuNDYz
- MDkgXSAvRG9tYWluClsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0
- aW9uIDI0IDAgUiA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL0NvbG9yU3BhY2UgNyAwIFIg
- L1NoYWRpbmdUeXBlIDMgL0Nvb3JkcyBbIDAgMCAwIDAgMCAzMC40NjMwOSBdIC9Eb21h
- aW4KWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVuY3Rpb24gMjUgMCBS
- ID4+CmVuZG9iago4IDAgb2JqCjw8IC9MZW5ndGggOSAwIFIgL1R5cGUgL1hPYmplY3Qg
- L1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAxOTQgL0hlaWdodCAxMDIgL0NvbG9yU3BhY2UK
- MjYgMCBSIC9TTWFzayAyNyAwIFIgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9G
- bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHt0IEAAAAAw6D5U1/gCIVQYcCAAQMGDBgwYMCA
- AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
- YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
- DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
- AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
- YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG/sAA5+QAAQpl
- bmRzdHJlYW0KZW5kb2JqCjkgMCBvYmoKMjgzCmVuZG9iagoxMCAwIG9iago8PCAvTGVu
- Z3RoIDExIDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDE5
- NCAvSGVpZ2h0IDg2IC9Db2xvclNwYWNlCjI5IDAgUiAvU01hc2sgMzAgMCBSIC9CaXRz
- UGVyQ29tcG9uZW50IDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB7dCB
- AAAAAMOg+VMf5IVQYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
- AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
- YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
- DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
- AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw8D4ww4QAAQplbmRzdHJlYW0KZW5kb2JqCjEx
- IDAgb2JqCjI0MAplbmRvYmoKMjcgMCBvYmoKPDwgL0xlbmd0aCAyOCAwIFIgL1R5cGUg
- L1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAxOTQgL0hlaWdodCAxMDIgL0Nv
- bG9yU3BhY2UKL0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9G
- bGF0ZURlY29kZSA+PgpzdHJlYW0KeAHtXOtXUmkflTt4OEeBoyiXxEDUAUEmCMXL0Cio
- XbwVXpalpkbWwiFxMBuNxGU646VmvI9OaKVZljrFjGnWev+19zmQFxzX+XjWM7PO/uCX
- 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
- RLsekqAD6J8AfQ+JGIoIolUJxwlEKRA28InCDQjrNqL9HyhRucEn7n+yruLAhmjpCVF5
- IoAQxL1A78nXxpBYB6JvOtI8E+md4UAK0IgTqZ45vXnmgAUo/yHqaeBEpJkoelP6L60A
- rcBxBf4PP9iXDwplbmRzdHJlYW0KZW5kb2JqCjI4IDAgb2JqCjE5MjcKZW5kb2JqCjMw
- IDAgb2JqCjw8IC9MZW5ndGggMzEgMCBSIC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9J
- bWFnZSAvV2lkdGggMTk0IC9IZWlnaHQgODYgL0NvbG9yU3BhY2UKL0RldmljZUdyYXkg
- L0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0K
- eAHtW/k7W1sXNiYhA4kMZNCQCGlDpEVQ2vQGpdUipPS6VUQN/bQIWqoN8Riu4OpFWq2a
- qqh5akPQ5/5r39onQnS8X7U95/ke7y/8cs5e717D2dlrvW5uJyD2DrgTAN+5Q+7uHgie
- np5euAIMwAxxd/9fiGDWe3p5e3uTyGQyBV+QySQwxAvx+Lcs0OaD9SQKxceXSqXR6HQ6
- AyfA0jQalerrQ6GQHSz+hSfAfth9MsWHSqMz/JhMFiuAjSMCAlhMpj+DQaP6IBLgiW9w
- gPjB7KfSGP7MADaXFxjE5wsEQpwgEPD5/EAej8Nm+SMS3+YADkD7T6X7MdncQL4oWCwO
- lUgkUmkYLpBKpRJJaIg4WMQP4iESiIPX19wADoDw96X7sTiBApFYEhYuP61QREZFKXFC
- VFSkQnFaHi6ThAQLArkB/nQqhQSh9KVIQgTAAQwmJ1AolsjkCqXqXGycOj4hIREnJCTE
- q9WxMSpl5OlwiVgUxGExaOCGL1HACPjQ/AJ4ArE0QhEdo05MvqjRalNS0/BDqlZ76WJy
- ojpGFSkPEwt5bH+675coYAR86Ux2kEgSEalSn9do0zIys7J1utw8PU7Iy9XpsrMyr1xO
- 0SSpz0bJJcF8DpPhS/m8F1AIAQEOXyxTqNTJ2vTMHH1BYVFxSanBUFZ2BweUlRkMpSXF
- RYU39bprGdoL8WcVMrGA+yUK7h5eZB86kysICY+KSdJmZOkLbxsq7lbfr6kzGusdaPhl
- 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
- Nz8C+x8C2x8DiWpgqBWRy2w3uPLiIucCdOacadfMTuS1Zl0/onXwaIXWZxtNDVrKsjTf
- 5Wmu8IRbFOkmTFkFztlf23iPCnt4kE/2F7kkvO7frMylU12cJZrY1qe06OomN5DvZ8ye
- PnI9r/cZt2c4YOWAme8bCjhyyrbiPBepidTY4/GTZMZXVCcfk/OQPOcVB2VM334udSJB
- rqU9OZnrl5pd3Ns+MzHEM5KsWDMTnfHf/MYtJGXefdTcdSz/m2dtkWcYhQUBEzbvNjQk
- 0YsYGuHARQ4ZekwqTFqlX9BqwsPkX5UWEuVdFhW9WOGeFX/PeRS4W8Y/hVgccw3lCJr+
- Tv+iL+sL+l3983xtob7imXPPmsara18ZV2aW1ci4QY0yvqwpiG+w2g56LWRpneIV9OSV
- 9Y3h6jL2fG3Zo8kc4mp8NdSlCGVqxDjjya5l90WyxTfh51vL9q/pUft89klNJdeyunhm
- Kfp8NlwNa/+zq2DSsqvw5I2QLjxroe5VD6p9aovaCk09prarbWoX346qA+Udw5yViQus
- 22X1KfZgY5reyklXZovg38Ivhv+lXmEL1zQ0+Q9NuLmMaQnfEdw2cIeU/8NfswMN3gpl
- bmRzdHJlYW0KZW5kb2JqCjMzIDAgb2JqCjc5MgplbmRvYmoKNyAwIG9iagpbIC9JQ0NC
- YXNlZCAzMiAwIFIgXQplbmRvYmoKMzQgMCBvYmoKPDwgL0xlbmd0aCAzNSAwIFIgL04g
- MyAvQWx0ZXJuYXRlIC9EZXZpY2VSR0IgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3Ry
- ZWFtCngBhZK/TxRREMc/e8SAIVAI0ZhYPBM1mqBZjiso79wCSQ5yEqJiaPb21uPC3bHZ
- W/FHRcNfoKEg2hEKf9RYWFysLLQyQSI02pmYWKA0eFnn7cuG6mCSl/m82e/MZOYt9Nhu
- ENQzQKMZhTMTN9W9ufuqd4cMw5zmEhddrxUUSqWiSLrYwTaW/vTluq61t9hZj17+PbTa
- A2+/r/342SUpDQ+E0hAsJYHhquGc5rLhW5ofRUEkmnnN3oJbEQ6ER8LZGUf4hfBg1fAb
- zWXD7zUve1Wd+0nYblZqTeF/wuMVv+VBRvd65gWhaDIfhfONxpLU7+kTvqp3IV7s6TYU
- Xkvu4FHsznN4tQzn9QgqkXF5EYb+wLvNo9j+TrIf62xf68FYNtFZ/Vtwai2O9+9C7zXo
- fI3jw6047mxK72/QPvAehlLbqK3PcNLdzGn08HsjpW5sdpGobNhow5xcJvOwLufKOTiz
- CyXh2TzWLyc9Zm8ilUGL2dyoPT2lHLdeK4du5MvmjA1RJEuOUWymmULh4FKnRplQKMIn
- ER9TI611so/8x/J+4CwFT8JadSFSBfkTfTXZ9G6MqKxtjx9fw7y51syvwu0VTR8qFxKv
- ObX/LjiQyAplbmRzdHJlYW0KZW5kb2JqCjM1IDAgb2JqCjQ2MgplbmRvYmoKMjYgMCBv
- YmoKWyAvSUNDQmFzZWQgMzQgMCBSIF0KZW5kb2JqCjM2IDAgb2JqCjw8IC9MZW5ndGgg
- MzcgMCBSIC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAvRmlsdGVyIC9GbGF0ZURl
+ dGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAG1WMtuXDcM3d+v0LJdWNb7sa3bAM2q
+ jQ10HUwmsIOxJxm7Lfr3PaRE6Y4z8QNIYiRzqZFE3nN4SDpf1J/qizL4iTmp7L06bNVf
+ 6k4ZnQz/UTfq/OLeqs29svxzv1FnRsf+7XzqFyy44KM6/2N72Gw/P/z9fqcON3BRc/Ni
+ lQ9Vuxyr8iXpXB2uvlXnv99a9eueo+lbg59bg/O8dWlbXdtq1VtE9Emdv9vu3j/c/LO9
+ 2O/2h5vb7cPhZkNuOfCLS/Zs1OUF4rBsnNEH3pbu8zXomIryiORWhVq0TQZmrdoghp26
+ RFSEkFF49WiwG/9ge9U2eMdnqq4p1sX7pH30FodCpceYlPcW15uKteuTpz/i4rf4++lk
+ dMNfMF4XipNibP4QY9IpJLp7+AvG6uArxTD9LavT/Do6eWOLw0vpWGOqmZ5CsDXgCa/p
+ o2ugAI6oCqjIlBkg9uLeLcgF3mWQHCtIBclgEw4B2l+ulHXYatQZPs9c0amEmFVQV6D8
+ jdVmserqo/rpzfbD9gAK93c/q6tP6rcrgvxEBiJalyv4wbc+WOcLPbkScgpmobgToV1U
+ SKCJoHIIZdiAidjwJfYNwcf+Nd4+m4TveWEJEZ9qIzZ/AnZG2mRdjQ1zzaekAbuXFZDe
+ 4aPr6NgyEW037+aW1F37iFBrxr0c+/GbbEBmX1nk3RoZJMwnyYDcOPLTfOSSrTrzixAC
+ gRAh77af9/c3D/vDf2oycorqJ27PYNslp6x9fPvF/u5uu8Ht827R8pr1lT9WK1Jq8Tnq
+ WgLpivh11eiao3skV6lYlHoMDlJExxLjSraLq07nQlKeEnUFqs4GVWpK+VqdOA0pDNki
+ icmNFBXK/HFiJbzhbyXR6a9LeSHZnjpNshWQTgCDapq1NVWA8TEgo11ZqEaAhYh6QFf4
+ aHS2yFWqXymjdqACRhx1BuAgXb3jeuKj1cVFAgIFMRS1W5CBJw6vcHhUXAmHcYJw8A6l
+ cbpDaEiRzOVyukM1LuCTYDh1+CkYWjUv2vmRH8EGbaAq5AeU6KScU4UyJQEsoFA8F1Us
+ 1WTRlvDC3mcLJoK12lJfo2woloG5xupXh58GQQ5wFbZQBOrS8Ib3TclxYRneQJktjMvK
+ GyHYDgODherwt6QfUAS9RQuDk1N1OGo075pbHV7O3zhtuuy11lOSNBk4qkXcHAkj9Ixh
+ oYIZXE+11DvyhdqckG7o1OgmgKwt4LOijg7LsHPqTiQHMAVqZI2cZeYOTRZVsyyOyjC5
+ ly0bNZZwLy6RDeLWxdqqKAW1ih4VGLo6ehsac+i8YQfUL9CuXZAJ6KsRZqjcFd8OEb48
+ klxeW3V/DXl9Y5py6t8h3nWFYxZpQJF5ajkxpHA96ZEHqHTyQNaKBzIF6GAwvrgalrGA
+ jjV5CA5NrPWzwcNYGzwEdGykihOYl7Fl8gCFrXgQtzjReaCgBHd6XvEAPdDbkKSfSucj
+ uAkMjBW1VdyKoQIpaarxeHrcZp5rYs9cjEKJepBUfXzvifZFvFMbYdkh88BRQhkhEcIC
+ R9ljTCkR+sBSzv0r0YosNK2IJUlPw0KhrrfSCjkL6IOL71qBI9dulWNgW5ZYK8MSraDU
+ Y4rCxMFBteg5QJ42jt6GtIIBGUWQxPgKrdC0z4dWWnE/VivCQ8su4YGsyYMiU3iQpMVw
+ 0YihnAZ6Yk2tDB6GEIQHTJpdKx3mtVYE+aaVYXWJAtjOAwfVcafnFQ8v1MoR3N9TK89c
+ /Gqt4PcKrrusFRqTxULXDUYb9BVOxRDQwLkBda2MBdbKsCTpcdxF6iJrrcAZzQQrrWDM
+ a2W/tyOwLUtNK2INrVTUfJrOWSst+qmVo7dhrRT83vTavkJDAR9aacX/YK30yCnbMJV0
+ HsiaPLBWBOihlbHAWhnW1MrgYWql87DSSoP5SCsd+a4VsYZWhAfWyip61kqzX6iVI7i/
+ p1aeufi1WgmY7DktWCvRzYlspyLmV8xgSG18Gb3vG7tWxgJrZVhTK9HGRzMYOaMZbGol
+ ZEnloZWxxFoZlmglFPzngWilRz+0cvw2pBU638T4ir4SMXzyoZVWwo/VikTetCI8NK0I
+ D6wVAXpoZSywVoY1tTJ4GFoRHqZWOsxrrQjyTSvDEq0MHijGdfSklW6/UCtHcH9PrTxz
+ 8au08j+OeV+5CmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iagoxNjE0CmVuZG9iagoyIDAg
+ b2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMyAwIFIgL1Jlc291cmNlcyA2IDAgUiAv
+ Q29udGVudHMgNCAwIFIgL01lZGlhQm94IFswIDAgNTc2IDczM10KPj4KZW5kb2JqCjYg
+ MCBvYmoKPDwgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1h
+ Z2VJIF0gL0NvbG9yU3BhY2UgPDwgL0NzMSA3IDAgUgovQ3MyIDEyIDAgUiA+PiAvRm9u
+ dCA8PCAvRjEuMCAxMyAwIFIgL0YyLjAgMTQgMCBSID4+IC9YT2JqZWN0IDw8IC9JbTIg
+ MTAgMCBSCi9JbTEgOCAwIFIgPj4gL1NoYWRpbmcgPDwgL1NoMyAxNyAwIFIgL1NoMiAx
+ NiAwIFIgL1NoMSAxNSAwIFIgL1NoNCAxOCAwIFIKPj4gPj4KZW5kb2JqCjE3IDAgb2Jq
+ Cjw8IC9Db2xvclNwYWNlIDcgMCBSIC9TaGFkaW5nVHlwZSAzIC9Db29yZHMgWyAwIDAg
+ MCAwIDAgMzAuNDYzMDkgXSAvRG9tYWluClsgMCAxIF0gL0V4dGVuZCBbIGZhbHNlIGZh
+ bHNlIF0gL0Z1bmN0aW9uIDE5IDAgUiA+PgplbmRvYmoKMTYgMCBvYmoKPDwgL0NvbG9y
+ U3BhY2UgNyAwIFIgL1NoYWRpbmdUeXBlIDMgL0Nvb3JkcyBbIDAgMCAwIDAgMCAzMC40
+ NjMwOSBdIC9Eb21haW4KWyAwIDEgXSAvRXh0ZW5kIFsgZmFsc2UgZmFsc2UgXSAvRnVu
+ Y3Rpb24gMjAgMCBSID4+CmVuZG9iagoxNSAwIG9iago8PCAvQ29sb3JTcGFjZSA3IDAg
+ UiAvU2hhZGluZ1R5cGUgMyAvQ29vcmRzIFsgMCAwIDAgMCAwIDMwLjQ2MzA5IF0gL0Rv
+ bWFpbgpbIDAgMSBdIC9FeHRlbmQgWyBmYWxzZSBmYWxzZSBdIC9GdW5jdGlvbiAyMSAw
+ IFIgPj4KZW5kb2JqCjE4IDAgb2JqCjw8IC9Db2xvclNwYWNlIDcgMCBSIC9TaGFkaW5n
+ VHlwZSAzIC9Db29yZHMgWyAwIDAgMCAwIDAgMzAuNDYzMDkgXSAvRG9tYWluClsgMCAx
+ IF0gL0V4dGVuZCBbIGZhbHNlIGZhbHNlIF0gL0Z1bmN0aW9uIDIyIDAgUiA+PgplbmRv
+ YmoKMTAgMCBvYmoKPDwgL0xlbmd0aCAxMSAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5
+ cGUgL0ltYWdlIC9XaWR0aCAxOTQgL0hlaWdodCA4NiAvQ29sb3JTcGFjZQoyMyAwIFIg
+ L1NNYXNrIDI0IDAgUiAvQml0c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVj
+ b2RlID4+CnN0cmVhbQp4Ae3QgQAAAADDoPlTH+SFUGHAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwY
+ MGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAED
+ BgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDA
+ gAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMGDAgAEDBgwYMPA+MMOEAAEK
+ ZW5kc3RyZWFtCmVuZG9iagoxMSAwIG9iagoyNDAKZW5kb2JqCjggMCBvYmoKPDwgL0xl
+ bmd0aCA5IDAgUiAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvSW1hZ2UgL1dpZHRoIDE5
+ NCAvSGVpZ2h0IDEwMiAvQ29sb3JTcGFjZQoyNiAwIFIgL1NNYXNrIDI3IDAgUiAvQml0
+ c1BlckNvbXBvbmVudCA4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ae3Q
+ gQAAAADDoPlTX+AIhVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB
+ AwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg
+ wIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM
+ GDBgwIABAwYMGDBgwIABAwb+wADn5AABCmVuZHN0cmVhbQplbmRvYmoKOSAwIG9iagoy
+ ODMKZW5kb2JqCjI0IDAgb2JqCjw8IC9MZW5ndGggMjUgMCBSIC9UeXBlIC9YT2JqZWN0
+ IC9TdWJ0eXBlIC9JbWFnZSAvV2lkdGggMTk0IC9IZWlnaHQgODYgL0NvbG9yU3BhY2UK
+ L0RldmljZUdyYXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29k
+ ZSA+PgpzdHJlYW0KeAHtW/k7W1sXNiYhA4kMZNCQCGlDpEVQ2vQGpdUipPS6VUQN/bQI
+ WqoN8Riu4OpFWq2aqqh5akPQ5/5r39onQnS8X7U95/ke7y/8cs5e717D2dlrvW5uJyD2
+ DrgTAN+5Q+7uHgienp5euAIMwAxxd/9fiGDWe3p5e3uTyGQyBV+QySQwxAvx+Lcs0OaD
+ 9SQKxceXSqXR6HQ6AyfA0jQalerrQ6GQHSz+hSfAfth9MsWHSqMz/JhMFiuAjSMCAlhM
+ pj+DQaP6IBLgiW9wgPjB7KfSGP7MADaXFxjE5wsEQpwgEPD5/EAej8Nm+SMS3+YADkD7
+ T6X7MdncQL4oWCwOlUgkUmkYLpBKpRJJaIg4WMQP4iESiIPX19wADoDw96X7sTiBApFY
+ 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
+ kfbRvSncvocqYjVZt/7zwGwZfDk1s7C0skoorCwvQF9/uK+9qfp2NnRAoH/gene934y9
+ kHmz3Pi4s986OjE9O/eWUJibezM5ah3oNtVXFV7TONuxh/0DKpN3KkKFGuLVD1q7+4dG
+ RscnpwiFyfFXI8N//Wluum/Iv5J8Vo76aIc9HOijoZa+Mj4l51Z5TVNrF4wWWZ+PEArP
+ nw3BkJG5ua6ySAcNEFnwkaY+9DIZMFykiNFcvVFcWfvwSXtXT28/wdBn6W43NdVVlRRc
+ uxSnkAo5fi6DFWgwBCbUIqITU7MKiivu1Te1mMztBIPZ1NJUf7+y+GZOWpJKHsJnoys7
+ Zx5ATx+NqEkVMRfSs/JvGSqra4wNjQ8IhcZGY011paGoICdDExcZBkHkOp6DZtRgOkcs
+ U8KgZqYuv/B2aVl5BcFQXlZ6u7BAdy1NE68Mdw4LOjvijjlBmPYNV8ae16RmXMvO1d8o
+ IBjy9bk516+kXUqKU0aEwOTvkVlBGLODWU0mFxtYjk1M1mhT09IzCIb0y6laTXJinCoy
+ PETIYzFgVPCgIe7mBroJmNpnAYUwmNk/G6tOSDyfRDCcT0xQx56LjpTD7DWP5QdCBNex
+ Xw8Pb5IPEh7wRSFSmfyMIkoZrSIYopXKyDPycGlIMJ/L8nPIEJxp4ObmkB4ABTaPLwwG
+ 5Yo0TEY8SCWh4lMiPo/NxOQsR3UULvobDi+QLxCKCAihAOQ4XNDjgJblEz0O0nCBBMeH
+ ihRcmH6LQziApgykXf4MOgi7SJ8KihwyNFDRIREdbgq6bwn36EheR0H2f06Y5uDgTSJh
+ MkYfAgKpKzGNI2a/80BxmM2Qz0ACpKQgJAUhJCEBpmFC068JNDExLxAhKDDzXHf95P+T
+ HTjZAccO/Bf2t3JMCmVuZHN0cmVhbQplbmRvYmoKMjUgMCBvYmoKMjcwMwplbmRvYmoK
+ MjcgMCBvYmoKPDwgL0xlbmd0aCAyOCAwIFIgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUg
+ L0ltYWdlIC9XaWR0aCAxOTQgL0hlaWdodCAxMDIgL0NvbG9yU3BhY2UKL0RldmljZUdy
+ YXkgL0JpdHNQZXJDb21wb25lbnQgOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJl
+ 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
+ ji47U5N+BsSTE4SRkPhRwppIufMICrhUpjgDQu6aDC18iMbcZaem3IEJbNA0gKAJIjwJ
+ FA3IFUoIoZBHqgbEiSgCGh9A08BBno6wgmh7ABQECIolRLsekqAD6J8AfQ+JGIoIolUJ
+ xwlEKRA28InCDQjrNqL9HyhRucEn7n+yruLAhmjpCVF5IoAQxL1A78nXxpBYB6JvOtI8
+ E+md4UAK0IgTqZ45vXnmgAUo/yHqaeBEpJkoelP6L60ArcBxBf4PP9iXDwplbmRzdHJl
+ YW0KZW5kb2JqCjI4IDAgb2JqCjE5MjcKZW5kb2JqCjI5IDAgb2JqCjw8IC9MZW5ndGgg
+ MzAgMCBSIC9OIDEgL0FsdGVybmF0ZSAvRGV2aWNlR3JheSAvRmlsdGVyIC9GbGF0ZURl
Y29kZSA+PgpzdHJlYW0KeAGFUk9IFFEc/s02EoSIQYV4iHcKCZUprKyg2nZ1WZVtW5XS
ohhn37qjszPTm9k1xZMEXaI8dQ+iY3Ts0KGbl6LArEvXIKkgCDx16PvN7OoohG95O9/7
/f1+33tEbZ2m7zspQVRzQ5UrpaduTk2Lgx8pRR3UTlimFfjpYnGMseu5kr+719Zn0tiy
@@ -1392,795 +1143,564 @@
VG4p1Oo9g0qsHCvYAHZwksQsWhy4U2u6OXh32CJ6bflNV7Lrhv769nr72vIebcqoKSgT
zbNEZpSxW6Pk3Xjb/WaREZ84Or7nvYpayf5JRRA/hTlaKvIUVfRWUNbEb2cOfhu2flw/
pef1Qf08CT2tn9Gv6KMRvgx0Sc/Cc1Efo0nwsGkh4hKgioMz1E5UY40D4inx8rRbZJH9
- D0AZ/WYKZW5kc3RyZWFtCmVuZG9iagozNyAwIG9iago3MDQKZW5kb2JqCjEyIDAgb2Jq
- ClsgL0lDQ0Jhc2VkIDM2IDAgUiBdCmVuZG9iagozOCAwIG9iago8PCAvTGVuZ3RoIDM5
+ D0AZ/WYKZW5kc3RyZWFtCmVuZG9iagozMCAwIG9iago3MDQKZW5kb2JqCjEyIDAgb2Jq
+ ClsgL0lDQ0Jhc2VkIDI5IDAgUiBdCmVuZG9iagozMSAwIG9iago8PCAvTGVuZ3RoIDMy
IDAgUiAvTiAzIC9BbHRlcm5hdGUgL0RldmljZVJHQiAvRmlsdGVyIC9GbGF0ZURlY29k
- ZSA+PgpzdHJlYW0KeAGFkr9PFFEQxz97xIAhUAjRmFg8EzWaoFmOKyjv3AJJDnISomJo
- 9vbW48Ldsdlb8UdFw1+goSDaEQp/1FhYXKwstDJBIjTamZhYoDR4Wefty4bqYJKX+bzZ
- 78xk5i302G4Q1DNAoxmFMxM31b25+6p3hwzDnOYSF12vFRRKpaJIutjBNpb+9OW6rrW3
- 2FmPXv49tNoDb7+v/fjZJSkND4TSECwlgeGq4ZzmsuFbmh9FQSSaec3eglsRDoRHwtkZ
- R/iF8GDV8BvNZcPvNS97VZ37SdhuVmpN4X/C4xW/5UFG93rmBaFoMh+F843GktTv6RO+
- qnchXuzpNhReS+7gUezOc3i1DOf1CCqRcXkRhv7Au82j2P5Osh/rbF/rwVg20Vn9W3Bq
- LY7370LvNeh8jePDrTjubErvb9A+8B6GUtuorc9w0t3MafTweyOlbmx2kahs2GjDnFwm
- 87Au58o5OLMLJeHZPNYvJz1mbyKVQYvZ3Kg9PaUct14rh27ky+aMDVEkS45RbKaZQuHg
- UqdGmVAowicRH1MjrXWyj/zH8n7gLAVPwlp1IVIF+RN9Ndn0boyorG2PH1/DvLnWzK/C
- 7RVNHyoXEq85tf8uOJDICmVuZHN0cmVhbQplbmRvYmoKMzkgMCBvYmoKNDYyCmVuZG9i
- agoyOSAwIG9iagpbIC9JQ0NCYXNlZCAzOCAwIFIgXQplbmRvYmoKMjEgMCBvYmoKPDwg
- L0xlbmd0aCA0MCAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlIDggL1Np
- emUgWyAxMzY1IF0gL0RvbWFpbgpbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0g
- L0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBncEHVgEAAADQ+9/ESrZkVBQa
- skdpGJlRjuA5gv//4XDyr/7UXu3Ur9qqjVqrlVqShfpRczVTUzVR3+pLfaoPNVbv6k2N
- 1FANVF/1VFd1SFu1VFO9qoZ6Uc/qST2quqqpqnpQ96qiyupO3aobVVJFUlB5da1y6kpl
- VUalVUolVULFVUxdqqi6UBEVViEVVIHzHQFawrliCmVuZHN0cmVhbQplbmRvYmoKNDAg
- MCBvYmoKMTUyCmVuZG9iagoyMiAwIG9iago8PCAvTGVuZ3RoIDQxIDAgUiAvRnVuY3Rp
- b25UeXBlIDAgL0JpdHNQZXJTYW1wbGUgOCAvU2l6ZSBbIDEzNjUgXSAvRG9tYWluClsg
- MCAxIF0gL1JhbmdlIFsgMCAxIDAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+
- PgpzdHJlYW0KeAGdwQdWAQAAAND738RKtmRUFBqyR2kYmVGO4DmC///hcPKv/tRe7dSv
- 2qqNWquVWpKF+lFzNVNTNVHf6kt9qg81Vu/qTY3UUA1UX/VUV3VIW7VUU72qhnpRz+pJ
- Paq6qqmqelD3qqLK6k7dqhtVUkVSUHl1rXLqSmVVRqVVSiVVQsVVTF2qqLpQERVWIRVU
- gfMdAVrCuWIKZW5kc3RyZWFtCmVuZG9iago0MSAwIG9iagoxNTIKZW5kb2JqCjI0IDAg
- b2JqCjw8IC9MZW5ndGggNDIgMCBSIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBs
- ZSA4IC9TaXplIFsgMTM2NSBdIC9Eb21haW4KWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAx
- IDAgMSBdIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AZ3BB1YBAAAA0Pvf
- xEq2ZFQUGrJHaRiZUY7gOYL//+Fw8q/+1F7t1K/aqo1aq5VakoX6UXM1U1M1Ud/qS32q
- DzVW7+pNjdRQDVRf9VRXdUhbtVRTvaqGelHP6kk9qrqqqap6UPeqosrqTt2qG1VSRVJQ
- eXWtcupKZVVGpVVKJVVCxVVMXaqoulARFVYhFVSB8x0BWsK5YgplbmRzdHJlYW0KZW5k
- b2JqCjQyIDAgb2JqCjE1MgplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCA0MyAwIFIg
- L0Z1bmN0aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlIDggL1NpemUgWyAxMzY1IF0gL0Rv
- bWFpbgpbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL0ZpbHRlciAvRmxhdGVE
- ZWNvZGUgPj4Kc3RyZWFtCngBncEHVgEAAADQ+9/ESrZkVBQaskdpGJlRjuA5gv//4XDy
- r/7UXu3Ur9qqjVqrlVqShfpRczVTUzVR3+pLfaoPNVbv6k2N1FANVF/1VFd1SFu1VFO9
- qoZ6Uc/qST2quqqpqnpQ96qiyupO3aobVVJFUlB5da1y6kplVUalVUolVULFVUxdqqi6
- UBEVViEVVIHzHQFawrliCmVuZHN0cmVhbQplbmRvYmoKNDMgMCBvYmoKMTUyCmVuZG9i
- agoyMyAwIG9iago8PCAvTGVuZ3RoIDQ0IDAgUiAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQ
- ZXJTYW1wbGUgOCAvU2l6ZSBbIDEzNjUgXSAvRG9tYWluClsgMCAxIF0gL1JhbmdlIFsg
- MCAxIDAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGdwQdW
- AQAAAND738RKtmRUFBqyR2kYmVGO4DmC///hcPKv/tRe7dSv2qqNWquVWpKF+lFzNVNT
- NVHf6kt9qg81Vu/qTY3UUA1UX/VUV3VIW7VUU72qhnpRz+pJPaq6qqmqelD3qqLK6k7d
- qhtVUkVSUHl1rXLqSmVVRqVVSiVVQsVVTF2qqLpQERVWIRVUgfMdAVrCuWIKZW5kc3Ry
- ZWFtCmVuZG9iago0NCAwIG9iagoxNTIKZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1Bh
- Z2VzIC9NZWRpYUJveCBbMCAwIDU3NiA3MzNdIC9Db3VudCAxIC9LaWRzIFsgMiAwIFIg
- XSA+PgplbmRvYmoKNDUgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDMgMCBS
- IC9WZXJzaW9uIC8xLjQgPj4KZW5kb2JqCjQ2IDAgb2JqCjw8IC9MZW5ndGggNDcgMCBS
- IC9MZW5ndGgxIDkwMDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBvVkL
- dFTV1d7nPubeeWQyM5n3+2YyM3k/SUhISIaQScIrQqKQINEkkJAg0YAxChX+qFghIopK
- iGCtqIUAaoaQwgBCKQVRaytaxUdtqxWs7TKLPtBaJTP/vndCKl3Wn7V+l3PmvPZ57f2d
- ffY59xwgAKCCXqAhsLizuQsGSTpSXkX/yuKebvcDfy59AoAMANDL27qWdmo/+MUrACwD
- oFAtXb6qzaO5MwQQr0HPtLc2L7mQ8487AJx6bF/QjgRFIpeC+dmYT2rv7L4jaGZfwHwX
- 5iuW37K42b5eaMP8iFje2XxHF3+b4l+Yfwfz7pubO1sX9N64GvNfYD6x65Zbu8kq6hkA
- l11s37WyteuFe27OwXwT8vca0gg68acCGRzD2A0LxykS+f8RUFJb+r/0gHh8y4/FMhlw
- wI/XkU/UVYASeQWIAzXET1ARTfY4aNijkMz2gpXJAhdA9F3074lx5Lrox+xp0EQ6o3+j
- i7HVIdFTkbISOA4PwHYYwtEGMZ0MN8AAvEyWwSGyCEbgLHFCJs41A2GYDa+SaPR1aINn
- sH43nIAtsA95SYZOMGDpJuKNrsZ8ANMtsC76FCRBIfwQjkIR9roJRqO7o/uxtBaugz2w
- F9v/kniofUxC9PnoOZR0Hva5Dktej86ODoEO0qEc5iJ1HRwjXvq9aDuYoRi5exx+DDvg
- 5/ApuZuMRNujPdEz0Q+BwlI71KFbQ0bIh/QQ88Po49G/RCOIRDKk4qhN8Ag8jf0PoTuO
- 0x4kN5Fu8gjZQgWou6kR5l7WFBlDHFKgCl013ALrEYFDcBL+Dv8iFygzraG76VPR/Og/
- cA5moZSiJK3Qg+4+dJtQpiNERrLJdDKXrCGPki3kN1QqdR1VT91O3UF9TNfQi+hV9G+Y
- W5lhdiM7IFNGPoseiZ6OvgUmcMD1sBLWonQn4AxchC8JjX3ZiZcUk3JyA7pesp06RHaQ
- Q9RccpycofaQP5CPyAXyFcVSKspApVHd1CPUXuoE9Wu6g95CP0b/gf6MKWUpdgd7Xubl
- fhtpiWyI/DpaHP0w+gWuXh4EnJlyqIEboRml7YJJ8D8oxXPohnDWTsIpeFlyHxE7jMIX
- iAIQHbGSXDIHXQ25hrSRDvIEOYzumMTL5xROBCWntJSJslN1VAvVSfVSb1G9tI1OpWfS
- C+khdC/RZ+mv6K8YlklgDEwVMwM2Mp3MNnQ7mUFmmHmNLWJL2Rp2PtvLbmA30ovZ19mz
- srWyTbJh2QXZX7lkbjZ3C7cRZ+dl1NmfT6wCMcGQJOQ+F26GxaSCtEA/zsYO0gx9qF1L
- yHrEqwuSo430WrqKykZtOAY/QG3dBmtgA70IdkTfoffA26gpy7GvXtjFlIOD3Yqzczdk
- oxaNu0BKakqy3+dN8iQKbpfTYbdZLWaT0aBP0Gk1cSqlQs5zMpahKQLpQU9lkzvkawox
- Pk91dYaY9zQjoflrhKaQG0mVV9YJucV2zVh0Rc0A1mz7j5qBWM3ARE2icZdASUa6O+hx
- h35V4XGHycJ59Zh+oMLT4A6NSuk5UvohKR2HaUHABu6gub3CHSJN7mCosqe9L9hUkZFO
- DgUQDkVGumg4AqAUOw7B9OY17WaMxBrBkNVTEQxZPJjGMtobbF4SmjuvPlhhE4QGpCGp
- th7HyEjvCCGfcL9qiWfJ/eEAtDSJqeZF9SG6uSFENYl9adNCJk9FyLT6vPnf2cup4Mav
- FYYob2Vza19lKNB0P4IrZpvEXPNGzM2qc2O31L0N9SFy7zgTIo/LkFOR3VZPUOSraZk7
- JPeUe9r7ljUhuFBbP2wNWIOe5oqGEMytH7YELFImI/2QeW2xgNIfypiWMU2MiwXz2lj8
- p3ti9DeOi7F57ckPMJ5VOwEAEUfyzEA+Q+7F0iAeZLZQDFoLoW9xIeKEvwaCYnYgP9ND
- FOoM7Q2x3hnNod66y2y0V8SYa1pWMSy3WEUZmsobsH5Tn2YKzhTW13jcfZ8BTqFn9NMr
- Kc3jFJlX8xmIheJET+hKiDRfTvdIwKDU7WZPuzi/PdKcYt5jDn6NgHkRGpHnkD6UO2tu
- vRByNyAhDGnps8Ign1u/j5BNDWESvTcMFY5DIAf6xhuwOF1UtY4KHB8zGelISBUwlZnu
- rkSpK0Vdcfe5+2Ys6XNXuttRmRivFGNBa19DFiJYV484wbU4YqDBNpFsbWiYgv1kif1g
- E6ze14A9LBvvAWOJlDWGlbLTZ+Gs+ObWz6sP9VbYQoGKBpwFVN/jc+tDx1FzGxqwVs4E
- p8jxmg7zOM+5yHNOKpbnxXqpwz6wi4a+PrHPunqPEDre12frE9dbLB8m8J+EwDghDGIV
- FDwYJr1zsS1GHsEmEjyCR0C2GkRMJ6FKX9aoMOR/O8IFE3xjy8nIbYGEcOF3hHDR1SA8
- 5aoQLp7g9AqES5DnYhHhqd8fwqVXIFz27QgHJvhGJqchtwEJ4fLvCOHpV4NwxVUhHJzg
- 9AqEK5HnoIhw1feHcPUVCM/4doRnTvCNTM5CbmdKCM/+jhCeczUI11wVwtdMcHoFwnOR
- 52tEhOd9fwjXXoFw3bcjfO0E38jkdcjttRLC878jhBdcDcL1V4VwwwSnVyC8EHluEBG+
- /vtDeNHXEMYDbzkeO8/gtxeNX2xlYahLCwOfhZsfel4TBjiDXsxjmn4/DAx6wDT3PhzG
- FgDz0w5jLyzG2Tl5WkHrR1/ObApf+iN79MvpYWbOV/uxFgULo++xK9jzeBp1wr5AsY3d
- SvpZ2kVczN3kPnZDAlvH0z90aLUG2RQHrZpikDspp9NC51DFmhyt1S3PsVhc7h3CsjZz
- WlrNxTmjNZrP54xeHNUVZUFZ2WiZmNCM5mRPXxWYAnaTN8Gn9tp8SqM8F+L0mlyi08Zr
- ODvmWKBzCaEYWmFW5UK8DgPeKsslDMEgDX9EU6IpSUuLhSLhrkbSyBOTJ5N4EkGr0eXl
- Ti6YnCfjZILb79NqJhcIHsZJJmlPCKeG34189rcL79861XnC+vBQ5O0oPH/+2cOkKpk9
- H3nvyKadkdcipyKRyM92N2z+5EdHt/+KPEuCZ/6I+BA89wOzB+dBDkUBM+dkGDntJPg5
- wstuIlYlzXvBolCGyYL9wpb3YxCMlYgYnEPxS0Tpx3KyEwSDoBW9Z4j+6tKr1OtjWafZ
- oyOR8qGxJeIc4L0De4c0hh8eDei4uBmkmm0g9WwHu0R/B8sbj+AHoAVsxB4o9whuX5Nu
- he42Pa1zuvR2Ay04jXrGp0vyOkEut3FOJeWz23i31+DyGumc+A6bNYX3ef0KS3LKWWFL
- bJ5K5sS4vDj6JjooKykpG0NeS8ZKirSmIqLVFRXhvxHjtJxs0khyC/In+X0eQUsLueI3
- iYxzEhcxmowmA+KfRXxSoYeu2vj0yqltEetpanCw87XOlvkLWI5W6jIvKlSMiltStDpS
- fJq2dz38oyJnREHtyLlhbN1gnmdl76lrUyr1QkLJ/M8eyrGN9aHW10bfl77i4vH7vAR+
- FyhMzSYKjdKmsvvzqjUd8mUarojXqeS0LZdLkjs0KkdxGpWZUnywmCrOTfXqNBzL2/2J
- JnuY9AU8JoeL8zsylZQjX1nClZTY9VxK6mCStdSWYp8Z7y+0TC19gWzFj9dDpB/GNfmi
- pMvnxk5O6HLZKE6oVmeSgMkczRwVgUK8JPVOLphsSARi8ZKCeAHMTpsARrdeIEIiTKYE
- sDpMAjEIGEBMmSUVvusuQC1OMoq6O5WoSTxB/TWQgsmIt8+TyMk4TynJEyHX6rESDqFG
- bff7/GLky59UMDmBqFfW3NjQL7Tndrbk1JGRUoPqntUPFAuKQfafTx/tuc3kVTm1qem+
- xlSjfPKv79xy9PDWvtcWps/Yudlgl6nj7FlLyXI+3ZyxqG52at2L26urB8a22hNp+l6V
- rNwTqF720/Vbnkkg50Q9xa98+gxTA1awwa5A1i4LGTAP8nvM9Exeu11P03qZw8rFOfRK
- G2ezmTR+HaH9lNbqUPhNFrsjTLj9wso1/7YTJXNGi4q+yVJMAgvvVRkUPlAnaHwxG2HB
- HNoIQbIRSmOcD20EBnKzzCfaCOEbbISELRhjFgJhjSGYJ0JH5Wsgj6POfmQa0qxc++zM
- 7PUPd91jGXL+9cgbXxLdm3amJvT24nsGO5/c8f6G2986RfI+xiuKKSxiUBh9jx5lT+Bt
- jQNuD+ROVlepF6h3MbttrJfXU/EODfAOB5egoBwmJZuZkKlJ0eqsLqXfanG67hNWln9d
- /LFzaCVGRTOpLdLGtMhqtssVQIhZibLZMQAL5QOFjfehgPi/S9QYnagKkoLIDIBrUJun
- 9eSLYkH+JF3e5w/vWLNj5+r1u0lfXfbU554qe/aW/ZEvL/ye3PjJ2y//8hdnXqEmT3LO
- ohxflm5ZXE8yvvwLWYDrrTr6HmPFWxM73rB5iSqwaiv/mHWXi2bVVDyrN6h18QZ9QBXQ
- 8ylWMkt5gD5NXqRP297h35Wfdb3j+cT0iUd5WntaRy3iWSEpfpvRkVQk4zij4LBzCodR
- 6eW22nfZD9rftjNeY7zXzloUKk6r9sc7/KzVn5TJ+S0Wn/9NYWfjuBE9J20kb46Jdihm
- jrIaJ3YUtFOaUaRKC68SPAxL45UUYRmZCy2/TpOg0WsYmcqbaEvy4e2rw0ecDrmJ84HS
- oPaROLXHKiCJxYA3o17FaTAQl6W4yYhbDKZS01LvIisaYUVjI6oQOoPgxJUobjFqgutS
- Jm06kCeZvkQZR6iRs4UFOs2lC+xDWx+4Nlu/j7smp3bVtNqXIn8h5j8SlzJ55nN3DrLE
- w1TddN285TOfevpUY0FV8ebMuXYN8eC9HEXKI77bKu/e30fex60HdW0dbkDFuC+IZ4CC
- gJ07z+CGJKMVcpPJivVTOBoXinyP0BLTqpI5J8dKTtYEWys+Fjefsjm47yagamjzDJ51
- B/HHpH51lj0q3qpLfdOjON8WXM03BHIOyk7LKEaml/n1PbJujtWrKL1Z42A5kJmVCitn
- tYIqRW61k0xzigUsNjSrsv3/HngsNl0xS1mCGq0tKiLi/IjmLSHPcNmIebTiNiLaNTUx
- aD1k3d7Ze9rPzU0/6MheG0iZWZhhGyG7mKyBG2p/vOCpsXnU0y0lS+KM5fkrOsZeQ2YR
- ieLou4yANkiFd7MWeCiQN8D3ax4z/oQZ5HdqdhvD/Ev828x59Z/1qim8zGHmVA6d0sJZ
- LAbKH2+1yf0Gi9UWJnK0ROOaFjuxTNh4SaXSwcT4lAly1Aot5SOcCVNsHKYUepUPiAYD
- 3oiGh1ZjIOmNGKTh0kzSSRtlomRtdHgsoQRclZKx+eDe7NmHf9Lf/zRegF+K/PN3kUtE
- 9ydZN4nf2X/Do5eG956j34t8GrkYGYs8T9Iu4WYQEO1NT+Q6xouiqyERugPpu/ldJiqZ
- d9u1apnDwMXL1A67MlFN+c3WJEWmJlNISYy3eJLuE47GxMON/lxsbqTFI07M+LKxG23A
- Wn2MD2woGGvEgFjUPqBNkkySWKKxSYpt/ThnBr3JmEfyDLg75eXipaS4BnAr0nqoF3d5
- Kw8fCXoxjGQOFQSu/8GByMHubatqs4tHVv3mjd5F+44s2Xbngp30vk0zkksif0YZn+q/
- Md85Y+x34hlrAyrkw0wVaOGagM9P++Im01UMo+Y1lFqulav8vKiGWgVvTSCiPQWLLiFM
- gqh+ayVjIcpYoxF1fk7ZybGTorUQN2ZR+cZVD48pmWgeZahyG/YanrmJNTs0Ns36h0eY
- rEMF2yn6GE0NrRwbENdFefRt+gAzC18oskhm4MFC+QDbr3tMP2AYSJUlJ3n9BUKlUJVU
- 5Z+ftMDflrTUt0q1Km6VusfTndTt7fbtdA6mJ9BoZtgMJjMBrAabyW42ZOgzk+OVHXgK
- K/BS3sQ4BZOWYH7R7kjgGEfmtjRlFidXaygOsoQsq8tsNPtNpck+zp9szVG7/JpS8Gda
- snOGJ2zj6MWxItE6jhVpMCWKW5SFIS45cY7xzI2m0VS0QtLk2SSD8hm8Vp+gdgkg93EC
- odPxnMOmYsqhQ5pNbxaIOz5RACFRHcf7FQLxeeUKksEIIEvBwKm1C8RixEAykdIBXAok
- Fbms+OI6RyspbUx+n3QixOOJeHThPOLpUFwRJqN0ZsTjIx5e/OQC760YXDIw1X/rgxum
- df/20N9vmk7tYX2lj7V1BJNrbj9R3vHu7y+c5shBMndh9oIF1weTcFdJTJ1x18ALmxa2
- T82tqglUploSHFnpwUcfPPPuk9S/UJdM0QuUnF2I1qH2p3GZiuNqEiZlAS9jLDLRMrVC
- a0Xbia8gKWBQG+JpF03Rl4wWi/WSsHT8ZDLWWHRSPAhrYoY0Cy0pHpZHNWPnJGuKtlQr
- roPLZzFfPu69eYMH9u71GXLinHrXdP/ahZs3swsjbz0yFixMUBJqk5y/ayl16hHJ7hoi
- M+hPcD2L1uuVwM19hvXmXWaak5lkhbpqXb1uKXc7fTu3UT8AW9kBw1bjVtMgDBo11TDL
- UGV62cBUsC+y1H3sTthJdrGDJjYpmTUbTEbcFwwqZbyDV4vGzmhDKVkgQyaDeUj1oBFt
- 3pvCUnG1WPAb7Zx5rKgI/xZJQnPM9KE25VqyzPglUCKun1m1qwI6gwGMxk6dyWRmCenU
- AZjvy0zTrDkpRTzGpBG1bAVpRCufJ6MpjpImNl/cKAsml5LJJI/QtHDad09L+eO9j/tS
- nFmpmtwsDVuqjnS/ih8QTNbSyObIp89H2kZk/DNxMsHMP5rE1FwaoO8W7YL0m3ZsxdiN
- 8SWfgTb2cHkq8BaaZQApRjTxy+k8ZuWX64uxLCWC770q8kXrpVHl5okSqT8MtKwOyqki
- /Oo6DQuZj2AI4xHmVqhlAIoxLkRfTU7DOoxFL9J6qD2wAcvFdiaMDdjPJHQn4XPSS82k
- XqULGYrJZjayDNvDviB7XPYpd7c0shbfwWi4CfdwCjToGgG4TxQqfP8UJST4KhmTVIZl
- UDGntmFaZVp16/Ke1u6Oxc1Yg0KPv2grvgt+00+LRBp8+MaYDxVQKb0zzsY3zlp8t7wO
- 5sMCWBS7P5iBdwhl6PPRp6VNM0Mv2QkPoX8SPQ0d5H5YhX4D+sfQMxOp3Zg7RO4fZvjA
- YbIKrGRmQMm4rtVbXGaF0vUGHgVGnnC9a/7oCH6kxsGHxDIcB/JpCvIk+TEsARf5CZ4o
- V+PrZzLZtj9luasJi3ZDF/pe9LQUErJ72JnrOkbSwcsQbOMDJ0MOuP6Uk+E6nxOmyLDr
- hD/MYPRzJ+YC8a7jjidcP3MsdR1DvzdWtCcFaxxw7XYsdz3iDJNtw66H8asD22yORbc5
- sOkBV2dKv2tJjlQ+uz9M7R12FWH5/IDSVVAouPId51xZ/jBPMJ/hmO1KzfmVKwkbYjU3
- duoNaF12xyOuKVjkdAT9U9AfIXvIdkgl24e9M12HMYni7p+RUtgfJj/YX52c4w2T1YGC
- 6uT+lGq/N2W2y5tS6fdjev5L3Druem4al8ul4QMkGmfOxul5Ha/h1byKV/A8z4XJs8Nl
- LtkRshfKEJa9+3kZz4bJ80hkjpDnJOJzB3mGp3jg9eHoB3iZQEAfJntHUJ0IYOKATErJ
- wuQ5vPMRSc8FXKjCBBipQIMahlcaqEaoiBThKZiJLz0PhGVwr7GnzFymK9UWVVb8t6BJ
- KrkcStvBNwdm4gj141tDaI+jAZ91MBF1NFyuiqbp//h134YVWsvT0tA07e/pWtYmPVN5
- gq1N+FoVur8Hnw17W9zufcu6xt/gfE0ti9vFd5Lm1lCXp7UitMxT4d7XI7UTyV8rbhOL
- ezwV+6AteG39vrZAa8VwT6AnKD7X7W8pX9l4xVgbJsZaWf4NY5WLna0Ux2qR2v3HWI1i
- cYs4VqM4VqM4VkugRRpLhCDYUVd+azdqJz5l4VNScl1oxryF9fhi21ARJjvF963b4H8B
- s/XyXgplbmRzdHJlYW0KZW5kb2JqCjQ3IDAgb2JqCjU5MjUKZW5kb2JqCjQ4IDAgb2Jq
- Cjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDcy
- NyAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgovRm9udEJCb3ggWy05NTEgLTQ4MSAxNDQ1
- IDExMjJdIC9Gb250TmFtZSAvRE1SWUFGK0hlbHZldGljYSAvSXRhbGljQW5nbGUgMAov
- U3RlbVYgOTggL01heFdpZHRoIDE1MDAgL1N0ZW1IIDg1IC9YSGVpZ2h0IDUzMSAvRm9u
- dEZpbGUyIDQ2IDAgUiA+PgplbmRvYmoKNDkgMCBvYmoKWyAyNzggMCAwIDAgMCAwIDAg
- MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
- IDAgMAo3MjIgMCAwIDYxMSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNzIyIDAgMCAwIDAg
- MCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYgMCA1MDAKNTU2IDU1NiAwIDAgMCAyMjIgMCAw
- IDAgMCA1NTYgNTU2IDU1NiAwIDMzMyA1MDAgMjc4IDAgMCAwIDAgNTAwIF0KZW5kb2Jq
- CjEzIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9UcnVlVHlwZSAvQmFzZUZv
- bnQgL0RNUllBRitIZWx2ZXRpY2EgL0ZvbnREZXNjcmlwdG9yCjQ4IDAgUiAvV2lkdGhz
- IDQ5IDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMjEgL0VuY29kaW5nIC9NYWNS
- b21hbkVuY29kaW5nCj4+CmVuZG9iago1MCAwIG9iago8PCAvTGVuZ3RoIDUxIDAgUiAv
- TGVuZ3RoMSA2MzU2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AcVYe1RU
- 17n/9nnMDA+RlzA8hjPjYXgjAhFQvDLiDIIYg6B2xmhkQBAI6FxFoiZaajRRVG6MF7Wa
- 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
- s3hwDIegWjx3p5vvCl/Ztq7GUF1xenp55dreNl9TvX6tILvqqnG7oGxrwzVPe43VerLJ
- N3xnklRdU9ugnWu9dYpPrnMqTbLTerJNX6ep7xmu14bbZOdJqnfNc5+sd9Q5e9ocbS7t
- eqW3pnjl4lG2to7YWln8JbaKtc1WarZq9HVfsLVYG67RbC3WbC3WbNU4anRbmvOuxqri
- Va3ITlw94OifUqWUzV3oxg2bx+lnL2r3Eavp/wC1n5T8CmVuZHN0cmVhbQplbmRvYmoK
- NTEgMCBvYmoKMzcxMgplbmRvYmoKNTIgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlw
- dG9yIC9Bc2NlbnQgNzcwIC9DYXBIZWlnaHQgNzI3IC9EZXNjZW50IC0yMzAgL0ZsYWdz
- IDk2Ci9Gb250QkJveCBbLTkzMyAtNDgxIDE1NzEgMTEzOF0gL0ZvbnROYW1lIC9aVEtD
- SVMrSGVsdmV0aWNhLU9ibGlxdWUgL0l0YWxpY0FuZ2xlCi0xMiAvU3RlbVYgMCAvTWF4
- V2lkdGggMTUwMCAvWEhlaWdodCA1MzEgL0ZvbnRGaWxlMiA1MCAwIFIgPj4KZW5kb2Jq
- CjUzIDAgb2JqClsgMjc4IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAw
- IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKMCAwIDAgMCAwIDAgMCAwIDAg
- MCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTU2IDAgNTAw
- IDU1Ngo1NTYgMjc4IDAgNTU2IDAgMCAwIDAgMCAwIDAgMCAwIDMzMyAwIDI3OCBdCmVu
- ZG9iagoxNSAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jh
- c2VGb250IC9aVEtDSVMrSGVsdmV0aWNhLU9ibGlxdWUgL0ZvbnREZXNjcmlwdG9yCjUy
- IDAgUiAvV2lkdGhzIDUzIDAgUiAvRmlyc3RDaGFyIDMyIC9MYXN0Q2hhciAxMTYgL0Vu
- Y29kaW5nIC9NYWNSb21hbkVuY29kaW5nCj4+CmVuZG9iago1NCAwIG9iago8PCAvTGVu
- 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
- nG0eZRlpSbPcYEm1pFgsFpNFsHAWsIzS9M+UQrYjR5nSmDAJ7C0Y4zTaP2hsMtqSHFo4
- uBU0E2y6saPcVj6yLL2kynuFV8gwhryFPz30s04+NrSr2+iwpu6xB9XJbKDbg8nZ/28Q
- qaT46vrV++pXn2w0zvuyLxKiY7+6pYOuZZ1NDkf3ydVsgp08Q03NrUyGI+pqOeJVT8pe
- R3e9EXfZdCObrpe93dDomx/oblQi3ni9Us/O88F9dT4//V2hIhdrbU7W8vuuUMvHkvlZ
- rToj7rJatWy6jtWqZbVqWa06pc6oVVjoW9ZQCf8D6TF5zAplbmRzdHJlYW0KZW5kb2Jq
- CjU1IDAgb2JqCjI3ODMKZW5kb2JqCjU2IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3Jp
- cHRvciAvQXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDczMSAvRGVzY2VudCAtMjMwIC9GbGFn
- cyAzMgovRm9udEJCb3ggWy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvRm9udE5hbWUgL0RP
- TUdQWStIZWx2ZXRpY2EtQm9sZCAvSXRhbGljQW5nbGUKMCAvU3RlbVYgMTQ5IC9NYXhX
- aWR0aCAxNTAwIC9TdGVtSCAxMjQgL1hIZWlnaHQgNTQwIC9Gb250RmlsZTIgNTQgMCBS
- ID4+CmVuZG9iago1NyAwIG9iagpbIDI3OCBdCmVuZG9iagoxNiAwIG9iago8PCAvVHlw
- ZSAvRm9udCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9ET01HUFkrSGVsdmV0
- aWNhLUJvbGQgL0ZvbnREZXNjcmlwdG9yCjU2IDAgUiAvV2lkdGhzIDU3IDAgUiAvRmly
- c3RDaGFyIDQ2IC9MYXN0Q2hhciA0NiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcK
- Pj4KZW5kb2JqCjEgMCBvYmoKPDwgL1RpdGxlIChVbnRpdGxlZCkgL0F1dGhvciAoUmFu
- ZGFsbCBIYXVjaCkgL0NyZWF0b3IgKE9tbmlHcmFmZmxlKSAvUHJvZHVjZXIKKE1hYyBP
- UyBYIDEwLjUuNSBRdWFydHogUERGQ29udGV4dCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDA4
- MTExMjE4NDcwMlowMCcwMCcpCi9Nb2REYXRlIChEOjIwMDgxMTEyMTg0NzAyWjAwJzAw
- JykgPj4KZW5kb2JqCnhyZWYKMCA1OAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMjg0
- NjggMDAwMDAgbiAKMDAwMDAwMjA4MCAwMDAwMCBuIAowMDAwMDEzODUyIDAwMDAwIG4g
- CjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMjA2MCAwMDAwMCBuIAowMDAwMDAyMTg0
- IDAwMDAwIG4gCjAwMDAwMTAwMzIgMDAwMDAgbiAKMDAwMDAwMzE3MyAwMDAwMCBuIAow
- MDAwMDAzNjM3IDAwMDAwIG4gCjAwMDAwMDM2NTYgMDAwMDAgbiAKMDAwMDAwNDA3OCAw
- MDAwMCBuIAowMDAwMDExNTE4IDAwMDAwIG4gCjAwMDAwMjA1MDMgMDAwMDAgbiAKMDAw
- MDAwMjQ1OCAwMDAwMCBuIAowMDAwMDI0OTQ0IDAwMDAwIG4gCjAwMDAwMjgyODkgMDAw
- MDAgbiAKMDAwMDAwMjg4NyAwMDAwMCBuIAowMDAwMDAyNzQ0IDAwMDAwIG4gCjAwMDAw
- MDI2MDEgMDAwMDAgbiAKMDAwMDAwMzAzMCAwMDAwMCBuIAowMDAwMDEyMTc3IDAwMDAw
- IG4gCjAwMDAwMTI1MTIgMDAwMDAgbiAKMDAwMDAxMzUxNyAwMDAwMCBuIAowMDAwMDEy
- ODQ3IDAwMDAwIG4gCjAwMDAwMTMxODIgMDAwMDAgbiAKMDAwMDAxMDY1MyAwMDAwMCBu
- IAowMDAwMDA0MDk4IDAwMDAwIG4gCjAwMDAwMDYxOTkgMDAwMDAgbiAKMDAwMDAxMjE0
- MCAwMDAwMCBuIAowMDAwMDA2MjIwIDAwMDAwIG4gCjAwMDAwMDkwOTYgMDAwMDAgbiAK
- MDAwMDAwOTExNyAwMDAwMCBuIAowMDAwMDEwMDEyIDAwMDAwIG4gCjAwMDAwMTAwNjgg
- MDAwMDAgbiAKMDAwMDAxMDYzMyAwMDAwMCBuIAowMDAwMDEwNjkwIDAwMDAwIG4gCjAw
- MDAwMTE0OTggMDAwMDAgbiAKMDAwMDAxMTU1NSAwMDAwMCBuIAowMDAwMDEyMTIwIDAw
- MDAwIG4gCjAwMDAwMTI0OTIgMDAwMDAgbiAKMDAwMDAxMjgyNyAwMDAwMCBuIAowMDAw
- MDEzMTYyIDAwMDAwIG4gCjAwMDAwMTM0OTcgMDAwMDAgbiAKMDAwMDAxMzgzMiAwMDAw
- MCBuIAowMDAwMDEzOTM1IDAwMDAwIG4gCjAwMDAwMTM5OTkgMDAwMDAgbiAKMDAwMDAy
- MDAxNCAwMDAwMCBuIAowMDAwMDIwMDM1IDAwMDAwIG4gCjAwMDAwMjAyNzEgMDAwMDAg
- biAKMDAwMDAyMDY3OCAwMDAwMCBuIAowMDAwMDI0NDgwIDAwMDAwIG4gCjAwMDAwMjQ1
- MDEgMDAwMDAgbiAKMDAwMDAyNDczNiAwMDAwMCBuIAowMDAwMDI1MTI3IDAwMDAwIG4g
- CjAwMDAwMjgwMDAgMDAwMDAgbiAKMDAwMDAyODAyMSAwMDAwMCBuIAowMDAwMDI4MjY1
- IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNTggL1Jvb3QgNDUgMCBSIC9JbmZvIDEg
- MCBSIC9JRCBbIDw1MmVlNmM2ZDI2ZThhMWE1N2U2NDUwZmZiMzY1NGI1YT4KPDUyZWU2
- YzZkMjZlOGExYTU3ZTY0NTBmZmIzNjU0YjVhPiBdID4+CnN0YXJ0eHJlZgoyODY3NQol
- JUVPRgoxIDAgb2JqCjw8L0F1dGhvciAoUmFuZGFsbCBIYXVjaCkvQ3JlYXRpb25EYXRl
- IChEOjIwMDgwOTE5MTUzNTAwWikvQ3JlYXRvciAoT21uaUdyYWZmbGUgNS4wLjIpL01v
- ZERhdGUgKEQ6MjAwODExMTIxODQ2MDBaKS9Qcm9kdWNlciAoTWFjIE9TIFggMTAuNS41
- IFF1YXJ0eiBQREZDb250ZXh0KS9UaXRsZSAoZG5hLWNvbm5lY3Rvci1mZWRlcmF0aW9u
- KT4+CmVuZG9iagp4cmVmCjEgMQowMDAwMDI5OTkzIDAwMDAwIG4gCnRyYWlsZXIKPDwv
- SUQgWzw1MmVlNmM2ZDI2ZThhMWE1N2U2NDUwZmZiMzY1NGI1YT4gPDUyZWU2YzZkMjZl
- OGExYTU3ZTY0NTBmZmIzNjU0YjVhPl0gL0luZm8gMSAwIFIgL1ByZXYgMjg2NzUgL1Jv
- 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
+ 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
+ L5V+3C6Vft5hDtbx1DIKbtHXsjDlJRDUG+xm/OQa/YuDnnxVC7DAOY5sAfqvADc/Avsf
+ AtsfA4lqYKgVkctsN7jy4iLnAnTmnGnXzE7ktWZdP6J18GiF1mcbTQ1ayrI03+VprvCE
+ WxTpJkxZBc7ZX9t4jwp7eJBP9he5JLzu36zMpVNdnCWa2NantOjqJjeQ72fMnj5yPa/3
+ GbdnOGDlgJnvGwo4csq24jwXqYnU2OPxk2TGV1QnH5PzkDznFQdlTN9+LnUiQa6lPTmZ
+ 65eaXdzbPjMxxDOSrFgzE53x3/zGLSRl3n3U3HUs/5tnbZFnGIUFARM27zY0JNGLGBrh
+ wEUOGXpMKkxapV/QasLD5F+VFhLlXRYVvVjhnhV/z3kUuFvGP4VYHHMN5Qia/k7/oi/r
+ C/pd/fN8baG+4plzz5rGq2tfGVdmltXIuEGNMr6sKYhvsNoOei1kaZ3iFfTklfWN4eoy
+ 9nxt2aPJHOJqfDXUpQhlasQ448muZfdFssU34edby/av6VH7fPZJTSXXsrp4Zin6fDZc
+ DWv/s6tg0rKr8OSNkC48a6HuVQ+qfWqL2gpNPaa2q21qF9+OqgPlHcOclYkLrNtl9Sn2
+ YGOa3spJV2aL4N/CL4b/pV5hC9c0NPkPTbi5jGkJ3xHcNnCHlP/DX7MDDd4KZW5kc3Ry
+ ZWFtCmVuZG9iagozNCAwIG9iago3OTIKZW5kb2JqCjcgMCBvYmoKWyAvSUNDQmFzZWQg
+ MzMgMCBSIF0KZW5kb2JqCjM1IDAgb2JqCjw8IC9MZW5ndGggMzYgMCBSIC9OIDMgL0Fs
+ dGVybmF0ZSAvRGV2aWNlUkdCIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4
+ Aa2YdzzVXx/Az90u17649sjeOyubbDKLyLpGrtElKxX9KBJlJEoiI5VkFPmh7AYXLSNK
+ SUNCVKLIcy7V73m9ntfzev55zut173mfzzjj+znfM74AsL30iYigIAEAoWFRVMftxiI7
+ d7mL4EYBBhAAETABjI9fZISRg4MNNPkvaWkIIOiqxwr0uk57XTCejFiPnfj0ZbXg+sTn
+ /+L0W8xChQ0CgJCHAmLgJhvS2XeTnekcExURBW2C6OwX5OMPOQGyPNXZ0QRyJWSWwE2+
+ RWffTb5H52i/QLrvCABYjjD/4DAAcB8h6/uTI/2gmt6uv3+kXyjkUwAgkaGh4bB+tlwo
+ l/aLoEJfthbI4vTnAnOYPC8DsBWOGLv0jyxSFYB6DgBEyv6RSfwAgJsBgKvp/8g+O248
+ KwT3QGSAGvSBCUEwBgDzYn39syTsWzYAa1nr6z8urq+vlQKAGgegjeK3nxq9YQutETQA
+ /ld5c8y/PFCwq/QAE4E5yAJfEN6IF8gQFAOqDh2EkcGsYV/iuhnq8NcY65luE2jMM6w4
+ Nnl2N450zg4uJLc2TxLpHp8Af4BAgxCD8G6RRjHiFl/xO5JEqVjpR7JScqflFxVtla6o
+ 4FUD1No1WDQpW3u0iTqhus3bOPR3GZQYfjHWNokxbTD7sd3dgmalYH3OFmtHse/dIeeY
+ 6zTv4ujauFNi1xH36d0OnjV7mL3JPq1+Qv6HyL2BYkGxwf0hcpT40J5wvgi/fZXUpSit
+ /dHRHbEgTjd+/4GahOlDwodtE1OSqo8MJyNTFI96HEtNrUjrPv7mBC5DKtP4pP+pw1ln
+ sktymnNpp9/nfT4zk/+qYPRs77m2wlvnG4sqLpQUHy85cDG8NKDMtdyiQueSTCVX5c/L
+ 764MXe2uqr12sjrmOrnGulahjr3uW/3IjZs3CxtiG11vaTZxNX36u7e5ouVIq8dttTtM
+ dybbGtpPdPh36ndxd013N/ecvEu+p30ff3/kweXehD5HmiRtqb9rIGvQ46Hww+ePSh8H
+ PpF58uFp7VDEsNLwwkjdaNQzjWdfxxrH9z9XfT734vpE6EvZlx9eVU6SX4u+fj519s2u
+ tzxvH73Lee8wzTz98MPJGduPTB/7ZjPndsxzzT/5VLDguSi8OPW56gv1q84Sdon2LW/Z
+ a0VyZen77R9pq25rEmtzPzvWg9fXYfzZgQ6IAw8Q8oizSBKyFKWLeok+ibHCsmKn4Qyo
+ xGcxJjHFExKYU1nyWSvZ2tknODFEFS4f7kyeTtISnwx/hMA1wVlhBZEw0UqxOXFdiVjJ
+ DmmEjIlsltywAknRXalQ+ZkqQc1WPV3jjuaqlp52gE627l29RX0eAy3DPUYlxvOmSmYJ
+ 5t0WBEs7q0zrYVuinbt9qcOio7pTknOfK6eb284zu0Y8xHZTPMu83nrL+IT4NvotkdUC
+ EgJvBM3uVQwhU86FjoVzRJjti6Nei5zcT4w2iImKPRfXGT+bQDpofijqcE7ijaSRI2vJ
+ oikGRwOOJaeWpNUeH0ifzmDI5DvJf4o3i5RNzGHP5TzNnUc8w5bPUAAKfp5dPbdUuHh+
+ rujdhefFgyUdF1tLG8uqy/Mqjl86Vhl7OfCK21XrKp1r0tWk69jrizVvah/VtdZfuZF3
+ M7lhX6P7LbMmpb95mhHNcy3jrbTbdXcK2pLbIzp2d5p0SXezda/2fLj77N7t++UPMnqj
+ +1xpav1c/SsDzwZvPSx6lPB495NtT0WG0EMvh7tGykeTn3mP6Y8Lji8/H3nROJHzMvyV
+ 5aTY5PfXY1M1b1Lf+rzTes/8/sN064dTM34fNWeZZl/O1c+nfHJZkFz4stj1Oe8L+av6
+ Em7p8beSZcqK1nfc98Ef51YD19TWVn7eX6dsxB8PhIEhCAHF4AVCEhGDeIhUR5aguFHZ
+ aG50CUYdQ8OG4FhxzQyheHH8a8YSJjJBhbDG3MdygTWabQe7Igea4x1nH7GGK487gWcP
+ yYxXkY/Ej+SfE3goeEuoRDhNJFzUWcx4i5Q4XvyVxB3J83CFcJKRlsXKjshVyicqBCt6
+ K9koG6poqEqosautqy9ovNDs39qhdUv7mk6JboFe5rYk/X0GvoZeRm7GJiZ6pupm8uZK
+ 2yUsBC0FrbisWW1YbRntMPZ4B9wOtCPKCe2Mc8G74t2Yd7LsYnFn9+DZLeop56WwR9lb
+ 08fA19rP1t+bTA4IDwwOigtO2JsVUkApDC0Kqwgvi7i0r4raGHkrqml/fXRtTG3szbja
+ +Bq4nlw9WHbo7OGMxPSkY0eS/tqb7J3idXTHMcNUlTTJ41zpmPSlE28yHmX2nLxxqjjr
+ RHZ8TnCu62mjPIUzpHxk/mzBGFxZWgrLz2cUxV0ILnYrMbwoXcpZhihbLH9dQbvUUFl6
+ OfdKytWYqsBrO6r1rsvW8NRia5fqXtX33ui+WdNwvrHgVlpTzN8hzYEtnq3Ot53uOLY5
+ tjt3uHV6dAV0R/bE3U27V3T/5oP+3h803n7dAcrgxYdjj7meuD6tGPo54jZ6Y0xmvPiF
+ 0ETdK5/XxCna2/L3Vz60zIL5kEXGr6jl/NVVevw39z76noDVBCAvEoBdbQA4xwOQDvdQ
+ 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
+ cvAf/aaVAgjY8IyGnpHwzPYW+oTuCT5CBSK/6tm0EwF+IBzsBxRotx9Qla8qTyuv/rEx
+ gToK/P2n1z+aYOAPLf69tg0PeluhdQHR+eFxOq5B8C1XRWugjdHb0PpobSACT4x8QAGt
+ Dvd6I7QBWhfqtPs/Nn780/LmuH3/jMr6dw9hP8P+SP+jVRAMv0Ns3L/hEwRYGOtCKAGg
+ w0A1kZ7/e4oix8K7OQAm4RFx1ODAoCgRI/j1gSwvYhnmpygvoqqsrA3+BTrPVcsKZW5k
+ c3RyZWFtCmVuZG9iagozNiAwIG9iagozODczCmVuZG9iagoyNiAwIG9iagpbIC9JQ0NC
+ YXNlZCAzNSAwIFIgXQplbmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0aCAzNyAwIFIgL0Z1
+ bmN0aW9uVHlwZSAwIC9CaXRzUGVyU2FtcGxlIDggL1NpemUgWyAxMzY1IF0gL0RvbWFp
+ bgpbIDAgMSBdIC9SYW5nZSBbIDAgMSAwIDEgMCAxIF0gL0ZpbHRlciAvRmxhdGVEZWNv
+ ZGUgPj4Kc3RyZWFtCngBncEHVgEAAADQ+9/ESrZkVBQaskdpGJlRjuA5gv//4XDyr/7U
+ Xu3Ur9qqjVqrlVqShfpRczVTUzVR3+pLfaoPNVbv6k2N1FANVF/1VFd1SFu1VFO9qoZ6
+ Uc/qST2quqqpqnpQ96qiyupO3aobVVJFUlB5da1y6kplVUalVUolVULFVUxdqqi6UBEV
+ ViEVVIHzHQFawrliCmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKMTUyCmVuZG9iagoy
+ MCAwIG9iago8PCAvTGVuZ3RoIDM4IDAgUiAvRnVuY3Rpb25UeXBlIDAgL0JpdHNQZXJT
+ YW1wbGUgOCAvU2l6ZSBbIDEzNjUgXSAvRG9tYWluClsgMCAxIF0gL1JhbmdlIFsgMCAx
+ IDAgMSAwIDEgXSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAGdwQdWAQAA
+ AND738RKtmRUFBqyR2kYmVGO4DmC///hcPKv/tRe7dSv2qqNWquVWpKF+lFzNVNTNVHf
+ 6kt9qg81Vu/qTY3UUA1UX/VUV3VIW7VUU72qhnpRz+pJPaq6qqmqelD3qqLK6k7dqhtV
+ UkVSUHl1rXLqSmVVRqVVSiVVQsVVTF2qqLpQERVWIRVUgfMdAVrCuWIKZW5kc3RyZWFt
+ CmVuZG9iagozOCAwIG9iagoxNTIKZW5kb2JqCjIxIDAgb2JqCjw8IC9MZW5ndGggMzkg
+ MCBSIC9GdW5jdGlvblR5cGUgMCAvQml0c1BlclNhbXBsZSA4IC9TaXplIFsgMTM2NSBd
+ IC9Eb21haW4KWyAwIDEgXSAvUmFuZ2UgWyAwIDEgMCAxIDAgMSBdIC9GaWx0ZXIgL0Zs
+ YXRlRGVjb2RlID4+CnN0cmVhbQp4AZ3BB1YBAAAA0PvfxEq2ZFQUGrJHaRiZUY7gOYL/
+ /+Fw8q/+1F7t1K/aqo1aq5VakoX6UXM1U1M1Ud/qS32qDzVW7+pNjdRQDVRf9VRXdUhb
+ tVRTvaqGelHP6kk9qrqqqap6UPeqosrqTt2qG1VSRVJQeXWtcupKZVVGpVVKJVVCxVVM
+ XaqoulARFVYhFVSB8x0BWsK5YgplbmRzdHJlYW0KZW5kb2JqCjM5IDAgb2JqCjE1Mgpl
+ bmRvYmoKMjIgMCBvYmoKPDwgL0xlbmd0aCA0MCAwIFIgL0Z1bmN0aW9uVHlwZSAwIC9C
+ aXRzUGVyU2FtcGxlIDggL1NpemUgWyAxMzY1IF0gL0RvbWFpbgpbIDAgMSBdIC9SYW5n
+ ZSBbIDAgMSAwIDEgMCAxIF0gL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+ ncEHVgEAAADQ+9/ESrZkVBQaskdpGJlRjuA5gv//4XDyr/7UXu3Ur9qqjVqrlVqShfpR
+ czVTUzVR3+pLfaoPNVbv6k2N1FANVF/1VFd1SFu1VFO9qoZ6Uc/qST2quqqpqnpQ96qi
+ yupO3aobVVJFUlB5da1y6kplVUalVUolVULFVUxdqqi6UBEVViEVVIHzHQFawrliCmVu
+ ZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKMTUyCmVuZG9iagozIDAgb2JqCjw8IC9UeXBl
+ IC9QYWdlcyAvTWVkaWFCb3ggWzAgMCA1NzYgNzMzXSAvQ291bnQgMSAvS2lkcyBbIDIg
+ MCBSIF0gPj4KZW5kb2JqCjQxIDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAz
+ 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
+ MCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Bc2NlbnQgNzcwIC9DYXBIZWln
+ aHQgNzI3IC9EZXNjZW50IC0yMzAgL0ZsYWdzIDMyCi9Gb250QkJveCBbLTk1MSAtNDgx
+ IDE0NDUgMTEyMl0gL0ZvbnROYW1lIC9YSUlYR08rSGVsdmV0aWNhIC9JdGFsaWNBbmds
+ ZSAwCi9TdGVtViA5OCAvTWF4V2lkdGggMTUwMCAvU3RlbUggODUgL1hIZWlnaHQgNTMx
+ IC9Gb250RmlsZTIgNDIgMCBSID4+CmVuZG9iago0NSAwIG9iagpbIDI3OCAwIDAgMCAw
+ IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAg
+ MCAwIDAgMCAwCjcyMiAwIDAgNjExIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA3MjIgMCAw
+ IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU1NiAwIDUwMAo1NTYgNTU2IDAgMCAwIDIy
+ MiAwIDAgMCAwIDU1NiA1NTYgNTU2IDAgMzMzIDUwMCAyNzggMCAwIDAgMCA1MDAgXQpl
+ bmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9C
+ YXNlRm9udCAvWElJWEdPK0hlbHZldGljYSAvRm9udERlc2NyaXB0b3IKNDQgMCBSIC9X
+ aWR0aHMgNDUgMCBSIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDEyMSAvRW5jb2Rpbmcg
+ L01hY1JvbWFuRW5jb2RpbmcKPj4KZW5kb2JqCjQ2IDAgb2JqCjw8IC9MZW5ndGggNDcg
+ MCBSIC9MZW5ndGgxIDUwODAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngB
+ vVcLcFTVGf7/+9hHCJIQkE3Cene5m4Qku4SXhEdMbsJu2BgSQwJxl4fuJlkMNIFtS1OR
+ gpGHymIdHCvQjC1SmdHBojcL4kUGJ6O02ipTH4NaX6jjA6WR6vCoQnL7n7thJYzDZEaG
+ e+bc//yP8//f/c7Z5BxAAEiFTuBBaW4PR8ECfrK8Rt3W3LHKcUd5vkLjzwD4e5dG72h/
+ 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
+ WuauY7VqWa1aVqtOqTNqFRb6ljVUwP8BnCt6ywplbmRzdHJlYW0KZW5kb2JqCjQ3IDAg
+ b2JqCjI3ODQKZW5kb2JqCjQ4IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAv
+ QXNjZW50IDc3MCAvQ2FwSGVpZ2h0IDczMSAvRGVzY2VudCAtMjMwIC9GbGFncyAzMgov
+ Rm9udEJCb3ggWy0xMDE4IC00ODEgMTQzNiAxMTU5XSAvRm9udE5hbWUgL1BJSUFJQStI
+ ZWx2ZXRpY2EtQm9sZCAvSXRhbGljQW5nbGUKMCAvU3RlbVYgMTQ5IC9NYXhXaWR0aCAx
+ NTAwIC9TdGVtSCAxMjQgL1hIZWlnaHQgNTQwIC9Gb250RmlsZTIgNDYgMCBSID4+CmVu
+ ZG9iago0OSAwIG9iagpbIDI3OCBdCmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9u
+ dCAvU3VidHlwZSAvVHJ1ZVR5cGUgL0Jhc2VGb250IC9QSUlBSUErSGVsdmV0aWNhLUJv
+ bGQgL0ZvbnREZXNjcmlwdG9yCjQ4IDAgUiAvV2lkdGhzIDQ5IDAgUiAvRmlyc3RDaGFy
+ IDQ2IC9MYXN0Q2hhciA0NiAvRW5jb2RpbmcgL01hY1JvbWFuRW5jb2RpbmcKPj4KZW5k
+ b2JqCjEgMCBvYmoKPDwgL1RpdGxlIChVbnRpdGxlZCkgL0F1dGhvciAoUmFuZGFsbCBI
+ YXVjaCkgL0NyZWF0b3IgKE9tbmlHcmFmZmxlKSAvUHJvZHVjZXIKKE1hYyBPUyBYIDEw
+ LjUuNyBRdWFydHogUERGQ29udGV4dCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDA5MDYwOTIz
+ NDA1MlowMCcwMCcpCi9Nb2REYXRlIChEOjIwMDkwNjA5MjM0MDUyWjAwJzAwJykgPj4K
+ ZW5kb2JqCnhyZWYKMCA1MAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMjk5OTIgMDAw
+ MDAgbiAKMDAwMDAwMTczMCAwMDAwMCBuIAowMDAwMDE5ODIzIDAwMDAwIG4gCjAwMDAw
+ MDAwMjIgMDAwMDAgbiAKMDAwMDAwMTcxMCAwMDAwMCBuIAowMDAwMDAxODM0IDAwMDAw
+ IG4gCjAwMDAwMTQ0MTMgMDAwMDAgbiAKMDAwMDAwMzA5NyAwMDAwMCBuIAowMDAwMDAz
+ NTYxIDAwMDAwIG4gCjAwMDAwMDI2NTUgMDAwMDAgbiAKMDAwMDAwMzA3NyAwMDAwMCBu
+ IAowMDAwMDA5NDI3IDAwMDAwIG4gCjAwMDAwMjY0NzUgMDAwMDAgbiAKMDAwMDAyOTgx
+ MyAwMDAwMCBuIAowMDAwMDAyMzY5IDAwMDAwIG4gCjAwMDAwMDIyMjYgMDAwMDAgbiAK
+ MDAwMDAwMjA4MyAwMDAwMCBuIAowMDAwMDAyNTEyIDAwMDAwIG4gCjAwMDAwMTg0ODMg
+ MDAwMDAgbiAKMDAwMDAxODgxOCAwMDAwMCBuIAowMDAwMDE5MTUzIDAwMDAwIG4gCjAw
+ MDAwMTk0ODggMDAwMDAgbiAKMDAwMDAxMzQ2MSAwMDAwMCBuIAowMDAwMDAzNTgwIDAw
+ MDAwIG4gCjAwMDAwMDY0NTYgMDAwMDAgbiAKMDAwMDAxODQ0NiAwMDAwMCBuIAowMDAw
+ MDA2NDc3IDAwMDAwIG4gCjAwMDAwMDg1NzggMDAwMDAgbiAKMDAwMDAwODU5OSAwMDAw
+ MCBuIAowMDAwMDA5NDA3IDAwMDAwIG4gCjAwMDAwMDk0NjQgMDAwMDAgbiAKMDAwMDAx
+ MzQ0MCAwMDAwMCBuIAowMDAwMDEzNDk4IDAwMDAwIG4gCjAwMDAwMTQzOTMgMDAwMDAg
+ biAKMDAwMDAxNDQ0OSAwMDAwMCBuIAowMDAwMDE4NDI1IDAwMDAwIG4gCjAwMDAwMTg3
+ OTggMDAwMDAgbiAKMDAwMDAxOTEzMyAwMDAwMCBuIAowMDAwMDE5NDY4IDAwMDAwIG4g
+ CjAwMDAwMTk4MDMgMDAwMDAgbiAKMDAwMDAxOTkwNiAwMDAwMCBuIAowMDAwMDE5OTcw
+ IDAwMDAwIG4gCjAwMDAwMjU5ODYgMDAwMDAgbiAKMDAwMDAyNjAwNyAwMDAwMCBuIAow
+ MDAwMDI2MjQzIDAwMDAwIG4gCjAwMDAwMjY2NTAgMDAwMDAgbiAKMDAwMDAyOTUyNCAw
+ MDAwMCBuIAowMDAwMDI5NTQ1IDAwMDAwIG4gCjAwMDAwMjk3ODkgMDAwMDAgbiAKdHJh
+ aWxlcgo8PCAvU2l6ZSA1MCAvUm9vdCA0MSAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPGE3
+ YWY0YjgyMzhiMTNlZmVlNGU0OTZhZWFkZDQ4MThlPgo8YTdhZjRiODIzOGIxM2VmZWU0
+ ZTQ5NmFlYWRkNDgxOGU+IF0gPj4Kc3RhcnR4cmVmCjMwMTk5CiUlRU9GCjEgMCBvYmoK
+ PDwvQXV0aG9yIChSYW5kYWxsIEhhdWNoKS9DcmVhdGlvbkRhdGUgKEQ6MjAwODA5MTkx
+ NTM1MDBaKS9DcmVhdG9yIChPbW5pR3JhZmZsZSA1LjEuMSkvTW9kRGF0ZSAoRDoyMDA5
+ MDYwOTIzNDAwMFopL1Byb2R1Y2VyIChNYWMgT1MgWCAxMC41LjcgUXVhcnR6IFBERkNv
+ bnRleHQpL1RpdGxlIChkbmEtY29ubmVjdG9yLWZlZGVyYXRpb24uZ3JhZmZsZSk+Pgpl
+ bmRvYmoKeHJlZgoxIDEKMDAwMDAzMTM1NyAwMDAwMCBuIAp0cmFpbGVyCjw8L0lEIFs8
+ YTdhZjRiODIzOGIxM2VmZWU0ZTQ5NmFlYWRkNDgxOGU+IDxhN2FmNGI4MjM4YjEzZWZl
+ ZTRlNDk2YWVhZGQ0ODE4ZT5dIC9JbmZvIDEgMCBSIC9QcmV2IDMwMTk5IC9Sb290IDQx
+ IDAgUiAvU2l6ZSA1MD4+CnN0YXJ0eHJlZgozMTU3NQolJUVPRgo=
</data>
<key>QuickLookThumbnail</key>
<data>
- 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
+ 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
+ LoZbh4iIponFiuWMB40njkKPZJB/kZeSoZO7lM2V6Jbzl+uY4ZnZmsubwJy4nbeepp+h
+ oIqhe6Jvo2akVqVIpjqnKagVqP6p56rWq8Wssa2PrnevZbBLsS2yEbL3s9i0tbWctni3
+ Vrg2uRW58LrLu6a8gr1bvjO/C7/iwLbBjMJkwz7EFsTpxbvGj8dlyDnJCcnYyqnLfMxS
+ zSbN9s7Ez5HQW9Ef0d3So9Nn1CnU6tWx1nDXL9fx2LLZdNo12vXbt9x13TLd7t6v323g
+ KuDq4ajiZeMh493kmuVZ5hfm0ueT6FDpDenR6o/rTewL7Mztju5R7xXv1PCZ8V3yH/Lk
+ 86z0cvU69gb2zfeW+F75Jvn2+r77ifxX/SX97v7C/2n//wAAABEAOgB5AMoBLAGaAhgC
+ owM7A+AEjwVKBg8G6QfFCKgJkQqBC3oMfA2IDpgPqBDBEd8TBRQxFWEWjhfDGPYaKRtw
+ HK0d7R8tIG4hqCLuJDsleCbCKAEpQyqRK9ctGC5aL5ww2jIMM000izW/Nvw4PDlmOpI7
+ xzzyPhc/OEBfQaFC70QvRXxGxUgMSU5KjkvXTRROWk+jUPJSNFOBVMxWE1dXWJdZ2Fsi
+ XGxdpF7mYClha2K3Y/ZlM2Z8Z7Ro7Woua2Vsm23bbxJwRXF5cq1z4nUUdj93dHibecN6
+ 7XwYfUZ+dH+TgLSB2IL9hCGFP4Zmh4SIoYmxis+L6Y0IjhqPG5AZkRiSFJMRlBOVFpYU
+ lxCYCJkAmf6a/Jv2nPKd7p7nn92g0KHCor2jt6SupZamiqeHqHipZ6pXq0usOq0orhiv
+ Bq/ysOWx0rK9s6q0lrWEtnG3WrhFuS+6F7sBu+683L3NvrK/mcCEwXDCXMNDxCjFEMX8
+ xurH2si+yaXKjct2zFbNM84VzvnP2tC40Z7SfNNc1D3VINYE1uDXxNil2YTaYNs+3B3c
+ +N3Y3rffk+Bv4UniIuL649vksOWI5mHnOOgN6OrpveqQ62PsNu0L7eDus++F8FXxJvH0
+ 8sTzlvRl9TT2B/bT96H4bPk4+gf60Pub/Gf9M/35/sn/bP//AAAACQAfAEAAawCgAN4B
+ JgF3AdECNAKhAxYDkgQWBKEFNAXNBmsHDwe7CG0JJAnjCqELZQwxDP0NzA6fD3YQUREu
+ EgQS5xPMFLAVlhZ8F18YRRkuGhgbAhvuHNEduB6hH4kgbyFUIkIjJyQJJOElvyadJ3go
+ UykoKgYq2CuoLIAtaS5gL0wwQDE1MiUzETP/NPE13jbON8I4uDmtOqE7mTyOPYE+cT9i
+ QF5BV0JDQzxENEUsRi9HJUgdSR1KFUsPTA9NCk4FTwlQB1EEUgNTBFQHVQlWCVcNWA5Z
+ DloRWxdcIV0rXi1fMGA2YT9iS2NNZGBlZWZvZ2loeWl8apFrmWycbZ5upm+kcKdxrHK3
+ c7h0uXWzdrF3sXi1ebF6sHuwfKt9pH6af42Ai4GHgoGDaoRghV6GUYdAiDGJJooViwWL
+ 9ozljdKOxo+0kKCRjJJ6k2mUVpVBli2XGJgCmO2Z25rLm7ycpZ2NnnmfaaBXoUCiKKMT
+ pAGk8qXjps2ntqijqZSqhat3rGetUa48ryqwF7EGsfay4bPLtMW1sLadt5m4ibl3umu7
+ Z7xdvVS+U79SwFLBVMJXw1vEZsVzxnnHicieybXKzsv7zRnOO89s0KLR29MV1FbVptb+
+ 2FfZtNsp3KDeHt+y4WHjFOTN5qXoquq87QDva/IK9QP4mPz8//8AAG5kaW4AAAAAAAAG
+ NgAAlnMAAFnAAABUegAAi0MAACfPAAAVYAAAUA0AAFQ5AAJR6wACHCgAAVR6AAMBAAAC
+ AAAAJwBTAIAArgDeAQ0BPAFuAaEB0wIGAjsCcQKmAt4DFgNPA4gDwgP9BDgEdwSzBPIF
+ MQVvBbEF8wY2BnoGvwcEB0kHkAfcCCUIbwi9CQcJVQmlCfcKQwqUCugLPQuSC+kMQAyZ
+ DPINTw2xDg0Oaw7NDzMPlA/8EGMQyRE3EaYSEhJ+EvITaBPfFFgUzRU7FaQWEhaGFvQX
+ ZBfWGEoYwRk6GbMaKBqlGyMbnhwbHJYdEB2UHhQekx8VH5ogICCpITQhwSJLItUjYCP1
+ JIklGiWuJkQm1ydrKAcopilBKd0qgSsnK8gsbS0ZLccubC8aL80wgDE2MewypDNdNBs0
+ 4DWcNmQ3Ljf4OMM5jjpaOyc8ATzbPbY+kT9sQExBMkIPQvhD4kTcRcZGvUeoSJ5JrErH
+ S9lM+k4XTzVQSFFyUpBTxlTxVh1XRVh9Wa1a5FwhXWRerl/uYTFieGPYZSdmcmfQaTNq
+ jWvzbWNuxHA7ca1zH3Sddh13n3kheqx8OX3Mf2WA/YKThCeFy4d2iR2KwYxzji6P5ZGY
+ k0eVB5bPmJmacZxpnkugOKIwpBqmHqgZqhusGa4isCqyPbRbtmq4jLqlvMa+7sEcw0bF
+ b8enyc7MDM4x0G7SqtTi1xfZR9uM3b3f/uI55GzmqujX6xTtTO+S8cD0BPY/+HL6vfzn
+ //8AAAAvAGEAlADIAP0BMwFnAZ4B1gIQAkoChQLAAvsDOQN4A7cD9wQ3BHgEuQT9BUIF
+ hgXOBhcGXAalBvAHOweIB9UIJwh4CMgJGAlvCcIKGApyCswLIwt9C9sMOgyaDPwNXg3F
+ DjEOlw7/D20P3BBIELYRLRGnEhwSlBMTE5QUGBScFRcVjBYEFoMW/Bd4F/YYdhj5GX8a
+ ABqFGxAblhweHKMdKh25HkIezR9bH+sgfSESIakiPiLQI2UkBSSgJTwl2SZ4JxEnsShX
+ KPwpmypFKvIrmyxELPUtqC5ULwUvvDB0MS0x5zKhM100HjTkNaI2bDc2OAE4zTmYOmM7
+ MDwJPOI9uj6TP2tASUEsQgVC60PQRMVFrEacR4VIckl0SoRLkUyhTblOzE/bUO9SClMq
+ VE9VclaOV7VY3FoCWy5cYF2XXtNgBWE5YnJjwmUCZjlnhGjSah9raGzBbhNvaHDJchxz
+ e3TfdkN3qHkNend76X1VfsyAQoG2gyiEl4Ybh52JHIqYjBqNq483kMCSRZPGlV+W9piL
+ miGb1Z19nyKgz6KCpCil5aeXqVCq/qzDrnqwObH/s821kbdnuTK7AbzXvrLAlMJ7xFDG
+ QcgsyhfMFM37z/zR/9QD1gfYDNoW3CveP+Be4nrkk+a86NbrBe0x723xmfPa9hj4Ufqk
+ /Nj//wAAAFkAsAEFAVsBsQIIAmECuQMTA2wDygQmBIUE5gVIBasGDwZ6BuEHSge3CCQI
+ lwkLCYAJ9wpwCusLbgvvDHMM+g2HDg8Onw80D9MQbREPEbISXhMFE7sUcxUeFbwWZhcM
+ F7QYYRkTGcYadxsxG+ccnB1UHhAeyh+IIEkhDyHYIpkjXSQvJPglxCaSJ1goLCj/Kcwq
+ pSt8LE4tKy4FLtovuTCYMXcyVjM1NBg0/zXhNss3tTieOYY6bTtVPEg9Oj4rPxpACUEE
+ Qe5C6EPfROdF20bfR9FI0EnXSuNL5Uz5TgZPFlAcUTJSRFNmVIRVola5V99ZAVokW01c
+ fF2wXupgGGFKYoFjz2UMZkJni2jZaiNrbGzDbhNvaHDHchlzdnTZdj13oHkEemx73H1G
+ fruAL4GhgxCEfYX8h3yI+Ipwi+2NeY8CkIaSB5OElROWpZgymbubRZzOnmCf/qGVoy6k
+ yqZep/+pqas1rNyugrAOsbezX7T9to64NrnPu2K8+r6NwCTBtcNMxM/GXMf1yXfK+Mx5
+ zfnPXdDX0lXTwtUj1oTX5NlD2qLb9N063n/fw+EH4kfjdOSh5c7m+egX6S3qNes87EPt
+ Se5N70PwM/ER8e7yy/Oj9Gv1M/Xx9rD3ZfgT+MH5Xfn4+pL7FvuY/Br8kfz5/WH9yf4x
+ /sv/Zf//AABkZXNjAAAAAAAAAApDb2xvciBMQ0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAbWx1YwAAAAAAAAAQAAAADG5iTk8AAAASAAAA0HN2U0UAAAAQAAAA4mZpRkkA
+ AAAQAAAA8mRhREsAAAAcAAABAnpoQ04AAAAMAAABHmZyRlIAAAAWAAABKmphSlAAAAAO
+ AAABQGVuVVMAAAASAAABTnB0QlIAAAAYAAABYGVzRVMAAAASAAABeHpoVFcAAAAOAAAB
+ inJ1UlUAAAAkAAABmGtvS1IAAAAMAAABvGRlREUAAAAQAAAByG5sTkwAAAAWAAAB2Gl0
+ SVQAAAAUAAAB7gBGAGEAcgBnAGUALQBMAEMARABGAOQAcgBnAC0ATABDAEQAVgDkAHIA
+ aQAtAEwAQwBEAEwAQwBEAC0AZgBhAHIAdgBlAHMAawDmAHIAbV9pgnIAIABMAEMARABM
+ AEMARAAgAGMAbwB1AGwAZQB1AHIwqzDpMPwAIABMAEMARABDAG8AbABvAHIAIABMAEMA
+ RABMAEMARAAgAEMAbwBsAG8AcgBpAGQAbwBMAEMARAAgAGMAbwBsAG8Acl9pgnJtsmZ2
+ mG95OlZoBCYEMgQ1BEIEPQQ+BDkAIAQWBBoALQQ0BDgEQQQ/BDsENQQ5zuy37AAgAEwA
+ QwBEAEYAYQByAGIALQBMAEMARABLAGwAZQB1AHIAZQBuAC0ATABDAEQATABDAEQAIABj
+ AG8AbABvAHIAaQAAbW1vZAAAAAAAAAYQAACcaQAAAADCPzKAAAAAAAAAAAAAAAAAAAAA
+ AHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlLCBJbmMuLCAyMDA5AA==
</data>
<key>ReadOnly</key>
<string>NO</string>
Modified: trunk/docs/reference/src/main/docbook/en-US/images/dna-connector-federation.png
===================================================================
(Binary files differ)
16 years, 6 months
DNA SVN: r1022 - trunk/dna-repository/src/main/java/org/jboss/dna/repository/sequencer.
by dna-commits@lists.jboss.org
Author: bcarothers
Date: 2009-06-09 18:51:55 -0400 (Tue, 09 Jun 2009)
New Revision: 1022
Modified:
trunk/dna-repository/src/main/java/org/jboss/dna/repository/sequencer/StreamSequencerAdapter.java
Log:
DNA-443 Java sequencer is not saving content correctly
Well, the initial guess was in the ballpark but not correct.
Part of the StreamSequencerAdapter code (the buildPathTo part) was operating directly against the graph for reads and writes. The other part (saveOutput) was operating against a destination that happened to be a batch. The batch doesn't save until all of the processing for the output of a particular sequencer is complete, leading to some race conditions between the two parts of the code. The batch is there to support a all-or-nothing save semantics for the output of a particular sequencer.
The most correct solution is to switch all of the code to use a batch, but this creates some challenges. For one thing, the batch doesn't support the concept of createIfMissing semantics or reads of any sort. I think that we would have to keep some sort of internal graph of nodes added to the batch while processing the sequencer output and check against that as well as the nodes in the graph.
My workaround for now is to make all of the operations in StreamSequencerAdapter work directly against the graph. We can always revisit this in 0.6.
Modified: trunk/dna-repository/src/main/java/org/jboss/dna/repository/sequencer/StreamSequencerAdapter.java
===================================================================
--- trunk/dna-repository/src/main/java/org/jboss/dna/repository/sequencer/StreamSequencerAdapter.java 2009-06-09 21:08:19 UTC (rev 1021)
+++ trunk/dna-repository/src/main/java/org/jboss/dna/repository/sequencer/StreamSequencerAdapter.java 2009-06-09 22:51:55 UTC (rev 1022)
@@ -32,11 +32,14 @@
import java.util.List;
import java.util.Set;
import org.jboss.dna.common.collection.Problems;
+import org.jboss.dna.graph.JcrLexicon;
+import org.jboss.dna.graph.JcrNtLexicon;
import org.jboss.dna.graph.Node;
import org.jboss.dna.graph.observe.NetChangeObserver.NetChange;
import org.jboss.dna.graph.property.Binary;
import org.jboss.dna.graph.property.Path;
import org.jboss.dna.graph.property.PathFactory;
+import org.jboss.dna.graph.property.PathNotFoundException;
import org.jboss.dna.graph.property.Property;
import org.jboss.dna.graph.property.PropertyFactory;
import org.jboss.dna.graph.property.ValueFactories;
@@ -177,19 +180,26 @@
private void buildPathTo( Path targetPath,
SequencerContext context ) {
PathFactory pathFactory = context.getExecutionContext().getValueFactories().getPathFactory();
+ PropertyFactory propFactory = context.getExecutionContext().getPropertyFactory();
if (targetPath.isRoot()) return;
Path workingPath = pathFactory.createRootPath();
Path.Segment[] segments = targetPath.getSegmentsArray();
int i = 0;
if (segments.length > 1) {
+ Property primaryType = propFactory.create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.UNSTRUCTURED);
for (int max = segments.length - 1; i < max; i++) {
workingPath = pathFactory.create(workingPath, segments[i]);
- context.graph().createIfMissing(workingPath);
+
+ try {
+ context.graph().getNodeAt(workingPath);
+ }
+ catch (PathNotFoundException pnfe) {
+ context.graph().create(workingPath, primaryType);
+ }
}
}
- workingPath = pathFactory.create(workingPath, segments[i]);
- context.graph().create(workingPath);
+ context.graph().create(targetPath);
}
/**
@@ -228,7 +238,7 @@
if (absolutePath.getParent() != null) {
buildPathTo(absolutePath.getParent(), context);
}
- context.getDestination().create(absolutePath, properties);
+ context.graph().create(absolutePath, properties);
}
}
16 years, 6 months
DNA SVN: r1021 - in trunk/docs/reference/src/main/docbook/en-US/content: sequencers and 1 other directory.
by dna-commits@lists.jboss.org
Author: bcarothers
Date: 2009-06-09 17:08:19 -0400 (Tue, 09 Jun 2009)
New Revision: 1021
Modified:
trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/compact_node_types.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/image.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/java_source.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/microsoft_office.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/mp3.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/xml.xml
trunk/docs/reference/src/main/docbook/en-US/content/sequencers/zip.xml
Log:
Updated the example configuration code for each of the sequencers. Fixed a small typo in the configuration chapter.
Modified: trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -367,7 +367,7 @@
<sect1 id="using_dna_whats_next">
<title>What's next</title>
<para>
- This chapter outline how you configure JBoss DNA, how you then access a <code>javax.jcr.Repository</code> instance,
+ This chapter outlines how you configure JBoss DNA, how you then access a <code>javax.jcr.Repository</code> instance,
and use the standard JCR API to interact with the repository. The
<link linkend="jcr">next chapter</link> talks about using the JCR API with your JBoss DNA repository.
</para>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/compact_node_types.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/compact_node_types.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/compact_node_types.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -32,6 +32,22 @@
<title>Compact Node Type (CND) Sequencer</title>
<para>
This sequencer processes JCR Compact Node Definition (CND) files
- to extract the node definitions with their property definitions, and inserts these into the repository using JCR standard notation.
+ to extract the node definitions with their property definitions, and inserts these into the repository using JCR built-in types.
+ The node structure generated by this sequencer is equivalent to the node structure used in <code>/jcr:system/jcr:nodeTypes</code>.
</para>
+
+ <para>
+ This sequencer can be added to the repository configuration like so:
+<programlisting>
+JcrConfiguration config = ...
+
+config.sequencer("CND Sequencer")
+ .usingClass("org.jboss.dna.sequencer.cnd.CndSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences CND files to extract the node type definitions")
+ .sequencingFrom("//(*.cnd[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/nodeTypes/$1");
+
+</programlisting>
+ </para>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/image.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/image.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/image.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -93,16 +93,16 @@
</para>
<para>
To use this sequencer, simply include the <code>dna-sequencer-images</code> JAR
- in your application and configure the Sequencing Service to use this sequencer using something similar to:
+ in your application and configure the &JcrConfiguration; to use this sequencer using something similar to:
</para>
<programlisting>
-String name = "Image Sequencer";
-String desc = "Sequences image files to extract the characteristics of the image";
-String classname = "org.jboss.dna.sequencer.images.ImageMetadataSequencer";
-String[] classpath = null; // Use the current classpath
-String[] pathExpressions = {"//(*.(jpg|jpeg|gif|bmp|pcx|png|iff|ras|pbm|pgm|ppm|psd)[*])/jcr:content[@jcr:data] => /images/$1"};
-&SequencerConfig; sequencerConfig = new &SequencerConfig;(name, desc, classname,
- classpath, pathExpressions);
-sequencingService.addSequencer(sequencerConfig);
+JcrConfiguration config = ...
+config.sequencer("Image Sequencer")
+ .usingClass("org.jboss.dna.sequencer.image.ImageMetadataSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences image files to extract the characteristics of the image")
+ .sequencingFrom("//(*.(jpg|jpeg|gif|bmp|pcx|png|iff|ras|pbm|pgm|ppm|psd)[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/images/$1");
+
</programlisting>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/java_source.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/java_source.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/java_source.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -42,16 +42,16 @@
</para>
<para>
To use this sequencer, simply include the <code>dna-sequencer-java</code> JAR (plus all of the JARs that it is dependent upon)
- in your application and configure the Sequencing Service to use this sequencer using something similar to:
+ in your application and configure the &JcrConfiguration; to use this sequencer using something similar to:
</para>
<programlisting>
-String name = "Java Sequencer";
-String desc = "Sequences java files to extract the characteristics of the Java source";
-String classname = "org.jboss.dna.sequencer.java.JavaMetadataSequencer";
-String[] classpath = null; // Use the current classpath
-String[] pathExpressions = {"//(*.java[*])/jcr:content[@jcr:data] => /java/$1"};
-&SequencerConfig; sequencerConfig = new &SequencerConfig;(name, desc, classname,
- classpath, pathExpressions);
-this.sequencingService.addSequencer(sequencerConfig);
+JcrConfiguration config = ...
+
+config.sequencer("Java Sequencer")
+ .usingClass("org.jboss.dna.sequencer.java.JavaMetadataSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences java files to extract the characteristics of the Java source")
+ .sequencingFrom("//(*.(java)[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/java/$1");
</programlisting>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/microsoft_office.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/microsoft_office.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/microsoft_office.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -32,7 +32,7 @@
<title><trademark class='registered'>Microsoft Office</trademark> Document Sequencer</title>
<para>
This sequencer is included in JBoss DNA and processes Microsoft Office documents, including Word documents, Excel spreadsheets,
- and PowerPoint presentations. With documents, the sequencer extracts the internal structure based on Heading styles.
+ and PowerPoint presentations. With documents, the sequencer attempts to infer the internal structure from the heading styles.
With presentations, the sequencer extracts the slides, titles, text and slide thumbnails.
With spreadsheets, the sequencer extracts the names of the sheets. And, the sequencer extracts for all the files the
general file information, including the name of the author, title, keywords, subject, comments, and various dates.
@@ -40,16 +40,16 @@
<para>
To use this sequencer, simply include the <code>dna-sequencer-msoffice</code> JAR and all of the
<ulink url="http://poi.apache.org/">POI</ulink> JARs
- in your application and configure the Sequencing Service to use this sequencer using something similar to:
+ in your application and configure the &JcrConfiguration; to use this sequencer using something similar to:
</para>
<programlisting>
-String name = "Microsoft Office Document Sequencer";
-String desc = "Sequences MS Office documents, including spreadsheets and presentations";
-String classname = "org.jboss.dna.sequencer.msoffice.MSOfficeMetadataSequencer";
-String[] classpath = null; // Use the current classpath
-String[] pathExpressions = {"//(*.(doc|docx|ppt|pps|xls)[*])/jcr:content[@jcr:data] => /msoffice/$1"};
-&SequencerConfig; sequencerConfig = new &SequencerConfig;(name, desc, classname,
- classpath, pathExpressions);
-sequencingService.addSequencer(sequencerConfig);
+JcrConfiguration config = ...
+
+config.sequencer("Microsoft Office Document Sequencer")
+ .usingClass("org.jboss.dna.sequencer.msoffice.MSOfficeMetadataSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences MS Office documents, including spreadsheets and presentations")
+ .sequencingFrom("//(*.(*.(doc|docx|ppt|pps|xls)[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/msoffice/$1");
</programlisting>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/mp3.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/mp3.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/mp3.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -39,15 +39,16 @@
</para>
<para>
To use this sequencer, simply include the <code>dna-sequencer-mp3</code> JAR and the <ulink url="http://www.jthink.net/jaudiotagger/">JAudioTagger</ulink>
- library in your application and configure the Sequencing Service to use this sequencer using something similar to:
+ library in your application and configure the &JcrConfiguration; to use this sequencer using something similar to:
</para>
<programlisting>
- String name = "MP3 Sequencer";
- String desc = "Sequences MP3 files to extract the ID3 tags of the audio file";
- String classname = "org.jboss.dna.sequencer.mp3.Mp3MetadataSequencer";
- String[] pathExpressions = {"//(*.mp3[*])/jcr:content[@jcr:data] => /mp3s/$1"};
- &SequencerConfig; sequencerConfig = new &SequencerConfig;(name, desc, classname,
- classpath, pathExpressions);
- this.sequencingService.addSequencer(sequencerConfig);
+JcrConfiguration config = ...
+
+config.sequencer("MP3 Sequencer")
+ .usingClass("org.jboss.dna.sequencer.mp3.Mp3MetadataSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences MP3 files to extract the ID3 tags of the audio file")
+ .sequencingFrom("//(*.mp3[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/mp3s/$1");
</programlisting>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/xml.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/xml.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/xml.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -31,6 +31,17 @@
<chapter id="xml-sequencer">
<title>XML Document Sequencer</title>
<para>
- This sequencer stores the structure and data of an XML file into the repository.
+ This sequencer stores the structure and data of an XML file into the repository. DTD, entity, comments,
+ and other content are maintained by the sequencer in the output structure.
</para>
+ <programlisting>
+JcrConfiguration config = ...
+
+config.sequencer("XML Sequencer")
+ .usingClass("org.jboss.dna.sequencer.xml.XmlSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences XML documents and maps their data into the repository")
+ .sequencingFrom("//(*.xml[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/xml/$1");
+</programlisting>
</chapter>
\ No newline at end of file
Modified: trunk/docs/reference/src/main/docbook/en-US/content/sequencers/zip.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/sequencers/zip.xml 2009-06-09 20:12:01 UTC (rev 1020)
+++ trunk/docs/reference/src/main/docbook/en-US/content/sequencers/zip.xml 2009-06-09 21:08:19 UTC (rev 1021)
@@ -32,19 +32,21 @@
<title>ZIP File Sequencer</title>
<para>
The ZIP file sequencer is included in JBoss DNA and extracts the files and folders contained in the ZIP archive file,
- extracting the files and folders into the repository using JCR's <code>nt:file</code> and <code>nt:folder</code> node types.
+ extracting the files and folders into the repository using JCR's <code>nt:file</code> and <code>nt:folder</code>
+ built-in node types. The structure of the output thus matches the logical structure of the contents of the ZIP file.
</para>
<para>
To use this sequencer, simply include the <code>dna-sequencer-zip</code> JAR
- in your application and configure the Sequencing Service to use this sequencer using something similar to:
+ in your application and configure the &JcrConfiguration; to use this sequencer using something similar to:
</para>
<programlisting>
-String name = "ZIP Sequencer";
-String desc = "Sequences ZIP archives to extract the files and folders";
-String classname = "org.jboss.dna.sequencer.zip.ZipSequencer";
-String[] pathExpressions = {"//(*.zip[*])/jcr:content[@jcr:data] => /zips/$1"};
-&SequencerConfig; sequencerConfig = new &SequencerConfig;(name, desc, classname,
- classpath, pathExpressions);
-this.sequencingService.addSequencer(sequencerConfig);
-</programlisting>
+JcrConfiguration config = ...
+
+config.sequencer("ZIP Sequencer")
+ .usingClass("org.jboss.dna.sequencer.zip.ZipSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences compressed files to extract the internal file and folder structure")
+ .sequencingFrom("//(*.(zip|gz|jar|war|ear)[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/zips/$1");
+ </programlisting>
</chapter>
\ No newline at end of file
16 years, 6 months
DNA SVN: r1020 - in trunk/docs/reference/src/main/docbook/en-US: content/core and 1 other directories.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-09 16:12:01 -0400 (Tue, 09 Jun 2009)
New Revision: 1020
Modified:
trunk/docs/reference/src/main/docbook/en-US/content/core/connector.xml
trunk/docs/reference/src/main/docbook/en-US/content/core/sequencing.xml
trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
trunk/docs/reference/src/main/docbook/en-US/content/jcr/jcr.xml
trunk/docs/reference/src/main/docbook/en-US/content/jcr/rest_service.xml
trunk/docs/reference/src/main/docbook/en-US/master.xml
Log:
Minor edits and changes to the Reference Guide.
Modified: trunk/docs/reference/src/main/docbook/en-US/content/core/connector.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/core/connector.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/content/core/connector.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -637,9 +637,9 @@
In this chapter, we covered all the aspects of JBoss DNA connectors, including the connector API,
how DNA's JCR implementation works with connectors, what connectors are available (and how to use them),
and how to write your own connector. So now that you know how to set up and use JBoss DNA repositories,
- the <link linkend="sequencing-framework">next chapter</link> describes the sequencing framework and how
- to build your own custom sequencers. After that, we'll get into <link linkend="configuration">how to configure
- JBoss DNA</link> to use the connectors and sequencers.
+ the <link linkend="sequencing_framework">next chapter</link> describes the sequencing framework and how
+ to build your own custom sequencers. After that, we'll get into <link linkend="jcr-part">how to configure
+ JBoss DNA and use JCR</link>.
</para>
</sect1>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/core/sequencing.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/core/sequencing.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/content/core/sequencing.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -521,7 +521,7 @@
In this chapter, we described how JBoss DNA sequences files as they're uploaded into a repository. We've also learned
in previous chapters about the JBoss DNA <link linkend="execution-context">execution contexts</link>,
<link linkend="graph-model">graph model</link>, and <link linkend="connector-framework">connectors</link>.
- In the <link linkend="jcr">next part</link> we'll put all these pieces together to learn how
+ In the <link linkend="jcr-part">next part</link> we'll put all these pieces together to learn how
to set up a JBoss DNA repository and access it using the JCR API.
</para>
</sect1>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -369,8 +369,7 @@
<para>
This chapter outline how you configure JBoss DNA, how you then access a <code>javax.jcr.Repository</code> instance,
and use the standard JCR API to interact with the repository. The
- <link linkend="downloading_and_running">next chapter </link> walks you through downloading
- and running the JBoss DNA examples.
+ <link linkend="jcr">next chapter</link> talks about using the JCR API with your JBoss DNA repository.
</para>
</sect1>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/jcr/jcr.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/jcr/jcr.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/content/jcr/jcr.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -29,7 +29,7 @@
%CustomDTD;
]>
<chapter id="jcr">
- <title>The JBoss DNA Content Repository for Java (JCR) Implementation</title>
+ <title>Using the JCR API with JBoss DNA</title>
<para>
The
<ulink url="&JSR170;">Content Repository for Java technology API</ulink>
@@ -38,7 +38,7 @@
JBoss DNA provides a partial JCR 1.0 implementation that allows you to work with the contents of a repository using the
JCR API. For information about how to use the JCR API, please see the <ulink url="&JSR170;">JSR-170</ulink> specification.
<note>
- <para>In the interests of brevity, this chapter does not attempt to reproduce the JSR-170 specification in order to provide
+ <para>In the interests of brevity, this chapter does not attempt to reproduce the JSR-170 specification nor provide
an exhaustive definition of JBoss DNA JCR capabilities. Rather, this chapter will describe any deviations from the
specification as well as any DNA-specific public APIs and configuration.
</para>
@@ -282,9 +282,10 @@
<sect1>
<title>Summary</title>
<para>
- In this chapter, we covered how to use JCR with JBoss DNA and learned about how it implements the JCR specification. Now that you know how JBoss DNA repositories work,
- and how to use JCR to work with DNA repositories, we'll move on in
- the <link linkend="deploying_dna_jcr">next chapter</link> to describing in detail how the sequencing of file content works.
+ In this chapter, we covered how to use JCR with JBoss DNA and learned about how it implements the JCR specification.
+ Now that you know how JBoss DNA repositories work and how to use JCR to work with DNA repositories, we'll move on in
+ the <link linkend="rest_service">next chapter</link> to show how you can use the RESTful web service to
+ provide access to the content in a JCR repository to clients.
</para>
</sect1>
</chapter>
Modified: trunk/docs/reference/src/main/docbook/en-US/content/jcr/rest_service.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/jcr/rest_service.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/content/jcr/rest_service.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -29,10 +29,10 @@
%CustomDTD;
]>
<chapter id="rest_service">
- <title>The JBoss DNA REST Server</title>
+ <title>The JBoss DNA RESTful Web Service</title>
<para>
- JBoss DNA now provides a RESTful interface to its JCR implementation that allows HTTP-based publishing
- and unpublishing of content. Although the initial version of this REST server only supports the JBoss DNA
+ JBoss DNA now provides a RESTful interface to its JCR implementation that allows HTTP-based
+ access and updating of content. Although the initial version of this REST server only supports the JBoss DNA
JCR implementation, it has been designed to make integration with other JCR implementors easy. This
chapter describes how to configure and deploy the REST server.
</para>
@@ -240,7 +240,7 @@
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
- <display-name>JBoss DNA JCR RESTful Interface</display-name>
+ <display-name>JBoss DNA JCR RESTful Interface</display-name>
]]></programlisting>
This first section is largely boilerplate and should look familiar to anyone who has deployed a servlet-based
application before. The display-name can be customized, of course.
@@ -248,15 +248,15 @@
<para>
The next stanza configures the <link linkend="jcr_rest_spi">repository provider</link>.
<programlisting role="xml"><![CDATA[
- <!--
- This parameter provides the fully-qualified name of a class that implements
- the o.j.d.web.jcr.rest.spi.RepositoryProvider interface. It is required
- by the DnaJcrDeployer that controls the lifecycle for the DNA REST server.
- -->
- <context-param>
- <param-name>org.jboss.dna.web.jcr.rest.REPOSITORY_PROVIDER</param-name>
- <param-value>org.jboss.dna.web.jcr.rest.spi.DnaJcrRepositoryProvider</param-value>
- </context-param>
+ <!--
+ This parameter provides the fully-qualified name of a class that implements
+ the o.j.d.web.jcr.rest.spi.RepositoryProvider interface. It is required
+ by the DnaJcrDeployer that controls the lifecycle for the DNA REST server.
+ -->
+ <context-param>
+ <param-name>org.jboss.dna.web.jcr.rest.REPOSITORY_PROVIDER</param-name>
+ <param-value>org.jboss.dna.web.jcr.rest.spi.DnaJcrRepositoryProvider</param-value>
+ </context-param>
]]></programlisting>
As noted above, this parameter informs the &DnaJcrDeployer; of the specific repository provider in use.
Unless you are using the JBoss DNA REST server to connect to a different JCR implementation, this should
@@ -266,16 +266,16 @@
<para>
Next we configure the DNA &JcrEngine; itself.
<programlisting role="xml"><![CDATA[
- <!--
- This parameter, specific to the DnaJcrRepositoryProvider implementation, specifies
- the name of the configuration file to initialize the repository or repositories.
- This configuration file must be on the classpath and is given as a classpath-relative
- directory.
- -->
- <context-param>
- <param-name>org.jboss.dna.web.jcr.rest.CONFIG_FILE</param-name>
- <param-value>/configRepository.xml</param-value>
- </context-param>
+ <!--
+ This parameter, specific to the DnaJcrRepositoryProvider implementation, specifies
+ the name of the configuration file to initialize the repository or repositories.
+ This configuration file must be on the classpath and is given as a classpath-relative
+ directory.
+ -->
+ <context-param>
+ <param-name>org.jboss.dna.web.jcr.rest.CONFIG_FILE</param-name>
+ <param-value>/configRepository.xml</param-value>
+ </context-param>
]]></programlisting>
If you are not familiar with the file format for a &JcrEngine; configuration file, you can build one
programatically with the &JcrConfiguration; class and call <code>save(...)</code> instead of <code>build()</code>
@@ -285,41 +285,40 @@
<para>
This is followed by a bit of RESTEasy and JAX-RS boilerplate.
<programlisting role="xml"><![CDATA[
- <!--
- This parameter defines the JAX-RS application class, which is really just a metadata class
- that lets the JAX-RS engine (RESTEasy in this case) know which classes implement pieces
- of the JAX-RS specification like exception handling and resource serving.
+ <!--
+ This parameter defines the JAX-RS application class, which is really just a metadata class
+ that lets the JAX-RS engine (RESTEasy in this case) know which classes implement pieces
+ of the JAX-RS specification like exception handling and resource serving.
- This should not be modified.
- -->
- <context-param>
- <param-name>javax.ws.rs.Application</param-name>
- <param-value>org.jboss.dna.web.jcr.rest.JcrApplication</param-value>
- </context-param>
+ This should not be modified.
+ -->
+ <context-param>
+ <param-name>javax.ws.rs.Application</param-name>
+ <param-value>org.jboss.dna.web.jcr.rest.JcrApplication</param-value>
+ </context-param>
- <!-- Required parameter for RESTEasy - should not be modified -->
- <listener>
- <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
- </listener>
+ <!-- Required parameter for RESTEasy - should not be modified -->
+ <listener>
+ <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+ </listener>
- <!-- Required parameter for JBoss DNA REST - should not be modified -->
- <listener>
- <listener-class>org.jboss.dna.web.jcr.rest.DnaJcrDeployer</listener-class>
- </listener>
+ <!-- Required parameter for JBoss DNA REST - should not be modified -->
+ <listener>
+ <listener-class>org.jboss.dna.web.jcr.rest.DnaJcrDeployer</listener-class>
+ </listener>
- <!-- Required parameter for RESTEasy - should not be modified -->
- <servlet>
- <servlet-name>Resteasy</servlet-name>
- <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
- </servlet>
+ <!-- Required parameter for RESTEasy - should not be modified -->
+ <servlet>
+ <servlet-name>Resteasy</servlet-name>
+ <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+ </servlet>
- <!-- Required parameter for JBoss DNA REST - should not be modified -->
- <servlet-mapping>
- <servlet-name>Resteasy</servlet-name>
- <url-pattern>/*</url-pattern>
- </servlet-mapping>
+ <!-- Required parameter for JBoss DNA REST - should not be modified -->
+ <servlet-mapping>
+ <servlet-name>Resteasy</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
-
]]></programlisting>
In general, this part of the web configuration file should not be modified.
</para>
@@ -327,42 +326,42 @@
<para>
Finally, security must be configured for the REST server.
<programlisting role="xml"><![CDATA[
- <!--
- The JBoss DNA REST implementation leverages the HTTP credentials to for authentication and authorization
- within the JCR repository. It makes no sense to try to log into the JCR repository without credentials,
- so this constraint helps lock down the repository.
+ <!--
+ The JBoss DNA REST implementation leverages the HTTP credentials to for authentication and authorization
+ within the JCR repository. It makes no sense to try to log into the JCR repository without credentials,
+ so this constraint helps lock down the repository.
- This should generally not be modified.
- -->
- <security-constraint>
- <display-name>DNA REST</display-name>
- <web-resource-collection>
- <web-resource-name>RestEasy</web-resource-name>
- <url-pattern>/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
+ This should generally not be modified.
+ -->
+ <security-constraint>
+ <display-name>DNA REST</display-name>
+ <web-resource-collection>
+ <web-resource-name>RestEasy</web-resource-name>
+ <url-pattern>/*</url-pattern>
+ </web-resource-collection>
+ <auth-constraint>
<!--
- A user must be assigned this role to connect to any JCR repository, in addition to needing the READONLY
- or READWRITE roles to actually read or modify the data. This is not used internally, so another
- role could be substituted here.
- -->
- <role-name>connect</role-name>
- </auth-constraint>
- </security-constraint>
+ A user must be assigned this role to connect to any JCR repository, in addition to needing the READONLY
+ or READWRITE roles to actually read or modify the data. This is not used internally, so another
+ role could be substituted here.
+ -->
+ <role-name>connect</role-name>
+ </auth-constraint>
+ </security-constraint>
- <!--
- Any auth-method will work for JBoss DNA. BASIC is used this example for simplicity.
- -->
- <login-config>
- <auth-method>BASIC</auth-method>
- </login-config>
+ <!--
+ Any auth-method will work for JBoss DNA. BASIC is used this example for simplicity.
+ -->
+ <login-config>
+ <auth-method>BASIC</auth-method>
+ </login-config>
- <!--
- This must match the role-name in the auth-constraint above.
- -->
- <security-role>
- <role-name>connect</role-name>
- </security-role>
+ <!--
+ This must match the role-name in the auth-constraint above.
+ -->
+ <security-role>
+ <role-name>connect</role-name>
+ </security-role>
</web-app>
]]></programlisting>
@@ -384,8 +383,9 @@
If you are using Maven to build your projects, the WAR can be built from a POM. Here is a portion of the
POM used to build the JBoss DNA REST Server integration subproject.
<programlisting role='xml'> <![CDATA[
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>dna</artifactId>
@@ -502,7 +502,6 @@
InputStream configFileInputStream = getClass().getResourceAsStream(configFile);
jcrEngine = new JcrConfiguration().loadFrom(configFileInputStream).build();
jcrEngine.start();
-
}
]]></programlisting>
As you can see, the name of configuration file for the &JcrEngine; is read from the servlet context and used
@@ -533,7 +532,6 @@
SecurityContext context = new ServletSecurityContext(request);
Credentials credentials = new SecurityContextCredentials(context);
return repository.login(credentials, workspaceName);
-
}
]]></programlisting>
The <code>getSession(...)</code> method is used by most of the REST server methods to access the JCR
Modified: trunk/docs/reference/src/main/docbook/en-US/master.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-09 20:08:03 UTC (rev 1019)
+++ trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-09 20:12:01 UTC (rev 1020)
@@ -93,10 +93,12 @@
The JBoss DNA project provides an implementation of the <ulink url="&JSR170;">JCR API</ulink>, which is
built on top of the <link linkend="core-part">core libraries</link> discussed earlier. This implementation
as well as a number of JCR-related components are described in this part of the document.
+ But before talking about how to use the JCR API with a JBoss DNA repository, first we need to
+ show how to set up a JBoss DNA engine.
</para>
</partintro>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/configuration.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/jcr.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/configuration.xml"/>
<!-- xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/deploying_dna_jcr.xml"/ -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/rest_service.xml"/>
</part>
16 years, 6 months
DNA SVN: r1019 - trunk/docs/reference/src/main/docbook/en-US.
by dna-commits@lists.jboss.org
Author: spagop
Date: 2009-06-09 16:08:03 -0400 (Tue, 09 Jun 2009)
New Revision: 1019
Modified:
trunk/docs/reference/src/main/docbook/en-US/custom.dtd
Log:
set up a new Entity for JavaEE API
Modified: trunk/docs/reference/src/main/docbook/en-US/custom.dtd
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/custom.dtd 2009-06-09 19:46:45 UTC (rev 1018)
+++ trunk/docs/reference/src/main/docbook/en-US/custom.dtd 2009-06-09 20:08:03 UTC (rev 1019)
@@ -24,6 +24,7 @@
<!ENTITY Git "http://git-scm.com/">
<!ENTITY Java "http://java.sun.com/j2se/1.5.0/docs/api/">
+<!ENTITY JavaEE "http://java.sun.com/javaee/5/docs/api/">
<!ENTITY GettingStarted "<ulink url='&DocHome;docs/&versionNumber;/manuals/gettingstarted/html/index.html'>Getting Started</ulink>">
<!ENTITY ReferenceGuide "<ulink url='&DocHome;docs/&versionNumber;/manuals/reference/html/index.html'>Getting Started</ulink>">
@@ -49,7 +50,7 @@
<!ENTITY TimeUnit "<ulink url='&Java;java/util/concurrent/TimeUnit.html'><interface>TimeUnit</interface></ulink>">
<!ENTITY UUID "<ulink url='&Java;java/util/UUID.html'><classname>UUID</classname></ulink>">
<!ENTITY DataSource "<ulink url='&Java;javax/sql/DataSource.html'><classname>DataSource</classname></ulink>">
-<!ENTITY HttpServletRequest "<ulink url='&Java;javax/servlet/http/HttpServletRequest.html'><classname>HttpServletRequest</classname></ulink>">
+<!ENTITY HttpServletRequest "<ulink url='&JavaEE;javax/servlet/http/HttpServletRequest.html'><classname>HttpServletRequest</classname></ulink>">
<!ENTITY Serializable "<ulink url='&Java;java/io/Serializable.html'><interface>Serializable</interface></ulink>">
<!ENTITY Iterator "<ulink url='&Java;java/util/Iterator.html'><interface>Iterator</interface></ulink>">
<!ENTITY Iteratable "<ulink url='&Java;java/util/Iteratable.html'><interface>Iteratable</interface></ulink>">
16 years, 6 months
DNA SVN: r1018 - in trunk/docs/reference/src/main/docbook/en-US: content/jcr and 1 other directory.
by dna-commits@lists.jboss.org
Author: rhauch
Date: 2009-06-09 15:46:45 -0400 (Tue, 09 Jun 2009)
New Revision: 1018
Added:
trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
Modified:
trunk/docs/reference/src/main/docbook/en-US/master.xml
Log:
Moved the chapter on configuring the JCR engine into the part of the Reference Guide that talks about JCR.
Added: trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml (rev 0)
+++ trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml 2009-06-09 19:46:45 UTC (rev 1018)
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ JBoss DNA (http://www.jboss.org/dna)
+ ~
+ ~ See the COPYRIGHT.txt file distributed with this work for information
+ ~ regarding copyright ownership. Some portions may be licensed
+ ~ to Red Hat, Inc. under one or more contributor license agreements.
+ ~ See the AUTHORS.txt file in the distribution for a full listing of
+ ~ individual contributors.
+ ~
+ ~ JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA
+ ~ is licensed to you under the terms of the GNU Lesser General Public License as
+ ~ published by the Free Software Foundation; either version 2.1 of
+ ~ the License, or (at your option) any later version.
+ ~
+ ~ JBoss DNA 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
+ ~ for more details.
+ ~
+ ~ You should have received a copy of the GNU Lesser General Public License
+ ~ along with this distribution; if not, write to:
+ ~ Free Software Foundation, Inc.
+ ~ 51 Franklin Street, Fifth Floor
+ ~ Boston, MA 02110-1301 USA
+ -->
+<!DOCTYPE preface PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % CustomDTD SYSTEM "../../custom.dtd">
+%CustomDTD;
+]>
+<chapter id="configuration">
+ <title>Configuring and Using JBoss DNA</title>
+ <para>Using JBoss DNA within your application is actually quite straightforward. As you'll see in this chapter,
+ the first step is setting up JBoss DNA and starting the <code>JcrEngine</code>. After that, you obtain the
+ <code>javax.jcr.Repository</code> instance for a named repository and just use the standard JCR API throughout your
+ application.
+ </para>
+ <sect1 id="jcr_engine">
+ <title>JBoss DNA's JcrEngine</title>
+ <para>
+ JBoss DNA encapsulates everything necessary to run one or more JCR repositories into a single &JcrEngine; instance.
+ This includes all underlying repository sources, the pools of connections to the sources, the sequencers,
+ the MIME type detector(s), and the &Repository; implementations.
+ </para>
+ <para>
+ Obtaining a &JcrEngine; instance is very easy - assuming that you have a valid &JcrConfiguration; instance. We'll see
+ how to get one of those in a little bit, but if you have one then all you have to do is build and start the engine:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+JcrEngine engine = config.build();
+engine.start();
+ ]]></programlisting>
+ <para>
+ Obtaining a JCR &Repository; instance is a matter of simply asking the engine for it by the name defined in the configuration:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+javax.jcr.Repository repository = engine.getRepository("Name of repository");
+ ]]></programlisting>
+ <para>
+ At this point, your application can proceed by working with the JCR API.
+ </para>
+ <para>
+ And, once you're finished with the &JcrEngine;, you should shut it down:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+engine.shutdown();
+engine.awaitTermination(3,TimeUnit.SECONDS); // optional
+ ]]></programlisting>
+ <para>
+ When the <code>shutdown()</code> method is called, the &Repository; instances managed by the engine are marked as being shut down,
+ and they will not be able to create new &Session;s. However, any existing &Session;s or ongoing operations (e.g., event notifications)
+ present at the time of the <code>shutdown()</code> call will be allowed to finish.
+ In essence, <code>shutdown()</code> is a <emphasis>graceful</emphasis> request, and since it may take some time to complete,
+ you can wait until the shutdown has completed by simply calling <code>awaitTermination(...)</code> as shown above.
+ This method will block until the engine has indeed shutdown or until the supplied time duration has passed (whichever comes first).
+ And, yes, you can call the <code>awaitTermination(...)</code> method repeatedly if needed.
+ </para>
+ </sect1>
+ <sect1 id="jcr_configuration">
+ <title>JcrConfiguration</title>
+ <para>
+ The previous section assumed the existence of a &JcrConfiguration;. It's not really that creating an instance is all that difficult.
+ In fact, there's only one no-argument constructor, so actually creating the instance is a piece of cake. What can be a little more challenging,
+ though, is setting up the &JcrConfiguration; instance, which must define the following components:
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="strong"><code>Repository sources</code></emphasis> are the POJO objects that each describe a particular
+ location where content is stored. Each repository source object is an instance of a JBoss DNA connector, and is configured
+ with the properties that particular source. JBoss DNA's &RepositorySource; classes are analogous to JDBC's &DataSource; classes -
+ they are implemented by specific connectors (aka, "drivers") for specific kinds of repository sources (aka, "databases").
+ Similarly, a &RepositorySource; instance is analogous to a &DataSource; instance, with bean properties for each configurable
+ parameter. Therefore, each repository source definition must supply the name of the &RepositorySource; class, any
+ bean properties, and, optionally, the classpath that should be used to load the class. </para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong"><code>Repositories</code></emphasis> define the JCR repositories that are available. Each
+ repository has a unique name that is used to obtain the &Repository; instance from the &JcrEngine;'s <code>getRepository(String)</code>
+ method, but each repository definition also can include the predefined namespaces (other than those automatically defined by
+ JBoss DNA), various options, and the node types that are to be available in the repository without explicit registration
+ through the JCR API.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong"><code>Sequencers</code></emphasis> define the particular sequencers that are available for use.
+ Each sequencer definition provides the path expressions governing which nodes in the repository should be sequenced when those nodes change,
+ and where the resulting output generated by the sequencer should be placed. The definition also must state the name of
+ the sequencer class, any bean properties and, optionally, the classpath that should be used to load the class.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong"><code>MIME type detectors</code></emphasis> define the particular MIME type detector(s) that should
+ be made available. A MIME type detector does exactly what the name implies: it attempts to determine the MIME type given a
+ "filename" and contents. JBoss DNA automatically uses a detector that uses the file extension to identify the MIME type,
+ but also provides an implementation that uses an external library to identify the MIME type based upon the contents.
+ The definition must state the name of the detector class, any bean properties and, optionally, the classpath that should
+ be used to load the class.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ There really are three options:
+ <itemizedlist>
+ <listitem>
+ <para><emphasis role="strong"><code>Load from a file</code></emphasis> is conceptually the easiest and requires the least amount
+ of Java code, but it now requires a configuration file.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong"><code>Load from a configuration repository</code></emphasis> is not much more complicated than loading
+ from a file, but it does allow multiple &JcrEngine; instances (usually in different processes perhaps on different machines)
+ to easily access their (shared) configuration. And technically, loading the configuration from a file really just creates an
+ &InMemoryRepositorySource;, imports the configuration file into that source, and then proceeds with this approach.</para>
+ </listitem>
+ <listitem>
+ <para><emphasis role="strong"><code>Programmatic configuration</code></emphasis> is always possible, even if the configuration is loaded
+ from a file or repository. Using the &JcrConfiguration;'s API, you can define (or update or remove) all of the definitions that make
+ up a configuration.</para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ <para>
+ Each of these approaches has their obvious advantages, so the choice of which one to use is entirely up to you.
+ </para>
+ <sect2 id="loading_from_file">
+ <title>Loading from a configuration file</title>
+ <para>
+ Loading the JBoss DNA configuration from a file is actually very simple:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = new JcrConfiguration();
+configuration.loadFrom(file);
+ ]]></programlisting>
+ <para>
+ where the <code>file</code> parameter can actually be a &File; instance, a &URL; to the file, an &InputStream;
+ containing the contents of the file, or even a &String; containing the contents of the file.
+ </para>
+ <note>
+ <para>The <code>loadFrom(...)</code> method can be called any number of times, but each time it is called it completely wipes
+ out any current notion of the configuration and replaces it with the configuration found in the file.
+ </para>
+ </note>
+ <para>
+ There is an optional second parameter that defines the &Path; within the configuration file identifying the parent node of the various
+ configuration nodes. If not specified, it assumes "/". This makes it possible for the configuration content to be
+ located at a different location in the hierarchical structure. (This is not often required, but when it is required
+ this second parameter is very useful.)
+ </para>
+ <para>
+ Here is the configuration file that is used in the repository example, though it has been simplified a bit and most comments
+ have been removed for clarity):
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration xmlns="http://www.jboss.org/dna/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0">
+ <!--
+ Define the JCR repositories
+ -->
+ <dna:repositories>
+ <!--
+ Define a JCR repository that accesses the 'Cars' source directly.
+ This of course is optional, since we could access the same content through 'vehicles'.
+ -->
+ <dna:repository jcr:name="car repository" dna:source="Cars">
+ <options jcr:primaryType="dna:options"/>
+ <jaasLoginConfigName jcr:primaryType="dna:option" dna:value="dna-jcr"/>
+ </options>
+ </dna:repository>
+ </dna:repositories>
+ <!--
+ Define the sources for the content. These sources are directly accessible using the DNA-specific Graph API.
+ -->
+ <dna:sources jcr:primaryType="nt:unstructured">
+ <dna:source jcr:name="Cars"
+ dna:classname="org.jboss.dna.graph.connector.inmemory.InMemoryRepositorySource"
+ dna:retryLimit="3" dna:defaultWorkspaceName="workspace1"/>
+ <dna:source jcr:name="Aircraft"
+ dna:classname="org.jboss.dna.graph.connector.inmemory.InMemoryRepositorySource">
+ <!-- Define the name of the workspace used by default. Optional, but convenient. -->
+ <defaultWorkspaceName>workspace2</defaultWorkspaceName>
+ </dna:source>
+ </dna:sources>
+ <!--
+ Define the sequencers. This is an optional section. For this example, we're not using any sequencers.
+ -->
+ <dna:sequencers>
+ <!--dna:sequencer jcr:name="Image Sequencer">
+ <dna:classname>org.jboss.dna.sequencer.image.ImageMetadataSequencer</dna:classname>
+ <dna:description>Image metadata sequencer</dna:description>
+ <dna:pathExpression>/foo/source => /foo/target</dna:pathExpression>
+ <dna:pathExpression>/bar/source => /bar/target</dna:pathExpression>
+ </dna:sequencer-->
+ </dna:sequencers>
+ <dna:mimeTypeDetectors>
+ <dna:mimeTypeDetector jcr:name="Detector"
+ dna:description="Standard extension-based MIME type detector"/>
+ </dna:mimeTypeDetectors>
+</configuration>
+ ]]></programlisting>
+ </sect2>
+ <sect2 id="loading_from_repository">
+ <title>Loading from a configuration repository</title>
+ <para>
+ Loading the JBoss DNA configuration from an existing repository is also pretty straightforward. Simply create and configure the
+ &RepositorySource; instance to point to the desired repository, and then call the <code>loadFrom(&RepositorySource; source)</code>
+ method:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+RepositorySource configSource = ...
+JcrConfiguration config = new JcrConfiguration();
+configuration.loadFrom(configSource);
+ ]]></programlisting>
+ <para>
+ This really is a more advanced way to define your configuration, so we won't go into how you configure a &RepositorySource;.
+ For more information, consult the &ReferenceGuide;.
+ </para>
+ <note>
+ <para>The <code>loadFrom(...)</code> method can be called any number of times, but each time it is called it completely wipes
+ out any current notion of the configuration and replaces it with the configuration found in the file.
+ </para>
+ </note>
+ <para>
+ There is an optional second parameter that defines the name of the workspace in the supplied source where the configuration content
+ can be found. It is not needed if the workspace is the source's default workspace.
+ There is an optional third parameter that defines the &Path; within the configuration repository identifying the parent node of the various
+ configuration nodes. If not specified, it assumes "/". This makes it possible for the configuration content to be
+ located at a different location in the hierarchical structure. (This is not often required, but when it is required
+ this second parameter is very useful.)
+ </para>
+ </sect2>
+ <sect2 id="programmatic_configuration">
+ <title>Programmatic configuration</title>
+ <para>
+ Defining the configuration programmatically is not terribly complicated, and it for obvious reasons results in more verbose Java code.
+ But this approach is very useful and often the easiest approach when the configuration must change or is a reflection of other
+ dynamic information.
+ </para>
+ <para>
+ The &JcrConfiguration; class was designed to have an easy-to-use API that makes it easy to configure each of the different kinds of
+ components, especially when using an IDE with code completion. Here are several examples:
+ </para>
+ <sect3 id="programmatically_configuring_sources">
+ <title>Repository sources</title>
+ <para>Each repository source definition must include the name of the &RepositorySource; class as well as each bean property
+ that should be set on the object:
+ </para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repositorySource("source A")
+ .usingClass(InMemoryRepositorySource.class)
+ .setDescription("The repository for our content")
+ .setProperty("defaultWorkspaceName", workspaceName);
+ ]]></programlisting>
+ <para>
+ This example defines an in-memory source with the name "source A", a description, and a single "defaultWorkspaceName" bean property.
+ Different &RepositorySource; implementations will the bean properties that are required and optional.
+ Of course, the class can be specified as Class reference or a string (followed by whether the class should be loaded from
+ the classpath or from a specific classpath).
+ </para>
+ <note>
+ <para>Each time <code>repositorySource(String)</code> is called, it will either load the existing definition with the supplied
+ name or will create a new definition if one does not already exist. To remove a definition, simply call <code>remove()</code>
+ on the result of <code>repositorySource(String)</code>.
+ The set of existing definitions can be accessed with the <code>repositorySources()</code> method.
+ </para>
+ </note>
+ </sect3>
+ <sect3 id="programmatically_configuring_repositories">
+ <title>Repositories</title>
+ <para>Each repository must be defined to use a named repository source, but all other aspects (e.g., namespaces, node types, options)
+ are optional.</para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.repository("repository A")
+ .addNodeTypes("myCustomNodeTypes.cnd")
+ .setSource("source 1")
+ .registerNamespace("acme","http://www.example.com/acme")
+ .setOption(JcrRepository.Option.JAAS_LOGIN_CONFIG_NAME, "dna-jcr");
+ ]]></programlisting>
+ <para>
+ This example defines a repository that uses the "source 1" repository source (which could be a federated source, an in-memory source,
+ a database store, or any other source). Additionally, this example adds the node types in the "myCustomNodeTypes.cnd" file as those
+ that will be made available when the repository is accessed. It also defines the "http://www.example.com/acme" namespace,
+ and finally sets the "JAAS_LOGIN_CONFIG_NAME" option to define the name of the JAAS login configuration that should be used by
+ the JBoss DNA repository.
+ </para>
+ <note>
+ <para>Each time <code>repository(String)</code> is called, it will either load the existing definition with the supplied
+ name or will create a new definition if one does not already exist. To remove a definition, simply call <code>remove()</code>
+ on the result of <code>repository(String)</code>.
+ The set of existing definitions can be accessed with the <code>repositories()</code> method.
+ </para>
+ </note>
+ </sect3>
+ <sect3 id="programmatically_configuring_sequencers">
+ <title>Sequencers</title>
+ <para>Each defined sequencer must specify the name of the &StreamSequencer; implementation class as well as the path expressions
+ defining which nodes should be sequenced and the output paths defining where the sequencer output should be placed (often as a function
+ of the input path expression).</para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.sequencer("Image Sequencer")
+ .usingClass("org.jboss.dna.sequencer.image.ImageMetadataSequencer")
+ .loadedFromClasspath()
+ .setDescription("Sequences image files to extract the characteristics of the image")
+ .sequencingFrom("//(*.(jpg|jpeg|gif|bmp|pcx|png|iff|ras|pbm|pgm|ppm|psd)[*])/jcr:content[@jcr:data]")
+ .andOutputtingTo("/images/$1");
+ ]]></programlisting>
+ <para>
+ This shows an example of a sequencer definition named "Image Sequencer" that uses the &ImageMetadataSequencer; class
+ (loaded from the classpath), that is to sequence the "jcr:data" property on any new or changed nodes that are named
+ "jcr:content" below a parent node with a name ending in ".jpg", ".jpeg", ".gif", ".bmp", ".pcx", ".iff", ".ras",
+ ".pbm", ".pgm", ".ppm" or ".psd". The output of the sequencing operation should be placed at the "/images/$1" node,
+ where the "$1" value is captured as the name of the parent node. (The capture groups work the same was as regular expressions;
+ see the &ReferenceGuide; for more details.)
+ Of course, the class can be specified as Class reference or a string (followed by whether the class should be loaded from
+ the classpath or from a specific classpath).
+ </para>
+ <note>
+ <para>Each time <code>sequencer(String)</code> is called, it will either load the existing definition with the supplied
+ name or will create a new definition if one does not already exist. To remove a definition, simply call <code>remove()</code>
+ on the result of <code>sequencer(String)</code>.
+ The set of existing definitions can be accessed with the <code>sequencers()</code> method.
+ </para>
+ </note>
+ </sect3>
+ <sect3 id="programmatically_configuring_mime_type_detectors">
+ <title>MIME type detectors</title>
+ <para>Each defined MIME type detector must specify the name of the &MimeTypeDetector; implementation class as well as any
+ other bean properties required by the implementation.</para>
+ <programlisting role="JAVA"><![CDATA[
+JcrConfiguration config = ...
+config.mimeTypeDetector("Extension Detector")
+ .usingClass(org.jboss.dna.graph.mimetype.ExtensionBasedMimeTypeDetector.class);
+ ]]></programlisting>
+ <para>
+ Of course, the class can be specified as Class reference or a string (followed by whether the class should be loaded from
+ the classpath or from a specific classpath).
+ </para>
+ <note>
+ <para>Each time <code>mimeTypeDetector(String)</code> is called, it will either load the existing definition with the supplied
+ name or will create a new definition if one does not already exist. To remove a definition, simply call <code>remove()</code>
+ on the result of <code>mimeTypeDetector(String)</code>.
+ The set of existing definitions can be accessed with the <code>mimeTypeDetectors()</code> method.
+ </para>
+ </note>
+ </sect3>
+ </sect2>
+ </sect1>
+ <sect1 id="using_dna_whats_next">
+ <title>What's next</title>
+ <para>
+ This chapter outline how you configure JBoss DNA, how you then access a <code>javax.jcr.Repository</code> instance,
+ and use the standard JCR API to interact with the repository. The
+ <link linkend="downloading_and_running">next chapter </link> walks you through downloading
+ and running the JBoss DNA examples.
+ </para>
+ </sect1>
+</chapter>
Property changes on: trunk/docs/reference/src/main/docbook/en-US/content/jcr/configuration.xml
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: trunk/docs/reference/src/main/docbook/en-US/master.xml
===================================================================
--- trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-09 19:46:34 UTC (rev 1017)
+++ trunk/docs/reference/src/main/docbook/en-US/master.xml 2009-06-09 19:46:45 UTC (rev 1018)
@@ -85,7 +85,6 @@
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/core/graph.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/core/connector.xml"/>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/core/sequencing.xml"/>
- <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/configuration.xml"/>
</part>
<part id="jcr-part">
<title>JBoss DNA JCR</title>
@@ -97,6 +96,7 @@
</para>
</partintro>
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/jcr.xml"/>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/configuration.xml"/>
<!-- xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/deploying_dna_jcr.xml"/ -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="content/jcr/rest_service.xml"/>
</part>
16 years, 6 months