*******************************************************************************/
package org.simantics.db.impl.graph;
-import gnu.trove.map.hash.TObjectIntHashMap;
-
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
+import java.util.function.Consumer;
import org.eclipse.core.runtime.Platform;
import org.simantics.databoard.Accessors;
import org.simantics.scl.runtime.function.Function3;
import org.simantics.utils.DataContainer;
import org.simantics.utils.Development;
-import org.simantics.utils.datastructures.Callback;
import org.simantics.utils.datastructures.Pair;
import org.simantics.utils.datastructures.collections.CollectionUtils;
+import gnu.trove.map.hash.TObjectIntHashMap;
+
public class ReadGraphImpl implements ReadGraph {
final static boolean EMPTY_RESOURCE_CHECK = false;
} catch (ResourceNotFoundException e) {
- throw new ResourceNotFoundException(e);
+ throw new ResourceNotFoundException(id, e);
} catch (ValidationException e) {
} catch (ResourceNotFoundException e) {
- throw new ResourceNotFoundException(e);
+ throw new ResourceNotFoundException(id, e);
} catch (ServiceException e) {
if( relation == null) throw new IllegalArgumentException("relation can not be null");
try {
-
int single = processor.getSingleObject(this, subject, relation);
- if(single == 0) throw new NoSingleResultException("subject=" + subject + " relation="+relation);
+ if (single == 0) {
+ if (EMPTY_RESOURCE_CHECK) {
+ if (!hasStatement(subject)) {
+ throw new EmptyResourceException("Resource " + debugString(subject));
+ }
+ }
+ throw new NoSingleResultException("No single object for subject " + debugString(subject)
+ + " and relation " + debugString(relation), single);
+ }
return processor.querySupport.getResource(single);
-
} catch (NoSingleResultException e) {
-
- if(EMPTY_RESOURCE_CHECK) {
- if(!hasStatement(subject)) throw new EmptyResourceException("Resource " + debugString(subject));
- }
-
- throw new NoSingleResultException("No single object for subject "
- + debugString(subject) + " and relation "
- + debugString(relation), e);
-
+ throw e;
} catch (DatabaseException e) {
-
throw new ServiceException(e);
-
}
-
}
@Override
- final public Statement getSingleStatement(final Resource subject,
- final Resource relation) throws NoSingleResultException,
- ManyObjectsForFunctionalRelationException, ServiceException {
-
+ final public Statement getSingleStatement(final Resource subject, final Resource relation) throws NoSingleResultException, ManyObjectsForFunctionalRelationException, ServiceException {
assert (subject != null);
assert (relation != null);
-
try {
-
Collection<Statement> statements = getStatements(subject, relation);
- if(statements.size() == 1) return statements.iterator().next();
- else throw new NoSingleResultException("");
-
- } catch (NoSingleResultException e) {
-
- if(EMPTY_RESOURCE_CHECK) {
- if(!hasStatement(subject)) throw new EmptyResourceException("Resource " + debugString(subject));
- }
-
- throw new NoSingleResultException("No single statement for subject "
- + debugString(subject) + " and relation "
- + debugString(relation), e);
-
- } catch (DatabaseException e) {
-
- throw new ServiceException(e);
-
- }
-
+ if (statements.size() == 1) {
+ return statements.iterator().next();
+ } else {
+ if (EMPTY_RESOURCE_CHECK)
+ if (!hasStatement(subject))
+ throw new EmptyResourceException("Resource " + debugString(subject));
+ throw new NoSingleResultException("No single statement for subject " + debugString(subject)
+ + " and relation " + debugString(relation), statements.size());
+ }
+ } catch (ServiceException e) {
+ throw new ServiceException(e);
+ }
}
@Override
- final public Resource getSingleType(final Resource subject) throws NoSingleResultException,
- ServiceException {
-
+ final public Resource getSingleType(final Resource subject) throws NoSingleResultException, ServiceException {
assert (subject != null);
-
try {
-
ArrayList<Resource> principalTypes = (ArrayList<Resource>)getPrincipalTypes(subject);
- if(principalTypes.size() == 1) return principalTypes.get(0);
- else throw new NoSingleResultException("");
-
- } catch (NoSingleResultException e) {
-
- throw new NoSingleResultException(e);
-
+ if (principalTypes.size() == 1) {
+ return principalTypes.get(0);
+ } else {
+ throw new NoSingleResultException("No single type for subject " + debugString(subject), principalTypes.size());
+ }
} catch (ServiceException e) {
-
throw new ServiceException(e);
-
}
-
}
@Override
assert (baseType != null);
try {
-
return syncRequest(new SingleType(subject, baseType));
-
- } catch (NoSingleResultException e) {
-
- throw new NoSingleResultException(new NoSingleResultException("subject=" + subject + ", baseType=" + baseType, e));
-
- } catch (ServiceException e) {
-
- throw new ServiceException(e);
-
} catch (DatabaseException e) {
-
- throw new ServiceException(INTERNAL_ERROR_STRING, e);
-
+ throw new NoSingleResultException("subject=" + subject + ", baseType=" + baseType, 0, e);
}
-
}
@Override
assert (relation != null);
try {
-
Resource object = getSingleObject(subject, relation);
return getValue(object);
-
} catch (NoSingleResultException e) {
-
- throw new NoSingleResultException(e);
-
+ throw new NoSingleResultException("No single value found for subject " + debugString(subject) + " and relation " + debugString(relation), e.getResultCount(), e);
} catch (DoesNotContainValueException e) {
-
try {
Layer0 L0 = processor.getL0(this);
Resource object = getPossibleObject(subject, relation);
if(isInstanceOf(object, L0.Literal)) {
throw new DoesNotContainValueException(e);
} else {
- throw new InvalidLiteralException("The object " + object + " is not an instance of L0.Literal (use getRelatedValue2 instead)");
+ throw new InvalidLiteralException("The object " + object + " is not an instance of L0.Literal (use getRelatedValue2 instead)", e);
}
} else {
- throw new DoesNotContainValueException("The object " + object + " is not an instance of L0.Value");
+ throw new DoesNotContainValueException("The object " + object + " is not an instance of L0.Value", e);
}
} catch (DoesNotContainValueException e2) {
throw e2;
} catch (DatabaseException e2) {
throw new InternalException("The client failed to analyse the cause of the following exception", e);
}
-
} catch (ServiceException e) {
-
throw new ServiceException(e);
-
- }
-
+ }
}
@Override
assert (relation != null);
try {
-
Resource object = getSingleObject(subject, relation);
return getVariantValue(object);
-
} catch (NoSingleResultException e) {
-
- throw new NoSingleResultException(e);
-
+ throw new NoSingleResultException("No single object for subject " + debugString(subject) + " and relation " + debugString(relation), e.getResultCount(), e);
} catch (DoesNotContainValueException e) {
-
try {
Layer0 L0 = processor.getL0(this);
Resource object = getPossibleObject(subject, relation);
if(isInstanceOf(object, L0.Literal)) {
throw new DoesNotContainValueException(e);
} else {
- throw new InvalidLiteralException("The object " + object + " is not an instance of L0.Literal (use getRelatedValue2 instead)");
+ throw new InvalidLiteralException("The object " + object + " is not an instance of L0.Literal (use getRelatedValue2 instead)", e);
}
} else {
- throw new DoesNotContainValueException("The object " + object + " is not an instance of L0.Value");
+ throw new DoesNotContainValueException("The object " + object + " is not an instance of L0.Value", e);
}
} catch (DoesNotContainValueException e2) {
throw e2;
} catch (DatabaseException e2) {
throw new InternalException("The client failed to analyse the cause of the following exception", e);
}
-
} catch (ServiceException e) {
-
throw new ServiceException(e);
-
}
-
}
@Override
assert (relation != null);
try {
-
Resource object = getSingleObject(subject, relation);
return getValue(object, binding);
-
} catch (NoSingleResultException e) {
-
String message = "";
-
try {
-
String subjectName = NameUtils.getSafeName(this, subject, true);
String relationName = NameUtils.getSafeName(this, relation, true);
message = "Subject: " + subjectName + ", Relation: " + relationName;
-
} catch (DatabaseException e2) {
}
-
- throw new NoSingleResultException(message);
-
+ throw new NoSingleResultException(message, e.getResultCount(), e);
} catch (DoesNotContainValueException e) {
-
throw new DoesNotContainValueException(e);
-
} catch (ServiceException e) {
-
throw new ServiceException(e);
-
- } catch (DatabaseException e) {
-
- throw new ServiceException(INTERNAL_ERROR_STRING, e);
-
}
-
}
@Override
}
- final AsyncProcedure NONE = new AsyncProcedure() {
+ final AsyncProcedure<?> NONE = new AsyncProcedure<Object>() {
@Override
public void execute(AsyncReadGraph graph, Object result) {
if (parent != null || listener != null || ((request.getFlags() & RequestFlags.SCHEDULE) > 0)) {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
// System.out.println("direct call " + request );
// Do not set the sync state.parent for external threads
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
if (parent != null || listener != null) {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
} else {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
if (parent != null || listener != null) {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
if (parent != null || listener != null) {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
} else {
- Object syncParent = request;
+// Object syncParent = request;
// final ReadGraphImpl newGraph = newSync();
}
@Override
- public void asyncRequest(Write request, Callback<DatabaseException> callback) {
+ public void asyncRequest(Write request, Consumer<DatabaseException> callback) {
assert (request != null);
@Override
public void asyncRequest(DelayedWrite r,
- Callback<DatabaseException> callback) {
+ Consumer<DatabaseException> callback) {
throw new Error("Not implemented.");
}
}
@Override
- public void asyncRequest(WriteOnly r, Callback<DatabaseException> callback) {
+ public void asyncRequest(WriteOnly r, Consumer<DatabaseException> callback) {
throw new Error("Not implemented.");
}
}
}
- @SuppressWarnings("unchecked")
@Override
public Variant getVariantValue2(Resource r, Object context) throws DatabaseException {
Layer0 L0 = processor.getL0(this);