1 19 20 package org.netbeans.bluej.upgrade; 21 import java.io.*; 22 import java.io.File ; 23 import java.io.IOException ; 24 import java.lang.reflect.Array ; 25 import java.net.URL ; 26 import java.util.ArrayList ; 27 import java.util.Arrays ; 28 import java.util.Collections ; 29 import java.util.Enumeration ; 30 import java.util.HashMap ; 31 import java.util.Iterator ; 32 import java.util.List ; 33 import java.util.Map ; 34 import javax.swing.JOptionPane ; 35 import javax.swing.text.SimpleAttributeSet ; 36 import javax.swing.text.StyleConstants ; 37 38 import org.netbeans.bluej.util.Util; 39 import org.openide.ErrorManager; 40 import org.openide.filesystems.FileObject; 41 import org.openide.filesystems.FileUtil; 42 import org.openide.filesystems.LocalFileSystem; 43 import org.openide.filesystems.MultiFileSystem; 44 import org.openide.filesystems.Repository; 45 import org.openide.filesystems.XMLFileSystem; 46 import org.openide.util.NbBundle; 47 import org.xml.sax.SAXException ; 48 49 53 public final class AutoUpgrade { 54 55 public static void main (String [] args) throws Exception { 56 String [] version = new String [1]; 57 File sourceFolder = checkPrevious (version); 58 if (sourceFolder != null) { 59 if (!showUpgradeDialog (sourceFolder)) { 60 throw new org.openide.util.UserCancelException (); 61 } 62 doUpgrade (sourceFolder, version[0]); 63 } 64 } 65 66 final static private List VERSION_TO_CHECK = Collections.EMPTY_LIST; 70 static private File checkPrevious (String [] version) { 71 boolean exists; 72 73 String userHome = System.getProperty ("user.home"); File sourceFolder = null; 75 76 if (userHome != null) { 77 File userHomeFile = new File (userHome); 78 exists = userHomeFile.isDirectory (); 79 80 Iterator it = VERSION_TO_CHECK.iterator (); 81 String ver; 82 while (it.hasNext () && sourceFolder == null) { 83 ver = (String ) it.next (); 84 sourceFolder = new File (userHomeFile.getAbsolutePath (), ver); 85 86 if (sourceFolder.isDirectory ()) { 87 version[0] = sourceFolder.getName(); 88 break; 89 } 90 sourceFolder = null; 91 } 92 return sourceFolder; 93 } else { 94 return null; 95 } 96 } 97 98 private static boolean showUpgradeDialog (final File source) { 99 Util.setDefaultLookAndFeel(); 100 JOptionPane p = new JOptionPane ( 101 new AutoUpgradePanel (source.getAbsolutePath ()), 102 JOptionPane.QUESTION_MESSAGE, 103 JOptionPane.YES_NO_OPTION 104 ); 105 javax.swing.JDialog d = p.createDialog ( 106 null, 107 NbBundle.getMessage (AutoUpgrade.class, "MSG_Confirmation_Title") ); 109 d.setModal (true); 110 d.setVisible (true); 111 112 return new Integer (JOptionPane.YES_OPTION).equals (p.getValue ()); 113 } 114 115 static void doUpgrade (File source, String oldVersion) 116 throws java.io.IOException , java.beans.PropertyVetoException { 117 118 File userdir = new File (System.getProperty ("netbeans.user", "")); 120 java.util.Set includeExclude; 121 try { 122 Reader r = new InputStreamReader ( 123 AutoUpgrade.class.getResourceAsStream ("copy" + oldVersion), "utf-8"); includeExclude = IncludeExclude.create (r); 126 r.close (); 127 } catch (IOException ex) { 128 IOException e = new IOException ("Cannot import from version: " + oldVersion); 129 e.initCause (ex); 130 throw e; 131 } 132 133 ErrorManager.getDefault ().log ( 134 ErrorManager.USER, "Import: Old version: " + oldVersion + ". Importing from " + source + " to " + userdir ); 137 138 File oldConfig = new File (source, "config"); org.openide.filesystems.FileSystem old; 140 { 141 LocalFileSystem lfs = new LocalFileSystem (); 142 lfs.setRootDirectory (oldConfig); 143 144 XMLFileSystem xmlfs = null; 145 try { 146 URL url = AutoUpgrade.class.getResource("layer" + oldVersion + ".xml"); xmlfs = new XMLFileSystem(url); 148 } catch (SAXException ex) { 149 IOException e = new IOException ("Cannot import from version: " + oldVersion); e.initCause (ex); 151 throw e; 152 } 153 154 old = createLayeredSystem(lfs, xmlfs); 155 } 156 org.openide.filesystems.FileSystem mine = Repository.getDefault (). 157 getDefaultFileSystem (); 158 159 Copy.copyDeep (old.getRoot (), mine.getRoot (), includeExclude); 160 161 } 162 163 static MultiFileSystem createLayeredSystem(final LocalFileSystem lfs, final XMLFileSystem xmlfs) { 164 MultiFileSystem old; 165 166 old = new MultiFileSystem ( 167 new org.openide.filesystems.FileSystem[] { lfs, xmlfs } 168 ) { 169 { 170 setPropagateMasks(true); 171 } 172 }; 173 return old; 174 } 175 176 } 177 178 179 180 | Popular Tags |