Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2012-06-05 11:19:15 +0000
committerEike Stepper2012-06-05 11:19:15 +0000
commite5bc42789a5fa73d5f2c9a2dac4f0d0c177f9b63 (patch)
treefa7ac6f5500431fd69a4f27d61fe6ec64a39e335
parente2fa7de2e0249c3d4b6c603a1694197453e45c38 (diff)
downloadcdo-e5bc42789a5fa73d5f2c9a2dac4f0d0c177f9b63.tar.gz
cdo-e5bc42789a5fa73d5f2c9a2dac4f0d0c177f9b63.tar.xz
cdo-e5bc42789a5fa73d5f2c9a2dac4f0d0c177f9b63.zip
[381356] Support prefetching through CDO URI formats
https://bugs.eclipse.org/bugs/show_bug.cgi?id=381356
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/constant-values.html6
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/deprecated-list.html5
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/index-all.html28
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResource.html127
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResourceFactory.html6
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html2
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIData.html58
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIUtil.html32
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/class-use/InvalidURIException.html2
-rw-r--r--plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/package-summary.html2
-rw-r--r--plugins/org.eclipse.emf.cdo.net4j/plugin.xml120
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResource.java542
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResourceFactory.java73
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java3352
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIData.java78
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java492
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java112
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-frame.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-noframe.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/index-all.html5
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/Event.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/IEvent.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/INotifier.html16
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html51
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/class-use/OMMonitorProgress.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-frame.html2
-rw-r--r--plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-summary.html4
28 files changed, 2716 insertions, 2411 deletions
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/constant-values.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/constant-values.html
index b99e1b3c7c..5b6979086d 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/constant-values.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/constant-values.html
@@ -984,6 +984,12 @@ org.eclipse.*</FONT></TH>
<TD ALIGN="left"><CODE><A HREF="org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_BASE_URI">OPTION_SAVE_BASE_URI</A></CODE></TD>
<TD ALIGN="right"><CODE>"OPTION_SAVE_BASE_URI"</CODE></TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.eclipse.emf.cdo.eresource.CDOResource.PREFETCH_PARAMETER"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public&nbsp;static&nbsp;final&nbsp;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/eclipse/emf/cdo/eresource/CDOResource.html#PREFETCH_PARAMETER">PREFETCH_PARAMETER</A></CODE></TD>
+<TD ALIGN="right"><CODE>"prefetch"</CODE></TD>
+</TR>
</FONT></TD>
</TR>
</TABLE>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/deprecated-list.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/deprecated-list.html
index a932e1bf48..4aa3986938 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/deprecated-list.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/deprecated-list.html
@@ -294,6 +294,11 @@ function windowTitle()
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I>Use <A HREF="org/eclipse/emf/cdo/view/CDOView.Options.html#setStaleReferencePolicy(org.eclipse.emf.cdo.view.CDOStaleReferencePolicy)"><CODE>CDOView.Options.setStaleReferencePolicy(CDOStaleReferencePolicy)</CODE></A></I>&nbsp;</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="org/eclipse/emf/cdo/util/CDOURIUtil.html#validateURI(org.eclipse.emf.common.util.URI)">org.eclipse.emf.cdo.util.CDOURIUtil.validateURI(URI)</A>
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<I></I>&nbsp;&nbsp;</TD>
+</TR>
</TABLE>
&nbsp;
<P>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/index-all.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/index-all.html
index 8b1ded9602..f0a8b83475 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/index-all.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/index-all.html
@@ -1422,7 +1422,7 @@ Variable in class org.eclipse.emf.cdo.eresource.provider.<A HREF="./org/eclipse/
<A HREF="./org/eclipse/emf/cdo/transaction/CDOTransaction.html#removeTransactionHandler(org.eclipse.emf.cdo.transaction.CDOTransactionHandlerBase)"><CODE>CDOTransaction.removeTransactionHandler()</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/transaction/CDOTransactionStartedEvent.html" title="interface in org.eclipse.emf.cdo.transaction"><B>CDOTransactionStartedEvent</B></A> - Interface in <A HREF="./org/eclipse/emf/cdo/transaction/package-summary.html">org.eclipse.emf.cdo.transaction</A><DD>A <A HREF="./org/eclipse/emf/cdo/view/CDOViewEvent.html" title="interface in org.eclipse.emf.cdo.view"><CODE>view event</CODE></A> fired from a <A HREF="./org/eclipse/emf/cdo/transaction/CDOTransaction.html" title="interface in org.eclipse.emf.cdo.transaction"><CODE>transaction</CODE></A> when it first becomes
<A HREF="./org/eclipse/emf/cdo/transaction/CDOTransaction.html#isDirty()"><CODE>dirty</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/common/model/CDOType.html" title="interface in org.eclipse.emf.cdo.common.model"><B>CDOType</B></A> - Interface in <A HREF="./org/eclipse/emf/cdo/common/model/package-summary.html">org.eclipse.emf.cdo.common.model</A><DD>Provides access to all CDO-supported data types.<DT><A HREF="./org/eclipse/emf/cdo/common/revision/delta/CDOUnsetFeatureDelta.html" title="interface in org.eclipse.emf.cdo.common.revision.delta"><B>CDOUnsetFeatureDelta</B></A> - Interface in <A HREF="./org/eclipse/emf/cdo/common/revision/delta/package-summary.html">org.eclipse.emf.cdo.common.revision.delta</A><DD>A <A HREF="./org/eclipse/emf/cdo/common/revision/delta/CDOFeatureDelta.html" title="interface in org.eclipse.emf.cdo.common.revision.delta"><CODE>feature delta</CODE></A> that represents the <em>unsetting</em> of the value of a
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/EStructuralFeature.html?is-external=true" title="class or interface in org.eclipse.emf.ecore"><CODE>feature</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/util/CDOUpdatable.html" title="interface in org.eclipse.emf.cdo.util"><B>CDOUpdatable</B></A> - Interface in <A HREF="./org/eclipse/emf/cdo/util/package-summary.html">org.eclipse.emf.cdo.util</A><DD>Represents facilities that can receive
- <A HREF="./org/eclipse/emf/cdo/common/CDOCommonSession.Options.html#setPassiveUpdateEnabled(boolean)"><CODE>passive updates</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><B>CDOURIData</B></A> - Class in <A HREF="./org/eclipse/emf/cdo/util/package-summary.html">org.eclipse.emf.cdo.util</A><DD>Represents the CDO-specific URI data needed to access a resource in a repository.<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html#CDOURIData()"><B>CDOURIData()</B></A> -
+ <A HREF="./org/eclipse/emf/cdo/common/CDOCommonSession.Options.html#setPassiveUpdateEnabled(boolean)"><CODE>passive updates</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><B>CDOURIData</B></A> - Class in <A HREF="./org/eclipse/emf/cdo/util/package-summary.html">org.eclipse.emf.cdo.util</A><DD>Represents a CDO-specific <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util"><CODE>URI</CODE></A> in connection-aware format.<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html#CDOURIData()"><B>CDOURIData()</B></A> -
Constructor for class org.eclipse.emf.cdo.util.<A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util">CDOURIData</A>
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html#CDOURIData(java.lang.String)"><B>CDOURIData(String)</B></A> -
@@ -4451,6 +4451,9 @@ Method in interface org.eclipse.emf.cdo.session.<A HREF="./org/eclipse/emf/cdo/s
<DT><A HREF="./org/eclipse/emf/cdo/session/CDOSessionConfiguration.html#getExceptionHandler()"><B>getExceptionHandler()</B></A> -
Method in interface org.eclipse.emf.cdo.session.<A HREF="./org/eclipse/emf/cdo/session/CDOSessionConfiguration.html" title="interface in org.eclipse.emf.cdo.session">CDOSessionConfiguration</A>
<DD>&nbsp;
+<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html#getExtraParameters()"><B>getExtraParameters()</B></A> -
+Method in class org.eclipse.emf.cdo.util.<A HREF="./org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util">CDOURIData</A>
+<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/server/db/mapping/ITypeMapping.Descriptor.html#getFactoryType()"><B>getFactoryType()</B></A> -
Method in interface org.eclipse.emf.cdo.server.db.mapping.<A HREF="./org/eclipse/emf/cdo/server/db/mapping/ITypeMapping.Descriptor.html" title="interface in org.eclipse.emf.cdo.server.db.mapping">ITypeMapping.Descriptor</A>
<DD>The factoryType of the factory which can create the type mapping
@@ -5835,7 +5838,7 @@ Static method in class org.eclipse.emf.cdo.util.<A HREF="./org/eclipse/emf/cdo/u
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getResourceSet()"><B>getResourceSet()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Returns the value of the '<em><b>Resource Set</b></em>' attribute. <!
+<DD>Returns the value of the '<em><b>Resource Set</b></em>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/EresourcePackage.html#getResourceSet()"><B>getResourceSet()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/EresourcePackage.html" title="interface in org.eclipse.emf.cdo.eresource">EresourcePackage</A>
<DD>Returns the meta object for data type '<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/ResourceSet.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE><em>Resource Set</em></CODE></A>'
@@ -6378,7 +6381,7 @@ Method in interface org.eclipse.emf.cdo.common.util.<A HREF="./org/eclipse/emf/c
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getTimeStamp()"><B>getTimeStamp()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Returns the value of the '<em><b>Time Stamp</b></em>' attribute. <!
+<DD>Returns the value of the '<em><b>Time Stamp</b></em>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#getTimeStamp()"><B>getTimeStamp()</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -6545,7 +6548,7 @@ Method in class org.eclipse.emf.cdo.common.model.<A HREF="./org/eclipse/emf/cdo/
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><B>getURI()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Returns the value of the '<em><b>URI</b></em>' attribute. <!
+<DD>Returns the value of the '<em><b>URI</b></em>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResourceNode.html#getURI()"><B>getURI()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResourceNode.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResourceNode</A>
<DD>&nbsp;
@@ -7360,7 +7363,7 @@ Method in interface org.eclipse.emf.cdo.common.lock.<A HREF="./org/eclipse/emf/c
master server.
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#isModified()"><B>isModified()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Returns the value of the '<em><b>Modified</b></em>' attribute. <!
+<DD>Returns the value of the '<em><b>Modified</b></em>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#isModified()"><B>isModified()</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -7571,7 +7574,7 @@ Constructor for class org.eclipse.emf.cdo.server.<A HREF="./org/eclipse/emf/cdo/
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/server/IStoreFactory.html" title="interface in org.eclipse.emf.cdo.server"><B>IStoreFactory</B></A> - Interface in <A HREF="./org/eclipse/emf/cdo/server/package-summary.html">org.eclipse.emf.cdo.server</A><DD>Creates <A HREF="./org/eclipse/emf/cdo/server/IStore.html" title="interface in org.eclipse.emf.cdo.server"><CODE>stores</CODE></A>.<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><B>isTrackingModification()</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Returns the value of the '<em><b>Tracking Modification</b></em>' attribute. <!
+<DD>Returns the value of the '<em><b>Tracking Modification</b></em>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#isTrackingModification()"><B>isTrackingModification()</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -8360,6 +8363,9 @@ Static method in class org.eclipse.emf.cdo.common.model.<A HREF="./org/eclipse/e
<DT><A HREF="./org/eclipse/emf/cdo/view/CDOFeatureAnalyzer.html#postTraverseFeature(org.eclipse.emf.cdo.CDOObject, org.eclipse.emf.ecore.EStructuralFeature, int, java.lang.Object)"><B>postTraverseFeature(CDOObject, EStructuralFeature, int, Object)</B></A> -
Method in interface org.eclipse.emf.cdo.view.<A HREF="./org/eclipse/emf/cdo/view/CDOFeatureAnalyzer.html" title="interface in org.eclipse.emf.cdo.view">CDOFeatureAnalyzer</A>
<DD>&nbsp;
+<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#PREFETCH_PARAMETER"><B>PREFETCH_PARAMETER</B></A> -
+Static variable in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
+<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/net4j/CDONet4jUtil.html#prepareContainer(org.eclipse.net4j.util.container.IManagedContainer)"><B>prepareContainer(IManagedContainer)</B></A> -
Static method in class org.eclipse.emf.cdo.net4j.<A HREF="./org/eclipse/emf/cdo/net4j/CDONet4jUtil.html" title="class in org.eclipse.emf.cdo.net4j">CDONet4jUtil</A>
<DD>&nbsp;
@@ -9715,7 +9721,7 @@ Method in class org.eclipse.emf.cdo.util.<A HREF="./org/eclipse/emf/cdo/util/CDO
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#setResourceSet(org.eclipse.emf.ecore.resource.ResourceSet)"><B>setResourceSet(ResourceSet)</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getResourceSet()"><CODE><em>Resource Set</em></CODE></A>'
- attribute. <!
+ attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#setResourceSet(org.eclipse.emf.ecore.resource.ResourceSet)"><B>setResourceSet(ResourceSet)</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -9811,7 +9817,7 @@ Method in class org.eclipse.emf.cdo.server.net4j.<A HREF="./org/eclipse/emf/cdo/
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#setTimeStamp(long)"><B>setTimeStamp(long)</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getTimeStamp()"><CODE><em>Time Stamp</em></CODE></A>'
- attribute. <!
+ attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#setTimeStamp(long)"><B>setTimeStamp(long)</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -9832,7 +9838,7 @@ Method in interface org.eclipse.emf.cdo.workspace.<A HREF="./org/eclipse/emf/cdo
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#setTrackingModification(boolean)"><B>setTrackingModification(boolean)</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute. <!
+<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#setTrackingModification(boolean)"><B>setTrackingModification(boolean)</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -9850,7 +9856,7 @@ Method in class org.eclipse.emf.cdo.ui.<A HREF="./org/eclipse/emf/cdo/ui/CDOEven
<DD>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#setURI(org.eclipse.emf.common.util.URI)"><B>setURI(URI)</B></A> -
Method in interface org.eclipse.emf.cdo.eresource.<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A>
-<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute. <!
+<DD>Sets the value of the '<A HREF="./org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute
<DT><A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#setURI(org.eclipse.emf.common.util.URI)"><B>setURI(URI)</B></A> -
Method in class org.eclipse.emf.cdo.eresource.impl.<A HREF="./org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl">CDOResourceImpl</A>
<DD>&nbsp;
@@ -10380,7 +10386,7 @@ Method in interface org.eclipse.emf.cdo.server.<A HREF="./org/eclipse/emf/cdo/se
<DD>Validates the given timeStamp against the repository time.
<DT><A HREF="./org/eclipse/emf/cdo/util/CDOURIUtil.html#validateURI(org.eclipse.emf.common.util.URI)"><B>validateURI(URI)</B></A> -
Static method in class org.eclipse.emf.cdo.util.<A HREF="./org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util">CDOURIUtil</A>
-<DD>&nbsp;
+<DD><B>Deprecated.</B>&nbsp;<I></I>&nbsp;
<DT><A HREF="./org/eclipse/emf/cdo/CDOState.html#valueOf(java.lang.String)"><B>valueOf(String)</B></A> -
Static method in enum org.eclipse.emf.cdo.<A HREF="./org/eclipse/emf/cdo/CDOState.html" title="enum in org.eclipse.emf.cdo">CDOState</A>
<DD>Returns the enum constant of this type with the specified name.
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResource.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResource.html
index f859f31aad..600d025b26 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResource.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResource.html
@@ -117,7 +117,8 @@ Interface CDOResource</H2>
<P>
-<!-- begin-user-doc --> A representation of the model object '<em><b>CDO Resource</b></em>'.
+<!-- begin-user-doc -->
+ A representation of the model object '<em><b>CDO Resource</b></em>'.
<P>
<P>
@@ -187,6 +188,14 @@ Interface CDOResource</H2>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static&nbsp;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#PREFETCH_PARAMETER">PREFETCH_PARAMETER</A></B></CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.eclipse.emf.cdo.eresource.CDOResourceNode"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
@@ -237,7 +246,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getResourceSet()">getResourceSet</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Resource Set</b></em>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Resource Set</b></em>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -245,7 +254,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getTimeStamp()">getTimeStamp</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Time Stamp</b></em>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Time Stamp</b></em>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -253,7 +262,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()">getURI</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>URI</b></em>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>URI</b></em>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -285,7 +294,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isModified()">isModified</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Modified</b></em>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Modified</b></em>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -293,7 +302,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()">isTrackingModification</A></B>()</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Tracking Modification</b></em>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the value of the '<em><b>Tracking Modification</b></em>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -310,7 +319,7 @@ Interface CDOResource</H2>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getResourceSet()"><CODE><em>Resource Set</em></CODE></A>'
- attribute. <!</TD>
+ attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -319,7 +328,7 @@ Interface CDOResource</H2>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getTimeStamp()"><CODE><em>Time Stamp</em></CODE></A>'
- attribute. <!</TD>
+ attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -327,7 +336,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#setTrackingModification(boolean)">setTrackingModification</A></B>(boolean&nbsp;value)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
@@ -335,7 +344,7 @@ Interface CDOResource</H2>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#setURI(org.eclipse.emf.common.util.URI)">setURI</A></B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;value)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute. <!</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.eclipse.emf.cdo.eresource.CDOResourceNode"><!-- --></A>
@@ -436,6 +445,20 @@ static final <A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang
<DD></DD>
</DL>
</DL>
+<HR>
+
+<A NAME="PREFETCH_PARAMETER"><!-- --></A><H3>
+PREFETCH_PARAMETER</H3>
+<PRE>
+static final <A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A> <B>PREFETCH_PARAMETER</B></PRE>
+<DL>
+<DL>
+<DT><B>Since:</B></DT>
+ <DD>4.1</DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.eclipse.emf.cdo.eresource.CDOResource.PREFETCH_PARAMETER">Constant Field Values</A><DT><B>Added</B></DT>
+ <DD></DD>
+</DL>
+</DL>
<!-- ============ METHOD DETAIL ========== -->
@@ -452,11 +475,8 @@ getResourceSet</H3>
<PRE>
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/ResourceSet.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">ResourceSet</A> <B>getResourceSet</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>Resource Set</b></em>' attribute. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Resource Set</em>' attribute isn't clear, there really should be more of a description
- here...
- </p>
+<DD>Returns the value of the '<em><b>Resource Set</b></em>' attribute.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -480,7 +500,9 @@ setResourceSet</H3>
void <B>setResourceSet</B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/ResourceSet.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">ResourceSet</A>&nbsp;value)</PRE>
<DL>
<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getResourceSet()"><CODE><em>Resource Set</em></CODE></A>'
- attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+ attribute.
+ <!-- begin-user-doc -->
+ <!-- end-user-doc -->
<P>
<DD><DL>
</DL>
@@ -498,10 +520,9 @@ getURI</H3>
<PRE>
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A> <B>getURI</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>URI</b></em>' attribute. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>URI</em>' attribute isn't clear, there really should be more of a description here...
- </p>
+<DD>Returns the value of the '<em><b>URI</b></em>' attribute.
+ <!-- begin-user-doc -->
+ The URI format is explained in <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIUtil</CODE></A> and <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIData</CODE></A>.
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -524,8 +545,10 @@ setURI</H3>
<PRE>
void <B>setURI</B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;value)</PRE>
<DL>
-<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute. <!--
- begin-user-doc --> <!-- end-user-doc -->
+<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE><em>URI</em></CODE></A>' attribute.
+ <!-- begin-user-doc -->
+ The URI format is explained in <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIUtil</CODE></A> and <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIData</CODE></A>.
+ <!-- end-user-doc -->
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true#setURI(org.eclipse.emf.common.util.URI)" title="class or interface in org.eclipse.emf.ecore.resource">setURI</A></CODE> in interface <CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource</A></CODE></DL>
@@ -544,11 +567,8 @@ getContents</H3>
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/EList.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">EList</A>&lt;<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/EObject.html?is-external=true" title="class or interface in org.eclipse.emf.ecore">EObject</A>&gt; <B>getContents</B>()</PRE>
<DL>
<DD>Returns the value of the '<em><b>Contents</b></em>' containment reference list. The list contents are of type
- <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/EObject.html?is-external=true" title="class or interface in org.eclipse.emf.ecore"><CODE>EObject</CODE></A>. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Contents</em>' containment reference list isn't clear, there really should be more of a
- description here...
- </p>
+ <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/EObject.html?is-external=true" title="class or interface in org.eclipse.emf.ecore"><CODE>EObject</CODE></A>.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -570,11 +590,8 @@ isModified</H3>
<PRE>
boolean <B>isModified</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>Modified</b></em>' attribute. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Modified</em>' attribute isn't clear, there really should be more of a description
- here...
- </p>
+<DD>Returns the value of the '<em><b>Modified</b></em>' attribute.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -598,7 +615,8 @@ setModified</H3>
void <B>setModified</B>(boolean&nbsp;value)</PRE>
<DL>
<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isModified()"><CODE><em>Modified</em></CODE></A>' attribute.
- <!-- begin-user-doc --> <!-- end-user-doc -->
+ <!-- begin-user-doc -->
+ <!-- end-user-doc -->
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true#setModified(boolean)" title="class or interface in org.eclipse.emf.ecore.resource">setModified</A></CODE> in interface <CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource</A></CODE></DL>
@@ -616,11 +634,8 @@ isLoaded</H3>
<PRE>
boolean <B>isLoaded</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>Loaded</b></em>' attribute. The default value is <code>"true"</code>. <!--
- begin-user-doc -->
- <p>
- If the meaning of the '<em>Loaded</em>' attribute isn't clear, there really should be more of a description here...
- </p>
+<DD>Returns the value of the '<em><b>Loaded</b></em>' attribute. The default value is <code>"true"</code>.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -642,11 +657,8 @@ isTrackingModification</H3>
<PRE>
boolean <B>isTrackingModification</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>Tracking Modification</b></em>' attribute. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Tracking Modification</em>' attribute isn't clear, there really should be more of a
- description here...
- </p>
+<DD>Returns the value of the '<em><b>Tracking Modification</b></em>' attribute.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -669,7 +681,9 @@ setTrackingModification</H3>
<PRE>
void <B>setTrackingModification</B>(boolean&nbsp;value)</PRE>
<DL>
-<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isTrackingModification()"><CODE><em>Tracking Modification</em></CODE></A>' attribute.
+ <!-- begin-user-doc -->
+ <!-- end-user-doc -->
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true#setTrackingModification(boolean)" title="class or interface in org.eclipse.emf.ecore.resource">setTrackingModification</A></CODE> in interface <CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource</A></CODE></DL>
@@ -688,11 +702,8 @@ getErrors</H3>
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/EList.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">EList</A>&lt;<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource.Diagnostic</A>&gt; <B>getErrors</B>()</PRE>
<DL>
<DD>Returns the value of the '<em><b>Errors</b></em>' attribute list. The list contents are of type
- <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE>Resource.Diagnostic</CODE></A>. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Errors</em>' attribute list isn't clear, there really should be more of a description
- here...
- </p>
+ <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE>Resource.Diagnostic</CODE></A>.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -716,11 +727,8 @@ getWarnings</H3>
<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/EList.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">EList</A>&lt;<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource.Diagnostic</A>&gt; <B>getWarnings</B>()</PRE>
<DL>
<DD>Returns the value of the '<em><b>Warnings</b></em>' attribute list. The list contents are of type
- <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE>Resource.Diagnostic</CODE></A>. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Warnings</em>' attribute list isn't clear, there really should be more of a description
- here...
- </p>
+ <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.Diagnostic.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE>Resource.Diagnostic</CODE></A>.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -743,11 +751,8 @@ getTimeStamp</H3>
<PRE>
long <B>getTimeStamp</B>()</PRE>
<DL>
-<DD>Returns the value of the '<em><b>Time Stamp</b></em>' attribute. <!-- begin-user-doc -->
- <p>
- If the meaning of the '<em>Time Stamp</em>' attribute isn't clear, there really should be more of a description
- here...
- </p>
+<DD>Returns the value of the '<em><b>Time Stamp</b></em>' attribute.
+ <!-- begin-user-doc -->
<!-- end-user-doc -->
<P>
<DD><DL>
@@ -771,7 +776,9 @@ setTimeStamp</H3>
void <B>setTimeStamp</B>(long&nbsp;value)</PRE>
<DL>
<DD>Sets the value of the '<A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getTimeStamp()"><CODE><em>Time Stamp</em></CODE></A>'
- attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
+ attribute.
+ <!-- begin-user-doc -->
+ <!-- end-user-doc -->
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true#setTimeStamp(long)" title="class or interface in org.eclipse.emf.ecore.resource">setTimeStamp</A></CODE> in interface <CODE><A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/Resource.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource">Resource</A></CODE></DL>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResourceFactory.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResourceFactory.html
index d81453c03b..1618c57566 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResourceFactory.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/CDOResourceFactory.html
@@ -117,6 +117,12 @@ Interface CDOResourceFactory</H2>
<P>
Creates <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource"><CODE>CDOResource</CODE></A> instances.
+ <p>
+ Note that the only important task of this factory is to instantiate a <A HREF="../../../../../org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html" title="class in org.eclipse.emf.cdo.eresource.impl"><CODE>CDOResourceImpl</CODE></A> and mark it
+ <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#isExisting()"><CODE>existing</CODE></A> or not. All further <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#getURI()"><CODE>URI</CODE></A> processing
+ is done later on in the registration process, especially in <A HREF="../../../../../org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html#basicSetResourceSet(org.eclipse.emf.ecore.resource.ResourceSet, org.eclipse.emf.common.notify.NotificationChain)"><CODE>CDOResourceImpl.basicSetResourceSet()</CODE></A>.
+ <p>
+ The recognized URI formats are explained in <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIUtil</CODE></A> and <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIData</CODE></A>.
<P>
<P>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html
index 13882839d0..c57d80724a 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.html
@@ -273,7 +273,7 @@ Class CDOResourceImpl</H2>
<TH ALIGN="left"><B>Fields inherited from interface org.eclipse.emf.cdo.eresource.<A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource">CDOResource</A></B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
-<TD><CODE><A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_BASE_URI">OPTION_SAVE_BASE_URI</A>, <A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_OVERRIDE_TRANSACTION">OPTION_SAVE_OVERRIDE_TRANSACTION</A>, <A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_PROGRESS_MONITOR">OPTION_SAVE_PROGRESS_MONITOR</A></CODE></TD>
+<TD><CODE><A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_BASE_URI">OPTION_SAVE_BASE_URI</A>, <A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_OVERRIDE_TRANSACTION">OPTION_SAVE_OVERRIDE_TRANSACTION</A>, <A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#OPTION_SAVE_PROGRESS_MONITOR">OPTION_SAVE_PROGRESS_MONITOR</A>, <A HREF="../../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html#PREFETCH_PARAMETER">PREFETCH_PARAMETER</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.eclipse.emf.cdo.eresource.CDOResourceNode"><!-- --></A>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIData.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIData.html
index 54071c2be7..435573e2f2 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIData.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIData.html
@@ -110,7 +110,42 @@ Class CDOURIData</H2>
<P>
-Represents the CDO-specific URI data needed to access a resource in a repository.
+Represents a CDO-specific <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util"><CODE>URI</CODE></A> in connection-aware format.
+ <p>
+ CDO URIs are in one of two different formats, either canonical or connection-aware. The connection-aware format is:
+
+ <blockquote><b>cdo.net4j.</b> <i>ConnectorType</i> <b>://</b> [<i>User</i> [<b>:</b> <i>Password</i>] <b>@</b>]
+ <i>ConnectorSpecificAuthority</i> <b>/</b> <i>RepositoryName</i> <b>/</b> <i>ResourcePath</i> [<b>?</b> <i>Param</i><b>=</b><i>Value</i>
+ (<b>&</b> <i>Param</i><b>=</b><i>Value</i>)*]</blockquote>
+
+ The non-terminals being:
+ <p>
+ <ul>
+ <li><i>ConnectorType</i>: one of <b>tcp</b> | <b>ssl</b> | <b>jvm</b> | <b>http</b>
+ <li><i>User/Password</i>: to be provided if the repository is configured with an
+ <A HREF="../../../../../../../org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/security/IUserManager.html?is-external=true" title="class or interface in org.eclipse.net4j.util.security"><CODE>IUserManager</CODE></A> and, hence, triggers authentication on the client. Note: the
+ password may be stored in resources in clear text!
+ <li><i>ConnectorSpecificAuthority</i>: examples are
+ <ul>
+ <li><i>Host</i> [<b>:</b> <i>Port</i>] (if <i>ConnectorType</i> is <b>tcp</b>)
+ <li><i>AcceptorName</i> (if <i>ConnectorType</i> is <b>jvm</b>)
+ </ul>
+ <li><i>RepositoryName</i>: the <A HREF="../../../../../org/eclipse/emf/cdo/common/CDOCommonRepository.html#getName()"><CODE>name</CODE></A> of the repository (not the <A HREF="../../../../../org/eclipse/emf/cdo/common/CDOCommonRepository.html#getUUID()"><CODE>UUID</CODE></A>!).
+ <li><i>ResourcePath</i>: the full path of the <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource"><CODE>resource</CODE></A> within the repository, segments separated by slashes, no leading slash.
+ <li><i>Param</i>: one of the following
+ <ul>
+ <li><b>branch</b>: the value must be a <A HREF="../../../../../org/eclipse/emf/cdo/common/branch/CDOBranch.html#getPathName()"><CODE>branch path</CODE></A>, the full path of the branch in the branch tree, segments separated by slashes, no leading slash, defaults to <b>MAIN</b>.
+ <li><b>time</b>: the value must be the time at which the resource is supposed to be valid, parseable by SimpleDateFormat. The special value <b>HEAD</b> indicates a floating view/transaction that always shows the latest state in the chosen branch, the default if no <i>Time</i> parameter is specified.
+ <li><b>transactional</b>: a boolean value. The value <b>true</b> forces a the resource to be opened in a transaction rather than in a read-only view. This can not be combined with a <i>Time</i> other than <b>HEAD</b>.
+ <li><b>prefetch</b>: a boolean value. The value <b>true</b> attempts to load all objects contained by the resource in a single server-round trip and cache the results.
+ </ul>
+ </ul>
+ <p>
+ Note: With the current design and implementation of connection-aware URI
+ (mainly CDONet4jViewProvider) it is still unclear when and how the allocated
+ "resources" (aka IConnector, CDOSession, CDOView, etc) are supposed to be freed!
+ <p>
+ For a description of the canonical URI format refer to <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIUtil</CODE></A>.
<P>
<P>
@@ -217,6 +252,14 @@ Represents the CDO-specific URI data needed to access a resource in a repository
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt;</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html#getExtraParameters()">getExtraParameters</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html#getPassWord()">getPassWord</A></B>()</CODE>
@@ -716,6 +759,19 @@ public void <B>setTransactional</B>(boolean&nbsp;transactional)</PRE>
</DL>
<HR>
+<A NAME="getExtraParameters()"><!-- --></A><H3>
+getExtraParameters</H3>
+<PRE>
+public <A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</A>&lt;<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>,<A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</A>&gt; <B>getExtraParameters</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Since:</B></DT>
+ <DD>4.1</DD>
+</DL>
+</DD>
+</DL>
+<HR>
+
<A NAME="toURI()"><!-- --></A><H3>
toURI</H3>
<PRE>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIUtil.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIUtil.html
index 33781a2b71..f53a73333d 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIUtil.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/CDOURIUtil.html
@@ -111,6 +111,31 @@ Class CDOURIUtil</H2>
<P>
Various static methods that may help with CDO-specific <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util"><CODE>URIs</CODE></A>.
+ <p>
+ CDO URIs are in one of two different formats, either canonical or connection-aware. The canonical format is:
+
+ <blockquote><b>cdo://</b> <i>RepositoryUUID</i> <b>/</b> <i>ResourcePath</i> [<b>?</b> <i>Param</i><b>=</b><i>Value</i>
+ (<b>&</b> <i>Param</i><b>=</b><i>Value</i>)*]</blockquote>
+
+ The non-terminals being:
+ <p>
+ <ul>
+ <li><i>RepositoryUUID</i>: the <A HREF="../../../../../org/eclipse/emf/cdo/common/CDOCommonRepository.html#getUUID()"><CODE>UUID</CODE></A> of the repository. By default it's generated when a repository is first started.
+ If the default format is not adequate the UUID value can be overridden in the repository setup with the <code>overrideUUID</code> property.
+ <li><i>ResourcePath</i>: the full path of the <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource"><CODE>resource</CODE></A> within the repository, segments separated by slashes, no leading slash.
+ <li><i>Param</i>: one of the following
+ <ul>
+ <li><b>prefetch</b>: a boolean value. The value <b>true</b> attempts to load all objects contained by the resource in a single server-round trip and cache the results.
+ </ul>
+ </ul>
+
+ URIs in the canonical form to resolve to <A HREF="../../../../../org/eclipse/emf/cdo/eresource/CDOResource.html" title="interface in org.eclipse.emf.cdo.eresource"><CODE>resources</CODE></A> properly require the <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/ecore/resource/ResourceSet.html?is-external=true" title="class or interface in org.eclipse.emf.ecore.resource"><CODE>resource set</CODE></A> to be
+ configured <i>externally</i> so that the connection to the correct repository can be established, for example:
+ <blockquote><code>session.openView(resourceSet);</code></blockquote>
+
+ Note that resources preserve their original URI in the scope of the managing <A HREF="../../../../../org/eclipse/emf/cdo/view/CDOView.html" title="interface in org.eclipse.emf.cdo.view"><CODE>view</CODE></A>, that is not necessarily in canonical format.
+ <p>
+ For a description of the connection-aware URI format refer to <A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util"><CODE>CDOURIData</CODE></A>.
<P>
<P>
@@ -260,7 +285,7 @@ Various static methods that may help with CDO-specific <A HREF="http://download.
<TD><CODE><B><A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html#validateURI(org.eclipse.emf.common.util.URI)">validateURI</A></B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;uri)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I></I>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
@@ -329,9 +354,12 @@ public static final <A HREF="http://download.oracle.com/javase/1.5.0/docs/api/ja
<A NAME="validateURI(org.eclipse.emf.common.util.URI)"><!-- --></A><H3>
validateURI</H3>
<PRE>
-public static void <B>validateURI</B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;uri)
+<FONT SIZE="-1"><A HREF="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</A>
+</FONT>public static void <B>validateURI</B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;uri)
throws <A HREF="../../../../../org/eclipse/emf/cdo/util/InvalidURIException.html" title="class in org.eclipse.emf.cdo.util">InvalidURIException</A></PRE>
<DL>
+<DD><B>Deprecated.</B>&nbsp;<I></I>
+<P>
<DD><DL>
<DT><B>Throws:</B>
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/class-use/InvalidURIException.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/class-use/InvalidURIException.html
index 66e11d9691..d308a9c9c7 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/class-use/InvalidURIException.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/class-use/InvalidURIException.html
@@ -132,7 +132,7 @@ Uses of <A HREF="../../../../../../org/eclipse/emf/cdo/util/InvalidURIException.
<TD><CODE><B>CDOURIUtil.</B><B><A HREF="../../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html#validateURI(org.eclipse.emf.common.util.URI)">validateURI</A></B>(<A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util">URI</A>&nbsp;uri)</CODE>
<BR>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<B>Deprecated.</B>&nbsp;<I></I>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
diff --git a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/package-summary.html b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/package-summary.html
index b994b7180c..c8c8ecd88d 100644
--- a/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/package-summary.html
+++ b/plugins/org.eclipse.emf.cdo.doc/javadoc/org/eclipse/emf/cdo/util/package-summary.html
@@ -157,7 +157,7 @@ Client utility classes, some common interfaces and exceptions.
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIData.html" title="class in org.eclipse.emf.cdo.util">CDOURIData</A></B></TD>
-<TD>Represents the CDO-specific URI data needed to access a resource in a repository.</TD>
+<TD>Represents a CDO-specific <A HREF="http://download.eclipse.org/modeling/emf/emf/javadoc/2.7.0/org/eclipse/emf/common/util/URI.html?is-external=true" title="class or interface in org.eclipse.emf.common.util"><CODE>URI</CODE></A> in connection-aware format.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../../org/eclipse/emf/cdo/util/CDOURIUtil.html" title="class in org.eclipse.emf.cdo.util">CDOURIUtil</A></B></TD>
diff --git a/plugins/org.eclipse.emf.cdo.net4j/plugin.xml b/plugins/org.eclipse.emf.cdo.net4j/plugin.xml
index 0a551239fd..93a98c2a97 100644
--- a/plugins/org.eclipse.emf.cdo.net4j/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.net4j/plugin.xml
@@ -1,57 +1,63 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<!--
- Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- All rights reserved. This program and the accompanying materials
- are made available under the terms of the Eclipse Public License v1.0
- which accompanies this distribution, and is available at
- http://www.eclipse.org/legal/epl-v10.html
-
- Contributors:
- Eike Stepper - initial API and implementation
--->
-
-<plugin>
-
- <extension
- point="org.eclipse.net4j.util.factories">
- <factory
- class="org.eclipse.emf.cdo.internal.net4j.protocol.CDOClientProtocolFactory"
- productGroup="org.eclipse.net4j.clientProtocols"
- type="cdo"/>
- <factory
- class="org.eclipse.emf.cdo.internal.net4j.Net4jSessionFactory"
- productGroup="org.eclipse.emf.cdo.sessions"
- type="cdo"/>
- </extension>
-
- <extension
- point="org.eclipse.net4j.util.elementProcessors">
- <elementProcessor
- class="org.eclipse.emf.cdo.internal.net4j.Net4jConnectorInjector">
- </elementProcessor>
- </extension>
-
- <extension
- point="org.eclipse.emf.ecore.protocol_parser">
- <parser
- class="org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl"
- protocolName="cdo.net4j.tcp"/>
- <parser
- class="org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl"
- protocolName="cdo.net4j.jvm"/>
- </extension>
-
- <extension
- point="org.eclipse.emf.cdo.viewProviders">
- <viewProvider
- class="org.eclipse.emf.cdo.net4j.CDONet4jViewProvider$TCP"
- priority="500"
- regex="cdo\.net4j\.tcp://.*"/>
- <viewProvider
- class="org.eclipse.emf.cdo.net4j.CDONet4jViewProvider$JVM"
- priority="500"
- regex="cdo\.net4j\.jvm://.*"/>
- </extension>
-
-</plugin>
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<!--
+ Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ All rights reserved. This program and the accompanying materials
+ are made available under the terms of the Eclipse Public License v1.0
+ which accompanies this distribution, and is available at
+ http://www.eclipse.org/legal/epl-v10.html
+
+ Contributors:
+ Eike Stepper - initial API and implementation
+-->
+
+<plugin>
+
+ <extension
+ point="org.eclipse.net4j.util.factories">
+ <factory
+ class="org.eclipse.emf.cdo.internal.net4j.protocol.CDOClientProtocolFactory"
+ productGroup="org.eclipse.net4j.clientProtocols"
+ type="cdo"/>
+ <factory
+ class="org.eclipse.emf.cdo.internal.net4j.Net4jSessionFactory"
+ productGroup="org.eclipse.emf.cdo.sessions"
+ type="cdo"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.net4j.util.elementProcessors">
+ <elementProcessor
+ class="org.eclipse.emf.cdo.internal.net4j.Net4jConnectorInjector"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.emf.ecore.protocol_parser">
+ <parser
+ class="org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl"
+ protocolName="cdo.net4j.tcp"/>
+ <parser
+ class="org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl"
+ protocolName="cdo.net4j.ssl"/>
+ <parser
+ class="org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl"
+ protocolName="cdo.net4j.jvm"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.emf.cdo.viewProviders">
+ <viewProvider
+ class="org.eclipse.emf.cdo.net4j.CDONet4jViewProvider$TCP"
+ priority="500"
+ regex="cdo\.net4j\.tcp://.*"/>
+ <viewProvider
+ class="org.eclipse.emf.cdo.net4j.CDONet4jViewProvider$SSL"
+ priority="500"
+ regex="cdo\.net4j\.ssl://.*"/>
+ <viewProvider
+ class="org.eclipse.emf.cdo.net4j.CDONet4jViewProvider$JVM"
+ priority="500"
+ regex="cdo\.net4j\.jvm://.*"/>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResource.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResource.java
index be88740b64..685e878842 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResource.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResource.java
@@ -1,274 +1,268 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- */
-package org.eclipse.emf.cdo.eresource;
-
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-/**
- * <!-- begin-user-doc --> A representation of the model object '<em><b>CDO Resource</b></em>'.
- *
- * @extends Resource
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- * @apiviz.landmark <!-- end-user-doc -->
- * <p>
- * The following features are supported:
- * <ul>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getResourceSet <em>Resource Set</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getURI <em>URI</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getContents <em>Contents</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isModified <em>Modified</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isLoaded <em>Loaded</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isTrackingModification <em>Tracking
- * Modification</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getErrors <em>Errors</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getWarnings <em>Warnings</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getTimeStamp <em>Time Stamp</em>}</li>
- * </ul>
- * </p>
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource()
- * @model
- * @generated
- */
-public interface CDOResource extends CDOResourceLeaf, Resource
-{
- /**
- * @ADDED
- * @since 2.0
- */
- public static final String OPTION_SAVE_PROGRESS_MONITOR = IProgressMonitor.class.getName();
-
- /**
- * @ADDED
- * @since 3.0
- */
- public static final String OPTION_SAVE_OVERRIDE_TRANSACTION = CDOTransaction.class.getName();
-
- /**
- * @ADDED
- * @since 4.0
- */
- public static final String OPTION_SAVE_BASE_URI = "OPTION_SAVE_BASE_URI";
-
- /**
- * Returns the value of the '<em><b>Resource Set</b></em>' attribute. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Resource Set</em>' attribute isn't clear, there really should be more of a description
- * here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Resource Set</em>' attribute.
- * @see #setResourceSet(ResourceSet)
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_ResourceSet()
- * @model dataType="org.eclipse.emf.cdo.eresource.ResourceSet" transient="true"
- * @generated
- */
- ResourceSet getResourceSet();
-
- /**
- * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getResourceSet <em>Resource Set</em>}'
- * attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @param value
- * the new value of the '<em>Resource Set</em>' attribute.
- * @see #getResourceSet()
- * @generated
- */
- void setResourceSet(ResourceSet value);
-
- /**
- * Returns the value of the '<em><b>URI</b></em>' attribute. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>URI</em>' attribute isn't clear, there really should be more of a description here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>URI</em>' attribute.
- * @see #setURI(URI)
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_URI()
- * @model dataType="org.eclipse.emf.cdo.eresource.URI" transient="true" volatile="true" derived="true"
- * @generated
- */
- URI getURI();
-
- /**
- * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getURI <em>URI</em>}' attribute. <!--
- * begin-user-doc --> <!-- end-user-doc -->
- *
- * @param value
- * the new value of the '<em>URI</em>' attribute.
- * @see #getURI()
- * @generated
- */
- void setURI(URI value);
-
- /**
- * Returns the value of the '<em><b>Contents</b></em>' containment reference list. The list contents are of type
- * {@link org.eclipse.emf.ecore.EObject}. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Contents</em>' containment reference list isn't clear, there really should be more of a
- * description here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Contents</em>' containment reference list.
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Contents()
- * @model containment="true"
- * @generated
- */
- EList<EObject> getContents();
-
- /**
- * Returns the value of the '<em><b>Modified</b></em>' attribute. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Modified</em>' attribute isn't clear, there really should be more of a description
- * here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Modified</em>' attribute.
- * @see #setModified(boolean)
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Modified()
- * @model transient="true"
- * @generated
- */
- boolean isModified();
-
- /**
- * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#isModified <em>Modified</em>}' attribute.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @param value
- * the new value of the '<em>Modified</em>' attribute.
- * @see #isModified()
- * @generated
- */
- void setModified(boolean value);
-
- /**
- * Returns the value of the '<em><b>Loaded</b></em>' attribute. The default value is <code>"true"</code>. <!--
- * begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Loaded</em>' attribute isn't clear, there really should be more of a description here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Loaded</em>' attribute.
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Loaded()
- * @model default="true" transient="true" suppressedSetVisibility="true"
- * @generated
- */
- boolean isLoaded();
-
- /**
- * Returns the value of the '<em><b>Tracking Modification</b></em>' attribute. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Tracking Modification</em>' attribute isn't clear, there really should be more of a
- * description here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Tracking Modification</em>' attribute.
- * @see #setTrackingModification(boolean)
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_TrackingModification()
- * @model transient="true"
- * @generated
- */
- boolean isTrackingModification();
-
- /**
- * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#isTrackingModification
- * <em>Tracking Modification</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @param value
- * the new value of the '<em>Tracking Modification</em>' attribute.
- * @see #isTrackingModification()
- * @generated
- */
- void setTrackingModification(boolean value);
-
- /**
- * Returns the value of the '<em><b>Errors</b></em>' attribute list. The list contents are of type
- * {@link org.eclipse.emf.ecore.resource.Resource.Diagnostic}. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Errors</em>' attribute list isn't clear, there really should be more of a description
- * here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Errors</em>' attribute list.
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Errors()
- * @model dataType="org.eclipse.emf.cdo.eresource.Diagnostic" transient="true" changeable="false" volatile="true"
- * derived="true"
- * @generated
- */
- EList<Diagnostic> getErrors();
-
- /**
- * Returns the value of the '<em><b>Warnings</b></em>' attribute list. The list contents are of type
- * {@link org.eclipse.emf.ecore.resource.Resource.Diagnostic}. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Warnings</em>' attribute list isn't clear, there really should be more of a description
- * here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Warnings</em>' attribute list.
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Warnings()
- * @model dataType="org.eclipse.emf.cdo.eresource.Diagnostic" transient="true" changeable="false" volatile="true"
- * derived="true"
- * @generated
- */
- EList<Diagnostic> getWarnings();
-
- /**
- * Returns the value of the '<em><b>Time Stamp</b></em>' attribute. <!-- begin-user-doc -->
- * <p>
- * If the meaning of the '<em>Time Stamp</em>' attribute isn't clear, there really should be more of a description
- * here...
- * </p>
- * <!-- end-user-doc -->
- *
- * @return the value of the '<em>Time Stamp</em>' attribute.
- * @see #setTimeStamp(long)
- * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_TimeStamp()
- * @model transient="true"
- * @generated
- */
- long getTimeStamp();
-
- /**
- * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getTimeStamp <em>Time Stamp</em>}'
- * attribute. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @param value
- * the new value of the '<em>Time Stamp</em>' attribute.
- * @see #getTimeStamp()
- * @generated
- */
- void setTimeStamp(long value);
-
- /**
- * @ADDED
- * @since 2.0
- */
- public boolean isExisting();
-
-} // CDOResource
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.emf.cdo.eresource;
+
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOURIData;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>CDO Resource</b></em>'.
+ *
+ * @extends Resource
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @apiviz.landmark
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are supported:
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getResourceSet <em>Resource Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getURI <em>URI</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getContents <em>Contents</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isModified <em>Modified</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isLoaded <em>Loaded</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#isTrackingModification <em>Tracking
+ * Modification</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getErrors <em>Errors</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getWarnings <em>Warnings</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.CDOResource#getTimeStamp <em>Time Stamp</em>}</li>
+ * </ul>
+ * </p>
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource()
+ * @model
+ * @generated
+ */
+public interface CDOResource extends CDOResourceLeaf, Resource
+{
+ /**
+ * @ADDED
+ * @since 2.0
+ */
+ public static final String OPTION_SAVE_PROGRESS_MONITOR = IProgressMonitor.class.getName();
+
+ /**
+ * @ADDED
+ * @since 3.0
+ */
+ public static final String OPTION_SAVE_OVERRIDE_TRANSACTION = CDOTransaction.class.getName();
+
+ /**
+ * @ADDED
+ * @since 4.0
+ */
+ public static final String OPTION_SAVE_BASE_URI = "OPTION_SAVE_BASE_URI";
+
+ /**
+ * @ADDED
+ * @since 4.1
+ */
+ public static final String PREFETCH_PARAMETER = "prefetch";
+
+ /**
+ * Returns the value of the '<em><b>Resource Set</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Resource Set</em>' attribute.
+ * @see #setResourceSet(ResourceSet)
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_ResourceSet()
+ * @model dataType="org.eclipse.emf.cdo.eresource.ResourceSet" transient="true"
+ * @generated
+ */
+ ResourceSet getResourceSet();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getResourceSet <em>Resource Set</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Resource Set</em>' attribute.
+ * @see #getResourceSet()
+ * @generated
+ */
+ void setResourceSet(ResourceSet value);
+
+ /**
+ * Returns the value of the '<em><b>URI</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * The URI format is explained in {@link CDOURIUtil} and {@link CDOURIData}.
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>URI</em>' attribute.
+ * @see #setURI(URI)
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_URI()
+ * @model dataType="org.eclipse.emf.cdo.eresource.URI" transient="true" volatile="true" derived="true"
+ * @generated
+ */
+ URI getURI();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getURI <em>URI</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * The URI format is explained in {@link CDOURIUtil} and {@link CDOURIData}.
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>URI</em>' attribute.
+ * @see #getURI()
+ * @generated
+ */
+ void setURI(URI value);
+
+ /**
+ * Returns the value of the '<em><b>Contents</b></em>' containment reference list. The list contents are of type
+ * {@link org.eclipse.emf.ecore.EObject}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Contents</em>' containment reference list.
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Contents()
+ * @model containment="true"
+ * @generated
+ */
+ EList<EObject> getContents();
+
+ /**
+ * Returns the value of the '<em><b>Modified</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Modified</em>' attribute.
+ * @see #setModified(boolean)
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Modified()
+ * @model transient="true"
+ * @generated
+ */
+ boolean isModified();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#isModified <em>Modified</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Modified</em>' attribute.
+ * @see #isModified()
+ * @generated
+ */
+ void setModified(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Loaded</b></em>' attribute. The default value is <code>"true"</code>.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Loaded</em>' attribute.
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Loaded()
+ * @model default="true" transient="true" suppressedSetVisibility="true"
+ * @generated
+ */
+ boolean isLoaded();
+
+ /**
+ * Returns the value of the '<em><b>Tracking Modification</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Tracking Modification</em>' attribute.
+ * @see #setTrackingModification(boolean)
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_TrackingModification()
+ * @model transient="true"
+ * @generated
+ */
+ boolean isTrackingModification();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#isTrackingModification
+ * <em>Tracking Modification</em>}' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Tracking Modification</em>' attribute.
+ * @see #isTrackingModification()
+ * @generated
+ */
+ void setTrackingModification(boolean value);
+
+ /**
+ * Returns the value of the '<em><b>Errors</b></em>' attribute list. The list contents are of type
+ * {@link org.eclipse.emf.ecore.resource.Resource.Diagnostic}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Errors</em>' attribute list.
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Errors()
+ * @model dataType="org.eclipse.emf.cdo.eresource.Diagnostic" transient="true" changeable="false" volatile="true"
+ * derived="true"
+ * @generated
+ */
+ EList<Diagnostic> getErrors();
+
+ /**
+ * Returns the value of the '<em><b>Warnings</b></em>' attribute list. The list contents are of type
+ * {@link org.eclipse.emf.ecore.resource.Resource.Diagnostic}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Warnings</em>' attribute list.
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_Warnings()
+ * @model dataType="org.eclipse.emf.cdo.eresource.Diagnostic" transient="true" changeable="false" volatile="true"
+ * derived="true"
+ * @generated
+ */
+ EList<Diagnostic> getWarnings();
+
+ /**
+ * Returns the value of the '<em><b>Time Stamp</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @return the value of the '<em>Time Stamp</em>' attribute.
+ * @see #setTimeStamp(long)
+ * @see org.eclipse.emf.cdo.eresource.EresourcePackage#getCDOResource_TimeStamp()
+ * @model transient="true"
+ * @generated
+ */
+ long getTimeStamp();
+
+ /**
+ * Sets the value of the '{@link org.eclipse.emf.cdo.eresource.CDOResource#getTimeStamp <em>Time Stamp</em>}'
+ * attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @param value
+ * the new value of the '<em>Time Stamp</em>' attribute.
+ * @see #getTimeStamp()
+ * @generated
+ */
+ void setTimeStamp(long value);
+
+ /**
+ * @ADDED
+ * @since 2.0
+ */
+ public boolean isExisting();
+
+} // CDOResource
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResourceFactory.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResourceFactory.java
index 1c1311fff1..dcc3a883fa 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResourceFactory.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/CDOResourceFactory.java
@@ -1,32 +1,41 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- * Simon McDuff - bug 213402
- */
-package org.eclipse.emf.cdo.eresource;
-
-import org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl;
-
-import org.eclipse.emf.ecore.resource.Resource;
-
-/**
- * Creates {@link CDOResource} instances.
- *
- * @author Eike Stepper
- * @noextend This interface is not intended to be extended by clients.
- * @noimplement This interface is not intended to be implemented by clients.
- * @apiviz.uses {@link CDOResource} - - creates
- */
-public interface CDOResourceFactory extends Resource.Factory
-{
- /**
- * @since 4.0
- */
- public static final CDOResourceFactory INSTANCE = CDOResourceFactoryImpl.INSTANCE;
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ * Simon McDuff - bug 213402
+ */
+package org.eclipse.emf.cdo.eresource;
+
+import org.eclipse.emf.cdo.eresource.impl.CDOResourceFactoryImpl;
+import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
+import org.eclipse.emf.cdo.util.CDOURIData;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
+
+import org.eclipse.emf.ecore.resource.Resource;
+
+/**
+ * Creates {@link CDOResource} instances.
+ * <p>
+ * Note that the only important task of this factory is to instantiate a {@link CDOResourceImpl} and mark it
+ * {@link CDOResource#isExisting() existing} or not. All further {@link CDOResource#getURI() URI} processing
+ * is done later on in the registration process, especially in {@link CDOResourceImpl#basicSetResourceSet(org.eclipse.emf.ecore.resource.ResourceSet, org.eclipse.emf.common.notify.NotificationChain) CDOResourceImpl.basicSetResourceSet()}.
+ * <p>
+ * The recognized URI formats are explained in {@link CDOURIUtil} and {@link CDOURIData}.
+ *
+ * @author Eike Stepper
+ * @noextend This interface is not intended to be extended by clients.
+ * @noimplement This interface is not intended to be implemented by clients.
+ * @apiviz.uses {@link CDOResource} - - creates
+ */
+public interface CDOResourceFactory extends Resource.Factory
+{
+ /**
+ * @since 4.0
+ */
+ public static final CDOResourceFactory INSTANCE = CDOResourceFactoryImpl.INSTANCE;
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
index 467c6f872a..f7f4dc4112 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/eresource/impl/CDOResourceImpl.java
@@ -1,1668 +1,1684 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Eike Stepper - initial API and implementation
- * Simon McDuff - maintenance
- */
-package org.eclipse.emf.cdo.eresource.impl;
-
-import org.eclipse.emf.cdo.CDOObject;
-import org.eclipse.emf.cdo.CDOState;
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.eresource.CDOResource;
-import org.eclipse.emf.cdo.eresource.EresourcePackage;
-import org.eclipse.emf.cdo.transaction.CDOTransaction;
-import org.eclipse.emf.cdo.util.CDOModificationTrackingAdapter;
-import org.eclipse.emf.cdo.util.CDOURIUtil;
-import org.eclipse.emf.cdo.util.CDOUtil;
-import org.eclipse.emf.cdo.util.CommitException;
-import org.eclipse.emf.cdo.util.ReadOnlyException;
-import org.eclipse.emf.cdo.view.CDOView;
-import org.eclipse.emf.cdo.view.CDOViewProvider;
-import org.eclipse.emf.cdo.view.CDOViewProviderRegistry;
-
-import org.eclipse.emf.internal.cdo.bundle.OM;
-import org.eclipse.emf.internal.cdo.view.CDOStateMachine;
-
-import org.eclipse.net4j.util.WrappedException;
-import org.eclipse.net4j.util.collection.Pair;
-import org.eclipse.net4j.util.transaction.TransactionException;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.common.notify.impl.NotificationChainImpl;
-import org.eclipse.emf.common.notify.impl.NotificationImpl;
-import org.eclipse.emf.common.notify.impl.NotifyingListImpl;
-import org.eclipse.emf.common.util.AbstractTreeIterator;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.URIConverter;
-import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
-import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.emf.ecore.xmi.XMIResource;
-import org.eclipse.emf.ecore.xmi.XMLHelper;
-import org.eclipse.emf.ecore.xmi.impl.XMIHelperImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
-import org.eclipse.emf.spi.cdo.FSMUtil;
-import org.eclipse.emf.spi.cdo.InternalCDOObject;
-import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
-import org.eclipse.emf.spi.cdo.InternalCDOView;
-import org.eclipse.emf.spi.cdo.InternalCDOViewSet;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-
-/**
- * <!-- begin-user-doc --> An implementation of the model object '<em><b>CDO Resource</b></em>'.
- *
- * @extends Resource.Internal
- * @noextend This interface is not intended to be extended by clients. <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getResourceSet <em>Resource Set</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getURI <em>URI</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getContents <em>Contents</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isModified <em>Modified</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isLoaded <em>Loaded</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isTrackingModification <em>Tracking
- * Modification</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getErrors <em>Errors</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getWarnings <em>Warnings</em>}</li>
- * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getTimeStamp <em>Time Stamp</em>}</li>
- * </ul>
- * </p>
- * @generated
- */
-public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource, Resource.Internal
-{
- private static final EReference CDO_RESOURCE_CONTENTS = EresourcePackage.eINSTANCE.getCDOResource_Contents();
-
- /**
- * The default URI converter when there is no resource set.
- *
- * @ADDED
- */
- private static URIConverter defaultURIConverter;
-
- /**
- * @ADDED
- */
- private boolean root;
-
- /**
- * @ADDED
- */
- private URI initialURI;
-
- /**
- * TODO Set to true in commit()?
- *
- * @ADDED
- */
- private boolean existing;
-
- /**
- * @ADDED
- */
- private boolean loading;
-
- /**
- * @ADDED
- */
- private boolean loaded;
-
- /**
- * @ADDED
- */
- private boolean modified;
-
- /**
- * @ADDED
- */
- private EList<Diagnostic> errors;
-
- /**
- * @ADDED
- */
- private EList<Diagnostic> warnings;
-
- /**
- * @ADDED
- */
- private transient CDOViewProvider viewProvider;
-
- /**
- * @ADDED
- * @since 2.0
- */
- public CDOResourceImpl(URI initialURI)
- {
- this.initialURI = initialURI;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- protected CDOResourceImpl()
- {
- super();
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- @Override
- protected EClass eStaticClass()
- {
- return EresourcePackage.Literals.CDO_RESOURCE;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- * @since 2.0
- */
- @Override
- public Resource.Internal eDirectResource()
- {
- if (isRoot())
- {
- return this;
- }
-
- return super.eDirectResource();
- }
-
- @Override
- public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
- {
- if (baseClass == CDOResource.class)
- {
- return baseFeatureID;
- }
-
- if (baseClass == Resource.class)
- {
- return baseFeatureID + EresourcePackage.CDO_RESOURCE_NODE_FEATURE_COUNT;
- }
-
- return super.eBaseStructuralFeatureID(baseFeatureID, baseClass);
- }
-
- @Override
- public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
- {
- if (baseClass == CDOResource.class)
- {
- return derivedFeatureID;
- }
-
- if (baseClass == Resource.class)
- {
- return derivedFeatureID - EresourcePackage.CDO_RESOURCE_NODE_FEATURE_COUNT;
- }
-
- return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
- }
-
- /**
- * @since 2.0
- */
- public boolean isRoot()
- {
- return root;
- }
-
- /**
- * @since 3.0
- */
- public void setRoot(boolean root)
- {
- this.root = root;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public ResourceSet getResourceSet()
- {
- return (ResourceSet)eGet(EresourcePackage.Literals.CDO_RESOURCE__RESOURCE_SET, true);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public void setResourceSet(ResourceSet newResourceSet)
- {
- eSet(EresourcePackage.Literals.CDO_RESOURCE__RESOURCE_SET, newResourceSet);
- }
-
- /**
- * <!-- begin-user-doc -->
- *
- * @since 2.0 <!-- end-user-doc -->
- * @generated
- */
- public URI getURIGen()
- {
- return (URI)eGet(EresourcePackage.Literals.CDO_RESOURCE__URI, true);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- @Override
- public URI getURI()
- {
- if (cdoID() == null && initialURI != null)
- {
- return initialURI;
- }
-
- if (viewProvider != null)
- {
- URI uri = viewProvider.getResourceURI(cdoView(), getPath());
- if (uri != null)
- {
- return uri;
- }
- }
-
- return super.getURI();
- }
-
- /**
- * <!-- begin-user-doc -->
- *
- * @since 2.0 <!-- end-user-doc -->
- * @generated
- */
- public void setURIGen(URI newURI)
- {
- eSet(EresourcePackage.Literals.CDO_RESOURCE__URI, newURI);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public void setURI(URI newURI)
- {
- String newPath = CDOURIUtil.extractResourcePath(newURI);
- setPath(newPath);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- @SuppressWarnings("unchecked")
- public EList<EObject> getContents()
- {
- return (EList<EObject>)eGet(EresourcePackage.Literals.CDO_RESOURCE__CONTENTS, true);
- }
-
- /**
- * @since 2.0
- */
- @Override
- public void cdoInternalPostDetach(boolean remote)
- {
- super.cdoInternalPostDetach(remote);
- if (remote)
- {
- existing = false;
- }
-
- removeFromResourceSet();
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public boolean isModified()
- {
- return modified;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public void setModified(boolean newModified)
- {
- boolean oldModified = modified;
- modified = newModified;
- if (oldModified != newModified && eNotificationRequired())
- {
- Notification notification = new NotificationImpl(Notification.SET, oldModified, newModified)
- {
- @Override
- public Object getNotifier()
- {
- return CDOResourceImpl.this;
- }
-
- @Override
- public int getFeatureID(Class<?> expectedClass)
- {
- return RESOURCE__IS_MODIFIED;
- }
- };
-
- eNotify(notification);
- }
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public boolean isLoaded()
- {
- return loaded;
- }
-
- /**
- * @see ResourceImpl#setLoaded(boolean)
- * @ADDED
- */
- private Notification setLoaded(boolean isLoaded)
- {
- boolean oldIsLoaded = loaded;
- loaded = isLoaded;
-
- if (eNotificationRequired())
- {
- Notification notification = new NotificationImpl(Notification.SET, oldIsLoaded, isLoaded)
- {
- @Override
- public Object getNotifier()
- {
- return CDOResourceImpl.this;
- }
-
- @Override
- public int getFeatureID(Class<?> expectedClass)
- {
- // TODO FIX bug 265136
- return Resource.RESOURCE__IS_LOADED;
- }
- };
-
- return notification;
- }
-
- return null;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public boolean isTrackingModification()
- {
- return (Boolean)eGet(EresourcePackage.Literals.CDO_RESOURCE__TRACKING_MODIFICATION, true);
- }
-
- /**
- * <!-- begin-user-doc -->
- *
- * @since 4.0 <!-- end-user-doc -->
- * @generated
- */
- public void setTrackingModificationGen(boolean newTrackingModification)
- {
- eSet(EresourcePackage.Literals.CDO_RESOURCE__TRACKING_MODIFICATION, newTrackingModification);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public void setTrackingModification(boolean newTrackingModification)
- {
- if (cdoView().isReadOnly())
- {
- throw new ReadOnlyException("Underlying view is read-only");
- }
-
- if (newTrackingModification == isTrackingModification())
- {
- return;
- }
-
- EList<Adapter> adapters = eAdapters();
- if (newTrackingModification)
- {
- adapters.add(new CDOModificationTrackingAdapter(this));
- }
- else
- {
- for (Adapter adapter : adapters)
- {
- if (adapter instanceof CDOModificationTrackingAdapter)
- {
- adapters.remove(adapter);
- break;
- }
- }
- }
-
- setTrackingModificationGen(newTrackingModification);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public EList<Diagnostic> getErrors()
- {
- if (errors == null)
- {
- errors = new NotifyingListImpl<Diagnostic>()
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected boolean isNotificationRequired()
- {
- return CDOResourceImpl.this.eNotificationRequired();
- }
-
- @Override
- public Object getNotifier()
- {
- return CDOResourceImpl.this;
- }
-
- @Override
- public int getFeatureID()
- {
- return EresourcePackage.CDO_RESOURCE__ERRORS;
- }
- };
- }
-
- return errors;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated NOT
- */
- public EList<Diagnostic> getWarnings()
- {
- if (warnings == null)
- {
- warnings = new NotifyingListImpl<Diagnostic>()
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- protected boolean isNotificationRequired()
- {
- return CDOResourceImpl.this.eNotificationRequired();
- }
-
- @Override
- public Object getNotifier()
- {
- return CDOResourceImpl.this;
- }
-
- @Override
- public int getFeatureID()
- {
- return EresourcePackage.CDO_RESOURCE__WARNINGS;
- }
- };
- }
-
- return warnings;
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public long getTimeStamp()
- {
- return (Long)eGet(EresourcePackage.Literals.CDO_RESOURCE__TIME_STAMP, true);
- }
-
- /**
- * <!-- begin-user-doc --> <!-- end-user-doc -->
- *
- * @generated
- */
- public void setTimeStamp(long newTimeStamp)
- {
- eSet(EresourcePackage.Literals.CDO_RESOURCE__TIME_STAMP, newTimeStamp);
- }
-
- /**
- * @ADDED
- * @see ResourceImpl#getAllContents()
- */
- public TreeIterator<EObject> getAllContents()
- {
- return new AbstractTreeIterator<EObject>(this, false)
- {
- private static final long serialVersionUID = 1L;
-
- @Override
- public Iterator<EObject> getChildren(Object object)
- {
- return object == CDOResourceImpl.this ? CDOResourceImpl.this.getContents().iterator() : ((EObject)object)
- .eContents().iterator();
- }
- };
- }
-
- /**
- * <b>Note:</b> URI from temporary objects are going to changed when we commit the CDOTransaction. Objects will not be
- * accessible from their temporary URI once CDOTransaction is committed.
- * <p>
- * <b>Note:</b> This resource is not actually used to lookup the resulting object in CDO. Only the CDOView is used for
- * this lookup! This means that this resource can be used to resolve <em>any</em> fragment with a CDOID of the
- * associated CDOView.
- *
- * @ADDED
- */
- public EObject getEObject(String uriFragment)
- {
- if (uriFragment == null)
- {
- return null;
- }
-
- try
- {
- EObject eObjectByFragment = getEObjectByFragment(uriFragment);
-
- if (eObjectByFragment != null)
- {
- return eObjectByFragment;
- }
-
- CDOID id = CDOIDUtil.read(uriFragment);
- InternalCDOView view = cdoView();
- if (CDOIDUtil.isNull(id) || view.isObjectNew(id) && !view.isObjectRegistered(id))
- {
- return null;
- }
-
- if (id.isObject())
- {
- CDOObject object = view.getObject(id, true);
- return CDOUtil.getEObject(object);
- }
- }
- catch (Exception ex)
- {
- // Do nothing
- // Return null if the object cannot be resolved.
- }
-
- // If it doesn't match to anything we return null like ResourceImpl.getEObject
- return null;
- }
-
- private EObject getEObjectByFragment(String uriFragment)
- {
- int length = uriFragment.length();
- if (length > 0)
- {
- if (uriFragment.charAt(0) == '/')
- {
- ArrayList<String> uriFragmentPath = new ArrayList<String>(4);
- int start = 1;
- for (int i = 1; i < length; ++i)
- {
- if (uriFragment.charAt(i) == '/')
- {
- uriFragmentPath.add(start == i ? "" : uriFragment.substring(start, i));
- start = i + 1;
- }
- }
-
- uriFragmentPath.add(uriFragment.substring(start));
- return getEObject(uriFragmentPath);
- }
- else if (uriFragment.charAt(length - 1) == '?')
- {
- int index = uriFragment.lastIndexOf('?', length - 2);
- if (index > 0)
- {
- uriFragment = uriFragment.substring(0, index);
- }
- }
- }
-
- return null;
- }
-
- private EObject getEObject(List<String> uriFragmentPath)
- {
- int size = uriFragmentPath.size();
- EObject eObject = getEObjectForURIFragmentRootSegment(size == 0 ? "" : uriFragmentPath.get(0));
- for (int i = 1; i < size && eObject != null; ++i)
- {
- eObject = ((InternalEObject)eObject).eObjectForURIFragmentSegment(uriFragmentPath.get(i));
- }
-
- return eObject;
- }
-
- private EObject getEObjectForURIFragmentRootSegment(String uriFragmentRootSegment)
- {
- int position = 0;
- if (uriFragmentRootSegment.length() > 0)
- {
- try
- {
- position = Integer.parseInt(uriFragmentRootSegment);
- }
- catch (NumberFormatException exception)
- {
- throw new RuntimeException(exception);
- }
- }
-
- List<EObject> contents = getContents();
- if (position < contents.size() && position >= 0)
- {
- return contents.get(position);
- }
-
- return null;
- }
-
- /**
- * @ADDED
- */
- public String getURIFragment(EObject object)
- {
- // TODO if object == this ??? what we do. Is it wanted ? How we handle them ?
- InternalCDOObject internalCDOObject = FSMUtil.adapt(object, cdoView());
- StringBuilder builder = new StringBuilder();
- CDOIDUtil.write(builder, internalCDOObject.cdoID());
- return builder.toString();
- }
-
- /**
- * @since 2.0
- */
- @Override
- public void cdoInternalPreLoad()
- {
- try
- {
- load(null);
- }
- catch (IOException ex)
- {
- throw WrappedException.wrap(ex);
- }
- }
-
- /**
- * @ADDED
- */
- public void load(InputStream inputStream, Map<?, ?> options) throws IOException
- {
- // final String baseURI = getBaseURIOption(options);
- // final Map<Resource, CDOResource> resourceMappings = new HashMap<Resource, CDOResource>();
- //
- // class ImportResource extends XMIResourceImpl
- // {
- // private CDOResource delegate;
- //
- // public ImportResource(CDOResource delegate)
- // {
- // super(URI.createURI(baseURI + delegate.getPath()));
- // this.delegate = delegate;
- // }
- //
- // @Override
- // public EList<EObject> getContents()
- // {
- // return delegate.getContents();
- // }
- //
- // @Override
- // public String getURIFragment(EObject eObject)
- // {
- // String id = EcoreUtil.getID(eObject);
- // if (id != null)
- // {
- // return id;
- // }
- //
- // InternalEObject internalEObject = (InternalEObject)eObject;
- // if (getMappedResource(internalEObject.eDirectResource()) == this)
- // {
- // return "/" + getURIFragmentRootSegment(eObject);
- // }
- //
- // List<String> uriFragmentPath = new ArrayList<String>();
- // boolean isContained = false;
- // for (InternalEObject container = internalEObject.eInternalContainer(); container != null; container =
- // internalEObject
- // .eInternalContainer())
- // {
- // uriFragmentPath.add(container.eURIFragmentSegment(internalEObject.eContainingFeature(), internalEObject));
- // internalEObject = container;
- // if (getMappedResource(container.eDirectResource()) == this)
- // {
- // isContained = true;
- // break;
- // }
- // }
- //
- // if (!isContained)
- // {
- // return "/-1";
- // }
- //
- // StringBuilder result = new StringBuilder("/");
- // result.append(getURIFragmentRootSegment(internalEObject));
- //
- // for (int i = uriFragmentPath.size() - 1; i >= 0; --i)
- // {
- // result.append('/');
- // result.append(uriFragmentPath.get(i));
- // }
- //
- // return result.toString();
- // }
- //
- // @Override
- // protected XMLHelper createXMLHelper()
- // {
- // return new XMIHelperImpl(this)
- // {
- // @Override
- // public String getHREF(EObject obj)
- // {
- // InternalEObject o = (InternalEObject)obj;
- //
- // URI objectURI = o.eProxyURI();
- // if (objectURI == null)
- // {
- // Resource otherResource = obj.eResource();
- // otherResource = getMappedResource(otherResource);
- // objectURI = getHREF(otherResource, obj);
- // }
- //
- // objectURI = deresolve(objectURI);
- // return objectURI.toString();
- // }
- //
- // @Override
- // protected URI getHREF(Resource otherResource, EObject obj)
- // {
- // String uriFragment = getURIFragment(otherResource, obj);
- // if (otherResource == ImportResource.this)
- // {
- // return URI.createURI(uriFragment);
- // }
- //
- // return otherResource.getURI().appendFragment(uriFragment);
- // }
- // };
- // }
- //
- // private Resource getMappedResource(Resource otherResource)
- // {
- // Resource resource = resourceMappings.get(otherResource);
- // if (resource != null)
- // {
- // return resource;
- // }
- //
- // if (otherResource instanceof CDOResource)
- // {
- // CDOResource cdoResource = (CDOResource)otherResource;
- // otherResource = new ImportResource(cdoResource);
- // resourceMappings.put(cdoResource, otherResource);
- // }
- //
- // return otherResource;
- // }
- // }
- //
- // XMIResource xmiResource = new ImportResource(this);
- // resourceMappings.put(this, xmiResource);
- // xmiResource.save(outputStream, options);
-
- throw new UnsupportedOperationException();
- }
-
- /**
- * @ADDED
- */
- public void load(Map<?, ?> options) throws IOException
- {
- if (!isLoaded())
- {
- InternalCDOView view = cdoView();
- if (!FSMUtil.isTransient(this))
- {
- CDOID id = cdoID();
- if (id == null)
- {
- registerProxy(view);
- }
- else
- {
- synchronized (view)
- {
- if (!view.isObjectRegistered(id))
- {
- registerProxy(view);
- }
- }
- }
- }
-
- Notification notification = setLoaded(true);
- if (notification != null)
- {
- eNotify(notification);
- }
-
- // URIConverter uriConverter = getURIConverter();
- //
- // // If an input stream can't be created, ensure that the resource is still considered loaded after the failure,
- // // and do all the same processing we'd do if we actually were able to create a valid input stream.
- // //
- // InputStream inputStream = null;
- //
- // try
- // {
- // inputStream = uriConverter.createInputStream(getURI(), options);
- // }
- // catch (IOException exception)
- // {
- // Notification notification = setLoaded(true);
- // loading = true;
- // if (errors != null)
- // {
- // errors.clear();
- // }
- //
- // if (warnings != null)
- // {
- // warnings.clear();
- // }
- //
- // loading = false;
- // if (notification != null)
- // {
- // eNotify(notification);
- // }
- //
- // setModified(false);
- // throw exception;
- // }
- //
- // try
- // {
- // load(inputStream, options);
- // }
- // finally
- // {
- // inputStream.close();
- // // TODO Handle timeStamp
- // // Long timeStamp = (Long)response.get(URIConverter.RESPONSE_TIME_STAMP_PROPERTY);
- // // if (timeStamp != null)
- // // {
- // // setTimeStamp(timeStamp);
- // // }
- // }
- }
- }
-
- private void registerProxy(InternalCDOView view) throws IOWrappedException
- {
- try
- {
- view.registerProxyResource(this);
- }
- catch (Exception ex)
- {
- OM.LOG.error(ex);
- setExisting(false);
- cdoInternalSetState(CDOState.TRANSIENT);
- throw new IOWrappedException(ex);
- }
- }
-
- /**
- * Returns the URI converter. This typically gets the {@link ResourceSet#getURIConverter converter} from the
- * {@link #getResourceSet containing} resource set, but it calls {@link #getDefaultURIConverter} when there is no
- * containing resource set.
- *
- * @return the URI converter.
- * @ADDED
- */
- @SuppressWarnings("unused")
- private URIConverter getURIConverter()
- {
- return getResourceSet() == null ? getDefaultURIConverter() : getResourceSet().getURIConverter();
- }
-
- /**
- * Returns the default URI converter that's used when there is no resource set.
- *
- * @return the default URI converter.
- * @see #getURIConverter
- * @ADDED
- */
- private static synchronized URIConverter getDefaultURIConverter()
- {
- if (defaultURIConverter == null)
- {
- defaultURIConverter = new ExtensibleURIConverterImpl();
- }
-
- return defaultURIConverter;
- }
-
- /**
- * @ADDED
- */
- public void save(Map<?, ?> options) throws IOException
- {
- CDOTransaction transaction = getTransaction(options);
- IProgressMonitor progressMonitor = options != null ? (IProgressMonitor)options
- .get(CDOResource.OPTION_SAVE_PROGRESS_MONITOR) : null;
-
- try
- {
- transaction.commit(progressMonitor);
- }
- catch (CommitException ex)
- {
- throw new TransactionException(ex);
- }
-
- setModified(false);
- }
-
- /**
- * @ADDED
- */
- private CDOTransaction getTransaction(Map<?, ?> options)
- {
- CDOTransaction transaction = options != null ? (CDOTransaction)options
- .get(CDOResource.OPTION_SAVE_OVERRIDE_TRANSACTION) : null;
-
- if (transaction == null)
- {
- CDOView view = cdoView();
- if (view instanceof CDOTransaction)
- {
- transaction = (CDOTransaction)view;
- }
- else
- {
- throw new IllegalStateException("No transaction available");
- }
- }
-
- return transaction;
- }
-
- /**
- * @ADDED
- */
- public void save(OutputStream outputStream, Map<?, ?> options) throws IOException
- {
- final String baseURI = getBaseURIOption(options);
- final Map<CDOResource, Resource> resourceMappings = new HashMap<CDOResource, Resource>();
-
- class ExportResource extends XMIResourceImpl
- {
- private CDOResource delegate;
-
- public ExportResource(CDOResource delegate)
- {
- super(URI.createURI(baseURI + delegate.getPath()));
- this.delegate = delegate;
- }
-
- @Override
- public EList<EObject> getContents()
- {
- return delegate.getContents();
- }
-
- // @Override
- // public String getURIFragment(EObject eObject)
- // {
- // String id = EcoreUtil.getID(eObject);
- // if (id != null)
- // {
- // return id;
- // }
- //
- // InternalEObject internalEObject = (InternalEObject)eObject;
- // if (getMappedResource(internalEObject.eDirectResource()) == this)
- // {
- // return "/" + getURIFragmentRootSegment(eObject);
- // }
- //
- // List<String> uriFragmentPath = new ArrayList<String>();
- // boolean isContained = false;
- // for (InternalEObject container = internalEObject.eInternalContainer(); container != null; container =
- // internalEObject
- // .eInternalContainer())
- // {
- // uriFragmentPath.add(container.eURIFragmentSegment(internalEObject.eContainingFeature(), internalEObject));
- // internalEObject = container;
- // if (getMappedResource(container.eDirectResource()) == this)
- // {
- // isContained = true;
- // break;
- // }
- // }
- //
- // if (!isContained)
- // {
- // return "/-1";
- // }
- //
- // StringBuilder result = new StringBuilder("/");
- // result.append(getURIFragmentRootSegment(internalEObject));
- //
- // for (int i = uriFragmentPath.size() - 1; i >= 0; --i)
- // {
- // result.append('/');
- // result.append(uriFragmentPath.get(i));
- // }
- //
- // return result.toString();
- // }
-
- @Override
- protected boolean useUUIDs()
- {
- return true;
- }
-
- @Override
- protected boolean useIDAttributes()
- {
- return false;
- }
-
- @Override
- public String getID(EObject eObject)
- {
- CDOObject cdoObject = CDOUtil.getCDOObject(eObject);
- StringBuilder builder = new StringBuilder();
- CDOIDUtil.write(builder, cdoObject.cdoID());
- return builder.toString();
- }
-
- @Override
- protected XMLHelper createXMLHelper()
- {
- return new XMIHelperImpl(this)
- {
- @Override
- public String getHREF(EObject obj)
- {
- InternalEObject o = (InternalEObject)obj;
-
- URI objectURI = o.eProxyURI();
- if (objectURI == null)
- {
- Resource otherResource = obj.eResource();
- otherResource = getMappedResource(otherResource);
- objectURI = getHREF(otherResource, obj);
- }
-
- objectURI = deresolve(objectURI);
- return objectURI.toString();
- }
-
- @Override
- protected URI getHREF(Resource otherResource, EObject obj)
- {
- String uriFragment = getURIFragment(otherResource, obj);
- if (otherResource == ExportResource.this)
- {
- return URI.createURI(uriFragment);
- }
-
- return otherResource.getURI().appendFragment(uriFragment);
- }
- };
- }
-
- private Resource getMappedResource(Resource otherResource)
- {
- Resource resource = resourceMappings.get(otherResource);
- if (resource != null)
- {
- return resource;
- }
-
- if (otherResource instanceof CDOResource)
- {
- CDOResource cdoResource = (CDOResource)otherResource;
- otherResource = new ExportResource(cdoResource);
- resourceMappings.put(cdoResource, otherResource);
- }
-
- return otherResource;
- }
- }
-
- XMIResource xmiResource = new ExportResource(this);
- resourceMappings.put(this, xmiResource);
- xmiResource.save(outputStream, options);
- }
-
- private String getBaseURIOption(Map<?, ?> options)
- {
- if (options != null)
- {
- String uri = (String)options.get(OPTION_SAVE_BASE_URI);
- if (uri != null)
- {
- return uri;
- }
- }
-
- return "cdo://";
- }
-
- /**
- * @ADDED
- */
- public void unload()
- {
- // Do nothing
- }
-
- /**
- * @ADDED
- */
- public void delete(Map<?, ?> options) throws IOException
- {
- if (FSMUtil.isTransient(this))
- {
- removeFromResourceSet();
- }
- else
- {
- if (isRoot())
- {
- throw new UnsupportedOperationException();
- }
-
- if (getFolder() == null)
- {
- InternalCDOView view = cdoView();
- view.getRootResource().getContents().remove(this);
- }
- else
- {
- basicSetFolder(null, false);
- }
- }
- }
-
- private void removeFromResourceSet()
- {
- final ResourceSet resourceSet = getResourceSet();
- if (resourceSet != null)
- {
- InternalCDOViewSet viewSet = (InternalCDOViewSet)CDOUtil.getViewSet(resourceSet);
- viewSet.executeWithoutNotificationHandling(new Callable<Boolean>()
- {
- public Boolean call() throws Exception
- {
- resourceSet.getResources().remove(CDOResourceImpl.this);
- return true;
- }
- });
- }
- }
-
- /**
- * @ADDED
- */
- public void attached(EObject object)
- {
- if (!FSMUtil.isTransient(this))
- {
- InternalCDOView view = cdoView();
- if (view instanceof InternalCDOTransaction) // Bug 376075
- {
- InternalCDOTransaction transaction = (InternalCDOTransaction)view;
- InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
-
- if (CDOUtil.isLegacyObject(cdoObject) && FSMUtil.isClean(cdoObject))
- {
- // Bug 352204
- return;
- }
-
- attached(cdoObject, transaction);
- }
- }
- }
-
- /**
- * @ADDED
- */
- private void attached(InternalCDOObject cdoObject, InternalCDOTransaction transaction)
- {
- CDOStateMachine.INSTANCE.attach(cdoObject, transaction);
- }
-
- /**
- * @ADDED
- */
- public void detached(EObject object)
- {
- if (!FSMUtil.isTransient(this))
- {
- InternalCDOView view = cdoView();
- if (view instanceof InternalCDOTransaction) // Bug 376075
- {
- InternalCDOObject cdoObject = FSMUtil.adapt(object, view);
- CDOStateMachine.INSTANCE.detach(cdoObject);
- }
- }
- }
-
- /**
- * @ADDED
- * @see ResourceImpl#basicSetResourceSet(ResourceSet, NotificationChain)
- */
- public NotificationChain basicSetResourceSet(ResourceSet resourceSet, NotificationChain notifications)
- {
- final ResourceSet oldResourceSet = getResourceSet();
- if (oldResourceSet != null)
- {
- final NotificationChain finalNotifications = notifications;
-
- InternalCDOViewSet viewSet = (InternalCDOViewSet)CDOUtil.getViewSet(oldResourceSet);
- notifications = viewSet.executeWithoutNotificationHandling(new Callable<NotificationChain>()
- {
- public NotificationChain call() throws Exception
- {
- return ((InternalEList<Resource>)oldResourceSet.getResources()).basicRemove(this, finalNotifications);
- }
- });
- }
-
- setResourceSet(resourceSet);
-
- if (resourceSet != null)
- {
- InternalCDOView view = cdoView();
- if (view == null)
- {
- URI uri = getURI();
- Pair<CDOView, CDOViewProvider> pair = CDOViewProviderRegistry.INSTANCE.provideViewWithInfo(uri, resourceSet);
- if (pair != null)
- {
- view = (InternalCDOView)pair.getElement1();
- view.attachResource(this);
-
- viewProvider = pair.getElement2();
- }
- }
- }
-
- if (eNotificationRequired())
- {
- if (notifications == null)
- {
- notifications = new NotificationChainImpl(2);
- }
-
- notifications.add(new NotificationImpl(Notification.SET, oldResourceSet, resourceSet)
- {
- @Override
- public Object getNotifier()
- {
- return CDOResourceImpl.this;
- }
-
- @Override
- public int getFeatureID(Class<?> expectedClass)
- {
- return RESOURCE__RESOURCE_SET;
- }
- });
- }
-
- return notifications;
- }
-
- /**
- * @ADDED
- */
- public boolean isLoading()
- {
- return loading;
- }
-
- /**
- * @ADDED
- */
- public boolean isExisting()
- {
- return existing;
- }
-
- /**
- * @ADDED
- * @since 3.0
- */
- protected void setExisting(boolean existing)
- {
- this.existing = existing;
- }
-
- /**
- * @ADDED
- */
- @Override
- protected EList<?> createList(EStructuralFeature eStructuralFeature)
- {
- if (eStructuralFeature == CDO_RESOURCE_CONTENTS)
- {
- return new ContentsCDOList(CDO_RESOURCE_CONTENTS);
- // return new _ContentsCDOList<EObject>();
- }
-
- return super.createList(eStructuralFeature);
- }
-
- // /**
- // * A notifying list implementation for supporting {@link Resource#getContents}.
- // */
- // protected class _ContentsCDOList<E extends Object & EObject> extends ResourceContentsEList<E>
- // {
- // private static final long serialVersionUID = 1L;
- //
- // @Override
- // public int getFeatureID()
- // {
- // return CDO_RESOURCE_CONTENTS.getFeatureID();
- // }
- //
- // @Override
- // protected CDOResourceImpl getResource()
- // {
- // return CDOResourceImpl.this;
- // }
- //
- // @Override
- // protected Notification setLoaded(boolean loaded)
- // {
- // return getResource().setLoaded(loaded);
- // }
- //
- // @Override
- // protected boolean isNotificationRequired()
- // {
- // return getResource().eNotificationRequired();
- // }
- //
- // @Override
- // public NotificationChain inverseAdd(E object, NotificationChain notifications)
- // {
- // if (FSMUtil.isTransient(getResource()))
- // {
- // InternalEObject eObject = (InternalEObject)object;
- // return eObject.eSetResource(CDOResourceImpl.this, notifications);
- // // return super.inverseAdd(object, notifications);
- // }
- //
- // InternalCDOTransaction transaction = cdoView().toTransaction();
- // InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
- // notifications = cdoObject.eSetResource(getResource(), notifications);
- //
- // // Attach here instead of in CDOObjectImpl.eSetResource because EMF does it also here
- // if (FSMUtil.isTransient(cdoObject))
- // {
- // attached(cdoObject, transaction);
- // }
- //
- // return notifications;
- // }
- //
- // @Override
- // public NotificationChain inverseRemove(E object, NotificationChain notifications)
- // {
- // if (FSMUtil.isTransient(getResource()))
- // {
- // InternalEObject eObject = (InternalEObject)object;
- // return eObject.eSetResource(null, notifications);
- // // return super.inverseRemove(object, notifications);
- // }
- //
- // InternalEObject eObject = (InternalEObject)object;
- // detached(eObject);
- // return eObject.eSetResource(null, notifications);
- // }
- // }
-
- /**
- * An implementation of a CDO specific '<em><b>contents</b></em>' list.
- *
- * @ADDED
- * @author Eike Stepper
- * @since 2.0
- */
- protected class ContentsCDOList extends BasicEStoreEList<Object>
- {
- private static final long serialVersionUID = 1L;
-
- public ContentsCDOList(EStructuralFeature eStructuralFeature)
- {
- super(CDOResourceImpl.this, eStructuralFeature);
- }
-
- /**
- * Optimization taken from ResourceImpl.EContentList.contains.
- *
- * @since 2.0
- */
- @Override
- public boolean contains(Object object)
- {
- if (size() <= 4)
- {
- return super.contains(object);
- }
-
- return object instanceof InternalEObject && ((InternalEObject)object).eDirectResource() == CDOResourceImpl.this;
- }
-
- /**
- * @since 2.0
- */
- @Override
- public NotificationChain inverseAdd(Object object, NotificationChain notifications)
- {
- if (FSMUtil.isTransient(CDOResourceImpl.this))
- {
- InternalEObject eObject = (InternalEObject)object;
- notifications = eObject.eSetResource(CDOResourceImpl.this, notifications);
- }
- else
- {
- InternalCDOTransaction transaction = cdoView().toTransaction();
- InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
- notifications = cdoObject.eSetResource(CDOResourceImpl.this, notifications);
-
- // Attach here instead of in CDOObjectImpl.eSetResource because EMF does it also here
- if (FSMUtil.isTransient(cdoObject))
- {
- attached(cdoObject, transaction);
- }
- }
-
- return notifications;
- }
-
- /**
- * @since 2.0
- */
- @Override
- public NotificationChain inverseRemove(Object object, NotificationChain notifications)
- {
- if (FSMUtil.isTransient(CDOResourceImpl.this))
- {
- InternalEObject eObject = (InternalEObject)object;
- notifications = eObject.eSetResource(null, notifications);
- }
- else
- {
- InternalEObject eObject = (InternalEObject)object;
- detached(eObject);
- notifications = eObject.eSetResource(null, notifications);
- }
-
- return notifications;
- }
-
- /**
- * @since 2.0
- */
- protected void loaded()
- {
- Notification notification = setLoaded(true);
- if (notification != null)
- {
- eNotify(notification);
- }
- }
-
- /**
- * @since 2.0
- */
- protected void modified()
- {
- if (isTrackingModification())
- {
- setModified(true);
- }
- }
-
- /**
- * @since 2.0
- */
- @Override
- protected boolean useEquals()
- {
- return false;
- }
-
- /**
- * @since 2.0
- */
- @Override
- protected boolean hasInverse()
- {
- return true;
- }
-
- /**
- * @since 2.0
- */
- @Override
- protected boolean isUnique()
- {
- return true;
- }
-
- /**
- * @since 4.0
- */
- @Override
- protected void didAdd(int index, Object newObject)
- {
- super.didAdd(index, newObject);
-
- if (!isExisting() && !isLoaded())
- {
- loaded();
- }
- }
-
- /**
- * @since 4.0
- */
- @Override
- protected void didClear(int size, Object[] oldObjects)
- {
- super.didClear(size, oldObjects);
-
- if (!isExisting() && !isLoaded())
- {
- loaded();
- }
- }
- }
-} // CDOResourceImpl
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ * Simon McDuff - maintenance
+ */
+package org.eclipse.emf.cdo.eresource.impl;
+
+import org.eclipse.emf.cdo.CDOObject;
+import org.eclipse.emf.cdo.CDOState;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.revision.CDORevision;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.eresource.EresourcePackage;
+import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.util.CDOModificationTrackingAdapter;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
+import org.eclipse.emf.cdo.util.CDOUtil;
+import org.eclipse.emf.cdo.util.CommitException;
+import org.eclipse.emf.cdo.util.ReadOnlyException;
+import org.eclipse.emf.cdo.view.CDOView;
+import org.eclipse.emf.cdo.view.CDOViewProvider;
+import org.eclipse.emf.cdo.view.CDOViewProviderRegistry;
+
+import org.eclipse.emf.internal.cdo.bundle.OM;
+import org.eclipse.emf.internal.cdo.view.CDOStateMachine;
+
+import org.eclipse.net4j.util.WrappedException;
+import org.eclipse.net4j.util.collection.Pair;
+import org.eclipse.net4j.util.transaction.TransactionException;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.notify.impl.NotificationChainImpl;
+import org.eclipse.emf.common.notify.impl.NotificationImpl;
+import org.eclipse.emf.common.notify.impl.NotifyingListImpl;
+import org.eclipse.emf.common.util.AbstractTreeIterator;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.ecore.xmi.XMLHelper;
+import org.eclipse.emf.ecore.xmi.impl.XMIHelperImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
+import org.eclipse.emf.spi.cdo.FSMUtil;
+import org.eclipse.emf.spi.cdo.InternalCDOObject;
+import org.eclipse.emf.spi.cdo.InternalCDOTransaction;
+import org.eclipse.emf.spi.cdo.InternalCDOView;
+import org.eclipse.emf.spi.cdo.InternalCDOViewSet;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+
+/**
+ * <!-- begin-user-doc --> An implementation of the model object '<em><b>CDO Resource</b></em>'.
+ *
+ * @extends Resource.Internal
+ * @noextend This interface is not intended to be extended by clients. <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getResourceSet <em>Resource Set</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getURI <em>URI</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getContents <em>Contents</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isModified <em>Modified</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isLoaded <em>Loaded</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#isTrackingModification <em>Tracking
+ * Modification</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getErrors <em>Errors</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getWarnings <em>Warnings</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl#getTimeStamp <em>Time Stamp</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class CDOResourceImpl extends CDOResourceLeafImpl implements CDOResource, Resource.Internal
+{
+ private static final EReference CDO_RESOURCE_CONTENTS = EresourcePackage.eINSTANCE.getCDOResource_Contents();
+
+ /**
+ * The default URI converter when there is no resource set.
+ *
+ * @ADDED
+ */
+ private static URIConverter defaultURIConverter;
+
+ /**
+ * @ADDED
+ */
+ private boolean root;
+
+ /**
+ * @ADDED
+ */
+ private URI initialURI;
+
+ /**
+ * TODO Set to true in commit()?
+ *
+ * @ADDED
+ */
+ private boolean existing;
+
+ /**
+ * @ADDED
+ */
+ private boolean loading;
+
+ /**
+ * @ADDED
+ */
+ private boolean loaded;
+
+ /**
+ * @ADDED
+ */
+ private boolean modified;
+
+ /**
+ * @ADDED
+ */
+ private EList<Diagnostic> errors;
+
+ /**
+ * @ADDED
+ */
+ private EList<Diagnostic> warnings;
+
+ /**
+ * @ADDED
+ */
+ private transient CDOViewProvider viewProvider;
+
+ /**
+ * @ADDED
+ * @since 2.0
+ */
+ public CDOResourceImpl(URI initialURI)
+ {
+ this.initialURI = initialURI;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ protected CDOResourceImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return EresourcePackage.Literals.CDO_RESOURCE;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ * @since 2.0
+ */
+ @Override
+ public Resource.Internal eDirectResource()
+ {
+ if (isRoot())
+ {
+ return this;
+ }
+
+ return super.eDirectResource();
+ }
+
+ @Override
+ public int eDerivedStructuralFeatureID(int baseFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == CDOResource.class)
+ {
+ return baseFeatureID;
+ }
+
+ if (baseClass == Resource.class)
+ {
+ return baseFeatureID + EresourcePackage.CDO_RESOURCE_NODE_FEATURE_COUNT;
+ }
+
+ return super.eBaseStructuralFeatureID(baseFeatureID, baseClass);
+ }
+
+ @Override
+ public int eBaseStructuralFeatureID(int derivedFeatureID, Class<?> baseClass)
+ {
+ if (baseClass == CDOResource.class)
+ {
+ return derivedFeatureID;
+ }
+
+ if (baseClass == Resource.class)
+ {
+ return derivedFeatureID - EresourcePackage.CDO_RESOURCE_NODE_FEATURE_COUNT;
+ }
+
+ return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass);
+ }
+
+ /**
+ * @since 2.0
+ */
+ public boolean isRoot()
+ {
+ return root;
+ }
+
+ /**
+ * @since 3.0
+ */
+ public void setRoot(boolean root)
+ {
+ this.root = root;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public ResourceSet getResourceSet()
+ {
+ return (ResourceSet)eGet(EresourcePackage.Literals.CDO_RESOURCE__RESOURCE_SET, true);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setResourceSet(ResourceSet newResourceSet)
+ {
+ eSet(EresourcePackage.Literals.CDO_RESOURCE__RESOURCE_SET, newResourceSet);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ *
+ * @since 2.0 <!-- end-user-doc -->
+ * @generated
+ */
+ public URI getURIGen()
+ {
+ return (URI)eGet(EresourcePackage.Literals.CDO_RESOURCE__URI, true);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ @Override
+ public URI getURI()
+ {
+ if (cdoID() == null && initialURI != null)
+ {
+ return initialURI;
+ }
+
+ if (viewProvider != null)
+ {
+ URI uri = viewProvider.getResourceURI(cdoView(), getPath());
+ if (uri != null)
+ {
+ return uri;
+ }
+ }
+
+ return super.getURI();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ *
+ * @since 2.0 <!-- end-user-doc -->
+ * @generated
+ */
+ public void setURIGen(URI newURI)
+ {
+ eSet(EresourcePackage.Literals.CDO_RESOURCE__URI, newURI);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public void setURI(URI newURI)
+ {
+ String newPath = CDOURIUtil.extractResourcePath(newURI);
+ setPath(newPath);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ @SuppressWarnings("unchecked")
+ public EList<EObject> getContents()
+ {
+ return (EList<EObject>)eGet(EresourcePackage.Literals.CDO_RESOURCE__CONTENTS, true);
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public void cdoInternalPostDetach(boolean remote)
+ {
+ super.cdoInternalPostDetach(remote);
+ if (remote)
+ {
+ existing = false;
+ }
+
+ removeFromResourceSet();
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public boolean isModified()
+ {
+ return modified;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public void setModified(boolean newModified)
+ {
+ boolean oldModified = modified;
+ modified = newModified;
+ if (oldModified != newModified && eNotificationRequired())
+ {
+ Notification notification = new NotificationImpl(Notification.SET, oldModified, newModified)
+ {
+ @Override
+ public Object getNotifier()
+ {
+ return CDOResourceImpl.this;
+ }
+
+ @Override
+ public int getFeatureID(Class<?> expectedClass)
+ {
+ return RESOURCE__IS_MODIFIED;
+ }
+ };
+
+ eNotify(notification);
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public boolean isLoaded()
+ {
+ return loaded;
+ }
+
+ /**
+ * @see ResourceImpl#setLoaded(boolean)
+ * @ADDED
+ */
+ private Notification setLoaded(boolean isLoaded)
+ {
+ boolean oldIsLoaded = loaded;
+ loaded = isLoaded;
+
+ if (eNotificationRequired())
+ {
+ Notification notification = new NotificationImpl(Notification.SET, oldIsLoaded, isLoaded)
+ {
+ @Override
+ public Object getNotifier()
+ {
+ return CDOResourceImpl.this;
+ }
+
+ @Override
+ public int getFeatureID(Class<?> expectedClass)
+ {
+ // TODO FIX bug 265136
+ return Resource.RESOURCE__IS_LOADED;
+ }
+ };
+
+ return notification;
+ }
+
+ return null;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public boolean isTrackingModification()
+ {
+ return (Boolean)eGet(EresourcePackage.Literals.CDO_RESOURCE__TRACKING_MODIFICATION, true);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ *
+ * @since 4.0 <!-- end-user-doc -->
+ * @generated
+ */
+ public void setTrackingModificationGen(boolean newTrackingModification)
+ {
+ eSet(EresourcePackage.Literals.CDO_RESOURCE__TRACKING_MODIFICATION, newTrackingModification);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public void setTrackingModification(boolean newTrackingModification)
+ {
+ if (cdoView().isReadOnly())
+ {
+ throw new ReadOnlyException("Underlying view is read-only");
+ }
+
+ if (newTrackingModification == isTrackingModification())
+ {
+ return;
+ }
+
+ EList<Adapter> adapters = eAdapters();
+ if (newTrackingModification)
+ {
+ adapters.add(new CDOModificationTrackingAdapter(this));
+ }
+ else
+ {
+ for (Adapter adapter : adapters)
+ {
+ if (adapter instanceof CDOModificationTrackingAdapter)
+ {
+ adapters.remove(adapter);
+ break;
+ }
+ }
+ }
+
+ setTrackingModificationGen(newTrackingModification);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public EList<Diagnostic> getErrors()
+ {
+ if (errors == null)
+ {
+ errors = new NotifyingListImpl<Diagnostic>()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected boolean isNotificationRequired()
+ {
+ return CDOResourceImpl.this.eNotificationRequired();
+ }
+
+ @Override
+ public Object getNotifier()
+ {
+ return CDOResourceImpl.this;
+ }
+
+ @Override
+ public int getFeatureID()
+ {
+ return EresourcePackage.CDO_RESOURCE__ERRORS;
+ }
+ };
+ }
+
+ return errors;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated NOT
+ */
+ public EList<Diagnostic> getWarnings()
+ {
+ if (warnings == null)
+ {
+ warnings = new NotifyingListImpl<Diagnostic>()
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected boolean isNotificationRequired()
+ {
+ return CDOResourceImpl.this.eNotificationRequired();
+ }
+
+ @Override
+ public Object getNotifier()
+ {
+ return CDOResourceImpl.this;
+ }
+
+ @Override
+ public int getFeatureID()
+ {
+ return EresourcePackage.CDO_RESOURCE__WARNINGS;
+ }
+ };
+ }
+
+ return warnings;
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public long getTimeStamp()
+ {
+ return (Long)eGet(EresourcePackage.Literals.CDO_RESOURCE__TIME_STAMP, true);
+ }
+
+ /**
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
+ *
+ * @generated
+ */
+ public void setTimeStamp(long newTimeStamp)
+ {
+ eSet(EresourcePackage.Literals.CDO_RESOURCE__TIME_STAMP, newTimeStamp);
+ }
+
+ /**
+ * @ADDED
+ * @see ResourceImpl#getAllContents()
+ */
+ public TreeIterator<EObject> getAllContents()
+ {
+ return new AbstractTreeIterator<EObject>(this, false)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Iterator<EObject> getChildren(Object object)
+ {
+ return object == CDOResourceImpl.this ? CDOResourceImpl.this.getContents().iterator() : ((EObject)object)
+ .eContents().iterator();
+ }
+ };
+ }
+
+ /**
+ * <b>Note:</b> URI from temporary objects are going to changed when we commit the CDOTransaction. Objects will not be
+ * accessible from their temporary URI once CDOTransaction is committed.
+ * <p>
+ * <b>Note:</b> This resource is not actually used to lookup the resulting object in CDO. Only the CDOView is used for
+ * this lookup! This means that this resource can be used to resolve <em>any</em> fragment with a CDOID of the
+ * associated CDOView.
+ *
+ * @ADDED
+ */
+ public EObject getEObject(String uriFragment)
+ {
+ if (uriFragment == null)
+ {
+ return null;
+ }
+
+ try
+ {
+ EObject eObjectByFragment = getEObjectByFragment(uriFragment);
+
+ if (eObjectByFragment != null)
+ {
+ return eObjectByFragment;
+ }
+
+ CDOID id = CDOIDUtil.read(uriFragment);
+ InternalCDOView view = cdoView();
+ if (CDOIDUtil.isNull(id) || view.isObjectNew(id) && !view.isObjectRegistered(id))
+ {
+ return null;
+ }
+
+ if (id.isObject())
+ {
+ CDOObject object = view.getObject(id, true);
+ return CDOUtil.getEObject(object);
+ }
+ }
+ catch (Exception ex)
+ {
+ // Do nothing
+ // Return null if the object cannot be resolved.
+ }
+
+ // If it doesn't match to anything we return null like ResourceImpl.getEObject
+ return null;
+ }
+
+ private EObject getEObjectByFragment(String uriFragment)
+ {
+ int length = uriFragment.length();
+ if (length > 0)
+ {
+ if (uriFragment.charAt(0) == '/')
+ {
+ ArrayList<String> uriFragmentPath = new ArrayList<String>(4);
+ int start = 1;
+ for (int i = 1; i < length; ++i)
+ {
+ if (uriFragment.charAt(i) == '/')
+ {
+ uriFragmentPath.add(start == i ? "" : uriFragment.substring(start, i));
+ start = i + 1;
+ }
+ }
+
+ uriFragmentPath.add(uriFragment.substring(start));
+ return getEObject(uriFragmentPath);
+ }
+ else if (uriFragment.charAt(length - 1) == '?')
+ {
+ int index = uriFragment.lastIndexOf('?', length - 2);
+ if (index > 0)
+ {
+ uriFragment = uriFragment.substring(0, index);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private EObject getEObject(List<String> uriFragmentPath)
+ {
+ int size = uriFragmentPath.size();
+ EObject eObject = getEObjectForURIFragmentRootSegment(size == 0 ? "" : uriFragmentPath.get(0));
+ for (int i = 1; i < size && eObject != null; ++i)
+ {
+ eObject = ((InternalEObject)eObject).eObjectForURIFragmentSegment(uriFragmentPath.get(i));
+ }
+
+ return eObject;
+ }
+
+ private EObject getEObjectForURIFragmentRootSegment(String uriFragmentRootSegment)
+ {
+ int position = 0;
+ if (uriFragmentRootSegment.length() > 0)
+ {
+ try
+ {
+ position = Integer.parseInt(uriFragmentRootSegment);
+ }
+ catch (NumberFormatException exception)
+ {
+ throw new RuntimeException(exception);
+ }
+ }
+
+ List<EObject> contents = getContents();
+ if (position < contents.size() && position >= 0)
+ {
+ return contents.get(position);
+ }
+
+ return null;
+ }
+
+ /**
+ * @ADDED
+ */
+ public String getURIFragment(EObject object)
+ {
+ // TODO if object == this ??? what we do. Is it wanted ? How we handle them ?
+ InternalCDOObject internalCDOObject = FSMUtil.adapt(object, cdoView());
+ StringBuilder builder = new StringBuilder();
+ CDOIDUtil.write(builder, internalCDOObject.cdoID());
+ return builder.toString();
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public void cdoInternalPreLoad()
+ {
+ try
+ {
+ load(null);
+ }
+ catch (IOException ex)
+ {
+ throw WrappedException.wrap(ex);
+ }
+ }
+
+ /**
+ * @ADDED
+ */
+ public void load(InputStream inputStream, Map<?, ?> options) throws IOException
+ {
+ // final String baseURI = getBaseURIOption(options);
+ // final Map<Resource, CDOResource> resourceMappings = new HashMap<Resource, CDOResource>();
+ //
+ // class ImportResource extends XMIResourceImpl
+ // {
+ // private CDOResource delegate;
+ //
+ // public ImportResource(CDOResource delegate)
+ // {
+ // super(URI.createURI(baseURI + delegate.getPath()));
+ // this.delegate = delegate;
+ // }
+ //
+ // @Override
+ // public EList<EObject> getContents()
+ // {
+ // return delegate.getContents();
+ // }
+ //
+ // @Override
+ // public String getURIFragment(EObject eObject)
+ // {
+ // String id = EcoreUtil.getID(eObject);
+ // if (id != null)
+ // {
+ // return id;
+ // }
+ //
+ // InternalEObject internalEObject = (InternalEObject)eObject;
+ // if (getMappedResource(internalEObject.eDirectResource()) == this)
+ // {
+ // return "/" + getURIFragmentRootSegment(eObject);
+ // }
+ //
+ // List<String> uriFragmentPath = new ArrayList<String>();
+ // boolean isContained = false;
+ // for (InternalEObject container = internalEObject.eInternalContainer(); container != null; container =
+ // internalEObject
+ // .eInternalContainer())
+ // {
+ // uriFragmentPath.add(container.eURIFragmentSegment(internalEObject.eContainingFeature(), internalEObject));
+ // internalEObject = container;
+ // if (getMappedResource(container.eDirectResource()) == this)
+ // {
+ // isContained = true;
+ // break;
+ // }
+ // }
+ //
+ // if (!isContained)
+ // {
+ // return "/-1";
+ // }
+ //
+ // StringBuilder result = new StringBuilder("/");
+ // result.append(getURIFragmentRootSegment(internalEObject));
+ //
+ // for (int i = uriFragmentPath.size() - 1; i >= 0; --i)
+ // {
+ // result.append('/');
+ // result.append(uriFragmentPath.get(i));
+ // }
+ //
+ // return result.toString();
+ // }
+ //
+ // @Override
+ // protected XMLHelper createXMLHelper()
+ // {
+ // return new XMIHelperImpl(this)
+ // {
+ // @Override
+ // public String getHREF(EObject obj)
+ // {
+ // InternalEObject o = (InternalEObject)obj;
+ //
+ // URI objectURI = o.eProxyURI();
+ // if (objectURI == null)
+ // {
+ // Resource otherResource = obj.eResource();
+ // otherResource = getMappedResource(otherResource);
+ // objectURI = getHREF(otherResource, obj);
+ // }
+ //
+ // objectURI = deresolve(objectURI);
+ // return objectURI.toString();
+ // }
+ //
+ // @Override
+ // protected URI getHREF(Resource otherResource, EObject obj)
+ // {
+ // String uriFragment = getURIFragment(otherResource, obj);
+ // if (otherResource == ImportResource.this)
+ // {
+ // return URI.createURI(uriFragment);
+ // }
+ //
+ // return otherResource.getURI().appendFragment(uriFragment);
+ // }
+ // };
+ // }
+ //
+ // private Resource getMappedResource(Resource otherResource)
+ // {
+ // Resource resource = resourceMappings.get(otherResource);
+ // if (resource != null)
+ // {
+ // return resource;
+ // }
+ //
+ // if (otherResource instanceof CDOResource)
+ // {
+ // CDOResource cdoResource = (CDOResource)otherResource;
+ // otherResource = new ImportResource(cdoResource);
+ // resourceMappings.put(cdoResource, otherResource);
+ // }
+ //
+ // return otherResource;
+ // }
+ // }
+ //
+ // XMIResource xmiResource = new ImportResource(this);
+ // resourceMappings.put(this, xmiResource);
+ // xmiResource.save(outputStream, options);
+
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * @ADDED
+ */
+ public void load(Map<?, ?> options) throws IOException
+ {
+ if (!isLoaded())
+ {
+ InternalCDOView view = cdoView();
+ if (!FSMUtil.isTransient(this))
+ {
+ CDOID id = cdoID();
+ if (id == null)
+ {
+ registerProxy(view);
+ }
+ else
+ {
+ synchronized (view)
+ {
+ if (!view.isObjectRegistered(id))
+ {
+ registerProxy(view);
+ }
+ }
+ }
+ }
+
+ Notification notification = setLoaded(true);
+ if (notification != null)
+ {
+ eNotify(notification);
+ }
+
+ // URIConverter uriConverter = getURIConverter();
+ //
+ // // If an input stream can't be created, ensure that the resource is still considered loaded after the failure,
+ // // and do all the same processing we'd do if we actually were able to create a valid input stream.
+ // //
+ // InputStream inputStream = null;
+ //
+ // try
+ // {
+ // inputStream = uriConverter.createInputStream(getURI(), options);
+ // }
+ // catch (IOException exception)
+ // {
+ // Notification notification = setLoaded(true);
+ // loading = true;
+ // if (errors != null)
+ // {
+ // errors.clear();
+ // }
+ //
+ // if (warnings != null)
+ // {
+ // warnings.clear();
+ // }
+ //
+ // loading = false;
+ // if (notification != null)
+ // {
+ // eNotify(notification);
+ // }
+ //
+ // setModified(false);
+ // throw exception;
+ // }
+ //
+ // try
+ // {
+ // load(inputStream, options);
+ // }
+ // finally
+ // {
+ // inputStream.close();
+ // // TODO Handle timeStamp
+ // // Long timeStamp = (Long)response.get(URIConverter.RESPONSE_TIME_STAMP_PROPERTY);
+ // // if (timeStamp != null)
+ // // {
+ // // setTimeStamp(timeStamp);
+ // // }
+ // }
+ }
+ }
+
+ private void registerProxy(InternalCDOView view) throws IOWrappedException
+ {
+ try
+ {
+ view.registerProxyResource(this);
+ }
+ catch (Exception ex)
+ {
+ OM.LOG.error(ex);
+ setExisting(false);
+ cdoInternalSetState(CDOState.TRANSIENT);
+ throw new IOWrappedException(ex);
+ }
+ }
+
+ /**
+ * Returns the URI converter. This typically gets the {@link ResourceSet#getURIConverter converter} from the
+ * {@link #getResourceSet containing} resource set, but it calls {@link #getDefaultURIConverter} when there is no
+ * containing resource set.
+ *
+ * @return the URI converter.
+ * @ADDED
+ */
+ @SuppressWarnings("unused")
+ private URIConverter getURIConverter()
+ {
+ return getResourceSet() == null ? getDefaultURIConverter() : getResourceSet().getURIConverter();
+ }
+
+ /**
+ * Returns the default URI converter that's used when there is no resource set.
+ *
+ * @return the default URI converter.
+ * @see #getURIConverter
+ * @ADDED
+ */
+ private static synchronized URIConverter getDefaultURIConverter()
+ {
+ if (defaultURIConverter == null)
+ {
+ defaultURIConverter = new ExtensibleURIConverterImpl();
+ }
+
+ return defaultURIConverter;
+ }
+
+ /**
+ * @ADDED
+ */
+ public void save(Map<?, ?> options) throws IOException
+ {
+ CDOTransaction transaction = getTransaction(options);
+ IProgressMonitor progressMonitor = options != null ? (IProgressMonitor)options
+ .get(CDOResource.OPTION_SAVE_PROGRESS_MONITOR) : null;
+
+ try
+ {
+ transaction.commit(progressMonitor);
+ }
+ catch (CommitException ex)
+ {
+ throw new TransactionException(ex);
+ }
+
+ setModified(false);
+ }
+
+ /**
+ * @ADDED
+ */
+ private CDOTransaction getTransaction(Map<?, ?> options)
+ {
+ CDOTransaction transaction = options != null ? (CDOTransaction)options
+ .get(CDOResource.OPTION_SAVE_OVERRIDE_TRANSACTION) : null;
+
+ if (transaction == null)
+ {
+ CDOView view = cdoView();
+ if (view instanceof CDOTransaction)
+ {
+ transaction = (CDOTransaction)view;
+ }
+ else
+ {
+ throw new IllegalStateException("No transaction available");
+ }
+ }
+
+ return transaction;
+ }
+
+ /**
+ * @ADDED
+ */
+ public void save(OutputStream outputStream, Map<?, ?> options) throws IOException
+ {
+ final String baseURI = getBaseURIOption(options);
+ final Map<CDOResource, Resource> resourceMappings = new HashMap<CDOResource, Resource>();
+
+ class ExportResource extends XMIResourceImpl
+ {
+ private CDOResource delegate;
+
+ public ExportResource(CDOResource delegate)
+ {
+ super(URI.createURI(baseURI + delegate.getPath()));
+ this.delegate = delegate;
+ }
+
+ @Override
+ public EList<EObject> getContents()
+ {
+ return delegate.getContents();
+ }
+
+ // @Override
+ // public String getURIFragment(EObject eObject)
+ // {
+ // String id = EcoreUtil.getID(eObject);
+ // if (id != null)
+ // {
+ // return id;
+ // }
+ //
+ // InternalEObject internalEObject = (InternalEObject)eObject;
+ // if (getMappedResource(internalEObject.eDirectResource()) == this)
+ // {
+ // return "/" + getURIFragmentRootSegment(eObject);
+ // }
+ //
+ // List<String> uriFragmentPath = new ArrayList<String>();
+ // boolean isContained = false;
+ // for (InternalEObject container = internalEObject.eInternalContainer(); container != null; container =
+ // internalEObject
+ // .eInternalContainer())
+ // {
+ // uriFragmentPath.add(container.eURIFragmentSegment(internalEObject.eContainingFeature(), internalEObject));
+ // internalEObject = container;
+ // if (getMappedResource(container.eDirectResource()) == this)
+ // {
+ // isContained = true;
+ // break;
+ // }
+ // }
+ //
+ // if (!isContained)
+ // {
+ // return "/-1";
+ // }
+ //
+ // StringBuilder result = new StringBuilder("/");
+ // result.append(getURIFragmentRootSegment(internalEObject));
+ //
+ // for (int i = uriFragmentPath.size() - 1; i >= 0; --i)
+ // {
+ // result.append('/');
+ // result.append(uriFragmentPath.get(i));
+ // }
+ //
+ // return result.toString();
+ // }
+
+ @Override
+ protected boolean useUUIDs()
+ {
+ return true;
+ }
+
+ @Override
+ protected boolean useIDAttributes()
+ {
+ return false;
+ }
+
+ @Override
+ public String getID(EObject eObject)
+ {
+ CDOObject cdoObject = CDOUtil.getCDOObject(eObject);
+ StringBuilder builder = new StringBuilder();
+ CDOIDUtil.write(builder, cdoObject.cdoID());
+ return builder.toString();
+ }
+
+ @Override
+ protected XMLHelper createXMLHelper()
+ {
+ return new XMIHelperImpl(this)
+ {
+ @Override
+ public String getHREF(EObject obj)
+ {
+ InternalEObject o = (InternalEObject)obj;
+
+ URI objectURI = o.eProxyURI();
+ if (objectURI == null)
+ {
+ Resource otherResource = obj.eResource();
+ otherResource = getMappedResource(otherResource);
+ objectURI = getHREF(otherResource, obj);
+ }
+
+ objectURI = deresolve(objectURI);
+ return objectURI.toString();
+ }
+
+ @Override
+ protected URI getHREF(Resource otherResource, EObject obj)
+ {
+ String uriFragment = getURIFragment(otherResource, obj);
+ if (otherResource == ExportResource.this)
+ {
+ return URI.createURI(uriFragment);
+ }
+
+ return otherResource.getURI().appendFragment(uriFragment);
+ }
+ };
+ }
+
+ private Resource getMappedResource(Resource otherResource)
+ {
+ Resource resource = resourceMappings.get(otherResource);
+ if (resource != null)
+ {
+ return resource;
+ }
+
+ if (otherResource instanceof CDOResource)
+ {
+ CDOResource cdoResource = (CDOResource)otherResource;
+ otherResource = new ExportResource(cdoResource);
+ resourceMappings.put(cdoResource, otherResource);
+ }
+
+ return otherResource;
+ }
+ }
+
+ XMIResource xmiResource = new ExportResource(this);
+ resourceMappings.put(this, xmiResource);
+ xmiResource.save(outputStream, options);
+ }
+
+ private String getBaseURIOption(Map<?, ?> options)
+ {
+ if (options != null)
+ {
+ String uri = (String)options.get(OPTION_SAVE_BASE_URI);
+ if (uri != null)
+ {
+ return uri;
+ }
+ }
+
+ return "cdo://";
+ }
+
+ /**
+ * @ADDED
+ */
+ public void unload()
+ {
+ // Do nothing
+ }
+
+ /**
+ * @ADDED
+ */
+ public void delete(Map<?, ?> options) throws IOException
+ {
+ if (FSMUtil.isTransient(this))
+ {
+ removeFromResourceSet();
+ }
+ else
+ {
+ if (isRoot())
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ if (getFolder() == null)
+ {
+ InternalCDOView view = cdoView();
+ view.getRootResource().getContents().remove(this);
+ }
+ else
+ {
+ basicSetFolder(null, false);
+ }
+ }
+ }
+
+ private void removeFromResourceSet()
+ {
+ final ResourceSet resourceSet = getResourceSet();
+ if (resourceSet != null)
+ {
+ InternalCDOViewSet viewSet = (InternalCDOViewSet)CDOUtil.getViewSet(resourceSet);
+ viewSet.executeWithoutNotificationHandling(new Callable<Boolean>()
+ {
+ public Boolean call() throws Exception
+ {
+ resourceSet.getResources().remove(CDOResourceImpl.this);
+ return true;
+ }
+ });
+ }
+ }
+
+ /**
+ * @ADDED
+ */
+ public void attached(EObject object)
+ {
+ if (!FSMUtil.isTransient(this))
+ {
+ InternalCDOView view = cdoView();
+ if (view instanceof InternalCDOTransaction) // Bug 376075
+ {
+ InternalCDOTransaction transaction = (InternalCDOTransaction)view;
+ InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
+
+ if (CDOUtil.isLegacyObject(cdoObject) && FSMUtil.isClean(cdoObject))
+ {
+ // Bug 352204
+ return;
+ }
+
+ attached(cdoObject, transaction);
+ }
+ }
+ }
+
+ /**
+ * @ADDED
+ */
+ private void attached(InternalCDOObject cdoObject, InternalCDOTransaction transaction)
+ {
+ CDOStateMachine.INSTANCE.attach(cdoObject, transaction);
+ }
+
+ /**
+ * @ADDED
+ */
+ public void detached(EObject object)
+ {
+ if (!FSMUtil.isTransient(this))
+ {
+ InternalCDOView view = cdoView();
+ if (view instanceof InternalCDOTransaction) // Bug 376075
+ {
+ InternalCDOObject cdoObject = FSMUtil.adapt(object, view);
+ CDOStateMachine.INSTANCE.detach(cdoObject);
+ }
+ }
+ }
+
+ /**
+ * @ADDED
+ * @see ResourceImpl#basicSetResourceSet(ResourceSet, NotificationChain)
+ */
+ public NotificationChain basicSetResourceSet(ResourceSet resourceSet, NotificationChain notifications)
+ {
+ final ResourceSet oldResourceSet = getResourceSet();
+ if (oldResourceSet != null)
+ {
+ final NotificationChain finalNotifications = notifications;
+
+ InternalCDOViewSet viewSet = (InternalCDOViewSet)CDOUtil.getViewSet(oldResourceSet);
+ notifications = viewSet.executeWithoutNotificationHandling(new Callable<NotificationChain>()
+ {
+ public NotificationChain call() throws Exception
+ {
+ return ((InternalEList<Resource>)oldResourceSet.getResources()).basicRemove(this, finalNotifications);
+ }
+ });
+ }
+
+ setResourceSet(resourceSet);
+
+ if (resourceSet != null)
+ {
+ InternalCDOView view = cdoView();
+ if (view == null)
+ {
+ URI uri = getURI();
+ Pair<CDOView, CDOViewProvider> pair = CDOViewProviderRegistry.INSTANCE.provideViewWithInfo(uri, resourceSet);
+ if (pair != null)
+ {
+ view = (InternalCDOView)pair.getElement1();
+ view.attachResource(this);
+
+ viewProvider = pair.getElement2();
+ }
+ }
+
+ String query = getURI().query();
+ if (query != null && query.length() != 0)
+ {
+ Map<String, String> parameters = CDOURIUtil.getParameters(query);
+ String value = parameters.get(CDOResource.PREFETCH_PARAMETER);
+ if (value != null)
+ {
+ boolean prefetch = Boolean.parseBoolean(value);
+ if (prefetch)
+ {
+ cdoPrefetch(CDORevision.DEPTH_INFINITE);
+ }
+ }
+ }
+ }
+
+ if (eNotificationRequired())
+ {
+ if (notifications == null)
+ {
+ notifications = new NotificationChainImpl(2);
+ }
+
+ notifications.add(new NotificationImpl(Notification.SET, oldResourceSet, resourceSet)
+ {
+ @Override
+ public Object getNotifier()
+ {
+ return CDOResourceImpl.this;
+ }
+
+ @Override
+ public int getFeatureID(Class<?> expectedClass)
+ {
+ return RESOURCE__RESOURCE_SET;
+ }
+ });
+ }
+
+ return notifications;
+ }
+
+ /**
+ * @ADDED
+ */
+ public boolean isLoading()
+ {
+ return loading;
+ }
+
+ /**
+ * @ADDED
+ */
+ public boolean isExisting()
+ {
+ return existing;
+ }
+
+ /**
+ * @ADDED
+ * @since 3.0
+ */
+ protected void setExisting(boolean existing)
+ {
+ this.existing = existing;
+ }
+
+ /**
+ * @ADDED
+ */
+ @Override
+ protected EList<?> createList(EStructuralFeature eStructuralFeature)
+ {
+ if (eStructuralFeature == CDO_RESOURCE_CONTENTS)
+ {
+ return new ContentsCDOList(CDO_RESOURCE_CONTENTS);
+ // return new _ContentsCDOList<EObject>();
+ }
+
+ return super.createList(eStructuralFeature);
+ }
+
+ // /**
+ // * A notifying list implementation for supporting {@link Resource#getContents}.
+ // */
+ // protected class _ContentsCDOList<E extends Object & EObject> extends ResourceContentsEList<E>
+ // {
+ // private static final long serialVersionUID = 1L;
+ //
+ // @Override
+ // public int getFeatureID()
+ // {
+ // return CDO_RESOURCE_CONTENTS.getFeatureID();
+ // }
+ //
+ // @Override
+ // protected CDOResourceImpl getResource()
+ // {
+ // return CDOResourceImpl.this;
+ // }
+ //
+ // @Override
+ // protected Notification setLoaded(boolean loaded)
+ // {
+ // return getResource().setLoaded(loaded);
+ // }
+ //
+ // @Override
+ // protected boolean isNotificationRequired()
+ // {
+ // return getResource().eNotificationRequired();
+ // }
+ //
+ // @Override
+ // public NotificationChain inverseAdd(E object, NotificationChain notifications)
+ // {
+ // if (FSMUtil.isTransient(getResource()))
+ // {
+ // InternalEObject eObject = (InternalEObject)object;
+ // return eObject.eSetResource(CDOResourceImpl.this, notifications);
+ // // return super.inverseAdd(object, notifications);
+ // }
+ //
+ // InternalCDOTransaction transaction = cdoView().toTransaction();
+ // InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
+ // notifications = cdoObject.eSetResource(getResource(), notifications);
+ //
+ // // Attach here instead of in CDOObjectImpl.eSetResource because EMF does it also here
+ // if (FSMUtil.isTransient(cdoObject))
+ // {
+ // attached(cdoObject, transaction);
+ // }
+ //
+ // return notifications;
+ // }
+ //
+ // @Override
+ // public NotificationChain inverseRemove(E object, NotificationChain notifications)
+ // {
+ // if (FSMUtil.isTransient(getResource()))
+ // {
+ // InternalEObject eObject = (InternalEObject)object;
+ // return eObject.eSetResource(null, notifications);
+ // // return super.inverseRemove(object, notifications);
+ // }
+ //
+ // InternalEObject eObject = (InternalEObject)object;
+ // detached(eObject);
+ // return eObject.eSetResource(null, notifications);
+ // }
+ // }
+
+ /**
+ * An implementation of a CDO specific '<em><b>contents</b></em>' list.
+ *
+ * @ADDED
+ * @author Eike Stepper
+ * @since 2.0
+ */
+ protected class ContentsCDOList extends BasicEStoreEList<Object>
+ {
+ private static final long serialVersionUID = 1L;
+
+ public ContentsCDOList(EStructuralFeature eStructuralFeature)
+ {
+ super(CDOResourceImpl.this, eStructuralFeature);
+ }
+
+ /**
+ * Optimization taken from ResourceImpl.EContentList.contains.
+ *
+ * @since 2.0
+ */
+ @Override
+ public boolean contains(Object object)
+ {
+ if (size() <= 4)
+ {
+ return super.contains(object);
+ }
+
+ return object instanceof InternalEObject && ((InternalEObject)object).eDirectResource() == CDOResourceImpl.this;
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public NotificationChain inverseAdd(Object object, NotificationChain notifications)
+ {
+ if (FSMUtil.isTransient(CDOResourceImpl.this))
+ {
+ InternalEObject eObject = (InternalEObject)object;
+ notifications = eObject.eSetResource(CDOResourceImpl.this, notifications);
+ }
+ else
+ {
+ InternalCDOTransaction transaction = cdoView().toTransaction();
+ InternalCDOObject cdoObject = FSMUtil.adapt(object, transaction);
+ notifications = cdoObject.eSetResource(CDOResourceImpl.this, notifications);
+
+ // Attach here instead of in CDOObjectImpl.eSetResource because EMF does it also here
+ if (FSMUtil.isTransient(cdoObject))
+ {
+ attached(cdoObject, transaction);
+ }
+ }
+
+ return notifications;
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ public NotificationChain inverseRemove(Object object, NotificationChain notifications)
+ {
+ if (FSMUtil.isTransient(CDOResourceImpl.this))
+ {
+ InternalEObject eObject = (InternalEObject)object;
+ notifications = eObject.eSetResource(null, notifications);
+ }
+ else
+ {
+ InternalEObject eObject = (InternalEObject)object;
+ detached(eObject);
+ notifications = eObject.eSetResource(null, notifications);
+ }
+
+ return notifications;
+ }
+
+ /**
+ * @since 2.0
+ */
+ protected void loaded()
+ {
+ Notification notification = setLoaded(true);
+ if (notification != null)
+ {
+ eNotify(notification);
+ }
+ }
+
+ /**
+ * @since 2.0
+ */
+ protected void modified()
+ {
+ if (isTrackingModification())
+ {
+ setModified(true);
+ }
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ protected boolean useEquals()
+ {
+ return false;
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ protected boolean hasInverse()
+ {
+ return true;
+ }
+
+ /**
+ * @since 2.0
+ */
+ @Override
+ protected boolean isUnique()
+ {
+ return true;
+ }
+
+ /**
+ * @since 4.0
+ */
+ @Override
+ protected void didAdd(int index, Object newObject)
+ {
+ super.didAdd(index, newObject);
+
+ if (!isExisting() && !isLoaded())
+ {
+ loaded();
+ }
+ }
+
+ /**
+ * @since 4.0
+ */
+ @Override
+ protected void didClear(int size, Object[] oldObjects)
+ {
+ super.didClear(size, oldObjects);
+
+ if (!isExisting() && !isLoaded())
+ {
+ loaded();
+ }
+ }
+ }
+} // CDOResourceImpl
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIData.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIData.java
index 72ca20e9ab..0d3724de9f 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIData.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIData.java
@@ -10,8 +10,12 @@
*/
package org.eclipse.emf.cdo.util;
+import org.eclipse.emf.cdo.common.CDOCommonRepository;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+
+import org.eclipse.net4j.util.security.IUserManager;
import org.eclipse.emf.common.util.URI;
@@ -19,9 +23,45 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import java.util.Map;
+import java.util.Map.Entry;
/**
- * Represents the CDO-specific URI data needed to access a resource in a repository.
+ * Represents a CDO-specific {@link URI} in connection-aware format.
+ * <p>
+ * CDO URIs are in one of two different formats, either canonical or connection-aware. The connection-aware format is:
+ *
+ * <blockquote><b>cdo.net4j.</b> <i>ConnectorType</i> <b>://</b> [<i>User</i> [<b>:</b> <i>Password</i>] <b>@</b>]
+ * <i>ConnectorSpecificAuthority</i> <b>/</b> <i>RepositoryName</i> <b>/</b> <i>ResourcePath</i> [<b>?</b> <i>Param</i><b>=</b><i>Value</i>
+ * (<b>&</b> <i>Param</i><b>=</b><i>Value</i>)*]</blockquote>
+ *
+ * The non-terminals being:
+ * <p>
+ * <ul>
+ * <li><i>ConnectorType</i>: one of <b>tcp</b> | <b>ssl</b> | <b>jvm</b> | <b>http</b>
+ * <li><i>User/Password</i>: to be provided if the repository is configured with an
+ * {@link IUserManager} and, hence, triggers authentication on the client. Note: the
+ * password may be stored in resources in clear text!
+ * <li><i>ConnectorSpecificAuthority</i>: examples are
+ * <ul>
+ * <li><i>Host</i> [<b>:</b> <i>Port</i>] (if <i>ConnectorType</i> is <b>tcp</b>)
+ * <li><i>AcceptorName</i> (if <i>ConnectorType</i> is <b>jvm</b>)
+ * </ul>
+ * <li><i>RepositoryName</i>: the {@link CDOCommonRepository#getName() name} of the repository (not the {@link CDOCommonRepository#getUUID() UUID}!).
+ * <li><i>ResourcePath</i>: the full path of the {@link CDOResource resource} within the repository, segments separated by slashes, no leading slash.
+ * <li><i>Param</i>: one of the following
+ * <ul>
+ * <li><b>branch</b>: the value must be a {@link CDOBranch#getPathName() branch path}, the full path of the branch in the branch tree, segments separated by slashes, no leading slash, defaults to <b>MAIN</b>.
+ * <li><b>time</b>: the value must be the time at which the resource is supposed to be valid, parseable by SimpleDateFormat. The special value <b>HEAD</b> indicates a floating view/transaction that always shows the latest state in the chosen branch, the default if no <i>Time</i> parameter is specified.
+ * <li><b>transactional</b>: a boolean value. The value <b>true</b> forces a the resource to be opened in a transaction rather than in a read-only view. This can not be combined with a <i>Time</i> other than <b>HEAD</b>.
+ * <li><b>prefetch</b>: a boolean value. The value <b>true</b> attempts to load all objects contained by the resource in a single server-round trip and cache the results.
+ * </ul>
+ * </ul>
+ * <p>
+ * Note: With the current design and implementation of connection-aware URI
+ * (mainly CDONet4jViewProvider) it is still unclear when and how the allocated
+ * "resources" (aka IConnector, CDOSession, CDOView, etc) are supposed to be freed!
+ * <p>
+ * For a description of the canonical URI format refer to {@link CDOURIUtil}.
*
* @author Eike Stepper
* @since 4.0
@@ -59,6 +99,8 @@ public final class CDOURIData
private boolean transactional;
+ private Map<String, String> extraParameters;
+
public CDOURIData()
{
}
@@ -95,16 +137,16 @@ public final class CDOURIData
resourcePath = path.removeFirstSegments(1);
String query = uri.query();
- if (query != null)
+ if (query != null && query.length() != 0)
{
Map<String, String> parameters = CDOURIUtil.getParameters(query);
- String branch = parameters.get(BRANCH_PARAMETER);
+ String branch = parameters.remove(BRANCH_PARAMETER);
if (branch != null)
{
branchPath = new Path(branch).makeRelative();
}
- String time = parameters.get(TIME_PARAMETER);
+ String time = parameters.remove(TIME_PARAMETER);
if (time != null)
{
if (!"HEAD".equalsIgnoreCase(time))
@@ -113,13 +155,18 @@ public final class CDOURIData
}
}
- viewID = parameters.get(VIEW_ID_PARAMETER);
+ viewID = parameters.remove(VIEW_ID_PARAMETER);
- String transactional = parameters.get(TRANSACTIONAL_PARAMETER);
+ String transactional = parameters.remove(TRANSACTIONAL_PARAMETER);
if (transactional != null)
{
this.transactional = Boolean.parseBoolean(transactional);
}
+
+ if (!parameters.isEmpty())
+ {
+ extraParameters = parameters;
+ }
}
if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE && transactional)
@@ -269,6 +316,14 @@ public final class CDOURIData
this.transactional = transactional;
}
+ /**
+ * @since 4.1
+ */
+ public Map<String, String> getExtraParameters()
+ {
+ return extraParameters;
+ }
+
public URI toURI()
{
return URI.createURI(toString());
@@ -335,6 +390,17 @@ public final class CDOURIData
builder.append(transactional);
}
+ if (extraParameters != null)
+ {
+ for (Entry<String, String> entry : extraParameters.entrySet())
+ {
+ builder.append(params++ == 0 ? "?" : "&");
+ builder.append(entry.getKey());
+ builder.append("=");
+ builder.append(entry.getValue());
+ }
+ }
+
return builder.toString();
}
}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
index e526a8e18f..328c45a05a 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/util/CDOURIUtil.java
@@ -1,231 +1,261 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Simon McDuff - initial API and implementation
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.util;
-
-import org.eclipse.emf.cdo.common.id.CDOID;
-import org.eclipse.emf.cdo.common.id.CDOIDUtil;
-import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.view.CDOView;
-
-import org.eclipse.net4j.util.StringUtil;
-
-import org.eclipse.emf.common.util.URI;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-/**
- * Various static methods that may help with CDO-specific {@link URI URIs}.
- *
- * @author Simon McDuff
- * @since 2.0
- */
-public final class CDOURIUtil
-{
- /**
- * @since 4.0
- */
- public static final String PROTOCOL_NAME = CDOProtocolConstants.PROTOCOL_NAME;
-
- public static final char SEGMENT_SEPARATOR_CHAR = '/';
-
- public static final String SEGMENT_SEPARATOR = new String(new char[] { SEGMENT_SEPARATOR_CHAR });
-
- static
- {
- CDOUtil.registerResourceFactory(null); // Ensure that the normal resource factory is registered
- }
-
- private CDOURIUtil()
- {
- }
-
- public static void validateURI(URI uri) throws InvalidURIException
- {
- // if (!CDOProtocolConstants.PROTOCOL_NAME.equals(uri.scheme()))
- // {
- // throw new InvalidURIException(uri);
- // }
- //
- // if (!uri.isHierarchical())
- // {
- // throw new InvalidURIException(uri);
- // }
- }
-
- public static String extractRepositoryUUID(URI uri)
- {
- try
- {
- validateURI(uri);
- if (!uri.hasAuthority())
- {
- throw new InvalidURIException(uri);
- }
-
- return uri.authority();
- }
- catch (InvalidURIException ex)
- {
- return null;
- }
- }
-
- public static String[] extractResourceFolderAndName(URI uri) throws InvalidURIException
- {
- String path = extractResourcePath(uri);
- int lastSeparator = path.lastIndexOf(SEGMENT_SEPARATOR_CHAR);
- if (lastSeparator == -1)
- {
- return new String[] { null, path };
- }
-
- String folder = path.substring(0, lastSeparator);
- String name = path.substring(lastSeparator + 1);
- return new String[] { folder, name };
- }
-
- public static String extractResourcePath(URI uri) throws InvalidURIException
- {
- if (!PROTOCOL_NAME.equals(uri.scheme()))
- {
- CDOURIData data = new CDOURIData(uri);
- return data.getResourcePath().toPortableString();
- }
-
- validateURI(uri);
- String path = uri.path();
- if (path == null)
- {
- return SEGMENT_SEPARATOR;
- }
-
- return path;
- }
-
- /**
- * <p>
- * cdo://repositoryUUID/path
- * <p>
- * The path is added at the end of "cdo://repositoryUUID". If path doesn't start with '/', it will be added
- * automatically. <br>
- * e.g.: /resA or resA will give the same result -> cdo://repositoryUUID/resA <br>
- * authority = repositoryUUID <br>
- * path = /resA
- */
- public static URI createResourceURI(String repositoryUUID, String path)
- {
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(PROTOCOL_NAME);
- stringBuilder.append(":"); //$NON-NLS-1$
-
- if (repositoryUUID != null)
- {
- stringBuilder.append("//"); //$NON-NLS-1$
- stringBuilder.append(repositoryUUID);
- }
-
- if (!SEGMENT_SEPARATOR.equals(path))
- {
- if (path.charAt(0) != SEGMENT_SEPARATOR_CHAR)
- {
- stringBuilder.append(SEGMENT_SEPARATOR_CHAR);
- }
-
- stringBuilder.append(path);
- }
-
- return URI.createURI(stringBuilder.toString());
- }
-
- public static URI createResourceURI(CDOView view, String path)
- {
- return createResourceURI(view == null ? null : view.getSession(), path);
- }
-
- public static URI createResourceURI(CDOSession session, String path)
- {
- return createResourceURI(session == null ? null : session.getRepositoryInfo().getUUID(), path);
- }
-
- /**
- * Converting temporary CDOID to External CDOID <br>
- * e.g.: <br>
- * baseURI = cdo://2a57dfcf-8f97-4d39-8e17-9d99ae5c4b3c/resB#5/2<br>
- * newCDOID = OID2<br>
- * return = cdo://2a57dfcf-8f97-4d39-8e17-9d99ae5c4b3c/resB#1/2
- */
- public static CDOID convertExternalCDOID(URI baseURI, CDOID newCDOID)
- {
- StringBuilder builder = new StringBuilder();
- CDOIDUtil.write(builder, newCDOID);
-
- baseURI = baseURI.trimFragment().appendFragment(builder.toString());
- return CDOIDUtil.createExternal(baseURI.toString());
- }
-
- public static List<String> analyzePath(URI uri)
- {
- String path = extractResourcePath(uri);
- return analyzePath(path);
- }
-
- public static List<String> analyzePath(String path)
- {
- List<String> segments = new ArrayList<String>();
- StringTokenizer tokenizer = new StringTokenizer(path, CDOURIUtil.SEGMENT_SEPARATOR);
- while (tokenizer.hasMoreTokens())
- {
- String name = tokenizer.nextToken();
- if (name != null)
- {
- segments.add(name);
- }
- }
-
- return segments;
- }
-
- /**
- * @since 4.0
- */
- public static Map<String, String> getParameters(String query)
- {
- Map<String, String> result = new HashMap<String, String>();
- StringTokenizer tokenizer = new StringTokenizer(query, "&"); //$NON-NLS-1$
- while (tokenizer.hasMoreTokens())
- {
- String parameter = tokenizer.nextToken();
- if (!StringUtil.isEmpty(parameter))
- {
- int pos = parameter.indexOf('=');
- if (pos == -1)
- {
- String key = parameter.trim();
- result.put(key, ""); //$NON-NLS-1$
- }
- else
- {
- String key = parameter.substring(0, pos).trim();
- String value = parameter.substring(pos + 1);
- result.put(key, value);
- }
- }
- }
-
- return result;
- }
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Simon McDuff - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.util;
+
+import org.eclipse.emf.cdo.common.CDOCommonRepository;
+import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.common.id.CDOIDUtil;
+import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
+import org.eclipse.emf.cdo.eresource.CDOResource;
+import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.view.CDOView;
+
+import org.eclipse.net4j.util.StringUtil;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+/**
+ * Various static methods that may help with CDO-specific {@link URI URIs}.
+ * <p>
+ * CDO URIs are in one of two different formats, either canonical or connection-aware. The canonical format is:
+ *
+ * <blockquote><b>cdo://</b> <i>RepositoryUUID</i> <b>/</b> <i>ResourcePath</i> [<b>?</b> <i>Param</i><b>=</b><i>Value</i>
+ * (<b>&</b> <i>Param</i><b>=</b><i>Value</i>)*]</blockquote>
+ *
+ * The non-terminals being:
+ * <p>
+ * <ul>
+ * <li><i>RepositoryUUID</i>: the {@link CDOCommonRepository#getUUID() UUID} of the repository. By default it's generated when a repository is first started.
+ * If the default format is not adequate the UUID value can be overridden in the repository setup with the <code>overrideUUID</code> property.
+ * <li><i>ResourcePath</i>: the full path of the {@link CDOResource resource} within the repository, segments separated by slashes, no leading slash.
+ * <li><i>Param</i>: one of the following
+ * <ul>
+ * <li><b>prefetch</b>: a boolean value. The value <b>true</b> attempts to load all objects contained by the resource in a single server-round trip and cache the results.
+ * </ul>
+ * </ul>
+ *
+ * URIs in the canonical form to resolve to {@link CDOResource resources} properly require the {@link ResourceSet resource set} to be
+ * configured <i>externally</i> so that the connection to the correct repository can be established, for example:
+ * <blockquote><code>session.openView(resourceSet);</code></blockquote>
+ *
+ * Note that resources preserve their original URI in the scope of the managing {@link CDOView view}, that is not necessarily in canonical format.
+ * <p>
+ * For a description of the connection-aware URI format refer to {@link CDOURIData}.
+ *
+ * @author Simon McDuff
+ * @since 2.0
+ */
+public final class CDOURIUtil
+{
+ /**
+ * @since 4.0
+ */
+ public static final String PROTOCOL_NAME = CDOProtocolConstants.PROTOCOL_NAME;
+
+ public static final char SEGMENT_SEPARATOR_CHAR = '/';
+
+ public static final String SEGMENT_SEPARATOR = new String(new char[] { SEGMENT_SEPARATOR_CHAR });
+
+ static
+ {
+ CDOUtil.registerResourceFactory(null); // Ensure that the normal resource factory is registered
+ }
+
+ private CDOURIUtil()
+ {
+ }
+
+ /**
+ * @deprecated
+ */
+ @Deprecated
+ public static void validateURI(URI uri) throws InvalidURIException
+ {
+ // if (!CDOProtocolConstants.PROTOCOL_NAME.equals(uri.scheme()))
+ // {
+ // throw new InvalidURIException(uri);
+ // }
+ //
+ // if (!uri.isHierarchical())
+ // {
+ // throw new InvalidURIException(uri);
+ // }
+ }
+
+ public static String extractRepositoryUUID(URI uri)
+ {
+ try
+ {
+ if (!uri.hasAuthority())
+ {
+ throw new InvalidURIException(uri);
+ }
+
+ return uri.authority();
+ }
+ catch (InvalidURIException ex)
+ {
+ return null;
+ }
+ }
+
+ public static String[] extractResourceFolderAndName(URI uri) throws InvalidURIException
+ {
+ String path = extractResourcePath(uri);
+ int lastSeparator = path.lastIndexOf(SEGMENT_SEPARATOR_CHAR);
+ if (lastSeparator == -1)
+ {
+ return new String[] { null, path };
+ }
+
+ String folder = path.substring(0, lastSeparator);
+ String name = path.substring(lastSeparator + 1);
+ return new String[] { folder, name };
+ }
+
+ public static String extractResourcePath(URI uri) throws InvalidURIException
+ {
+ if (!PROTOCOL_NAME.equals(uri.scheme()))
+ {
+ CDOURIData data = new CDOURIData(uri);
+ return data.getResourcePath().toPortableString();
+ }
+
+ String path = uri.path();
+ if (path == null)
+ {
+ return SEGMENT_SEPARATOR;
+ }
+
+ return path;
+ }
+
+ /**
+ * <p>
+ * cdo://repositoryUUID/path
+ * <p>
+ * The path is added at the end of "cdo://repositoryUUID". If path doesn't start with '/', it will be added
+ * automatically. <br>
+ * e.g.: /resA or resA will give the same result -> cdo://repositoryUUID/resA <br>
+ * authority = repositoryUUID <br>
+ * path = /resA
+ */
+ public static URI createResourceURI(String repositoryUUID, String path)
+ {
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append(PROTOCOL_NAME);
+ stringBuilder.append(":"); //$NON-NLS-1$
+
+ if (repositoryUUID != null)
+ {
+ stringBuilder.append("//"); //$NON-NLS-1$
+ stringBuilder.append(repositoryUUID);
+ }
+
+ if (!SEGMENT_SEPARATOR.equals(path))
+ {
+ if (path.charAt(0) != SEGMENT_SEPARATOR_CHAR)
+ {
+ stringBuilder.append(SEGMENT_SEPARATOR_CHAR);
+ }
+
+ stringBuilder.append(path);
+ }
+
+ return URI.createURI(stringBuilder.toString());
+ }
+
+ public static URI createResourceURI(CDOView view, String path)
+ {
+ return createResourceURI(view == null ? null : view.getSession(), path);
+ }
+
+ public static URI createResourceURI(CDOSession session, String path)
+ {
+ return createResourceURI(session == null ? null : session.getRepositoryInfo().getUUID(), path);
+ }
+
+ /**
+ * Converting temporary CDOID to External CDOID <br>
+ * e.g.: <br>
+ * baseURI = cdo://2a57dfcf-8f97-4d39-8e17-9d99ae5c4b3c/resB#5/2<br>
+ * newCDOID = OID2<br>
+ * return = cdo://2a57dfcf-8f97-4d39-8e17-9d99ae5c4b3c/resB#1/2
+ */
+ public static CDOID convertExternalCDOID(URI baseURI, CDOID newCDOID)
+ {
+ StringBuilder builder = new StringBuilder();
+ CDOIDUtil.write(builder, newCDOID);
+
+ baseURI = baseURI.trimFragment().appendFragment(builder.toString());
+ return CDOIDUtil.createExternal(baseURI.toString());
+ }
+
+ public static List<String> analyzePath(URI uri)
+ {
+ String path = extractResourcePath(uri);
+ return analyzePath(path);
+ }
+
+ public static List<String> analyzePath(String path)
+ {
+ List<String> segments = new ArrayList<String>();
+ StringTokenizer tokenizer = new StringTokenizer(path, CDOURIUtil.SEGMENT_SEPARATOR);
+ while (tokenizer.hasMoreTokens())
+ {
+ String name = tokenizer.nextToken();
+ if (name != null)
+ {
+ segments.add(name);
+ }
+ }
+
+ return segments;
+ }
+
+ /**
+ * @since 4.0
+ */
+ public static Map<String, String> getParameters(String query)
+ {
+ Map<String, String> result = new HashMap<String, String>();
+ StringTokenizer tokenizer = new StringTokenizer(query, "&"); //$NON-NLS-1$
+ while (tokenizer.hasMoreTokens())
+ {
+ String parameter = tokenizer.nextToken();
+ if (!StringUtil.isEmpty(parameter))
+ {
+ int pos = parameter.indexOf('=');
+ if (pos == -1)
+ {
+ String key = parameter.trim();
+ result.put(key, ""); //$NON-NLS-1$
+ }
+ else
+ {
+ String key = parameter.substring(0, pos).trim();
+ String value = parameter.substring(pos + 1);
+ result.put(key, value);
+ }
+ }
+ }
+
+ return result;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
index 1508623872..3d043e63c5 100644
--- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
+++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDOViewProvider.java
@@ -1,56 +1,56 @@
-/*
- * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Victor Roldan Betancort - initial API and implementation
- * Eike Stepper - maintenance
- */
-package org.eclipse.emf.cdo.view;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-
-/**
- * Capable of opening a <code>CDOView</code> on a target repository, defined by a URI. A regular expression and the
- * priority are used to determine the most suitable provider.
- *
- * @since 2.0
- * @author Victor Roldan Betancort
- */
-public interface CDOViewProvider
-{
- public static final int DEFAULT_PRIORITY = 500;
-
- /**
- * Returns the priority of this provider. Usually used to choose between several <code>CDOViewProvider</code> that
- * match the same repository URI.
- */
- public int getPriority();
-
- /**
- * Returns the regular expression that determines if the provider can handle certain URI
- */
- public String getRegex();
-
- /**
- * Checks if the URI matches with the regular expression of this provider
- */
- public boolean matchesRegex(URI uri);
-
- /**
- * Receives a URI and returns an opened <code>CDOView</code> against the repository. The implementer is responsible to
- * do the UUID to physical host map in case necessary.
- *
- * @return a wired-up and opened <code>CDOView</code>
- */
- public CDOView getView(URI uri, ResourceSet resourceSet);
-
- /**
- * @since 4.0
- */
- public URI getResourceURI(CDOView view, String path);
-}
+/*
+ * Copyright (c) 2004 - 2012 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Victor Roldan Betancort - initial API and implementation
+ * Eike Stepper - maintenance
+ */
+package org.eclipse.emf.cdo.view;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
+/**
+ * Capable of opening a <code>CDOView</code> on a target repository, defined by a URI. A regular expression and the
+ * priority are used to determine the most suitable provider.
+ *
+ * @since 2.0
+ * @author Victor Roldan Betancort
+ */
+public interface CDOViewProvider
+{
+ public static final int DEFAULT_PRIORITY = 500;
+
+ /**
+ * Returns the priority of this provider. Usually used to choose between several <code>CDOViewProvider</code> that
+ * match the same repository URI.
+ */
+ public int getPriority();
+
+ /**
+ * Returns the regular expression that determines if the provider can handle certain URI
+ */
+ public String getRegex();
+
+ /**
+ * Checks if the URI matches with the regular expression of this provider
+ */
+ public boolean matchesRegex(URI uri);
+
+ /**
+ * Receives a URI and returns an opened <code>CDOView</code> against the repository. The implementer is responsible to
+ * do the UUID to physical host map in case necessary.
+ *
+ * @return a wired-up and opened <code>CDOView</code>
+ */
+ public CDOView getView(URI uri, ResourceSet resourceSet);
+
+ /**
+ * @since 4.0
+ */
+ public URI getResourceURI(CDOView view, String path);
+}
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-frame.html b/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-frame.html
index 4ed398faeb..50ab6756f3 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-frame.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-frame.html
@@ -528,6 +528,8 @@ All Classes (Net4j Utilities Documentation)
<BR>
<A HREF="org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">NotifyingMonitor</A>
<BR>
+<A HREF="org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">NotifyingMonitor.ProgressEvent</A>
+<BR>
<A HREF="org/eclipse/net4j/util/ObjectUtil.html" title="class in org.eclipse.net4j.util" target="classFrame">ObjectUtil</A>
<BR>
<A HREF="org/eclipse/net4j/util/om/OMBundle.html" title="interface in org.eclipse.net4j.util.om" target="classFrame"><I>OMBundle</I></A>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-noframe.html b/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-noframe.html
index 23000dba1e..7d84d4ecf8 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-noframe.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/allclasses-noframe.html
@@ -528,6 +528,8 @@ All Classes (Net4j Utilities Documentation)
<BR>
<A HREF="org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor</A>
<BR>
+<A HREF="org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A>
+<BR>
<A HREF="org/eclipse/net4j/util/ObjectUtil.html" title="class in org.eclipse.net4j.util">ObjectUtil</A>
<BR>
<A HREF="org/eclipse/net4j/util/om/OMBundle.html" title="interface in org.eclipse.net4j.util.om"><I>OMBundle</I></A>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/index-all.html b/plugins/org.eclipse.net4j.util.doc/javadoc/index-all.html
index af0620810b..f958ac9eaa 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/index-all.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/index-all.html
@@ -6092,7 +6092,10 @@ Constructor for class org.eclipse.net4j.util.om.monitor.<A HREF="./org/eclipse/n
<DT><A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html#NotifyingMonitor(java.lang.String, org.eclipse.net4j.util.event.IListener[])"><B>NotifyingMonitor(String, IListener[])</B></A> -
Constructor for class org.eclipse.net4j.util.om.monitor.<A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor</A>
<DD>&nbsp;
-<DT><A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor"><B>NotifyingMonitor.ProgressEvent</B></A> - Class in <A HREF="./org/eclipse/net4j/util/om/monitor/package-summary.html">org.eclipse.net4j.util.om.monitor</A><DD>&nbsp;<DT><A HREF="./org/eclipse/net4j/util/lifecycle/LifecycleEventAdapter.html#notifyLifecycleEvent(org.eclipse.net4j.util.lifecycle.ILifecycleEvent)"><B>notifyLifecycleEvent(ILifecycleEvent)</B></A> -
+<DT><A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor"><B>NotifyingMonitor.ProgressEvent</B></A> - Class in <A HREF="./org/eclipse/net4j/util/om/monitor/package-summary.html">org.eclipse.net4j.util.om.monitor</A><DD>&nbsp;<DT><A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html#NotifyingMonitor.ProgressEvent(org.eclipse.net4j.util.event.INotifier, double, double)"><B>NotifyingMonitor.ProgressEvent(INotifier, double, double)</B></A> -
+Constructor for class org.eclipse.net4j.util.om.monitor.<A HREF="./org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A>
+<DD>&nbsp;
+<DT><A HREF="./org/eclipse/net4j/util/lifecycle/LifecycleEventAdapter.html#notifyLifecycleEvent(org.eclipse.net4j.util.lifecycle.ILifecycleEvent)"><B>notifyLifecycleEvent(ILifecycleEvent)</B></A> -
Method in class org.eclipse.net4j.util.lifecycle.<A HREF="./org/eclipse/net4j/util/lifecycle/LifecycleEventAdapter.html" title="class in org.eclipse.net4j.util.lifecycle">LifecycleEventAdapter</A>
<DD>&nbsp;
<DT><A HREF="./org/eclipse/net4j/util/container/ContainerEventAdapter.html#notifyOtherEvent(org.eclipse.net4j.util.event.IEvent)"><B>notifyOtherEvent(IEvent)</B></A> -
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/Event.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/Event.html
index 81216ad31f..1475edd687 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/Event.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/Event.html
@@ -215,7 +215,7 @@ Uses of <A HREF="../../../../../../org/eclipse/net4j/util/event/Event.html" titl
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
+<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A></B></CODE>
<BR>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/IEvent.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/IEvent.html
index 4121a99afe..0528374083 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/IEvent.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/IEvent.html
@@ -467,7 +467,7 @@ Uses of <A HREF="../../../../../../org/eclipse/net4j/util/event/IEvent.html" tit
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
+<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A></B></CODE>
<BR>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/INotifier.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/INotifier.html
index 03e61429af..4ea6ad74b5 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/INotifier.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/event/class-use/INotifier.html
@@ -771,6 +771,22 @@ Uses of <A HREF="../../../../../../org/eclipse/net4j/util/event/INotifier.html"
</TABLE>
&nbsp;
<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TH ALIGN="left" COLSPAN="2">Constructors in <A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/package-summary.html">org.eclipse.net4j.util.om.monitor</A> with parameters of type <A HREF="../../../../../../org/eclipse/net4j/util/event/INotifier.html" title="interface in org.eclipse.net4j.util.event">INotifier</A></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html#NotifyingMonitor.ProgressEvent(org.eclipse.net4j.util.event.INotifier, double, double)">NotifyingMonitor.ProgressEvent</A></B>(<A HREF="../../../../../../org/eclipse/net4j/util/event/INotifier.html" title="interface in org.eclipse.net4j.util.event">INotifier</A>&nbsp;notifier,
+ double&nbsp;totalWork,
+ double&nbsp;work)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
<A NAME="org.eclipse.net4j.util.om.pref"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html
index 92dbbec2df..119613dd63 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html
@@ -76,9 +76,9 @@ function windowTitle()
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.util.EventObject">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.util.EventObject">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
@@ -105,7 +105,7 @@ Class NotifyingMonitor.ProgressEvent</H2>
</DL>
<HR>
<DL>
- <DT>public final class <B>NotifyingMonitor.ProgressEvent</B>
+ <DT>public static class <B>NotifyingMonitor.ProgressEvent</B>
<DD>extends <A HREF="../../../../../../org/eclipse/net4j/util/event/Event.html" title="class in org.eclipse.net4j.util.event">Event</A>
<DD>implements <A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/OMMonitorProgress.html" title="interface in org.eclipse.net4j.util.om.monitor">OMMonitorProgress</A>
</DL>
@@ -154,6 +154,24 @@ Class NotifyingMonitor.ProgressEvent</H2>
</TR>
</TABLE>
&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TH>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html#NotifyingMonitor.ProgressEvent(org.eclipse.net4j.util.event.INotifier, double, double)">NotifyingMonitor.ProgressEvent</A></B>(<A HREF="../../../../../../org/eclipse/net4j/util/event/INotifier.html" title="interface in org.eclipse.net4j.util.event">INotifier</A>&nbsp;notifier,
+ double&nbsp;totalWork,
+ double&nbsp;work)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
<!-- ========== METHOD SUMMARY =========== -->
<A NAME="method_summary"><!-- --></A>
@@ -216,6 +234,29 @@ Class NotifyingMonitor.ProgressEvent</H2>
&nbsp;
<P>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TH>
+</TR>
+</TABLE>
+
+<A NAME="NotifyingMonitor.ProgressEvent(org.eclipse.net4j.util.event.INotifier, double, double)"><!-- --></A><H3>
+NotifyingMonitor.ProgressEvent</H3>
+<PRE>
+public <B>NotifyingMonitor.ProgressEvent</B>(<A HREF="../../../../../../org/eclipse/net4j/util/event/INotifier.html" title="interface in org.eclipse.net4j.util.event">INotifier</A>&nbsp;notifier,
+ double&nbsp;totalWork,
+ double&nbsp;work)</PRE>
+<DL>
+<DL>
+<DT><B>Since:</B></DT>
+ <DD>3.2</DD>
+</DL>
+</DL>
+
<!-- ============ METHOD DETAIL ========== -->
<A NAME="method_detail"><!-- --></A>
@@ -331,9 +372,9 @@ public double <B>getWorkPercent</B>()</PRE>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
- SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.util.EventObject">FIELD</A>&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+ SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_java.util.EventObject">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
-DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html
index 5fcafdb2c7..3bf6a297a5 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/NotifyingMonitor.html
@@ -135,7 +135,7 @@ Class NotifyingMonitor</H2>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
+<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A></B></CODE>
<BR>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/class-use/OMMonitorProgress.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/class-use/OMMonitorProgress.html
index cf01b62303..7b2e21425a 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/class-use/OMMonitorProgress.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/class-use/OMMonitorProgress.html
@@ -176,7 +176,7 @@ Uses of <A HREF="../../../../../../../org/eclipse/net4j/util/om/monitor/OMMonito
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
-<CODE>&nbsp;class</CODE></FONT></TD>
+<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A></B></CODE>
<BR>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-frame.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-frame.html
index d25d241713..c16e854d48 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-frame.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-frame.html
@@ -57,6 +57,8 @@ Classes</FONT>&nbsp;
<BR>
<A HREF="NotifyingMonitor.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">NotifyingMonitor</A>
<BR>
+<A HREF="NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">NotifyingMonitor.ProgressEvent</A>
+<BR>
<A HREF="ProgressDistributable.Default.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">ProgressDistributable.Default</A>
<BR>
<A HREF="ProgressDistributor.html" title="class in org.eclipse.net4j.util.om.monitor" target="classFrame">ProgressDistributor</A>
diff --git a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-summary.html b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-summary.html
index 7c7c5808ef..866c393619 100644
--- a/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-summary.html
+++ b/plugins/org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/om/monitor/package-summary.html
@@ -180,6 +180,10 @@ Interfaces and classes for platform-independent progress monitoring.
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/NotifyingMonitor.ProgressEvent.html" title="class in org.eclipse.net4j.util.om.monitor">NotifyingMonitor.ProgressEvent</A></B></TD>
+<TD>&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../../../org/eclipse/net4j/util/om/monitor/ProgressDistributable.Default.html" title="class in org.eclipse.net4j.util.om.monitor">ProgressDistributable.Default&lt;CONTEXT&gt;</A></B></TD>
<TD>&nbsp;</TD>
</TR>

Back to the top