package net.ms.designer.ui.preference; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.text.TableView; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import net.ms.designer.core.DBTool; import net.ms.designer.ui.view.WriteToDataSourceXML; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.internal.UIPlugin; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; //import net.ms.designer.editors.enumcomponentdetail.tools.WriteToProjectXML; public class DBConfigDialog extends TitleAreaDialog implements Serializable { Shell shell; public String[] connTypes; private Combo cbType; private Text txtName; private Text txtUserName; private Text txtUserPwd; private String connectionName; private Text txtServer; private Text txtPort; private Text txtDBName; private DBTool tool; private List dbToolList; Button testConnection ; private String conName; private int flag = 0; private String filePath; /** * @param parentShell */ public DBConfigDialog(Shell parentShell,List dbToolList,String conName) { super(parentShell); this.dbToolList = dbToolList; this.conName = conName; connTypes = new String[]{"DB2","MSSql","MySql","Oracle","Sybase"}; } protected Control createDialogArea(Composite parent) { // tool = new DBTool(); setTitle("���ݿ���Ϣ"); //$NON-NLS-1$ setMessage("�������ݿ�����"); //$NON-NLS-1$ Composite comp = (Composite) super.createDialogArea(parent); Composite composite = new Composite(comp, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginHeight = 5; layout.marginWidth = 20; layout.verticalSpacing = 8; layout.numColumns = 2; composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setLayout(layout); Label lblName = new Label(composite, SWT.NONE); lblName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblName.setText("��������"); //$NON-NLS-1$ txtName = new Text(composite, SWT.BORDER); txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label lblType = new Label(composite, SWT.NONE); lblType.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblType.setText("��������"); //$NON-NLS-1$ cbType = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.widthHint = 100; cbType.setLayoutData(gd); cbType.setItems(connTypes); cbType.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { // refreshTableList(); typeSelectChanged(); } public void widgetDefaultSelected(SelectionEvent e) { } }); Label lblConnServer = new Label(composite, SWT.NONE); lblConnServer.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblConnServer.setText("������"); //$NON-NLS-1$ txtServer = new Text(composite, SWT.BORDER); txtServer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label lblConnPort = new Label(composite, SWT.NONE); lblConnPort.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblConnPort.setText("�˿�"); //$NON-NLS-1$ txtPort = new Text(composite, SWT.BORDER); txtPort.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // txtPort.setText("1433"); Label lblConnDB = new Label(composite, SWT.NONE); lblConnDB.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblConnDB.setText("���ݿ�"); //$NON-NLS-1$ txtDBName = new Text(composite, SWT.BORDER); txtDBName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label lblUserName = new Label(composite, SWT.NONE); lblUserName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblUserName.setText("�û���"); //$NON-NLS-1$ txtUserName = new Text(composite, SWT.BORDER); txtUserName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label lblUserPwd = new Label(composite, SWT.NONE); lblUserPwd.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lblUserPwd.setText("����"); //$NON-NLS-1$ txtUserPwd = new Text(composite, SWT.BORDER | SWT.PASSWORD); txtUserPwd.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); initData(); Composite pan = new Composite(composite, SWT.NULL); pan.setLayout(new GridLayout()); testConnection = new Button(pan, SWT.PUSH); testConnection.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); testConnection.setText("��������"); //$NON-NLS-1$ setButtonLayoutData(testConnection); testConnection.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { tool.setDbName(txtDBName.getText()); tool.setDbType(cbType.getText()); tool.setUsername(txtUserName.getText()); tool.setPassword(txtUserPwd.getText()); tool.setPort(txtPort.getText()); tool.setServer(txtServer.getText()); tool.setConName(txtName.getText()); if(tool.testConnection()) { MessageBox mb = new MessageBox(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell()); mb.setMessage("Succeed!"); flag = 1; mb.open(); } else { MessageBox mb = new MessageBox(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell()); mb.setMessage("Failed!"); mb.open(); } } }); return comp; } private void initData(){ if(this.conName == null || this.conName.length()<1) { if(DBPreferencePage.dbToolList == null || DBPreferencePage.dbToolList.size()<1) { DBPreferencePage.dbToolList = new ArrayList(); } this.dbToolList = DBPreferencePage.dbToolList ; tool = new DBTool(); return; } else{ Iterator it = dbToolList.iterator(); while(it.hasNext()){ DBTool dbTool = (DBTool)it.next(); if(dbTool.getConName().toLowerCase().equals(this.conName.toLowerCase())){ this.tool = dbTool; break; } } this.txtDBName.setText(tool.getDbName()); this.cbType.setText(tool.getDbType()); this.txtUserName.setText(tool.getUsername()); this.txtUserPwd.setText(tool.getPassword()); this.txtPort.setText(tool.getPort()); this.txtServer.setText(tool.getServer()); this.txtName.setText(tool.getConName()); } } public void typeSelectChanged() { if (cbType.getText().equalsIgnoreCase("MSSQL")) { //$NON-NLS-1$ txtPort.setText("1433"); //$NON-NLS-1$ } if (cbType.getText().equalsIgnoreCase("Oracle")) { //$NON-NLS-1$ txtPort.setText("1521"); //$NON-NLS-1$ } if (cbType.getText().equalsIgnoreCase("DB2")) { //$NON-NLS-1$ txtPort.setText("50000"); //$NON-NLS-1$ } if (cbType.getText().equalsIgnoreCase("Informix")) { //$NON-NLS-1$ txtPort.setText("1533"); //$NON-NLS-1$ } if (cbType.getText().equalsIgnoreCase("Sybase")) { //$NON-NLS-1$ txtPort.setText("2638"); //$NON-NLS-1$ } if (cbType.getText().equalsIgnoreCase("MySql")) { //$NON-NLS-1$ txtPort.setText("3306"); //$NON-NLS-1$ } } public void okPressed() { if(tool == null){ MessageDialog.openConfirm(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), "���������", "���������"); return; } if(flag != 1){ MessageDialog.openConfirm(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(), "����Դ���Ӵ���", "����Դ���Ӵ���"); return; } if(!DBPreferencePage.dbToolList.contains(tool)) { // if(DBPreferencePage.dbToolList == null ||DBPreferencePage.dbToolList.size()<1) // { // DBPreferencePage.dbToolList.add(0,tool); // } // else DBPreferencePage.dbToolList.add(dbToolList.size(),tool); } WriteToDataSourceXML DataSourceXML = new WriteToDataSourceXML(null,null,dbToolList); DataSourceXML.setConName(tool.getConName()); DataSourceXML.setDataBase(tool.getDbName()); DataSourceXML.setDbType(tool.getDbType()); DataSourceXML.setPassWord(tool.getPassword()); DataSourceXML.setServer(tool.getServer()); DataSourceXML.setPort(tool.getPort()); DataSourceXML.setUserName(tool.getUsername()); File file = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()+"\\DataSourceXML.xml"); if(!file.exists()) { String path = ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()+"\\DataSourceXML.xml"; try { DataSourceXML.writeXMLFile(path); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { //����DataSourceXML�ļ���DataSourcesԪ�� DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); Document doc = null; try { doc = db.parse(file); Element root = doc.getDocumentElement(); NodeList name = doc.getElementsByTagName("DataSources"); //��DataSourceXML�ļ������д������ Element ds = doc.createElement("DataSource"); // Element projectName = doc.createElement("projectName"); // Text txtName = doc.createTextNode(getProjectName()); // projectName.appendChild(txtName); // ds.appendChild(projectName); Element conName = doc.createElement("conName"); org.w3c.dom.Text conName_model = (org.w3c.dom.Text) doc.createTextNode(tool.getConName()); conName.appendChild(conName_model); ds.appendChild(conName); Element server = doc.createElement("server"); org.w3c.dom.Text server_model = (org.w3c.dom.Text) doc.createTextNode(tool.getServer()); server.appendChild(server_model); ds.appendChild(server); Element userName = doc.createElement("userName"); org.w3c.dom.Text userName_model = (org.w3c.dom.Text) doc.createTextNode(tool.getUsername()); userName.appendChild(userName_model); ds.appendChild(userName); Element password = doc.createElement("password"); org.w3c.dom.Text password_model = (org.w3c.dom.Text)doc.createTextNode(tool.getPassword()); password.appendChild(password_model); ds.appendChild(password); Element dbType = doc.createElement("dbType"); org.w3c.dom.Text dbType_model = (org.w3c.dom.Text)doc.createTextNode(tool.getDbType()); dbType.appendChild(dbType_model); ds.appendChild(dbType); Element dataBase = doc.createElement("dataBase"); org.w3c.dom.Text dataBase_model =(org.w3c.dom.Text) doc.createTextNode(tool.getDbName()); dataBase.appendChild(dataBase_model); ds.appendChild(dataBase); Element port = doc.createElement("port"); org.w3c.dom.Text port_model = (org.w3c.dom.Text)doc.createTextNode(tool.getPort()); port.appendChild(port_model); ds.appendChild(port); // project.appendChild(ds); name.item(0).appendChild(ds); TransformerFactory tFactory =TransformerFactory.newInstance(); Transformer transformer = null; try { transformer = tFactory.newTransformer(); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(file); try { transformer.transform(source, result); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } DBPreferencePage.refresh(); super.okPressed(); } private boolean judge(Object c) { if(c instanceof Text) { if(((Text)c).getText().equals("")) { return false; } else return true; } else if(c instanceof Combo) { if(((Combo)c).getText().equals("")) { return false; } else return true; } else return false; } }