Changeset 6622

Show
Ignore:
Timestamp:
05/16/12 05:00:49 (2 years ago)
Author:
umlawren
Message:

Updated MultiSource? Plugin by cleaning/documenting code, converting documentation to HTML, and including unityjdbc.jar.

Location:
trunk/sql12/plugins/multisource
Files:
19 added
1 removed
11 modified

Legend:

Unmodified
Added
Removed
  • trunk/sql12/plugins/multisource

    • Property svn:ignore set to
      target
      .classpath
      .project
      .settings
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiAddSourceAction.java

    r6617 r6622  
    1212 
    1313/** 
    14  * Menu item that allows user to add a source to the integrated, global view. 
     14 * Menu item that allows the user to add a source to the integrated, global view. 
    1515 */ 
    1616public class MultiAddSourceAction extends SquirrelAction { 
     
    2525 
    2626        /** 
    27          * The add source action retrieves a list of all existing aliases that are not virtual (have unity in the URL) then 
    28          * allows the user to select one of them in a dialog.  If a source is selected, it is added to the virtual view 
    29          * and the object tree is updated. 
     27         * The add source action retrieves a list of all existing aliases that are 
     28         * not virtual (have unity in the URL) then allows the user to select one of 
     29         * them in a dialog. If a source is selected, it is added to the virtual 
     30         * view and the object tree is updated. 
    3031         */ 
    3132        public void actionPerformed(ActionEvent evt) { 
    32                 try {            
     33                try { 
    3334                        // List all the aliases in the system (then have user pick one). 
    34                         Iterator<ISQLAlias> iterator = _session.getApplication().getDataCache().aliases();                       
     35                        Iterator<ISQLAlias> iterator = _session.getApplication().getDataCache().aliases(); 
    3536                        ArrayList<ISQLAlias> aliasList = new ArrayList<ISQLAlias>(); 
    36                         while (iterator.hasNext()) 
    37                         {       ISQLAlias alias = iterator.next(); 
    38                                 if (alias.getUrl().toLowerCase().indexOf("jdbc:unity") < 0) 
    39                                 {                                        
     37                        while (iterator.hasNext()) { 
     38                                ISQLAlias alias = iterator.next(); 
     39                                if (alias.getUrl().toLowerCase().indexOf("jdbc:unity") < 0) { 
    4040                                        aliasList.add(alias); 
    4141                                } 
    4242                        } 
    4343 
    44                         if (aliasList.size() > 0) 
    45                         {       // Must have at least one alias source defined 
     44                        if (aliasList.size() > 0) {  
     45                                // Must have at least one alias source defined 
    4646                                // Put up window to select an alias 
    4747                                MultiAliasChooser dialog = new MultiAliasChooser(this._app, _session, aliasList); 
    4848                                ISQLAlias selected = dialog.showDialog(); 
    49                                 if (selected != null) 
    50                                 {       // Added a source                                        
    51                                         // Update object tree information 
     49                                if (selected != null) {  
     50                                        // Added a source. Update object tree information 
    5251                                        MultiSourcePlugin.updateSession(_session); 
    5352                                } 
    54                         }                        
     53                        } 
    5554                } catch (Exception e) { 
    5655                        throw new RuntimeException(e); 
    5756                } 
    5857        } 
    59          
    6058} 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiAliasChooser.java

    r6617 r6622  
    1818 
    1919import net.sourceforge.squirrel_sql.client.IApplication; 
    20 import net.sourceforge.squirrel_sql.client.gui.session.SessionInternalFrame; 
    21 import net.sourceforge.squirrel_sql.client.session.IObjectTreeAPI; 
    2220import net.sourceforge.squirrel_sql.client.session.ISession; 
    23 import net.sourceforge.squirrel_sql.client.session.action.RefreshObjectTreeCommand; 
    2421import net.sourceforge.squirrel_sql.fw.gui.Dialogs; 
    2522import net.sourceforge.squirrel_sql.fw.gui.GUIUtils; 
     
    3431 
    3532/** 
    36  * A dialog that allows a user to select an existing alias to add to the virtualization. 
     33 * A dialog that allows a user to select an existing alias to add to the 
     34 * virtualization. 
    3735 */ 
    38 public class MultiAliasChooser extends JDialog 
    39 { 
     36public class MultiAliasChooser extends JDialog { 
    4037        private static final long serialVersionUID = 1L; 
    4138 
     
    5249        private ISession _session; 
    5350 
    54         public MultiAliasChooser(IApplication app, ISession session, ArrayList<ISQLAlias> aliasList) 
    55         { 
     51        public MultiAliasChooser(IApplication app, ISession session, ArrayList<ISQLAlias> aliasList) { 
    5652                super((Frame) null, s_stringMgr.getString("MultiAliasChooser.title"), true); 
    5753                setSize(300, 200); 
     
    6561         * Show dialog. 
    6662         */ 
    67         public ISQLAlias showDialog() 
    68         { 
     63        public ISQLAlias showDialog() { 
    6964                setVisible(true); 
    7065                return _selectedAlias; 
     
    7469         * Builds the components of the dialog. 
    7570         */ 
    76         private void createUserInterface() 
    77         { 
     71        private void createUserInterface() { 
    7872                Container contentPane = getContentPane(); 
    7973 
    80                 JPanel content = new JPanel(new GridLayout(4,1)); 
    81  
     74                JPanel content = new JPanel(new GridLayout(4, 1)); 
     75 
     76                // Alias combobox and label 
    8277                content.add(new JLabel(s_stringMgr.getString("MultiAliasChooser.prompt"), JLabel.LEFT)); 
    83  
    8478                _aliasCbx = new JComboBox(_aliasList.toArray()); 
    85                 _aliasCbx.setMaximumRowCount(5);                        // Display up to 5 rows without a scrollbar 
    86  
     79                _aliasCbx.setMaximumRowCount(5); // Display up to 5 rows without a scrollbar 
    8780                content.add(_aliasCbx); 
     81                 
     82                // Name textbox and label 
    8883                JPanel namePanel = new JPanel(); 
    8984                namePanel.add(new JLabel(s_stringMgr.getString("MultiAliasChooser.name"), JLabel.LEFT)); 
     
    9388                content.add(namePanel); 
    9489 
     90                // Schema textbox and label 
    9591                JPanel schemaPanel = new JPanel(); 
    9692                schemaPanel.add(new JLabel(s_stringMgr.getString("MultiAliasChooser.schema"), JLabel.LEFT)); 
     
    9894                schemaPanel.add(_schemaTxt); 
    9995                content.add(schemaPanel); 
    100  
    10196                contentPane.add(content, "Center"); 
    10297 
     98                // Buttons 
    10399                contentPane.add(createButtonsPanel(), "South"); 
    104100 
    105                 _aliasCbx.addActionListener(new ActionListener(){ 
    106                         public void actionPerformed(ActionEvent evt) 
    107                         { 
     101                _aliasCbx.addActionListener(new ActionListener() { 
     102                        public void actionPerformed(ActionEvent evt) { 
    108103                                _sourceName = ((ISQLAlias) _aliasCbx.getSelectedItem()).getName(); 
    109104                                _nameTxt.setText(_sourceName); 
     
    115110        } 
    116111 
    117         private JPanel createButtonsPanel() 
    118         { 
     112        /** 
     113         * Creates OK and Cancel buttons with action events. 
     114         * @return 
     115         */ 
     116        private JPanel createButtonsPanel() { 
    119117                JPanel pnl = new JPanel(); 
    120118 
     119                // OK button 
    121120                JButton okBtn = new JButton(s_stringMgr.getString("MultiAliasChooser.ok")); 
    122                 okBtn.addActionListener(new ActionListener() 
    123                 { 
    124                         public void actionPerformed(ActionEvent evt) 
    125                         { 
    126                                 // Do positive action 
    127                                 ISQLAlias alias = (ISQLAlias) _aliasCbx.getSelectedItem(); 
    128                                 MultiAliasChooser.this._selectedAlias = alias; 
    129                                 _sourceName = _nameTxt.getText(); 
    130                                 if (_sourceName.contains(" ")) 
    131                                 {       Dialogs.showOk(_nameTxt.getParent().getParent(), "Source name cannot contain spaces."); 
     121                okBtn.addActionListener(new ActionListener() { 
     122                        public void actionPerformed(ActionEvent evt) { 
     123                                if (!executeAddSource()) 
    132124                                        return; 
    133                                 } 
    134                                 String schemaName = _schemaTxt.getText(); 
    135                                 if (schemaName.trim().equals("")) 
    136                                         schemaName = null; 
    137  
    138                                 try 
    139                                 { 
    140                                         // Verify that source name is not a duplicate 
    141                                         Object schema = MultiSourcePlugin.getSchema(_session.getSQLConnection().getConnection()); 
    142                                         Method getDBMethod = schema.getClass().getMethod("getDB", new Class[]{java.lang.String.class}); 
    143                                         Object result = getDBMethod.invoke(schema,  new Object[]{_sourceName}); 
    144  
    145                                         if (result != null) 
    146                                         {       Dialogs.showOk(_nameTxt.getParent().getParent(), "Source name already exists in virtualization.  Select a different name."); 
    147                                                 return; 
    148                                         } 
    149  
    150                                         // Now actually do extract with this information 
    151                                         ClassLoader loader = _session.getSQLConnection().getConnection().getClass().getClassLoader(); 
    152                                         Object extractor = Class.forName("com.unityjdbc.sourcebuilder.AnnotatedExtractor", true, loader).newInstance(); 
    153  
    154                                         // Create connection 
    155                                         SQLDriverManager dm = _app.getSQLDriverManager(); 
    156                                         IIdentifier driverID = alias.getDriverIdentifier(); 
    157                                     ISQLDriver driver = _app.getDataCache().getDriver(driverID); 
    158                                         ISQLConnection con = dm.getConnection(driver, alias, alias.getUserName(), alias.getPassword(), alias.getDriverPropertiesClone()); 
    159  
    160                                         ClassLoader newSourceLoader = new SQLDriverClassLoader(driver); 
    161  
    162                                         Method meth = extractor.getClass().getMethod("extract", new Class[]{java.lang.String.class, java.lang.String.class, java.lang.String.class, 
    163                                                         java.lang.String.class, java.util.Properties.class, java.lang.String.class, java.lang.String.class, java.sql.Connection.class, java.lang.ClassLoader.class}); 
    164  
    165                                         Connection c = con.getConnection(); 
    166                                         Object asd = meth.invoke(extractor, new Object[]{driver.getDriverClassName(), alias.getUrl(), alias.getUserName(), alias.getPassword(), null, 
    167                                                                 _sourceName, schemaName, c, newSourceLoader}); 
    168                                          
    169                                         // Add new database to schema 
    170                                         Method addSourceMethod = schema.getClass().getMethod("addDatabase", new Class[]{asd.getClass()});                                        
    171                                         addSourceMethod.invoke(schema,  new Object[]{asd});                                      
    172                                          
    173                                         MultiSourcePlugin.refreshTree(_session);                                         
    174                                 } 
    175                                 catch (Exception e) 
    176                                 { 
    177                                         Dialogs.showOk(_nameTxt.getParent().getParent(), "Error during extraction: "+e); 
    178                                         return; 
    179                                 } 
    180125                                dispose(); 
    181126                        } 
    182127                }); 
     128                 
     129                // Cancel button 
    183130                JButton cancelBtn = new JButton(s_stringMgr.getString("MultiAliasChooser.cancel")); 
    184                 cancelBtn.addActionListener(new ActionListener() 
    185                 { 
    186                         public void actionPerformed(ActionEvent evt) 
    187                         { 
     131                cancelBtn.addActionListener(new ActionListener() { 
     132                        public void actionPerformed(ActionEvent evt) { 
    188133                                MultiAliasChooser.this._selectedAlias = null; 
    189134                                dispose(); 
     
    199144                return pnl; 
    200145        } 
     146         
     147        /** 
     148         * Adds the selected source to the virtualization. 
     149         * Uses reflection to call methods of the UnityJDBC driver. 
     150         */ 
     151        private boolean executeAddSource() { 
     152                ISQLAlias alias = (ISQLAlias) _aliasCbx.getSelectedItem(); 
     153                MultiAliasChooser.this._selectedAlias = alias; 
     154                 
     155                // Verify correct format of source name (no spaces, etc.) 
     156                _sourceName = _nameTxt.getText(); 
     157                if (_sourceName.contains(" ")) { 
     158                        Dialogs.showOk(_nameTxt.getParent().getParent(), "Source name cannot contain spaces."); 
     159                        return false; 
     160                } 
     161                 
     162                // Retrieve schema name if it exists 
     163                String schemaName = _schemaTxt.getText(); 
     164                if (schemaName.trim().equals("")) 
     165                        schemaName = null; 
     166 
     167                try { 
     168                        // Verify that source name is not a duplicate 
     169                        Object schema = MultiSourcePlugin.getSchema(_session.getSQLConnection().getConnection()); 
     170                        Method getDBMethod = schema.getClass().getMethod("getDB", new Class[] { java.lang.String.class }); 
     171                        Object result = getDBMethod.invoke(schema, new Object[] { _sourceName }); 
     172 
     173                        if (result != null) { 
     174                                Dialogs.showOk(_nameTxt.getParent().getParent(), "Source name already exists in virtualization.  Select a different name."); 
     175                                return false; 
     176                        } 
     177 
     178                        // Now actually do extract with this information 
     179                        ClassLoader loader = _session.getSQLConnection().getConnection().getClass().getClassLoader(); 
     180                        Object extractor = Class.forName("com.unityjdbc.sourcebuilder.AnnotatedExtractor", true, loader).newInstance(); 
     181 
     182                        // Create connection 
     183                        SQLDriverManager dm = _app.getSQLDriverManager(); 
     184                        IIdentifier driverID = alias.getDriverIdentifier(); 
     185                        ISQLDriver driver = _app.getDataCache().getDriver(driverID); 
     186                        ISQLConnection con = dm.getConnection(driver, alias, alias.getUserName(), alias.getPassword(), alias.getDriverPropertiesClone()); 
     187 
     188                        ClassLoader newSourceLoader = new SQLDriverClassLoader(driver); 
     189 
     190                        Method meth = extractor.getClass().getMethod("extract", new Class[] { java.lang.String.class, java.lang.String.class, 
     191                                                        java.lang.String.class, java.lang.String.class, 
     192                                                        java.util.Properties.class, java.lang.String.class, 
     193                                                        java.lang.String.class, java.sql.Connection.class, 
     194                                                        java.lang.ClassLoader.class }); 
     195 
     196                        Connection c = con.getConnection(); 
     197                        Object asd = meth.invoke(extractor, new Object[] { driver.getDriverClassName(), alias.getUrl(), alias.getUserName(), alias.getPassword(), null,  
     198                                                                                                                                _sourceName, schemaName, c, newSourceLoader }); 
     199 
     200                        // Add new database to schema 
     201                        Method addSourceMethod = schema.getClass().getMethod("addDatabase", new Class[] { asd.getClass() }); 
     202                        addSourceMethod.invoke(schema, new Object[] { asd }); 
     203 
     204                        MultiSourcePlugin.refreshTree(_session); 
     205                } catch (Exception e) { 
     206                        Dialogs.showOk(_nameTxt.getParent().getParent(), "Error during extraction: "+ e); 
     207                        return false; 
     208                } 
     209                return true; 
     210        } 
    201211} 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiExportAction.java

    r6617 r6622  
    3232                    chooser.setDialogTitle("Select location to save virtualization configuration file"); 
    3333                    int returnVal = chooser.showSaveDialog(_session.getApplication().getMainFrame()); 
    34                     if(returnVal == JFileChooser.APPROVE_OPTION) {                                     
     34                    if (returnVal == JFileChooser.APPROVE_OPTION) {                                    
    3535                       String sourcesFileName = chooser.getSelectedFile().getName(); 
    3636                       MultiSourcePlugin.export(sourcesFileName, _session);              
     
    3939                        throw new RuntimeException(e); 
    4040                } 
    41         } 
    42  
    43          
     41        }        
    4442} 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRemoveFieldAction.java

    r6617 r6622  
    99 
    1010/** 
    11  * Menu item that allows user to add source to integrated, global view. 
    12  * @author rlawrenc 
    13  * 
     11 * Menu item that allows user to add source to integrated, virtual view.  
    1412 */ 
    1513public class MultiRemoveFieldAction extends SquirrelAction { 
     
    2927                        throw new RuntimeException(e); 
    3028                } 
    31         } 
    32          
     29        }        
    3330} 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRemoveSourceAction.java

    r6617 r6622  
    1616 
    1717/** 
    18  * Menu item that allows user to remove a source from the integrated view.  
     18 * Menu item that allows user to remove a source from the virtual view.  
    1919 */ 
    2020public class MultiRemoveSourceAction extends SquirrelAction { 
     
    2828        } 
    2929 
     30        /** 
     31         * Removes a source from the virtual view. 
     32         */ 
    3033        public void actionPerformed(ActionEvent evt) { 
    3134                try { 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRemoveTableAction.java

    r6617 r6622  
    1616 
    1717/** 
    18  * Menu item that allows user to remove a table from the integrated view.  
     18 * Menu item that allows user to remove a table from the virtual view.  
    1919 */ 
    2020public class MultiRemoveTableAction extends SquirrelAction { 
     
    3535 
    3636                        // Only allow delete of one table regardless of how many are selected 
    37                         if (tables.size() > 0) 
    38                 { 
     37                        if (tables.size() > 0) { 
    3938                                ITableInfo ti = (ITableInfo) tables.get(0); 
    4039                                String sourceName = ti.getSchemaName(); 
     
    4544                    removeTable(sourceName, tableName, gs); 
    4645                    otree.removeNodes(otree.getSelectedNodes()); 
    47                     MultiSourcePlugin.updateSession(_session); 
    48                      
     46                    MultiSourcePlugin.updateSession(_session);              
    4947                }                                                
    5048                } catch (Exception e) { 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRenameFieldAction.java

    r6617 r6622  
    1010 
    1111/** 
    12  * Menu item that allows user to add source to integrated, global view. 
    13  * @author rlawrenc 
    14  * 
     12 * Menu item that allows user to rename a field in the virtual view.  
    1513 */ 
    1614public class MultiRenameFieldAction extends SquirrelAction { 
     
    2826                        // TODO: Not implemented yet. 
    2927 
    30                         SessionInternalFrame sessMainFrm = _session.getSessionInternalFrame(); 
    31                          
    32                         sessMainFrm.getSQLPanelAPI().appendSQLScript("RENAME FIELD!"); 
    33                         sessMainFrm.getSessionPanel().selectMainTab(ISession.IMainPanelTabIndexes.SQL_TAB); 
     28                        SessionInternalFrame sessMainFrm = _session.getSessionInternalFrame();                                           
    3429                } catch (Exception e) { 
    3530                        throw new RuntimeException(e); 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRenameSourceAction.java

    r6617 r6622  
    1414 
    1515/** 
    16  * Menu item that allows user to rename a source in the integrated view. 
    17  * @author rlawrenc 
    18  * 
     16 * Menu item that allows user to rename a source in the virtual view.  
    1917 */ 
    2018public class MultiRenameSourceAction extends SquirrelAction { 
     
    3533 
    3634                        // Only allow renaming of one source regardless how many are selected 
    37                         if (dbObjs.length > 0) 
    38                 { 
     35                        if (dbObjs.length > 0) { 
    3936                                DatabaseObjectInfo di = (DatabaseObjectInfo) dbObjs[0]; 
    4037                                String sourceName = di.getSimpleName();                          
     
    5754        { 
    5855                // TODO: Not implemented yet.            
    59         } 
    60          
     56        }        
    6157} 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiRenameTableAction.java

    r6617 r6622  
    1212 
    1313/** 
    14  * Menu item that allows user to rename a table in the integrated view.  
     14 * Menu item that allows user to rename a table in the virtual view.  
    1515 */ 
    1616public class MultiRenameTableAction extends SquirrelAction { 
  • trunk/sql12/plugins/multisource/src/main/java/net/sourceforge/squirrel_sql/plugins/multisource/MultiSourcePlugin.java

    r6617 r6622  
    2626import net.sourceforge.squirrel_sql.fw.sql.ISQLAlias; 
    2727import net.sourceforge.squirrel_sql.fw.util.FileWrapper; 
     28import net.sourceforge.squirrel_sql.fw.util.IMessageHandler; 
     29 
    2830 
    2931/** 
     
    3436        private PluginResources _resources; 
    3537        private static FileWrapper _userSettingsFolder; 
    36  
     38        private static boolean isTrial; 
     39         
    3740        /** 
    3841         * Return the internal name of this plugin. 
     
    5255        public String getDescriptiveName() 
    5356        { 
    54                 return "MultiSource Plugin"; 
     57                return "MultiSource Virtualization Plugin"; 
    5558        } 
    5659 
     
    9497        public String getHelpFileName() 
    9598        { 
    96                 return "readme.txt"; 
     99                return "readme.html"; 
    97100        } 
    98101 
     
    132135        { 
    133136                _resources = new PluginResources("net.sourceforge.squirrel_sql.plugins.multisource.multisource", this); 
    134                 try 
    135                 { 
     137                try { 
    136138                        _userSettingsFolder = getPluginUserSettingsFolder();    // Retrieve the folder for user settings for storing connection info. 
    137139                } 
     
    161163                if (dbName != null && dbName.contains("unity")) 
    162164                {       // Add new popup menu options for a Unity session 
    163                         addTreeNodeMenuActions(session); 
    164  
     165                        addTreeNodeMenuActions(session);                 
     166                                         
     167                        IMessageHandler messageHandler = session.getApplication().getMessageHandler(); 
     168                        MultiSqlExecutionListener sqlExecutionListener = new MultiSqlExecutionListener(messageHandler); 
     169                         
     170                        session.getSessionSheet().getSQLPaneAPI().addSQLExecutionListener(sqlExecutionListener); 
     171                         
    165172                        // Load session configuration information if URL says virtual 
    166                         if (session.getAlias() != null) 
    167                         { 
     173                        if (session.getAlias() != null) { 
     174                                isTrial = MultiSourcePlugin.isTrial(session.getSQLConnection().getConnection()); 
    168175                                String url = session.getAlias().getUrl(); 
    169                                 if (url.toLowerCase().indexOf("/virtual") > 0) 
    170                                 {       // Try to load based on session name 
     176                                if (url.toLowerCase().indexOf("/virtual") > 0) {         
     177                                        // Try to load based on session name 
     178                                         
    171179                                        Object schema = MultiSourcePlugin.getSchema(session.getSQLConnection().getConnection());                // Retrieve schema 
    172                                         if (schema != null) 
    173                                         { 
    174                                                 try 
    175                                                 { 
    176                                                 Method parseSourcesMethod = schema.getClass().getMethod("parseSourcesFile", new Class[]{java.io.BufferedReader.class, java.lang.String.class}); 
    177                                                 String filePath = getSourceFilePath(session); 
    178                                                 System.out.println("LOad file: "+filePath); 
    179                                                 System.out.println("ID: "+session.getAlias().getIdentifier()); 
    180                                                 BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
    181                                                 parseSourcesMethod.invoke(schema, new Object[]{reader, "jdbc:unity://"+filePath}); 
    182                                                 // TODO: Not sure why these two lines below do not work. 
    183                                                 // IObjectTreeAPI otree = session.getSessionInternalFrame().getObjectTreeAPI(); 
    184                                                 // otree.refreshTree(); 
    185                                                 new UpdateThread(session).run();        // A poor solution to force the object tree to update after a slight delay 
     180                                        if (schema != null) { 
     181                                                try { 
     182                                                        Method parseSourcesMethod = schema.getClass().getMethod("parseSourcesFile", new Class[]{java.io.BufferedReader.class, java.lang.String.class}); 
     183                                                        String filePath = getSourceFilePath(session); 
     184                                                        BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
     185                                                        parseSourcesMethod.invoke(schema, new Object[]{reader, "jdbc:unity://"+filePath}); 
     186                                                        // TODO: Not sure why these two lines below do not work. 
     187                                                        // IObjectTreeAPI otree = session.getSessionInternalFrame().getObjectTreeAPI(); 
     188                                                        // otree.refreshTree(); 
     189                                                        new UpdateThread(session).run();        // A poor solution to force the object tree to update after a slight delay 
    186190                                                } 
    187                                                 catch (Exception e) 
    188                                                 { 
     191                                                catch (Exception e) { 
    189192                                                        System.out.println(e); 
    190193                                                } 
     
    282285 
    283286        /** 
     287         * Returns true if virtualization driver is run in trial mode. 
     288         * @param con 
     289         * @return 
     290         */ 
     291        public static boolean isTrial(Connection con) 
     292        { 
     293                Class<? extends Connection> cls = con.getClass(); 
     294 
     295        Object retobj; 
     296                try { 
     297                        Method meth = cls.getMethod("isTrial", (Class[])  null); 
     298                        retobj = meth.invoke(con, (Object[]) null); 
     299                        return ((Boolean) retobj).booleanValue(); 
     300                } catch (IllegalArgumentException e) { 
     301                        throw new RuntimeException(e); 
     302                } catch (IllegalAccessException e) { 
     303                        throw new RuntimeException(e); 
     304                } catch (InvocationTargetException e) { 
     305                        throw new RuntimeException(e); 
     306                } catch (SecurityException e) { 
     307                        throw new RuntimeException(e); 
     308                } catch (NoSuchMethodException e) { 
     309                        throw new RuntimeException(e); 
     310                }                
     311        } 
     312         
     313        public static boolean isTrial() 
     314        {       return isTrial; } 
     315         
     316        /** 
    284317         * Updates any session information including virtualization configuration files. 
    285318         * @param session 
     
    307340         * @param session 
    308341         */ 
    309         public static void export(String sourcesFileName, ISession session) 
    310         { 
     342        public static void export(String sourcesFileName, ISession session) { 
    311343                File f = new File(sourcesFileName); 
    312                String path = f.getParent()+File.separator; 
    313                // Make sure directory exists 
    314                if (!f.getParentFile().exists()) 
    315                { 
    316                    f.getParentFile().mkdir(); 
    317                } 
    318  
    319                sourcesFileName = f.getName(); 
    320                String sourcesNoExt=sourcesFileName; 
    321                int idx = sourcesFileName.indexOf(".xml"); 
    322                if (idx > 0) 
    323                    sourcesNoExt = sourcesFileName.substring(0, sourcesFileName.length()-4);      
    324                 
    325                Object schema = MultiSourcePlugin.getSchema(session.getSQLConnection().getConnection());         // Retrieve schema 
    326  
    327                try { 
    328                        // Each source schema file is prefixed with sources file name (no extension) plus source name. 
    329                        // Export schema files of each source first as each file location is needed in the sources file listing all sources. 
    330                                 Method exportSourceMethod = schema.getClass().getMethod("exportSchema", new Class[]{java.lang.String.class}); 
    331                                 Method getDBsMethod = schema.getClass().getMethod("getAnnotatedDatabases", (Class[]) null); 
    332                                 @SuppressWarnings("unchecked") 
    333                                 ArrayList<Object> dbs = (ArrayList<Object>) getDBsMethod.invoke(schema,  (Object[]) null); 
    334                             for (int i=0; i < dbs.size(); i++) 
    335                             {   Object db = dbs.get(i);                          
    336                                 Method getDBNameMethod = db.getClass().getMethod("getDatabaseName", (Class[]) null); 
    337                                 Method setDBSchemaMethod = db.getClass().getMethod("setSchemaFile", new Class[]{java.lang.String.class}); 
    338                                 String dbName = (String) getDBNameMethod.invoke(db, (Object[]) null); 
    339                                 String fileName = sourcesNoExt+"_"+dbName+".xml"; 
    340                                 setDBSchemaMethod.invoke(db, new Object[]{fileName}); 
    341                                 String source = (String) exportSourceMethod.invoke(schema,  new Object[]{dbName}); 
    342                                 writeToFile(path+fileName, source); 
    343                             } 
    344  
    345                                 // Write out sources file 
    346                                 Method exportSourcesMethod = schema.getClass().getMethod("exportSources", (Class[]) null); 
    347                                 String sources = (String) exportSourcesMethod.invoke(schema,  (Object[]) null); 
    348                                 writeToFile(path+sourcesFileName, sources); 
    349                 } catch (Exception e) {                  
     344                String path = f.getParent() + File.separator; 
     345                // Make sure directory exists 
     346                if (!f.getParentFile().exists()) { 
     347                        f.getParentFile().mkdir(); 
     348                } 
     349 
     350                sourcesFileName = f.getName(); 
     351                String sourcesNoExt = sourcesFileName; 
     352                int idx = sourcesFileName.indexOf(".xml"); 
     353                if (idx > 0) 
     354                        sourcesNoExt = sourcesFileName.substring(0, sourcesFileName.length() - 4); 
     355 
     356                Object schema = MultiSourcePlugin.getSchema(session.getSQLConnection().getConnection()); // Retrieve schema 
     357 
     358                try { 
     359                        // Each source schema file is prefixed with sources file name (no extension) plus source name. 
     360                        // Export schema files of each source first as each file location is needed in the sources file listing all sources. 
     361                        Method exportSourceMethod = schema.getClass().getMethod("exportSchema", new Class[] { java.lang.String.class }); 
     362                        Method getDBsMethod = schema.getClass().getMethod("getAnnotatedDatabases", (Class[]) null); 
     363                        @SuppressWarnings("unchecked") 
     364                        ArrayList<Object> dbs = (ArrayList<Object>) getDBsMethod.invoke(schema, (Object[]) null); 
     365                        for (int i = 0; i < dbs.size(); i++) { 
     366                                Object db = dbs.get(i); 
     367                                Method getDBNameMethod = db.getClass().getMethod("getDatabaseName", (Class[]) null); 
     368                                Method setDBSchemaMethod = db.getClass().getMethod("setSchemaFile", new Class[] { java.lang.String.class }); 
     369                                String dbName = (String) getDBNameMethod.invoke(db, (Object[]) null); 
     370                                String fileName = sourcesNoExt + "_" + dbName + ".xml"; 
     371                                setDBSchemaMethod.invoke(db, new Object[] { fileName }); 
     372                                String source = (String) exportSourceMethod.invoke(schema, new Object[] { dbName }); 
     373                                writeToFile(path + fileName, source); 
     374                        } 
     375 
     376                        // Write out sources file 
     377                        Method exportSourcesMethod = schema.getClass().getMethod("exportSources", (Class[]) null); 
     378                        String sources = (String) exportSourcesMethod.invoke(schema, (Object[]) null); 
     379                        writeToFile(path + sourcesFileName, sources); 
     380                } catch (Exception e) { 
    350381                        throw new RuntimeException(e); 
    351382                }