SubClassAction.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
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  Niraj Aswani, 09/March/07
011  *
012  *  $Id: SubClassAction.html,v 1.0 2007/03/09 16:13:01 niraj Exp $
013  */
014 package gate.gui.ontology;
015 
016 import gate.creole.ontology.*;
017 import gate.gui.MainFrame;
018 
019 import java.awt.*;
020 import java.awt.event.ActionEvent;
021 import java.util.*;
022 import javax.swing.*;
023 import javax.swing.tree.DefaultMutableTreeNode;
024 
025 /**
026  * Action to create a new subclass.
027  */
028 public class SubClassAction extends AbstractAction implements
029                                                   TreeNodeSelectionListener {
030   private static final long serialVersionUID = 3258409543049359926L;
031 
032   public SubClassAction(String s, Icon icon) {
033     super(s, icon);
034     mainPanel = new JPanel(new GridBagLayout());
035     GridBagConstraints gbc = new GridBagConstraints();
036     gbc.insets = new Insets(3333);
037     gbc.anchor = GridBagConstraints.WEST;
038 
039     mainPanel.add(new JLabel("Name Space:"), gbc);
040     mainPanel.add(nameSpace = new JTextField(30), gbc);
041 
042     gbc.gridy = 1;
043     mainPanel.add(new JLabel("Class Name:"), gbc);
044     mainPanel.add(className = new JTextField(30), gbc);
045   }
046 
047   @Override
048   @SuppressWarnings("deprecation")
049   public void actionPerformed(ActionEvent actionevent) {
050     OResource selectedNode = ((OResourceNode)selectedNodes.get(0)
051       .getUserObject()).getResource();
052     String ns = selectedNode.getONodeID().getNameSpace();
053     if(gate.creole.ontology.Utils.hasSystemNameSpace(
054       selectedNode.getONodeID().toString())) {
055       ns = ontology.getDefaultNameSpace();
056     }
057     nameSpace.setText(ns);
058     ArrayList<OClass> arraylist = new ArrayList<OClass>();
059     for(int i = 0; i < selectedNodes.size(); i++) {
060       Object obj = ((OResourceNode)selectedNodes.get(i).getUserObject()).getResource();
061       if(obj instanceof OClassarraylist.add((OClass)obj);
062     }
063 
064     nameSpace.setText(ontology.getDefaultNameSpace() == null ?
065       "http://gate.ac.uk/example#" : ontology.getDefaultNameSpace());
066     @SuppressWarnings("serial")
067     JOptionPane pane = new JOptionPane(mainPanel, JOptionPane.QUESTION_MESSAGE,
068       JOptionPane.OK_CANCEL_OPTION, MainFrame.getIcon("ontology-subclass")) {
069       @Override
070       public void selectInitialValue() {
071         className.requestFocusInWindow();
072         className.selectAll();
073       }
074     };
075     pane.createDialog(MainFrame.getInstance(),"New Sub Class").setVisible(true);
076     Object selectedValue = pane.getValue();
077     if (selectedValue != null
078     && selectedValue instanceof Integer
079     && (IntegerselectedValue == JOptionPane.OK_OPTION) {
080       String s = nameSpace.getText();
081       if (!Utils.isValidNameSpace(s)) {
082         JOptionPane.showMessageDialog(MainFrame.getInstance(),
083           "Invalid Name Space: " + s + "\nExample: http://gate.ac.uk/example#");
084         return;
085       }
086       if(!Utils.isValidOntologyResourceName(className.getText())) {
087         JOptionPane.showMessageDialog(MainFrame.getInstance(),
088           "Invalid Class Name: " + className.getText());
089         return;
090       }
091       if(Utils.getOResourceFromMap(ontology,s + className.getText()) != null) {
092         JOptionPane.showMessageDialog(MainFrame.getInstance(),"<html>" +
093           "Resource <b>" + s+className.getText() "</b> already exists.");
094         return;
095       }
096 
097       OClass oclassimpl =
098           ontology.addOClass(ontology.createOURI(s + className.getText()));
099       for(int k = 0; k < arraylist.size(); k++) {
100         (arraylist.get(k)).addSubClass(oclassimpl);
101       }
102     }
103   }
104 
105   public Ontology getOntology() {
106     return ontology;
107   }
108 
109   public void setOntology(Ontology ontology) {
110     this.ontology = ontology;
111   }
112 
113   @Override
114   public void selectionChanged(ArrayList<DefaultMutableTreeNode> arraylist) {
115     selectedNodes = arraylist;
116   }
117 
118   protected JTextField nameSpace;
119   protected JTextField className;
120   protected JPanel mainPanel;
121   protected ArrayList<DefaultMutableTreeNode> selectedNodes;
122   protected Ontology ontology;
123 }