/* * Licensed under the Apache License, Version 2.0 (the "License"); * * You may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * limitations under the License. * * Contributions from 2013-2017 where performed either by US government * employees, or under US Veterans Health Administration contracts. * * US Veterans Health Administration contributions by government employees * are work of the U.S. Government and are not subject to copyright * protection in the United States. Portions contributed by government * employees are USGovWork (17USC §105). Not subject to copyright. * * Contribution by contractors to the US Veterans Health Administration * during this period are contractually contributed under the * Apache License, Version 2.0. * * See: https://www.usa.gov/government-works * * Contributions prior to 2013: * * Copyright (C) International Health Terminology Standards Development Organisation. * Licensed under the Apache License, Version 2.0. * */ package sh.isaac.api.coordinate; //~--- JDK imports ------------------------------------------------------------ import java.util.EnumSet; import java.util.List; //~--- non-JDK imports -------------------------------------------------------- import sh.isaac.api.State; import sh.isaac.api.collections.ConceptSequenceSet; import sh.isaac.api.component.concept.ConceptSpecification; //~--- interfaces ------------------------------------------------------------- /** * Coordinate to control the retrieval and display of * object chronicle versions by indicating the current position (represented as time) on a path, * and allowed modules. * <p\> * q: How does the stamp coordinate relate to the stamp sequence? * <p\> * a: A stamp sequence is a sequentially assigned identifier for a unique combination of State, Time, Author, Module, and Path... * A stamp coordinate specifies a position on a path, with a particular set of modules, and allowed state values. * * <p\> * Created by kec on 2/16/15. * */ public interface StampCoordinate extends TimeBasedAnalogMaker<StampCoordinate>, StateBasedAnalogMaker<StampCoordinate> { /** * Determine what states should be included in results based on this * stamp coordinate. If current—but inactive—versions are desired, * the allowed states must include {@code State.INACTIVE} * @return the set of allowed states for results based on this stamp coordinate. */ EnumSet<State> getAllowedStates(); /** * An empty array is a wild-card, and should match all modules. If there are * one or more module sequences specified, only those modules will be included * in the results. * @return the set of module sequences to include in results based on this * stamp coordinate. */ ConceptSequenceSet getModuleSequences(); /** * Gets the module specification list. * * @return A list of {@code ConceptSpecification} that represent the modules to include in version computations * based on this stamp coordinate. */ default List<ConceptSpecification> getModuleSpecificationList() { return getModuleSequences().toConceptSpecificationList(); } /** * Gets the stamp position. * * @return the position (time on a path) that is used to * compute what stamped objects versions are the latest with respect to this * position. */ StampPosition getStampPosition(); /** * Determine if the stamp coordinate is time based, or path based. Generally * path based is recommended. * @return the stamp precedence. */ StampPrecedence getStampPrecedence(); }