001 /**
002 * Copyright (C) 2007-2008, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program. If not, see <http://www.gnu.org/licenses/>.
018 *
019 */
020
021 package org.dllearner.tools.ore;
022
023 import java.awt.event.ActionEvent;
024 import java.awt.event.ActionListener;
025 import java.awt.event.MouseEvent;
026 import java.awt.event.MouseListener;
027 import java.util.HashSet;
028 import java.util.Set;
029
030 import javax.swing.DefaultListModel;
031 import javax.swing.JButton;
032 import javax.swing.event.ListSelectionEvent;
033 import javax.swing.event.ListSelectionListener;
034
035 import org.dllearner.core.owl.Individual;
036 import org.semanticweb.owl.model.OWLOntologyChange;
037
038
039
040 /**
041 * Wizard panel descriptor where it is possible torepair wrong examples.
042 * @author Lorenz Buehmann
043 *
044 */
045 public class RepairPanelDescriptor extends WizardPanelDescriptor implements ActionListener, ListSelectionListener, MouseListener{
046
047 public static final String IDENTIFIER = "REPAIR_PANEL";
048 public static final String INFORMATION = "In this panel all positive and negative examples, that cause failures are shown in the list above. "
049 + "Select one of them and choose action to solve problem by press one of buttons aside the list.";
050
051 private RepairPanel repairPanel;
052 private Set<OWLOntologyChange> ontologyChanges;
053 private ORE ore;
054 private OntologyModifier modi;
055
056
057 public RepairPanelDescriptor() {
058
059 repairPanel = new RepairPanel();
060
061 repairPanel.addActionListeners(this);
062 repairPanel.addSelectionListeners(this);
063 repairPanel.addMouseListeners(this);
064
065 setPanelDescriptorIdentifier(IDENTIFIER);
066 setPanelComponent(repairPanel);
067 ontologyChanges = new HashSet<OWLOntologyChange>();
068
069
070 }
071
072 @Override
073 public Object getNextPanelDescriptor() {
074 return SavePanelDescriptor.IDENTIFIER;
075 }
076
077 @Override
078 public Object getBackPanelDescriptor() {
079 return LearningPanelDescriptor.IDENTIFIER;
080 }
081
082 @Override
083 public void aboutToDisplayPanel() {
084 getWizard().getInformationField().setText(INFORMATION);
085 }
086
087 /**
088 * Adds the wrong negative and positive examples to the lists.
089 */
090 public void refreshExampleLists(){
091 this.ore = getWizardModel().getOre();
092 repairPanel.setCellRenderers(ore);
093
094 DefaultListModel negModel = repairPanel.getNegFailureModel();
095 negModel.clear();
096 for(Individual ind : ore.getNewClassDescription().getCoveredNegatives()){
097 negModel.addElement(ind);
098 }
099
100 DefaultListModel posModel = repairPanel.getPosFailureModel();
101 posModel.clear();
102 for(Individual ind : ore.getNewClassDescription().getNotCoveredPositives()){
103 posModel.addElement(ind);
104 }
105
106
107 }
108
109
110 /**
111 * Method to control actions by button pressed.
112 */
113 public void actionPerformed(ActionEvent event) {
114 // ore = getWizardModel().getOre();
115 modi = ore.getModifier();
116 String actionName = ((JButton) event.getSource()).getName();
117 String actionType = ((JButton) event.getSource()).getParent().getName();
118
119 if(actionType.equals("negative")){
120 Individual ind = (Individual) repairPanel.getNegFailureList().getSelectedValue();
121 if(actionName.equals("negRepair")){
122 RepairDialog negDialog = new RepairDialog(ind, getWizard().getDialog(), ore, "neg");
123 int returncode = negDialog.showDialog();
124 if(returncode == 2){
125 ontologyChanges.addAll(negDialog.getAllChanges());
126 } else if(returncode == 3){
127 ontologyChanges.addAll(negDialog.getAllChanges());
128 repairPanel.getNegFailureModel().removeElement(ind);
129 }
130 } else if(actionName.equals("negAdd")){
131 ontologyChanges.addAll(modi.addClassAssertion(ind, ore.getIgnoredConcept()));
132 repairPanel.getNegFailureModel().removeElement(ind);
133
134 } else if(actionName.equals("negDelete")){
135 ontologyChanges.addAll(modi.deleteIndividual(ind));
136 repairPanel.getNegFailureModel().removeElement(ind);
137
138 }
139 } else if(actionType.equals("positive")){
140 Individual ind = (Individual) repairPanel.getPosFailureList().getSelectedValue();
141 if(actionName.equals("posRepair")){
142 RepairDialog posDialog = new RepairDialog(ind, getWizard().getDialog(), ore, "pos");
143 int returncode = posDialog.showDialog();
144 if(returncode == 2){
145 ontologyChanges.addAll(posDialog.getAllChanges());
146 } else if(returncode == 3){
147 ontologyChanges.addAll(posDialog.getAllChanges());
148 repairPanel.getPosFailureModel().removeElement(ind);
149 }
150 } else if(actionName.equals("posRemove")){
151 ontologyChanges.addAll(modi.addClassAssertion(ind, ore.getIgnoredConcept()));
152 repairPanel.getPosFailureModel().removeElement(ind);
153
154 } else if(actionName.equals("posDelete")){
155 ontologyChanges.addAll(modi.deleteIndividual(ind));
156 repairPanel.getPosFailureModel().removeElement(ind);
157
158 }
159 }
160
161
162 }
163
164 /**
165 * Method provides repair action by double click on list element.
166 */
167 public void mouseClicked(MouseEvent e) {
168
169 if(e.getClickCount() == 2){
170 if(e.getSource() == repairPanel.getNegFailureList()){
171 Individual ind = (Individual) repairPanel.getNegFailureList().getSelectedValue();
172 RepairDialog negDialog = new RepairDialog(ind, getWizard().getDialog(), getWizardModel().getOre(), "neg");
173 int returncode = negDialog.showDialog();
174 if(returncode == 2){
175 ontologyChanges.addAll(negDialog.getAllChanges());
176
177 } else if(returncode == 3){
178 ontologyChanges.addAll(negDialog.getAllChanges());
179 repairPanel.getNegFailureModel().removeElement(ind);
180 }
181 } else if(e.getSource() == repairPanel.getPosFailureList()){
182 Individual ind = (Individual) repairPanel.getPosFailureList().getSelectedValue();
183 RepairDialog posDialog = new RepairDialog(ind, getWizard().getDialog(), getWizardModel().getOre(), "pos");
184 int returncode = posDialog.showDialog();
185 if(returncode == 2){
186 ontologyChanges.addAll(posDialog.getAllChanges());
187
188 } else if(returncode == 3){
189 ontologyChanges.addAll(posDialog.getAllChanges());
190 repairPanel.getPosFailureModel().removeElement(ind);
191 }
192 }
193 }
194
195 }
196 @Override
197 public void mouseEntered(MouseEvent e) {
198
199 }
200 @Override
201 public void mouseExited(MouseEvent e) {
202 // TODO Auto-generated method stub
203
204 }
205 @Override
206 public void mousePressed(MouseEvent e) {
207 // TODO Auto-generated method stub
208
209 }
210 @Override
211 public void mouseReleased(MouseEvent e) {
212 // TODO Auto-generated method stub
213
214 }
215
216 /**
217 * Returns all ontology changes been done by repairing ontology.
218 */
219 public Set<OWLOntologyChange> getOntologyChanges() {
220 return ontologyChanges;
221 }
222
223 @Override
224 public void valueChanged(ListSelectionEvent arg0) {
225 // TODO Auto-generated method stub
226
227 }
228
229 }
230
231