AnnotationPropertyAction.java
001 /*
002  * Copyright (c) 1995-2012, The University of Sheffield. See the file
003  * COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  
005  * This file is part of GATE (see http://gate.ac.uk/), and is free software,
006  * licenced under the GNU Library General Public License, Version 2, June 1991
007  * (in the distribution as file licence.html, and also available at
008  * http://gate.ac.uk/gate/licence.html).
009  
010  * Niraj Aswani, 09/March/07
011  
012  * $Id: AnnotationPropertyAction.html,v 1.0 2007/03/09 16:13:01 niraj Exp $
013  */
014 package gate.gui.ontology;
015 
016 import gate.creole.ontology.Ontology;
017 import gate.gui.MainFrame;
018 
019 import java.awt.GridBagConstraints;
020 import java.awt.GridBagLayout;
021 import java.awt.Insets;
022 import java.awt.event.ActionEvent;
023 
024 import javax.swing.AbstractAction;
025 import javax.swing.Icon;
026 import javax.swing.JLabel;
027 import javax.swing.JOptionPane;
028 import javax.swing.JPanel;
029 import javax.swing.JTextField;
030 
031 /**
032  * Action to create a new annotation property.
033  */
034 public class AnnotationPropertyAction extends AbstractAction {
035   private static final long serialVersionUID = 3546358452780544048L;
036 
037   /**
038    * Constructor
039    
040    @param s
041    *          - Label assigned to the Button
042    @param icon
043    *          - Icon assigned to the Button
044    */
045   public AnnotationPropertyAction(String s, Icon icon) {
046     super(s, icon);
047     mainPanel = new JPanel(new GridBagLayout());
048     GridBagConstraints gbc = new GridBagConstraints();
049     gbc.insets = new Insets(3333);
050     gbc.anchor = GridBagConstraints.WEST;
051 
052     mainPanel.add(new JLabel("Name Space:"), gbc);
053     mainPanel.add(nameSpace = new JTextField(30), gbc);
054 
055     gbc.gridy = 1;
056     mainPanel.add(new JLabel("Property Name:"), gbc);
057     mainPanel.add(propertyName = new JTextField(30), gbc);
058   }
059 
060   @SuppressWarnings("serial")
061   @Override
062   public void actionPerformed(ActionEvent actionevent) {
063     nameSpace.setText(ontology.getDefaultNameSpace() == null
064         "http://gate.ac.uk/example#"
065         : ontology.getDefaultNameSpace());
066     JOptionPane pane =
067         new JOptionPane(mainPanel, JOptionPane.QUESTION_MESSAGE,
068             JOptionPane.OK_CANCEL_OPTION,
069             MainFrame.getIcon("ontology-annotation-property")) {
070           @Override
071           public void selectInitialValue() {
072             propertyName.requestFocusInWindow();
073             propertyName.selectAll();
074           }
075         };
076     pane.createDialog(MainFrame.getInstance()"New Annotation Property")
077         .setVisible(true);
078     Object selectedValue = pane.getValue();
079     if(selectedValue != null && selectedValue instanceof Integer
080         && (Integer)selectedValue == JOptionPane.OK_OPTION) {
081       String s = nameSpace.getText();
082       if(!Utils.isValidNameSpace(s)) {
083         JOptionPane.showMessageDialog(MainFrame.getInstance(),
084             "Invalid Name Space: " + s
085                 "\nExample: http://gate.ac.uk/example#");
086         return;
087       }
088       if(!Utils.isValidOntologyResourceName(propertyName.getText())) {
089         JOptionPane.showMessageDialog(MainFrame.getInstance(),
090             "Invalid Property Name: " + propertyName.getText());
091         return;
092       }
093       if(Utils.getOResourceFromMap(ontology, s + propertyName.getText()) != null) {
094         JOptionPane.showMessageDialog(MainFrame.getInstance()"<html>"
095             "Resource <b>" + s + propertyName.getText()
096             "</b> already exists.");
097         return;
098       }
099 
100       ontology.addAnnotationProperty(ontology.createOURI(nameSpace.getText()
101           + propertyName.getText()));
102     }
103   }
104 
105   /**
106    @return the associated ontology
107    */
108   public Ontology getOntology() {
109     return ontology;
110   }
111 
112   /**
113    * Specifies the ontology that should be used to add/remove resource to/from.
114    */
115   public void setOntology(Ontology ontology) {
116     this.ontology = ontology;
117   }
118 
119   protected JPanel mainPanel;
120 
121   protected JTextField nameSpace;
122 
123   protected JTextField propertyName;
124 
125   protected Ontology ontology;
126 }