001    /**
002     * Copyright (C) 2007-2009, 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    package org.dllearner.tools.protege;
021    
022    import java.awt.event.MouseEvent;
023    import java.awt.event.MouseListener;
024    import java.awt.event.MouseMotionListener;
025    import java.beans.PropertyChangeEvent;
026    import java.beans.PropertyChangeListener;
027    import java.util.Set;
028    import java.util.Vector;
029    
030    import javax.swing.JComboBox;
031    import javax.swing.plaf.basic.BasicComboPopup;
032    
033    import org.dllearner.core.EvaluatedDescription;
034    import org.dllearner.core.owl.Individual;
035    import org.dllearner.learningproblems.EvaluatedDescriptionClass;
036    
037    /**
038     * This class takes care of all events happening in the GraphicalCoveragePanel.
039     * 
040     * @author Christian Koetteritzsch
041     * 
042     */
043    public class GraphicalCoveragePanelHandler implements MouseMotionListener,
044                    MouseListener, PropertyChangeListener {
045    
046            private final GraphicalCoveragePanel panel;
047            private final EvaluatedDescription description;
048            private final DLLearnerModel model;
049            private BasicComboPopup scrollPopup;
050            private final Vector<String> individualComboBox;
051            private JComboBox indiBox;
052    
053            /**
054             * This is the constructor for the handler.
055             * 
056             * @param p
057             *            GraphicalCoveragePanel
058             * @param eval
059             *            EvaluatedDescription
060             * @param m
061             *            DLLearnerModel
062             */
063            public GraphicalCoveragePanelHandler(GraphicalCoveragePanel p,
064                            EvaluatedDescription eval, DLLearnerModel m) {
065                    this.panel = p;
066                    description = eval;
067                    model = m;
068                    individualComboBox = new Vector<String>();
069    
070            }
071    
072            @Override
073            public void mouseDragged(MouseEvent arg0) {
074                    // TODO Auto-generated method stub
075    
076            }
077    
078            @Override
079            public void mouseMoved(MouseEvent m) {
080                    panel.getMoreDetailForSuggestedConceptsPanel().repaint();
081                    if (m.getX() >= panel.getX1() + panel.getShiftCovered()
082                                    && m.getX() <= panel.getX2() + panel.getShiftCovered()
083                                    && m.getY() >= panel.getY1() && m.getY() <= panel.getY2()
084                                    || m.getX() >= panel.getX1() + panel.getShiftNewConcept()
085                                    && m.getX() <= panel.getX2() + panel.getShiftNewConcept()
086                                    && m.getY() >= panel.getY1() && m.getY() <= panel.getY2()
087                                    || m.getX() >= panel.getX1() + panel.getShiftNewConceptX()
088                                    && m.getX() <= panel.getX2() + panel.getShiftNewConceptX()
089                                    && m.getY() >= panel.getY1() + panel.getShiftNewConcept()
090                                    && m.getY() <= panel.getY2() + panel.getShiftNewConcept()
091                                    || m.getX() >= panel.getX1() - panel.getShiftOldConcept()
092                                    && m.getX() <= panel.getX2() - panel.getShiftOldConcept()
093                                    && m.getY() >= panel.getY1() && m.getY() <= panel.getY2()) {
094                            panel.getGraphicalCoveragePanel().setToolTipText(
095                                            "To view all Individuals please click on the plus");
096                    }
097    
098                    Vector<IndividualPoint> v = panel.getIndividualVector();
099                    for (int i = 0; i < v.size(); i++) {
100                            if (v.get(i).getXAxis() >= m.getX() - 5
101                                            && v.get(i).getXAxis() <= m.getX() + 5
102                                            && v.get(i).getYAxis() >= m.getY() - 5
103                                            && v.get(i).getYAxis() <= m.getY() + 5) {
104                                    panel.getGraphicalCoveragePanel().setToolTipText(
105                                                    v.get(i).getIndividualName());
106                            }
107                    }
108            }
109    
110            @Override
111            public void propertyChange(PropertyChangeEvent arg0) {
112                    panel.getMoreDetailForSuggestedConceptsPanel().repaint();
113                    panel.repaint();
114            }
115    
116            @Override
117            public void mouseClicked(MouseEvent arg0) {
118                    if (panel.getEvaluateddescription() != null) {
119                            if (arg0.getX() >= panel.getX1() + panel.getShiftCovered()
120                                            && arg0.getX() <= panel.getX2() + panel.getShiftCovered()
121                                            && arg0.getY() >= panel.getY1()
122                                            && arg0.getY() <= panel.getY2()) {
123    
124                                    // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
125                                    individualComboBox.clear();
126    
127                                    Set<Individual> covInd = ((EvaluatedDescriptionClass) description)
128                                                    .getCoveredInstances();
129                                    int i = covInd.size();
130                                    if (i > 0) {
131                                            for (Individual ind : covInd) {
132                                                    Set<String> uriString = model.getOntologyURIString();
133                                                    for(String uri : uriString) {
134                                                            if(ind.toString().contains(uri)) {
135                                                                    individualComboBox.add(ind.toManchesterSyntaxString(uri, null));
136                                                            }
137                                                    }
138                                            }
139                                            indiBox = new JComboBox(individualComboBox);
140                                            scrollPopup = new BasicComboPopup(indiBox);
141                                            scrollPopup.setAutoscrolls(true);
142                                            scrollPopup.show(panel, arg0.getX(), arg0.getY());
143                                            // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
144                                    }
145                            }
146    
147                            if (arg0.getX() >= panel.getX1() + panel.getShiftNewConcept()
148                                            && arg0.getX() <= panel.getX2()
149                                                            + panel.getShiftNewConcept()
150                                            && arg0.getY() >= panel.getY1()
151                                            && arg0.getY() <= panel.getY2()
152                                            || arg0.getX() >= panel.getX1()
153                                                            + panel.getShiftNewConceptX()
154                                            && arg0.getX() <= panel.getX2()
155                                                            + panel.getShiftNewConceptX()
156                                            && arg0.getY() >= panel.getY1()
157                                                            + panel.getShiftNewConcept()
158                                            && arg0.getY() <= panel.getY2()
159                                                            + panel.getShiftNewConcept()) {
160    
161                                    // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
162                                    individualComboBox.clear();
163                                    Set<Individual> addInd = ((EvaluatedDescriptionClass) description)
164                                                    .getAdditionalInstances();
165                                    int i = addInd.size();
166                                    if (i > 0) {
167                                            for (Individual ind : addInd) {
168                                                    Set<String> uriString = model.getOntologyURIString();
169                                                    for(String uri : uriString) {
170                                                            if(ind.toString().contains(uri)) {
171                                                                    individualComboBox.add(ind.toManchesterSyntaxString(uri, null));
172                                                            }
173                                                    }
174                                            }
175                                            indiBox = new JComboBox(individualComboBox);
176                                            scrollPopup = new BasicComboPopup(indiBox);
177                                            scrollPopup.setAutoscrolls(true);
178                                            scrollPopup.show(panel, arg0.getX(), arg0.getY());
179                                            // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
180                                    }
181                            }
182    
183                            if (arg0.getX() >= panel.getX1() - panel.getShiftOldConcept()
184                                            && arg0.getX() <= panel.getX2()
185                                                            - panel.getShiftOldConcept()
186                                            && arg0.getY() >= panel.getY1()
187                                            && arg0.getY() <= panel.getY2()) {
188    
189                                    // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
190                                    individualComboBox.clear();
191                                    Set<Individual> notCovInd = model.getReasoner().getIndividuals(
192                                                    model.getCurrentConcept());
193                                    notCovInd.removeAll(((EvaluatedDescriptionClass) description)
194                                                    .getCoveredInstances());
195                                    int i = notCovInd.size();
196                                    if (i > 0) {
197                                            for (Individual ind : notCovInd) {
198                                                    Set<String> uriString = model.getOntologyURIString();
199                                                    for(String uri : uriString) {
200                                                            if(ind.toString().contains(uri)) {
201                                                                    individualComboBox.add(ind.toManchesterSyntaxString(uri, null));
202                                                            }
203                                                    }
204                                            }
205                                            indiBox = new JComboBox(individualComboBox);
206                                            scrollPopup = new BasicComboPopup(indiBox);
207                                            scrollPopup.setAutoscrolls(true);
208                                            scrollPopup.show(panel, arg0.getX(), arg0.getY());
209                                            // panel.getMoreDetailForSuggestedConceptsPanel().repaint();
210                                    }
211                            }
212                    }
213            }
214    
215            @Override
216            public void mouseEntered(MouseEvent arg0) {
217                    // TODO Auto-generated method stub
218    
219            }
220    
221            @Override
222            public void mouseExited(MouseEvent arg0) {
223                    // TODO Auto-generated method stub
224    
225            }
226    
227            @Override
228            public void mousePressed(MouseEvent arg0) {
229                    // TODO Auto-generated method stub
230    
231            }
232    
233            @Override
234            public void mouseReleased(MouseEvent arg0) {
235                    // TODO Auto-generated method stub
236    
237            }
238    
239    }