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.BorderLayout;
024    import java.awt.GridLayout;
025    import java.awt.event.ActionListener;
026    import java.io.File;
027    
028    import javax.swing.Box;
029    import javax.swing.ButtonGroup;
030    import javax.swing.GroupLayout;
031    import javax.swing.JButton;
032    import javax.swing.JFileChooser;
033    import javax.swing.JLabel;
034    import javax.swing.JPanel;
035    import javax.swing.JRadioButton;
036    import javax.swing.JTextField;
037    import javax.swing.SwingConstants;
038    import javax.swing.border.TitledBorder;
039    import javax.swing.event.DocumentListener;
040    import javax.swing.filechooser.FileFilter;
041    
042    /**
043     * Wizard panel where radio buttons for choosing knowledge source type, button for browsing
044     * file system and textfields for inserting file name or SPARQL-URL are added.
045     * @author Lorenz Buehmann
046     *
047     */
048    public class KnowledgeSourcePanel extends JPanel{
049    
050            private static final long serialVersionUID = -3997200565180270088L;
051            private javax.swing.JTextField fileURL;
052            private JTextField sparqlURL;
053            private JButton browseButton;
054            private JButton connectButton;
055            
056    //      private JComboBox sparqlBox;
057            
058            private JPanel contentPanel;
059            
060            private JLabel owlMessage;
061            private JLabel sparqlMessage;
062            
063            private JRadioButton owl;
064            private JRadioButton sparql;
065            
066            
067            public KnowledgeSourcePanel() {
068    
069                    new LeftPanel(1);
070                    contentPanel = getContentPanel();
071                    
072                    setLayout(new java.awt.BorderLayout());
073                    
074                    add(contentPanel,BorderLayout.CENTER);
075    
076            }
077    
078            private JPanel getContentPanel() {
079    
080                    JPanel contentPanel1 = new JPanel();
081                    
082                    JPanel buttonPanel = new JPanel();
083                    ButtonGroup bg = new ButtonGroup();
084                    Box box = Box.createVerticalBox();
085                    owl = new JRadioButton("OWL", true);
086                    sparql = new JRadioButton("SPARQL");
087                    bg.add(owl);
088                    bg.add(sparql);
089                    box.add(owl);
090                    box.add(sparql);
091                    buttonPanel.add(box);
092                    
093                    JPanel owlPanel = new JPanel();
094                    GroupLayout layout = new GroupLayout(owlPanel);
095                    owlPanel.setLayout(layout);
096                    layout.setAutoCreateGaps(true);
097                    layout.setAutoCreateContainerGaps(true);
098                    owlPanel.setBorder(new TitledBorder("OWL"));
099                    owlMessage = new JLabel();
100                    owlMessage.setText("enter or browse OWL file");
101                    fileURL = new javax.swing.JTextField(60);
102                    browseButton = new javax.swing.JButton("browse");
103                    layout.setHorizontalGroup(layout.createSequentialGroup()
104                                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
105                                     .addComponent(fileURL)
106                                     .addComponent(owlMessage))
107                                .addComponent(browseButton));
108                    layout.linkSize(SwingConstants.HORIZONTAL, fileURL, owlMessage);
109    
110                    layout.setVerticalGroup(layout.createSequentialGroup()
111                                    .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
112                                            .addComponent(fileURL)
113                                            .addComponent(browseButton))
114          
115                                .addComponent(owlMessage));
116                    
117                    
118                    JPanel sparqlPanel = new JPanel();
119                    GroupLayout sparqlLayout = new GroupLayout(sparqlPanel);
120                    sparqlPanel.setLayout(sparqlLayout);
121                    sparqlLayout.setAutoCreateGaps(true);
122                    sparqlLayout.setAutoCreateContainerGaps(true);
123                    sparqlPanel.setBorder(new TitledBorder("SPARQL"));
124                    sparqlMessage = new JLabel();
125                    sparqlMessage.setText("enter SPARQL-URL and press connect");
126                    sparqlMessage.setVisible(false);
127                    sparqlURL = new JTextField(60);
128                    sparqlURL.setEnabled(false);
129                    
130    //              Vector<URL> model = new Vector<URL>();
131    //              for(SparqlEndpoint e : SparqlEndpoint.listEndpoints())
132    //                      model.add(e.getURL());
133    //              sparqlBox = new JComboBox(model);
134    //              sparqlBox.setEditable(false);
135    //              sparqlBox.setSelectedIndex(-1);
136    //              sparqlBox.setEnabled(false);
137    //              sparqlPanel.add(sparqlURL);
138                    connectButton = new javax.swing.JButton("connect");
139                    sparqlLayout.setHorizontalGroup(sparqlLayout.createSequentialGroup()
140                                .addGroup(sparqlLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
141                                     .addComponent(sparqlURL)
142                                     .addComponent(sparqlMessage))
143                                .addComponent(connectButton));
144                    sparqlLayout.linkSize(SwingConstants.HORIZONTAL, sparqlURL, sparqlMessage);
145    
146                    sparqlLayout.setVerticalGroup(sparqlLayout.createSequentialGroup()
147                                    .addGroup(sparqlLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
148                                            .addComponent(sparqlURL)
149                                            .addComponent(connectButton))
150          
151                                .addComponent(sparqlMessage));
152                    
153                    
154                    contentPanel1.setLayout(new GridLayout(0, 1));
155                    contentPanel1.add(buttonPanel);
156                    contentPanel1.add(owlPanel);
157                    contentPanel1.add(sparqlPanel);
158            
159                    
160    
161                    return contentPanel1;
162            }
163            
164            public void addListeners(ActionListener l, DocumentListener d) {
165                    browseButton.addActionListener(l);
166                    fileURL.addActionListener(l);
167                    sparqlURL.addActionListener(l);
168                    owl.addActionListener(l);
169                    sparql.addActionListener(l);
170                    fileURL.getDocument().addDocumentListener(d);
171        }
172            
173            
174            
175            public void openFileChooser(){
176                    JFileChooser filechooser = new JFileChooser();
177                    
178                    filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
179                    String choosenPath = fileURL.getText();
180                    if(!choosenPath.equals("") && (new File(choosenPath)).exists()){
181                            filechooser.setCurrentDirectory(new File(fileURL.getText()));
182                    }
183            
184                    filechooser.addChoosableFileFilter(new FileFilter() {
185                        @Override
186                            public boolean accept(File f) {
187                          if(f.isDirectory()){ 
188                              return true;
189                          }
190                          return f.getName().toLowerCase().endsWith(".owl");
191                        }
192                        @Override
193                            public String getDescription(){
194                            return "OWLs"; 
195                        }  
196                      });
197                    int status = filechooser.showOpenDialog(null);
198            
199            if (status == JFileChooser.APPROVE_OPTION){
200                    String strURL = filechooser.getSelectedFile().getAbsolutePath();
201                    fileURL.setText(strURL);
202            
203                
204               
205            } else{
206                System.out.println("Auswahl abgebrochen");
207            }
208            }
209            
210            public boolean isExistingOWLFile(){
211                    if(!fileURL.getText().equals("") && !getOWLFile().exists()){
212                            
213                            owlMessage.setText(fileURL.getText()+" does not exist");
214                            return false;
215                    }
216                    if(!fileURL.getText().equals("") && (getOWLFile().isDirectory() || (getOWLFile().isFile() && !getOWLFile().getPath().endsWith(".owl")))){
217                            System.err.println(getOWLFile().getPath());
218                            owlMessage.setText(fileURL.getText()+" is not a OWL file");
219                            return false;
220                    }
221                    if(fileURL.getText().equals("")){
222                            owlMessage.setText("enter or browse OWL file");
223                            return false;
224                    }
225                    if(getOWLFile().exists() && getOWLFile().getPath().endsWith(".owl")){
226                            owlMessage.setText("");
227                            return true;
228                    }
229                    return true;
230                    
231                    
232                    
233            }
234    
235            public File getOWLFile() {
236                    return new File(fileURL.getText());
237            }
238            
239            public void setFileURL(String fileURL){
240                    this.fileURL.setText(fileURL);
241            }
242            
243            public void setOWLMode(){
244                    fileURL.setEnabled(true);
245                    browseButton.setEnabled(true);
246                    owlMessage.setVisible(true);
247                    
248                    sparqlURL.setEnabled(false);
249                    connectButton.setEnabled(false);
250                    sparqlMessage.setVisible(false);
251    //              sparqlBox.setEditable(false);
252    //              sparqlBox.setEnabled(false);
253            
254            }
255            
256            public void setSPARQLMode(){
257                    fileURL.setEnabled(false);
258                    browseButton.setEnabled(false);
259                    owlMessage.setVisible(false);
260                    
261                    sparqlURL.setEnabled(true);
262                    connectButton.setEnabled(true);
263                    sparqlMessage.setVisible(true);
264    //              sparqlBox.setEnabled(true);
265    //              sparqlBox.setEditable(true);
266                    
267            }
268            
269            
270    }