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 /* 029 * AnnotatorUtil.java 030 * 031 * Created on July 26, 2005, 5:22 PM 032 */ 033 034 package edu.uchsc.ccp.knowtator.util; 035 036 import java.awt.Component; 037 import java.util.Collection; 038 039 import javax.swing.JOptionPane; 040 041 import edu.stanford.smi.protege.model.Cls; 042 import edu.stanford.smi.protege.model.KnowledgeBase; 043 import edu.stanford.smi.protege.model.SimpleInstance; 044 import edu.stanford.smi.protege.ui.DisplayUtilities; 045 import edu.stanford.smi.protege.util.CollectionUtilities; 046 import edu.uchsc.ccp.knowtator.AnnotationUtil; 047 import edu.uchsc.ccp.knowtator.FilterUtil; 048 import edu.uchsc.ccp.knowtator.KnowtatorProjectUtil; 049 050 /** 051 * 052 * @author Philip V. Ogren 053 */ 054 public class AnnotatorUtil { 055 056 /** 057 * This method provides dialogs which collect the annotator and filter 058 * instances needed to forward on to the other batchAnnotatorChange method. 059 */ 060 061 public static void batchAnnotatorChange(Component parent, KnowtatorProjectUtil kpu, AnnotationUtil annotationUtil, 062 FilterUtil filterUtil) { 063 int option = JOptionPane.showConfirmDialog(parent, 064 "The following dialogs provide a way to set the annotator slot for a set of \n" 065 + "annotations. The next dialog will ask you to choose an annotator. The value\n" 066 + "you select will be used to set the value of the 'annotator' slot. The \n" 067 + "following dialog will ask you to choose an annotation filter. The value\n " 068 + "you select will be used to decide which annotations will be updated", 069 "Change annotator for annotations", JOptionPane.OK_CANCEL_OPTION); 070 if (option == JOptionPane.OK_OPTION) { 071 SimpleInstance annotator = (SimpleInstance) DisplayUtilities.pickInstance(parent, CollectionUtilities 072 .createCollection(kpu.getAnnotatorCls()), "Choose annotator of annotations"); 073 if (annotator == null) 074 return; 075 SimpleInstance filter = (SimpleInstance) DisplayUtilities.pickInstance(parent, CollectionUtilities 076 .createCollection(kpu.getFilterCls()), "Choose an annotation filter"); 077 if (filter == null) 078 return; 079 batchAnnotatorChange(annotator, kpu, filter, annotationUtil, filterUtil); 080 JOptionPane.showMessageDialog(parent, "The annotator slot for each annotation satisfying the filter '" 081 + filter.getBrowserText() + "' has been set to '" + annotator.getBrowserText() + "'"); 082 083 } 084 } 085 086 /** 087 * This method sets the annotator slot value for a set of annotations. This 088 * method simply retrieves all annotations from the annotationUtil and 089 * filters them using the supplied filter. The annotator slot value for each 090 * annotation that passes the filter is updated with the first parameter. 091 * 092 * @param annotator 093 * the value of the knowtator_annotation_annotator slot for the 094 * annotations to be changed 095 * @param kpu 096 * provides the name of the slot that is being changed via 097 * getAnnotationAnnotatorSlot() 098 * @param filter 099 * an instance of 'knowtator filter' that will be used to select 100 * the annotations that will be modified. 101 * @param annotationUtil 102 * provides the annotations in the current knowledgebase via the 103 * retrieveAllAnnotations method 104 * @param filterUtil 105 * provides the filter method which selects only the annotations 106 * that satisfy the filter. 107 */ 108 109 public static void batchAnnotatorChange(SimpleInstance annotator, KnowtatorProjectUtil kpu, SimpleInstance filter, 110 AnnotationUtil annotationUtil, FilterUtil filterUtil) { 111 java.util.List<SimpleInstance> annotations = annotationUtil.retrieveAllAnnotations(); 112 Collection<SimpleInstance> filteredAnnotations = filterUtil.filterAnnotations(annotations, filter); 113 114 for (SimpleInstance annotation : filteredAnnotations) { 115 annotation.setDirectOwnSlotValue(kpu.getAnnotationAnnotatorSlot(), annotator); 116 } 117 } 118 119 public static void batchAnnotationSetChange(Component parent, KnowtatorProjectUtil kpu, 120 AnnotationUtil annotationUtil, FilterUtil filterUtil) { 121 int option = JOptionPane.showConfirmDialog(parent, 122 "The following dialogs provide a way to assign the annotation set for a large number of \n" 123 + "annotations. The next dialog will ask you to choose an annotation set. The value\n" 124 + "you select will be added to the 'annotation set' slot. The \n" 125 + "following dialog will ask you to choose an annotation filter. The value\n " 126 + "you select will be used to decide which annotations will be updated", 127 "Change annotator for annotations", JOptionPane.OK_CANCEL_OPTION); 128 if (option == JOptionPane.OK_OPTION) { 129 SimpleInstance annotationSet = (SimpleInstance) DisplayUtilities.pickInstance(parent, CollectionUtilities 130 .createCollection(kpu.getSetCls()), "Choose annotation set"); 131 if (annotationSet == null) 132 return; 133 SimpleInstance filter = (SimpleInstance) DisplayUtilities.pickInstance(parent, CollectionUtilities 134 .createCollection(kpu.getFilterCls()), "Choose an annotation filter"); 135 if (filter == null) 136 return; 137 batchAnnotationSetChange(annotationSet, kpu, filter, annotationUtil, filterUtil); 138 JOptionPane.showMessageDialog(parent, 139 "The 'annotation set' slot for each annotation satisfying the filter '" + filter.getBrowserText() 140 + "' has been set to '" + annotationSet.getBrowserText() + "'"); 141 142 } 143 } 144 145 /** 146 * This method sets the annotator slot value for a set of annotations. This 147 * method simply retrieves all annotations from the annotationUtil and 148 * filters them using the supplied filter. The annotator slot value for each 149 * annotation that passes the filter is updated with the first parameter. 150 * 151 * @param annotationSet 152 * the value of the knowtator_annotation_set slot for the 153 * annotations to be changed 154 * @param kpu 155 * provides the name of the slot that is being changed via 156 * getAnnotationAnnotatorSlot() 157 * @param filter 158 * an instance of 'knowtator filter' that will be used to select 159 * the annotations that will be modified. 160 * @param annotationUtil 161 * provides the annotations in the current knowledgebase via the 162 * retrieveAllAnnotations method 163 * @param filterUtil 164 * provides the filter method which selects only the annotations 165 * that satisfy the filter. 166 */ 167 168 public static void batchAnnotationSetChange(SimpleInstance annotationSet, KnowtatorProjectUtil kpu, 169 SimpleInstance filter, AnnotationUtil annotationUtil, FilterUtil filterUtil) { 170 java.util.List<SimpleInstance> annotations = annotationUtil.retrieveAllAnnotations(); 171 Collection<SimpleInstance> filteredAnnotations = filterUtil.filterAnnotations(annotations, filter); 172 173 for (SimpleInstance annotation : filteredAnnotations) { 174 annotation.setDirectOwnSlotValue(kpu.getSetSlot(), annotationSet); 175 } 176 } 177 178 public static boolean isTeamAnnotator(SimpleInstance annotator) { 179 KnowledgeBase kb = annotator.getKnowledgeBase(); 180 Cls type = annotator.getDirectType(); 181 if (type.equals(kb.getCls(KnowtatorProjectUtil.ANNOTATOR_TEAM_CLS_NAME))) 182 return true; 183 return false; 184 185 } 186 187 } 188 189 // /** 190 // * This method finds annotations created by oldAnnotator and sets the 191 // annotator 192 // * slot to newAnnotator. 193 // * @param kb the knowledge base the annotations reside in 194 // * @param oldAnnotator the annotator that is being replaced. If null then 195 // * method is equivalent to replaceAnnotator(KnowledgeBase kb, Instance 196 // annotator) 197 // * @param newAnnotator the annotations created by oldAnnotator will have the 198 // * annotator slot set to newAnnotator. 199 // */ 200 // 201 // public static void replaceAnnotator(KnowledgeBase kb, 202 // Instance oldAnnotator, 203 // Instance newAnnotator) 204 // { 205 // Cls annotationCls = kb.getCls(KnowtatorProjectUtil.ANNOTATION_CLS_NAME); 206 // Slot annotatorSlot = 207 // kb.getSlot(KnowtatorProjectUtil.ANNOTATION_ANNOTATOR_SLOT_NAME); 208 // Collection<Instance> annotations = kb.getInstances(annotationCls); 209 // for(Instance annotation : annotations) 210 // { 211 // if(oldAnnotator == null) 212 // { 213 // annotation.setOwnSlotValue(annotatorSlot, newAnnotator); 214 // } 215 // else 216 // { 217 // Instance currentAnnotator = (Instance) 218 // annotation.getOwnSlotValue(annotatorSlot); 219 // if(currentAnnotator != null && currentAnnotator.equals(oldAnnotator)) 220 // { 221 // annotation.setOwnSlotValue(annotatorSlot, newAnnotator); 222 // } 223 // } 224 // } 225 // } 226 // 227 // /** 228 // * This method finds annotations that have no value in the annotator slot and 229 // * sets the annotator value to annotator. 230 // * @param kb the knowledge base the annotations reside in 231 // * @param annotator all annotations that have no value in the annotator slot 232 // will 233 // * have their annotator slot value set to annotator. 234 // */ 235 // 236 // public static void setEmptyAnnotator(KnowledgeBase kb, 237 // Instance annotator) 238 // { 239 // Cls annotationCls = kb.getCls(KnowtatorProjectUtil.ANNOTATION_CLS_NAME); 240 // Slot annotatorSlot = 241 // kb.getSlot(KnowtatorProjectUtil.ANNOTATION_ANNOTATOR_SLOT_NAME); 242 // Collection<Instance> annotations = kb.getInstances(annotationCls); 243 // for(Instance annotation : annotations) 244 // { 245 // Instance currentAnnotator = (Instance) 246 // annotation.getOwnSlotValue(annotatorSlot); 247 // if(currentAnnotator == null) 248 // { 249 // annotation.setOwnSlotValue(annotatorSlot, annotator); 250 // } 251 // } 252 // } 253 // /** 254 // * This method sets the annotator for all annotations in the knowledge base. 255 // * @param kb the knowledge base the annotations reside in 256 // * @param annotator all annotations will have there annotator slot set to the 257 // * instance passed in this parameter. 258 // * 259 // */ 260 // public static void replaceAnnotator(KnowledgeBase kb, 261 // Instance annotator) 262 // { 263 // replaceAnnotator(kb, null, annotator); 264 // } 265 // 266