/*******************************************************************************
* Copyright (c) 2009, 2010 Innovation Gate GmbH.
* 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:
* Innovation Gate GmbH - initial API and implementation
******************************************************************************/
package de.innovationgate.eclipse.wgadesigner.preferences;
import java.io.IOException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import de.innovationgate.eclipse.utils.BeanListStore;
import de.innovationgate.eclipse.utils.SWTBotIDs;
import de.innovationgate.eclipse.utils.ui.EditableTableControl;
import de.innovationgate.eclipse.wgadesigner.ResourceIDs;
import de.innovationgate.eclipse.wgadesigner.WGADesignerPlugin;
import de.innovationgate.eclipse.wgadesigner.dialogs.AddWGARemoteServerDialog;
import de.innovationgate.eclipse.wgadesigner.models.WGARemoteServer;
import de.innovationgate.eclipse.wgadesigner.models.WGARemoteServersModel;
public class WGARemoteServerPrefPage extends PreferencePage implements IWorkbenchPreferencePage {
private Composite _container;
BeanListStore<WGARemoteServer> _serverstore = WGADesignerPlugin.getDefault().getWGARemoteServerStore();
private EditableTableControl<WGARemoteServer> _tableControl;
private WGARemoteServersModel _remoteServerModel;
private static final String BUTTON_EDIT = "BUTTON_EDIT";
public WGARemoteServerPrefPage() {
setDescription("WGA Remoteservers");
}
protected Control createContents(Composite parent) {
_container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
_container.setLayout(layout);
_tableControl = new EditableTableControl<WGARemoteServer>(_container, SWT.NONE, SWT.BORDER | SWT.FULL_SELECTION) {
@Override
protected void createButtonArea(Composite area) {
super.createButtonArea(area);
Button btnUpdate = new Button(area, SWT.PUSH);
btnUpdate.setText("edit");
btnUpdate.setLayoutData(GridDataFactory.copyData(_btnLayout));
btnUpdate.setEnabled(false);
btnUpdate.setData(SWTBotIDs.WIDGET_KEY, ResourceIDs.EDITABLE_TABLE_CONTROL_BUTTON_EDIT);
_buttons.put(BUTTON_EDIT, btnUpdate);
}
};
_tableControl.setLayoutData(new GridData(GridData.FILL_BOTH));
String[] columnNames = new String[] { "Servername", "URL" };
_remoteServerModel = new WGARemoteServersModel(_serverstore.getBeans());
_tableControl.init(columnNames, _remoteServerModel);
_tableControl.getButton(EditableTableControl.BUTTON_ADD).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleAdd();
}
});
_tableControl.getButton(EditableTableControl.BUTTON_REMOVE).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleRemove();
}
});
_tableControl.getButton(BUTTON_EDIT).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleEdit();
}
});
_tableControl.getTable().addSelectionListener(new SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
if (_tableControl.getTable().getSelectionCount() > 0) {
_tableControl.getButton(BUTTON_EDIT).setEnabled(true);
} else {
_tableControl.getButton(BUTTON_EDIT).setEnabled(false);
}
}
});
GridData g = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
g.horizontalSpan = 2;
_tableControl.setLayoutData(g);
return _container;
}
public void init(IWorkbench workbench) {
}
private void handleRemove() {
if (_tableControl.getTable().getSelectionCount() > 0) {
WGARemoteServer remoteserver = (WGARemoteServer) _tableControl.getTable().getSelection()[0].getData();
_remoteServerModel.remove(remoteserver);
}
}
@Override
public boolean performOk() {
try {
_serverstore.flush();
} catch (IOException e) {
WGADesignerPlugin.getDefault().logError("Unable to store remote servers.",e);
return false;
}
return true;
}
private void handleAdd() {
AddWGARemoteServerDialog addDialog = new AddWGARemoteServerDialog(getShell(), _remoteServerModel);
addDialog.open();
if (addDialog.getReturnCode() == Dialog.OK) {
_remoteServerModel.add(addDialog.getServer());
}
}
private void handleEdit() {
if (_tableControl.getTable().getSelectionCount() > 0) {
WGARemoteServer selectedServer = (WGARemoteServer) _tableControl.getTable().getSelection()[0].getData();
AddWGARemoteServerDialog editDialog = new AddWGARemoteServerDialog(getShell(), _remoteServerModel, selectedServer);
editDialog.open();
if (editDialog.getReturnCode() == Dialog.OK) {
_remoteServerModel.update(editDialog.getServer());
}
}
}
}