task #8414
Updated by Andreas Kohlbecker over 4 years ago
eu.etaxonomy.cdm.remote.controller.OccurrenceController.doGetOccurencesDTO(@PathVariable(value="uuid") UUID uuid, HttpServletRequest request, HttpServletResponse response) throws IOException
* rename to *FieldUnitDTO as it returns `FieldUnitDTO`s
* In `doGetFieldUnitDTO` maybe also in other methods, the publish flag is checked only for the derivartive for which the uuid is passed to the method. Originals are not checked though! --> **FIXME**
* `FieldUnitDTOOccurrenceServiceImpl.findFieldUnitDTO(DerivateDTO derivedUnitDTO, Collection<FieldUnitDTO> fieldUnits, HashMap<UUID, DerivateDTO> alreadyCollectedSpecimen)` misses documentation regarding the optional params which are not being used in most cases (fieldUnits, alreadyCollectedSpecimen)
* I think this method should be transactional (readonly)
* My first impression is that this method should be split in two methods, one method to get the FieldUnitDTO for a given DerivedUnit (instead of PreservedSpecimenDTO) and another method which does the more fancy stuff.
* The method only adds the derived unit which is passed as parameter, what about all other derived units? These seem to be missing! This **needs to be FIXED**
* FieldUnitDTO:
* has the field `taxonRelatedDerivedUnits`. What is the purpose of this field? Is this field meant to hold derived units associated to taxa via `IndividualsAssociation`s?
* why is `FieldUnitDTO` providing a `newInstance` method? As far as I know the only reason for doing so is a situation in which the newInstanceMethod returns difference types, which the new operator can not do. The actual implementation of the newInstance method differs from the constructor:
~~~java
/**
* @param fieldUnit
*/
public FieldUnitDTO(FieldUnit fieldUnit) {
super(fieldUnit);
}
public static FieldUnitDTO newInstance(FieldUnit fieldUnit){
FieldUnitDTO fieldUnitDto = new FieldUnitDTO(fieldUnit);
if (fieldUnit.getGatheringEvent() != null){
fieldUnitDto.gatheringEvent = GatheringEventDTO.newInstance(fieldUnit.getGatheringEvent());
}
fieldUnitDto.setRecordBase(fieldUnit.getRecordBasis().getMessage());
fieldUnitDto.setListLabel(fieldUnit.getTitleCache());
return fieldUnitDto;
}
~~~
is this by purpose? To me this looks like an error....
`OccurrenceServiceImpl.assembleFieldUnitDTO(..)` is using the constructor and adds the gathering event to the dto which is done in the newInstance method. --> **TODO**: needs review and harmonization** (I think the newInstance Method should be removed completely as it causes confusion)