Java tutorial
/* * Zettelkasten - nach Luhmann ** Copyright (C) 2001-2014 by Daniel Ldecke (http://www.danielluedecke.de) * * Homepage: http://zettelkasten.danielluedecke.de * * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; * if not, see <http://www.gnu.org/licenses/>. * * * Dieses Programm ist freie Software. Sie knnen es unter den Bedingungen der GNU * General Public License, wie von der Free Software Foundation verffentlicht, weitergeben * und/oder modifizieren, entweder gem Version 3 der Lizenz oder (wenn Sie mchten) * jeder spteren Version. * * Die Verffentlichung dieses Programms erfolgt in der Hoffnung, da es Ihnen von Nutzen sein * wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder * der VERWENDBARKEIT FR EINEN BESTIMMTEN ZWECK. Details finden Sie in der * GNU General Public License. * * Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm * erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>. */ package de.danielluedecke.zettelkasten.tasks; import de.danielluedecke.zettelkasten.database.BibTex; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.logging.Level; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.jdom2.Document; import org.jdom2.JDOMException; import org.jdom2.input.SAXBuilder; import de.danielluedecke.zettelkasten.database.Bookmarks; import de.danielluedecke.zettelkasten.util.Constants; import de.danielluedecke.zettelkasten.database.Daten; import de.danielluedecke.zettelkasten.database.DesktopData; import de.danielluedecke.zettelkasten.database.SearchRequests; import de.danielluedecke.zettelkasten.database.Settings; import de.danielluedecke.zettelkasten.database.Synonyms; /** * * @author danielludecke */ public class LoadFileTask extends org.jdesktop.application.Task<Object, Void> { /** * Daten object, which contains the XML data of the Zettelkasten */ private Daten dataObj; /** * CBookmark object, which contains the XML data of the entries' bookmarks */ private Bookmarks bookmarkObj; /** * CBookmark object, which contains the XML data of the entries' bookmarks */ private Synonyms synonymsObj; /** * DesktopData object, which contains the XML data of the desktop */ private DesktopData desktopObj; /** * Settings object, which contains the setting, for instance the file paths etc... */ private Settings settingsObj; private BibTex bibtexObj; /** * SearchRequests object, which contains the XML data of the searchrequests and -result * that are related with this data file */ private SearchRequests searchrequestsObj; private javax.swing.JDialog parentDialog; private javax.swing.JLabel msgLabel; /** * get the strings for file descriptions from the resource map */ private org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application .getInstance(de.danielluedecke.zettelkasten.ZettelkastenApp.class).getContext() .getResourceMap(LoadFileTask.class); /** * * @param app * @param parent * @param label * @param d * @param bm * @param sr * @param dk * @param s */ LoadFileTask(org.jdesktop.application.Application app, javax.swing.JDialog parent, javax.swing.JLabel label, Daten d, Bookmarks bm, SearchRequests sr, DesktopData dk, Synonyms sy, Settings s, BibTex bib) { // Runs on the EDT. Copy GUI state that // doInBackground() depends on from parameters // to ImportFileTask fields, here. super(app); dataObj = d; bibtexObj = bib; bookmarkObj = bm; synonymsObj = sy; searchrequestsObj = sr; desktopObj = dk; settingsObj = s; parentDialog = parent; msgLabel = label; // init status text msgLabel.setText(resourceMap.getString("msg1")); } @Override protected Object doInBackground() { // Your Task's code here. This method runs // on a background thread, so don't reference // the Swing GUI from here. // prevent task from processing when the file path is incorrect // init status text msgLabel.setText(resourceMap.getString("msg1")); // get the file path from the data file which has to be opened File fp = settingsObj.getFilePath(); // if no file exists, exit task if (null == fp || !fp.exists()) { // log error Constants.zknlogger.log(Level.WARNING, "Filepath is null or does not exist!"); return null; } try { // reset the zettelkasten-data-files dataObj.initZettelkasten(); desktopObj.clear(); bookmarkObj.clear(); searchrequestsObj.clear(); // log file path Constants.zknlogger.log(Level.INFO, "Opening file {0}", fp.toString()); // it looks like the SAXBuilder is closing an input stream. So we have to // re-open the ZIP-file each time we want to retrieve an XML-file from it // this is necessary, because we want tot retrieve the zipped xml-files // *without* temporarily saving them to harddisk for (int cnt = 0; cnt < dataObj.getFilesToLoadCount(); cnt++) { // show status text switch (cnt) { case 0: case 1: msgLabel.setText(resourceMap.getString("msg1")); break; case 2: msgLabel.setText(resourceMap.getString("msg2")); break; case 3: msgLabel.setText(resourceMap.getString("msg3")); break; case 4: msgLabel.setText(resourceMap.getString("msg4")); break; case 5: msgLabel.setText(resourceMap.getString("msg5")); break; case 6: case 7: msgLabel.setText(resourceMap.getString("msg6")); break; default: msgLabel.setText(resourceMap.getString("msg1")); break; } // open the zip-file ZipInputStream zip = new ZipInputStream(new FileInputStream(fp)); ZipEntry entry; // now iterate the zip-file, searching for the requested file in it while ((entry = zip.getNextEntry()) != null) { // get filename of zip-entry String entryname = entry.getName(); // if the found file matches the requested one, start the SAXBuilder if (entryname.equals(dataObj.getFileToLoad(cnt))) { if (entryname.equals(Constants.bibTexFileName)) { bibtexObj.openFile(zip, "UTF-8"); Constants.zknlogger.log(Level.INFO, "{0} data successfully opened.", entryname); zip.close(); break; } else { try { SAXBuilder builder = new SAXBuilder(); // Document doc = new Document(); Document doc = builder.build(zip); // compare, which file we have retrieved, so we store the data // correctly on our data-object if (entryname.equals(Constants.metainfFileName)) dataObj.setMetaInformationData(doc); if (entryname.equals(Constants.zknFileName)) dataObj.setZknData(doc); if (entryname.equals(Constants.authorFileName)) dataObj.setAuthorData(doc); if (entryname.equals(Constants.keywordFileName)) dataObj.setKeywordData(doc); if (entryname.equals(Constants.bookmarksFileName)) bookmarkObj.setBookmarkData(doc); if (entryname.equals(Constants.searchrequestsFileName)) searchrequestsObj.setSearchData(doc); if (entryname.equals(Constants.desktopFileName)) desktopObj.setDesktopData(doc); if (entryname.equals(Constants.desktopModifiedEntriesFileName)) desktopObj.setDesktopModifiedEntriesData(doc); if (entryname.equals(Constants.desktopNotesFileName)) desktopObj.setDesktopNotesData(doc); if (entryname.equals(Constants.synonymsFileName)) synonymsObj.setDocument(doc); // tell about success Constants.zknlogger.log(Level.INFO, "{0} data successfully opened.", entryname); break; } catch (JDOMException e) { Constants.zknlogger.log(Level.SEVERE, e.getLocalizedMessage()); } } } } zip.close(); } // tell about success Constants.zknlogger.log(Level.INFO, "Complete data file successfully opened."); } catch (IOException e) { Constants.zknlogger.log(Level.SEVERE, e.getLocalizedMessage()); } return null; // return your result } @Override protected void succeeded(Object result) { // Runs on the EDT. Update the GUI based on // the result computed by doInBackground(). // after opening a new file, set modified state to false dataObj.setModified(false); dataObj.setMetaModified(false); searchrequestsObj.setModified(false); desktopObj.setModified(false); bookmarkObj.setModified(false); synonymsObj.setModified(false); bibtexObj.setModified(false); } @Override protected void finished() { super.finished(); // and close window parentDialog.dispose(); parentDialog.setVisible(false); // tell about success Constants.zknlogger.log(Level.INFO, "Opening data file successfully finished."); } }