/**
* 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.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.mobicents.eclipslee.servicecreation.ui.table.EditableTableViewer;
import org.mobicents.eclipslee.util.slee.xml.components.ComponentNotFoundException;
import org.mobicents.eclipslee.util.slee.xml.components.SbbXML;
import org.mobicents.eclipslee.xml.SbbJarXML;
/**
* @author cath
*/
public class ServiceRootSbbPanel extends Composite implements ISelectionChangedListener, ModifyListener {
private static final String[] COLUMNS = new String [] { "Name", "Vendor", "Version", "Description" };
private static final int[] EDITORS = new int [] {
EditableTableViewer.EDITOR_NONE,
EditableTableViewer.EDITOR_NONE,
EditableTableViewer.EDITOR_NONE,
EditableTableViewer.EDITOR_NONE
};
private static final String[][] VALUES = new String [][] {
{},
{},
{},
{}
};
public ServiceRootSbbPanel(Composite parent, int style, Listener listener) {
super(parent, style);
this.listener = listener;
GridLayout layout = new GridLayout();
layout.numColumns = 2;
setLayout(layout);
GridData data = new GridData(GridData.FILL_BOTH);
setLayoutData(data);
sbbViewer = new EditableTableViewer(this, SWT.NONE, COLUMNS, EDITORS, VALUES);
data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
data.horizontalSpan = 2;
sbbViewer.getTable().setLayoutData(data);
sbbViewer.addSelectionChangedListener(this);
priorityLabel = new Label(this, SWT.NONE);
priorityLabel.setText("Default event priority");
data = new GridData(GridData.VERTICAL_ALIGN_CENTER);
priorityLabel.setLayoutData(data);
priorityText = new Text(this, SWT.BORDER);
priorityText.setText("0");
priorityText.addModifyListener(this);
data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
priorityText.setLayoutData(data);
addressProfileButton = new Button(this, SWT.CHECK);
addressProfileButton.setText("Specify service address profile table");
data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
data.horizontalSpan = 2;
addressProfileButton.setLayoutData(data);
}
public void selectionChanged(SelectionChangedEvent event) {
// Determine the new selection and set the options in the combo appropriately, plus
// enable or disable combo and priority as required.
listener.handleEvent(null);
updateWidgets();
}
public void modifyText(ModifyEvent event) {
listener.handleEvent(null);
}
/**
* Returns a string describing what's wrong with the current input, or
* null if all input is valid.
*
* @return
*/
public String getStatus() {
if (sbbViewer.getTable().getItemCount() == 0)
return "There are no valid root SBBs available. Exit this wizard and verify that any root SBBs have been compiled and that they contain initial events.";
int index = sbbViewer.getTable().getSelectionIndex();
if (index == -1)
return "Please select a root SBB.";
try {
Integer.parseInt(priorityText.getText());
} catch (NumberFormatException e) {
return "Default priority must be an integer between -127 and 128 inclusive.";
}
int priority = getDefaultPriority();
if (priority > 128 || priority < -127)
return "Default priority must be an integer between -127 and 128 inclusive.";
return null;
}
public boolean getCreateAddressProfileTable() {
return addressProfileButton.getEnabled() && addressProfileButton.getSelection();
}
public void setCreateAddressProfileTable(boolean create) {
addressProfileButton.setSelection(create);
}
public int getDefaultPriority() {
return Integer.parseInt(priorityText.getText());
}
public void setDefaultPriority(int priority) {
priorityText.setText("" + priority);
}
public void setRootSbb(SbbXML sbb) {
int count = sbbViewer.getTable().getItemCount();
for (int i = 0; i < count; i++) {
HashMap row = (HashMap) sbbViewer.getTable().getItem(i).getData();
String name = (String) row.get("Name");
String vendor = (String) row.get("Vendor");
String version = (String) row.get("Version");
if (sbb.getName().equals(name)
&& sbb.getVendor().equals(vendor)
&& sbb.getVersion().equals(version)) {
sbbViewer.getTable().setSelection(i);
return;
}
}
}
public void addRootSbb(SbbJarXML jarXML, SbbXML sbb) {
HashMap map = new HashMap();
map.put("XML", jarXML);
map.put("Name", sbb.getName());
map.put("Vendor", sbb.getVendor());
map.put("Version", sbb.getVersion());
map.put("Description", sbb.getDescription() == null ? "" : sbb.getDescription());
sbbViewer.getStore().add(map);
}
public HashMap getRootSbb() {
int index = sbbViewer.getTable().getSelectionIndex();
if (index == -1)
return null;
return (HashMap) sbbViewer.getTable().getItem(index).getData();
}
public void repack() {
sbbViewer.repack();
}
/**
* Updates the address profile and priority widgets to be enabled/disabled,
* dependant upon selection of the root SBB.
*/
public void updateWidgets() {
boolean priorityEnabled, addressProfileEnabled;
int index = sbbViewer.getTable().getSelectionIndex();
if (index == -1) {
priorityEnabled = false;
addressProfileEnabled = false;
} else {
HashMap map = (HashMap) sbbViewer.getTable().getItem(index).getData();
String name = (String) map.get("Name");
String vendor = (String) map.get("Vendor");
String version = (String) map.get("Version");
SbbJarXML jarXML = (SbbJarXML) map.get("XML");
try {
SbbXML sbbXML = jarXML.getSbb(name, vendor, version);
priorityEnabled = true;
if (sbbXML.getAddressProfileSpecAliasRef() != null)
addressProfileEnabled = true;
else
addressProfileEnabled = false;
} catch (ComponentNotFoundException e) {
priorityEnabled = false;
addressProfileEnabled = false;
}
}
priorityLabel.setEnabled(priorityEnabled);
priorityText.setEnabled(priorityEnabled);
addressProfileButton.setEnabled(addressProfileEnabled);
}
private Listener listener;
private EditableTableViewer sbbViewer;
private Text priorityText;
private Button addressProfileButton;
private Label priorityLabel;
}