ch.elexis.core.ui.wizards.DBConnectSelectionConnectionWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for ch.elexis.core.ui.wizards.DBConnectSelectionConnectionWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2015 MEDEVIT <office@medevit.at>.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     MEDEVIT <office@medevit.at> - initial API and implementation
 ******************************************************************************/
package ch.elexis.core.ui.wizards;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Hashtable;

import javax.xml.bind.JAXBException;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Group;
import org.eclipse.swt.widgets.Label;

import ch.elexis.core.common.DBConnection;
import ch.elexis.core.constants.Preferences;
import ch.elexis.core.data.activator.CoreHub;
import ch.elexis.core.ui.UiDesk;
import ch.elexis.core.ui.icons.Images;
import ch.elexis.data.PersistentObject;
import ch.rgw.tools.StringTool;

public class DBConnectSelectionConnectionWizardPage extends DBConnectWizardPage {
    private Label lblConnection, lblUser, lblDriver, lblTyp;
    private ComboViewer cViewerConns;
    private Button btnDelStoredConn;
    private Button btnCopyStoredConn;

    /**
     * @wbp.parser.constructor
     */
    public DBConnectSelectionConnectionWizardPage(String dBConnectWizard_typeOfDB) {
        super(Messages.DBConnectFirstPage_Connection);

        setTitle(Messages.DBConnectFirstPage_Connection);
        setMessage(Messages.DBConnectSelectionConnectionWizardPage_this_message);
    }

    @Override
    public void createControl(Composite parent) {
        Composite area = new Composite(parent, SWT.NONE);
        area.setLayout(new GridLayout(1, false));

        setControl(area);

        Group grpStatCurrentConnection = new Group(area, SWT.NONE);
        grpStatCurrentConnection.setLayout(new GridLayout(2, true));
        grpStatCurrentConnection.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        grpStatCurrentConnection.setText(Messages.DBConnectWizardPage_grpStatCurrentConnection_text);
        createEntityArea(grpStatCurrentConnection);

        Composite cmpExistConnSelector = new Composite(area, SWT.BORDER);
        cmpExistConnSelector.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
        cmpExistConnSelector.setLayout(new GridLayout(3, false));

        Label lblGespeicherteVerbindungen = new Label(cmpExistConnSelector, SWT.NONE);
        lblGespeicherteVerbindungen.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
        lblGespeicherteVerbindungen.setText(Messages.DBConnectWizardPage_lblGespeicherteVerbindungen_text);

        cViewerConns = new ComboViewer(cmpExistConnSelector, SWT.READ_ONLY);
        Combo combo = cViewerConns.getCombo();
        combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
        cViewerConns.setContentProvider(ArrayContentProvider.getInstance());
        cViewerConns.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                DBConnection dbc = (DBConnection) element;
                if (dbc.username != null && dbc.connectionString != null) {
                    return dbc.username + "@" + dbc.connectionString;
                } else {
                    return "Neue Verbindung erstellen";
                }
            }
        });
        cViewerConns.setInput(getDBConnectWizard().getStoredConnectionList());

        btnDelStoredConn = new Button(cmpExistConnSelector, SWT.FLAT);
        btnDelStoredConn.setImage(Images.IMG_DELETE.getImage());
        btnDelStoredConn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection) cViewerConns.getSelection();
                if (selection.size() > 0) {
                    Object firstElement = selection.getFirstElement();
                    if (firstElement != null) {
                        getDBConnectWizard().removeConnection((DBConnection) firstElement);
                        cViewerConns.setInput(getDBConnectWizard().getStoredConnectionList());
                        setCurrentSelection();
                    }
                }
            }
        });

        btnCopyStoredConn = new Button(cmpExistConnSelector, SWT.FLAT);
        btnCopyStoredConn.setImage(Images.IMG_COPY.getImage());
        btnCopyStoredConn.setToolTipText("Verbindungsdaten in Zwischenablage kopieren");
        btnCopyStoredConn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                IStructuredSelection selection = (IStructuredSelection) cViewerConns.getSelection();
                if (selection.size() > 0) {
                    Object firstElement = selection.getFirstElement();
                    if (firstElement != null) {
                        DBConnection dbc = (DBConnection) firstElement;
                        Clipboard cb = new Clipboard(UiDesk.getDisplay());
                        TextTransfer textTransfer = TextTransfer.getInstance();
                        try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
                            dbc.marshall(bos);
                            cb.setContents(new Object[] { bos.toString() }, new Transfer[] { textTransfer });
                        } catch (JAXBException | IOException e1) {
                            MessageDialog.openError(UiDesk.getTopShell(), "Error", e1.getMessage());
                        }
                    }
                }
            }
        });

        cViewerConns.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                if (selection.size() > 0) {
                    Object firstElement = selection.getFirstElement();
                    if (firstElement != null) {
                        DBConnection targetedConnection = (DBConnection) firstElement;
                        getDBConnectWizard().setTargetedConnection(targetedConnection);
                        btnDelStoredConn.setEnabled(
                                !targetedConnection.equals(getDBConnectWizard().getCurrentConnection()));
                    }
                }
            }
        });
        setCurrentSelection();

        Label lblOderAufDer = new Label(cmpExistConnSelector, SWT.NONE);
        lblOderAufDer.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1));
        lblOderAufDer.setText(Messages.DBConnectSelectionConnectionWizardPage_lblOderAufDer_text);

        tdbg = new TestDBConnectionGroup(area, SWT.NONE, getDBConnectWizard());
        tdbg.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    }

    private void setCurrentSelection() {
        if (getDBConnectWizard().getCurrentConnection() == null)
            return;
        cViewerConns.setSelection(new StructuredSelection(getDBConnectWizard().getCurrentConnection()));
    }

    private void createEntityArea(Group grpEntity) {
        String driver = "";
        String user = "";
        String typ = "";
        String connection = "";

        Composite typArea = new Composite(grpEntity, SWT.NONE);
        typArea.setLayout(new GridLayout(2, false));
        Label lTyp = new Label(typArea, SWT.NONE);
        lTyp.setImage(Images.IMG_TABLE.getImage());
        lblTyp = new Label(typArea, SWT.NONE);

        Composite driverArea = new Composite(grpEntity, SWT.NONE);
        driverArea.setLayout(new GridLayout(2, false));
        Label lDriver = new Label(driverArea, SWT.NONE);
        lDriver.setImage(Images.IMG_GEAR.getImage());
        lblDriver = new Label(driverArea, SWT.NONE);

        Composite userArea = new Composite(grpEntity, SWT.NONE);
        userArea.setLayout(new GridLayout(2, false));
        Label lUser = new Label(userArea, SWT.NONE);
        lUser.setImage(Images.IMG_USER_SILHOUETTE.getImage());
        lblUser = new Label(userArea, SWT.NONE);

        Composite connArea = new Composite(grpEntity, SWT.NONE);
        connArea.setLayout(new GridLayout(2, false));
        Label lConnection = new Label(connArea, SWT.NONE);
        lConnection.setImage(Images.IMG_NODE.getImage());
        lblConnection = new Label(connArea, SWT.NONE);

        Hashtable<Object, Object> conn = readRunningEntityInfos();
        if (conn != null) {
            driver = PersistentObject.checkNull(conn.get(Preferences.CFG_FOLDED_CONNECTION_DRIVER));
            connection = PersistentObject.checkNull(conn.get(Preferences.CFG_FOLDED_CONNECTION_CONNECTSTRING));
            user = PersistentObject.checkNull(conn.get(Preferences.CFG_FOLDED_CONNECTION_USER));
            typ = PersistentObject.checkNull(conn.get(Preferences.CFG_FOLDED_CONNECTION_TYPE));
        }

        lblTyp.setText(typ);
        lblDriver.setText(driver);
        lblUser.setText(user);
        lblConnection.setText(connection);
    }

    private Hashtable<Object, Object> readRunningEntityInfos() {
        Hashtable<Object, Object> conn = null;
        String cnt = CoreHub.localCfg.get(Preferences.CFG_FOLDED_CONNECTION, null);
        if (cnt != null) {
            conn = PersistentObject.fold(StringTool.dePrintable(cnt));
            return conn;
        }
        return null;
    }

    @Override
    public void setPageComplete(boolean complete) {
        super.setPageComplete(complete);
    }

    private DBConnectWizard getDBConnectWizard() {
        return (DBConnectWizard) getWizard();
    }

}