/*
* ALMA - Atacama Large Millimeter Array
* (c) Universidad Tecnica Federico Santa Maria, 2009
* Copyright by ESO (in the framework of the ALMA collaboration),
* All rights reserved
*
* This library 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 library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
package cl.utfsm.acs.acg.gui;
import java.util.ArrayList;
import java.util.Collections;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
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.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.eclipse.ui.part.ViewPart;
import alma.acs.alarmsystem.generated.Alarms;
import alma.acs.alarmsystem.generated.Category;
import alma.acs.alarmsystem.generated.FaultFamily;
import cl.utfsm.acs.acg.core.AlarmManager;
import cl.utfsm.acs.acg.core.AlarmSystemManager;
import cl.utfsm.acs.acg.core.CategoryManager;
import cl.utfsm.acs.acg.core.IllegalOperationException;
/**
* This class presents to the user all the information regarding to the
* Categories of the Alarm System configuration. It makes uses of the
* {@link CategoryManager} object to retrieve and set all the information
* from and to the CDB.
* @author rtobar
*/
public class CategoriesView extends ViewPart implements IMyViewPart {
public static String ID = "cl.utfsm.acs.acg.gui.categoriesview";
/** The {@link CategoryManager} instance associated to this
* view. The CategoryManager is in charge of handling the consistency
* of the information that the user inputs in this screen with the
* rest of the information that ACG uses.
*/
private CategoryManager _categoryManager;
private AlarmManager _alarmManager;
/* Widget objects */
/*** Left **/
private List _categoriesList;
private Button _addCategoryButton;
private Button _deleteCategoryButton;
private Group _listGroup;
/*** Right ***/
private Composite _compInitial;
private Group _comp;
private Label _pathLabel;
private Text _pathText;
private Label _descriptionLabel;
private Text _descriptionText;
private Label _isDefaultLabel;
private Button _isDefaultCheck;
private Label _ffLabel;
private Label _errorMessageLabel;
private List _ffList;
@Override
public void createPartControl(Composite parent) {
setTitleToolTip("Configuration of Alarms Categories.\nCategories group Fault Families.");
setTitleImage(Activator.getDefault().getImageRegistry().get(Activator.IMG_LINK));
createViewWidgets(parent);
refreshContents();
}
private void createViewWidgets(Composite parent) {
SashForm sash = new SashForm(parent, SWT.HORIZONTAL);
sash.setLayout(new FillLayout());
/* Left pane */
Composite categoriesComp = new Composite(sash,SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
categoriesComp.setLayout(layout);
_listGroup = new Group(categoriesComp,SWT.SHADOW_ETCHED_IN);
GridData gd = new GridData();
gd.horizontalAlignment = SWT.FILL;
gd.verticalAlignment = SWT.FILL;
gd.grabExcessHorizontalSpace = true;
gd.grabExcessVerticalSpace = true;
_listGroup.setLayoutData(gd);
GridLayout gl = new GridLayout();
gl.numColumns = 1;
_listGroup.setLayout(gl);
_listGroup.setText("Categories List");
_categoriesList = new List(_listGroup,SWT.BORDER | SWT.V_SCROLL);
_categoriesList.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
_categoriesList.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
Control c = _compInitial.getChildren()[0];
if( c instanceof Label ){
c.dispose();
}
_comp.setVisible(true);
_comp.layout();
/* Fill with the contents of the selected category */
/* The default category is stored as the data of the _categoryList */
/* and is shown with a "*" in the list */
if(_categoriesList.getSelection() == null || _categoriesList.getSelection().length == 0) {
_comp.setVisible(false);
_comp.layout();
return;
}
String categoryName = _categoriesList.getSelection()[0];
if(categoryName.startsWith("*"))
fillCategoryInfo((String)_categoriesList.getData());
else
fillCategoryInfo(categoryName);
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
}
});
/* Add and remove buttons */
Composite categoriesButtonsComp = new Composite(categoriesComp,SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
categoriesButtonsComp.setLayout(layout);
categoriesButtonsComp.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM,true,false));
_addCategoryButton = new Button(categoriesButtonsComp, SWT.None);
_addCategoryButton.setText("Add");
_addCategoryButton.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ADD));
_deleteCategoryButton = new Button(categoriesButtonsComp, SWT.None);
_deleteCategoryButton.setText("Delete");
_deleteCategoryButton.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_ETOOL_DELETE));
Listener addCategory = new Listener(){
public void handleEvent(Event event) {
InputDialog dialog = new InputDialog(CategoriesView.this.getViewSite().getShell(),
"New Category",
"Enter the Category name",
null,
new IInputValidator() {
public String isValid(String newText) {
if( newText.trim().compareTo("") == 0 )
return "The name is empty";
return null;
}
}
);
dialog.setBlockOnOpen(true);
dialog.open();
int returnCode = dialog.getReturnCode();
if (returnCode == InputDialog.OK) {
if(_categoryManager.getCategoryByPath(dialog.getValue()) != null) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Category already exist",
"The Category "+dialog.getValue()+" already exists in the current configuration",
new Status(IStatus.ERROR,"cl.utfsm.acs.acg","The Category "+dialog.getValue()+" already exists in the current configuration"),
IStatus.ERROR);
error.setBlockOnOpen(true);
error.open();
return;
}
Category newCategory = new Category();
newCategory.setPath(dialog.getValue());
InputDialog dialog2 = new InputDialog(CategoriesView.this.getViewSite().getShell(),
"Category Description",
"Enter the Description for the Category",
null,
new IInputValidator() {
public String isValid(String newText) {
if( newText.trim().compareTo("") == 0 )
return "The name is empty";
return null;
}
}
);
dialog2.setBlockOnOpen(true);
dialog2.open();
String description = dialog2.getValue();
if(description == null)
return;
if (returnCode == InputDialog.OK)
newCategory.setDescription(description);
java.util.List<String> ffnames = sortFullFaultFamilyList();
ListSelectionDialog dialog3 = new ListSelectionDialog(
PlatformUI.getWorkbench().getDisplay().getActiveShell(),
ffnames,
new ArrayContentProvider(),
new LabelProvider(),
""
);
dialog3.setTitle("Fault Family Selection");
dialog3.setMessage("List of Fault Families");
dialog3.setBlockOnOpen(true);
dialog3.open();
Object ffselected[] = dialog3.getResult();
if ( ffselected == null )
return;
if(ffselected.length ==0){
try {
_categoryManager.addCategory(newCategory);
} catch (IllegalOperationException e) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Category already exist",
"The Category "+dialog.getValue()+" already exists in the current configuration",
new Status(IStatus.ERROR,"cl.utfsm.acs.acg",e.getMessage()),
IStatus.ERROR);
error.setBlockOnOpen(true);
error.open();
return;
}
}else{
Alarms alarms = new Alarms();
for(int i = 0 ; i < ffselected.length ; i++){
try{
alarms.addFaultFamily(_alarmManager.getFaultFamily((String)ffselected[i]).getName());
//alarms.setFaultFamily(i, (String)ffselected[i]);
}catch(NullPointerException e){}
newCategory.setAlarms(alarms);
}
try {
_categoryManager.addCategory(newCategory);
} catch (IllegalOperationException e) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Category already exist",
"The Category "+dialog.getValue()+" already exists in the current configuration",
new Status(IStatus.ERROR,"cl.utfsm.acs.acg",e.getMessage()),
IStatus.ERROR);
error.setBlockOnOpen(true);
error.open();
return;
}
}
String[] items = new String[1];
items[0] = dialog.getValue();
refreshContents();
_categoriesList.setSelection(items);
Event e = new Event();
_categoriesList.notifyListeners(SWT.Selection, e);
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
}
else
return;
}
};
_addCategoryButton.addListener(SWT.Selection, addCategory);
Listener deleteCategory = new Listener() {
public void handleEvent(Event event) {
boolean choice = MessageDialog.openQuestion(
CategoriesView.this.getViewSite().getShell(),
"Confirmation",
"Are you sure you want to delete this Category"
);
if ( choice == true ){
String tmp[] = _categoriesList.getSelection();
if( tmp == null || tmp.length == 0) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Empty selection", "There are no Categories selected to be deleted", new Status(IStatus.ERROR,"cl.utfsm.acs.acg", ""),
IStatus.ERROR
);
error.setBlockOnOpen(true);
error.open();
return;
}
String category = tmp[0];
if(category.startsWith("*")) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Cannot delete Category",
"The Category cannot be deleted",
new Status(IStatus.ERROR,"cl.utfsm.acs.acg","There must be one default category. Please select a different one before removing this category."),
IStatus.ERROR);
error.setBlockOnOpen(true);
error.open();
return;
}
try {
_categoryManager.deleteCategory(_categoryManager.getCategoryByPath(category));
} catch (IllegalOperationException e) {
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Cannot delete Category",
"The Category cannot be deleted",
new Status(IStatus.ERROR,"cl.utfsm.acs.acg",e.getMessage()),
IStatus.ERROR);
error.setBlockOnOpen(true);
error.open();
return;
}
String[] items = null;
if(_categoriesList.getSelection() != null && _categoriesList.getSelection().length != 0) {
items = _categoriesList.getSelection();
refreshContents();
if(items == null)
if(_categoriesList.getItemCount() > 0)
_categoriesList.setSelection(0);
} else
_categoriesList.setSelection(items);
Event e = new Event();
_categoriesList.notifyListeners(SWT.Selection, e);
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
}
}
};
_deleteCategoryButton.addListener(SWT.Selection, deleteCategory);
/* To delete a FF from a given Category */
Listener deleteFaultFamily = new Listener() {
public void handleEvent(Event event) {
Category c = _categoryManager.getCategoryByPath(_pathText.getText());
try {
String[] ff = c.getAlarms().getFaultFamily();
Alarms alarms = new Alarms();
String[] temp = _ffList.getSelection();
//int j = 0;
for (int i = 0 ; i < ff.length ; i++){
if( ff[i].compareTo(temp[0]) == 0 ){
_ffList.remove(temp[0]);
c.getAlarms().removeFaultFamily(ff[i]);
}
else{
alarms.addFaultFamily(ff[i]);
//alarms.setFaultFamily(j, ff[i]);
//j++;
}
}
c.setAlarms(alarms);
_categoryManager.updateCategory(c,c);
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
boolean inUse = false;
boolean def = false;
String defCat = "";
for(Category cat: _categoryManager.getAllCategories()) {
String[] ffs = cat.getAlarms().getFaultFamily();
for(String tff : ffs) {
if(tff.compareTo(temp[0]) == 0)
inUse = true;
}
if(cat.getIsDefault()) {
def = true;
defCat = cat.getPath();
}
}
if(!inUse) {
String msg;
if(def)
msg = "Default category: "+defCat;
else
msg = "No default category";
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Fault Family isn't in any Categoty",
"The Fault Family is not part of any Category",
new Status(IStatus.WARNING,"cl.utfsm.acs.acg","The Fault Family "+temp[0]+" is not part of any Category ("+msg+")"),
IStatus.WARNING);
error.setBlockOnOpen(true);
error.open();
}
}catch(Exception e){
e.printStackTrace();
}
}
};
/* To delete all FF from a given Category */
Listener deleteAllFaultFamily = new Listener() {
public void handleEvent(Event event) {
Category c = _categoryManager.getCategoryByPath(_pathText.getText());
try {
String[] ff = c.getAlarms().getFaultFamily();
Alarms alarms = new Alarms();
for (int i = 0 ; i < ff.length ; i++){
_ffList.remove(ff[i]);
c.getAlarms().removeFaultFamily(ff[i]);
}
c.setAlarms(alarms);
_categoryManager.updateCategory(c,c);
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
java.util.List<String> ffList = new ArrayList<String>();
boolean def = false;
String defCat = "";
for(String cff: ff) {
Boolean inUse = false;
for(Category cat: _categoryManager.getAllCategories()) {
String[] ffs = cat.getAlarms().getFaultFamily();
for(String tff : ffs) {
if(tff.compareTo(cff) == 0)
inUse = true;
}
if(cat.getIsDefault()) {
def = true;
defCat = cat.getPath();
}
}
if(!inUse)
ffList.add(cff);
}
if(ffList.size() > 0) {
String list = "";
for(String ffel : ffList)
list = list + ffel + ", ";
list.substring(0,list.length()-2);
String msg;
if(def)
msg = "Default category: "+defCat;
else
msg = "No default category";
ErrorDialog error = new ErrorDialog(CategoriesView.this.getViewSite().getShell(),
"Fault Family isn't in any Categoty",
"The Fault Family is not part of any Category",
new Status(IStatus.WARNING,"cl.utfsm.acs.acg","The Fault Family(ies) "+list+" is not part of any Category ("+msg+")"),
IStatus.WARNING);
error.setBlockOnOpen(true);
error.open();
}
}catch(Exception e){
e.printStackTrace();
}
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
}
};
/* To add a new FF to a Category */
Listener addFaultFamily = new Listener() {
public void handleEvent(Event event) {
Category c = _categoryManager.getCategoryByPath(_pathText.getText());
java.util.List<String> currentffs = new ArrayList<String>();
try{
String[] ffss = c.getAlarms().getFaultFamily();
for (int i = 0 ; i < ffss.length ; i++){
currentffs.add(ffss[i]);
}
}catch(NullPointerException e) {
e.printStackTrace();
}
java.util.List<String> ffnames = sortFullFaultFamilyList();
ListSelectionDialog dialog3 = new ListSelectionDialog(
PlatformUI.getWorkbench().getDisplay().getActiveShell(),
ffnames,
new ArrayContentProvider(),
new LabelProvider(),
""
);
dialog3.setTitle("Fault Family Selection");
dialog3.setMessage("List of Fault Families");
dialog3.setBlockOnOpen(true);
if(currentffs != null)
dialog3.setInitialElementSelections(currentffs);
dialog3.open();
if(dialog3.getReturnCode() == InputDialog.OK) {
Object ffselected[] = dialog3.getResult();
try{
Alarms alarms = new Alarms();
for(int i = 0 ; i < ffselected.length ; i++)
alarms.addFaultFamily(_alarmManager.getFaultFamily((String)ffselected[i]).getName());
c.setAlarms(alarms);
_categoryManager.updateCategory(c, c);
sortCategoryFaultFamilyList(c.getPath());
}catch(Exception e){
e.printStackTrace();
}
String[] items = _categoriesList.getSelection();
refreshContents();
_categoriesList.setSelection(items);
Event e = new Event();
_categoriesList.notifyListeners(SWT.Selection, e);
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
}
}
};
/* Initial label when no categories are selected */
_compInitial = new Composite(sash,SWT.NONE);
_compInitial.setLayout(new GridLayout());
new Label(_compInitial,SWT.NONE).setText("Select a category");
/* Fill the right pane Group that will be shown when
* a category is selected in the left list */
layout = new GridLayout();
layout.numColumns = 2;
GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalAlignment = SWT.FILL;
gridData.verticalAlignment = SWT.FILL;
_comp = new Group(_compInitial, SWT.SHADOW_ETCHED_IN);
_comp.setText("Category information");
_comp.setLayout(layout);
_comp.setLayoutData(gridData);
_pathLabel = new Label(_comp,SWT.NONE);
_pathLabel.setText("Category name");
_pathText = new Text(_comp,SWT.SINGLE | SWT.BORDER);
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
_pathText.setLayoutData(gridData);
_descriptionLabel = new Label(_comp, SWT.NONE);
_descriptionLabel.setText("Category description");
_descriptionText = new Text(_comp,SWT.SINGLE | SWT.BORDER);
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
_descriptionText.setLayoutData(gridData);
_isDefaultLabel = new Label(_comp, SWT.NONE);
_isDefaultLabel.setText("Is default category?");
_isDefaultCheck = new Button(_comp, SWT.CHECK);
_ffLabel = new Label(_comp, SWT.NONE);
_ffLabel.setText("Fault Families:");
gridData = new GridData();
gridData.verticalAlignment = SWT.TOP;
gridData.horizontalSpan = 2;
_ffLabel.setLayoutData(gridData);
_ffList = new List(_comp,SWT.V_SCROLL | SWT.BORDER);
gridData = new GridData();
gridData.horizontalAlignment = SWT.FILL;
gridData.grabExcessHorizontalSpace = true;
gridData.verticalAlignment = SWT.FILL;
gridData.grabExcessVerticalSpace = true;
gridData.horizontalSpan = 2;
_ffList.setLayoutData(gridData);
_errorMessageLabel = new Label(_comp,SWT.NONE);
_errorMessageLabel.setText("A");
_errorMessageLabel.setForeground(getViewSite().getShell().getDisplay().getSystemColor(SWT.COLOR_RED));
gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = SWT.FILL;
gd.horizontalSpan = 2;
_errorMessageLabel.setLayoutData(gd);
/* Adding a click right menu to modify the FF of a given Category */
Menu treePopUp1 = new Menu(parent);
MenuItem treePopUpAddFF = new MenuItem(treePopUp1,SWT.PUSH);
treePopUpAddFF.setText("Add a new Fault Family");
treePopUpAddFF.addListener(SWT.Selection, addFaultFamily);
MenuItem treePopUpDeleteFF = new MenuItem(treePopUp1,SWT.PUSH);
treePopUpDeleteFF.setText("Delete this Fault Family");
treePopUpDeleteFF.addListener(SWT.Selection, deleteFaultFamily);
MenuItem treePopUpDeleteAllFF = new MenuItem(treePopUp1,SWT.PUSH);
treePopUpDeleteAllFF.setText("Delete All Fault Families");
treePopUpDeleteAllFF.addListener(SWT.Selection, deleteAllFaultFamily);
_ffList.setMenu(treePopUp1);
/* Adding a click menu to add/delete Categories */
Menu treePopUp2 = new Menu(parent);
MenuItem treePopUpaddCategory = new MenuItem(treePopUp2,SWT.PUSH);
treePopUpaddCategory.setText("Add a new Category");
treePopUpaddCategory.addListener(SWT.Selection, addCategory);
MenuItem treePopUpdeleteCategory = new MenuItem(treePopUp2,SWT.PUSH);
treePopUpdeleteCategory.setText("Delete this Category");
treePopUpdeleteCategory.addListener(SWT.Selection, deleteCategory);
_categoriesList.setMenu(treePopUp2);
_comp.setVisible(false);
/* Set a weight for each side of the view */
sash.setWeights(new int[] {3, 5});
Listener updateCategory = new Listener() {
public void handleEvent(Event e) {
updateName();
}
};
_descriptionText.addListener(SWT.Modify , updateCategory);
_pathText.addListener(SWT.Modify , updateCategory);
_isDefaultCheck.addListener(SWT.Selection, new Listener(){
public void handleEvent(Event e) {
String category;
if(_categoriesList.getSelection()[0].startsWith("*"))
category = (String)_categoriesList.getData();
else
category = _categoriesList.getSelection()[0];
if( _categoryManager.getCategoryByPath(category).getIsDefault() == true){
_isDefaultCheck.setSelection(true);
MessageBox messageBox = new MessageBox(PlatformUI.getWorkbench().getDisplay().getActiveShell(), SWT.ICON_ERROR);
messageBox.setMessage("The Default Category always must exist, you can only change it");
messageBox.open();
}
else{
_categoryManager.updateDefaultCategory(_categoryManager.getCategoryByPath(_categoriesList.getSelection()[0]));
String[] items = _categoriesList.getSelection();
refreshContents();
items[0] = "* "+items[0];
_categoriesList.setSelection(items);
Event e2 = new Event();
_categoriesList.notifyListeners(SWT.Selection, e2);
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
}
}
});
}
/* (non-Javadoc)
* @see cl.utfsm.acs.acg.gui.IMyViewPart#refreshContents()
*/
public void refreshContents() {
_categoriesList.removeAll();
_categoryManager = AlarmSystemManager.getInstance().getCategoryManager();
_alarmManager = AlarmSystemManager.getInstance().getAlarmManager();
sortCategoryList();
_comp.setVisible(false);
}
public void updateName(){
String[] lststr = _categoriesList.getSelection();
int[] lstsel = _categoriesList.getSelectionIndices();
if(lststr == null || lststr.length == 0)
return;
if(lstsel == null || lstsel.length == 0)
return;
String tmp = lststr[0];
int sel = lstsel[0];
if(tmp.startsWith("*"))
tmp = (String) _categoriesList.getData();
Category c = _categoryManager.getCategoryByPath(tmp);
if(c == null)
return;
Category ci = new Category();
if(_pathText.getText().isEmpty()) {
_errorMessageLabel.setText("Category Path Missing!");
return;
}
if(_pathText.getText().contains(" ")) {
_errorMessageLabel.setText("Invalid Category Path. No spaces allowed.");
return;
}
ci.setPath(_pathText.getText());
if(_descriptionText.getText().isEmpty()) {
_errorMessageLabel.setText("Category Description is Missing!");
return;
}
ci.setDescription(_descriptionText.getText());
ci.setIsDefault(c.getIsDefault());
ci.setAlarms(c.getAlarms());
_errorMessageLabel.setText("");
try{
_categoryManager.updateCategory(c, ci);
if(ci.getIsDefault())
_categoriesList.setItem(sel, "* "+_pathText.getText());
else
_categoriesList.setItem(sel, _pathText.getText());
sortCategoryList();
if(tmp.compareTo(ci.getPath()) != 0) {
IWorkbenchWindow _window = getViewSite().getWorkbenchWindow();
IViewReference[] views = _window.getActivePage().getViewReferences();
IMyViewPart view = ((IMyViewPart)views[3].getView(false));
//view.refreshContents();
view.fillWidgets();
}
}catch(IllegalOperationException e){
_errorMessageLabel.setText(e.getMessage());
}catch(NullPointerException e){
_errorMessageLabel.setText(e.getMessage());
}
}
public java.util.List<String> sortFullFaultFamilyList() {
java.util.List<FaultFamily> ffs = _alarmManager.getAllAlarms();
java.util.List<String> sortedFFs = new ArrayList<String>();
java.util.List<String> returnFFs = new ArrayList<String>();
for(FaultFamily ff: ffs)
sortedFFs.add(ff.getName().toLowerCase());
Collections.sort(sortedFFs);
for(String sff: sortedFFs)
for(FaultFamily ff: ffs)
if(sff.compareTo(ff.getName().toLowerCase()) == 0)
returnFFs.add(ff.getName());
return returnFFs;
}
public void sortCategoryFaultFamilyList(String string) {
Category cat = _categoryManager.getCategoryByPath(string);
_ffList.removeAll();
if(cat == null)
return;
if(cat.getAlarms() == null)
return;
String[] ffs = cat.getAlarms().getFaultFamily();
java.util.List<String> sortedFFs = new ArrayList<String>();
for(String ff: ffs)
sortedFFs.add(ff.toLowerCase());
Collections.sort(sortedFFs);
for(String sff: sortedFFs)
for(String ff: ffs)
if(sff.compareTo(ff.toLowerCase()) == 0)
_ffList.add(ff);
}
public void sortCategoryList() {
String[] tmp = _categoriesList.getSelection();
_categoriesList.removeAll();
java.util.List<String> sortedCats = new ArrayList<String>();
java.util.List<Category> cats = _categoryManager.getAllCategories();
for(Category cat:cats)
sortedCats.add(cat.getPath().toLowerCase());
Collections.sort(sortedCats);
for(String scat: sortedCats)
for(Category cat: cats)
if(cat.getPath().toLowerCase().compareTo(scat) == 0) {
if(cat.getIsDefault()) {
_categoriesList.add("* "+cat.getPath());
_categoriesList.setData(cat.getPath());
}
else
_categoriesList.add(cat.getPath());
}
_categoriesList.setSelection(tmp);
}
@Override
public void setFocus() {
}
private void fillCategoryInfo(String string) {
Category cat = _categoryManager.getCategoryByPath(string);
if(cat == null)
return;
String descriptionText = "";
String pathText = "";
boolean isDefaultCheck = false;
_ffList.removeAll();
if(cat.getDescription() != null)
descriptionText = cat.getDescription().trim();
if(cat.getPath() != null)
pathText = cat.getPath().trim();
if(cat.hasIsDefault())
isDefaultCheck = cat.getIsDefault();
sortCategoryFaultFamilyList(string);
if(_ffList.getItemCount() == 0)
_errorMessageLabel.setText("You have to select at least one Fault Family");
_descriptionText.setText(descriptionText);
_pathText.setText(pathText);
_isDefaultCheck.setSelection(isDefaultCheck);
_compInitial.layout();
}
/* (non-Javadoc)
* @see cl.utfsm.acs.acg.gui.IMyViewPart#setEnabled(boolean)
*/
public void setEnabled(boolean v) {
/* Left */
_categoriesList.setEnabled(v);
_addCategoryButton.setEnabled(v);
_deleteCategoryButton.setEnabled(v);
/* Right */
_pathText.setEnabled(v);
_descriptionText.setEnabled(v);
_isDefaultCheck.setEnabled(v);
_ffList.setEnabled(v);
}
@Override
public void fillWidgets() {
String[] tmp = _categoriesList.getSelection();
if(tmp==null || tmp.length==0){
return;
}
if(tmp[0].startsWith("*"))
fillCategoryInfo((String)_categoriesList.getData());
else
fillCategoryInfo(tmp[0]);
}
public void setReadOnly(boolean v) {
/*** Left **/
if(v) {
_categoriesList.setMenu(null);
_ffList.setMenu(null);
} else {
_categoriesList.setMenu(null);
_ffList.setMenu(null);
}
_addCategoryButton.setEnabled(!v);
_deleteCategoryButton.setEnabled(!v);
_pathText.setEnabled(!v);
_descriptionText.setEnabled(!v);
_isDefaultCheck.setEnabled(!v);
}
}