/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package uk.ac.ebi.ep.parser.parsers; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import uk.ac.ebi.ep.data.domain.UniprotXref; import uk.ac.ebi.ep.data.service.EnzymePortalParserService; import static uk.ac.ebi.ep.parser.inbatch.PartitioningSpliterator.partition; import uk.ac.ebi.ep.pdbeadapter.PdbService; import uk.ac.ebi.ep.pdbeadapter.summary.PDBe; import uk.ac.ebi.ep.pdbeadapter.summary.PdbSearchResult; /** * * @author joseph */ @Transactional @Service public class EnzymePortalPDBeParser { private static final Logger LOGGER = Logger.getLogger(EnzymePortalPDBeParser.class); @Autowired private EnzymePortalParserService parserService; @Autowired private PdbService pdbService; public void updatePDBeData() { Set<UniprotXref> entries = new HashSet<>(); List<UniprotXref> pdbIds = parserService.findPDBcodes(); LOGGER.info("Number of PDB entries to process : "+ pdbIds.size()); //int est = pdbIds.size()/500; Stream<UniprotXref> existingStream = pdbIds.stream(); Stream<List<UniprotXref>> partitioned = partition(existingStream, 500, 1); AtomicInteger count = new AtomicInteger(1); partitioned.parallel().forEach((chunk) -> { chunk.stream().forEach((pdb) -> { //obtain a concrete pdb entry PdbSearchResult results = pdbService.getPdbSearchResults(pdb.getSourceId().toLowerCase()); if (results != null) { List<PDBe> result = results.get(pdb.getSourceId().toLowerCase()); String title = result.stream().findAny().get().getTitle(); pdb.setSourceName(title); entries.add(pdb); } }); }); // AtomicInteger count = new AtomicInteger(1); // pdbIds.stream().forEach((pdb) -> { // //obtain a concrete pdb entry // PdbSearchResult results = pdbService.getPdbSearchResults(pdb.getSourceId().toLowerCase()); // // System.out.println("count "+count.getAndIncrement() +" PDB id "+ pdb.getSourceId()); // if (results != null) { // List<PDBe> result = results.get(pdb.getSourceId().toLowerCase()); // String title = result.stream().findAny().get().getTitle(); // pdb.setSourceName(title); // entries.add(pdb); // } // }); //update entry List<UniprotXref> pdbEntries = entries.stream().collect(Collectors.toList()); List<UniprotXref> updatedEntries = parserService.updatePDB(pdbEntries); LOGGER.info("Number of PDB entries updated are : " + updatedEntries.size()); updatedEntries.clear(); } }