1 /* 2 * Copyright 2018-2022 Medical Information Systems Research Group (https://medical.zcu.cz), 3 * Department of Computer Science and Engineering, University of West Bohemia. 4 * Address: Univerzitni 8, 306 14 Plzen, Czech Republic. 5 * 6 * Author Petr Vcelak (vcelak@kiv.zcu.cz). 7 * 8 * This file is part of MRECore project. 9 * 10 * MRECore is free software: you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation, either version 3 of the License. 13 * 14 * MRECore is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with MRECore. If not, see <http://www.gnu.org/licenses/>. 21 */ 22 package cz.zcu.mre.service.data; 23 24 import cz.zcu.mre.data.core.MREData; 25 import org.apache.jena.arq.querybuilder.SelectBuilder; 26 import org.apache.jena.arq.querybuilder.UpdateBuilder; 27 import org.apache.jena.query.Query; 28 import org.apache.jena.rdf.model.Resource; 29 import org.apache.jena.sparql.modify.request.UpdateDeleteInsert; 30 31 /** 32 * SPARQL Builder Interface for Java Beans and MREData instances. 33 * 34 * @author Petr Vcelak (vcelak@kiv.zcu.cz) 35 */ 36 public interface SPARQLBuilder extends SPARQLBuilderVariables { 37 38 /** 39 * Build ASK query for the instance. 40 * 41 * @param instance The instance. 42 * @return Prepared Query instance. 43 */ 44 Query ask(Object instance); 45 46 /** 47 * Build ASK query for test if the instance URI and type is 48 * persistent/exist. This method produces only one triple (instance URI, 49 * rdf:type property and class URI for object) in the WHERE part. 50 * 51 * @param instance The instance. 52 * @return The ASK Query with only one triple (instance URI, rdf:type 53 * property and class URI for object). 54 */ 55 Query askExist(Object instance); 56 57 /** 58 * Build ASK query for test if the instance is persistent/exist. This method 59 * produces only one triple (instance URI, rdf:type property and class URI 60 * for object) in the WHERE part. 61 * 62 * @param instance The instance. 63 * @return The ASK Query with only one triple (instance URI, rdf:type 64 * property and class URI for object). 65 */ 66 Query askExistAll(Object instance); 67 68 /** 69 * Generate SELECT for list of instances that is based on the instance 70 * (type) and its attributes. 71 * 72 * This can work as query for "select all instances" and "select instance(s) 73 * with value of one/more attributes". 74 * 75 * @param instance The instance for building a complete general SELECT. 76 * @return Query instance that defines member attributes and rdf:type. 77 */ 78 Query select(Object instance); 79 80 /** 81 * Generate SELECT builder for list all instances that is based on the 82 * instance (type) and NO its attribute values. 83 * 84 * This can work as query for "select all instances" and "select instance(s) 85 * with value of one/more attributes". 86 * 87 * @param instance The instance for building a complete general SELECT. 88 * @return Select Builder instance. 89 */ 90 SelectBuilder selectAllBuilder(MREData instance); 91 92 /** 93 * Generate SELECT for list all instances that is based on the instance 94 * (type) and NO its attribute values. 95 * 96 * This can work as query for "select all instances" and "select instance(s) 97 * with value of one/more attributes". 98 * 99 * @param instance The instance for building a complete general SELECT. 100 * @return Query instance that defines member attributes and rdf:type. 101 */ 102 Query selectAll(MREData instance); 103 104 /** 105 * Build query to SELECT the resource rdf:type. 106 * 107 * @param resourceURI The resource URI as a String. 108 * @return Prepared Query instance. 109 */ 110 Query selectType(String resourceURI); 111 112 /** 113 * Build query to SELECT the resource rdf:type. 114 * 115 * @param resource The resource URI. 116 * @return Prepared Query instance. 117 */ 118 Query selectType(Resource resource); 119 120 /** 121 * Build DELETE update query for the instance removal. 122 * 123 * @param instance The instance to remove. 124 * @return Prepared UpdateBuilder instance. 125 */ 126 UpdateBuilder delete(Object instance); 127 128 /** 129 * Build DELETE update query for the deep instance removal. Remove 130 * recursively all sub-instances. 131 * 132 * @param instance The instance to deeply remove. 133 * @return Prepared UpdateBuilder instance. 134 */ 135 UpdateBuilder deleteAll(Object instance); 136 137 /** 138 * Build INSERT update query for making instance persistent. 139 * 140 * @param instance The instance for insert. 141 * @return Prepared UpdateBuilder instance. 142 */ 143 UpdateBuilder insert(Object instance); 144 145 /** 146 * Build INSERT update query for making the instance persistent. Inserts 147 * recursively all sub-instances. 148 * 149 * @param instance The instance for insert. 150 * @return Prepared UpdateBuilder instance. 151 */ 152 UpdateBuilder insertAll(Object instance); 153 154 /** 155 * Build DELETE INSERT update query for updating the instance. 156 * 157 * @param instanceOld The old instance is for delete part. 158 * @param instanceNew The new instance is for insert part. 159 * @return Prepared UpdateDeleteInsert builder instance. 160 */ 161 UpdateDeleteInsert update(Object instanceOld, Object instanceNew); 162 163 /** 164 * Build DELETE INSERT update query for updating the instance. Prepare 165 * delete and inserts recursively for all sub-instances. 166 * 167 * @param instanceOld The old instance is for delete part. 168 * @param instanceNew The new instance is for insert part. 169 * @return Prepared UpdateDeleteInsert builder instance. 170 */ 171 UpdateDeleteInsert updateAll(Object instanceOld, Object instanceNew); 172 173 }