Changeset 629


Ignore:
Timestamp:
Apr 13, 2012, 1:52:51 PM (5 years ago)
Author:
rob.hooft@…
Message:
  • Remove tab characters in a wild attempt to reduce the number of checkstyle warnings
File:
1 edited

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}
Note: See TracChangeset for help on using the changeset viewer.