/*FreeMind - A Program for creating and viewing Mindmaps
*Copyright (C) 2005 Christian Foltin <christianfoltin@users.sourceforge.net>
*See COPYING for Details
*
*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 2
*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, write to the Free Software
*Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package accessories.plugins;
import java.awt.Container;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.URL;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.swing.JFileChooser;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import freemind.extensions.ExportHook;
import freemind.extensions.ModeControllerHookAdapter;
import freemind.main.XMLParseException;
import freemind.modes.FreeMindFileDialog;
/**
* Applies an XSLT to the Document.xml file of MindManager(c) files.
*/
public class ImportMindmanagerFiles extends ModeControllerHookAdapter {
public ImportMindmanagerFiles() {
super();
}
public void startupMapHook() {
super.startupMapHook();
String type = "mmap";
Container component = getController().getFrame().getContentPane();
final ExportHook.ImageFilter filter = new ExportHook.ImageFilter(type, null /*
* No
* description
* so
* far
*/);
FreeMindFileDialog chooser = getController().getFileChooser(filter);
int returnVal = chooser.showOpenDialog(component);
if (returnVal != JFileChooser.APPROVE_OPTION) { // not ok pressed
return;
}
// |= Pressed O.K.
File chosenFile = chooser.getSelectedFile();
importMindmanagerFile(chosenFile);
}
private void importMindmanagerFile(File file) {
// from e455. Retrieving a Compressed File from a ZIP File
// http://javaalmanac.com/egs/java.util.zip/GetZip.html
try {
// Open the ZIP file
ZipInputStream in = new ZipInputStream(new FileInputStream(file));
while (in.available() != 0) {
ZipEntry entry = in.getNextEntry();
if (!entry.getName().equals("Document.xml")) {
continue;
}
// now apply the transformation:
// search for xslt file:
String xsltFileName = "accessories/mindmanager2mm.xsl";
URL xsltUrl = getResource(xsltFileName);
if (xsltUrl == null) {
logger.severe("Can't find " + xsltFileName
+ " as resource.");
throw new IllegalArgumentException("Can't find "
+ xsltFileName + " as resource.");
}
InputStream xsltFile = xsltUrl.openStream();
String xml = transForm(new StreamSource(in), xsltFile);
if (xml != null) {
// now start a new map with this string:
File tempFile = File
.createTempFile(
file.getName(),
freemind.main.FreeMindCommon.FREEMIND_FILE_EXTENSION,
file.getParentFile());
FileWriter fw = new FileWriter(tempFile);
fw.write(xml);
fw.close();
getController().load(tempFile);
}
break;
}
} catch (IOException e) {
freemind.main.Resources.getInstance().logException(e);
} catch (XMLParseException e) {
freemind.main.Resources.getInstance().logException(e);
}
}
public String transForm(Source xmlSource, InputStream xsltStream) {
Source xsltSource = new StreamSource(xsltStream);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
// create an instance of TransformerFactory
try {
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans = transFact.newTransformer(xsltSource);
trans.transform(xmlSource, result);
} catch (Exception e) {
freemind.main.Resources.getInstance().logException(e);
return null;
}
return writer.toString();
}
}