001 /*
002 * ObjectPropertyAction.java
003 *
004 * Niraj Aswani, 09/March/07
005 *
006 * $Id: RestrictionAction.java 11598 2009-10-13 13:44:17Z johann_p $
007 */
008 package gate.gui.ontology;
009
010 import gate.creole.ontology.*;
011 import gate.gui.MainFrame;
012
013 import java.awt.BorderLayout;
014 import java.awt.FlowLayout;
015 import java.awt.GridLayout;
016 import java.awt.event.ActionEvent;
017 import java.awt.event.ActionListener;
018 import java.util.*;
019 import javax.swing.*;
020 import javax.swing.border.TitledBorder;
021
022 /**
023 * Action to create a new ObjectProperty in the ontology
024 *
025 * @author niraj
026 *
027 */
028 public class RestrictionAction extends AbstractAction {
029
030 public RestrictionAction(String s, Icon icon) {
031 super(s, icon);
032 mainPanel = new JPanel(new BorderLayout());
033 restrictionTypes = new JPanel(new GridLayout(3, 2));
034
035 EnableDisableClass edc = new EnableDisableClass();
036 minCard = new JRadioButton("Minimum Cardinality");
037 minCard.addActionListener(edc);
038
039 maxCard = new JRadioButton("Maximum Cardinality");
040 maxCard.addActionListener(edc);
041
042 card = new JRadioButton("Cardinality");
043 card.addActionListener(edc);
044
045 hasVal = new JRadioButton("Has Value");
046 hasVal.addActionListener(edc);
047
048 allVals = new JRadioButton("All Values From");
049 allVals.addActionListener(edc);
050
051 someVals = new JRadioButton("Some Values From");
052 someVals.addActionListener(edc);
053
054 ButtonGroup bg = new ButtonGroup();
055 bg.add(minCard);
056 bg.add(maxCard);
057 bg.add(card);
058 bg.add(hasVal);
059 bg.add(allVals);
060 bg.add(someVals);
061 restrictionTypes.add(card);
062 restrictionTypes.add(hasVal);
063 restrictionTypes.add(minCard);
064 restrictionTypes.add(allVals);
065 restrictionTypes.add(maxCard);
066 restrictionTypes.add(someVals);
067 restrictionTypes.setBorder(new TitledBorder("Restriction Types"));
068
069 middlePanel = new JPanel(new FlowLayout());
070 middlePanel.setBorder(new TitledBorder("On Property"));
071 onPropertyChoice = new JComboBox(new DefaultComboBoxModel());
072 onPropertyChoice.setPrototypeDisplayValue(new String(
073 "http://www.dcs.shef.ac.uk/owlim#SomeObjectProperty"));
074 middlePanel.add(onPropertyChoice);
075
076 bottomPanel = new JPanel(new GridLayout(2, 1));
077 valuePanel = new JPanel(new FlowLayout());
078 valuePanel.setBorder(new TitledBorder("Cardinality Value"));
079 value = new JTextField("1", 20);
080 valuePanel.add(value);
081
082 hasValuePanel = new JPanel(new FlowLayout());
083 hasValuePanel.setBorder(new TitledBorder("Has Value"));
084 hasValChoice = new JComboBox(new DefaultComboBoxModel());
085 hasValChoice.setPrototypeDisplayValue(new String(
086 "http://www.dcs.shef.ac.uk/owlim#SomeObjectProperty"));
087 hasValuePanel.add(hasValChoice);
088 bottomPanel.add(valuePanel);
089 bottomPanel.add(hasValuePanel);
090
091 mainPanel.add(restrictionTypes, BorderLayout.NORTH);
092 mainPanel.add(middlePanel, BorderLayout.CENTER);
093 mainPanel.add(bottomPanel, BorderLayout.SOUTH);
094 card.setSelected(true);
095 hasValChoice.setEnabled(false);
096 }
097
098 public void actionPerformed(ActionEvent actionevent) {
099
100 ArrayList<RDFProperty> props = new ArrayList<RDFProperty>();
101 props.addAll(ontology.getObjectProperties());
102 props.addAll(ontology.getDatatypeProperties());
103 Collections.sort(props, new OntologyItemComparator());
104 DefaultComboBoxModel dcbm = new DefaultComboBoxModel(props.toArray());
105 onPropertyChoice.setModel(dcbm);
106
107 ArrayList<OResource> classes = new ArrayList<OResource>();
108 classes.addAll(ontology.getOClasses(false));
109 Collections.sort(classes, new OntologyItemComparator());
110 DefaultComboBoxModel dcbm1 = new DefaultComboBoxModel(classes.toArray());
111 hasValChoice.setModel(dcbm1);
112
113 int i = JOptionPane.showOptionDialog(MainFrame.getInstance(), mainPanel,
114 "New Restriction", 2, 3, MainFrame.getIcon("empty"), new String[] {"OK", "Cancel"}, "OK");
115 if(i == 0) {
116 RDFProperty onProp = (RDFProperty)onPropertyChoice.getSelectedItem();
117 if(!value.isEnabled()) {
118 OResource hasValResource = (OResource)hasValChoice.getSelectedItem();
119 if(allVals.isSelected()) {
120 ontology.addAllValuesFromRestriction(onProp, hasValResource);
121 }
122 else if(someVals.isSelected()) {
123 ontology.addSomeValuesFromRestriction(onProp, hasValResource);
124 }
125 else {
126 ontology.addHasValueRestriction(onProp, hasValResource);
127 }
128 }
129 else {
130 // first check if the provided string is a valid datatype
131 String number = value.getText();
132 if(!DataType.getDataType("http://www.w3.org/2001/XMLSchema#nonNegativeInteger")
133 .isValidValue(number)) {
134 JOptionPane.showMessageDialog(MainFrame.getInstance(),
135 "Invalid value " + number);
136 return;
137 }
138 try {
139 if(card.isSelected()) {
140 ontology.addCardinalityRestriction(onProp, number);
141 }
142 else if(minCard.isSelected()) {
143 ontology.addMinCardinalityRestriction(onProp, number);
144 }
145 else {
146 ontology.addMaxCardinalityRestriction(onProp, number);
147 }
148 }
149 catch(InvalidValueException ive) {
150 JOptionPane.showMessageDialog(MainFrame.getInstance(), ive
151 .getMessage());
152 ive.printStackTrace();
153 return;
154 }
155 }
156 }
157 }
158
159 public Ontology getOntology() {
160 return ontology;
161 }
162
163 public void setOntology(Ontology ontology1) {
164 ontology = ontology1;
165 }
166
167 protected JPanel mainPanel;
168
169 protected JPanel restrictionTypes;
170
171 protected JRadioButton minCard, maxCard, card, hasVal, allVals, someVals;
172
173 protected JPanel middlePanel;
174
175 protected JComboBox onPropertyChoice;
176
177 protected JPanel bottomPanel;
178
179 protected JPanel valuePanel, hasValuePanel;
180
181 protected JTextField value;
182
183 protected JComboBox hasValChoice;
184
185 protected Ontology ontology;
186
187 class EnableDisableClass implements ActionListener {
188 public void actionPerformed(ActionEvent ae) {
189 if(hasVal.isSelected() || allVals.isSelected() || someVals.isSelected()) {
190 value.setEnabled(false);
191 hasValChoice.setEnabled(true);
192 }
193 else {
194 value.setEnabled(true);
195 hasValChoice.setEnabled(false);
196 }
197 }
198 }
199 }
|