Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

WizardTabs.java

00001 /**
00002  * C-JDBC: Clustered JDBC.
00003  * Copyright (C) 2002-2004 French National Institute For Research In Computer
00004  * Science And Control (INRIA).
00005  * Contact: c-jdbc@objectweb.org
00006  * 
00007  * This library is free software; you can redistribute it and/or modify it
00008  * under the terms of the GNU Lesser General Public License as published by the
00009  * Free Software Foundation; either version 2.1 of the License, or any later
00010  * version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
00015  * for more details.
00016  * 
00017  * You should have received a copy of the GNU Lesser General Public License
00018  * along with this library; if not, write to the Free Software Foundation,
00019  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00020  *
00021  * Initial developer(s): Nicolas Modrzyk.
00022  * Contributor(s): ______________________.
00023  */
00024 
00025 package org.objectweb.cjdbc.console.wizard;
00026 
00027 import java.util.ArrayList;
00028 import java.util.Enumeration;
00029 import java.util.Hashtable;
00030 import java.util.Iterator;
00031 import java.util.List;
00032 
00033 import javax.swing.JComboBox;
00034 import javax.swing.JTabbedPane;
00035 
00036 import org.dom4j.Document;
00037 import org.dom4j.DocumentFactory;
00038 import org.dom4j.DocumentType;
00039 import org.dom4j.Element;
00040 import org.dom4j.Node;
00041 import org.objectweb.cjdbc.common.i18n.WizardTranslate;
00042 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00043 import org.objectweb.cjdbc.console.wizard.listeners.WizardListener;
00044 import org.objectweb.cjdbc.console.wizard.objects.Backend;
00045 import org.objectweb.cjdbc.console.wizard.objects.ConnectionInfo;
00046 import org.objectweb.cjdbc.console.wizard.objects.ConnectionTypeInfo;
00047 import org.objectweb.cjdbc.console.wizard.objects.User;
00048 import org.objectweb.cjdbc.console.wizard.tab.AuthenticationTab;
00049 import org.objectweb.cjdbc.console.wizard.tab.BackendTab;
00050 import org.objectweb.cjdbc.console.wizard.tab.CachingTab;
00051 import org.objectweb.cjdbc.console.wizard.tab.DistributionTab;
00052 import org.objectweb.cjdbc.console.wizard.tab.RecoveryTab;
00053 import org.objectweb.cjdbc.console.wizard.tab.RequestManagerTab;
00054 import org.objectweb.cjdbc.console.wizard.tab.VirtualDatabaseTab;
00055 
00056 /**
00057  * This is a <code>JTabbedPane</code> used to contain all the tabs define in
00058  * the <code>org.objectweb.cjdbc.console.wizard.tab</code> package.
00059  * 
00060  * @author <a href="mailto:Nicolas.Modrzyk@inria.fr">Nicolas Modrzyk </a>
00061  * @version 1.0
00062  */
00063 public class WizardTabs extends JTabbedPane implements WizardListener
00064 {
00065 
00066   private VirtualDatabaseTab virtualDatabaseTab;
00067   private DistributionTab    distributionTab;
00068   private AuthenticationTab  authenticationTab;
00069   private BackendTab         backendsTab;
00070   private RequestManagerTab  requestManagerTab;
00071   private ArrayList          tabs;
00072   private CachingTab         cachingTab;
00073   private RecoveryTab        recoveryTab;
00074 
00075   public WizardTabs()
00076   {
00077     this.setVisible(true);
00078     tabs = new ArrayList();
00079 
00080     virtualDatabaseTab = (VirtualDatabaseTab) this
00081         .addTab(new VirtualDatabaseTab(this));
00082     authenticationTab = (AuthenticationTab) this.addTab(new AuthenticationTab(
00083         this));
00084     backendsTab = (BackendTab) this.addTab(new BackendTab(this));
00085     requestManagerTab = (RequestManagerTab) this.addTab(new RequestManagerTab(
00086         this));
00087 
00088     distributionTab = new DistributionTab(this);
00089     cachingTab = new CachingTab(this);
00090     recoveryTab = new RecoveryTab(this);
00091     tabs.add(distributionTab);
00092   }
00093 
00094   public WizardTab addTab(WizardTab tab)
00095   {
00096     this.addTab(tab.getName(), tab);
00097     tabs.add(tab);
00098     return tab;
00099   }
00100 
00101   public void setTabEnabled(String tab, boolean enabled)
00102   {
00103     String translatedTab = WizardTranslate.get(tab);
00104     int index = 0;
00105     WizardTab componentTab;
00106     if (tab.equalsIgnoreCase(WizardConstants.TAB_DISTRIBUTION))
00107     {
00108       index = 1;
00109       componentTab = distributionTab;
00110     }
00111     else if (tab.equalsIgnoreCase(WizardConstants.TAB_CACHING))
00112     {
00113       index = this.getTabCount();
00114       componentTab = cachingTab;
00115     }
00116     else if (tab.equalsIgnoreCase(WizardConstants.TAB_RECOVERY))
00117     {
00118       index = this.getTabCount();
00119       componentTab = recoveryTab;
00120     }
00121     else
00122       return;
00123 
00124     if (enabled)
00125       this.insertTab(translatedTab, null, componentTab, translatedTab, index);
00126     else
00127       this.remove(componentTab);
00128   }
00129 
00130   public ArrayList getUsers()
00131   {
00132     return ((AuthenticationTab) authenticationTab).getUsers();
00133   }
00134 
00135   public ArrayList getBackends()
00136   {
00137     return ((BackendTab) backendsTab).getBackends();
00138   }
00139 
00140   public boolean isDistributedDatabase()
00141   {
00142     return ((VirtualDatabaseTab) virtualDatabaseTab).isDistributedDB();
00143   }
00144 
00145   /**
00146    * @see org.objectweb.cjdbc.console.wizard.listeners.WizardListener#backendListChanged()
00147    */
00148   public void backendListChanged()
00149   {
00150     for (int i = 0; i < tabs.size(); i++)
00151       ((WizardListener) tabs.get(i)).backendListChanged();
00152   }
00153 
00154   /**
00155    * @see org.objectweb.cjdbc.console.wizard.listeners.WizardListener#distributionChanged()
00156    */
00157   public void distributionChanged()
00158   {
00159     setTabEnabled(WizardConstants.TAB_DISTRIBUTION, isDistributedDatabase());
00160 
00161     for (int i = 0; i < tabs.size(); i++)
00162       ((WizardListener) tabs.get(i)).distributionChanged();
00163   }
00164 
00165   /**
00166    * @see org.objectweb.cjdbc.console.wizard.listeners.WizardListener#usersChanged()
00167    */
00168   public void usersChanged()
00169   {
00170     for (int i = 0; i < tabs.size(); i++)
00171       ((WizardListener) tabs.get(i)).usersChanged();
00172   }
00173 
00174   /**
00175    * Import a <code>Document</code> and set the gui so that all the fields are
00176    * filled with information from that document. This will reset all the values
00177    * already filled in.
00178    * 
00179    * @param doc a document parsed with the dom4j api.
00180    */
00181   public void importDocumentFromXml(Document doc)
00182   {
00183     ///////////////////////////////////////////////////////////////////////////
00184     // Virtual Database attributes
00185     ///////////////////////////////////////////////////////////////////////////
00186     Element root = doc.getRootElement();
00187     Node virtualDabase = doc.selectSingleNode("//" + DatabasesXmlTags.ELT_CJDBC
00188         + "/" + DatabasesXmlTags.ELT_VirtualDatabase);
00189     virtualDatabaseTab.vdbName.setText(virtualDabase.valueOf("@"
00190         + DatabasesXmlTags.ATT_name));
00191     virtualDatabaseTab.maxNbOfConnections.setValue(Integer
00192         .parseInt(virtualDabase.valueOf("@"
00193             + DatabasesXmlTags.ATT_maxNbOfConnections)));
00194 
00195     String pool = virtualDabase.valueOf("@" + DatabasesXmlTags.ATT_poolThreads);
00196     if (!Boolean.valueOf(pool).booleanValue())
00197       virtualDatabaseTab.pool.doClick();
00198     virtualDatabaseTab.minNbOfThreads.setValue(Integer.parseInt(virtualDabase
00199         .valueOf("@" + DatabasesXmlTags.ATT_minNbOfThreads)));
00200     virtualDatabaseTab.maxNbOfThreads.setValue(Integer.parseInt(virtualDabase
00201         .valueOf("@" + DatabasesXmlTags.ATT_maxNbOfThreads)));
00202     virtualDatabaseTab.maxThreadIdleTime.setValue(Integer
00203         .parseInt(virtualDabase.valueOf("@"
00204             + DatabasesXmlTags.ATT_maxThreadIdleTime)));
00205     virtualDatabaseTab.sqlDumpLength.setValue(Integer.parseInt(virtualDabase
00206         .valueOf("@" + DatabasesXmlTags.ATT_sqlDumpLength)));
00207     virtualDatabaseTab.blob.setSelectedItem((virtualDabase.valueOf("@"
00208         + DatabasesXmlTags.ATT_blobEncodingMethod)));
00209 
00210     ///////////////////////////////////////////////////////////////////////////
00211     // Virtual Database distribution
00212     ///////////////////////////////////////////////////////////////////////////
00213     Node distribution = virtualDabase
00214         .selectSingleNode(DatabasesXmlTags.ELT_Distribution);
00215     if (distribution != null)
00216     {
00217       virtualDatabaseTab.distributed.doClick();
00218       distributionTab.groupName.setText(distribution.valueOf("@"
00219           + DatabasesXmlTags.ATT_groupName));
00220       distributionTab.macroClock.setSelectedItem(distribution.valueOf("@"
00221           + DatabasesXmlTags.ATT_macroClock));
00222       distributionTab.castTimeout.setValue(Integer.parseInt(distribution
00223           .valueOf("@" + DatabasesXmlTags.ATT_castTimeout)));
00224     }
00225 
00226     ///////////////////////////////////////////////////////////////////////////
00227     // authentication
00228     ///////////////////////////////////////////////////////////////////////////
00229     Node authentication = virtualDabase
00230         .selectSingleNode(DatabasesXmlTags.ELT_AuthenticationManager);
00231     Node userNode;
00232     User user;
00233     Iterator iter;
00234 
00235     List admins = authentication.selectNodes(DatabasesXmlTags.ELT_Admin + "/"
00236         + DatabasesXmlTags.ELT_User);
00237     iter = admins.iterator();
00238     while (iter.hasNext())
00239     {
00240       userNode = (Node) iter.next();
00241       user = new User();
00242       user.setUsername(userNode.valueOf("@" + DatabasesXmlTags.ATT_username));
00243       user.setPassword(userNode.valueOf("@" + DatabasesXmlTags.ATT_password));
00244       authenticationTab.admin.getUsersCombo().addItem(user);
00245     }
00246 
00247     List users = authentication.selectNodes(DatabasesXmlTags.ELT_VirtualUsers
00248         + "/" + DatabasesXmlTags.ELT_VirtualLogin);
00249     iter = users.iterator();
00250     while (iter.hasNext())
00251     {
00252       userNode = (Node) iter.next();
00253       user = new User();
00254       user.setUsername(userNode.valueOf("@" + DatabasesXmlTags.ATT_vLogin));
00255       user.setPassword(userNode.valueOf("@" + DatabasesXmlTags.ATT_vPassword));
00256       authenticationTab.users.getUsersCombo().addItem(user);
00257     }
00258     this.usersChanged();
00259 
00260     ///////////////////////////////////////////////////////////////////////////
00261     // backends
00262     ///////////////////////////////////////////////////////////////////////////
00263     List backends = virtualDabase
00264         .selectNodes(DatabasesXmlTags.ELT_DatabaseBackend);
00265     iter = backends.iterator();
00266     JComboBox backendsCombo = backendsTab.backendsCombo;
00267     Node backendNode;
00268     Node schemaNode;
00269     while (iter.hasNext())
00270     {
00271       backendNode = (Node) iter.next();
00272       schemaNode = backendNode
00273           .selectSingleNode(DatabasesXmlTags.ELT_DatabaseSchema);
00274       Backend backend = new Backend();
00275       backend.setName(backendNode.valueOf("@" + DatabasesXmlTags.ATT_name));
00276       backend.setDriver(backendNode.valueOf("@" + DatabasesXmlTags.ATT_driver));
00277       backend.setDriverPath(backendNode.valueOf("@"
00278           + DatabasesXmlTags.ATT_driverPath));
00279       backend.setUrl(backendNode.valueOf("@" + DatabasesXmlTags.ATT_url));
00280       backend.setConnectionTestStatement(backendNode.valueOf("@"
00281           + DatabasesXmlTags.ATT_connectionTestStatement));
00282       if (schemaNode != null)
00283       {
00284         backend.setGatherSystemTables(schemaNode.valueOf("@"
00285             + DatabasesXmlTags.ATT_gatherSystemTables));
00286         backend.setDynamicPrecision(schemaNode.valueOf("@"
00287             + DatabasesXmlTags.ATT_dynamicPrecision));
00288       }
00289       ///////////////////////////////////////////////////////////////////////////
00290       // Connection managers
00291       ///////////////////////////////////////////////////////////////////////////
00292       Hashtable managers = new Hashtable();
00293       backend.setConnectionManagers(managers);
00294       List connectionManagers = backendNode
00295           .selectNodes(DatabasesXmlTags.ELT_ConnectionManager);
00296       Iterator iterator = connectionManagers.iterator();
00297       while (iterator.hasNext())
00298       {
00299         Node connect = (Node) iterator.next();
00300         User user2 = getUser(connect.valueOf("@" + DatabasesXmlTags.ATT_vLogin));
00301         if (user2 != null)
00302         {
00303           ConnectionInfo info = new ConnectionInfo();
00304           info.setRLogin(connect.valueOf("@" + DatabasesXmlTags.ATT_rLogin));
00305           info.setRPassword(connect.valueOf("@"
00306               + DatabasesXmlTags.ATT_rPassword));
00307           info.setUrlParameters(connect.valueOf("@"
00308               + DatabasesXmlTags.ATT_urlParameters));
00309           ConnectionTypeInfo cti = new ConnectionTypeInfo();
00310           ArrayList values = new ArrayList();
00311 
00312           Node simple = connect
00313               .selectSingleNode(DatabasesXmlTags.ELT_SimpleConnectionManager);
00314           if (simple != null)
00315           {
00316             cti.setType(WizardConstants.CONNECTION_MANAGERS[0]);
00317           }
00318           Node failfast = connect
00319               .selectSingleNode(DatabasesXmlTags.ELT_FailFastPoolConnectionManager);
00320           if (failfast != null)
00321           {
00322             cti.setType(WizardConstants.CONNECTION_MANAGERS[1]);
00323             values.add(failfast.valueOf("@" + DatabasesXmlTags.ATT_poolSize));
00324           }
00325           Node random = connect
00326               .selectSingleNode(DatabasesXmlTags.ELT_RandomWaitPoolConnectionManager);
00327           if (random != null)
00328           {
00329             cti.setType(WizardConstants.CONNECTION_MANAGERS[2]);
00330             values.add(random.valueOf("@" + DatabasesXmlTags.ATT_poolSize));
00331             values.add(random.valueOf("@" + DatabasesXmlTags.ATT_timeout));
00332           }
00333           Node variable = connect
00334               .selectSingleNode(DatabasesXmlTags.ELT_VariablePoolConnectionManager);
00335           if (variable != null)
00336           {
00337             cti.setType(WizardConstants.CONNECTION_MANAGERS[3]);
00338             values.add(variable
00339                 .valueOf("@" + DatabasesXmlTags.ATT_initPoolSize));
00340             values
00341                 .add(variable.valueOf("@" + DatabasesXmlTags.ATT_minPoolSize));
00342             values
00343                 .add(variable.valueOf("@" + DatabasesXmlTags.ATT_maxPoolSize));
00344             values
00345                 .add(variable.valueOf("@" + DatabasesXmlTags.ATT_idleTimeout));
00346             values
00347                 .add(variable.valueOf("@" + DatabasesXmlTags.ATT_waitTimeout));
00348           }
00349 
00350           cti.setValues(values);
00351           info.setConnectionTypeInfo(cti);
00352           managers.put(user2, info);
00353         }
00354       }
00355       backendsCombo.addItem(backend);
00356     }
00357     backendsCombo.setSelectedIndex(0);
00358 
00359     ///////////////////////////////////////////////////////////////////////////
00360     // Request manager
00361     ///////////////////////////////////////////////////////////////////////////
00362     Node requestManager = virtualDabase
00363         .selectSingleNode(DatabasesXmlTags.ELT_RequestManager);
00364 
00365     if (requestManager.valueOf("@" + DatabasesXmlTags.ATT_caseSensitiveParsing)
00366         .equals("true"))
00367       requestManagerTab.caseSensitiveParsing.doClick();
00368     requestManagerTab.beginTimeout.setValue(Integer.parseInt(requestManager
00369         .valueOf("@" + DatabasesXmlTags.ATT_beginTimeout)));
00370     requestManagerTab.commitTimeout.setValue(Integer.parseInt(requestManager
00371         .valueOf("@" + DatabasesXmlTags.ATT_commitTimeout)));
00372     requestManagerTab.rollbackTimeout.setValue(Integer.parseInt(requestManager
00373         .valueOf("@" + DatabasesXmlTags.ATT_rollbackTimeout)));
00374 
00375     ///////////////////////////////////////////////////////////////////////////
00376     // Scheduler
00377     ///////////////////////////////////////////////////////////////////////////
00378     Element scheduler = (Element) requestManager
00379         .selectSingleNode(DatabasesXmlTags.ELT_RequestScheduler);
00380     Element schedulerElement = (Element) scheduler.elements().iterator().next();
00381     requestManagerTab.scheduler.setSelectedItem(schedulerElement.getName());
00382     requestManagerTab.schedulerLevel.setSelectedItem(schedulerElement
00383         .valueOf("@" + DatabasesXmlTags.ATT_level));
00384 
00385     ///////////////////////////////////////////////////////////////////////////
00386     // Loadbalancer
00387     ///////////////////////////////////////////////////////////////////////////
00388     Element loadbalancer = (Element) requestManager
00389         .selectSingleNode(DatabasesXmlTags.ELT_LoadBalancer);
00390     Element loadElement = (Element) loadbalancer.elements().iterator().next();
00391     String raidbLoad = loadElement.getName();
00392     if (raidbLoad.startsWith(DatabasesXmlTags.ELT_RAIDb_1)
00393         || raidbLoad.startsWith(DatabasesXmlTags.ELT_RAIDb_2))
00394     {
00395       Element wait = (Element) loadElement
00396           .selectSingleNode(DatabasesXmlTags.ELT_WaitForCompletion);
00397       if (wait != null)
00398         requestManagerTab.wait4completion.setSelectedItem(wait.valueOf("@"
00399             + DatabasesXmlTags.ATT_policy));
00400 
00401       Iterator raidb = loadElement.elements().iterator();
00402       while (raidb.hasNext())
00403       {
00404         Element raid = (Element) raidb.next();
00405         String name = raid.getName();
00406         if (name.startsWith(DatabasesXmlTags.ELT_RAIDb_1)
00407             || name.startsWith(DatabasesXmlTags.ELT_RAIDb_2))
00408         {
00409           requestManagerTab.loadbalancer.setSelectedItem(name);
00410         }
00411       }
00412     }
00413     else
00414       requestManagerTab.loadbalancer.setSelectedItem(loadElement.getName());
00415 
00416     ///////////////////////////////////////////////////////////////////////////
00417     // Cache
00418     ///////////////////////////////////////////////////////////////////////////
00419     Element cache = (Element) requestManager
00420         .selectSingleNode(DatabasesXmlTags.ELT_RequestCache);
00421     if (cache != null)
00422     {
00423       requestManagerTab.usecaching.doClick();
00424 
00425       List cacheElements = cache.elements();
00426       iter = cacheElements.iterator();
00427       while (iter.hasNext())
00428       {
00429         Element celem = (Element) iter.next();
00430         if (celem.getName()
00431             .equalsIgnoreCase(DatabasesXmlTags.ELT_MetadataCache))
00432         {
00433           cachingTab.metadataenable.doClick();
00434           cachingTab.maxNbOfMetadata.setValue(Integer.parseInt(celem
00435               .valueOf("@" + DatabasesXmlTags.ATT_maxNbOfMetadata)));
00436           cachingTab.maxNbOfField.setValue(Integer.parseInt(celem.valueOf("@"
00437               + DatabasesXmlTags.ATT_maxNbOfField)));
00438         }
00439         else if (celem.getName().equalsIgnoreCase(
00440             DatabasesXmlTags.ELT_ParsingCache))
00441         {
00442           cachingTab.parsingenable.doClick();
00443           boolean background = Boolean.valueOf(
00444               celem.valueOf("@" + DatabasesXmlTags.ATT_backgroundParsing))
00445               .booleanValue();
00446           if (background)
00447             cachingTab.backgroundParsing.doClick();
00448           cachingTab.maxNbOfEntries.setValue(Integer.parseInt(celem.valueOf("@"
00449               + DatabasesXmlTags.ATT_maxNbOfEntries)));
00450         }
00451         else if (celem.getName().equalsIgnoreCase(
00452             DatabasesXmlTags.ELT_ResultCache))
00453         {
00454           cachingTab.resultenable.doClick();
00455           cachingTab.granularity.setSelectedItem(celem.valueOf("@"
00456               + DatabasesXmlTags.ATT_granularity));
00457           cachingTab.resultMaxNbOfEntries.setValue(Integer.parseInt(celem
00458               .valueOf("@" + DatabasesXmlTags.ATT_maxNbOfEntries)));
00459           cachingTab.pendingTimeout.setValue(Integer.parseInt(celem.valueOf("@"
00460               + DatabasesXmlTags.ATT_pendingTimeout)));
00461         }
00462       }
00463     }
00464 
00465     ///////////////////////////////////////////////////////////////////////////
00466     // Recovery
00467     ///////////////////////////////////////////////////////////////////////////
00468     Node recovery = requestManager
00469         .selectSingleNode(DatabasesXmlTags.ELT_RecoveryLog);
00470     if (recovery != null)
00471     {
00472       Node jdbcRecovery = recovery
00473           .selectSingleNode(DatabasesXmlTags.ELT_JDBCRecoveryLog);
00474       requestManagerTab.userecoverylog.doClick();
00475       recoveryTab.driver.setText(jdbcRecovery.valueOf("@"
00476           + DatabasesXmlTags.ATT_driver));
00477       recoveryTab.driverPath.setText(jdbcRecovery.valueOf("@"
00478           + DatabasesXmlTags.ATT_driverPath));
00479       recoveryTab.url.setText(jdbcRecovery.valueOf("@"
00480           + DatabasesXmlTags.ATT_url));
00481       recoveryTab.login.setText(jdbcRecovery.valueOf("@"
00482           + DatabasesXmlTags.ATT_login));
00483       recoveryTab.password.setText(jdbcRecovery.valueOf("@"
00484           + DatabasesXmlTags.ATT_password));
00485       recoveryTab.requestTimeout.setValue(Integer.parseInt(jdbcRecovery
00486           .valueOf("@" + DatabasesXmlTags.ATT_requestTimeout)));
00487     }
00488 
00489     this.validate();
00490     this.repaint();
00491   }
00492 
00493   private User getUser(String userName)
00494   {
00495     JComboBox box = authenticationTab.users.getUsersCombo();
00496     int count = box.getItemCount();
00497     for (int i = 0; i < count; i++)
00498     {
00499       User user = (User) box.getItemAt(i);
00500       if (user.getUsername().equals(userName))
00501         return user;
00502     }
00503     return null;
00504   }
00505 
00506   /**
00507    * This will export the content of all the wizard fields to a dom4j
00508    * <code>Document</code>
00509    * 
00510    * @return a dom4j Document
00511    */
00512   public Document exportDocumentToXml()
00513   {
00514 
00515     //    DocumentType doctype = DocumentFactory.getInstance()
00516     //        .createDocType(
00517     //            DatabasesXmlTags.ELT_CJDBC,
00518     //            "-//ObjectWeb//DTD C-JDBC " + Constants.VERSION + "//EN",
00519     //            "http://c-jdbc.objectweb.org/dtds/c-jdbc-" + Constants.VERSION
00520     //                + ".dtd");
00521     DocumentType doctype = DocumentFactory.getInstance().createDocType(
00522         DatabasesXmlTags.ELT_CJDBC, "-//ObjectWeb//DTD C-JDBC 1.1//EN",
00523         "http://c-jdbc.objectweb.org/dtds/c-jdbc-1.1.dtd");
00524     Document document = DocumentFactory.getInstance().createDocument();
00525     document.setDocType(doctype);
00526     Element root = document.addElement(DatabasesXmlTags.ELT_CJDBC);
00527 
00528     ///////////////////////////////////////////////////////////////////////////
00529     // Virtual Database attributes
00530     ///////////////////////////////////////////////////////////////////////////
00531 
00532     Element virtualDatabase = root
00533         .addElement(DatabasesXmlTags.ELT_VirtualDatabase);
00534     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_name,
00535         virtualDatabaseTab.vdbName.getText());
00536     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_maxNbOfConnections, ""
00537         + virtualDatabaseTab.maxNbOfConnections.getValue());
00538     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_poolThreads, ""
00539         + (virtualDatabaseTab.pool.getSelectedObjects() != null));
00540     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_minNbOfThreads, ""
00541         + virtualDatabaseTab.minNbOfThreads.getValue());
00542     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_maxNbOfThreads, ""
00543         + virtualDatabaseTab.maxNbOfThreads.getValue());
00544     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_maxThreadIdleTime, ""
00545         + virtualDatabaseTab.maxThreadIdleTime.getValue());
00546     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_sqlDumpLength, ""
00547         + virtualDatabaseTab.sqlDumpLength.getValue());
00548     virtualDatabase.addAttribute(DatabasesXmlTags.ATT_blobEncodingMethod, ""
00549         + virtualDatabaseTab.blob.getSelectedItem());
00550 
00551     ///////////////////////////////////////////////////////////////////////////
00552     // Virtual Database distribution
00553     ///////////////////////////////////////////////////////////////////////////
00554     if (isDistributedDatabase())
00555     {
00556       Element Distribution = virtualDatabase
00557           .addElement(DatabasesXmlTags.ELT_Distribution);
00558       Distribution.addAttribute(DatabasesXmlTags.ATT_groupName,
00559           distributionTab.groupName.getText());
00560       Distribution.addAttribute(DatabasesXmlTags.ATT_macroClock,
00561           distributionTab.macroClock.getSelectedItem().toString());
00562       Distribution.addAttribute(DatabasesXmlTags.ATT_castTimeout, ""
00563           + distributionTab.castTimeout.getValue());
00564     }
00565 
00566     ///////////////////////////////////////////////////////////////////////////
00567     // authentication
00568     ///////////////////////////////////////////////////////////////////////////
00569     Element authentication = virtualDatabase
00570         .addElement(DatabasesXmlTags.ELT_AuthenticationManager);
00571     Element admin = authentication.addElement(DatabasesXmlTags.ELT_Admin);
00572     JComboBox adminBox = authenticationTab.admin.getUsersCombo();
00573     int count = adminBox.getItemCount();
00574     for (int i = 0; i < count; i++)
00575     {
00576       User user = (User) adminBox.getItemAt(i);
00577       admin.addElement(DatabasesXmlTags.ELT_User).addAttribute(
00578           DatabasesXmlTags.ATT_username, user.getUsername()).addAttribute(
00579           DatabasesXmlTags.ATT_password, user.getPassword());
00580     }
00581 
00582     Element users = authentication
00583         .addElement(DatabasesXmlTags.ELT_VirtualUsers);
00584     JComboBox virtualBox = authenticationTab.users.getUsersCombo();
00585     count = virtualBox.getItemCount();
00586     for (int i = 0; i < count; i++)
00587     {
00588       User user = (User) virtualBox.getItemAt(i);
00589       users.addElement(DatabasesXmlTags.ELT_VirtualLogin).addAttribute(
00590           DatabasesXmlTags.ATT_vLogin, user.getUsername()).addAttribute(
00591           DatabasesXmlTags.ATT_vPassword, user.getPassword());
00592     }
00593 
00594     ///////////////////////////////////////////////////////////////////////////
00595     // backends
00596     ///////////////////////////////////////////////////////////////////////////
00597     JComboBox backends = backendsTab.backendsCombo;
00598     int backcount = backends.getItemCount();
00599     for (int i = 0; i < backcount; i++)
00600     {
00601       Backend backend = (Backend) backends.getItemAt(i);
00602       Element backende = virtualDatabase
00603           .addElement(DatabasesXmlTags.ELT_DatabaseBackend);
00604       backende.addAttribute(DatabasesXmlTags.ATT_name, backend.getName());
00605       backende.addAttribute(DatabasesXmlTags.ATT_driver, backend.getDriver());
00606       backende.addAttribute(DatabasesXmlTags.ATT_driverPath, backend
00607           .getDriverPath());
00608       backende.addAttribute(DatabasesXmlTags.ATT_url, backend.getUrl());
00609       backende.addAttribute(DatabasesXmlTags.ATT_connectionTestStatement,
00610           backend.getConnectionTestStatement());
00611 
00612       Element schema = backende.addElement(DatabasesXmlTags.ELT_DatabaseSchema);
00613       schema.addAttribute(DatabasesXmlTags.ATT_dynamicPrecision, backend
00614           .getDynamicPrecision());
00615       if (Boolean.valueOf(backend.getGatherSystemTables()).booleanValue())
00616         schema.addAttribute(DatabasesXmlTags.ATT_gatherSystemTables, backend
00617             .getGatherSystemTables());
00618 
00619       ///////////////////////////////////////////////////////////////////////////
00620       // Connection managers
00621       ///////////////////////////////////////////////////////////////////////////
00622       Hashtable managers = backend.getConnectionManagers();
00623       Enumeration keys = managers.keys();
00624       while (keys.hasMoreElements())
00625       {
00626         User user = (User) keys.nextElement();
00627         ConnectionInfo info = (ConnectionInfo) managers.get(user);
00628         Element connection = backende
00629             .addElement(DatabasesXmlTags.ELT_ConnectionManager);
00630         connection
00631             .addAttribute(DatabasesXmlTags.ATT_vLogin, user.getUsername());
00632         connection.addAttribute(DatabasesXmlTags.ATT_rLogin, info.getRLogin());
00633         connection.addAttribute(DatabasesXmlTags.ATT_rPassword, info
00634             .getRPassword());
00635         connection.addAttribute(DatabasesXmlTags.ATT_urlParameters, info
00636             .getUrlParameters());
00637         ConnectionTypeInfo cti = info.getConnectionTypeInfo();
00638 
00639         String type = cti.getType();
00640         if (type == WizardConstants.CONNECTION_MANAGERS[0])
00641           connection.addElement(DatabasesXmlTags.ELT_SimpleConnectionManager);
00642         else if (type == WizardConstants.CONNECTION_MANAGERS[1])
00643         {
00644           Element manager = connection
00645               .addElement(DatabasesXmlTags.ELT_FailFastPoolConnectionManager);
00646           manager.addAttribute(DatabasesXmlTags.ATT_poolSize, ""
00647               + cti.getValue(0));
00648         }
00649         else if (type == WizardConstants.CONNECTION_MANAGERS[2])
00650         {
00651           Element manager = connection
00652               .addElement(DatabasesXmlTags.ELT_RandomWaitPoolConnectionManager);
00653           manager.addAttribute(DatabasesXmlTags.ATT_poolSize, ""
00654               + cti.getValue(0));
00655           manager.addAttribute(DatabasesXmlTags.ATT_timeout, ""
00656               + cti.getValue(1));
00657         }
00658         else if (type == WizardConstants.CONNECTION_MANAGERS[3])
00659         {
00660           Element manager = connection
00661               .addElement(DatabasesXmlTags.ELT_VariablePoolConnectionManager);
00662           manager.addAttribute(DatabasesXmlTags.ATT_initPoolSize, ""
00663               + cti.getValue(0));
00664           manager.addAttribute(DatabasesXmlTags.ATT_minPoolSize, ""
00665               + cti.getValue(1));
00666           manager.addAttribute(DatabasesXmlTags.ATT_maxPoolSize, ""
00667               + cti.getValue(2));
00668           manager.addAttribute(DatabasesXmlTags.ATT_idleTimeout, ""
00669               + cti.getValue(3));
00670           manager.addAttribute(DatabasesXmlTags.ATT_waitTimeout, ""
00671               + cti.getValue(4));
00672         }
00673       }
00674     }
00675 
00676     ///////////////////////////////////////////////////////////////////////////
00677     // Request manager
00678     ///////////////////////////////////////////////////////////////////////////
00679     Element requestManager = virtualDatabase
00680         .addElement(DatabasesXmlTags.ELT_RequestManager);
00681 
00682     requestManager.addAttribute(DatabasesXmlTags.ATT_caseSensitiveParsing,
00683         Boolean.toString(requestManagerTab.caseSensitiveParsing
00684             .getSelectedObjects() != null));
00685     requestManager.addAttribute(DatabasesXmlTags.ATT_beginTimeout,
00686         requestManagerTab.beginTimeout.getValue() + "");
00687     requestManager.addAttribute(DatabasesXmlTags.ATT_commitTimeout,
00688         requestManagerTab.commitTimeout.getValue() + "");
00689     requestManager.addAttribute(DatabasesXmlTags.ATT_rollbackTimeout,
00690         requestManagerTab.rollbackTimeout.getValue() + "");
00691 
00692     ///////////////////////////////////////////////////////////////////////////
00693     // Scheduler
00694     ///////////////////////////////////////////////////////////////////////////
00695     Element scheduler = requestManager
00696         .addElement(DatabasesXmlTags.ELT_RequestScheduler);
00697     int ischeduler = requestManagerTab.scheduler.getSelectedIndex();
00698     String level = (String) requestManagerTab.schedulerLevel.getSelectedItem();
00699     switch (ischeduler)
00700     {
00701       case 0 :
00702         scheduler.addElement(DatabasesXmlTags.ELT_SingleDBScheduler)
00703             .addAttribute(DatabasesXmlTags.ATT_level, level);
00704         break;
00705       case 1 :
00706         scheduler.addElement(DatabasesXmlTags.ELT_RAIDb0Scheduler)
00707             .addAttribute(DatabasesXmlTags.ATT_level, level);
00708         break;
00709       case 2 :
00710         scheduler.addElement(DatabasesXmlTags.ELT_RAIDb1Scheduler)
00711             .addAttribute(DatabasesXmlTags.ATT_level, level);
00712         break;
00713       case 3 :
00714         scheduler.addElement(DatabasesXmlTags.ELT_RAIDb2Scheduler)
00715             .addAttribute(DatabasesXmlTags.ATT_level, level);
00716         break;
00717       default :
00718         break;
00719     }
00720 
00721     ///////////////////////////////////////////////////////////////////////////
00722     // Cache
00723     ///////////////////////////////////////////////////////////////////////////
00724     if (requestManagerTab.usecaching.getSelectedObjects() != null)
00725     {
00726       Element cache = requestManager
00727           .addElement(DatabasesXmlTags.ELT_RequestCache);
00728       if (cachingTab.metadataenable.getSelectedObjects() != null)
00729       {
00730         Element metadata = cache.addElement(DatabasesXmlTags.ELT_MetadataCache);
00731         metadata.addAttribute(DatabasesXmlTags.ATT_maxNbOfMetadata, ""
00732             + cachingTab.maxNbOfMetadata.getValue());
00733         metadata.addAttribute(DatabasesXmlTags.ATT_maxNbOfField, ""
00734             + cachingTab.maxNbOfField.getValue());
00735       }
00736       if (cachingTab.parsingenable.getSelectedObjects() != null)
00737       {
00738         Element parsing = cache.addElement(DatabasesXmlTags.ELT_ParsingCache);
00739         parsing
00740             .addAttribute(DatabasesXmlTags.ATT_backgroundParsing,
00741                 Boolean.toString(cachingTab.backgroundParsing
00742                     .getSelectedObjects() != null));
00743         parsing.addAttribute(DatabasesXmlTags.ATT_maxNbOfEntries, ""
00744             + cachingTab.maxNbOfEntries.getValue());
00745       }
00746       if (cachingTab.resultenable.getSelectedObjects() != null)
00747       {
00748         Element result = cache.addElement(DatabasesXmlTags.ELT_ResultCache);
00749         result.addAttribute(DatabasesXmlTags.ATT_granularity, ""
00750             + cachingTab.granularity.getSelectedItem());
00751         result.addAttribute(DatabasesXmlTags.ATT_maxNbOfEntries, ""
00752             + cachingTab.resultMaxNbOfEntries.getValue());
00753         result.addAttribute(DatabasesXmlTags.ATT_pendingTimeout, ""
00754             + cachingTab.pendingTimeout.getValue());
00755         result.addComment(WizardTranslate.get("not.supported.caching.rules"));
00756       }
00757     }
00758 
00759     ///////////////////////////////////////////////////////////////////////////
00760     // Loadbalancer
00761     ///////////////////////////////////////////////////////////////////////////
00762     Element loadbalancer = requestManager
00763         .addElement(DatabasesXmlTags.ELT_LoadBalancer);
00764     String loadElement = (String) requestManagerTab.loadbalancer
00765         .getSelectedItem();
00766 
00767     Element currentLoadbalancer = loadbalancer;
00768 
00769     if (loadElement.startsWith(DatabasesXmlTags.ELT_RAIDb_0))
00770       currentLoadbalancer = loadbalancer
00771           .addElement(DatabasesXmlTags.ELT_RAIDb_0);
00772     if (loadElement.startsWith(DatabasesXmlTags.ELT_RAIDb_1))
00773     {
00774       currentLoadbalancer = loadbalancer
00775           .addElement(DatabasesXmlTags.ELT_RAIDb_1);
00776       currentLoadbalancer.addElement(DatabasesXmlTags.ELT_WaitForCompletion)
00777           .addAttribute(DatabasesXmlTags.ATT_policy,
00778               (String) requestManagerTab.wait4completion.getSelectedItem());
00779     }
00780     if (loadElement.startsWith(DatabasesXmlTags.ELT_RAIDb_2))
00781     {
00782       currentLoadbalancer = loadbalancer
00783           .addElement(DatabasesXmlTags.ELT_RAIDb_2);
00784       currentLoadbalancer.addElement(DatabasesXmlTags.ELT_WaitForCompletion)
00785           .addAttribute(DatabasesXmlTags.ATT_policy,
00786               (String) requestManagerTab.wait4completion.getSelectedItem());
00787     }
00788     if (loadElement.startsWith(DatabasesXmlTags.ELT_ParallelDB))
00789       currentLoadbalancer = loadbalancer
00790           .addElement(DatabasesXmlTags.ELT_ParallelDB);
00791 
00792     currentLoadbalancer.addElement(loadElement);
00793     currentLoadbalancer.addComment(WizardTranslate
00794         .get("not.supported.macro.handling"));
00795     currentLoadbalancer.addComment(WizardTranslate
00796         .get("not.supported.create.policy"));
00797 
00798     ///////////////////////////////////////////////////////////////////////////
00799     // Recovery
00800     ///////////////////////////////////////////////////////////////////////////
00801     if (requestManagerTab.userecoverylog.getSelectedObjects() != null)
00802     {
00803       Element recovery = requestManager
00804           .addElement(DatabasesXmlTags.ELT_RecoveryLog);
00805       Element jdbc = recovery.addElement(DatabasesXmlTags.ELT_JDBCRecoveryLog);
00806       jdbc.addAttribute(DatabasesXmlTags.ATT_driver, recoveryTab.driver
00807           .getText());
00808       jdbc.addAttribute(DatabasesXmlTags.ATT_driverPath, recoveryTab.driverPath
00809           .getText());
00810       jdbc.addAttribute(DatabasesXmlTags.ATT_url, recoveryTab.url.getText());
00811       jdbc
00812           .addAttribute(DatabasesXmlTags.ATT_login, recoveryTab.login.getText());
00813       jdbc.addAttribute(DatabasesXmlTags.ATT_password, recoveryTab.password
00814           .getText());
00815       jdbc.addAttribute(DatabasesXmlTags.ATT_requestTimeout, ""
00816           + recoveryTab.requestTimeout.getValue());
00817 
00818       jdbc.addElement(DatabasesXmlTags.ELT_RecoveryLogTable);
00819       jdbc.addElement(DatabasesXmlTags.ELT_CheckpointTable);
00820       jdbc.addElement(DatabasesXmlTags.ELT_BackendTable);
00821     }
00822 
00823     return document;
00824   }
00825 }

Generated on Mon Apr 11 22:01:35 2005 for C-JDBC by  doxygen 1.3.9.1