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.ui; 029 030 import java.awt.GridBagConstraints; 031 import java.awt.GridBagLayout; 032 import java.awt.Insets; 033 import java.awt.event.ActionEvent; 034 import java.awt.event.ActionListener; 035 import java.util.List; 036 037 import javax.swing.BorderFactory; 038 import javax.swing.JButton; 039 import javax.swing.JLabel; 040 import javax.swing.JOptionPane; 041 import javax.swing.JPanel; 042 import javax.swing.border.EtchedBorder; 043 044 import edu.stanford.smi.protege.model.SimpleInstance; 045 import edu.stanford.smi.protege.util.ComponentUtilities; 046 import edu.uchsc.ccp.knowtator.InvalidSpanException; 047 import edu.uchsc.ccp.knowtator.KnowtatorManager; 048 import edu.uchsc.ccp.knowtator.Span; 049 import edu.uchsc.ccp.knowtator.SpanUtil; 050 import edu.uchsc.ccp.knowtator.textsource.TextSourceAccessException; 051 052 public class SpanEditPanel extends JPanel implements ActionListener { 053 static final long serialVersionUID = 0; 054 055 KnowtatorManager manager; 056 057 AnnotationInstanceDisplay annotationDisplay; 058 059 SpanUtil spanUtil; 060 061 JButton growLeftAnnotationButton; 062 063 JButton shrinkLeftAnnotationButton; 064 065 JButton shrinkRightAnnotationButton; 066 067 JButton growRightAnnotationButton; 068 069 public SpanEditPanel(KnowtatorManager manager, AnnotationInstanceDisplay annotationDisplay) { 070 super(new GridBagLayout()); 071 this.manager = manager; 072 this.annotationDisplay = annotationDisplay; 073 this.spanUtil = manager.getSpanUtil(); 074 initialize(); 075 } 076 077 private void initialize() { 078 growLeftAnnotationButton = new JButton(ComponentUtilities.loadImageIcon(SpanEditPanel.class, 079 "/edu/uchsc/ccp/knowtator/images/extend_left.gif")); 080 growLeftAnnotationButton.setActionCommand(SpanUtil.GROW_ANNOTATION_LEFT); 081 growLeftAnnotationButton.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 082 growLeftAnnotationButton.setToolTipText("Grow annotation on left side"); 083 growLeftAnnotationButton.setBorder(null); 084 shrinkLeftAnnotationButton = new JButton(ComponentUtilities.loadImageIcon(SpanEditPanel.class, 085 "/edu/uchsc/ccp/knowtator/images/shrink_left.gif")); 086 shrinkLeftAnnotationButton.setActionCommand(SpanUtil.SHRINK_ANNOTATION_LEFT); 087 shrinkLeftAnnotationButton.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 088 shrinkLeftAnnotationButton.setToolTipText("Shrink annotation on left side"); 089 shrinkLeftAnnotationButton.setBorder(null); 090 shrinkRightAnnotationButton = new JButton(ComponentUtilities.loadImageIcon(SpanEditPanel.class, 091 "/edu/uchsc/ccp/knowtator/images/shrink_right.gif")); 092 shrinkRightAnnotationButton.setActionCommand(SpanUtil.SHRINK_ANNOTATION_RIGHT); 093 shrinkRightAnnotationButton.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 094 shrinkRightAnnotationButton.setToolTipText("Shrink annotation on right side"); 095 shrinkRightAnnotationButton.setBorder(null); 096 growRightAnnotationButton = new JButton(ComponentUtilities.loadImageIcon(SpanEditPanel.class, 097 "/edu/uchsc/ccp/knowtator/images/extend_right.gif")); 098 growRightAnnotationButton.setActionCommand(SpanUtil.GROW_ANNOTATION_RIGHT); 099 growRightAnnotationButton.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 100 growRightAnnotationButton.setToolTipText("Grow annotation on right side"); 101 growRightAnnotationButton.setBorder(null); 102 103 growLeftAnnotationButton.addActionListener(this); 104 shrinkLeftAnnotationButton.addActionListener(this); 105 growRightAnnotationButton.addActionListener(this); 106 shrinkRightAnnotationButton.addActionListener(this); 107 108 add(new JLabel("span edit:"), new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.EAST, 109 GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2)); 110 add(growLeftAnnotationButton, new GridBagConstraints(1, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, 111 GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2)); 112 add(shrinkLeftAnnotationButton, new GridBagConstraints(2, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, 113 GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2)); 114 add(shrinkRightAnnotationButton, new GridBagConstraints(3, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, 115 GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2)); 116 add(growRightAnnotationButton, new GridBagConstraints(4, 0, 1, 1, 0, 0, GridBagConstraints.CENTER, 117 GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 2, 2)); 118 119 } 120 121 public void actionPerformed(ActionEvent event) { 122 String command = event.getActionCommand(); 123 124 if (command.equals(SpanUtil.GROW_ANNOTATION_LEFT) || command.equals(SpanUtil.GROW_ANNOTATION_RIGHT) 125 || command.equals(SpanUtil.SHRINK_ANNOTATION_LEFT) || command.equals(SpanUtil.SHRINK_ANNOTATION_RIGHT)) { 126 try { 127 List<Span> selectedSpans = annotationDisplay.getSelectedSpans(); 128 SimpleInstance selectedAnnotation = manager.getSelectedAnnotation(); 129 130 if((event.getModifiers() & ActionEvent.CTRL_MASK) > 0) 131 command = command+"_WORD"; 132 133 if (selectedSpans.size() > 0) { 134 int[] selectedSpanIndices = annotationDisplay.getSelectedSpanIndices(); 135 spanUtil.editSpans(selectedSpans, selectedAnnotation, command); 136 annotationDisplay.setSelectedSpanIndices(selectedSpanIndices); 137 } 138 } catch (InvalidSpanException ise) { 139 JOptionPane.showMessageDialog(this, "Annotation has an invalid span value: " + ise.getMessage(), 140 "Invalid span", JOptionPane.ERROR_MESSAGE); 141 } catch (TextSourceAccessException tsae) { 142 JOptionPane.showMessageDialog(null, "There was a problem retrieving the text from the text source: " 143 + tsae.getMessage(), "Text Source Error", JOptionPane.ERROR_MESSAGE); 144 } 145 } 146 } 147 }