]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.issues.common/src/org/simantics/issues/common/MaxIssueSeverityRecursive.java
ed3d6c2b97f66c97d7e40a050c0699e9152b2f84
[simantics/platform.git] / bundles / org.simantics.issues.common / src / org / simantics / issues / common / MaxIssueSeverityRecursive.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.issues.common;
13
14 import java.util.Collection;
15 import java.util.Set;
16
17 import org.simantics.db.ReadGraph;
18 import org.simantics.db.Resource;
19 import org.simantics.db.common.request.TernaryRead;
20 import org.simantics.db.exception.DatabaseException;
21 import org.simantics.issues.Severity;
22 import org.simantics.issues.ontology.IssueResource;
23
24 /**
25  * @author Tuukka Lehtonen
26  */
27 public class MaxIssueSeverityRecursive extends TernaryRead<Resource, Resource, Set<Resource>, Severity> {
28
29     public MaxIssueSeverityRecursive(Resource resource, Resource childRelation, Set<Resource> typesToRecurse) {
30         super(resource, childRelation, typesToRecurse);
31     }
32     
33     @Override
34     public Severity perform(ReadGraph graph) throws DatabaseException {
35
36         IssueResource ISSUE = graph.getService(IssueResource.class);
37
38         Collection<Resource> inv = graph.getObjects(parameter, ISSUE.Issue_HasContext_Inverse);
39         Collection<Resource> inv2 = graph.getObjects(parameter, ISSUE.Issue_ContextList_Element_Inverse);
40         if(inv.isEmpty() && inv2.isEmpty()) {
41             return graph.syncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3));
42         }
43         
44         Severity max = graph.syncRequest(new MaxIssueSeveritySingle(parameter));
45         if(max != null)
46             return max;
47         else
48             return graph.syncRequest(new ChildMaxIssueSeverity(parameter, parameter2, parameter3));
49             
50     }
51
52 }