root/10040_join_mm_with_mmx.patch @ 55:8b22aecab4d9

Revision 55:8b22aecab4d9, 9.2 KB (checked in by Jiang Xin <worldhello.net AT gmail DOT com>, 3 years ago)

See #16: Refresh MQ patches for FreeMind 0.9.0 RC1.

  • MANIFEST.MF

    diff -r e4a92f133383 MANIFEST.MF
    a b  
    99  bindings.jar 
    1010                          SimplyHTML/gnu-regexp-1.1.4.jar 
    1111  SimplyHTML/SimplyHTML.jar 
     12  saxon.jar 
    1213Created-By: Joerg Mueller 
    1314 
  • build.xml

    diff -r e4a92f133383 build.xml
    a b  
    4747                <classpath path="${jibxlibs}"/> 
    4848        </taskdef> 
    4949 
    50         <property name="classpath" value="${jibxruntimelibs}:${jibxjar}:lib/commons-lang-2.0.jar:lib/forms-1.0.5.jar:lib/SimplyHTML/SimplyHTML.jar"/> 
     50        <property name="classpath" value="${jibxruntimelibs}:${jibxjar}:lib/commons-lang-2.0.jar:lib/forms-1.0.5.jar:lib/SimplyHTML/SimplyHTML.jar:lib/saxon.jar"/> 
    5151 
    5252          <target name="xmlbind.checkStatusOfGeneration"> 
    5353            <uptodate property="xmlbind.isUpToDate" 
     
    170170                                <include name="commons-lang-2.0.jar"/> 
    171171                                <include name="forms-1.0.5.jar"/> 
    172172                                <include name="bindings.jar"/> 
     173                                <include name="saxon.jar"/> 
    173174                                <include name="jibx/jibx-run.jar"/> 
    174175                                <include name="jibx/xpp3.jar"/> 
    175176                                <include name="SimplyHTML/gnu-regexp-1.1.4.jar"/> 
     
    340341                                <include name="Resources*"/> 
    341342                                <include name="mindmap_menus.xml"/> 
    342343                                <include name="**/freemind_version_updater.xslt"/> 
     344                                <include name="**/freemind_join_mm_mmx.xslt"/> 
    343345                        </fileset> 
    344346                </jar> 
    345347        </target> 
  • freemind.bat

    diff -r e4a92f133383 freemind.bat
    a b  
    11@echo off 
    2 java -cp lib\freemind.jar;lib\commons-lang-2.0.jar;lib\forms-1.0.5.jar;lib\jibx\jibx-run.jar;lib\jibx\xpp3.jar;lib\bindings.jar freemind.main.FreeMindStarter 
     2java -cp lib\freemind.jar;lib\commons-lang-2.0.jar;lib\forms-1.0.5.jar;lib\jibx\jibx-run.jar;lib\jibx\xpp3.jar;lib\bindings.jar;lib\saxon.jar freemind.main.FreeMindStarter 
  • freemind.sh

    diff -r e4a92f133383 freemind.sh
    a b  
    199199${freedir}/lib/bindings.jar:\ 
    200200${freedir}/lib/commons-lang-2.0.jar:\ 
    201201${freedir}/lib/forms-1.0.5.jar:\ 
     202${freedir}/lib/saxon.jar:\ 
    202203${freedir}" 
    203204if [ "${JAVA_TYPE}" = "sun" ] 
    204205then 
  • freemind/main/Tools.java

    diff -r e4a92f133383 freemind/main/Tools.java
    a b  
    9090import freemind.modes.MindMapNode; 
    9191import freemind.view.mindmapview.NodeView; 
    9292 
     93//OSSXP.COM: classes for .mm and .mmx join. 
     94import javax.xml.parsers.DocumentBuilder; 
     95import javax.xml.parsers.DocumentBuilderFactory; 
     96import javax.xml.transform.dom.DOMSource; 
     97import org.w3c.dom.Document; 
     98 
    9399/** 
    94100 * @author foltin 
    95101 * 
     
    988994                    return new StringReader(writer.getBuffer().toString()); 
    989995            } 
    990996            else{ 
    991                 return getActualReader(file); 
     997                // OSSXP.COM 
     998                return getActualReader(file, frame); 
    992999            } 
    9931000        } 
    994         /** Creates a default reader that just reads the given file. 
    995          * @throws FileNotFoundException 
     1001        /* 
     1002         * OSSXP.COM: hacked FreeMind saved two seperate files, .mm and .mmx file. 
     1003         * Join them in runtime using XSLT TransformerFactory. 
     1004         * TODO: Improvement needed. the joining stage may very slow, so disable it. 
     1005 
    9961006         */ 
    997         public static Reader getActualReader(File file) throws FileNotFoundException { 
     1007        public static Reader getActualReader(File file, FreeMindMain frame) throws IOException { 
     1008            if (!Resources.getInstance().getBoolProperty("wh_save_extra_attrs_in_aux_file")) 
     1009            { 
     1010                return getActualReaderXml(file); 
     1011            } 
     1012            // load .mmx file... 
     1013            String ext = Tools.getExtension(file.getName()); 
     1014            String mmxFileName = ""; 
     1015 
     1016            // OSSXP.COM: can disable join .mm with .mmx here. 
     1017            // if(true) return getActualReaderXml(file); 
     1018             
     1019            if(!ext.equals("mm"))  
     1020            { 
     1021                mmxFileName = "." + file.getName()+".mmx"; 
     1022            } 
     1023            else  
     1024            { 
     1025                mmxFileName = "." + Tools.removeExtension(file.getName()) + ".mmx"; 
     1026            } 
     1027            File mmxfile = new File(file.getParent(), mmxFileName); 
     1028             
     1029            if (!mmxfile.exists()) 
     1030            { 
     1031                return getActualReaderXml(file); 
     1032            } 
     1033 
     1034            URL updaterUrl = null; 
     1035            InputStream inputStream = null; 
     1036            Source xsltSource = null; 
     1037            StringWriter buffwriter = null; 
     1038            Result result = null; 
     1039            TransformerFactory tf = null; 
     1040            Transformer transformer = null; 
     1041            String mmxFileFullName = mmxfile.toURI().toString(); 
     1042            try { 
     1043                // try to convert map with xslt: 
     1044                updaterUrl = frame.getResource( 
     1045                        "freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt"); 
     1046                if (updaterUrl == null) { 
     1047                    throw new IllegalArgumentException( 
     1048                            "freemind_join_mm_mmx.xslt not found."); 
     1049                } 
     1050                inputStream = updaterUrl.openStream(); 
     1051                xsltSource = new StreamSource(inputStream); 
     1052                // get output: 
     1053                buffwriter = new StringWriter(); 
     1054                result = new StreamResult(buffwriter); 
     1055                /* OSSXP.COM: create an instance of TransformerFactory. 
     1056                 * the default xslt engine (com.sun.org.apache.xalan.internal.xsltc.trax...)  
     1057                 * may not support 'key()' in freemind_join_mm_mmx.xslt.  
     1058                 * Use saxon implement. */ 
     1059                System.setProperty("javax.xml.transform.TransformerFactory",  
     1060                                "com.icl.saxon.TransformerFactoryImpl"); 
     1061                tf = TransformerFactory.newInstance(); 
     1062                transformer = tf.newTransformer(xsltSource); 
     1063                transformer.setParameter("mmx_file", mmxFileFullName); 
     1064                transformer.transform(new StreamSource(file), result); 
     1065 
     1066            } catch (Exception ex) { 
     1067                ex.printStackTrace(); 
     1068                // exception: we take the file itself: 
     1069                return getActualReaderXml(file); 
     1070            } finally { 
     1071                if (inputStream != null) { 
     1072                    inputStream.close(); 
     1073                } 
     1074                if (buffwriter != null) { 
     1075                    buffwriter.close(); 
     1076                } 
     1077                inputStream = null; 
     1078                xsltSource = null; 
     1079                updaterUrl = null; 
     1080                result = null; 
     1081                transformer = null; 
     1082                tf = null; 
     1083            } 
     1084            return new StringReader(buffwriter.getBuffer().toString()); 
     1085        } 
     1086 
     1087        /*  
     1088         * OSSXP.COM: In this hacked version, .mm file is a true XML file. 
     1089         * load XML file using DOM. 
     1090         */ 
     1091        private static Reader getActualReaderXml(File file) throws IOException { 
     1092            try 
     1093            { 
     1094                TransformerFactory tf = TransformerFactory.newInstance(); 
     1095                Transformer transformer = tf.newTransformer(); 
     1096                DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
     1097                DocumentBuilder domBuilder = domFactory.newDocumentBuilder(); 
     1098 
     1099                Document doc = domBuilder.parse(file); 
     1100                Source src = new DOMSource(doc); 
     1101                StringWriter buffwriter = new StringWriter(); 
     1102                StreamResult result = new StreamResult(buffwriter); 
     1103                transformer.transform(src, result); 
     1104 
     1105                return new StringReader(buffwriter.toString()); 
     1106            } 
     1107            catch(Exception exp) 
     1108            { 
     1109                exp.printStackTrace(); 
     1110            } 
     1111 
    9981112            return new BufferedReader(new FileReader(file)); 
    9991113        } 
    10001114 
  • freemind/modes/mindmapmode/MindMapMapModel.java

    diff -r e4a92f133383 freemind/modes/mindmapmode/MindMapMapModel.java
    a b  
    438438                } 
    439439            if (mapStart.startsWith(EXPECTED_START_STRINGS[i])) { 
    440440                // actual version: 
    441                 reader = Tools.getActualReader(file); 
     441                reader = Tools.getActualReader(file, getFrame()); 
    442442                break; 
    443443            } 
    444444        } 
     
    452452                                        OptionalDontShowMeAgainDialog.ONLY_OK_SELECTION_IS_STORED) 
    453453                                        .show().getResult(); 
    454454                        if(showResult != JOptionPane.OK_OPTION) { 
    455                                 reader = Tools.getActualReader(file); 
     455                                reader = Tools.getActualReader(file, getFrame()); 
    456456                        } else { 
    457457                                reader = Tools.getUpdateReader(file, FREEMIND_VERSION_UPDATER_XSLT, getFrame()); 
    458458                        } 
  • (a) /dev/null vs. (b) b/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt

    diff -r e4a92f133383 freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt
    a b  
     1<xsl:stylesheet version="1.0" 
     2   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     3<!-- Usage: 
     4   xsltproc -stringparam mmx_file mindmap.mmx <this_xslt> mindmap.mm 
     5--> 
     6   <xsl:output method="xml" version="1.0" encoding="utf-8" 
     7       indent="no" /> 
     8 
     9   <xsl:param name="mmx_file" /> 
     10   <xsl:variable name="indexfile" select="document($mmx_file)" /> 
     11 
     12   <xsl:key name="node-by-id" match="node" use="@ID"/> 
     13 
     14   <xsl:template match="map"> 
     15       <map> 
     16           <xsl:copy-of select="@*" /> 
     17           <xsl:apply-templates /> 
     18       </map> 
     19   </xsl:template> 
     20 
     21   <xsl:template match="node"> 
     22       <xsl:variable name="id" select="@ID" /> 
     23       <xsl:copy> 
     24           <xsl:copy-of select="@*" /> 
     25           <xsl:for-each select="$indexfile"> 
     26               <xsl:copy-of select="key('node-by-id', $id)/@*" /> 
     27           </xsl:for-each> 
     28           <xsl:apply-templates /> 
     29       </xsl:copy> 
     30   </xsl:template> 
     31 
     32   <xsl:template match="*"> 
     33     <xsl:copy-of select="."/> 
     34   </xsl:template> 
     35 
     36</xsl:stylesheet> 
Note: See TracBrowser for help on using the browser.