Changeset 629

Show
Ignore:
Timestamp:
13-04-12 13:52:51 (2 years ago)
Author:
rob.hooft@…
Message:
  • Remove tab characters in a wild attempt to reduce the number of checkstyle warnings
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/code/conceptwiki/imports/imports-swissprot/src/main/java/nl/nbic/conceptwiki/imports/swissprot/UniprotImport.java

    r571 r629  
    7878    private ConceptService conceptService; 
    7979    @Inject 
    80     private TagStorageService tagStorageService;     
     80    private TagStorageService tagStorageService; 
    8181    @Inject 
    8282    private GraphTemplate graphTemplate; 
    8383    @Inject 
    8484    private JdbcTemplate jdbcChemblTemplate; 
    85      
     85 
    8686    /** 
    8787     * Uniprot release file location. 
     
    8989    @Value("${swissprot.releasefile}") 
    9090    private String uniprotReleaseFile; 
    91      
     91 
    9292    @Value("${swissprot.specificProteinMapping}") 
    9393    private String specificProteinMapping; 
    94      
     94 
    9595    /** 
    96      * This file contains all the duplicated CUIs in ${swissprot.specificProteinMapping}.  
     96     * This file contains all the duplicated CUIs in ${swissprot.specificProteinMapping}. 
    9797     *     sort -t '|' UMLS11AB_SP201201_specificproteins.txt > UMLS11AB_SP201201_specificproteins.txt.sorted 
    9898     *     uniq UMLS11AB_SP201201_specificproteins.txt.sorted -d -w 8  > duplicateCUIs.txt 
     
    100100    @Value("${swissprot.duplicatedCUIsInSpecificProteinMapping}") 
    101101    private String duplicatedCUIsInSpecificProteinMapping; 
    102      
     102 
    103103    @Value("${swissprot.genericProteinMapping}") 
    104104    private String genericProteinMapping; 
    105      
     105 
    106106    @Value("${swissprot.genericGeneMapping}") 
    107107    private String genericGeneMapping; 
    108          
     108 
    109109    @Value("${swissprot.drugbankTargetMapping}") 
    110110    private String drugbankTargetMappingFile; 
    111      
     111 
    112112    @Value("${swissprot.drugbankDrugURLMapping}") 
    113113    private String drugbankDrugURLMapping; 
    114      
     114 
    115115    private Language LANG_EN = new LanguageImpl("en"); 
    116      
     116 
    117117    /** 
    118118     * id of NLM branch. 
    119      * #1: community  
     119     * #1: community 
    120120     * #2: NLM 
    121121     * #3: SwissProt 
     
    126126    private int swissprotBranchId = 3; 
    127127    private int conceptWikiBranchId = 5; 
    128      
     128 
    129129    private static final String UNIPROT_URL_PREFIX = "http://www.uniprot.org/uniprot/"; 
    130     //we don't support drugbank yet.  
     130    //we don't support drugbank yet. 
    131131    //private static final String DRUGBANK_URL_PREFIX = "http://drugbank.ca/drugs/"; 
    132132    private static final String CHEM2BIO2RDF_CHEMBL_PREFIX = "http://chem2bio2rdf.org/chembl/resource/chembl_targets/"; 
    133133    private static final String PDB_URL_PREFIX = "http://www.pdb.org/pdb/explore/explore.do?pdbId="; 
    134      
     134 
    135135    // e.g. http://www4.wiwiss.fu-berlin.de/drugbank/resource/targets/54 
    136136    private static final String DRUGBANK_TARGET_URL_PREFIX = "http://www4.wiwiss.fu-berlin.de/drugbank/resource/targets/"; 
    137          
     137 
    138138    private static final String NON_SPECIES_SPECIFIC_TAG_LABEL = "Non species specific"; 
    139      
     139 
    140140    private Concept nonSpeciesSpecificTag; 
    141      
     141 
    142142    private Concept proteinSemanticType; 
    143143    private Concept geneSemanticType; 
    144      
     144 
    145145    private static Map<String, String> genericProteinMapper = Maps.newHashMap(); 
    146     private static Map<String, String> genericGeneMapper = Maps.newHashMap();     
     146    private static Map<String, String> genericGeneMapper = Maps.newHashMap(); 
    147147    private static Map<String, String> specificProteinMapper = Maps.newHashMap(); 
    148148    private static Set<String> duplicatedCUIs = Sets.newHashSet(); 
    149      
     149 
    150150    private Map<String, Concept> genericProteinConcepts = Maps.newHashMap(); 
    151151    private Map<String, Concept> genericGeneConcepts = Maps.newHashMap(); 
    152152    private Map<String,String> uniprot2ChemblMapping = Maps.newHashMap(); 
    153      
     153 
    154154    private Map<String,String> drugbankTargetMapping = Maps.newHashMap(); 
    155155    private Map<String,List<Url>> drugbankDrugMapping = Maps.newHashMap(); 
    156      
     156 
    157157    public boolean bootstrap() throws IOException { 
    158          
     158 
    159159        final String proteinSemTypeUuid = conceptService.getConceptsByLabel("Amino Acid, Peptide, or Protein", new QueryScopeImpl(), 1).get(0).getUuid(); 
    160         proteinSemanticType = conceptService.getConcept(proteinSemTypeUuid, nlmBranchId);  
    161          
     160        proteinSemanticType = conceptService.getConcept(proteinSemTypeUuid, nlmBranchId); 
     161 
    162162        if (proteinSemanticType == null) { 
    163163            logger.error("cannot find concept Amino Acid, Peptide, or Protein"); 
     
    165165        } 
    166166        logger.info("Amino Acid, Peptide, or Protein: " + proteinSemanticType.getUuid()); 
    167          
     167 
    168168        final String geneSemTypeUuid = conceptService.getConceptsByLabel("Gene or Genome", new QueryScopeImpl(), 1).get(0).getUuid(); 
    169169        geneSemanticType = conceptService.getConcept(geneSemTypeUuid, nlmBranchId); 
    170          
     170 
    171171        if (geneSemanticType == null) { 
    172172            logger.error("cannot find concept Gene or Genome"); 
     
    174174        } 
    175175        logger.info("Gene or Genome: " + geneSemanticType.getUuid()); 
    176          
     176 
    177177        String line, cId, spId; 
    178                  
    179         BufferedReader mappingReader = new BufferedReader(new FileReader(duplicatedCUIsInSpecificProteinMapping));         
     178 
     179        BufferedReader mappingReader = new BufferedReader(new FileReader(duplicatedCUIsInSpecificProteinMapping)); 
    180180        while ((line = mappingReader.readLine()) != null) { 
    181181            StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
    182182            //C1571376|Q91ZQ5 
    183             cId = lineTokenizer.nextToken();      
     183            cId = lineTokenizer.nextToken(); 
    184184            duplicatedCUIs.add(cId); 
    185185        } 
    186186        mappingReader.close(); 
    187          
    188         mappingReader = new BufferedReader(new FileReader(specificProteinMapping));    
     187 
     188        mappingReader = new BufferedReader(new FileReader(specificProteinMapping)); 
    189189        while ((line = mappingReader.readLine()) != null) { 
    190190            StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
    191191            //C1571376|Q91ZQ5 
    192             cId = lineTokenizer.nextToken();      
     192            cId = lineTokenizer.nextToken(); 
    193193            spId = lineTokenizer.nextToken(); 
    194              
     194 
    195195            if (duplicatedCUIs.contains(cId)) { 
    196                 // if this mapping has a duplicated CUI, then it should belong to generic protein mapping. 
    197                 genericProteinMapper.put(spId, cId); 
     196                // if this mapping has a duplicated CUI, then it should belong to generic protein mapping. 
     197                genericProteinMapper.put(spId, cId); 
    198198            } 
    199199            else { 
    200                 specificProteinMapper.put(spId, cId); 
     200                specificProteinMapper.put(spId, cId); 
    201201            } 
    202202        } 
    203203        mappingReader.close(); 
    204          
    205         mappingReader = new BufferedReader(new FileReader(genericProteinMapping));         
     204 
     205        mappingReader = new BufferedReader(new FileReader(genericProteinMapping)); 
    206206        while ((line = mappingReader.readLine()) != null) { 
    207                 if (line.isEmpty()){ 
    208                         continue; 
    209                 } 
     207            if (line.isEmpty()){ 
     208                continue; 
     209            } 
    210210            StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
    211             //O14561|C0001369     
     211            //O14561|C0001369 
    212212            spId = lineTokenizer.nextToken(); 
    213             cId = lineTokenizer.nextToken();  
     213            cId = lineTokenizer.nextToken(); 
    214214            genericProteinMapper.put(spId, cId); 
    215215        } 
    216216        mappingReader.close(); 
    217          
    218         mappingReader = new BufferedReader(new FileReader(genericGeneMapping));         
     217 
     218        mappingReader = new BufferedReader(new FileReader(genericGeneMapping)); 
    219219        while ((line = mappingReader.readLine()) != null) { 
    220220            StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
    221221            //Q5XGC8|C1421558 
    222222            spId = lineTokenizer.nextToken(); 
    223             cId = lineTokenizer.nextToken();  
     223            cId = lineTokenizer.nextToken(); 
    224224            genericGeneMapper.put(spId, cId); 
    225225        } 
    226         mappingReader.close();     
    227          
     226        mappingReader.close(); 
     227 
    228228        final SqlRowSet rowSet = jdbcChemblTemplate.queryForRowSet( 
    229229                "SELECT tid, protein_accession FROM target_dictionary WHERE protein_accession IS NOT NULL"); 
     
    231231            uniprot2ChemblMapping.put(rowSet.getString("protein_accession"), rowSet.getString("tid")); 
    232232        } 
    233          
     233 
    234234        mappingReader = new BufferedReader(new FileReader(drugbankTargetMappingFile)); 
    235235        while ((line = mappingReader.readLine()) != null) { 
    236                 //10|P06737 and SP id could be empty 
    237                 StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
    238                 String target = lineTokenizer.nextToken();    
    239                 if (lineTokenizer.hasMoreTokens()) { 
    240                         spId = lineTokenizer.nextToken(); 
    241                         drugbankTargetMapping.put(spId, target); 
    242                 }                
     236            //10|P06737 and SP id could be empty 
     237            StringTokenizer lineTokenizer = new StringTokenizer(line, "|"); 
     238            String target = lineTokenizer.nextToken(); 
     239            if (lineTokenizer.hasMoreTokens()) { 
     240                spId = lineTokenizer.nextToken(); 
     241                drugbankTargetMapping.put(spId, target); 
     242            } 
    243243        } 
    244244        mappingReader.close(); 
    245          
     245 
    246246        mappingReader = new BufferedReader(new FileReader(drugbankDrugURLMapping)); 
    247247        while ((line = mappingReader.readLine()) != null) { 
     
    251251            List<Url> urls = Lists.newArrayList(); 
    252252            while (lineTokenizer.hasMoreTokens()) { 
    253                 String drugbankUrl = lineTokenizer.nextToken(); 
    254                 urls.add(new UrlImpl(UrlType.ALTERNATIVE, drugbankUrl)); 
     253                String drugbankUrl = lineTokenizer.nextToken(); 
     254                urls.add(new UrlImpl(UrlType.ALTERNATIVE, drugbankUrl)); 
    255255            } 
    256256            drugbankDrugMapping.put(spId, urls); 
    257257        } 
    258258        mappingReader.close(); 
    259          
     259 
    260260        // create non species specific tags. 
    261261        createTags(); 
    262          
    263         logger.info("bootstapping is done");        
    264          
    265          
     262 
     263        logger.info("bootstapping is done"); 
     264 
     265 
    266266        return true; 
    267267    } 
    268      
     268 
    269269    private void createTags() { 
    270270        Transaction tx = graphTemplate.getGraphDb().beginTx(); 
    271271 
    272272        final Label nonSpeciesSpecificLabel = new LabelImpl(LabelType.PREFERRED, NON_SPECIES_SPECIFIC_TAG_LABEL, LANG_EN); 
    273          
     273 
    274274        nonSpeciesSpecificTag = conceptService.createConcept( 
    275                 new ConceptImpl.Builder().labels(Sets.newHashSet(nonSpeciesSpecificLabel)).build(),  
     275                new ConceptImpl.Builder().labels(Sets.newHashSet(nonSpeciesSpecificLabel)).build(), 
    276276                conceptWikiBranchId); 
    277          
    278         // make them as tags         
     277 
     278        // make them as tags 
    279279        tagStorageService.createTag(nonSpeciesSpecificTag.getUuid()); 
    280          
     280 
    281281        tx.success(); 
    282282        tx.finish(); 
    283283    } 
    284      
     284 
    285285    private void tagConceptInConceptWikiBranch(Concept concept, Concept tag) { 
    286          
     286 
    287287        final Set<Concept> newTags = Sets.difference(Sets.newHashSet(tag), concept.getTags()); 
    288288 
     
    290290            Changeset changeset = new ChangesetImpl().withAdd(new ActionImpl() 
    291291                    .withTags(newTags)); 
    292              
     292 
    293293            conceptService.updateConcept(concept.getUuid(), changeset, conceptWikiBranchId); 
    294294        } 
    295295    } 
    296296 
    297      
     297 
    298298    public void setReleaseFile (String locationReleaseFile){ 
    299299        uniprotReleaseFile = locationReleaseFile; 
    300300    } 
    301          
    302     public void run () throws FileNotFoundException, XMLStreamException, JAXBException {       
     301 
     302    public void run () throws FileNotFoundException, XMLStreamException, JAXBException { 
    303303        final XMLInputFactory xif = XMLInputFactory.newInstance(); 
    304304        final XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader(uniprotReleaseFile)); 
    305305        xsr.nextTag(); 
    306          
     306 
    307307        int counter = 0; 
    308          
     308 
    309309        Transaction tx = graphTemplate.getGraphDb().beginTx(); 
    310              
     310 
    311311        final JAXBContext ctx = JAXBContext.newInstance(Entry.class); 
    312312        final Unmarshaller unmarshaller = ctx.createUnmarshaller(); 
    313313        while (xsr.nextTag() == XMLStreamConstants.START_ELEMENT) { 
    314314            final Entry entry = (Entry)unmarshaller.unmarshal(xsr); 
    315              
     315 
    316316            final Set<Label> proteinLabels = Sets.newHashSet(); 
    317317            final Set<Label> geneLabels = Sets.newHashSet(); 
     
    319319            final Set<Url> proteinUrls = Sets.newHashSet(); 
    320320            final Set<Url> geneUrls = Sets.newHashSet(); 
    321              
     321 
    322322            /* Step 1, prepare all elements for the protein/gene concepts */ 
    323              
     323 
    324324            // add notations 
    325325            List<String> accessions = entry.getAccession(); 
    326326            String primaryAccession = accessions.get(0); 
    327              
     327 
    328328            System.out.println(primaryAccession); 
    329              
     329 
    330330            for (String accession :accessions) { 
    331                 notations.add(new NotationImpl(accession)); 
    332             } 
    333              
     331                notations.add(new NotationImpl(accession)); 
     332            } 
     333 
    334334            // add Uniprot and Chembl urls 
    335335            proteinUrls.add(new UrlImpl(UrlType.PREFERRED, UNIPROT_URL_PREFIX + primaryAccession)); 
     
    338338            if (chemblId != null) { 
    339339                proteinUrls.add(new UrlImpl(UrlType.ALTERNATIVE, CHEM2BIO2RDF_CHEMBL_PREFIX + chemblId)); 
    340             }             
    341              
     340            } 
     341 
    342342            // add drugbank target urls 
    343343            if (drugbankTargetMapping.containsKey(primaryAccession)) { 
    344                 String target = drugbankTargetMapping.get(primaryAccession); 
    345                 proteinUrls.add(new UrlImpl(UrlType.ALTERNATIVE, DRUGBANK_TARGET_URL_PREFIX + target)); 
     344                String target = drugbankTargetMapping.get(primaryAccession); 
     345                proteinUrls.add(new UrlImpl(UrlType.ALTERNATIVE, DRUGBANK_TARGET_URL_PREFIX + target)); 
    346346            } 
    347347            // add drugbank drug urls 
    348348            if (drugbankDrugMapping.containsKey(primaryAccession)) { 
    349                 List<Url> drugbankUrls = drugbankDrugMapping.get(primaryAccession); 
    350                 proteinUrls.addAll(drugbankUrls); 
    351             } 
    352              
     349                List<Url> drugbankUrls = drugbankDrugMapping.get(primaryAccession); 
     350                proteinUrls.addAll(drugbankUrls); 
     351            } 
     352 
    353353            // get organism name 
    354             String organism = "";                     
     354            String organism = ""; 
    355355            for (OrganismNameType ont: entry.getOrganism().getName()) { 
    356                 if (ont.getType().equals("scientific")) { 
    357                         organism = ont.getValue(); 
    358                 } 
    359             } 
    360              
     356                if (ont.getType().equals("scientific")) { 
     357                    organism = ont.getValue(); 
     358                } 
     359            } 
     360 
    361361            // add protein labels 
    362             final String proteinRecommendedName = entry.getProtein().getRecommendedName().getFullName().getValue();             
     362            final String proteinRecommendedName = entry.getProtein().getRecommendedName().getFullName().getValue(); 
    363363            // organism should be included in the preferred name 
    364             proteinLabels.add(new LabelImpl(LabelType.PREFERRED, proteinRecommendedName + " (" + organism + ")", LANG_EN));             
     364            proteinLabels.add(new LabelImpl(LabelType.PREFERRED, proteinRecommendedName + " (" + organism + ")", LANG_EN)); 
    365365            for (EvidencedStringType shortRecommendedName : entry.getProtein().getRecommendedName().getShortName()) { 
    366                 proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, shortRecommendedName.getValue(), LANG_EN)); 
    367             }             
     366                proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, shortRecommendedName.getValue(), LANG_EN)); 
     367            } 
    368368            for (AlternativeName altName : entry.getProtein().getAlternativeName()) { 
    369                 proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, altName.getFullName().getValue(), LANG_EN)); 
     369                proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, altName.getFullName().getValue(), LANG_EN)); 
    370370                for (EvidencedStringType shortAltName : altName.getShortName()) { 
    371                         proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, shortAltName.getValue(), LANG_EN)); 
    372                 } 
    373             }             
    374              
     371                    proteinLabels.add(new LabelImpl(LabelType.ALTERNATIVE, shortAltName.getValue(), LANG_EN)); 
     372                } 
     373            } 
     374 
    375375            // dbreference also contains some labels and urls 
    376376            for (DbReferenceType dbReference : entry.getDbReference()) { 
     
    380380                    proteinUrls.add(new UrlImpl(UrlType.ALTERNATIVE, PDB_URL_PREFIX + dbReference.getId())); 
    381381                } 
    382             }             
    383              
    384             // add gene labels                  
    385             String genePrimaryName = null;             
    386             for (Gene gene : entry.getGene()) {                          
    387                 for (GeneNameType gnt: gene.getName()) { 
    388                         if (gnt.getType().equals("primary")) { 
    389                                 // organism should be included in the preferred label. And there can be only 1 preferred label                                   
    390                                 if (genePrimaryName == null) { 
    391                                         //store the 1st primary term as gene preferred label.                                        
    392                                         genePrimaryName = gnt.getValue(); 
    393                                         geneLabels.add(new LabelImpl(LabelType.PREFERRED, gnt.getValue() + " (" + organism + ")", LANG_EN)); 
    394                                 } 
    395                                 else { 
    396                                     geneLabels.add(new LabelImpl(LabelType.ALTERNATIVE, gnt.getValue(), LANG_EN)); 
    397                                 } 
    398                         } 
    399                         else { 
    400                                 geneLabels.add(new LabelImpl(LabelType.ALTERNATIVE, gnt.getValue(), LANG_EN)); 
    401                         }                     
    402                 } 
    403             } 
    404              
     382            } 
     383 
     384            // add gene labels 
     385            String genePrimaryName = null; 
     386            for (Gene gene : entry.getGene()) { 
     387                for (GeneNameType gnt: gene.getName()) { 
     388                    if (gnt.getType().equals("primary")) { 
     389                        // organism should be included in the preferred label. And there can be only 1 preferred label 
     390                        if (genePrimaryName == null) { 
     391                            //store the 1st primary term as gene preferred label. 
     392                            genePrimaryName = gnt.getValue(); 
     393                            geneLabels.add(new LabelImpl(LabelType.PREFERRED, gnt.getValue() + " (" + organism + ")", LANG_EN)); 
     394                        } 
     395                        else { 
     396                            geneLabels.add(new LabelImpl(LabelType.ALTERNATIVE, gnt.getValue(), LANG_EN)); 
     397                        } 
     398                    } 
     399                    else { 
     400                        geneLabels.add(new LabelImpl(LabelType.ALTERNATIVE, gnt.getValue(), LANG_EN)); 
     401                    } 
     402                } 
     403            } 
     404 
    405405            boolean hasGeneConcept = true; 
    406406            if (genePrimaryName == null) { 
    407                 // some SP entry have no gene section, so no gene concept should be added. 
    408                 hasGeneConcept = false; 
    409             } 
    410              
     407                // some SP entry have no gene section, so no gene concept should be added. 
     408                hasGeneConcept = false; 
     409            } 
     410 
    411411            /* Step 2, check the generic protein mapping list and create generic protein tag properly */ 
    412              
     412 
    413413            // add generic protein tag 
    414414            Concept genericProteinTag = null; 
     
    419419                final List<Concept> concepts = conceptService.getConceptsByNotation(genericProteinUMLSId, QueryScopeImpl.FULL_SCOPE, 1, nlmBranchId); 
    420420                if (concepts.size() == 1) { 
    421                     final Concept genericConcept = Iterables.getOnlyElement(concepts);    
     421                    final Concept genericConcept = Iterables.getOnlyElement(concepts); 
    422422                    // make sure it is a tag 
    423423                    tagStorageService.createTag(genericConcept.getUuid()); 
    424                      
    425                     // add non species specific tag to this generic organism protein                     
     424 
     425                    // add non species specific tag to this generic organism protein 
    426426                    tagConceptInConceptWikiBranch(genericConcept, nonSpeciesSpecificTag); 
    427                      
     427 
    428428                    // use this generic concept as the generic protein tag for protein in this SP entry 
    429429                    genericProteinTag = genericConcept; 
    430                      
     430 
    431431                    createNewGenericProteinConcept = false; 
    432432                } 
    433433                else { 
    434                         // there are no or more than 1 concept have the UMLS ID. We will create a new generic protein concept 
     434                    // there are no or more than 1 concept have the UMLS ID. We will create a new generic protein concept 
    435435                    createNewGenericProteinConcept = true; 
    436436                } 
    437437            } 
    438438            else { 
    439                 createNewGenericProteinConcept = true;                 
    440             }                     
    441              
     439                createNewGenericProteinConcept = true; 
     440            } 
     441 
    442442            if (createNewGenericProteinConcept) { 
    443443                // create a new generic protein concept and use it as a tag 
    444                  
     444 
    445445                // first, check if this generic protein concept is already created during the SP import. In lower case! 
    446446                Concept genericConcept = genericProteinConcepts.get(proteinRecommendedName.toLowerCase()); 
    447                  
     447 
    448448                if (genericConcept == null) { 
    449449                    // this generic concept does not exist, create it. 
    450450                    final Set<Label> genericConceptlabels = Sets.newHashSet(); 
    451                      
     451 
    452452                    final Label genericProteinName = new LabelImpl(LabelType.PREFERRED, proteinRecommendedName, LANG_EN); 
    453453                    genericConceptlabels.add(genericProteinName); // preferred label for new concept 
     
    456456                        .tags(Sets.newHashSet(proteinSemanticType)) 
    457457                        .build(); 
    458                      
     458 
    459459                    Concept createdGenericConcept = conceptService.createConcept(genericConceptEnvelop, conceptWikiBranchId); 
    460                                          
     460 
    461461                    // make it a tag 
    462                     tagStorageService.createTag(createdGenericConcept.getUuid());               
    463                      
     462                    tagStorageService.createTag(createdGenericConcept.getUuid()); 
     463 
    464464                    // add generic protein tag to this generic organism protein 
    465465                    tagConceptInConceptWikiBranch(createdGenericConcept, nonSpeciesSpecificTag); 
    466                      
     466 
    467467                    //store the newly created generic concept in the convenience map. In lower case! 
    468468                    genericProteinConcepts.put(proteinRecommendedName.toLowerCase(), createdGenericConcept); 
    469                      
     469 
    470470                    genericProteinTag = createdGenericConcept; 
    471471                } 
    472472                else { 
    473                         genericProteinTag = genericConcept; 
    474                 } 
    475             } 
    476              
    477              
     473                    genericProteinTag = genericConcept; 
     474                } 
     475            } 
     476 
     477 
    478478            /* Step 3, check the generic gene mapping list and create generic gene tag properly */ 
    479              
     479 
    480480            //add generic gene tags if necessary 
    481481            Concept genericGeneTag = null; 
    482              
    483             if (hasGeneConcept) {                
    484                  
    485                 final String genericGeneUMLSId = genericGeneMapper.get(primaryAccession);                 
     482 
     483            if (hasGeneConcept) { 
     484 
     485                final String genericGeneUMLSId = genericGeneMapper.get(primaryAccession); 
    486486                boolean createNewGenericGeneConcept = false; 
    487487                if (genericGeneUMLSId != null) { 
     
    490490                    if (concepts.size() == 1) { 
    491491                        final Concept genericConcept = Iterables.getOnlyElement(concepts); 
    492                          
     492 
    493493                        //make sure it is a tag 
    494494                        tagStorageService.createTag(genericConcept.getUuid()); 
    495                          
     495 
    496496                        // add generic gene tag to this generic organism gene 
    497497                        tagConceptInConceptWikiBranch(genericConcept, nonSpeciesSpecificTag); 
    498                          
     498 
    499499                        genericGeneTag = genericConcept; 
    500                          
     500 
    501501                        createNewGenericGeneConcept = false; 
    502502                    } 
    503503                    else { 
    504                         // there are no concept or more than 1 concepts have the same UMLS ID, sth is wrong and we do not tag to anything.  
     504                        // there are no concept or more than 1 concepts have the same UMLS ID, sth is wrong and we do not tag to anything. 
    505505                        createNewGenericGeneConcept = true; 
    506506                    } 
     
    508508                else { 
    509509                    createNewGenericGeneConcept = true; 
    510                 }         
    511                  
     510                } 
     511 
    512512                if (createNewGenericGeneConcept) { 
    513513                    // create a new generic gene concept and use it as a tag 
    514                      
    515                     // first, check if this generic protein concept is already created during the SP import. In upper case!  
     514 
     515                    // first, check if this generic protein concept is already created during the SP import. In upper case! 
    516516                    Concept genericConcept = genericGeneConcepts.get(genePrimaryName.toUpperCase()); 
    517                      
     517 
    518518                    if (genericConcept == null) { 
    519519                        final Set<Label> genericConceptlabels = Sets.newHashSet(); 
     
    523523                        Concept genericConceptEnvelop = new ConceptImpl.Builder() 
    524524                            .labels(genericConceptlabels) 
    525                             .tags(Sets.newHashSet(geneSemanticType))                             
     525                            .tags(Sets.newHashSet(geneSemanticType)) 
    526526                            .build(); 
    527                          
     527 
    528528                        Concept createdGenericConcept = conceptService.createConcept(genericConceptEnvelop, conceptWikiBranchId); 
    529                          
     529 
    530530                        // make it a tag 
    531531                        tagStorageService.createTag(createdGenericConcept.getUuid()); 
    532                          
     532 
    533533                        // add generic gene tag to this generic organism gene 
    534534                        tagConceptInConceptWikiBranch(createdGenericConcept, nonSpeciesSpecificTag); 
    535                                              
     535 
    536536                        //store the newly created generic concept in the convenience map. In upper case! 
    537537                        genericGeneConcepts.put(genePrimaryName.toUpperCase(), createdGenericConcept); 
    538                          
     538 
    539539                        genericGeneTag = createdGenericConcept; 
    540540                    } 
    541541                    else { 
    542                         genericGeneTag = genericConcept; 
     542                        genericGeneTag = genericConcept; 
    543543                    } 
    544544                } 
    545                  
    546             }             
    547              
     545 
     546            } 
     547 
    548548            /* Step 4, update or create the SP protein/gene concept properly */ 
    549             
     549 
    550550            // check for existing umls protein concept 
    551551            final String umlsId = specificProteinMapper.get(primaryAccession); 
    552552            boolean createNewProteinConcept = false; 
    553553            if (umlsId == null) { 
    554                 createNewProteinConcept = true;                          
     554                createNewProteinConcept = true; 
    555555            } else { 
    556556                final List<Concept> concepts = conceptService.getConceptsByNotation(umlsId, QueryScopeImpl.FULL_SCOPE, 1, nlmBranchId);//getConceptsByNotation(umlsId, QueryScopeImpl.FULL_SCOPE, 10); 
    557557                if (concepts.size() == 1) { 
    558                         // map to existing protein concept 
     558                    // map to existing protein concept 
    559559                    final Concept concept = Iterables.getOnlyElement(concepts); 
    560560                    final String umlsConceptUuid = concept.getUuid(); 
    561                      
     561 
    562562                    // check that changeset contains no existing labels/notations/urls 
    563                     final Set<Label> newProteinLabels = Sets.difference(proteinLabels, concept.getLabels());                     
     563                    final Set<Label> newProteinLabels = Sets.difference(proteinLabels, concept.getLabels()); 
    564564                    final Set<Notation> newNotations = Sets.difference(notations, concept.getNotations()); 
    565565                    final Set<Url> newProteinUrls = Sets.difference(proteinUrls, concept.getUrls()); 
    566566                    final Set<Concept> newTags = Sets.difference(Sets.newHashSet(proteinSemanticType), concept.getTags()); 
    567                      
     567 
    568568                    if( (newProteinLabels.size() + newNotations.size() + newProteinUrls.size() + newTags.size()) > 0) { 
    569                         Changeset changeset = new ChangesetImpl().withAdd(new ActionImpl() 
     569                        Changeset changeset = new ChangesetImpl().withAdd(new ActionImpl() 
    570570                                .withLabels(newProteinLabels) 
    571571                                .withNotations(newNotations) 
     
    575575                        conceptService.updateConcept(umlsConceptUuid, changeset, swissprotBranchId); 
    576576                    } 
    577                      
     577 
    578578                    // a generic protein tag was created in conceptwiki branch and it should tag to this SP protein concept in conceptwiki branch too. 
    579579                    tagConceptInConceptWikiBranch(concept, genericProteinTag); 
    580                      
     580 
    581581                } 
    582582                else { 
    583                         // there are more concepts have the same UMLS ID, sth is wrong and we do not map to anything. 
    584                         createNewProteinConcept = true; 
    585                 } 
    586             } 
    587              
     583                    // there are more concepts have the same UMLS ID, sth is wrong and we do not map to anything. 
     584                    createNewProteinConcept = true; 
     585                } 
     586            } 
     587 
    588588            if (createNewProteinConcept) { 
    589                  
    590                 // no mapped UMLS concept, create new species specific protein concept 
    591                         Concept proteinConcept = new ConceptImpl.Builder() 
    592                                         .labels(proteinLabels) 
    593                                         .notations(notations) 
    594                                         .urls(proteinUrls) 
    595                                         .tags(Sets.newHashSet(proteinSemanticType)) 
    596                                         .build(); 
    597                         Concept createdProteinConcept = conceptService.createConcept(proteinConcept, swissprotBranchId);  
    598                          
    599                         // a generic protein tag was created in conceptwiki branch and it should tag to this SP protein concept in conceptwiki branch too. 
    600                         tagConceptInConceptWikiBranch(createdProteinConcept, genericProteinTag); 
    601             }                     
    602      
     589 
     590                // no mapped UMLS concept, create new species specific protein concept 
     591                Concept proteinConcept = new ConceptImpl.Builder() 
     592                        .labels(proteinLabels) 
     593                        .notations(notations) 
     594                        .urls(proteinUrls) 
     595                        .tags(Sets.newHashSet(proteinSemanticType)) 
     596                        .build(); 
     597                Concept createdProteinConcept = conceptService.createConcept(proteinConcept, swissprotBranchId); 
     598 
     599                // a generic protein tag was created in conceptwiki branch and it should tag to this SP protein concept in conceptwiki branch too. 
     600                tagConceptInConceptWikiBranch(createdProteinConcept, genericProteinTag); 
     601            } 
     602 
    603603            if (hasGeneConcept) { 
    604                 //create a new species specific gene concept if necessary             
    605                         Concept geneConceptEnvelop = new ConceptImpl.Builder() 
    606                                         .labels(geneLabels) 
    607                                         .notations(notations) 
    608                                         .urls(geneUrls) 
    609                                         .tags(Sets.newHashSet(geneSemanticType)) 
    610                                         .build();                                        
    611                         Concept createdGeneConcept = conceptService.createConcept(geneConceptEnvelop, swissprotBranchId);                 
    612                          
    613                         // a generic gene tag was created in conceptwiki branch and it should tag to this SP gene concept in conceptwiki branch too. 
    614                         tagConceptInConceptWikiBranch(createdGeneConcept, genericGeneTag); 
    615             } 
    616                                                      
    617                 counter++; 
    618                 if (counter >= 5000) { 
    619                         tx.success(); 
    620                         tx.finish(); 
    621                         tx = graphTemplate.getGraphDb().beginTx(); 
    622                         logger.info("Another 5k concepts processed"); 
    623                         counter = 0; 
    624                 } 
    625         } 
    626      
    627         tx.success(); 
    628         tx.finish(); 
    629     }    
    630      
     604                //create a new species specific gene concept if necessary 
     605                Concept geneConceptEnvelop = new ConceptImpl.Builder() 
     606                        .labels(geneLabels) 
     607                        .notations(notations) 
     608                        .urls(geneUrls) 
     609                        .tags(Sets.newHashSet(geneSemanticType)) 
     610                        .build(); 
     611                Concept createdGeneConcept = conceptService.createConcept(geneConceptEnvelop, swissprotBranchId); 
     612 
     613                // a generic gene tag was created in conceptwiki branch and it should tag to this SP gene concept in conceptwiki branch too. 
     614                tagConceptInConceptWikiBranch(createdGeneConcept, genericGeneTag); 
     615            } 
     616 
     617            counter++; 
     618            if (counter >= 5000) { 
     619                tx.success(); 
     620                tx.finish(); 
     621                tx = graphTemplate.getGraphDb().beginTx(); 
     622                logger.info("Another 5k concepts processed"); 
     623                counter = 0; 
     624            } 
     625        } 
     626 
     627        tx.success(); 
     628        tx.finish(); 
     629    } 
     630 
    631631    public static void main(final String[] args) throws Exception { 
    632632        final ApplicationContext ctx = new ClassPathXmlApplicationContext("/nl/nbic/conceptwiki/imports/swissprot/import-swissprot-context.xml"); 
    633                                  
     633 
    634634        final UniprotImport uniprotImport = (UniprotImport)ctx.getBean(UniprotImport.class); 
    635635        final long start = System.currentTimeMillis(); 
    636636        if (uniprotImport.bootstrap()) { 
    637                 uniprotImport.run(); 
     637            uniprotImport.run(); 
    638638            System.out.println("Import took " + (System.currentTimeMillis() - start) + "ms"); 
    639639        } 
    640640        else { 
    641                 logger.error("bootstrap failed"); 
    642         } 
    643          
     641            logger.error("bootstrap failed"); 
     642        } 
     643 
    644644    } 
    645645}