1 package org.simantics.db.layer0.variable;
3 import java.util.Collection;
4 import java.util.Collections;
7 import org.simantics.databoard.binding.Binding;
8 import org.simantics.databoard.binding.mutable.Variant;
9 import org.simantics.databoard.type.Datatype;
10 import org.simantics.db.ReadGraph;
11 import org.simantics.db.Resource;
12 import org.simantics.db.WriteGraph;
13 import org.simantics.db.common.utils.NameUtils;
14 import org.simantics.db.exception.DatabaseException;
15 import org.simantics.db.layer0.exception.InvalidVariableException;
16 import org.simantics.db.layer0.exception.MissingVariableException;
17 import org.simantics.db.layer0.exception.MissingVariableValueException;
18 import org.simantics.db.layer0.exception.NonWritableVariableException;
19 import org.simantics.db.layer0.request.PropertyInfo;
20 import org.simantics.db.layer0.variable.RVI.RVIPart;
21 import org.simantics.db.layer0.variable.Variables.Role;
24 * An abstract base proxy implementation for value container variables that are
25 * leaves of the variable tree. This means by default the variable has no
26 * support for children or properties, only for returning a single value that it
29 * @author Tuukka Lehtonen
31 public abstract class ValueProxyVariable implements Variable {
33 protected final Variable proxy;
34 protected final Variable parent;
36 public ValueProxyVariable(Variable proxy, Variable parent) {
38 throw new NullPointerException("null proxy");
40 throw new NullPointerException("null parent");
46 public <T> T getPropertyValue(ReadGraph graph, String name) throws DatabaseException {
47 throw new MissingVariableValueException("Could not resolve property " + name);
51 public <T> T getPropertyValue(ReadGraph graph, Resource property) throws DatabaseException {
52 throw new MissingVariableValueException("Could not resolve property " + NameUtils.getSafeName(graph, property, true));
56 public <T> T getPossiblePropertyValue(ReadGraph graph, String name) throws DatabaseException {
57 throw new MissingVariableValueException("Could not resolve property " + name);
61 public <T> T getPossiblePropertyValue(ReadGraph graph, Resource property) throws DatabaseException {
62 throw new MissingVariableValueException("Could not resolve property " + NameUtils.getSafeName(graph, property, true));
66 public <T> T getPropertyValue(ReadGraph graph, String name, Binding binding) throws DatabaseException {
67 throw new MissingVariableValueException("Could not resolve property " + name);
71 public <T> T getPropertyValue(ReadGraph graph, Resource property, Binding binding) throws DatabaseException {
72 throw new MissingVariableValueException("Could not resolve property " + NameUtils.getSafeName(graph, property, true));
76 public <T> T getPossiblePropertyValue(ReadGraph graph, String name, Binding binding) throws DatabaseException {
77 throw new MissingVariableValueException("Could not resolve property " + name);
81 public <T> T getPossiblePropertyValue(ReadGraph graph, Resource property, Binding binding) throws DatabaseException {
82 return proxy.getPossiblePropertyValue(graph, property, binding);
86 public PropertyInfo getPropertyInfo(ReadGraph graph) throws DatabaseException {
87 return proxy.getPropertyInfo(graph);
91 public Resource getIndexRoot(ReadGraph graph) throws DatabaseException {
92 return proxy.getIndexRoot(graph);
96 public abstract <T> T getValue(ReadGraph graph) throws DatabaseException;
99 public abstract <T> T getPossibleValue(ReadGraph graph) throws DatabaseException;
102 public abstract <T> T getValue(ReadGraph graph, Binding binding) throws DatabaseException;
105 public abstract <T> T getPossibleValue(ReadGraph graph, Binding binding) throws DatabaseException;
108 public void setValue(WriteGraph graph, Object value, Binding binding) throws DatabaseException {
109 throw new NonWritableVariableException("Not supported");
113 public void setValue(WriteGraph graph, Object value) throws DatabaseException {
114 throw new NonWritableVariableException("Not supported");
118 public void setPropertyValue(WriteGraph graph, String name, Object value, Binding binding) throws DatabaseException {
119 throw new NonWritableVariableException("Not supported");
123 public void setPropertyValue(WriteGraph graph, Resource property, Object value, Binding binding) throws DatabaseException {
124 throw new NonWritableVariableException("Not supported");
128 public void setPropertyValue(WriteGraph graph, String name, Object value) throws DatabaseException {
129 throw new NonWritableVariableException("Not supported");
133 public void setPropertyValue(WriteGraph graph, Resource property, Object value) throws DatabaseException {
134 throw new NonWritableVariableException("Not supported");
138 public Variable getChild(ReadGraph graph, String name) throws DatabaseException {
139 throw new MissingVariableException("Could not resolve child " + name, getPossibleRepresents(graph));
143 public Variable getPossibleChild(ReadGraph graph, String name) throws DatabaseException {
148 public Variable getProperty(ReadGraph graph, String name) throws DatabaseException {
149 throw new MissingVariableException("Could not resolve property " + name, getPossibleRepresents(graph));
153 public Variable getProperty(ReadGraph graph, Resource property) throws DatabaseException {
154 throw new MissingVariableException("Could not resolve property " + NameUtils.getSafeName(graph, property, true), getPossibleRepresents(graph));
158 public Variable getPossibleProperty(ReadGraph graph, String name) throws DatabaseException {
163 public Variable getPossibleProperty(ReadGraph graph, Resource property) throws DatabaseException {
168 public Collection<Variable> browseChildren(ReadGraph graph) throws DatabaseException {
169 return getChildren(graph);
173 public Collection<Variable> getChildren(ReadGraph graph) throws DatabaseException {
174 return Collections.emptyList();
178 public Collection<Variable> browseProperties(ReadGraph graph) throws DatabaseException {
179 return getProperties(graph);
183 public Collection<Variable> getProperties(ReadGraph graph) throws DatabaseException {
184 return Collections.emptyList();
188 public Collection<Variable> getProperties(ReadGraph graph, String classification) throws DatabaseException {
189 return Collections.emptyList();
193 public Collection<Variable> getProperties(ReadGraph graph, Resource classification) throws DatabaseException {
194 return Collections.emptyList();
198 public Variable browse(ReadGraph graph, String suffix) throws DatabaseException {
199 if (suffix.isEmpty())
201 throw new MissingVariableException("Could not browse with suffix '" + suffix + "'", getPossibleRepresents(graph));
205 public Variable browsePossible(ReadGraph graph, String suffix) throws DatabaseException {
206 if (suffix.isEmpty())
212 public Variable browse(ReadGraph graph, Resource config) throws DatabaseException {
213 throw new MissingVariableException("Could not browse '" + NameUtils.getSafeName(graph, config, true) + "'", getPossibleRepresents(graph));
217 public Variable browsePossible(ReadGraph graph, Resource config) throws DatabaseException {
222 public <T> T getInterface(ReadGraph graph, Class<T> clazz) throws DatabaseException {
227 public <T> T adapt(ReadGraph graph, Class<T> clazz) throws DatabaseException {
232 public <T> T adaptPossible(ReadGraph graph, Class<T> clazz) throws DatabaseException {
237 public abstract String getURI(ReadGraph graph) throws DatabaseException;
240 public abstract int hashCode();
243 public abstract boolean equals(Object obj);
246 public Variable resolve(ReadGraph graph, RVIPart part) throws DatabaseException {
247 throw new InvalidVariableException("not supported");
251 public Variable resolvePossible(ReadGraph graph, RVIPart part) throws DatabaseException {
256 public abstract String getName(ReadGraph graph) throws DatabaseException;
259 public String getLabel(ReadGraph graph) throws DatabaseException {
260 throw new InvalidVariableException("not supported");
264 public abstract Datatype getDatatype(ReadGraph graph) throws DatabaseException;
267 public Datatype getPossibleDatatype(ReadGraph graph) throws DatabaseException {
269 return getDatatype(graph);
270 } catch (DatabaseException e) {
276 public Variable getPredicate(ReadGraph graph) throws DatabaseException {
277 throw new InvalidVariableException("not supported");
281 public Variable getPossiblePredicate(ReadGraph graph) throws DatabaseException {
282 throw new InvalidVariableException("not supported");
286 public Resource getPredicateResource(ReadGraph graph) throws DatabaseException {
287 throw new InvalidVariableException("not supported");
291 public Resource getPossiblePredicateResource(ReadGraph graph) throws DatabaseException {
293 return getPredicateResource(graph);
294 } catch (DatabaseException e) {
300 public Variable getParent(ReadGraph graph) throws DatabaseException {
305 public Resource getRepresents(ReadGraph graph) throws DatabaseException {
306 throw new InvalidVariableException("no resource representation");
310 public Resource getPossibleRepresents(ReadGraph graph) throws DatabaseException {
315 public Resource getType(ReadGraph graph) throws DatabaseException {
316 throw new InvalidVariableException("not supported");
320 public Resource getPossibleType(ReadGraph graph) throws DatabaseException {
325 public Resource getType(ReadGraph graph, Resource baseType) throws DatabaseException {
326 throw new InvalidVariableException("not supported");
330 public Resource getPossibleType(ReadGraph graph, Resource baseType) throws DatabaseException {
335 public abstract RVI getRVI(ReadGraph graph) throws DatabaseException;
338 public RVI getPossibleRVI(ReadGraph graph) throws DatabaseException {
340 return getRVI(graph);
341 } catch (DatabaseException e) {
347 public Role getRole(ReadGraph graph) throws DatabaseException {
348 return Role.PROPERTY;
352 public Role getPossibleRole(ReadGraph graph) throws DatabaseException {
353 return Role.PROPERTY;
357 public Set<String> getClassifications(ReadGraph graph) throws DatabaseException {
358 return Collections.emptySet();
361 public abstract Variant getVariantValue(ReadGraph graph) throws DatabaseException;