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 java.util.List; 25 import java.util.stream.Stream; 26 import org.apache.jena.query.QuerySolution; 27 import org.apache.jena.rdf.model.Resource; 28 29 /** 30 * Data Service Interface. 31 * 32 * @author Petr Vcelak (vcelak@kiv.zcu.cz) 33 * @param <T> Object type. 34 */ 35 public interface DataService<T> { 36 37 T createInstance(T example); 38 39 T createInstance(T example, Resource uri); 40 41 T createInstance(Resource type); 42 43 T createInstance(Resource type, Resource uri); 44 45 T createInstance(String typeURI); 46 47 T createInstance(String typeURI, Resource uri); 48 49 /** 50 * ASK if instance is persistent. 51 * 52 * @param instance The T instance. 53 * @return true or false. 54 */ 55 boolean isPersistent(T instance); 56 57 /** 58 * Save T instance. 59 * 60 * @param instance The instance. 61 * @return status. 62 */ 63 boolean save(T instance); 64 65 /** 66 * Deeply save T instance. 67 * 68 * @param instance The T instance. 69 * @return status. 70 */ 71 boolean saveAll(T instance); 72 73 /** 74 * Insert T instance. 75 * 76 * @param instance The T instance. 77 * @return status. 78 */ 79 boolean insert(T instance); 80 81 /** 82 * Deeply insert T instance. 83 * 84 * @param instance The T instance. 85 * @return status. 86 */ 87 boolean insertAll(T instance); 88 89 /** 90 * Update T instance. 91 * 92 * @param instance The instance. 93 * @return status. 94 */ 95 boolean update(T instance); 96 97 /** 98 * Deeply update T instance. 99 * 100 * @param instance The instance. 101 * @return status. 102 */ 103 boolean updateAll(T instance); 104 105 /** 106 * Delete T instance. 107 * 108 * @param instance The instance. 109 * @return status. 110 */ 111 boolean delete(T instance); 112 113 /** 114 * Deeply delete T instance. 115 * 116 * @param instance The instance. 117 * @return status. 118 */ 119 boolean deleteAll(T instance); 120 121 /** 122 * Get the stream of T instances found by rdf:type. 123 * 124 * @param type RDF class as a type for instances. 125 * @return Stream of T instances. 126 */ 127 Stream<T> stream(String type); 128 129 /** 130 * Get the stream of T instances found by rdf:type. 131 * 132 * @param type RDF class as a type for instances. 133 * @return Stream of T instances. 134 */ 135 Stream<T> stream(Resource type); 136 137 /** 138 * Get the stream of T instances found by example. 139 * 140 * @param example An example. 141 * @return Stream of T instances. 142 */ 143 Stream<T> stream(T example); 144 145 /** 146 * Get the stream of all T instances. 147 * 148 * @param example An example. 149 * @return Stream of T instances. 150 */ 151 Stream<T> streamAll(T example); 152 153 /** 154 * Parse List of QuerySolution instances to build T instances as a stream. 155 * 156 * @param result MRE-query result as a List of QuerySolution instances. 157 * @return Stream with MREData instances. 158 */ 159 Stream<T> asStream(List<QuerySolution> result); 160 161 /** 162 * Get the list of T instances found by rdf:type. 163 * 164 * @param type RDF class as a type for instances. 165 * @return List of T instances. 166 */ 167 List<T> list(String type); 168 169 /** 170 * Get the list of T instances found by rdf:type. 171 * 172 * @param type RDF class as a type for instances. 173 * @return List of T instances. 174 */ 175 List<T> list(Resource type); 176 177 /** 178 * Get list of T instances found by example. 179 * 180 * @param example An example. 181 * @return List of T instances. 182 */ 183 List<T> list(T example); 184 185 /** 186 * Get list of all T instances. 187 * 188 * @param example An example class. 189 * @return List of all T instances. 190 */ 191 List<T> listAll(T example); 192 193 /** 194 * Get the T instance by its URI. 195 * 196 * @param resourceUri The URI as a String. 197 * @return Null or T instance. 198 */ 199 T get(String resourceUri); 200 201 /** 202 * Get the T instance by its URI. 203 * 204 * @param resourceUri The URI as a String. 205 * @return Null or T instance. 206 */ 207 T getAll(String resourceUri); 208 209 /** 210 * Get the T instance by its URI. 211 * 212 * @param resourceUri The URI as a Resource. 213 * @return Null or T instance. 214 */ 215 T get(Resource resourceUri); 216 217 /** 218 * Get the T instance by its URI. 219 * 220 * @param resourceUri The URI as a Resource. 221 * @return Null or T instance. 222 */ 223 T getAll(Resource resourceUri); 224 225 /** 226 * Get one T instance by example. 227 * 228 * @param example An example. 229 * @return Null or T instance. 230 */ 231 T get(T example); 232 233 /** 234 * Get one MREData instance by example. 235 * 236 * @param example An example. 237 * @return Null or MREData instance. 238 */ 239 T getAll(T example); 240 241 /** 242 * User-defined SELECT query. 243 * 244 * @param query SPARQL. 245 * @return Stream of QuerySolution instances. 246 */ 247 Stream<QuerySolution> select(String query); 248 }