// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.workbench.serverexplorer.ui.dialogs;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.model.mdmproperties.MDMServerDefItem;
import org.talend.mdm.workbench.serverexplorer.core.ServerDefService;
import org.talend.mdm.workbench.serverexplorer.i18n.Messages;
import org.talend.mdm.workbench.serverexplorer.ui.providers.ServerSorter;
import org.talend.mdm.workbench.serverexplorer.ui.providers.TreeContentProvider;
import org.talend.mdm.workbench.serverexplorer.ui.providers.ViewerLabelProvider;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class SelectServerDefDialog extends TitleAreaDialog {
private TreeViewer treeViewer;
private Button okBun;
private MDMServerDef serverDef;
/**
*
* @return a decrypted serverDef
*/
public MDMServerDef getSelectedServerDef() {
return this.serverDef.getDecryptedServerDef();
}
/**
* Create the dialog.
*
* @param parentShell
*/
public SelectServerDefDialog(Shell parentShell) {
super(parentShell);
}
/**
* Create contents of the dialog.
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
setTitle(Messages.SelectServerDefDialog_selectServerLocation);
Composite area = (Composite) super.createDialogArea(parent);
Composite container = new Composite(area, SWT.NONE);
container.setLayout(new FillLayout(SWT.HORIZONTAL));
container.setLayoutData(new GridData(GridData.FILL_BOTH));
treeViewer = new TreeViewer(container, SWT.BORDER);
treeViewer.setSorter(new ServerSorter());
treeViewer.setContentProvider(new TreeContentProvider());
treeViewer.setLabelProvider(new ViewerLabelProvider());
//
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
IRepositoryViewObject viewObject = getCurSelectedViewObject();
if (viewObject == null)
return;
MDMServerDefItem item = (MDMServerDefItem) viewObject.getProperty().getItem();
serverDef = item.getServerDef();
okBun.setEnabled(serverDef != null);
}
});
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
okPressed();
}
});
//
initServerDefList();
return area;
}
public void setSelectServer(MDMServerDef server) {
if (server == null) {
if (treeViewer.getTree().getItemCount() > 0) {
TreeItem item = treeViewer.getTree().getItem(0);
IRepositoryViewObject viewObject = (IRepositoryViewObject) item.getData();
MDMServerDefItem defitem = (MDMServerDefItem) viewObject.getProperty().getItem();
MDMServerDef defServer = defitem.getServerDef();
serverDef = defServer;
treeViewer.getTree().setSelection(item);
okBun.setEnabled(true);
return;
}
}
TreeItem[] items = treeViewer.getTree().getItems();
for (IRepositoryViewObject viewObject : (List<IRepositoryViewObject>) treeViewer.getInput()) {
MDMServerDefItem defitem = (MDMServerDefItem) viewObject.getProperty().getItem();
MDMServerDef defServer = defitem.getServerDef();
if (server.getName().equals(defServer.getName()) && server.getHost().equals(defServer.getHost())
&& server.getPort().equals(defServer.getPort())) {
serverDef = defServer;
treeViewer.setSelection(new StructuredSelection(viewObject));
okBun.setEnabled(true);
break;
}
}
}
private IRepositoryViewObject getCurSelectedViewObject() {
ISelection selection = treeViewer.getSelection();
if (!selection.isEmpty()) {
Object firstElement = ((TreeSelection) selection).getFirstElement();
return (IRepositoryViewObject) firstElement;
}
return null;
}
/**
* DOC hbhong Comment method "initServerDefList".
*/
private void initServerDefList() {
List<IRepositoryViewObject> viewObjects = ServerDefService.getAllServerDefViewObjects();
if (viewObjects != null) {
treeViewer.setInput(viewObjects);
}
}
/**
* Create contents of the button bar.
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
this.okBun = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
okBun.setEnabled(false);
}
}