ObjectPropertyAction.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: ObjectPropertyAction.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.awt.event.ActionListener;
022 import java.util.*;
023 import javax.swing.*;
024 import javax.swing.tree.DefaultMutableTreeNode;
025 
026 /**
027  * Action to create a new ObjectProperty in the ontology
028  */
029 public class ObjectPropertyAction extends AbstractAction implements
030                                                         TreeNodeSelectionListener {
031   private static final long serialVersionUID = 3689632475823551285L;
032 
033   public ObjectPropertyAction(String s, Icon icon) {
034     super(s, icon);
035 
036     mainPanel = new JPanel(new GridBagLayout());
037     GridBagConstraints gbc = new GridBagConstraints();
038     gbc.insets = new Insets(3333);
039     gbc.anchor = GridBagConstraints.WEST;
040 
041     mainPanel.add(new JLabel("Name Space:"), gbc);
042     mainPanel.add(nameSpace = new JTextField(30), gbc);
043 
044     gbc.gridy = 1;
045     mainPanel.add(new JLabel("Property Name:"), gbc);
046     mainPanel.add(propertyName = new JTextField(30), gbc);
047     mainPanel.add(domainButton = new JButton("Domain"), gbc);
048     mainPanel.add(rangeButton = new JButton("Range"), gbc);
049 
050     domainAction = new ValuesSelectionAction();
051     domainButton.addActionListener(new ActionListener() {
052       @Override
053       public void actionPerformed(ActionEvent actionevent) {
054         String as[] new String[ontologyClassesURIs.size()];
055         for(int i = 0; i < as.length; i++)
056           as[i= ontologyClassesURIs.get(i);
057         ArrayList<String> arraylist = new ArrayList<String>();
058         for(int j = 0; j < selectedNodes.size(); j++) {
059           DefaultMutableTreeNode defaultmutabletreenode = selectedNodes.get(j);
060           if(((OResourceNode)defaultmutabletreenode.getUserObject())
061                   .getResource() instanceof OClass)
062             arraylist.add((((OResourceNode)defaultmutabletreenode
063                     .getUserObject()).getResource()).getONodeID().toString());
064         }
065         String as1[] new String[arraylist.size()];
066         for(int k = 0; k < as1.length; k++)
067           as1[k= arraylist.get(k);
068         domainAction.showGUI("Domain", as, as1, false,
069           MainFrame.getIcon("ontology-object-property"));
070       }
071     });
072     rangeAction = new ValuesSelectionAction();
073     rangeButton.addActionListener(new ActionListener() {
074       @Override
075       public void actionPerformed(ActionEvent actionevent) {
076         String as[] new String[ontologyClassesURIs.size()];
077         for(int i = 0; i < as.length; i++)
078           as[i= ontologyClassesURIs.get(i);
079         rangeAction.showGUI("Range", as, new String[0], false,
080           MainFrame.getIcon("ontology-object-property"));
081       }
082     });
083   }
084 
085   @Override
086   public void actionPerformed(ActionEvent actionevent) {
087     nameSpace.setText(ontology.getDefaultNameSpace() == null ?
088       "http://gate.ac.uk/example#" : ontology.getDefaultNameSpace());
089     @SuppressWarnings("serial")
090     JOptionPane pane = new JOptionPane(mainPanel, JOptionPane.QUESTION_MESSAGE,
091       JOptionPane.OK_CANCEL_OPTION,
092       MainFrame.getIcon("ontology-object-property")) {
093       @Override
094       public void selectInitialValue() {
095         propertyName.requestFocusInWindow();
096         propertyName.selectAll();
097       }
098     };
099     pane.createDialog(MainFrame.getInstance(),
100       "New Object Property").setVisible(true);
101     Object selectedValue = pane.getValue();
102     if (selectedValue != null
103     && selectedValue instanceof Integer
104     && (IntegerselectedValue == JOptionPane.OK_OPTION) {
105       String s = nameSpace.getText();
106       if(!Utils.isValidNameSpace(s)) {
107         JOptionPane.showMessageDialog(MainFrame.getInstance(),
108           "Invalid Name Space: " + s + "\nExample: http://gate.ac.uk/example#");
109         return;
110       }
111       if(!Utils.isValidOntologyResourceName(propertyName.getText())) {
112         JOptionPane.showMessageDialog(MainFrame.getInstance(),
113           "Invalid Property Name: " + propertyName.getText());
114         return;
115       }
116       if(Utils.getOResourceFromMap(ontology,s + propertyName.getText()) != null) {
117         JOptionPane.showMessageDialog(MainFrame.getInstance(),"<html>" +
118           "Resource <b>" + s+propertyName.getText() "</b> already exists.");
119         return;
120       }
121       String domainSelectedValues[] = domainAction.getSelectedValues();
122       HashSet<OClass> domainSet = new HashSet<OClass>();
123       for (String domainSelectedValue : domainSelectedValues) {
124         OClass oclass = (OClass)
125           Utils.getOResourceFromMap(ontology,domainSelectedValue);
126         domainSet.add(oclass);
127       }
128       String rangeSelectedValues[] = rangeAction.getSelectedValues();
129       HashSet<OClass> rangeSet = new HashSet<OClass>();
130       for (String rangeSelectedValue : rangeSelectedValues) {
131         OClass oclass = (OClass)
132           Utils.getOResourceFromMap(ontology,rangeSelectedValue);
133         rangeSet.add(oclass);
134       }
135       ontology.addObjectProperty(ontology.createOURI(nameSpace.getText()
136         + propertyName.getText()), domainSet, rangeSet);
137     }
138   }
139 
140   public Ontology getOntology() {
141     return ontology;
142   }
143 
144   public void setOntology(Ontology ontology) {
145     this.ontology = ontology;
146   }
147 
148   @Override
149   public void selectionChanged(ArrayList<DefaultMutableTreeNode> arraylist) {
150     selectedNodes = arraylist;
151   }
152 
153   public ArrayList<String> getOntologyClassesURIs() {
154     return ontologyClassesURIs;
155   }
156 
157   public void setOntologyClassesURIs(ArrayList<String> arraylist) {
158     ontologyClassesURIs = arraylist;
159   }
160 
161   protected JPanel mainPanel;
162   protected JTextField nameSpace;
163   protected JButton domainButton;
164   protected JButton rangeButton;
165   protected JTextField propertyName;
166   protected ValuesSelectionAction domainAction;
167   protected ValuesSelectionAction rangeAction;
168   protected ArrayList<String> ontologyClassesURIs;
169   protected ArrayList<DefaultMutableTreeNode> selectedNodes;
170   protected Ontology ontology;
171 }