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 package edu.uchsc.ccp.knowtator;
030
031 import java.util.Collection;
032
033 import javax.swing.JOptionPane;
034
035 import edu.stanford.smi.protege.model.Cls;
036 import edu.stanford.smi.protege.model.Facet;
037 import edu.stanford.smi.protege.model.SimpleInstance;
038 import edu.stanford.smi.protege.model.Slot;
039 import edu.stanford.smi.protege.widget.AbstractSlotWidget;
040 import edu.stanford.smi.protege.widget.ClsWidget;
041 import edu.stanford.smi.protege.widget.SlotWidget;
042 import edu.stanford.smi.protege.widget.TextFieldWidget;
043
044 /**
045 * This class will hopefully replace SlotMentionValueWidget if I can ever get it
046 * to work the way I want it to. The code here is intended to address feature
047 * request [ 1720295 ] simple slots should dynamically load widget from class
048 * for
049 * http://sourceforge.net/tracker/index.php?func=detail&aid=1720295&group_id=
050 * 128424&atid=714371
051 *
052 * @author Philip
053 *
054 */
055 public class SimpleSlotMentionValueWidget extends TextFieldWidget {
056
057 static final long serialVersionUID = 0;
058
059 KnowtatorManager manager;
060
061 MentionUtil mentionUtil;
062
063 AnnotationUtil annotationUtil;
064
065 KnowtatorProjectUtil kpu;
066
067 public void initialize() {
068 super.initialize();
069 manager = (KnowtatorManager) getKnowledgeBase().getClientInformation(Knowtator.KNOWTATOR_MANAGER);
070 mentionUtil = manager.getMentionUtil();
071 annotationUtil = manager.getAnnotationUtil();
072 kpu = manager.getKnowtatorProjectUtil();
073 setPreferredColumns(2);
074 setPreferredRows(2);
075 }
076
077 public static boolean isSuitable(Cls cls, Slot slot, Facet facet) {
078 return true;
079 }
080
081 private void showTypeMissingMessage(SimpleInstance mention) {
082 if (mentionUtil.isClassMention(mention))
083 JOptionPane.showMessageDialog(this, "There is no class assigned to this annotation.\n"
084 + "You may not add a value to this slot until a \n" + "class is assigned.", "No class assigned",
085 JOptionPane.WARNING_MESSAGE);
086 else if (mentionUtil.isInstanceMention(mention))
087 JOptionPane.showMessageDialog(this, "There is no instance assigned to this annotation.\n"
088 + "You may not add a value to this slot until an \n" + "instance is assigned.",
089 "No instance assigned", JOptionPane.WARNING_MESSAGE);
090
091 }
092
093 private void showSlotMissingMessage() {
094 JOptionPane.showMessageDialog(this, "There is not a slot specified for this slot value.\n"
095 + "This is most likely a result of deleting a slot \n"
096 + "from the annotation schema after this annotation \n"
097 + "was created. Please remove this slot value, select\n"
098 + "another annotation, and re-select this annotation.", "Slot missing", JOptionPane.WARNING_MESSAGE);
099 }
100
101 public void setValues(Collection values) {
102 super.setValues(values);
103
104 SimpleInstance slotMention = (SimpleInstance) getInstance();
105 Slot mentionSlot = mentionUtil.getSlotMentionSlot(slotMention);
106 if (mentionSlot == null) {
107 showSlotMissingMessage();
108 return;
109 }
110 SimpleInstance mention = mentionUtil.getMentionedBy(slotMention);
111 Cls mentionCls = mentionUtil.getMentionCls(mention);
112 if (mentionCls == null) {
113 showTypeMissingMessage(mention);
114 return;
115 }
116
117 ClsWidget clsWidget = getProject().getDesignTimeClsWidget(mentionCls);
118 SlotWidget slotWidget = clsWidget.getSlotWidget(mentionSlot);
119 AbstractSlotWidget widget = (AbstractSlotWidget) slotWidget;
120 widget.setSlot(kpu.getSlotMentionSlot());
121 widget.setInstance(getInstance());
122 removeAll();
123 add(widget);
124 }
125 }