/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.tools.jbpm.preferences;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ColumnWeightData;
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.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.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.jboss.tools.jbpm.Activator;
import org.jboss.tools.jbpm.Constants;
import org.jboss.tools.jbpm.util.AutoResizeTableLayout;
public class JbpmLocationsPage extends PreferencePage implements IWorkbenchPreferencePage {
private TableViewer tableViewer;
private Button addButton, editButton, removeButton;
public JbpmLocationsPage() {
super();
noDefaultAndApplyButton();
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}
protected AddJbpmInstallationDialog createAddJbpmInstallationDialog(Shell shell) {
return new AddJbpmInstallationDialog(shell, Activator.getDefault());
}
protected Control createContents(Composite parent) {
Composite clientArea = createClientArea(parent);
createLabels(clientArea);
createJbpmHomeListTable(clientArea);
createButtons(clientArea);
return null;
}
private void createButtons(Composite parent) {
GridData gridData = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false);
gridData.widthHint = 80;
addButton = new Button(parent, SWT.PUSH);
addButton.setText("Add...");
addButton.setLayoutData(gridData);
addButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
addNewLocation();
}
});
editButton = new Button(parent, SWT.PUSH);
editButton.setText("Edit...");
editButton.setLayoutData(gridData);
editButton.setEnabled(false);
editButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
editLocation();
}
});
removeButton = new Button(parent, SWT.PUSH);
removeButton.setText("Remove");
removeButton.setLayoutData(gridData);
removeButton.setEnabled(false);
removeButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
removeLocation();
}
});
}
private void removeLocation() {
TableItem item = tableViewer.getTable().getSelection()[0];
String name = item.getText(0);
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
JbpmInstallation installation = inputManager.getJbpmInstallation(name);
inputManager.getJbpmInstallationMap().remove(name);
tableViewer.remove(installation);
updateButtons();
updateStatus();
}
private void editLocation() {
TableItem item = tableViewer.getTable().getSelection()[0];
String name = item.getText(0);
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
JbpmInstallation jbpmInstallation = inputManager.getJbpmInstallation(name);
AddJbpmInstallationDialog dialog = createAddJbpmInstallationDialog(getShell());
dialog.initialize("Edit Location", jbpmInstallation.name, jbpmInstallation.location);
if (dialog.open() == IDialogConstants.OK_ID) {
jbpmInstallation.name = dialog.getName();
jbpmInstallation.version = dialog.getVersion();
jbpmInstallation.location = dialog.getLocation();
tableViewer.update(jbpmInstallation, null);
if (name != dialog.getName()) {
inputManager.getJbpmInstallationMap().remove(name);
inputManager.getJbpmInstallationMap().put(dialog.getName(), jbpmInstallation);
}
}
updateButtons();
}
private void addNewLocation() {
AddJbpmInstallationDialog dialog = createAddJbpmInstallationDialog(getShell());
dialog.initialize("Add Location", "", "");
if (dialog.open() == IDialogConstants.OK_ID) {
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
JbpmInstallation jbpmInstallation = getJbpmInstallation(dialog);
inputManager.getJbpmInstallationMap().put(jbpmInstallation.name, jbpmInstallation);
tableViewer.add(jbpmInstallation);
}
updateButtons();
}
private JbpmInstallation getJbpmInstallation(AddJbpmInstallationDialog dialog) {
JbpmInstallation jbpmInstallation = new JbpmInstallation();
jbpmInstallation.name = dialog.getName();
jbpmInstallation.location = dialog.getLocation();
jbpmInstallation.version = dialog.getVersion();
return jbpmInstallation;
}
private Composite createClientArea(Composite parent) {
Composite clientArea = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
clientArea.setLayout(layout);
GridData gridData = new GridData(GridData.FILL_BOTH);
clientArea.setLayoutData(gridData);
return clientArea;
}
public void init(IWorkbench workbench) {
}
private void createJbpmHomeListTable(Composite parent) {
tableViewer = new TableViewer(parent, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION | SWT.CHECK);
tableViewer.setContentProvider(new JbpmInstallationTableContentProvider());
tableViewer.setLabelProvider(new JbpmInstallationLabelProvider());
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.verticalSpan = 3;
gridData.heightHint = 200;
tableViewer.getControl().setLayoutData(gridData);
initializeTable(tableViewer);
createTableColumns(tableViewer);
initializeInput(tableViewer);
}
private void initializeInput(TableViewer viewer) {
viewer.setInput(PreferencesManager.getInstance());
checkItemToCheck(viewer);
}
private void checkItemToCheck(TableViewer viewer) {
// String name = Activator.getDefault().getPreferenceStore().getString(Constants.JBPM_NAME);
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
String name = inputManager.getPreferredJbpmName();
if (name != null) {
TableItem tableItem = getItemToCheck(viewer, name);
if (tableItem != null) {
tableItem.setChecked(true);
}
}
}
private TableItem getItemToCheck(TableViewer viewer, String name) {
TableItem[] items = viewer.getTable().getItems();
for (int i = 0; i < items.length; i++) {
if (name.equals(items[i].getText(0))) return items[i];
}
return null;
}
private void createTableColumns(TableViewer viewer) {
Table table = viewer.getTable();
TableColumn nameColumn = new TableColumn(table, SWT.LEFT);
nameColumn.setText("Name");
ColumnWeightData nameColumnData = new ColumnWeightData(30);
AutoResizeTableLayout layout = (AutoResizeTableLayout)table.getLayout();
layout.addColumnData(nameColumnData);
TableColumn locationColumn = new TableColumn(table, SWT.LEFT);
locationColumn.setText("Location");
ColumnWeightData locationColumnData = new ColumnWeightData(70);
layout.addColumnData(locationColumnData);
}
private void initializeTable(TableViewer viewer) {
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setLayout(new AutoResizeTableLayout(table));
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
updateSelection(e);
}
});
}
private void updateSelection(SelectionEvent e) {
if (e.detail == SWT.CHECK) {
updateChecks(e);
} else {
updateButtons();
}
updateStatus();
}
private void updateChecks(SelectionEvent e) {
Table table = tableViewer.getTable();
TableItem[] items = table.getItems();
for (int i = 0; i < items.length; i++) {
if (e.item != items[i]) {
items[i].setChecked(false);
}
}
}
private void updateStatus() {
TableItem item = getCheckedItem();
if (item != null) {
setErrorMessage(null);
setValid(true);
} else {
setErrorMessage("Select a default jBPM installation.");
setValid(false);
}
}
private TableItem getCheckedItem() {
TableItem[] items = tableViewer.getTable().getItems();
for (int i = 0; i < items.length; i++) {
if (items[i].getChecked()) {
return items[i];
}
}
return null;
}
private void updateButtons() {
Table table = tableViewer.getTable();
TableItem[] selection = table.getSelection();
editButton.setEnabled(selection.length == 1);
removeButton.setEnabled(selection.length == 1 && table.getItemCount() > 1);
}
private void createLabels(Composite parent) {
GridData infoLabelGridData = new GridData(GridData.FILL_HORIZONTAL);
infoLabelGridData.horizontalSpan = 2;
Label infoLabel = new Label(parent, SWT.NONE);
infoLabel.setText(
"Add, remove or edit JBoss jBPM installation locations.\n" +
"The checked location will be used by the jBPM creation wizards.");
infoLabel.setLayoutData(infoLabelGridData);
GridData tableLabelGridData = new GridData(SWT.BEGINNING, SWT.END, false, false);
tableLabelGridData.horizontalSpan = 2;
Label tableLabel = new Label(parent, SWT.NONE);
tableLabel.setText("jBPM Installation Locations:");
tableLabel.setLayoutData(tableLabelGridData);
}
public boolean performOk() {
String name = "";
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
inputManager.saveInstallations();
TableItem item = getCheckedItem(tableViewer);
if (item != null) {
name = item.getText(0);
}
// Activator.getDefault().getPreferenceStore().setValue(Constants.JBPM_NAME, name);
inputManager.setPreferredJbpmName(name);
return true;
}
private TableItem getCheckedItem(TableViewer viewer) {
TableItem[] items = viewer.getTable().getItems();
for (int i = 0; i < items.length; i++) {
if (items[i].getChecked()) return items[i];
}
return null;
}
public void performDefaults() {
// Activator.getDefault().getPreferenceStore().setToDefault(Constants.JBPM_NAME);
PreferencesManager inputManager =
(PreferencesManager)tableViewer.getInput();
inputManager.setPreferredJbpmName(null);
inputManager.getJbpmInstallationMap().clear();
tableViewer.setInput(inputManager);
checkItemToCheck(tableViewer);
setMessage("");
updateButtons();
setValid(true);
}
}