package org.alcatel.jsce.servicecreation.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.alcatel.jsce.statevent.EventCatalog;
import org.alcatel.jsce.statevent.StatEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
public class OSPStatEventCatalogWidget extends Composite {
/** The list of presents catalogs */
private List catalogsList = null;
/** Alarm icon */
private Image imageAlarm = null;
/** Represents the current list of event (depends on the catalog selected) */
private List eventStatList = null;
/** Represents the list of alarms currently selected */
private List selectedStatEvent = null;
/** The current line selected in the event table */
private int currentAlarmsRowSelected = -1;
/**
* The current line selected in the selected table. This int will be used in the deslect action
*/
private int currentdeslectAlarmsRowSelected = -1;
/** Represents the current catalog */
private EventCatalog currentCatalog = null;
/**
* Map an alarm selected in tn the alarm list with the original list [Alarm, local copy of the alarm list where the
* alarm comes]
*/
private HashMap selectionMap = null;
private Group catalogGroup = null;
private Table eventTable = null;
private Group eventGroup = null;
private Group selectedGroup = null;
private Table selectedTable = null;
private Composite catalogComposite = null;
private Label label = null;
private CCombo catalogCombo = null;
private Composite descrComposite = null;
private Label label1 = null;
private Composite buttonComposite = null;
private Button selectButton = null;
private Button viewButton = null;
private Button deselectButton = null;
private Text desctextArea = null;
private Button viewAllButton = null;
/**
* @param parent
* the SWT parent
* @param style
* the SWT style
* @param catalogs
* the list of all stat event catalogs available the list of
* @link org.alcatel.jsce.statevent.EventCatalog
*/
public OSPStatEventCatalogWidget(Composite parent, int style, List catalogs) {
super(parent, style);
eventStatList = new ArrayList();// init
selectedStatEvent = new ArrayList();
selectionMap = new HashMap();
initialize();
loadCatalogList(catalogs);
}
/**
* Loads the differents alarm catalogs in the combo list.
*
* @param catalogs
*/
public void loadCatalogList(List catalogs) {
this.catalogsList = catalogs;
catalogCombo.removeAll();
for (Iterator iter = catalogs.iterator(); iter.hasNext();) {
EventCatalog catalog_i = (EventCatalog) iter.next();
/* TODO To verrify if the name is not already used */
catalogCombo.add(catalog_i.getCatalogName());
}
if (catalogs.size() > 0) {
/*
* catalogCombo.select(0); catalogCombo.notify();
*/
}
}
private void initialize() {
createCatalogGroup();
createSelectedGroup();
createButtonComposite();
this.setSize(new org.eclipse.swt.graphics.Point(518, 367));
}
/**
* This method initializes catalogGroup
*
*/
private void createCatalogGroup() {
catalogGroup = new Group(this, SWT.NONE);
createCatalogComposite();
createDescrComposite();
createEventGroup();
catalogGroup.setBounds(new org.eclipse.swt.graphics.Rectangle(15, 11, 331, 335));
catalogGroup.setText("Catalog selection");
}
/**
* This method initializes eventTable
*
*/
private void createEventTable() {
eventTable = new Table(eventGroup, SWT.BORDER | SWT.FULL_SELECTION | SWT.SINGLE);
eventTable.setHeaderVisible(true);
eventTable.setLinesVisible(true);
eventTable.setBounds(new org.eclipse.swt.graphics.Rectangle(15, 25, 293, 104));
eventTable.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
currentAlarmsRowSelected = eventTable.getSelectionIndex();
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
}
});
TableColumn nameColumn = new TableColumn(eventTable, SWT.NONE);
nameColumn.setWidth(90);
nameColumn.setText("Name");
TableColumn levelColumn = new TableColumn(eventTable, SWT.NONE);
levelColumn.setWidth(60);
levelColumn.setText("Parent");
TableColumn problemColumn = new TableColumn(eventTable, SWT.NONE);
problemColumn.setWidth(120);
problemColumn.setText("Macro");
}
/**
* This method initializes eventGroup
*
*/
private void createEventGroup() {
eventGroup = new Group(catalogGroup, SWT.NONE);
createEventTable();
eventGroup.setBounds(new org.eclipse.swt.graphics.Rectangle(8, 153, 315, 172));
eventGroup.setText("Stat Event");
viewButton = new Button(eventGroup, SWT.NONE);
viewButton.setBounds(new org.eclipse.swt.graphics.Rectangle(48, 139, 64, 23));
viewButton.setText("View Event");
viewAllButton = new Button(eventGroup, SWT.NONE);
viewAllButton.setBounds(new org.eclipse.swt.graphics.Rectangle(153, 139, 64, 23));
viewAllButton.setText("View All");
viewAllButton.addSelectionListener(new org.eclipse.swt.events.SelectionListener() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
if (currentCatalog != null) {
StatEventViewDialog dialog = new StatEventViewDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), eventStatList, false, new EventCatalog());
dialog.open();
}
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
}
});
viewButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
if (currentAlarmsRowSelected > -1 && eventStatList.size() >= currentAlarmsRowSelected) {
List toview = new ArrayList();
StatEvent eventSelected = (StatEvent) eventStatList.get(currentAlarmsRowSelected);
toview.add(eventSelected);
StatEventViewDialog dialog = new StatEventViewDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), toview, false, new EventCatalog());
dialog.open();
}
}
});
}
/**
* This method initializes selectedGroup
*
*/
private void createSelectedGroup() {
selectedGroup = new Group(this, SWT.NONE);
selectedGroup.setText("Selected Stat Events");
createSelectedTable();
selectedGroup.setBounds(new org.eclipse.swt.graphics.Rectangle(353, 71, 159, 158));
}
/**
* This method initializes selectedTable
*
*/
private void createSelectedTable() {
selectedTable = new Table(selectedGroup, SWT.NONE);
selectedTable.setHeaderVisible(true);
selectedTable.setLinesVisible(true);
selectedTable.setBounds(new org.eclipse.swt.graphics.Rectangle(14, 26, 109, 110));
TableColumn nameColumn = new TableColumn(selectedTable, SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION);
nameColumn.setWidth(100);
nameColumn.setText("Name");
selectedTable.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
currentdeslectAlarmsRowSelected = selectedTable.getSelectionIndex();
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
}
});
}
/**
* This method initializes catalogComposite
*
*/
private void createCatalogComposite() {
catalogComposite = new Composite(catalogGroup, SWT.NONE);
catalogComposite.setBounds(new org.eclipse.swt.graphics.Rectangle(6, 15, 306, 54));
label = new Label(catalogComposite, SWT.NONE);
label.setBounds(new org.eclipse.swt.graphics.Rectangle(5, 24, 124, 13));
label.setText("Statistic Event Catalogs:");
catalogCombo = new CCombo(catalogComposite, SWT.READ_ONLY | SWT.BORDER);
catalogCombo.setBounds(new org.eclipse.swt.graphics.Rectangle(132,24,166,17));
//catalogCombo.setEditable(true);
catalogCombo.addSelectionListener(new org.eclipse.swt.events.SelectionListener() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
/* 1. Get the currecnt selection */
int selectionRow = catalogCombo.getSelectionIndex();
if (selectionRow > -1) {
Object object_i = catalogsList.get(selectionRow);
if (object_i instanceof EventCatalog) {
EventCatalog catalog_i = (EventCatalog) object_i;
/* Load this catalog in the widget */
loadCatalog(catalog_i);
}
}
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
}
});
}
/**
* Load this catalog in the different fields of the widget. If the list of event
*
* @param catalog_i
*/
private void loadCatalog(EventCatalog catalog_i) {
currentCatalog = catalog_i;
/* 0. Load the events alarm of the catalog */
eventStatList = catalog_i.getAllStatEvent();
/* 1. Load the description */
String desc = catalog_i.getDocName();
processtxt(desc);
desctextArea.setText(desc);
/* 2. Load the event in the table */
eventTable.removeAll();
// List events = catalog_i.getAlarmEvents();
for (Iterator iter = eventStatList.iterator(); iter.hasNext();) {
StatEvent event_i = (StatEvent) iter.next();
TableItem item_i = new TableItem(eventTable, SWT.NULL);
item_i.setText(new String[] { event_i.getName(), event_i.getParent(), event_i.getMacro() });
}
}
private void processtxt(String desc) {
desc.replaceAll("'\n", " ");
desc.replaceAll("\t", "");
}
/**
* This method initializes descrComposite
*
*/
private void createDescrComposite() {
descrComposite = new Composite(catalogGroup, SWT.NONE);
descrComposite.setBounds(new org.eclipse.swt.graphics.Rectangle(7, 78, 302, 72));
label1 = new Label(descrComposite, SWT.NONE);
label1.setBounds(new org.eclipse.swt.graphics.Rectangle(12, 17, 57, 13));
label1.setText("Description:");
desctextArea = new Text(descrComposite, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL| SWT.BORDER);
desctextArea.setBounds(new org.eclipse.swt.graphics.Rectangle(75, 18, 221, 44));
desctextArea.setEditable(false);
}
/**
* This method initializes buttonComposite
*
*/
private void createButtonComposite() {
buttonComposite = new Composite(this, SWT.NONE);
buttonComposite.setBounds(new org.eclipse.swt.graphics.Rectangle(370, 238, 106, 84));
selectButton = new Button(buttonComposite, SWT.NONE);
selectButton.setBounds(new org.eclipse.swt.graphics.Rectangle(7, 5, 71, 23));
selectButton.setText(">>");
selectButton.addSelectionListener(new org.eclipse.swt.events.SelectionListener() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
if (currentAlarmsRowSelected > -1 && eventStatList.size() >= currentAlarmsRowSelected) {
StatEvent statEventSelected = (StatEvent) eventStatList.get(currentAlarmsRowSelected);
eventStatList.remove(currentAlarmsRowSelected);
selectedStatEvent.add(statEventSelected);
eventTable.remove(currentAlarmsRowSelected);
TableItem item_i = new TableItem(selectedTable, SWT.NULL);
item_i.setText(new String[] { statEventSelected.getName() });
// keep a track of the original list. If not, when
// user changes the current catalog
// we don't know nothing about where is the orginal
// list.
selectionMap.put(statEventSelected, eventStatList);
currentAlarmsRowSelected = -1;
}
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e) {
}
});
deselectButton = new Button(buttonComposite, SWT.NONE);
deselectButton.setBounds(new org.eclipse.swt.graphics.Rectangle(6, 39, 71, 23));
deselectButton.setText("<<");
deselectButton.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
if (currentdeslectAlarmsRowSelected > -1 && selectedStatEvent.size() >= currentdeslectAlarmsRowSelected) {
StatEvent statEventSelected = (StatEvent) selectedStatEvent.get(currentdeslectAlarmsRowSelected);
selectedStatEvent.remove(currentdeslectAlarmsRowSelected);
selectedTable.remove(currentdeslectAlarmsRowSelected);
currentdeslectAlarmsRowSelected = -1;
/* 1.Find the oringnal list */
List originList = (List) selectionMap.get(statEventSelected);
if (originList != null) {
originList.add(statEventSelected);
/* 2. Remove from the map */
selectionMap.remove(statEventSelected);
/* 3. Is it hte current list */
if (originList.equals(eventStatList)) {
TableItem item_i = new TableItem(eventTable, SWT.NULL);
item_i.setText(new String[] { statEventSelected.getName(), statEventSelected.getParent(),
statEventSelected.getMacro() });
} else {
// no refresh.
}
}
}
}
});
}
public void dispose() {
if (imageAlarm != null) {
imageAlarm.dispose();
imageAlarm = null;
}
super.dispose();
}
private List copy(List from) {
List to = new ArrayList();
for (Iterator iter = from.iterator(); iter.hasNext();) {
Object element = iter.next();
to.add(element);
}
return to;
}
/**
* @return the selected alarms.
*/
public StatEvent[] getSelectedStatEvents() {
StatEvent selected[] = new StatEvent[selectedStatEvent.size()];
for (int i = 0; i < selectedStatEvent.size(); i++) {
selected[i] = ((StatEvent) selectedStatEvent.get(i));
}
return selected;
}
/**
* Loads already-selected stat events
*
* @param selected_stat
* the list of [event, catalog caontaining this event]
*/
public void loadSelectedEvents(List selectedEvents) {
for (Iterator iter = selectedEvents.iterator(); iter.hasNext();) {
HashMap data = (HashMap) iter.next();
for (Iterator iterator = data.keySet().iterator(); iterator.hasNext();) {
// Extract the event and the associeted catalog
StatEvent event_i = (StatEvent) iterator.next();
EventCatalog catalog = (EventCatalog) data.get(event_i);
List catalogEventList = catalog.getAllStatEvent();
// Remove the event from the catalog list
catalogEventList.remove(event_i);
int index_cat = lookup(catalogsList, catalog);
if (index_cat > -1) {
// Get the list of event of this catalog (catalog of the class)
EventCatalog catalog_i = (EventCatalog) catalogsList.get(index_cat);
int index_event = lookupEvent(catalog_i.getAllStatEvent(), event_i);
if (index_event > -1) {
catalog_i.getAllStatEvent().remove(index_event);
// keep a track of the original list. If not, when
// user changes the current catalog
// we don't know nothing about where is the orginal list.
selectionMap.put(event_i, catalog_i.getAllStatEvent());
}
}
// Select the event
selectedStatEvent.add(event_i);
TableItem item_i = new TableItem(selectedTable, SWT.NULL);
item_i.setText(new String[] { event_i.getName() });
}
}
}
private int lookupEvent(List allStatEvent, StatEvent event_i) {
int i = 0;
for (Iterator iter = allStatEvent.iterator(); iter.hasNext(); i++) {
StatEvent event_j = (StatEvent) iter.next();
if (event_i.getParent().equals(event_j.getParent()))
if (event_i.getValue() == (event_j.getValue()))
return i;
}
return -1;
}
private int lookup(List listCat, EventCatalog catalog) {
int i = 0;
for (Iterator iter = listCat.iterator(); iter.hasNext(); i++) {
EventCatalog cat_i = (EventCatalog) iter.next();
if (cat_i.getCatalogName().equals(catalog.getCatalogName()))
return i;
}
return -1;
}
} // @jve:decl-index=0:visual-constraint="10,10"