001 /* 002 * The contents of this file are subject to the Mozilla Public 003 * License Version 1.1 (the "License"); you may not use this file 004 * except in compliance with the License. You may obtain a copy of 005 * the License at http://www.mozilla.org/MPL/ 006 * 007 * Software distributed under the License is distributed on an "AS 008 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 009 * implied. See the License for the specific language governing 010 * rights and limitations under the License. 011 * 012 * The Original Code is Knowtator. 013 * 014 * The Initial Developer of the Original Code is University of Colorado. 015 * Copyright (C) 2005 - 2008. All Rights Reserved. 016 * 017 * Knowtator was developed by the Center for Computational Pharmacology 018 * (http://compbio.uchcs.edu) at the University of Colorado Health 019 * Sciences Center School of Medicine with support from the National 020 * Library of Medicine. 021 * 022 * Current information about Knowtator can be obtained at 023 * http://knowtator.sourceforge.net/ 024 * 025 * Contributor(s): 026 * Philip V. Ogren <philip@ogren.info> (Original Author) 027 */ 028 package edu.uchsc.ccp.knowtator.textsource.generif; 029 030 import java.awt.Component; 031 import java.io.File; 032 import java.io.IOException; 033 import java.util.ArrayList; 034 import java.util.List; 035 036 import javax.swing.JFileChooser; 037 import javax.swing.JOptionPane; 038 039 import edu.stanford.smi.protege.model.Cls; 040 import edu.stanford.smi.protege.model.KnowledgeBase; 041 import edu.stanford.smi.protege.model.Project; 042 import edu.stanford.smi.protege.model.Slot; 043 import edu.stanford.smi.protege.model.ValueType; 044 import edu.stanford.smi.protege.util.CollectionUtilities; 045 import edu.uchsc.ccp.knowtator.textsource.TextSource; 046 import edu.uchsc.ccp.knowtator.textsource.TextSourceCollection; 047 import edu.uchsc.ccp.knowtator.textsource.filelines.FileLinesTextSourceCollection; 048 049 /** 050 * This TextSourceCollection implementation is useful for GeneRIFs stored in in 051 * a single file line-by-line. The format of the file should be: 052 * <code><br>id|gene_name|gene_symbol|text<br></code> Where id is some local 053 * identifier (not provided by entrez) assigned to the geneRIF. 054 */ 055 056 public class GeneRIFTextSourceCollection extends FileLinesTextSourceCollection { 057 public static final String DISPLAY_NAME = "GeneRIFs"; 058 059 public static final String CLS_NAME = "generifs text source"; 060 061 public static final String PROJECT_SETTING_RECENT_FILE = new String("GRIFTextSourceCollection_RECENT_FILE"); 062 063 public GeneRIFTextSourceCollection(String fileName) throws IOException { 064 super(fileName); 065 } 066 067 public GeneRIFTextSourceCollection(File file) throws IOException { 068 super(file); 069 } 070 071 protected TextSource createTextSource(String fileLine) { 072 String id = fileLine.substring(0, fileLine.indexOf("|")); 073 int entrezIdStart = id.length() + 1; 074 String entrezId = fileLine.substring(entrezIdStart, fileLine.indexOf("|", entrezIdStart)); 075 String[] entrezIDs = entrezId.split(":"); 076 int pmidStart = entrezIdStart + entrezId.length() + 1; 077 String pmid = fileLine.substring(pmidStart, fileLine.indexOf("|", pmidStart)); 078 int textStart = pmidStart + pmid.length() + 1; 079 String text = fileLine.substring(textStart); 080 081 return new GeneRIFTextSource(id, entrezIDs, pmid, text); 082 } 083 084 private static File getRecentFile(Project project) { 085 String recentFileName = (String) project.getClientInformation(PROJECT_SETTING_RECENT_FILE); 086 if (recentFileName != null) { 087 File recentFile = new File(recentFileName); 088 if (recentFile != null && recentFile.exists() && recentFile.isFile()) { 089 return recentFile; 090 } 091 } 092 return null; 093 } 094 095 public static TextSourceCollection open(Project project, Component parent) { 096 JFileChooser chooser = new JFileChooser(); 097 File recentFile = getRecentFile(project); 098 if (recentFile != null) { 099 chooser.setSelectedFile(recentFile); 100 } 101 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 102 int returnVal = chooser.showOpenDialog(parent); 103 if (returnVal == JFileChooser.APPROVE_OPTION) { 104 File file = chooser.getSelectedFile(); 105 try { 106 return new GeneRIFTextSourceCollection(file); 107 } catch (IOException ioe) { 108 ioe.printStackTrace(); 109 JOptionPane.showMessageDialog(parent, "Unable to open file as a text source collection", "", 110 JOptionPane.ERROR_MESSAGE); 111 } 112 } 113 return null; 114 } 115 116 public void save(Project project) { 117 project.setClientInformation(PROJECT_SETTING_RECENT_FILE, getFile().getPath()); 118 } 119 120 public static TextSourceCollection open(Project project) { 121 File recentFile = getRecentFile(project); 122 if (recentFile != null) { 123 try { 124 TextSourceCollection tsc = new GeneRIFTextSourceCollection(recentFile); 125 return tsc; 126 } catch (IOException ioe) { 127 ioe.printStackTrace(); 128 } 129 } 130 return null; 131 } 132 133 public static void createCls(KnowledgeBase kb) { 134 135 if (kb.getCls(CLS_NAME) == null) { 136 Cls textSourceParent = kb.getCls(FileLinesTextSourceCollection.CLS_NAME); 137 List<Cls> parents = new ArrayList<Cls>(); 138 parents.add(textSourceParent); 139 Cls grifTextSourceCls = kb.createCls(CLS_NAME, parents); 140 Slot pmidSlot = kb.createSlot("generif_pmid"); 141 pmidSlot.setValueType(ValueType.STRING); 142 grifTextSourceCls.addDirectTemplateSlot(pmidSlot); 143 144 Cls entrezGeneCls = kb.getCls("entrez_gene"); 145 if (entrezGeneCls == null) { 146 entrezGeneCls = kb.createCls("entrez_gene", CollectionUtilities.createCollection(kb.getRootCls())); 147 Slot entrezAliasSlot = kb.createSlot("entrez_alias"); 148 entrezAliasSlot.setAllowsMultipleValues(true); 149 entrezAliasSlot.setValueType(ValueType.STRING); 150 entrezGeneCls.addDirectTemplateSlot(entrezAliasSlot); 151 Slot entrezGeneIDSlot = kb.createSlot("entrez_gene_id"); 152 entrezGeneIDSlot.setAllowsMultipleValues(false); 153 entrezGeneIDSlot.setMinimumCardinality(1); 154 entrezGeneIDSlot.setValueType(ValueType.STRING); 155 entrezGeneCls.addDirectTemplateSlot(entrezGeneIDSlot); 156 Slot entrezOfficialNameSlot = kb.createSlot("entrez_official_name"); 157 entrezOfficialNameSlot.setAllowsMultipleValues(false); 158 entrezOfficialNameSlot.setValueType(ValueType.STRING); 159 entrezGeneCls.addDirectTemplateSlot(entrezOfficialNameSlot); 160 Slot entrezOfficialSymbolSlot = kb.createSlot("entrez_official_symbol"); 161 entrezOfficialSymbolSlot.setAllowsMultipleValues(false); 162 entrezOfficialSymbolSlot.setValueType(ValueType.STRING); 163 entrezGeneCls.addDirectTemplateSlot(entrezOfficialSymbolSlot); 164 Slot entrezSpeciesSlot = kb.createSlot("entrez_species"); 165 entrezSpeciesSlot.setAllowsMultipleValues(false); 166 entrezSpeciesSlot.setValueType(ValueType.STRING); 167 entrezGeneCls.addDirectTemplateSlot(entrezSpeciesSlot); 168 } 169 Slot entrezGeneSlot = kb.createSlot("generif_entrez_gene"); 170 entrezGeneSlot.setValueType(ValueType.INSTANCE); 171 entrezGeneSlot.setAllowedClses(CollectionUtilities.createCollection(entrezGeneCls)); 172 entrezGeneSlot.setAllowsMultipleValues(true); 173 grifTextSourceCls.addDirectTemplateSlot(entrezGeneSlot); 174 175 } 176 } 177 }