DatatypePropertyAction.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: DatatypePropertyAction.html,v 1.0 2007/03/09 16:13:01 niraj Exp $
013  */
014 package gate.gui.ontology;
015 
016 import gate.creole.ontology.DataType;
017 import gate.creole.ontology.OClass;
018 import gate.creole.ontology.OResource;
019 import gate.creole.ontology.Ontology;
020 import gate.gui.MainFrame;
021 
022 import java.awt.GridBagConstraints;
023 import java.awt.GridBagLayout;
024 import java.awt.Insets;
025 import java.awt.event.ActionEvent;
026 import java.awt.event.ActionListener;
027 import java.util.ArrayList;
028 import java.util.HashSet;
029 import java.util.List;
030 
031 import javax.swing.AbstractAction;
032 import javax.swing.DefaultComboBoxModel;
033 import javax.swing.Icon;
034 import javax.swing.JButton;
035 import javax.swing.JComboBox;
036 import javax.swing.JLabel;
037 import javax.swing.JOptionPane;
038 import javax.swing.JPanel;
039 import javax.swing.JTextField;
040 import javax.swing.tree.DefaultMutableTreeNode;
041 
042 /**
043  * Action to create a new datatype property.
044  */
045 public class DatatypePropertyAction extends AbstractAction implements
046                                                           TreeNodeSelectionListener {
047   private static final long serialVersionUID = 3257852073457235252L;
048 
049   public DatatypePropertyAction(String s, Icon icon) {
050     super(s, icon);
051 
052     mainPanel = new JPanel(new GridBagLayout());
053     GridBagConstraints gbc = new GridBagConstraints();
054     gbc.insets = new Insets(3333);
055     gbc.anchor = GridBagConstraints.WEST;
056 
057     mainPanel.add(new JLabel("Name Space:"), gbc);
058     mainPanel.add(nameSpace = new JTextField(30), gbc);
059 
060     gbc.gridy = 1;
061     mainPanel.add(new JLabel("Data Type:"), gbc);
062     mainPanel.add(datatypesComboBox = new JComboBox<String>(), gbc);
063     mainPanel.add(datatypesComboBox, gbc);
064 
065     gbc.gridy = 2;
066     mainPanel.add(new JLabel("Property Name:"), gbc);
067     mainPanel.add(propertyName = new JTextField(30), gbc);
068     mainPanel.add(domainButton = new JButton("Domain"), gbc);
069 
070     datatypesComboBox.setModel(new DefaultComboBoxModel<String>(new String[] {
071         "http://www.w3.org/2001/XMLSchema#boolean",
072         "http://www.w3.org/2001/XMLSchema#byte",
073         "http://www.w3.org/2001/XMLSchema#date",
074         "http://www.w3.org/2001/XMLSchema#decimal",
075         "http://www.w3.org/2001/XMLSchema#double",
076         "http://www.w3.org/2001/XMLSchema#duration",
077         "http://www.w3.org/2001/XMLSchema#float",
078         "http://www.w3.org/2001/XMLSchema#int",
079         "http://www.w3.org/2001/XMLSchema#integer",
080         "http://www.w3.org/2001/XMLSchema#long",
081         "http://www.w3.org/2001/XMLSchema#negativeInteger",
082         "http://www.w3.org/2001/XMLSchema#nonNegativeInteger",
083         "http://www.w3.org/2001/XMLSchema#nonPositiveInteger",
084         "http://www.w3.org/2001/XMLSchema#positiveInteger",
085         "http://www.w3.org/2001/XMLSchema#short",
086         "http://www.w3.org/2001/XMLSchema#string",
087         "http://www.w3.org/2001/XMLSchema#time",
088         "http://www.w3.org/2001/XMLSchema#unsignedByte",
089         "http://www.w3.org/2001/XMLSchema#unsignedInt",
090         "http://www.w3.org/2001/XMLSchema#unsignedLong",
091         "http://www.w3.org/2001/XMLSchema#unsignedShort"}));
092     domainAction = new ValuesSelectionAction();
093     domainButton.addActionListener(new ActionListener() {
094       @Override
095       public void actionPerformed(ActionEvent actionevent) {
096         String as[] new String[ontologyClassesURIs.size()];
097         for(int i = 0; i < as.length; i++)
098           as[i= ontologyClassesURIs.get(i);
099         ArrayList<String> arraylist = new ArrayList<String>();
100         for(int j = 0; j < selectedNodes.size(); j++) {
101           DefaultMutableTreeNode node = selectedNodes.get(j);
102           OResource res = ((OResourceNode)node.getUserObject()).getResource();
103           if(res instanceof OClass) {
104             arraylist.add(res.getONodeID().toString());
105           }
106         }
107         String as1[] new String[arraylist.size()];
108         for(int k = 0; k < as1.length; k++) {
109           as1[k= arraylist.get(k);
110         }
111         domainAction.showGUI("Domain", as, as1, false,
112           MainFrame.getIcon("ontology-datatype-property"));
113       }
114     });
115   }
116 
117   @Override
118   public void actionPerformed(ActionEvent actionevent) {
119     nameSpace.setText(ontology.getDefaultNameSpace() == null ?
120       "http://gate.ac.uk/example#" : ontology.getDefaultNameSpace());
121     @SuppressWarnings("serial")
122     JOptionPane pane = new JOptionPane(mainPanel, JOptionPane.QUESTION_MESSAGE,
123       JOptionPane.OK_CANCEL_OPTION,
124       MainFrame.getIcon("ontology-datatype-property")) {
125       @Override
126       public void selectInitialValue() {
127         propertyName.requestFocusInWindow();
128         propertyName.selectAll();
129       }
130     };
131     pane.createDialog(MainFrame.getInstance(),
132       "New Datatype Property").setVisible(true);
133     Object selectedValue = pane.getValue();
134     if (selectedValue != null
135     && selectedValue instanceof Integer
136     && (IntegerselectedValue == JOptionPane.OK_OPTION) {
137       String s = nameSpace.getText();
138       if(!Utils.isValidNameSpace(s)) {
139         JOptionPane.showMessageDialog(MainFrame.getInstance(),
140           "Invalid Name Space: " + s + "\nExample: http://gate.ac.uk/example#");
141         return;
142       }
143       if(!Utils.isValidOntologyResourceName(propertyName.getText())) {
144         JOptionPane.showMessageDialog(MainFrame.getInstance(),
145           "Invalid Property Name: " + propertyName.getText());
146         return;
147       }
148       if(Utils.getOResourceFromMap(ontology,s + propertyName.getText()) != null) {
149         JOptionPane.showMessageDialog(MainFrame.getInstance(),"<html>" +
150           "Resource <b>" + s+propertyName.getText() "</b> already exists.");
151         return;
152       }
153       String as[] = domainAction.getSelectedValues();
154       HashSet<OClass> hashset = new HashSet<OClass>();
155       for (String a : as) {
156         OClass oclass = (OClassUtils.getOResourceFromMap(ontology,a);
157         hashset.add(oclass);
158       }
159       DataType dt = DataType.getDataType((String)
160         datatypesComboBox.getSelectedItem());
161       ontology.addDatatypeProperty(ontology.createOURI(nameSpace.getText()
162         + propertyName.getText()), hashset, dt);
163     }
164   }
165 
166   public Ontology getOntology() {
167     return ontology;
168   }
169 
170   public void setOntology(Ontology ontology) {
171     this.ontology = ontology;
172   }
173 
174   @Override
175   public void selectionChanged(ArrayList<DefaultMutableTreeNode> arraylist) {
176     selectedNodes = arraylist;
177   }
178 
179   public List<String> getOntologyClassesURIs() {
180     return ontologyClassesURIs;
181   }
182 
183   public void setOntologyClassesURIs(ArrayList<String> arraylist) {
184     ontologyClassesURIs = arraylist;
185   }
186 
187   protected JPanel mainPanel;
188   protected JTextField nameSpace;
189   protected JComboBox<String> datatypesComboBox;
190   protected JButton domainButton;
191   protected JTextField propertyName;
192   protected ValuesSelectionAction domainAction;
193   protected List<String> ontologyClassesURIs;
194   protected List<DefaultMutableTreeNode> selectedNodes;
195   protected Ontology ontology;
196 }