/** * Copyright 2005 Open Cloud Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mobicents.eclipslee.servicecreation.ui; import java.util.HashMap; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardPage; 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.Table; import org.eclipse.swt.widgets.TableItem; import org.mobicents.eclipslee.servicecreation.ui.table.EditableTablePanel; import org.mobicents.eclipslee.servicecreation.ui.table.EditableTablePanelAddListener; import org.mobicents.eclipslee.servicecreation.ui.table.EditableTableViewer; import org.mobicents.eclipslee.util.slee.xml.components.SbbXML; /** * @author cath */ public class SbbCMPPanel extends Composite { private static final String[] COLUMNS = new String [] { "Name", "Type", "Stored SBB", "Modify" }; private static final int[] EDITORS = new int [] { EditableTableViewer.EDITOR_NONE, EditableTableViewer.EDITOR_NONE, EditableTableViewer.EDITOR_NONE, EditableTableViewer.EDITOR_BUTTON }; private static final Object[][] VALUES = new Object [][] { {}, {}, {}, {} }; private WizardPage wizard; /** * @param parent * @param style */ public SbbCMPPanel(Composite parent, WizardPage wizard, int style) { super(parent, style); this.wizard = wizard; VALUES[3] = new Object[2]; VALUES[3][0] = "Modify..."; VALUES[3][1] = new ButtonListener(); GridLayout layout = new GridLayout(); layout.numColumns = 1; setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); setLayoutData(data); /* * ---------------------------- * |Name:Type | Add| * | | Rem| * | | | * | | | * | | | * ---------------------------- */ tablePanel = new EditableTablePanel(this, SWT.BORDER, COLUMNS, EDITORS, VALUES); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); tablePanel.setLayoutData(data); setTableAddListener(); } public void setTableAddListener() { EditableTablePanelAddListener listener = new EditableTablePanelAddListener() { public HashMap getInitialData() { SbbCMPConfigDialog dialog = new SbbCMPConfigDialog(getShell(), new HashMap(), project); if (dialog.open() == Window.OK) { String name = dialog.getName(); String type = dialog.getType(); String scopedName = dialog.getScopedName(); SbbXML sbbLocalObject = dialog.getSbbLocalObject(); HashMap data = new HashMap(); data.put("Name", name); data.put("Type", type); data.put("Scoped Name", scopedName); data.put("SBB XML", sbbLocalObject); if (type.equals("javax.slee.SbbLocalObject")) data.put("Stored SBB", sbbLocalObject.toString()); else data.put("Stored SBB", "N/A"); return data; } return null; } }; this.tablePanel.setAddListener(listener); } public void addCMPField(HashMap map) { tablePanel.addRow(map); } public HashMap[] getCMPFields() { return tablePanel.getTableRows(); } public void setProject(String project) { this.project = project; } public boolean isCellEditorActive() { return tablePanel.isCellEditorActive(); } private class ButtonListener extends SelectionAdapter { public void widgetSelected(SelectionEvent e) { EditableTableViewer tableViewer = tablePanel.getTableViewer(); Table table = tableViewer.getTable(); TableItem items[] = table.getItems(); for (int row = 0; row < items.length; row++) { HashMap map = (HashMap) items[row].getData(); for (int column = 0; column < EDITORS.length; column++) { Button button = (Button) map.get("Button_" + column); if (button != null && button.equals(e.getSource())) { TableItem item = items[row]; SbbCMPConfigDialog dialog = new SbbCMPConfigDialog(getShell(), (HashMap) item.getData(), project); if (dialog.open() == Window.OK) { String name = dialog.getName(); String type = dialog.getType(); String scopedName = dialog.getScopedName(); SbbXML sbbLocalObject = dialog.getSbbLocalObject(); HashMap data = (HashMap) item.getData(); data.remove("Name"); data.remove("Type"); data.remove("Scoped Name"); data.remove("SBB XML"); data.remove("Stored SBB"); data.put("Name", name); data.put("Type", type); data.put("Scoped Name", scopedName); data.put("SBB XML", sbbLocalObject); if (type.equals("javax.slee.SbbLocalObject")) data.put("Stored SBB", sbbLocalObject.toString()); else data.put("Stored SBB", "N/A"); // Cause the table to update this item. tableViewer.getStore().onDataStoreItemChanged(data); tableViewer.repack(); } } } } } } private final EditableTablePanel tablePanel; private String project; }