package net.ms.designer.ui.preference;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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 msdesigner.MsdesignerPlugin;
import net.ms.designer.core.MsEditorInput;
import net.ms.designer.core.DBTool;
import net.ms.designer.ui.wizard.NewAppWizard;
import org.eclipse.jdt.core.dom.SuperConstructorInvocation;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.*;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.Platform;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.internal.UIPlugin;
import org.eclipse.ui.internal.dialogs.ViewContentProvider;
import org.eclipse.ui.internal.dialogs.ViewLabelProvider;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.core.resources.ResourcesPlugin;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DBPreferencePage extends PreferencePage implements IWorkbenchPreferencePage ,Serializable
{
public static final String DBCONFIGPREF_ID = "net.ms.designer.ui.preference.DBPreferencePage";
static TableViewer viewer;
static Text txtPort;
static Text txtDBName;
static Text txtUserName;
Composite parent2;
public static List dbToolList ; //�������в������б�
List dbTreeViewList; //ֻ����treeView����ʾ�IJ���
public static String projectName;
public static void Show() {
DBPreferencePage dbConf = new DBPreferencePage();
IPreferenceNode targetNode = new PreferenceNode(DBPreferencePage.DBCONFIGPREF_ID, dbConf);
PreferenceManager manager = new PreferenceManager();
manager.addToRoot(targetNode);
PreferenceDialog dialog = new PreferenceDialog(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow()
.getShell(), manager);
dialog.create();
dialog.setMessage(targetNode.getLabelText());
dialog.open();
}
public void init(IWorkbench workbench)
{
// ��ȡXML�ļ��е�����������Ϣ lili
if(dbToolList == null)
{
String dataSource;
File file = new File(ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString()+"\\DataSourceXML.xml");
if(file.exists())
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
System.exit(1);
}
Document doc = null;
try {
try {
doc = db.parse(file);
} catch (SAXException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (DOMException dom) {
System.err.println(dom.getMessage());
System.exit(1);
} catch (IOException ioe) {
System.err.println(ioe);
System.exit(1);
}
dbToolList = new ArrayList();
Element root = doc.getDocumentElement();
NodeList dataSources = root.getElementsByTagName("DataSource");
if(dataSources.getLength() > 0)
{
for(int i = 0; i < dataSources.getLength(); i++)
{
DBTool dbTool2 = new DBTool();
Element data = (Element)dataSources.item(i);
NodeList one = data.getElementsByTagName("conName");
Element contant = (Element)one.item(0);
org.w3c.dom.Text t1 = (org.w3c.dom.Text) contant.getFirstChild();
dbTool2.setConName(t1.getNodeValue());
NodeList two = data.getElementsByTagName("dataBase");
Element contant2 = (Element)two.item(0);
org.w3c.dom.Text t2 = (org.w3c.dom.Text) contant2.getFirstChild();
dbTool2.setDbName(t2.getNodeValue());
NodeList three = data.getElementsByTagName("dbType");
Element contant3 = (Element)three.item(0);
org.w3c.dom.Text t3 = (org.w3c.dom.Text) contant3.getFirstChild();
dbTool2.setDbType(t3.getNodeValue());
NodeList fore = data.getElementsByTagName("password");
Element contant4 = (Element)fore.item(0);
org.w3c.dom.Text t4 = (org.w3c.dom.Text) contant4.getFirstChild();
dbTool2.setPassword(t4.getNodeValue());
NodeList five = data.getElementsByTagName("port");
Element contant5 = (Element)five.item(0);
org.w3c.dom.Text t5 = (org.w3c.dom.Text) contant5.getFirstChild();
dbTool2.setPort(t5.getNodeValue());
NodeList six = data.getElementsByTagName("server");
Element contant6 = (Element)six.item(0);
org.w3c.dom.Text t6 = (org.w3c.dom.Text) contant6.getFirstChild();
dbTool2.setServer(t6.getNodeValue());
NodeList seven = data.getElementsByTagName("userName");
Element contant7 = (Element)seven.item(0);
org.w3c.dom.Text t7 = (org.w3c.dom.Text) contant7.getFirstChild();
dbTool2.setUsername(t7.getNodeValue());
dbToolList.add(dbTool2);
}
}
}
}
setPreferenceStore(MsdesignerPlugin.getDefault().getPreferenceStore());
}
public Control createContents(Composite parent)
{
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = 5;
layout.marginWidth = 0;
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Label caption = new Label(composite, SWT.NONE);
GridData gd = new GridData();
gd.horizontalSpan = 2;
caption.setLayoutData(gd);
caption.setText("�������ݿ�����"); //$NON-NLS-1$
createDBInfoGroup(composite);
createDBInfoDetailGroup(composite);
return composite;
}
private void createDBInfoDetailGroup(Composite composite)
{
Group group = new Group(composite, SWT.NONE);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
group.setLayoutData(gd);
GridLayout gl = new GridLayout();
gl.numColumns = 2;
gl.makeColumnsEqualWidth = false;
group.setLayout(gl);
group.setFont(composite.getFont());
group.setText("��ϸ��Ϣ"); //$NON-NLS-1$
Label lblConnPort = new Label(group, SWT.NONE);
lblConnPort.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lblConnPort.setText("�˿�"); //$NON-NLS-1$
txtPort = new Text(group, SWT.BORDER | SWT.READ_ONLY);
txtPort.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label lblConnDB = new Label(group, SWT.NONE);
lblConnDB.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lblConnDB.setText("���ݿ�"); //$NON-NLS-1$
txtDBName = new Text(group, SWT.BORDER | SWT.READ_ONLY);
txtDBName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label lblUserName = new Label(group, SWT.NONE);
lblUserName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
lblUserName.setText("�û���"); //$NON-NLS-1$
txtUserName = new Text(group, SWT.BORDER | SWT.READ_ONLY);
txtUserName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
protected int getTableStyle()
{
return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION;
}
/**
* @param composite
*/
private void createDBInfoGroup(Composite composite)
{
Composite parent = new Composite(composite, SWT.NONE);
parent.setLayout(new FillLayout());
parent.setLayoutData(new GridData(GridData.FILL_BOTH));
viewer = new TableViewer(parent, getTableStyle());
viewer.getTable().setHeaderVisible(true);
viewer.getTable().setLinesVisible(true);
TableColumn column1 = new TableColumn(viewer.getTable(), SWT.SINGLE);
column1.setText("��������"); //$NON-NLS-1$
column1.setWidth(100);
TableColumn column2 = new TableColumn(viewer.getTable(), SWT.SINGLE);
column2.setText("��������"); //$NON-NLS-1$
column2.setWidth(100);
TableColumn column3 = new TableColumn(viewer.getTable(), SWT.NONE);
column3.setText("������"); //$NON-NLS-1$
column3.setWidth(200);
viewer.setContentProvider(new TableViewerContentProvider());
viewer.setLabelProvider(new TableViewerLabelProvider());
viewer.setSorter(new NameSorter());
viewer.setInput(dbToolList);
createButtons(composite);
}
private void createButtons(Composite composite)
{
parent2 = new Composite(composite, SWT.NONE);
parent2.setLayout(new GridLayout());
parent2.setLayoutData(new GridData(GridData.FILL_BOTH));
Button btn = new Button(parent2, SWT.PUSH);
setButtonLayoutData(btn);
btn.setText("�½�...");
btn.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e)
{
DBConfigDialog dialog = new DBConfigDialog(UIPlugin.getDefault()
.getWorkbench().getActiveWorkbenchWindow().getShell(),dbToolList,null);
dialog.open();
}
});
Button btn2 = new Button(parent2, SWT.PUSH);
setButtonLayoutData(btn2);
btn2.setText("����...");
btn2.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e)
{
if(viewer.getTable().getSelectionIndex()<0)
{
MessageDialog.openConfirm(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(),
"��ѡ������Դ",
"��ѡ������Դ");
return;
}
else
{
DBConfigDialog dialog = new DBConfigDialog(UIPlugin.getDefault()
.getWorkbench().getActiveWorkbenchWindow().getShell(),dbToolList,((DBTool)viewer.getElementAt(viewer.getTable().getSelectionIndex())).getConName());
dialog.open();
}
}
});
Button btn3 = new Button(parent2, SWT.PUSH);
setButtonLayoutData(btn3);
btn3.setText("ɾ��...");
btn3.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e)
{
if(viewer.getTable().getSelectionIndex()<0)
{
MessageDialog.openConfirm(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell(),
"��ѡ������Դ",
"��ѡ������Դ");
return;
}
Iterator it = dbToolList.iterator();
while(it.hasNext()){
DBTool dbTool = (DBTool)it.next();
if(dbTool.getConName().toLowerCase().equals(((DBTool)viewer.getElementAt(viewer.getTable().getSelectionIndex())).getConName().toLowerCase())){
dbToolList.remove(dbTool);
break;
}
}
refresh();
}
});
}
protected GridData setButtonLayoutData(Button button)
{
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT);
int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
button.setLayoutData(data);
return data;
}
class NameSorter extends ViewerSorter
{
}
public boolean performOk(){
//System.out.println("dbToolList:"+dbToolList.size());
// this.Show();
// if(!((CEECEditorInput)(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput())).exists())
// {
// return super.performOk();
// }
if(this.projectName != null)
{
NewAppWizard.refresh();
this.projectName = null;
return super.performOk();
}
// String projectName1;
// projectName1 = ((CEECEditorInput)(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput())).getProject().getProjectName();
// if(this.projectName == null && !(ResourcesPlugin.getWorkspace().getRoot().getProject(projectName1)).exists())
// {
// return super.performOk();
// }
// if((this.projectName != null) && !(ResourcesPlugin.getWorkspace().getRoot().getProject(projectName1)).exists())
// {
// NewAppWizard.refresh();
// }
else
{
String projectName1;
projectName1 = ((MsEditorInput)(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput())).getProject().getProjectName();
if(viewer.getTable().getSelectionIndex()<0)
{
return super.performOk();
}
// projectName1 = ((CEECEditorInput)(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput())).getProject().getProjectName();
String xml = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName1).getFolder(".configure").getFile("project.xml").getLocation().toOSString();
net.ms.designer.ui.preference.WriteToProjectXML writeDB = new net.ms.designer.ui.preference.WriteToProjectXML("DataSource",null,projectName1);
DBTool tool = ((DBTool)viewer.getElementAt(viewer.getTable().getSelectionIndex()));
((MsEditorInput)(UIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput())).getProject().setDbtool(tool);
// writeDB.setConName(tool.getConName());
// writeDB.setDbName(tool.getDbName());
// writeDB.setDbType(tool.getDbType());
// writeDB.setPassword(tool.getPassword());
// writeDB.setPort(tool.getPort());
// writeDB.setServer(tool.getServer());
// writeDB.setUsername(tool.getUsername());
File file = new File(xml);
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 = root.getElementsByTagName("project");
//��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();
}
}
return super.performOk();
}
DBPreferencePage getInstance(){
return this;
}
public static void refresh(){
viewer.setContentProvider(new TableViewerContentProvider());
viewer.setLabelProvider(new TableViewerLabelProvider());
// viewer.setInput(getdbTreeViewList());
viewer.setInput(dbToolList);
if(dbToolList != null && dbToolList.size()==1)
{
txtPort.setText(((DBTool)dbToolList.get(0)).getPort());
txtDBName.setText(((DBTool)dbToolList.get(0)).getDbName());
txtUserName.setText(((DBTool)dbToolList.get(0)).getUsername());
}
if(dbToolList != null && dbToolList.size()>1)
{
if(viewer.getTable().getSelectionIndex()<0)
{
txtPort.setText(((DBTool)dbToolList.get(viewer.getTable().getItemCount()-1)).getPort());
txtDBName.setText(((DBTool)dbToolList.get(viewer.getTable().getItemCount()-1)).getDbName());
txtUserName.setText(((DBTool)dbToolList.get(viewer.getTable().getItemCount()-1)).getUsername());
}
else
{
txtPort.setText(((DBTool)dbToolList.get(viewer.getTable().getSelectionIndex())).getPort());
txtDBName.setText(((DBTool)dbToolList.get(viewer.getTable().getSelectionIndex())).getDbName());
txtUserName.setText(((DBTool)dbToolList.get(viewer.getTable().getSelectionIndex())).getUsername());
}
}
viewer.refresh();
}
}