Project

General

Profile

« Previous | Next » 

Revision 4ae09d10

Added by Patrick Plitzner almost 8 years ago

Add taxa to classifications #5448

View differences:

app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportClassification.java
94 94
        ResultSet rs = partitioner.getResultSet();
95 95
        Classification gesamtListeClassification = getClassificationService().load(state.getConfig().getClassificationUuid());
96 96
        Classification checklistClassification = getClassificationService().load(RedListUtil.checkListClassificationUuid);
97
        Classification classificationE = getClassificationService().load(RedListUtil.uuidClassificationE);
98
        Classification classificationW = getClassificationService().load(RedListUtil.uuidClassificationW);
99
        Classification classificationK = getClassificationService().load(RedListUtil.uuidClassificationK);
100
        Classification classificationAW = getClassificationService().load(RedListUtil.uuidClassificationAW);
101
        Classification classificationAO = getClassificationService().load(RedListUtil.uuidClassificationAO);
102
        Classification classificationR = getClassificationService().load(RedListUtil.uuidClassificationR);
103
        Classification classificationO = getClassificationService().load(RedListUtil.uuidClassificationO);
104
        Classification classificationS = getClassificationService().load(RedListUtil.uuidClassificationS);
97 105
        try {
98 106
            while (rs.next()){
99
                makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification);
107
                makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification,
108
                        classificationE, classificationW, classificationK, classificationAW
109
                        , classificationAO, classificationR, classificationO, classificationS);
100 110

  
101 111
            }
102 112
        } catch (SQLException e) {
......
109 119
        return true;
110 120
    }
111 121

  
112
    private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs, Classification gesamtListeClassification, Classification checklistClassification)
122
    private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs,
123
            Classification gesamtListeClassification, Classification checklistClassification,
124
            Classification classificationE, Classification classificationW, Classification classificationK,
125
            Classification classificationAW, Classification classificationAO, Classification classificationR,
126
            Classification classificationO, Classification classificationS)
113 127
            throws SQLException {
114 128
        long id = rs.getLong(RedListUtil.NAMNR);
115 129
        String parentId = String.valueOf(rs.getLong(RedListUtil.LOWER));
......
137 151
        }
138 152

  
139 153
        //add taxa for concept relationships to E, W, K, AW, AO, R, O, S
140
        addTaxonToClassification(RedListUtil.uuidClassificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
141
        addTaxonToClassification(RedListUtil.uuidClassificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
142
        addTaxonToClassification(RedListUtil.uuidClassificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
143
        addTaxonToClassification(RedListUtil.uuidClassificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
144
        addTaxonToClassification(RedListUtil.uuidClassificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
145
        addTaxonToClassification(RedListUtil.uuidClassificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
146
        addTaxonToClassification(RedListUtil.uuidClassificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
147
        addTaxonToClassification(RedListUtil.uuidClassificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
154
        addTaxonToClassification(classificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
155
        addTaxonToClassification(classificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
156
        addTaxonToClassification(classificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
157
        addTaxonToClassification(classificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
158
        addTaxonToClassification(classificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
159
        addTaxonToClassification(classificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
160
        addTaxonToClassification(classificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
161
        addTaxonToClassification(classificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
148 162
    }
149 163

  
150
    private void addTaxonToClassification(UUID classificationUuid, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
164
    private void addTaxonToClassification(Classification classification, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
151 165
        Taxon taxon = HibernateProxyHelper.deproxy(state.getRelatedObject(classificationNamespace, String.valueOf(id), TaxonBase.class), Taxon.class);
152
        Classification classification = getClassificationService().load(classificationUuid);
153 166
        classification.addChildTaxon(taxon, null, null);
154 167
    }
155 168

  
app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java
152 152
         */
153 153
        //checklist
154 154
        if(CdmUtils.isNotBlank(clTaxonString) && !clTaxonString.trim().equals("-")){
155
            cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, state);
155
            cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, false, true, state);
156 156
        }
157 157
        //E, W, K, AW, AO, R, O, S
158 158
        addConceptRelation(relationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, taxonBase, name, taxaToSave, id, state);
......
171 171

  
172 172
    private void addConceptRelation(String relationString, String classificationNamespace, TaxonBase taxonBase, TaxonNameBase name, Set<TaxonBase> taxaToSave, long id, RedListGefaesspflanzenImportState state){
173 173
        if(CdmUtils.isNotBlank(relationString) && !relationString.equals(".")){
174
            TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(relationString);
174
            String substring = relationString.substring(relationString.length()-1, relationString.length());
175
            TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(substring);
175 176
            if(taxonRelationshipTypeByKey==null){
176
                RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase, logger);
177
                RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase.generateTitle(), logger);
178
            }
179
            //there is no type "included in" so we have to reverse the direction
180
            if(substring.equals("<")){
181
                cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, true, false, state);
182
            }
183
            else{
184
                cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, false, false, state);
177 185
            }
178
            cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, state);
179 186
        }
180 187
    }
181 188

  
182 189
    /**
183 190
     * <b>NOTE:</b> the {@link TaxonRelationshipType} passed as parameter is
184
     * directed <b>from the clone</b> to the taxon
191
     * directed <b>from the clone</b> to the taxon.<br>
192
     * This can be changed with parameter <i>reverseRelation</i>
185 193
     */
186
    private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, RedListGefaesspflanzenImportState state){
187
            TaxonBase clone = (TaxonBase) taxonBase.clone();
188
            clone.setName(name);
189
            if(taxonBase.isInstanceOf(Taxon.class)){
190
                TaxonRelationship taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
191
                taxonRelation.setDoubtful(true);//TODO Ist das mit " mit Fragezeichen" gemeint?
194
    private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, boolean reverseRelation, boolean doubtful, RedListGefaesspflanzenImportState state){
195
        TaxonBase clone = (TaxonBase) taxonBase.clone();
196
        clone.setName(name);
197
        if(taxonBase.isInstanceOf(Taxon.class)){
198
            TaxonRelationship taxonRelation;
199
            if(reverseRelation){
200
                taxonRelation = ((Taxon) taxonBase).addTaxonRelation((Taxon) clone, relationFromCloneToTaxon, null, null);
192 201
            }
193
            ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
194
            taxaToSave.add(clone);
202
            else {
203
                taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
204
            }
205
            taxonRelation.setDoubtful(doubtful);
206
        }
207
        ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
208
        taxaToSave.add(clone);
195 209
    }
196 210

  
197 211
    private TaxonBase importTaxon(long id, String taxNameString, String gueltString, String authorBasiString,
app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenTransformer.java
72 72
    public TaxonRelationshipType getTaxonRelationshipTypeByKey(String key) {
73 73
        if (key == null){return null;}
74 74
        else {
75
            String substring = key.substring(key.length()-1, key.length());
76 75
            //        if (key.equals("<")){return TaxonRelationshipType.();}//TODO: what to do here?
77
            if (substring.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
78
            else if (substring.equals(">")){return TaxonRelationshipType.INCLUDES();}
79
            else if (substring.equals("!")){return TaxonRelationshipType.OVERLAPS();}
80
            else if (substring.equals("?")){return TaxonRelationshipType.ALL_RELATIONSHIPS();}
76
            if (key.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
77
            else if (key.equals(">")){return TaxonRelationshipType.INCLUDES();}
78
            else if (key.equals("<")){return TaxonRelationshipType.INCLUDES();}
79
            else if (key.equals("!")){return TaxonRelationshipType.OVERLAPS();}
80
//            else if (key.equals("?")){return TaxonRelationshipType.;}//TODO: what to do here?
81 81
            //        else if (key.equals("x")){return TaxonRelationshipType.();}//TODO: what to do here?
82 82
        }
83 83
        return null;

Also available in: Unified diff