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