diff options
author | Esteban Dugueperoux | 2015-05-14 09:29:06 +0000 |
---|---|---|
committer | Eike Stepper | 2015-05-14 09:29:06 +0000 |
commit | ed8fd5c013e4c2c0fb134b95f7b8be75aaf0aa46 (patch) | |
tree | 3f8aa1db4fff448fc9ecbd4b61e50e2ce5fdb957 /plugins/org.eclipse.emf.cdo.common/src | |
parent | f9ad60bad8f4e3c07a8f0d4ac545d113f662e989 (diff) | |
download | cdo-ed8fd5c013e4c2c0fb134b95f7b8be75aaf0aa46.tar.gz cdo-ed8fd5c013e4c2c0fb134b95f7b8be75aaf0aa46.tar.xz cdo-ed8fd5c013e4c2c0fb134b95f7b8be75aaf0aa46.zip |
[456993] Have EClass.allInstances query works on branches
- Have EClass.allInstances ocl query works when no instances of EClass
exists on the repository.
- Have it also on branches.
- Same for CDOView.queryInstances() query.
- Don't returns deleted instances.
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=456993
Change-Id: I46cd0e05b6f99edb3bba4ac41158c7d3b4bc927d
Signed-off-by: Esteban Dugueperoux <esteban.dugueperoux@obeo.fr>
Signed-off-by: Eike Stepper <stepper@esc-net.de>
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src')
6 files changed, 130 insertions, 6 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java index aa4782fb4d..a0e8ef242b 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/model/CDOClassifierRef.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.common.model; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; +import org.eclipse.emf.cdo.common.util.CDOPackageNotFoundException; import org.eclipse.emf.cdo.internal.common.messages.Messages; import org.eclipse.net4j.util.ObjectUtil; @@ -113,7 +114,7 @@ public final class CDOClassifierRef implements Serializable EPackage ePackage = packageRegistry.getEPackage(packageURI); if (ePackage == null) { - throw new IllegalStateException(MessageFormat.format(Messages.getString("CDOClassifierRef.0"), packageURI)); //$NON-NLS-1$ + throw new CDOPackageNotFoundException(packageURI); } return ePackage.getEClassifier(classifierName); diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOClassNotFoundException.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOClassNotFoundException.java new file mode 100644 index 0000000000..9fd9018a1d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOClassNotFoundException.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2004-2014 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: + * Esteban Dugueperoux - initial API and implementation + */ +package org.eclipse.emf.cdo.common.util; + +import org.eclipse.emf.cdo.common.model.CDOClassifierRef; +import org.eclipse.emf.cdo.internal.common.messages.Messages; + +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EPackage.Registry; + +import java.text.MessageFormat; + +/** + * A {@link CDOException} to indicate that an {@link EClass} is not available for an {@link EPackage} in the current {@link Registry}. + * + * @author Esteban Dugueperoux + * @since 4.4 + */ +public final class CDOClassNotFoundException extends CDOException +{ + private static final long serialVersionUID = 1L; + + private final String packageURI; + + private final String classifierName; + + public CDOClassNotFoundException(String packageURI, String classifierName) + { + super(MessageFormat.format(Messages.getString("CDOSessionImpl.1"), + packageURI + CDOClassifierRef.URI_SEPARATOR + classifierName)); + this.packageURI = packageURI; + this.classifierName = classifierName; + } + + public String getPackageURI() + { + return packageURI; + } + + public String getClassifierName() + { + return classifierName; + } +} diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOPackageNotFoundException.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOPackageNotFoundException.java new file mode 100644 index 0000000000..8b9edc9317 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/util/CDOPackageNotFoundException.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2004-2014 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: + * Esteban Dugueperoux - initial API and implementation + */ +package org.eclipse.emf.cdo.common.util; + +import org.eclipse.emf.cdo.internal.common.messages.Messages; + +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EPackage.Registry; + +import java.text.MessageFormat; + +/** + * A {@link CDOException} to indicate that an {@link EPackage} is not available in the current {@link Registry}. + * + * @author Esteban Dugueperoux + * @since 4.4 + */ +public final class CDOPackageNotFoundException extends CDOException +{ + private static final long serialVersionUID = 1L; + + private final String packageURI; + + public CDOPackageNotFoundException(String packageURI) + { + super(MessageFormat.format(Messages.getString("CDOSessionImpl.0"), packageURI)); + this.packageURI = packageURI; + } + + public String getPackageURI() + { + return packageURI; + } +} diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDOQueryInfoImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDOQueryInfoImpl.java index 49630ce875..82aa8acfb6 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDOQueryInfoImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/CDOQueryInfoImpl.java @@ -15,6 +15,8 @@ import org.eclipse.emf.cdo.common.commit.CDOChangeSetData; import org.eclipse.emf.cdo.common.protocol.CDODataInput; import org.eclipse.emf.cdo.common.protocol.CDODataOutput; import org.eclipse.emf.cdo.common.util.CDOQueryInfo; +import org.eclipse.emf.cdo.common.util.CDOClassNotFoundException; +import org.eclipse.emf.cdo.common.util.CDOPackageNotFoundException; import java.io.IOException; import java.util.Collections; @@ -50,7 +52,20 @@ public class CDOQueryInfoImpl implements CDOQueryInfo { queryLanguage = in.readString(); queryString = in.readString(); - context = in.readCDORevisionOrPrimitiveOrClassifier(); + + try + { + context = in.readCDORevisionOrPrimitiveOrClassifier(); + } + catch (CDOPackageNotFoundException e) + { + //$FALL-THROUGH$ + } + catch (CDOClassNotFoundException e) + { + //$FALL-THROUGH$ + } + maxResults = in.readInt(); if (in.readBoolean()) @@ -62,8 +77,19 @@ public class CDOQueryInfoImpl implements CDOQueryInfo for (int i = 0; i < size; i++) { String key = in.readString(); - Object object = in.readCDORevisionOrPrimitiveOrClassifier(); - parameters.put(key, object); + try + { + Object object = in.readCDORevisionOrPrimitiveOrClassifier(); + parameters.put(key, object); + } + catch (CDOPackageNotFoundException e) + { + //$FALL-THROUGH$ + } + catch (CDOClassNotFoundException e) + { + //$FALL-THROUGH$ + } } } diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties index 3b20c8646c..b2082fbcfb 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/messages/messages.properties @@ -12,7 +12,6 @@ AbstractCDORevision.0=EClass is abstract: {0} AbstractCDORevision.1=CDOID is null AbstractCDORevision.2=Missing ID mapping for {0} AbstractCDORevision.20=Could not find feature {0} in class {1} -CDOClassifierRef.0=Package not found: {0} CDOClassifierRef.1=Invalid classifier URI: CDODataInputImpl.5=Invalid CDOFeatureDelta type CDODataOutputImpl.5=Temporary ID not supported: {0} @@ -31,6 +30,8 @@ CDOPackageUnit.0=Package unit type is unknown CDOPackageUnitImpl.0=UNINITIALIZED CDOPackageUnitImpl.1=Package unit not initialized CDORevisionUtil.0=UNINITIALIZED +CDOSessionImpl.0=Package locally not available: {0} +CDOSessionImpl.1=Class locally not available: {0} CDOTypeImpl.23=Cannot find the enum literal {0} DLRevisionList.0=Cannot assign to a different list while linked to a list DLRevisionList.3=Holder {0} is still linked in different list diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java index e12220e516..abd9a272e1 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/protocol/CDODataInputImpl.java @@ -50,6 +50,7 @@ import org.eclipse.emf.cdo.common.revision.CDORevisionKey; import org.eclipse.emf.cdo.common.revision.CDORevisionUtil; import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; +import org.eclipse.emf.cdo.common.util.CDOClassNotFoundException; import org.eclipse.emf.cdo.internal.common.bundle.OM; import org.eclipse.emf.cdo.internal.common.commit.CDOChangeSetDataImpl; import org.eclipse.emf.cdo.internal.common.commit.FailureCommitInfo; @@ -170,7 +171,7 @@ public abstract class CDODataInputImpl extends ExtendedDataInput.Delegating impl EClassifier classifier = classifierRef.resolve(getPackageRegistry()); if (classifier == null) { - throw new IOException("Unable to resolve " + classifierRef); + throw new CDOClassNotFoundException(classifierRef.getPackageURI(), classifierRef.getClassifierName()); } return classifier; |