RestrictionAction.java
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(32));
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(21));
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"23, 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 }