1 package org.simantics.document.linking.ge;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
6 import org.simantics.db.ReadGraph;
\r
7 import org.simantics.db.Resource;
\r
8 import org.simantics.db.exception.DatabaseException;
\r
9 import org.simantics.db.layer0.variable.StandardGraphChildVariable;
\r
10 import org.simantics.db.layer0.variable.Variable;
\r
11 import org.simantics.document.linking.ontology.DocumentLink;
\r
12 import org.simantics.document.linking.utils.SourceLinkUtil;
\r
15 * A rule for browsing document links of an object. Properties are not included.
\r
17 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
20 public class ObjectChildRule implements org.simantics.browsing.ui.model.children.ChildRule{
\r
22 private boolean showOnlyCheckable = false;
\r
25 public boolean isCompatible(Class<?> contentType) {
\r
26 return contentType.equals(Resource.class) || contentType.equals(Variable.class);
\r
29 public void setShowOnlyCheckable(boolean showOnlyCheckable) {
\r
30 this.showOnlyCheckable = showOnlyCheckable;
\r
34 public Collection<?> getChildren(ReadGraph graph, Object obj)
\r
35 throws DatabaseException {
\r
37 ArrayList<Variable> children = new ArrayList<Variable>();
\r
40 Resource resource = null;
\r
41 Variable variable = null;
\r
42 if (obj instanceof Resource) {
\r
43 resource = (Resource)obj;
\r
45 variable = graph.adapt(resource, Variable.class);
\r
46 } catch (Throwable t) {
\r
49 children.add(new StandardGraphChildVariable(variable, null, resource));
\r
52 variable = (Variable)obj;
\r
53 resource = variable.getPossibleRepresents(graph);
\r
57 DocumentLink sl = DocumentLink.getInstance(graph);
\r
58 if (graph.isInstanceOf(resource, sl.Source))
\r
62 //find sources declared on parentResource using consernsRelation
\r
63 Variable parentVariable = variable.getParent(graph);
\r
64 Resource parentRes = null;
\r
65 Resource relation = null;
\r
66 if (parentVariable != null) {
\r
67 parentRes = parentVariable.getPossibleRepresents(graph);
\r
68 relation = variable.getPossiblePredicateResource(graph);
\r
71 if (parentRes != null && relation != null) {
\r
72 Collection<Resource> sources = graph.getObjects(parentRes, sl.hasSource);
\r
73 for (Resource source : sources) {
\r
74 Resource rel = graph.getPossibleObject(source, sl.consernsRelation);
\r
75 if (rel != null && rel.equals(relation)) {
\r
76 if (showOnlyCheckable &&
\r
77 (SourceLinkUtil.isValidSource(graph, source) &&
\r
78 SourceLinkUtil.isUpToDateSource(graph, source)))
\r
80 children.add(new StandardGraphChildVariable(variable, null, source));
\r
84 //find sources declared on this resource, ie. sources that do not have consernsRelation.
\r
85 Collection<Resource> sources = graph.getObjects(resource, sl.hasSource);
\r
86 for (Resource source : sources) {
\r
87 Resource rel = graph.getPossibleObject(source, sl.consernsRelation);
\r
89 if (showOnlyCheckable &&
\r
90 (SourceLinkUtil.isValidSource(graph, source) &&
\r
91 SourceLinkUtil.isUpToDateSource(graph, source)))
\r
93 children.add(new StandardGraphChildVariable(variable, null, source));
\r
96 while (children.remove(variable)) {
\r
105 public Collection<?> getParents(ReadGraph graph, Object child)
\r
106 throws DatabaseException {
\r
107 return new ArrayList<Resource>();
\r