Project

General

Profile

Revision 3b49c84a

ID3b49c84a0287d1f78acb49ff1270a38c679cfd3a
Parent ec4afe76
Child 4f16dfd5

Added by Andreas Müller about 2 years ago

fix #8398 add nomenclatural code edition to nomStatus, NameRelationship and HybridRelationship and make RuleConsidered an embedded class

View differences:

cdmlib-model/src/main/java/eu/etaxonomy/cdm/hibernate/EnumUserType.java
28 28
import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;
29 29
import eu.etaxonomy.cdm.model.molecular.SequenceDirection;
30 30
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
31
import eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition;
31 32
import eu.etaxonomy.cdm.model.name.RankClass;
32 33
import eu.etaxonomy.cdm.model.name.RegistrationStatus;
33 34
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
......
110 111
        //NomenclaturalCode
111 112
        }else if (clazz.equals(NomenclaturalCode.class)){
112 113
        	return NomenclaturalCode.getByKey(val);
114
        //NomenclaturalCode
115
        }else if (clazz.equals(NomenclaturalCodeEdition.class)){
116
            return NomenclaturalCodeEdition.getByKey(val);
113 117
        //RankClass
114 118
        }else if (clazz.equals(RankClass.class)){
115 119
        	return RankClass.getByKey(val);
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/HybridRelationship.java
59 59
    private static final long serialVersionUID = -78515930138896939L;
60 60
    private static final Logger logger = Logger.getLogger(HybridRelationship.class);
61 61

  
62
	//The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
63
	//the note property.
64
	@XmlElement(name = "RuleConsidered")
65
	private String ruleConsidered;
62
//	//The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
63
//	//the note property.
64
//	@XmlElement(name = "RuleConsidered")
65
//	private String ruleConsidered;
66

  
67
    private RuleConsidered ruleConsidered;
66 68

  
67 69
	@XmlElement(name = "RelatedFrom")
68 70
    @XmlIDREF
......
174 176
	 * within <i>this</i> hybrid relationship.
175 177
	 */
176 178
	public String getRuleConsidered(){
177
		return this.ruleConsidered;
179
		return this.ruleConsidered().getText();
178 180
	}
179 181
	/**
180 182
	 * @see  #getRuleConsidered()
181 183
	 */
182 184
	public void setRuleConsidered(String ruleConsidered){
183
		this.ruleConsidered = ruleConsidered;
185
		this.ruleConsidered().setText(ruleConsidered);
186
	}
187
	/**
188
     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getRuleConsidered() rule considered}.
189
     */
190
    public NomenclaturalCodeEdition getCodeEdition() {
191
        return ruleConsidered().getCodeEdition();
192
    }
193
    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
194
        ruleConsidered().setCodeEdition(codeEdition);
195
    }
196
	private RuleConsidered ruleConsidered(){
197
	    if(this.ruleConsidered==null){
198
	        ruleConsidered = new RuleConsidered();
199
	    }
200
	    return ruleConsidered;
184 201
	}
185 202

  
186 203
	@Override
......
258 275
		HybridRelationship result;
259 276
		try {
260 277
			result = (HybridRelationship)super.clone();
278
			result.ruleConsidered = this.ruleConsidered == null? null : this.ruleConsidered.clone();
261 279
			//no changes to: relatedFrom, relatedTo, type
262 280
			return result;
263 281
		} catch (CloneNotSupportedException e) {
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NameRelationship.java
59 59
	private static final long serialVersionUID = -615987333520172043L;
60 60
	private static final Logger logger = Logger.getLogger(NameRelationship.class);
61 61

  
62
    //The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
63
	//the note property.
64
    @XmlElement(name = "RuleConsidered")
65
	private String ruleConsidered;
62
//    //The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
63
//	//the note property.
64
//    @XmlElement(name = "RuleConsidered")
65
//	private String ruleConsidered;
66

  
67
    private RuleConsidered ruleConsidered;
66 68

  
67 69
    @XmlElement(name = "RelatedFrom")
68 70
    @XmlIDREF
......
171 173
		this.setRelatedTo(toName);
172 174
	}
173 175

  
174
	/**
175
	 * Returns the nomenclatural code rule considered (that is the
176
	 * article/note/recommendation in the nomenclatural code ruling
177
	 * the  taxon name(s) of this nomenclatural status).
178
	 * The considered rule gives the reason why the
179
	 * {@link NomenclaturalStatusType nomenclatural status type} has been
180
	 * assigned to the {@link TaxonName taxon name(s)}.
181
	 */
182
	public String getRuleConsidered(){
183
		return this.ruleConsidered;
184
	}
176

  
177
//	public String getRuleConsidered(){
178
//		return this.ruleConsidered;
179
//	}
180
//
181
//	/**
182
//	 * @see  #getRuleConsidered()
183
//	 */
184
//	public void setRuleConsidered(String ruleConsidered){
185
//		this.ruleConsidered = ruleConsidered;
186
//	}
187
//
188
//	/**
189
//     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getRuleConsidered() rule considered}.
190
//	 */
191
//	public NomenclaturalCodeEdition getCodeEdition() {
192
//        return codeEdition;
193
//    }
194
//    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
195
//        this.codeEdition = codeEdition;
196
//    }
185 197

  
186 198
	/**
187
	 * @see  #getRuleConsidered()
188
	 */
189
	public void setRuleConsidered(String ruleConsidered){
190
		this.ruleConsidered = ruleConsidered;
191
	}
199
     * Returns the nomenclatural code rule considered (that is the
200
     * article/note/recommendation in the nomenclatural code ruling
201
     * the  taxon name(s) of this nomenclatural status).
202
     * The considered rule gives the reason why the
203
     * {@link NameRelationshipType name relationship type} has been
204
     * assigned to this name relation.
205
     */
206
    public String getRuleConsidered(){
207
        return this.ruleConsidered().getText();
208
    }
209
    /**
210
     * @see  #getRuleConsidered()
211
     */
212
    public void setRuleConsidered(String ruleConsidered){
213
        this.ruleConsidered().setText(ruleConsidered);
214
    }
215
    /**
216
     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getRuleConsidered() rule considered}.
217
     */
218
    public NomenclaturalCodeEdition getCodeEdition() {
219
        return ruleConsidered().getCodeEdition();
220
    }
221
    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
222
        ruleConsidered().setCodeEdition(codeEdition);
223
    }
224
    private RuleConsidered ruleConsidered(){
225
        if(this.ruleConsidered==null){
226
            ruleConsidered = new RuleConsidered();
227
        }
228
        return ruleConsidered;
229
    }
192 230

  
193
	// for extra-package access to relatedFrom use getFromName instead
231
    // for extra-package access to relatedFrom use getFromName instead
194 232
	@Override
195 233
    protected TaxonName getRelatedFrom() {
196 234
		return relatedFrom;
......
241 279
		NameRelationship result;
242 280
		try {
243 281
			result = (NameRelationship)super.clone();
282
            result.ruleConsidered = this.ruleConsidered == null? null : this.ruleConsidered.clone();
244 283
			//no changes to: relatedFrom, relatedTo, type
245 284
			return result;
246 285
		} catch (CloneNotSupportedException e) {
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NomenclaturalCode.java
44 44
@XmlEnum
45 45
public enum NomenclaturalCode implements IEnumTerm<NomenclaturalCode> {
46 46

  
47

  
48
    //NonViral
49
    @XmlEnumValue("NonViral")
50
    NonViral(UUID.fromString("04f88497-a66a-41b1-9b98-0dd22df6307f"), "NonViral","TaxonName", null, null),
51

  
47 52
    //0
48 53
    /**
49 54
     * International Code of Nomenclature for algae, fungi, and plants
50 55
     * Former International Code of Botanical Nomenclature
51 56
     */
52 57
    @XmlEnumValue("ICNAFP")
53
    ICNAFP(UUID.fromString("540fc02a-8a8e-4813-89d2-581dad4dd482"), "ICNAFP","BotanicalName"),
58
    ICNAFP(UUID.fromString("540fc02a-8a8e-4813-89d2-581dad4dd482"), "ICNAFP","BotanicalName","Q693148", NonViral),
54 59

  
55 60
    //1
56 61
	/**
57 62
	 * International Code of Nomenclature of Bacteria
63
	 * => now International Code of Nomenclature of Prokaryotes
64
	 * TODO rename to ICNP
58 65
	*/
59 66
	@XmlEnumValue("ICNB")
60
	ICNB(UUID.fromString("ff4b0979-7abf-4b40-95c0-8b8b1e8a4d5e"), "ICNB","BacterialName"),
67
	ICNB(UUID.fromString("ff4b0979-7abf-4b40-95c0-8b8b1e8a4d5e"), "ICNB","BacterialName","Q743780", NonViral),
61 68

  
62 69

  
63 70
	//2
......
65 72
	 * International Code of Cultivated Plants
66 73
	 */
67 74
	@XmlEnumValue("ICNCP")
68
	ICNCP(UUID.fromString("65a432b5-92b1-4c9a-8090-2a185e423d2e"),"ICNCP","CultivarPlantName"),
75
	ICNCP(UUID.fromString("65a432b5-92b1-4c9a-8090-2a185e423d2e"),"ICNCP","CultivarPlantName","Q941761", NonViral),
69 76

  
70 77
	//3
71 78
	/**
72 79
	 * International Code of Zoological Nomenclature
73 80
	 */
74 81
	@XmlEnumValue("ICZN")
75
	ICZN(UUID.fromString("b584c2f8-dbe5-4454-acad-2b45e63ec11b"), "ICZN","ZoologicalName"),
82
	ICZN(UUID.fromString("b584c2f8-dbe5-4454-acad-2b45e63ec11b"), "ICZN","ZoologicalName","Q13011", NonViral),
76 83

  
77 84
	//4
78 85
	/**
79 86
	 * International Code for Virus Classification and Nomenclature
80 87
	 */
81 88
	@XmlEnumValue("ICVCN")
82
	ICVCN(UUID.fromString("e9d6d6b4-ccb7-4f28-b828-0b1501f8c75a"), "ICVCN","ViralName"),
89
	ICVCN(UUID.fromString("e9d6d6b4-ccb7-4f28-b828-0b1501f8c75a"), "ICVCN","ViralName","Q14920640", null),
83 90
//
84 91
//	//Any
85 92
//	@XmlEnumValue("Any")
86 93
//    Any(UUID.fromString("348f2a2f-366f-4c8c-bb15-c90b937886ca"), "Any taxon name","TaxonName"),
87 94

  
88 95

  
89
	//NonViral
90
    @XmlEnumValue("NonViral")
91
    NonViral(UUID.fromString("04f88497-a66a-41b1-9b98-0dd22df6307f"), "NonViral","TaxonName"),
92

  
93 96
	//Fungi
94 97
    @XmlEnumValue("Fungus")
95
	Fungi(UUID.fromString("c6bb280d-2468-4738-bb29-973f74412100"), "Fungus", "BotanicalName"),
98
	Fungi(UUID.fromString("c6bb280d-2468-4738-bb29-973f74412100"), "Fungus", "BotanicalName", null, ICNAFP),
96 99

  
97 100
//	//Plant
98 101
//    @XmlEnumValue("Plant")
......
108 111
	@Deprecated
109 112
	private String dtype;
110 113

  
111
	private NomenclaturalCode(UUID uuid, String titleCache, String dtype){
112
		delegateVocTerm = EnumeratedTermVoc.addTerm(getClass(), this, uuid, titleCache, titleCache, null);
114
	private String wikiDataId;
115

  
116
	private NomenclaturalCode(UUID uuid, String titleCache, String dtype, String wikiDataId, NomenclaturalCode parent){
117
		delegateVocTerm = EnumeratedTermVoc.addTerm(getClass(), this, uuid, titleCache, titleCache, parent);
113 118
		this.dtype = dtype;
119
		this.wikiDataId = wikiDataId;
114 120
	}
115 121

  
116 122
    public String getTitleCache() {
117 123
        return getMessage();
118 124
    }
119 125

  
120

  
121 126
	@Override
122 127
	public String toString() {
123 128
		return this.name();
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NomenclaturalCodeEdition.java
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

  
10
package eu.etaxonomy.cdm.model.name;
11

  
12
import java.net.URI;
13
import java.util.ArrayList;
14
import java.util.List;
15
import java.util.Set;
16
import java.util.UUID;
17

  
18
import javax.xml.bind.annotation.XmlEnum;
19
import javax.xml.bind.annotation.XmlEnumValue;
20
import javax.xml.bind.annotation.XmlType;
21

  
22
import org.apache.commons.lang3.StringUtils;
23
import org.apache.log4j.Logger;
24

  
25
import eu.etaxonomy.cdm.common.DOI;
26
import eu.etaxonomy.cdm.model.common.Language;
27
import eu.etaxonomy.cdm.model.term.EnumeratedTermVoc;
28
import eu.etaxonomy.cdm.model.term.IEnumTerm;
29

  
30
/**
31
 * The class for the nomenclature code edition of the 5 nomenclatural codes (ICNB, ICBN, ICNCP, ICZN and ICVCN)
32
 * ruling {@link TaxonName taxon names}.
33
 * <P>
34
 * See also https://www.wikidata.org/wiki/Q693148
35
 * <P>
36
 * @see NomenclaturalCode
37
 *
38
 * @author a.mueller
39
 * @since 23.07.2019
40
 */
41

  
42
@XmlType(name = "NomenclaturalCodeEdition")
43
@XmlEnum
44
public enum NomenclaturalCodeEdition implements IEnumTerm<NomenclaturalCodeEdition> {
45

  
46
    //0
47
    /**
48
     * International Code of Nomenclature for algae, fungi, and plants.
49
     * Shenzhen 2017
50
     * Turland, N. J., Wiersema, J. H., Barrie, F. R., Greuter, W., Hawksworth, D. L., Herendeen, P. S., Knapp, S., Kusber, W.-H., Li, D.-Z., Marhold, K., May, T. W., McNeill, J., Monro, A. M., Prado, J., Price, M. J. & Smith, G. F. (eds.) 2018: International Code of Nomenclature for algae, fungi, and plants (Shenzhen Code) adopted by the Nineteenth International Botanical Congress Shenzhen, China, July 2017. Regnum Vegetabile 159. Glashütten: Koeltz Botanical Books. DOI https://doi.org/10.12705/Code.2018
51
     */
52
    @XmlEnumValue("Shenzhen")
53
    ICN_2017_SHENZHEN(UUID.fromString("87e8ac37-97c4-43c7-a016-43f1a5c3503f"), "Shenzhen", 2017, NomenclaturalCode.ICNAFP, "Q56701992","10.12705/Code.2018" ),
54

  
55
    //1
56
    /**
57
     * International Code of Nomenclature for algae, fungi, and plants.
58
     * Melbourne 2011
59
     */
60
    @XmlEnumValue("Melbourne")
61
    ICN_2011_MELBOURNE(UUID.fromString("ea2ebf9e-e3eb-4aaf-8007-c6f9f8877451"), "Melbourne", 2011, NomenclaturalCode.ICNAFP, "Q15895076", null),
62

  
63
    //2
64
    /**
65
     * International Code of Botanical Nomenclature.
66
     * Vienna 2005
67
     */
68
    @XmlEnumValue("Vienna")
69
    ICN_2005_VIENNA(UUID.fromString("d8f9f3d6-96af-4d83-a8d5-04ff62ba4d9c"), "Vienna", 2005, NomenclaturalCode.ICNAFP, "Q15895126", null),
70

  
71
    //3
72
    /**
73
     * International Code of Botanical Nomenclature.
74
     * Saint Louis 1999
75
     */
76
    @XmlEnumValue("Saint Louis")
77
    ICN_1999_ST_LOUIS(UUID.fromString("2746b72e-43be-4073-90d0-494a7afac271"), "Saint Louis", 1999, NomenclaturalCode.ICNAFP, "Q15895151", null),
78

  
79
    //4
80
    /**
81
     * International Code of Botanical Nomenclature.
82
     * Tokyo 1993
83
     */
84
    @XmlEnumValue("Tokyo")
85
    ICN_1993_TOKYO(UUID.fromString("5a846761-839f-4f77-b614-7181b9b29355"), "Tokyo", 1993, NomenclaturalCode.ICNAFP, "Q15895201", null),
86

  
87
    //*** ICZN **/
88
    //z1
89
    /**
90
     * International Code of Zoological Nomenclature. Fourth edition. The International Trust for Zoological Nomenclature, London, UK.
91
     * https://en.wikipedia.org/wiki/International_Code_of_Zoological_Nomenclature#Versions
92
     */
93
    @XmlEnumValue("ICZN_1999")
94
    ICZN_1999(UUID.fromString("98f61693-67c5-40e1-a802-4989cb5ac4eb"), null, 1999, NomenclaturalCode.ICZN, null, "10.5962/bhl.title.50608"),
95

  
96
    //z2
97
    /**
98
     * International Code of Zoological Nomenclature. Third edition. The International Trust for Zoological Nomenclature, London, UK.
99
     * https://en.wikipedia.org/wiki/International_Code_of_Zoological_Nomenclature#Versions
100
     */
101
    @XmlEnumValue("ICZN_1985")
102
    ICZN_1985(UUID.fromString("093110c8-f7e8-4f86-a794-e8e7b17c99d6"), null, 1985, NomenclaturalCode.ICZN, null, "10.5962/bhl.title.50611"),
103

  
104
    //z3
105
    /**
106
     * International Code of Zoological Nomenclature. Second edition. The International Trust for Zoological Nomenclature, London, UK.
107
     * https://en.wikipedia.org/wiki/International_Code_of_Zoological_Nomenclature#Versions
108
     */
109
    @XmlEnumValue("ICZN_1964")
110
    ICZN_1964(UUID.fromString("2b4a9e59-45dd-444b-bf93-741bc727c38c"), null, 1964, NomenclaturalCode.ICZN, null, "10.5962/bhl.title.50606"),
111

  
112
    //z4
113
    /**
114
     * International Code of Zoological Nomenclature: adopted by the XV International Congress of Zoology. The International Trust for Zoological Nomenclature, London, UK.
115
     * https://en.wikipedia.org/wiki/International_Code_of_Zoological_Nomenclature#Versions
116
     */
117
    @XmlEnumValue("ICZN_1961")
118
    ICZN_1961(UUID.fromString("b9de5507-1171-496c-8a8d-8af47e42724e"), null, 1961, NomenclaturalCode.ICZN, null, "10.5962/bhl.title.50303"),
119

  
120
    //TODO older versions, see wikipedia
121

  
122
   //bact1
123
    /**
124
     * Parker, C.T., Tindall, B.J. & Garrity, G.M. (2019) International Code of Nomenclature of Prokaryotes. 2008 Revision. Microbiology Society
125
     * https://en.wikipedia.org/wiki/International_Code_of_Nomenclature_of_Prokaryotes#Versions
126
     */
127
    @XmlEnumValue("ICNB_2008")
128
    ICNB_2008(UUID.fromString("1297a8e9-dfde-4db7-9f93-672453e8b3e6"), null, 2008, NomenclaturalCode.ICNB, null, "10.1099/ijsem.0.000778"),
129

  
130
    //bact2
131
    /**
132
     * Lapage, S.P., Sneath, P.H.A., Lessel, E.F., Skerman, V.B.D., Seeliger, H.P.R. & Clark, W.A. (1992). International Code of Nomenclature of Bacteria. Bacteriological Code. 1990 Revision. American Society for Microbiology, Washington, D.C., ISBN 1-55581-039-X
133
     * https://en.wikipedia.org/wiki/International_Code_of_Nomenclature_of_Prokaryotes#Versions
134
     */
135
    @XmlEnumValue("ICNB_1990")
136
    ICNB_1990(UUID.fromString("fd5d6dd3-de58-4244-8290-c8d89323f163"), null, 1990, NomenclaturalCode.ICNB, null, "10.5962/bhl.title.50303"),
137

  
138
    //bact3
139
    /**
140
     * Lapage, S.P., Sneath, P.H.A., Lessel, E.F., Skerman, V.B.D., Seeliger, H.P.R. & Clark, W.A. (1975). International Code of Nomenclature of Bacteria. 1975 Revision. American Society of Microbiology, Washington, D.C
141
     * https://en.wikipedia.org/wiki/International_Code_of_Nomenclature_of_Prokaryotes#Versions
142
     */
143
    @XmlEnumValue("ICNB_1975")
144
    ICNB_1975(UUID.fromString("2dafaf3c-abf6-4baf-82db-3332db25d654"), null, 1975, NomenclaturalCode.ICNB, null, null),
145

  
146
    //cult plants 1
147
    /**
148
     * ISHS Secretariat: ICNCP - International Code for the Nomenclature for Cultivated Plants (9th edition). International Society for Horticultural Science, 15. Juni 2016
149
     * https://www.ishs.org/news/icncp-international-code-nomenclature-cultivated-plants-9th-edition
150
     */
151
    @XmlEnumValue("ICNCP_2016")
152
    ICNB_2016(UUID.fromString("e395e7be-405f-4214-a3a2-2b19eef6a055"), null, 2016, NomenclaturalCode.ICNCP, null, null),
153

  
154
    //cult plants 2
155
    /**
156
     * International Code of Nomenclature for Cultivated Plants. 8th edition. [Scripta Horticulturae 10]
157
     * https://www.ishs.org/news/icncp-international-code-nomenclature-cultivated-plants-9th-edition
158
     */
159
    @XmlEnumValue("ICNCP_2009")
160
    ICNB_2009(UUID.fromString("bc66202a-0ffb-4cf3-a1c9-520efd5e76e9"), null, 2009, NomenclaturalCode.ICNCP, null, null),
161

  
162
    //cult plants 3
163
    /**
164
     * SHS (International Society for Horticultural Science; Hrsg.): International Code of Nomenclature for Cultivated Plants, 7th edition. In: Acta Horticulturae Band 647, 2004. ISBN 90-6605-527-8.
165
     * https://de.wikipedia.org/wiki/Internationaler_Code_der_Nomenklatur_der_Kulturpflanzen
166
     */
167
    @XmlEnumValue("ICNCP_2004")
168
    ICNB_2004(UUID.fromString("a29abcee-1f34-4320-afad-eb7ee23cc473"), null, 2004, NomenclaturalCode.ICNCP, null, null),
169

  
170
    //virus1
171
    /**
172
     * https://talk.ictvonline.org/ictv-reports/ictv_online_report/
173
     * 10th report
174
     */
175
    @XmlEnumValue("ICVCN_2018")
176
    ICVCN_2018(UUID.fromString("6a0debf3-7932-4b0c-b1b1-46641c273f36"), null, 2019, NomenclaturalCode.ICVCN, null, null),
177

  
178
    //virus2
179
    /**
180
     * https://talk.ictvonline.org/ictv-reports/ictv_9th_report/
181
     * 9th report
182
     */
183
    @XmlEnumValue("ICVCN_2011")
184
    ICVCN_2011(UUID.fromString("b55c0209-59e2-4fa2-9d64-63addfb15d6b"), null, 2011, NomenclaturalCode.ICVCN, null, null),
185

  
186
    ;
187

  
188
    @SuppressWarnings("unused")
189
    private static final Logger logger = Logger.getLogger(NomenclaturalCodeEdition.class);
190

  
191
    private static final String WIKIDATA_BASE_URL = "https://www.wikidata.org/wiki/";
192

  
193
	private String location;
194

  
195
	private Integer year;
196

  
197
	private NomenclaturalCode code;
198

  
199
	private String wikiDataId;
200

  
201
	private DOI doi;
202

  
203
	private NomenclaturalCodeEdition(UUID uuid, String location, Integer year, NomenclaturalCode code, String wikiDataId, String strDoi ){
204
		delegateVocTerm = EnumeratedTermVoc.addTerm(getClass(), this, uuid, makeTitleCache(location, code, year), code.getKey() + year, null);
205
		this.location = location;
206
		this.year=year;
207
		this.code=code;
208
		this.wikiDataId = wikiDataId;
209
		this.doi = (strDoi==null) ? null:DOI.fromString(strDoi);
210
	}
211

  
212
    /**
213
     * @param location
214
     * @param code
215
     * @param year
216
     * @return
217
     */
218
    private String makeTitleCache(String location, NomenclaturalCode code, Integer year) {
219
        return (StringUtils.isNotBlank(location)? location: code.getTitleCache()) + " " + year;
220
    }
221

  
222
    public String getTitleCache() {
223
        return getMessage();
224
    }
225

  
226

  
227
	@Override
228
	public String toString() {
229
		return this.name();
230
	}
231

  
232
    public boolean isNonViral() {
233
        return this.code.isNonViral();
234
    }
235
    public boolean isZoological() {
236
        return this.code.isZoological();
237
    }
238
    public boolean isBotanical() {
239
        return this.code.isBotanical();
240
    }
241
    public boolean isCultivar() {
242
        return this.code.isCultivar();
243
    }
244
    public boolean isBacterial() {
245
        return this.code.isBacterial();
246
     }
247
     public boolean isViral() {
248
         return this.code.isViral();
249
     }
250
     public boolean isFungus() {
251
         return this.code.isFungus();
252
     }
253

  
254

  
255
//	public static NomenclaturalCodeEdition fromString(String string){
256
//		xx;
257
//	    for(NomenclaturalCodeEdition code : NomenclaturalCodeEdition.values()){
258
//			if(code.name().equalsIgnoreCase(string)) {
259
//				return code;
260
//			}
261
//		}
262
//		return null;
263
//	}
264

  
265
      public static List<NomenclaturalCodeEdition> forCode(NomenclaturalCode code){
266
          List<NomenclaturalCodeEdition> result = new ArrayList<>();
267

  
268
          Set<NomenclaturalCode> allCodes = code.getGeneralizationOf(true);
269
          allCodes.add(code);
270

  
271
          for(NomenclaturalCodeEdition edition : NomenclaturalCodeEdition.values()){
272
              for (NomenclaturalCode nomCode: allCodes){
273
                  if(edition.getCode().equals(nomCode) && !result.contains(nomCode)) {
274
                      result.add(edition);
275
                  }
276
              }
277
          }
278
          return result;
279
     }
280

  
281

  
282
    public String getLocation() {
283
        return location;
284
    }
285
    public Integer getYear() {
286
        return year;
287
    }
288
    public NomenclaturalCode getCode() {
289
        return code;
290
    }
291
    public String getWikiDataId() {
292
        return wikiDataId;
293
    }
294
    public URI getWikiDataUri() {
295
        return StringUtils.isEmpty(wikiDataId)? null: URI.create(WIKIDATA_BASE_URL + wikiDataId);
296
    }
297
    public DOI getDoi() {
298
        return this.doi;
299
    }
300

  
301

  
302

  
303
// *************************** DELEGATE **************************************/
304

  
305
	private static EnumeratedTermVoc<NomenclaturalCodeEdition> delegateVoc;
306
	private IEnumTerm<NomenclaturalCodeEdition> delegateVocTerm;
307

  
308
	static {
309
		delegateVoc = EnumeratedTermVoc.getVoc(NomenclaturalCodeEdition.class);
310
	}
311

  
312
	@Override
313
	public String getKey(){return delegateVocTerm.getKey();}
314

  
315
	@Override
316
    public String getMessage(){return delegateVocTerm.getMessage();}
317

  
318
	@Override
319
    public String getMessage(Language language){return delegateVocTerm.getMessage(language);}
320

  
321

  
322
	@Override
323
    public UUID getUuid() {return delegateVocTerm.getUuid();}
324

  
325
	@Override
326
    public NomenclaturalCodeEdition getKindOf() {return delegateVocTerm.getKindOf();}
327

  
328
	@Override
329
    public Set<NomenclaturalCodeEdition> getGeneralizationOf() {return delegateVocTerm.getGeneralizationOf();}
330

  
331
	@Override
332
	public boolean isKindOf(NomenclaturalCodeEdition ancestor) {return delegateVocTerm.isKindOf(ancestor);	}
333

  
334
	@Override
335
    public Set<NomenclaturalCodeEdition> getGeneralizationOf(boolean recursive) {return delegateVocTerm.getGeneralizationOf(recursive);}
336

  
337

  
338
	public static NomenclaturalCodeEdition getByKey(String key){return delegateVoc.getByKey(key);}
339
    public static NomenclaturalCodeEdition getByUuid(UUID uuid) {return delegateVoc.getByUuid(uuid);}
340

  
341

  
342
}
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NomenclaturalStatus.java
47 47
	private static final long serialVersionUID = -2451270405173131900L;
48 48
	static Logger logger = Logger.getLogger(NomenclaturalStatus.class);
49 49

  
50
	//The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
51
	//the note property.
52
	@XmlElement(name = "RuleConsidered")
53
	private String ruleConsidered;
50
//	//The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
51
//	//the note property.
52
//	@XmlElement(name = "RuleConsidered")
53
//	private String ruleConsidered;
54

  
55
    private RuleConsidered ruleConsidered;
54 56

  
55 57
	@XmlElement(name = "NomenclaturalStatusType")
56 58
    @XmlIDREF
......
114 116
	 * {@link NomenclaturalStatusType nomenclatural status type} has been
115 117
	 * assigned to the {@link TaxonName taxon name(s)}.
116 118
	 */
117
	public String getRuleConsidered(){
118
		return this.ruleConsidered;
119
	}
120

  
121
	/**
122
	 * @see  #getRuleConsidered()
123
	 */
124
	public void setRuleConsidered(String ruleConsidered){
125
		this.ruleConsidered = ruleConsidered;
126
	}
127

  
119
//	public String getRuleConsidered(){
120
//		return this.ruleConsidered;
121
//	}
122
//
123
//	/**
124
//	 * @see  #getRuleConsidered()
125
//	 */
126
//	public void setRuleConsidered(String ruleConsidered){
127
//		this.ruleConsidered = ruleConsidered;
128
//	}
129
//
130
//    /**
131
//     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getRuleConsidered() rule considered}.
132
//     */
133
//    public NomenclaturalCodeEdition getCodeEdition() {
134
//        return codeEdition;
135
//    }
136
//    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
137
//        this.codeEdition = codeEdition;
138
//    }
139
    public String getRuleConsidered(){
140
        return this.ruleConsidered().getText();
141
    }
142
    /**
143
     * @see  #getRuleConsidered()
144
     */
145
    public void setRuleConsidered(String ruleConsidered){
146
        this.ruleConsidered().setText(ruleConsidered);
147
    }
148
    /**
149
     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getRuleConsidered() rule considered}.
150
     */
151
    public NomenclaturalCodeEdition getCodeEdition() {
152
        return ruleConsidered().getCodeEdition();
153
    }
154
    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
155
        ruleConsidered().setCodeEdition(codeEdition);
156
    }
157
    private RuleConsidered ruleConsidered(){
158
        if(this.ruleConsidered==null){
159
            ruleConsidered = new RuleConsidered();
160
        }
161
        return ruleConsidered;
162
    }
128 163

  
129 164
//*********************** CLONE ********************************************************/
130 165

  
......
140 175
	public Object clone() {
141 176
		try {
142 177
			NomenclaturalStatus result = (NomenclaturalStatus)super.clone();
143
			//no changes to: ruleConsidered, type
178
	         result.ruleConsidered = this.ruleConsidered == null? null : this.ruleConsidered.clone();
179
			//no changes to: type
144 180
			return result;
145 181
		} catch (CloneNotSupportedException e) {
146 182
			logger.warn("Object does not implement cloneable");
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/RuleConsidered.java
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.model.name;
10

  
11
import java.io.Serializable;
12

  
13
import javax.persistence.Column;
14
import javax.persistence.Embeddable;
15
import javax.validation.constraints.NotNull;
16
import javax.xml.bind.annotation.XmlAccessType;
17
import javax.xml.bind.annotation.XmlAccessorType;
18
import javax.xml.bind.annotation.XmlAttribute;
19
import javax.xml.bind.annotation.XmlElement;
20
import javax.xml.bind.annotation.XmlRootElement;
21
import javax.xml.bind.annotation.XmlType;
22

  
23
import org.apache.log4j.Logger;
24
import org.hibernate.annotations.Type;
25
import org.hibernate.envers.Audited;
26

  
27
/**
28
 * @author a.mueller
29
 * @since 23.07.2019
30
 */
31
@XmlAccessorType(XmlAccessType.FIELD)
32
@XmlType(name = "RuleConsidered", propOrder = {
33
    "text",
34
    "codeEdition",
35
})
36
@XmlRootElement(name = "RuleConsidered")
37
@Embeddable
38
public class RuleConsidered implements Cloneable, Serializable{
39

  
40
    private static final long serialVersionUID = 531030660792800636L;
41
    private static final Logger logger = Logger.getLogger(RuleConsidered.class);
42

  
43
    //The nomenclatural code rule considered. The article/note/recommendation in the code in question that is commented on in
44
    //the note property.
45
    @XmlElement(name = "text")
46
    @Column(name="ruleConsidered")
47
    private String text;
48

  
49
    /**
50
     * The {@link NomenclaturalCodeEdition code edition} for the rule considered.
51
     */
52
    @XmlAttribute(name ="CodeEdition")
53
    @Column(name="codeEdition", length=20)
54
    @NotNull
55
    @Type(type = "eu.etaxonomy.cdm.hibernate.EnumUserType",
56
        parameters = {@org.hibernate.annotations.Parameter(name = "enumClass", value = "eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition")}
57
    )
58
    @Audited //needed ?
59
    private NomenclaturalCodeEdition codeEdition;
60

  
61
  //******************** FACTORY METHODS ****************************
62

  
63
    /**
64
     * Factory method
65
     * @return
66
     */
67
    public static RuleConsidered NewInstance(){
68
        return new RuleConsidered();
69
    }
70

  
71
//********** GETTER / SETTER ***********************************/
72

  
73
    /**
74
     * Returns the nomenclatural code rule considered (that is the
75
     * article/note/recommendation in the nomenclatural code ruling
76
     * the  taxon name(s) of this nomenclatural status).
77
     * The considered rule gives the reason why the
78
     * {@link NomenclaturalStatusType nomenclatural status type} has been
79
     * assigned to the {@link TaxonName taxon name(s)}.
80
     *
81
     * @see #getCodeEdition()
82
     */
83
    public String getText(){
84
        return this.text;
85
    }
86

  
87
    /**
88
     * @see  #getText()
89
     */
90
    public void setText(String text){
91
        this.text = text;
92
    }
93

  
94
    /**
95
     * The {@link NomenclaturalCodeEdition code edition} for the {@link #getText() rule considered}.
96
     */
97
    public NomenclaturalCodeEdition getCodeEdition() {
98
        return codeEdition;
99
    }
100
    public void setCodeEdition(NomenclaturalCodeEdition codeEdition) {
101
        this.codeEdition = codeEdition;
102
    }
103

  
104
  //*********** CLONE **********************************/
105

  
106
    /**
107
     * Clones <i>this</i> rule considered.
108
     *
109
     * @see java.lang.Object#clone()
110
     */
111
    @Override
112
    public RuleConsidered clone(){
113
        try{
114
            RuleConsidered result = (RuleConsidered)super.clone();
115
            //no changes to: ruleConsidered, codeEdition
116
            return result;
117
        } catch (CloneNotSupportedException e) {
118
            logger.warn("Object does not implement cloneable");
119
            e.printStackTrace();
120
            return null;
121
        }
122
    }
123
}
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NomenclaturalCodeEditionTest.java
1
/**
2
* Copyright (C) 2019 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.model.name;
10

  
11
import java.util.List;
12

  
13
import org.junit.Assert;
14
import org.junit.Before;
15
import org.junit.Test;
16

  
17
/**
18
 * @author a.mueller
19
 * @since 23.07.2019
20
 *
21
 */
22
public class NomenclaturalCodeEditionTest {
23

  
24
    /**
25
     * @throws java.lang.Exception
26
     */
27
    @Before
28
    public void setUp() throws Exception {
29
    }
30

  
31
    /**
32
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getTitleCache()}.
33
     */
34
    @Test
35
    public void testGetTitleCache() {
36
        //no exception should be thrown and no title cache should be null
37
        for (NomenclaturalCodeEdition edition: NomenclaturalCodeEdition.values()){
38
            Assert.assertNotNull(edition.getTitleCache());
39
        }
40
        Assert.assertEquals("Shenzhen 2017", NomenclaturalCodeEdition.ICN_2017_SHENZHEN.getTitleCache());
41
        Assert.assertEquals("ICZN 1961", NomenclaturalCodeEdition.ICZN_1961.getTitleCache());
42
    }
43

  
44
    /**
45
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getCode()}.
46
     */
47
    @Test
48
    public void testGetCode() {
49
        //no exception should be thrown and no code should be null
50
        for (NomenclaturalCodeEdition edition: NomenclaturalCodeEdition.values()){
51
            Assert.assertNotNull(edition.getCode());
52
        }
53
        Assert.assertSame(NomenclaturalCode.ICNAFP, NomenclaturalCodeEdition.ICN_2017_SHENZHEN.getCode());
54
    }
55

  
56
    /**
57
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getWikiDataUri()}.
58
     */
59
    @Test
60
    public void testGetWikiDataUri() {
61
        //no exception should be thrown
62
        for (NomenclaturalCodeEdition edition: NomenclaturalCodeEdition.values()){
63
            edition.getWikiDataUri();
64
        }
65
        Assert.assertEquals("https://www.wikidata.org/wiki/Q56701992", NomenclaturalCodeEdition.ICN_2017_SHENZHEN.getWikiDataUri().toString());
66
        Assert.assertEquals("As long as ICVCN_2011 code has no doi no exception should be thrown", null, NomenclaturalCodeEdition.ICVCN_2011.getWikiDataUri());
67
    }
68

  
69
    /**
70
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getDoi()}.
71
     */
72
    @Test
73
    public void testGetDoi() {
74
        //no exception should be thrown
75
        for (NomenclaturalCodeEdition edition: NomenclaturalCodeEdition.values()){
76
            edition.getDoi();
77
        }
78
        Assert.assertEquals("http://doi.org/10.12705/Code.2018", NomenclaturalCodeEdition.ICN_2017_SHENZHEN.getDoi().asURI().toString());
79
        Assert.assertEquals("As long as Tokyo code has no doi no exception should be thrown", null, NomenclaturalCodeEdition.ICN_1993_TOKYO.getDoi());
80
    }
81

  
82
    /**
83
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getKey()}.
84
     */
85
    @Test
86
    public void testGetKey() {
87
        //no exception should be thrown and no key should be null
88
        for (NomenclaturalCodeEdition edition: NomenclaturalCodeEdition.values()){
89
            Assert.assertNotNull(edition.getKey());
90
        }
91
        Assert.assertEquals("ICNAFP2017", NomenclaturalCodeEdition.ICN_2017_SHENZHEN.getKey());
92
    }
93

  
94
    /**
95
     * Test method for {@link eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition#getByKey(java.lang.String)}.
96
     */
97
    @Test
98
    public void testGetByKey() {
99
        Assert.assertSame(NomenclaturalCodeEdition.ICN_2017_SHENZHEN, NomenclaturalCodeEdition.getByKey("ICNAFP2017"));
100
    }
101

  
102
    @Test
103
    public void testForCode() {
104
        List<NomenclaturalCodeEdition> editions = NomenclaturalCodeEdition.forCode(NomenclaturalCode.ICNAFP);
105
        Assert.assertTrue(editions.contains(NomenclaturalCodeEdition.ICN_2011_MELBOURNE));
106
        Assert.assertEquals(5, editions.size());
107
        Assert.assertFalse(editions.contains(NomenclaturalCodeEdition.ICZN_1999));
108

  
109
        editions = NomenclaturalCodeEdition.forCode(NomenclaturalCode.NonViral);
110
        Assert.assertTrue(editions.contains(NomenclaturalCodeEdition.ICN_2011_MELBOURNE));
111
        Assert.assertTrue(editions.contains(NomenclaturalCodeEdition.ICZN_1999));
112
        Assert.assertEquals(15, editions.size());
113
        Assert.assertFalse(editions.contains(NomenclaturalCodeEdition.ICVCN_2018));
114

  
115
    }
116

  
117
}
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/name/NonViralNameTest.java
371 371
		INonViralName child2 = TaxonNameFactory.NewNonViralInstance(Rank.SPECIES());
372 372
		nonViralName1.addHybridParent(parent, HybridRelationshipType.FIRST_PARENT(), "parent rule");
373 373
		nonViralName1.addHybridParent(parent2, HybridRelationshipType.SECOND_PARENT(), "parent rule2");
374
		nonViralName1.addHybridChild(child, HybridRelationshipType.FEMALE_PARENT(), "child rule");
374
		HybridRelationship childRel = nonViralName1.addHybridChild(child, HybridRelationshipType.FEMALE_PARENT(), "child rule");
375 375

  
376 376

  
377 377
		INonViralName clone = (INonViralName)(nonViralName1).clone();
......
409 409
		Assert.assertSame("Child should be child in parentRelationship", child, parentRelation.getRelatedTo());
410 410
		Assert.assertSame("Relationship type should be cloned correctly", HybridRelationshipType.FEMALE_PARENT(), parentRelation.getType());
411 411
		Assert.assertEquals("Rule should be cloned correctly", "child rule", parentRelation.getRuleConsidered());
412
        Assert.assertEquals("Rule should be cloned correctly", childRel.getRuleConsidered(), parentRelation.getRuleConsidered());
413
        //TODO string can be same but RuleConsidered object must differ, but this has no getter currently
414
//	    Assert.assertNotSame("Rule should be cloned correctly", childRel.getRuleConsidered(), parentRelation.getRuleConsidered());
412 415
	}
413 416
}
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/data/FullCoverageDataGenerator.java
96 96
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
97 97
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
98 98
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
99
import eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition;
99 100
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
100 101
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
101 102
import eu.etaxonomy.cdm.model.name.Rank;
......
129 130
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
130 131
import eu.etaxonomy.cdm.model.term.DefinedTerm;
131 132
import eu.etaxonomy.cdm.model.term.Representation;
132
import eu.etaxonomy.cdm.model.term.TermTree;
133 133
import eu.etaxonomy.cdm.model.term.TermNode;
134
import eu.etaxonomy.cdm.model.term.TermTree;
134 135
import eu.etaxonomy.cdm.model.term.TermType;
135 136
import eu.etaxonomy.cdm.model.term.TermVocabulary;
136 137
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
......
864 865
		zooName.setNomenclaturalMicroReference("p. 123");
865 866
		zooName.setNomenclaturalReference(getReference());
866 867
		NameRelationship rel = zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered");
868
		rel.setCodeEdition(NomenclaturalCodeEdition.ICN_2017_SHENZHEN);
867 869
		NomenclaturalStatus status = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222");
868 870
		zooName.addStatus(status);
869 871
		handleAnnotatableEntity(rel);
cdmlib-test/src/main/resources/dbscripts/001-cdm.h2.sql
2156 2156
    ORIGINALNAMESTRING VARCHAR(255),
2157 2157
    DOUBTFUL BOOLEAN NOT NULL,
2158 2158
    RULECONSIDERED VARCHAR(255),
2159
	CODEEDITION VARCHAR(20),
2159 2160
    CREATEDBY_ID INTEGER,
2160 2161
    UPDATEDBY_ID INTEGER,
2161 2162
    CITATION_ID INTEGER,
......
2175 2176
    ORIGINALNAMESTRING VARCHAR(255),
2176 2177
    DOUBTFUL BOOLEAN,
2177 2178
    RULECONSIDERED VARCHAR(255),
2179
    CODEEDITION VARCHAR(20),
2178 2180
    CREATEDBY_ID INTEGER,
2179 2181
    UPDATEDBY_ID INTEGER,
2180 2182
    CITATION_ID INTEGER,
......
2931 2933
    ORIGINALNAMESTRING VARCHAR(255),
2932 2934
    DOUBTFUL BOOLEAN NOT NULL,
2933 2935
    RULECONSIDERED VARCHAR(255),
2936
    CODEEDITION VARCHAR(20),
2934 2937
    CREATEDBY_ID INTEGER,
2935 2938
    UPDATEDBY_ID INTEGER,
2936 2939
    CITATION_ID INTEGER,
......
2950 2953
    ORIGINALNAMESTRING VARCHAR(255),
2951 2954
    DOUBTFUL BOOLEAN,
2952 2955
    RULECONSIDERED VARCHAR(255),
2956
	CODEEDITION VARCHAR(20),
2953 2957
    CREATEDBY_ID INTEGER,
2954 2958
    UPDATEDBY_ID INTEGER,
2955 2959
    CITATION_ID INTEGER,
......
2990 2994
    CITATIONMICROREFERENCE VARCHAR(255),
2991 2995
    ORIGINALNAMESTRING VARCHAR(255),
2992 2996
    RULECONSIDERED VARCHAR(255),
2997
    CODEEDITION VARCHAR(20),
2993 2998
    CREATEDBY_ID INTEGER,
2994 2999
    UPDATEDBY_ID INTEGER,
2995 3000
    CITATION_ID INTEGER,
......
3006 3011
    CITATIONMICROREFERENCE VARCHAR(255),
3007 3012
    ORIGINALNAMESTRING VARCHAR(255),
3008 3013
    RULECONSIDERED VARCHAR(255),
3014
    CODEEDITION VARCHAR(20),
3009 3015
    CREATEDBY_ID INTEGER,
3010 3016
    UPDATEDBY_ID INTEGER,
3011 3017
    CITATION_ID INTEGER,
cdmlib-test/src/main/resources/eu/etaxonomy/cdm/database/schema/dataset.dtd
1667 1667
    ORIGINALNAMESTRING CDATA #IMPLIED
1668 1668
    DOUBTFUL CDATA #IMPLIED
1669 1669
    RULECONSIDERED CDATA #IMPLIED
1670
    CODEEDITION CDATA #IMPLIED
1670 1671
    CREATEDBY_ID CDATA #IMPLIED
1671 1672
    UPDATEDBY_ID CDATA #IMPLIED
1672 1673
    CITATION_ID CDATA #IMPLIED
......
1701 1702
    ORIGINALNAMESTRING CDATA #IMPLIED
1702 1703
    DOUBTFUL CDATA #IMPLIED
1703 1704
    RULECONSIDERED CDATA #IMPLIED
1705
    CODEEDITION CDATA #IMPLIED
1704 1706
    CREATEDBY_ID CDATA #IMPLIED
1705 1707
    UPDATEDBY_ID CDATA #IMPLIED
1706 1708
    CITATION_ID CDATA #IMPLIED
......
2109 2111
    ORIGINALNAMESTRING CDATA #IMPLIED
2110 2112
    DOUBTFUL CDATA #IMPLIED
2111 2113
    RULECONSIDERED CDATA #IMPLIED
2114
    CODEEDITION CDATA #IMPLIED
2112 2115
    CREATEDBY_ID CDATA #IMPLIED
2113 2116
    UPDATEDBY_ID CDATA #IMPLIED
2114 2117
    CITATION_ID CDATA #IMPLIED
......
2143 2146
    ORIGINALNAMESTRING CDATA #IMPLIED
2144 2147
    DOUBTFUL CDATA #IMPLIED
2145 2148
    RULECONSIDERED CDATA #IMPLIED
2149
    CODEEDITION CDATA #IMPLIED
2146 2150
    CREATEDBY_ID CDATA #IMPLIED
2147 2151
    UPDATEDBY_ID CDATA #IMPLIED
2148 2152
    CITATION_ID CDATA #IMPLIED
......
2174 2178
    CITATIONMICROREFERENCE CDATA #IMPLIED
2175 2179
    ORIGINALNAMESTRING CDATA #IMPLIED
2176 2180
    RULECONSIDERED CDATA #IMPLIED
2181
    CODEEDITION CDATA #IMPLIED
2177 2182
    CREATEDBY_ID CDATA #IMPLIED
2178 2183
    UPDATEDBY_ID CDATA #IMPLIED
2179 2184
    CITATION_ID CDATA #IMPLIED
......
2205 2210
    CITATIONMICROREFERENCE CDATA #IMPLIED
2206 2211
    ORIGINALNAMESTRING CDATA #IMPLIED
2207 2212
    RULECONSIDERED CDATA #IMPLIED
2213
    CODEEDITION CDATA #IMPLIED
2208 2214
    CREATEDBY_ID CDATA #IMPLIED
2209 2215
    UPDATEDBY_ID CDATA #IMPLIED
2210 2216
    CITATION_ID CDATA #IMPLIED

Also available in: Unified diff

Add picture from clipboard (Maximum size: 40 MB)