Revision 969dbe3e
Added by Katja Luther over 6 years ago
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/FeatureNode.java | ||
---|---|---|
41 | 41 |
import org.hibernate.annotations.Table; |
42 | 42 |
import org.hibernate.envers.Audited; |
43 | 43 |
|
44 |
import eu.etaxonomy.cdm.hibernate.HHH_9751_Util; |
|
44 | 45 |
import eu.etaxonomy.cdm.model.common.ITreeNode; |
45 | 46 |
import eu.etaxonomy.cdm.model.common.VersionableEntity; |
46 | 47 |
|
... | ... | |
236 | 237 |
*/ |
237 | 238 |
@Override |
238 | 239 |
public List<FeatureNode> getChildNodes() { |
240 |
HHH_9751_Util.removeAllNull(children); |
|
241 |
updateSortIndex(); |
|
239 | 242 |
return children; |
240 | 243 |
} |
241 | 244 |
|
... | ... | |
298 | 301 |
* @see #removeChild(int) |
299 | 302 |
*/ |
300 | 303 |
public void removeChild(FeatureNode child){ |
304 |
HHH_9751_Util.removeAllNull(children); |
|
305 |
updateSortIndex(); |
|
301 | 306 |
int index = children.indexOf(child); |
302 | 307 |
if (index >= 0){ |
303 | 308 |
removeChild(index); |
... | ... | |
316 | 321 |
* @see #removeChild(FeatureNode) |
317 | 322 |
*/ |
318 | 323 |
public void removeChild(int index){ |
324 |
HHH_9751_Util.removeAllNull(children); |
|
325 |
updateSortIndex(); |
|
319 | 326 |
FeatureNode child = children.get(index); |
320 | 327 |
if (child != null){ |
321 | 328 |
children.remove(index); |
... | ... | |
341 | 348 |
* @see #removeChild(int) |
342 | 349 |
*/ |
343 | 350 |
public FeatureNode getChildAt(int childIndex) { |
344 |
return children.get(childIndex); |
|
351 |
HHH_9751_Util.removeAllNull(children); |
|
352 |
updateSortIndex(); |
|
353 |
return children.get(childIndex); |
|
345 | 354 |
} |
346 | 355 |
|
347 | 356 |
/** |
... | ... | |
364 | 373 |
* @see #removeChild(int) |
365 | 374 |
*/ |
366 | 375 |
public int getIndex(FeatureNode node) { |
376 |
HHH_9751_Util.removeAllNull(children); |
|
377 |
updateSortIndex(); |
|
378 |
|
|
367 | 379 |
if (! children.contains(node)){ |
368 | 380 |
return -1; |
369 | 381 |
}else{ |
... | ... | |
603 | 615 |
} |
604 | 616 |
} |
605 | 617 |
|
618 |
private void updateSortIndex(){ |
|
619 |
// TODO workaround (see sortIndex doc) |
|
620 |
for (int i = 0; i < children.size(); i++) { |
|
621 |
children.get(i).setSortIndex(i); |
|
622 |
} |
|
623 |
} |
|
624 |
|
|
606 | 625 |
|
607 | 626 |
} |
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/PolytomousKeyNode.java | ||
---|---|---|
426 | 426 |
*/ |
427 | 427 |
public List<PolytomousKeyNode> getChildren() { |
428 | 428 |
HHH_9751_Util.removeAllNull(children); |
429 |
updateSortIndex(); |
|
429 | 430 |
return children; |
430 | 431 |
} |
431 | 432 |
|
... | ... | |
466 | 467 |
throw new IndexOutOfBoundsException("Wrong index: " + index); |
467 | 468 |
} |
468 | 469 |
HHH_9751_Util.removeAllNull(children); |
470 |
updateSortIndex(); |
|
469 | 471 |
|
470 | 472 |
if(nodeNumber == null) { |
471 | 473 |
nodeNumber = getMaxNodeNumberFromRoot() + 1; |
... | ... | |
475 | 477 |
children.add(index, child); |
476 | 478 |
child.setKey(this.getKey()); |
477 | 479 |
|
478 |
// TODO workaround (see sortIndex doc) |
|
479 |
for (int i = 0; i < children.size(); i++) { |
|
480 |
children.get(i).setSortIndex(i); |
|
481 |
} |
|
480 |
updateSortIndex(); |
|
482 | 481 |
child.setSortIndex(index); |
483 | 482 |
child.setParent(this); |
484 | 483 |
} |
... | ... | |
498 | 497 |
*/ |
499 | 498 |
public void removeChild(PolytomousKeyNode child) { |
500 | 499 |
HHH_9751_Util.removeAllNull(children); |
500 |
updateSortIndex(); |
|
501 | 501 |
int index = children.indexOf(child); |
502 | 502 |
if (index >= 0) { |
503 | 503 |
removeChild(index); |
... | ... | |
592 | 592 |
newNodeN++; |
593 | 593 |
List<PolytomousKeyNode> children = node.getChildren(); |
594 | 594 |
HHH_9751_Util.removeAllNull(children); |
595 |
updateSortIndex(); |
|
595 | 596 |
for (PolytomousKeyNode child : children) { |
596 | 597 |
if (node == child){ |
597 | 598 |
throw new RuntimeException("Parent and child are the same for the given key node. This will lead to an infinite loop when updating node numbers."); |
... | ... | |
887 | 888 |
|
888 | 889 |
} |
889 | 890 |
|
891 |
private void updateSortIndex(){ |
|
892 |
// TODO workaround (see sortIndex doc) |
|
893 |
for (int i = 0; i < children.size(); i++) { |
|
894 |
children.get(i).setSortIndex(i); |
|
895 |
} |
|
896 |
} |
|
897 |
|
|
890 | 898 |
|
891 | 899 |
} |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ClassificationServiceImpl.java | ||
---|---|---|
27 | 27 |
import org.springframework.transaction.annotation.Transactional; |
28 | 28 |
|
29 | 29 |
import eu.etaxonomy.cdm.api.service.config.CreateHierarchyForClassificationConfigurator; |
30 |
import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; |
|
31 |
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; |
|
30 | 32 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
31 | 33 |
import eu.etaxonomy.cdm.api.service.pager.PagerUtils; |
32 | 34 |
import eu.etaxonomy.cdm.api.service.pager.impl.AbstractPagerImpl; |
... | ... | |
586 | 588 |
return dao.classificationLookup(classification); |
587 | 589 |
} |
588 | 590 |
|
591 |
|
|
592 |
public DeleteResult delete(UUID classificationUuid, TaxonDeletionConfigurator config){ |
|
593 |
DeleteResult result = new DeleteResult(); |
|
594 |
Classification classification = dao.findByUuid(classificationUuid); |
|
595 |
if (classification == null){ |
|
596 |
result.addException(new IllegalArgumentException("The classification does not exist in database.")); |
|
597 |
result.setAbort(); |
|
598 |
return result; |
|
599 |
} |
|
600 |
if (!classification.hasChildNodes()){ |
|
601 |
dao.delete(classification); |
|
602 |
} |
|
603 |
if (config.getTaxonNodeConfig().getChildHandling().equals(ChildHandling.DELETE) ){ |
|
604 |
TaxonNode root = classification.getRootNode(); |
|
605 |
taxonNodeDao.delete(root, true); |
|
606 |
dao.delete(classification); |
|
607 |
} |
|
608 |
|
|
609 |
|
|
610 |
return result; |
|
611 |
} |
|
612 |
|
|
589 | 613 |
} |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IClassificationService.java | ||
---|---|---|
16 | 16 |
import java.util.UUID; |
17 | 17 |
|
18 | 18 |
import eu.etaxonomy.cdm.api.service.config.CreateHierarchyForClassificationConfigurator; |
19 |
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; |
|
19 | 20 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
20 | 21 |
import eu.etaxonomy.cdm.model.media.MediaRepresentation; |
21 | 22 |
import eu.etaxonomy.cdm.model.name.Rank; |
... | ... | |
309 | 310 |
*/ |
310 | 311 |
ClassificationLookupDTO classificationLookup(Classification classification); |
311 | 312 |
|
313 |
DeleteResult delete(UUID classificationUuid, TaxonDeletionConfigurator config); |
|
314 |
|
|
312 | 315 |
|
313 | 316 |
} |
Also available in: Unified diff
#5678: fix deletion of FeatureNodes and minor changes