1 /* 2 * Copyright 2015 Data Archiving and Networked Services (an institute of 3 * Koninklijke Nederlandse Akademie van Wetenschappen), King's College London, 4 * Georg-August-Universitaet Goettingen Stiftung Oeffentlichen Rechts 5 * 6 * Licensed under the EUPL, Version 1.1 or – as soon they will be approved by 7 * the European Commission - subsequent versions of the EUPL (the "Licence"); 8 * You may not use this work except in compliance with the Licence. 9 * You may obtain a copy of the Licence at: 10 * 11 * https://joinup.ec.europa.eu/software/page/eupl 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the Licence is distributed on an "AS IS" basis, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the Licence for the specific language governing 17 * permissions and limitations under the Licence. 18 */ 19 20 package eu.ehri.project.models.base; 21 22 import com.tinkerpop.blueprints.Direction; 23 import com.tinkerpop.blueprints.Vertex; 24 import com.tinkerpop.frames.Adjacency; 25 import com.tinkerpop.frames.modules.javahandler.JavaHandler; 26 import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; 27 import eu.ehri.project.definitions.Ontology; 28 import eu.ehri.project.models.events.Version; 29 import eu.ehri.project.models.utils.JavaHandlerUtils; 30 31 /** 32 * An entity that may have prior versions. 33 */ 34 public interface Versioned extends Accessible { 35 /** 36 * Get the most recent version for this item, if one exists. 37 * 38 * @return a version frame, or null if there is no prior version 39 */ 40 @Adjacency(label = Ontology.ENTITY_HAS_PRIOR_VERSION, direction = Direction.OUT) 41 Version getPriorVersion(); 42 43 /** 44 * Loops through the chain of prior versions until the oldest existing version. 45 * 46 * @return an iterable of prior item versions 47 */ 48 @JavaHandler 49 Iterable<Version> getAllPriorVersions(); 50 51 abstract class Impl implements JavaHandlerContext<Vertex>, Versioned { 52 53 public Iterable<Version> getAllPriorVersions() { 54 return frameVertices(gremlin().as("n").out(Ontology.ENTITY_HAS_PRIOR_VERSION) 55 .loop("n", JavaHandlerUtils.noopLoopFunc, JavaHandlerUtils.noopLoopFunc)); 56 } 57 } 58 }