I wrote this method that does the job and passes the assertion tests for a large java backend project but I'm not all happy with the way it reads, perhaps you can tell me how to refactor and/or improve this method?
public Set<ProductOfferingJsonDto> getJsonProductOfferings() {
Set<ProductOfferingJsonDto> set = new HashSet<ProductOfferingJsonDto>();
ProductOfferingJsonDto pjson = null;
Iterator iter = productOfferings.iterator();
while(iter.hasNext()){
ProductOfferingDto pdto = (ProductOfferingDto) iter.next();
if(pdto instanceof BundledProductOfferingDto) {
Set<ProductOfferingDto> tmp = ((BundledProductOfferingDto) pdto).getProductOfferings();
Iterator piter = tmp.iterator();
Set<ProductOfferingJsonDto> tmpset = new HashSet<ProductOfferingJsonDto>();
while(piter.hasNext()){
SimpleProductOfferingDto piterdto = (SimpleProductOfferingDto) piter.next();
tmpset.add(new SimpleProductOfferingJsonDto(piterdto.getId(), piterdto.getName(), piterdto.getDescription(), piterdto.getStatus(),
piterdto.getBrand(), piterdto.getValidFor(),
piterdto.getProductSpecification(),
piterdto.getDescriptorId(), piterdto.getTags(), piterdto.getProductOfferingPrice()));
}
BundledProductOfferingDto bpod = (BundledProductOfferingDto) pdto;
pjson = new BundledProductOfferingJsonDto(bpod.getId(), bpod.getName(), bpod.getDescription(), bpod.getStatus(),
bpod.getBrand(), bpod.getValidFor(),
tmpset,
bpod.getDescriptorId(), bpod.getTags(), bpod.getProductOfferingPrice());
}
if(pjson != null) {
set.add((ProductOfferingJsonDto) pjson);
}
}
return set;
}