blob: 37b15ead0dbdf2a2c05cc88f49a62992faa045f6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2006 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
* yyyymmdd bug Email and other contact information
* -------- -------- -----------------------------------------------------------
* 20060404 134913 sengpl@ca.ibm.com - Seng Phung-Lu
* 20060426 135614 sengpl@ca.ibm.com - Seng Phung-Lu
* 20060529 143518 sengpl@ca.ibm.com - Seng Phung-Lu
*******************************************************************************/
package org.eclipse.jst.ws.internal.consumption.ui.widgets;
import java.util.Hashtable;
import java.util.List;
import java.util.Vector;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.jst.j2ee.webservice.wsdd.PortComponent;
import org.eclipse.jst.j2ee.webservice.wsdd.WebServiceDescription;
import org.eclipse.jst.ws.internal.common.ResourceUtils;
import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages;
import org.eclipse.jst.ws.internal.consumption.ui.common.HandlerDescriptionHelper;
import org.eclipse.jst.ws.internal.consumption.ui.common.HandlerDescriptionHolder;
import org.eclipse.jst.ws.internal.consumption.ui.widgets.object.HandlerTableItem;
import org.eclipse.jst.ws.internal.ui.common.UIUtils;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.command.internal.env.core.common.StatusUtils;
import org.eclipse.wst.command.internal.env.ui.widgets.SimpleWidgetDataContributor;
import org.eclipse.wst.command.internal.env.ui.widgets.WidgetDataEvents;
/**
* ConfigServiceHandlersTreeWidget
*
*/
public class ConfigServiceHandlersTableWidget extends SimpleWidgetDataContributor {
private String pluginId_ = "org.eclipse.jst.ws.consumption.ui";
private Composite parent_;
private Table handlersTable_;
private TableViewer tableViewer_;
private Composite webServiceDescComp_;
private Combo webServiceDescCombo_ = null;
private Text webServiceDescText_ = null;
private Button addButton_;
private Button removeButton_;
private Button genSkeletonRadioButton_;
private Composite sourceLocationComp_;
private Combo sourceLocationCombo_;
private HandlerDescriptionHolder[] handlerDescriptionHolder_;
private HandlerDescriptionHolder currentHDH_;
private Hashtable pathsTable_ = new Hashtable(); // available paths for combo
private String outputLocation_; // selected path from combo
private String descriptionName_ = null;
private boolean isMultipleSelection_ = false;
private boolean isGenSkeletonEnabled_;
private int DEFAULT_COLUMN_WIDTH = 100;
// ----TOOLTIPS Section----
/* CONTEXT_ID SHLD0001 for the Handler Config Page */
private final String INFOPOP_HDLR_WS_HANDLERS = "SHDL0001"; //$NON-NLS-1$
/* CONTEXT_ID SHDL0002 for the Handler Config Page */
private final String INFOPOP_HDLR_GEN_SKELETON = "SHDL0002"; //$NON-NLS-1$
/* CONTEXT_ID SHDL0003 for the Handler Config Page */
private final String INFOPOP_COMBO_SOURCE_LOC = "SHDL0003"; //$NON-NLS-1$
/* CONTEXT_ID SHDL0004 for the Handler Config Page */
private final String INFOPOP_WS_SERVICE_DESC = "SHDL0004"; //$NON-NLS-1$
// ------------------------
public ConfigServiceHandlersTableWidget() {
super();
}
public WidgetDataEvents addControls(Composite parent, Listener statusListener) {
UIUtils uiUtils = new UIUtils(pluginId_);
parent_ = parent;
// Web service description composite (combo/text to be created later)
webServiceDescComp_ = uiUtils.createComposite(parent_, 2);
Composite displayComp = new Composite(parent_, SWT.NONE);
GridLayout gridlayout = new GridLayout(2, false);
displayComp.setLayout(gridlayout);
displayComp.setLayoutData(uiUtils.createFillAll());
final Composite handlersComp = uiUtils.createComposite(displayComp, 1);
GridData griddata = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING
| GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.FILL_VERTICAL);
handlersComp.setLayoutData(griddata);
handlersComp.setSize(130, 600);
Composite buttonsComp = uiUtils.createComposite(displayComp, 1);
griddata = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
buttonsComp.setLayoutData(griddata);
Text handlersText = new Text(handlersComp, SWT.READ_ONLY);
handlersText.setText(ConsumptionUIMessages.LABEL_HANDLERS_CONFIG);
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 2;
handlersText.setLayoutData(gd);
handlersTable_ = uiUtils.createTable(handlersComp, ConsumptionUIMessages.TOOLTIP_EDIT_WS_HANDLERS, INFOPOP_HDLR_WS_HANDLERS, SWT.MULTI
| SWT.FULL_SELECTION | SWT.BORDER);
handlersTable_.setHeaderVisible(true);
handlersTable_.setLinesVisible(true);
// empty space
Label wsLabel = new Label(buttonsComp, SWT.NONE);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 2;
wsLabel.setLayoutData(gd);
Button moveUpButton = uiUtils.createPushButton(buttonsComp, ConsumptionUIMessages.LABEL_BUTTON_MOVE_UP, null, null);
GridData muGriddata = new GridData();
Point musize = moveUpButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
moveUpButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
handleMoveUpButtonSelected(event);
}
public void widgetDefaultSelected(SelectionEvent event) {
}
});
Button moveDownButton = uiUtils.createPushButton(buttonsComp, ConsumptionUIMessages.LABEL_BUTTON_MOVE_DOWN, null, null);
GridData mdGriddata = new GridData();
Point mdsize = moveDownButton.computeSize(SWT.DEFAULT, SWT.DEFAULT);
moveDownButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
handleMoveDownButtonSelected(event);
}
public void widgetDefaultSelected(SelectionEvent event) {
}
});
// empty space
wsLabel = new Label(buttonsComp, SWT.NONE);
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 2;
wsLabel.setLayoutData(gd);
addButton_ = uiUtils.createPushButton(buttonsComp, ConsumptionUIMessages.LABEL_BUTTON_ADD, null, null);
GridData addGriddata = new GridData();
Point addSize = addButton_.computeSize(SWT.DEFAULT, SWT.DEFAULT);
addButton_.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
handleAddButtonSelected(event);
}
public void widgetDefaultSelected(SelectionEvent event) {
}
});
removeButton_ = uiUtils.createPushButton(buttonsComp, ConsumptionUIMessages.LABEL_BUTTON_REMOVE, null, null);
GridData remGriddata = new GridData();
Point remSize = removeButton_.computeSize(SWT.DEFAULT, SWT.DEFAULT);
removeButton_.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
handleRemoveButtonSelected(event);
}
public void widgetDefaultSelected(SelectionEvent event) {
}
});
enableRemove(false);
int widthHint = 0;
int[] sizes = new int[]{musize.x, mdsize.x, addSize.x, remSize.x, 100};
for(int j = 0; j < sizes.length; j++) {
if (sizes[j] > widthHint)
widthHint = sizes[j];
}
muGriddata.widthHint = widthHint;
mdGriddata.widthHint = widthHint;
addGriddata.widthHint = widthHint;
remGriddata.widthHint = widthHint;
moveUpButton.setLayoutData(muGriddata);
moveDownButton.setLayoutData(mdGriddata);
addButton_.setLayoutData(addGriddata);
removeButton_.setLayoutData(remGriddata);
// table stuff here
String[] columns_ = new String[] { ConsumptionUIMessages.LABEL_HANDLER_NAME, ConsumptionUIMessages.LABLE_HANDLER_CLASS,
ConsumptionUIMessages.LABEL_HANDLER_PORT};
final TableColumn[] tableCols = new TableColumn[columns_.length];
for (int i = 0; i < columns_.length; i++) {
TableColumn tableColumn = new TableColumn(handlersTable_, SWT.LEFT);
tableColumn.setText(columns_[i]);
tableColumn.setAlignment(SWT.LEFT);
tableColumn.setWidth(DEFAULT_COLUMN_WIDTH);
tableColumn.setResizable(true);
tableCols[i] = tableColumn;
}
handlersComp.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Rectangle area = handlersComp.getClientArea();
Point preferredSize = handlersTable_.computeSize(SWT.DEFAULT, SWT.DEFAULT);
int width = area.width - 2 * handlersTable_.getBorderWidth() - 10;
if (preferredSize.y > area.height + handlersTable_.getHeaderHeight()) {
// Subtract the scrollbar width from the total column width
// if a vertical scrollbar will be required
Point vBarSize = handlersTable_.getVerticalBar().getSize();
width -= vBarSize.x;
}
Point oldSize = handlersTable_.getSize();
if (oldSize.x > area.width) {
// table is getting smaller so make the columns
// smaller first and then resize the table to
// match the client area width
tableCols[0].setWidth(width / 3);
tableCols[1].setWidth(width / 3);
tableCols[2].setWidth(width - (tableCols[0].getWidth() + tableCols[1].getWidth()));
handlersTable_.setSize(area.width, area.height);
}
else {
// table is getting bigger so make the table
// bigger first and then make the columns wider
// to match the client area width
handlersTable_.setSize(area.width, area.height);
tableCols[0].setWidth(width / 3);
tableCols[1].setWidth(width / 3);
tableCols[2].setWidth(width - (tableCols[0].getWidth() + tableCols[1].getWidth()));
}
}
});
tableViewer_ = new TableViewer(handlersTable_);
Control control = tableViewer_.getControl();
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
data.verticalAlignment = GridData.FILL;
data.grabExcessVerticalSpace = true;
control.setLayoutData(data);
tableViewer_.setColumnProperties(columns_);
tableViewer_.setContentProvider(new ListContentProvider());
tableViewer_.setLabelProvider(new ListLabelProvider());
tableViewer_.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
enableRemove(true);
}
});
genSkeletonRadioButton_ = uiUtils.createCheckbox(parent_, ConsumptionUIMessages.LABEL_BUTTON_GEN_SKELETON,
ConsumptionUIMessages.TOOLTIP_BUTTON_GEN_SKELETON, INFOPOP_HDLR_GEN_SKELETON);
griddata = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
genSkeletonRadioButton_.setLayoutData(griddata);
genSkeletonRadioButton_.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
handleGenSkeletonRadioButton();
}
});
sourceLocationComp_ = uiUtils.createComposite(parent_, 2);
sourceLocationCombo_ = uiUtils.createCombo(sourceLocationComp_, ConsumptionUIMessages.LABEL_COMBO_SOURCE_LOC,
ConsumptionUIMessages.TOOLTIP_COMBO_SOURCE_LOC, INFOPOP_COMBO_SOURCE_LOC, SWT.READ_ONLY);
sourceLocationCombo_.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
handleSourceLocationCombo(evt);
}
});
return this;
}
// Called at start and only for single service selection
private void populateHandlersTable() {
try {
UIUtils uiUtils = new UIUtils(pluginId_);
// process for multiple service selection
if (isMultipleSelection_) {
parent_.getShell().setText(ConsumptionUIMessages.PAGE_DESC_MULTIPLE_SERVICES_CONFIG);
webServiceDescText_ = uiUtils.createText(webServiceDescComp_, ConsumptionUIMessages.LABEL_COMBO_WS_SERVICE_DESC,
ConsumptionUIMessages.TOOLTIP_WS_SERVICE_DESC, INFOPOP_WS_SERVICE_DESC, SWT.READ_ONLY);
if (handlerDescriptionHolder_!=null){
currentHDH_ = handlerDescriptionHolder_[0];
String text = NLS.bind(ConsumptionUIMessages.MSG_TEXT_NUM_OF_SERVICES, Integer.toString(handlerDescriptionHolder_.length));
webServiceDescText_.setText(text);
}
genSkeletonRadioButton_.setSelection(false);
genSkeletonRadioButton_.setEnabled(false);
genSkeletonRadioButton_.setVisible(false);
sourceLocationComp_.setVisible(false);
sourceLocationCombo_.setEnabled(false);
sourceLocationCombo_.setVisible(false);
refresh();
}
else {
// populate the table for a single service selection
webServiceDescCombo_ = uiUtils.createCombo(webServiceDescComp_, ConsumptionUIMessages.LABEL_COMBO_WS_SERVICE_DESC,
ConsumptionUIMessages.TOOLTIP_WS_SERVICE_DESC, INFOPOP_WS_SERVICE_DESC, SWT.READ_ONLY);
webServiceDescCombo_.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent evt) {
handleWebServiceDescCombo(evt);
}
});
String[] wsDescNames = HandlerDescriptionHelper.getAllDescriptionNames(handlerDescriptionHolder_);
webServiceDescCombo_.setItems(wsDescNames);
if (handlerDescriptionHolder_.length < 1) {
webServiceDescCombo_.select(0);
webServiceDescCombo_.setEnabled(false);
}
else {
if (descriptionName_ != null) {
int index = webServiceDescCombo_.indexOf(descriptionName_);
if (index != -1) webServiceDescCombo_.select(index);
}
else
webServiceDescCombo_.select(0);
}
// set Descriptions
HandlerDescriptionHolder hdh = HandlerDescriptionHelper.getForDescriptionName(handlerDescriptionHolder_, webServiceDescCombo_.getText());
if (hdh!=null){
currentHDH_ = hdh;
List handlers = hdh.getHandlerList();
tableViewer_.setInput(handlers);
tableViewer_.refresh();
}
// set output folder
setSourceOutputLocation();
}
parent_.getShell().setSize(530, 650);
}
catch (Exception e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.command.env.ui.widgets.WidgetContributor#getStatus()
*/
public IStatus getStatus() {
IStatus finalStatus = Status.OK_STATUS;
if (isMultipleSelection_)
return StatusUtils.infoStatus(ConsumptionUIMessages.PAGE_DESC_MULTIPLE_SERVICES_CONFIG);
return finalStatus;
}
protected void handleAddButtonSelected(SelectionEvent event) {
AddHandlerDialog dialog = new AddHandlerDialog(parent_.getShell(), false);
dialog.setIsMultipleServices(isMultipleSelection_);
dialog.create();
WebServiceDescription serviceDesc = null;
if (!isMultipleSelection_ ){
if (currentHDH_!=null) {
serviceDesc = currentHDH_.getDescriptionObject();
String[] portNames = getPortComponentNames(serviceDesc);
dialog.setPortNames(portNames);
}
}
dialog.getShell().setSize(500, 230);
int result = dialog.open();
if (result == Window.OK) {
String name = dialog.getName();
String className = dialog.getClassName();
String port = dialog.getPortName();
if (port == null)
port = "*";
HandlerTableItem hi = new HandlerTableItem();
hi.setHandlerName(name);
hi.setHandlerClassName(className);
hi.setPortName(port);
if (serviceDesc!=null){
hi.setWsDescRef(serviceDesc);
}
if (currentHDH_!=null){
List handlers = currentHDH_.getHandlerList();
handlers.add(hi);
}
}
refresh();
}
private String[] getPortComponentNames(WebServiceDescription webServiceDesc) {
List ports = webServiceDesc.getPortComponents();
if (ports != null) {
String[] portNames = new String[ports.size()];
for (int i = 0; i < ports.size(); i++) {
PortComponent pc = (PortComponent) ports.get(i);
String pcName = pc.getPortComponentName();
portNames[i] = pcName;
}
return portNames;
}
return new String[0];
}
protected void handleRemoveButtonSelected(SelectionEvent event) {
handleDeleteKeyPressed();
}
protected void handleMoveUpButtonSelected(SelectionEvent event) {
int index = tableViewer_.getTable().getSelectionIndex();
if (index != -1) {
if (index > 0) {
if (currentHDH_!=null){
List handlers = currentHDH_.getHandlerList();
Object object = handlers.remove(index);
handlers.add(index - 1, object);
}
tableViewer_.refresh();
}
}
}
protected void handleMoveDownButtonSelected(SelectionEvent event) {
int index = tableViewer_.getTable().getSelectionIndex();
if (index != -1) {
if (currentHDH_!=null){
List handlers = currentHDH_.getHandlerList();
if (index < handlers.size() - 1) {
Object object = handlers.remove(index);
handlers.add(index+1, object);
}
tableViewer_.refresh();
}
}
}
protected void handleSourceLocationCombo(SelectionEvent event) {
outputLocation_ = sourceLocationCombo_.getText();
IPath outputPath = (IPath) pathsTable_.get(outputLocation_);
currentHDH_.setSourceOutputPath(outputPath);
}
protected void handleGenSkeletonRadioButton() {
if (genSkeletonRadioButton_.isEnabled()) {
if (genSkeletonRadioButton_.getSelection()) {
this.isGenSkeletonEnabled_ = true;
sourceLocationCombo_.setEnabled(true);
}
else {
this.isGenSkeletonEnabled_ = false;
sourceLocationCombo_.setEnabled(false);
}
}
}
protected void handleWebServiceDescCombo(SelectionEvent event) {
if (webServiceDescCombo_!=null && webServiceDescCombo_.isEnabled()) {
HandlerDescriptionHolder hdh = HandlerDescriptionHelper.getForDescriptionName(handlerDescriptionHolder_, webServiceDescCombo_.getText());
currentHDH_ = hdh;
refresh();
}
if (isGenSkeletonEnabled_){
setSourceOutputLocation();
}
}
/**
* @return Returns the isGenSkeletonEnabled_.
*/
public boolean isGenSkeletonEnabled_() {
return isGenSkeletonEnabled_;
}
protected class ListLabelProvider extends LabelProvider implements ITableLabelProvider {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object object, int columnIndex) {
if (object instanceof HandlerTableItem) {
HandlerTableItem hti = (HandlerTableItem) object;
if (columnIndex == 0) {
return hti.getHandlerName() != null ? hti.getHandlerName() : "";
}
else if (columnIndex == 1) {
return hti.getHandlerClassName() != null ? hti.getHandlerClassName() : "";
}
else {
return hti.getPortName() != null ? hti.getPortName() : "";
}
}
return null;
}
}
private void enableRemove(boolean enabled) {
removeButton_.setEnabled(enabled && !tableViewer_.getSelection().isEmpty());
}
protected class ListContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object element) {
if (element instanceof Vector) { return ((Vector) element).toArray(); }
return null;
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object old, Object newobj) {
}
public boolean isDeleted(Object object) {
return false;
}
}
protected void handleDeleteKeyPressed() {
// internalDispose();
ISelection selection = tableViewer_.getSelection();
if (selection != null && !selection.isEmpty() && (selection instanceof IStructuredSelection)) {
int selectionIndex = handlersTable_.getSelectionIndex();
if (currentHDH_!=null){
currentHDH_.getHandlerList().remove(selectionIndex);
}
refresh();
}
}
public void refresh() {
try {
tableViewer_.setInput(null);
if (currentHDH_!=null){
List handlers = currentHDH_.getHandlerList();
tableViewer_.setInput(handlers);
tableViewer_.refresh();
}
}
catch (Exception e) {
e.printStackTrace();
}
}
public void setGenSkeletonEnabled(boolean isGenSkeletonEnabled) {
this.isGenSkeletonEnabled_ = isGenSkeletonEnabled;
genSkeletonRadioButton_.setSelection(isGenSkeletonEnabled);
}
public boolean getGenSkeletonEnabled() {
return this.isGenSkeletonEnabled_;
}
private void setSourceOutputLocation(){
IProject project = currentHDH_.getProject();
if (project!=null){
IPath[] locations = ResourceUtils.getAllJavaSourceLocations(project);
String[] paths = new String[locations.length];
for (int i = 0; i < locations.length; i++) {
paths[i] = locations[i].toString();
pathsTable_.put(paths[i], locations[i]);
}
sourceLocationCombo_.setItems(paths);
sourceLocationCombo_.select(0);
}
// set in model
outputLocation_ = sourceLocationCombo_.getText();
IPath outputPath = (IPath) pathsTable_.get(outputLocation_);
currentHDH_.setSourceOutputPath(outputPath);
}
/**
* An array of HandlerDescriptionHolders
* @return
*/
public void setHandlerDescriptionHolders(HandlerDescriptionHolder[] handlerHolders){
this.handlerDescriptionHolder_ = handlerHolders;
}
public HandlerDescriptionHolder[] getHandlerDescriptionHolders(){
return this.handlerDescriptionHolder_;
}
/**
* For getting the handlers to apply for multiple services
* @return
*/
public List getHandlersList(){
if (handlerDescriptionHolder_[0]!=null)
return handlerDescriptionHolder_[0].getHandlerList();
return null;
}
public void setDescriptionName(String wsDescName) {
descriptionName_ = wsDescName;
}
public void setIsMultipleSelection(boolean isMulitpleSelection) {
this.isMultipleSelection_ = isMulitpleSelection;
}
public void internalize(){
populateHandlersTable();
}
}