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.idgen;
21
22 import com.google.common.collect.ListMultimap;
23 import eu.ehri.project.persistence.Bundle;
24
25 import java.util.Collection;
26 import static eu.ehri.project.definitions.Ontology.IDENTIFIER_KEY;
27
28 /**
29 * Generates an ID for nodes which represent IdentifiableEntities, where
30 * The graph id is derived from a property called
31 * {@value eu.ehri.project.definitions.Ontology#IDENTIFIER_KEY}.
32 */
33 public enum IdentifiableEntityIdGenerator implements IdGenerator {
34
35 INSTANCE;
36
37 public ListMultimap<String,String> handleIdCollision(Collection<String> scopeIds, Bundle bundle) {
38 return IdGeneratorUtils.handleIdCollision(scopeIds, IDENTIFIER_KEY, getIdBase(bundle));
39 }
40
41
42 /**
43 * Use an array of scope IDs and the bundle data to generate a unique
44 * id within a given scope.
45 *
46 * @param scopeIds An array of scope ids
47 * @param bundle The bundle
48 * @return The calculated identifier
49 */
50 public String generateId(Collection<String> scopeIds, Bundle bundle) {
51 return IdGeneratorUtils.generateId(scopeIds, bundle, getIdBase(bundle));
52 }
53
54 /**
55 * Return the base data for the id, sans scoping.
56 * @param bundle The entity's bundle.
57 * @return The base id string.
58 */
59 public String getIdBase(Bundle bundle) {
60 return bundle.getDataValue(IDENTIFIER_KEY);
61 }
62 }