<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://freemind.sourceforge.net/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;feed=atom&amp;action=history</id>
		<title>User:Jiangxin/Patch load mm file with mmx file - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;action=history"/>
		<updated>2013-06-20T03:45:31Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=10755&amp;oldid=prev</id>
		<title>Jiangxin: remove spam.</title>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=10755&amp;oldid=prev"/>
				<updated>2009-02-14T06:02:47Z</updated>
		
		<summary type="html">&lt;p&gt;remove spam.&lt;/p&gt;
&lt;a href=&quot;http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=10755&amp;amp;oldid=7657&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Jiangxin</name></author>	</entry>

	<entry>
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7657&amp;oldid=prev</id>
		<title>Monluna: wow account,wow accounts,buy wow account,world warcraft account</title>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7657&amp;oldid=prev"/>
				<updated>2008-12-04T05:48:03Z</updated>
		
		<summary type="html">&lt;p&gt;wow account,wow accounts,buy wow account,world warcraft account&lt;/p&gt;
&lt;a href=&quot;http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=7657&amp;amp;oldid=7241&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Monluna</name></author>	</entry>

	<entry>
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7241&amp;oldid=prev</id>
		<title>Jiangxin: add signature and time</title>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7241&amp;oldid=prev"/>
				<updated>2007-03-15T09:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;add signature and time&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:26, 15 March 2007&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When I write the patch at 2005, I even don't know the basic knowledge of optimization of a XSLT. &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When I write the patch at 2005, I even don't know the basic knowledge of optimization of a XSLT. &amp;nbsp;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;*&amp;lt;s&amp;gt;Warning: this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!&amp;lt;/s&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;*&amp;lt;s&amp;gt;'''Java expert/FreeMind Funs, can you help me to make it usable.'''&amp;lt;/s&amp;gt; Thank you.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Last week when I feel it's time to upgrade to freemind 0.9, I overview and rewrite the xslt and the patch.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Last week when I feel it's time to upgrade to freemind 0.9, I overview and rewrite the xslt and the patch.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;s&amp;gt;Warning&lt;/del&gt;: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!&amp;lt;/s&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-- [[User&lt;/ins&gt;:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Jiangxin|Jiangxin]] 02:26&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;15 Mar 2007 (PDT)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;s&amp;gt;'''Java expert/FreeMind Funs&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;can you help me to make it usable.'''&amp;lt;/s&amp;gt; Thank you.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==the XSLT==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==the XSLT==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jiangxin</name></author>	</entry>

	<entry>
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4322&amp;oldid=prev</id>
		<title>Jiangxin: fixed low performance xslt</title>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4322&amp;oldid=prev"/>
				<updated>2007-03-15T09:18:50Z</updated>
		
		<summary type="html">&lt;p&gt;fixed low performance xslt&lt;/p&gt;
&lt;a href=&quot;http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=4322&amp;amp;oldid=4321&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Jiangxin</name></author>	</entry>

	<entry>
		<id>http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4321&amp;oldid=prev</id>
		<title>Jiangxin: initial</title>
		<link rel="alternate" type="text/html" href="http://freemind.sourceforge.net/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4321&amp;oldid=prev"/>
				<updated>2006-04-06T17:48:45Z</updated>
		
		<summary type="html">&lt;p&gt;initial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==What is .mmx file?==&lt;br /&gt;
.mmx file has the same file structure as FreeMind .mm file, but It only contains the unnecessary and frequently changed attributes. This file is '''NOT''' suitable for version control system.&lt;br /&gt;
&lt;br /&gt;
How the file is generated? Please see this link: [[User:Jiangxin/Patch_save_extra_attributes_outof_mmfile]].&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
'''Warning: this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!'''&lt;br /&gt;
&lt;br /&gt;
'''Java expert/FreeMind Funs, can you help me to make it usable.''' Thank you.&lt;br /&gt;
&lt;br /&gt;
===the XSLT===&lt;br /&gt;
My implementation is using a XSLT file to join the .mmx file with .mm file in runtime. The XSLT is below:&lt;br /&gt;
* file : ''freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt''&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
	xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
		indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:param name=&amp;quot;mmx_file&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;map&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;map&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
		&amp;lt;/map&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;node&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;mmx_node&amp;quot; select=&amp;quot;document($mmx_file)&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;$mmx_node//node[@ID=current()/@ID]&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:when test=&amp;quot;local-name(.) = 'FOLDED'&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:copy-of&lt;br /&gt;
						select=&amp;quot;$mmx_node//node[@ID=current()/@ID]/@*&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
	  &amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problem 1: too slow ===&lt;br /&gt;
But is is very slow if .mm file and .mmx is as big as 200KB. I test my file using xsltproc like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ time xsltproc --stringparam mmx_file subject-forum.mmx freemind_join_mm_mmx.xslt subject-forum.mm &amp;gt; jx.mm&lt;br /&gt;
&lt;br /&gt;
real    4m33.148s&lt;br /&gt;
user    4m30.093s&lt;br /&gt;
sys     0m0.015s&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problem 2: memery killer ===&lt;br /&gt;
load without .mmx file, only 40MB memery usage. But if load .mm file with .mmx file, 80MB maybe. It terrible, where is Java GC? Just a tale of sun. (Sorry, I am not familiar with Java.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My Immature Patch ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Index: freemind/freemind/modes/mindmapmode/MindMapMapModel.java&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/freemind/modes/mindmapmode/MindMapMapModel.java	(.../tags/RELEASE-0-8-0)	(revision 2)&lt;br /&gt;
+++ freemind/freemind/modes/mindmapmode/MindMapMapModel.java	(.../branches/WHFM-0-8-0)	(working copy)&lt;br /&gt;
@@ -519,21 +562,37 @@&lt;br /&gt;
         }&lt;br /&gt;
         // the resulting file is accessed by the reader:&lt;br /&gt;
         Reader reader = null;&lt;br /&gt;
-        if (mapStart.equals(expectedStartString)&lt;br /&gt;
-                || mapStart.equals(expectedAlternativeStartString)) {&lt;br /&gt;
-            // actual version:&lt;br /&gt;
-            reader = getActualReader(file);&lt;br /&gt;
-        } else {&lt;br /&gt;
+        // join .mmx with .mm file&lt;br /&gt;
+        reader = getActualReader(file);&lt;br /&gt;
+&lt;br /&gt;
+        if (! mapStart.equals(expectedStartString)&lt;br /&gt;
+                &amp;amp;&amp;amp; ! mapStart.equals(expectedAlternativeStartString)) {&lt;br /&gt;
             // older version:&lt;br /&gt;
-            reader = getUpdateReader(file);&lt;br /&gt;
+            reader = getUpdateReader(reader, file.getName());&lt;br /&gt;
         }&lt;br /&gt;
         try {&lt;br /&gt;
             mapElement.parseFromReader(reader);&lt;br /&gt;
@@ -573,14 +602,15 @@&lt;br /&gt;
 &lt;br /&gt;
     /** Creates a reader that pipes the input file through a XSLT-Script that&lt;br /&gt;
      *  updates the version to the current.&lt;br /&gt;
-     * @param file&lt;br /&gt;
+     * @param reader&lt;br /&gt;
+     * @param filename&lt;br /&gt;
      * @return &lt;br /&gt;
      * @throws IOException&lt;br /&gt;
      */&lt;br /&gt;
-    private Reader getUpdateReader(File file) throws IOException {&lt;br /&gt;
+    private Reader getUpdateReader(Reader reader, String filename) throws IOException {&lt;br /&gt;
         StringWriter writer = null;&lt;br /&gt;
         InputStream inputStream = null;&lt;br /&gt;
-        logger.info(&amp;quot;Updating the file &amp;quot;+file.getName()+&amp;quot; to the current version.&amp;quot;);&lt;br /&gt;
+        logger.info(&amp;quot;Updating the file &amp;quot;+filename+&amp;quot; to the current version.&amp;quot;);&lt;br /&gt;
         try{&lt;br /&gt;
             // try to convert map with xslt:&lt;br /&gt;
             URL updaterUrl=null;&lt;br /&gt;
@@ -598,12 +629,12 @@&lt;br /&gt;
             // create an instance of TransformerFactory&lt;br /&gt;
             TransformerFactory transFact = TransformerFactory.newInstance();&lt;br /&gt;
             Transformer trans = transFact.newTransformer(xsltSource);&lt;br /&gt;
-            trans.transform(new StreamSource(file), result);&lt;br /&gt;
-            logger.info(&amp;quot;Updating the file &amp;quot;+file.getName()+&amp;quot; to the current version. Done.&amp;quot;);&lt;br /&gt;
+            trans.transform(new StreamSource(reader), result);&lt;br /&gt;
+            logger.info(&amp;quot;Updating the file &amp;quot;+filename+&amp;quot; to the current version. Done.&amp;quot;);&lt;br /&gt;
         } catch(Exception ex) {&lt;br /&gt;
             ex.printStackTrace();&lt;br /&gt;
             // exception: we take the file itself:&lt;br /&gt;
-            return getActualReader(file);&lt;br /&gt;
+            return reader;&lt;br /&gt;
         } finally {&lt;br /&gt;
             if(inputStream!= null) {&lt;br /&gt;
                 inputStream.close();&lt;br /&gt;
@@ -618,12 +649,99 @@&lt;br /&gt;
     /** Creates a default reader that just reads the given file.&lt;br /&gt;
      * @param file&lt;br /&gt;
      * @return&lt;br /&gt;
-     * @throws FileNotFoundException&lt;br /&gt;
+     * @throws IOException &lt;br /&gt;
      */&lt;br /&gt;
-    private Reader getActualReader(File file) throws FileNotFoundException {&lt;br /&gt;
-        return new BufferedReader(new FileReader(file));&lt;br /&gt;
+    private Reader getActualReaderXml(File file) throws IOException {&lt;br /&gt;
+        try&lt;br /&gt;
+        {&lt;br /&gt;
+            TransformerFactory tf = TransformerFactory.newInstance();&lt;br /&gt;
+            Transformer transformer = tf.newTransformer();&lt;br /&gt;
+            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();&lt;br /&gt;
+            DocumentBuilder domBuilder = domFactory.newDocumentBuilder();&lt;br /&gt;
+&lt;br /&gt;
+            Document doc = domBuilder.parse(file);&lt;br /&gt;
+            Source src = new DOMSource(doc);&lt;br /&gt;
+            StringWriter buffwriter = new StringWriter();&lt;br /&gt;
+            StreamResult result = new StreamResult(buffwriter);&lt;br /&gt;
+            transformer.transform(src, result);&lt;br /&gt;
+&lt;br /&gt;
+            return new StringReader(buffwriter.toString());&lt;br /&gt;
+        }&lt;br /&gt;
+        catch(Exception exp)&lt;br /&gt;
+        {&lt;br /&gt;
+        	exp.printStackTrace();&lt;br /&gt;
+        }&lt;br /&gt;
+&lt;br /&gt;
+        return new BufferedReader(new FileReader(file));    	&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
+    private Reader getActualReader(File file) throws IOException {&lt;br /&gt;
+        // load .mmx file...&lt;br /&gt;
+        String ext = Tools.getExtension(file.getName());&lt;br /&gt;
+        String mmxFileName = &amp;quot;&amp;quot;;&lt;br /&gt;
+&lt;br /&gt;
+        if(!ext.equals(&amp;quot;mm&amp;quot;)) &lt;br /&gt;
+        {&lt;br /&gt;
+        	mmxFileName = file.getName()+&amp;quot;.mmx&amp;quot;;&lt;br /&gt;
+        }&lt;br /&gt;
+        else &lt;br /&gt;
+        {&lt;br /&gt;
+        	mmxFileName = Tools.removeExtension(file.getName()) + &amp;quot;.mmx&amp;quot;;&lt;br /&gt;
+        }&lt;br /&gt;
+        File mmxfile = new File(file.getParent(), mmxFileName);&lt;br /&gt;
+        &lt;br /&gt;
+        if (!mmxfile.exists())&lt;br /&gt;
+        {&lt;br /&gt;
+        	return getActualReaderXml(file);&lt;br /&gt;
+        }&lt;br /&gt;
+&lt;br /&gt;
+        URL updaterUrl = null;&lt;br /&gt;
+        InputStream inputStream = null;&lt;br /&gt;
+        Source xsltSource = null;&lt;br /&gt;
+        StringWriter buffwriter = null;&lt;br /&gt;
+        Result result = null;&lt;br /&gt;
+        TransformerFactory tf = null;&lt;br /&gt;
+        Transformer transformer = null;&lt;br /&gt;
+        String mmxFileFullName = file.getParent() + &amp;quot;/&amp;quot; + mmxFileName;&lt;br /&gt;
+        try {&lt;br /&gt;
+            // try to convert map with xslt:&lt;br /&gt;
+            updaterUrl = getFrame().getResource(&lt;br /&gt;
+                    &amp;quot;freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt&amp;quot;);&lt;br /&gt;
+            if (updaterUrl == null) {&lt;br /&gt;
+                throw new IllegalArgumentException(&lt;br /&gt;
+                        &amp;quot;freemind_join_mm_mmx.xslt not found.&amp;quot;);&lt;br /&gt;
+            }&lt;br /&gt;
+            inputStream = updaterUrl.openStream();&lt;br /&gt;
+            xsltSource = new StreamSource(inputStream);&lt;br /&gt;
+            // get output:&lt;br /&gt;
+            buffwriter = new StringWriter();&lt;br /&gt;
+            result = new StreamResult(buffwriter);&lt;br /&gt;
+            // create an instance of TransformerFactory&lt;br /&gt;
+            tf = TransformerFactory.newInstance();&lt;br /&gt;
+            transformer = tf.newTransformer(xsltSource);&lt;br /&gt;
+            transformer.setParameter(&amp;quot;mmx_file&amp;quot;, mmxFileFullName);&lt;br /&gt;
+            transformer.transform(new StreamSource(file), result);&lt;br /&gt;
+&lt;br /&gt;
+        } catch (Exception ex) {&lt;br /&gt;
+            ex.printStackTrace();&lt;br /&gt;
+            // exception: we take the file itself:&lt;br /&gt;
+            return getActualReaderXml(file);&lt;br /&gt;
+        } finally {&lt;br /&gt;
+            if (inputStream != null) {&lt;br /&gt;
+                inputStream.close();&lt;br /&gt;
+            }&lt;br /&gt;
+            if (buffwriter != null) {&lt;br /&gt;
+                buffwriter.close();&lt;br /&gt;
+            }&lt;br /&gt;
+            inputStream = null;&lt;br /&gt;
+            xsltSource = null;&lt;br /&gt;
+            updaterUrl = null;&lt;br /&gt;
+            result = null;&lt;br /&gt;
+            transformer = null;&lt;br /&gt;
+            tf = null;&lt;br /&gt;
+        }&lt;br /&gt;
+        return new StringReader(buffwriter.getBuffer().toString());    }&lt;br /&gt;
+&lt;br /&gt;
     //&lt;br /&gt;
     // cut'n'paste&lt;br /&gt;
     //&lt;br /&gt;
Index: freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt	(.../tags/RELEASE-0-8-0)	(revision 0)&lt;br /&gt;
+++ freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt	(.../branches/WHFM-0-8-0)	(revision 28)&lt;br /&gt;
@@ -0,0 +1,45 @@&lt;br /&gt;
+&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
+	xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
+		indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:param name=&amp;quot;mmx_file&amp;quot; /&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;map&amp;quot;&amp;gt;&lt;br /&gt;
+		&amp;lt;map&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
+		&amp;lt;/map&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;node&amp;quot;&amp;gt;&lt;br /&gt;
+		&amp;lt;xsl:param name=&amp;quot;mmx_node&amp;quot; select=&amp;quot;document($mmx_file)&amp;quot; /&amp;gt;&lt;br /&gt;
+		&amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
+				&amp;lt;xsl:when test=&amp;quot;$mmx_node//node[@ID=current()/@ID]&amp;quot;&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
+							&amp;lt;xsl:when test=&amp;quot;local-name(.) = 'FOLDED'&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
+							&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
+								&amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
+							&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
+						&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
+					&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:copy-of&lt;br /&gt;
+						select=&amp;quot;$mmx_node//node[@ID=current()/@ID]/@*&amp;quot; /&amp;gt;&lt;br /&gt;
+				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
+				&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
+				&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
+			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
+		&amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
+	  &amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Index: freemind/build.xml&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/build.xml	(.../tags/RELEASE-0-8-0)	(revision 2)&lt;br /&gt;
+++ freemind/build.xml	(.../branches/WHFM-0-8-0)	(working copy)&lt;br /&gt;
@@ -284,6 +284,7 @@&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;Resources*&amp;quot;/&amp;gt;&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;mindmap_menus.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;**/freemind_version_updater.xslt&amp;quot;/&amp;gt;&lt;br /&gt;
+				&amp;lt;include name=&amp;quot;**/freemind_join_mm_mmx.xslt&amp;quot;/&amp;gt;&lt;br /&gt;
 			&amp;lt;/fileset&amp;gt;&lt;br /&gt;
 		&amp;lt;/jar&amp;gt;&lt;br /&gt;
 	&amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jiangxin</name></author>	</entry>

	</feed>