package org.hpccsystems.saltui.concept; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.custom.TableEditor; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FormLayout; 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.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; 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.hpccsystems.recordlayout.RecordLabels; import org.hpccsystems.saltui.concept.edit.ConfigureConceptsUI; import org.hpccsystems.saltui.concept.table.ConceptsRecordList; import com.hpccsystems.ui.constants.Constants; public class CreateTable { //public Boolean hasChanged = false; private ArrayList datasetFields = null; private Shell shell; private Table table; private TableViewer tableViewer; private ConceptEntryList entryList; private ConceptEntryBO activeRule = new ConceptEntryBO(); private Composite compForGrp2; private ArrayList<TableEditor> tableEditEditor = new ArrayList<TableEditor>(); private ArrayList<TableEditor> tableDelEditor = new ArrayList<TableEditor>(); private int tmpBtnIndex = 0; private Shell editRuleDialog; //private ConceptRuleList ruleList; private String rules[]; private Combo ruleName; private String currentRuleName; /** * Return the RecordList */ private String fields[]; public void setEntryList(ConceptEntryList entryList) { this.entryList = entryList; } //public ConceptRuleList getRuleList() { // return ruleList; //} //public void setRuleList(ConceptRuleList ruleList) { // this.ruleList = ruleList; //} public ConceptEntryList getEntryList() { return entryList; } public void loadFields(String fields[]){ this.fields = fields; this.datasetFields = new ArrayList(); for(int i = 0; i< fields.length; i++){ this.datasetFields.add(fields[i]); } } public TabItem buildDetailsTab(String tabName, TabFolder tabFolder){ TabItem tabItem = new TabItem(tabFolder, SWT.NULL); tabItem.setText(tabName); /*Composite composite = new Composite(tabFolder, SWT.NONE); tabItem.setControl(composite);*/ GridLayout sc2Layout = new GridLayout(); GridData s2cData = new GridData(); s2cData.grabExcessHorizontalSpace = true; s2cData.grabExcessVerticalSpace = true; ScrolledComposite sc2 = new ScrolledComposite(tabFolder, SWT.H_SCROLL | SWT.V_SCROLL); compForGrp2 = new Composite(sc2, SWT.NONE); sc2.setContent(compForGrp2); sc2.setLayout(sc2Layout); // Set the minimum size sc2.setMinSize(650, 450); // Expand both horizontally and vertically sc2.setExpandHorizontal(true); sc2.setExpandVertical(true); // FormLayout groupLayout = new FormLayout(); // groupLayout.marginWidth = 10; // groupLayout.marginHeight = 10; GridData gridData = new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_BOTH); compForGrp2.setLayoutData (gridData); // Set numColumns to 6 for the buttons GridLayout layout = new GridLayout(2, false); compForGrp2.setLayout (layout); int style = SWT.CHECK | SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION; gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_BOTH); table = new Table(compForGrp2, style); table.setLayoutData(gridData); Listener paintListener = new Listener() { public void handleEvent(Event event) { // height cannot be per row so simply set try{ switch(event.type){ case SWT.MeasureItem: event.height = 20; break; case SWT.PaintItem: event.height = 20; break; } }catch(Exception e){ System.out.println("Listener error"); } } }; table.addListener(SWT.MeasureItem,paintListener); table.addListener(SWT.PaintItem,paintListener); //table.setRedraw(true); tableViewer = new TableViewer(table); table.addListener (SWT.Selection, new Listener () { public void handleEvent (Event event) { tableViewer.refresh(); table.redraw(); } }); GridData tableGridData = new GridData(GridData.FILL_BOTH); tableGridData.grabExcessVerticalSpace = true; tableGridData.horizontalSpan = 4; tableGridData.grabExcessHorizontalSpace = true; tableGridData.widthHint = 625; table.setLayoutData(tableGridData); table.setLinesVisible(true); table.setHeaderVisible(true); addColumns(); loadData(); addRowButtons(); //refreshTable(); //tabItem.setControl(compForGrp2); tabItem.setControl(sc2); createButtons(compForGrp2); //compForGrp2.redraw(); //sc2.redraw(); return tabItem; } public void refreshTable(){ tableViewer.refresh(); //table.redraw(); } public void removeRowButtons(){ //System.out.println("Remove Row Buttons--"); TableItem[] items = table.getItems(); for(int i=0; i<items.length;i++){ //System.out.println("Index: " + i + " size Edit: " + tableEditEditor.size()); if (i >= 0 && i < tableEditEditor.size()) { //System.out.println("Dispose tableEditEditor --"); tableEditEditor.get(i).getEditor().dispose(); tableEditEditor.get(i).dispose(); } //System.out.println("Index: " + i + " size Del: " + tableDelEditor.size()); if (i >= 0 && i < tableDelEditor.size()) { //System.out.println("Dispose tableDelEditor --"); tableDelEditor.get(i).getEditor().dispose(); tableDelEditor.get(i).dispose(); } } tmpBtnIndex++; tableEditEditor.clear(); tableDelEditor.clear(); tableEditEditor = new ArrayList<TableEditor>(); tableDelEditor = new ArrayList<TableEditor>(); } public void addRowButtons(){ TableItem[] items = table.getItems(); for(int i=0; i<items.length;i++){ //System.out.println("adding button: " + i); buildRowButtons(i); } } public void buildRowButtons(int i){ TableEditor tableEditEditor = new TableEditor(table); TableEditor tableDelEditor = new TableEditor(table); //get the row TableItem item = table.getItem(i);//items[i]; Button editButton = new Button(table,SWT.PUSH); editButton.setText("Edit"); //editButton.setText("EDIT"+tmpBtnIndex); tableEditEditor.minimumWidth = 45; tableEditEditor.minimumHeight = 18; tableEditEditor.horizontalAlignment = SWT.CENTER; tableEditEditor.setEditor(editButton,item,1); GridData editBtnGrid = new GridData(); editBtnGrid.widthHint = 45; editBtnGrid.heightHint = 18; editButton.setLayoutData(editBtnGrid); editButton.pack(); //add listner final int index = i; Listener editListener = new Listener() { public void handleEvent(Event e) { //System.out.println("EDIT--" + index); createEditDialog(index, entryList.getEntry(index)); } }; editButton.addListener(SWT.Selection, editListener); Button deleteButton = new Button(table,SWT.PUSH); //deleteButton.setText("Delete"+tmpBtnIndex); deleteButton.setText("Delete"); tableDelEditor.minimumWidth = 45; tableDelEditor.minimumHeight = 18; tableDelEditor.horizontalAlignment = SWT.CENTER; tableDelEditor.setEditor(deleteButton,item,2); GridData delBtnGrid = new GridData(); delBtnGrid.widthHint = 45; delBtnGrid.heightHint = 18; deleteButton.setLayoutData(delBtnGrid); deleteButton.pack(); //add listner Listener delListener = new Listener() { public void handleEvent(Event e) { deleteEntry(index); } }; deleteButton.addListener(SWT.Selection, delListener); this.tableEditEditor.add(tableEditEditor); this.tableDelEditor.add(tableDelEditor); } private void deleteEntry(int index){ //System.out.println("deleteEntry-- index: " + index); removeRowButtons(); entryList.removeEntry(index); tableViewer.remove(index); //table.getItem(index).dispose(); tableViewer.refresh(); table.setRedraw(true); table.redraw(); addRowButtons(); //refreshTable(); } public CreateTable(){ //ruleList = new ConceptRuleList(); //ruleList.createDefault(); } public static void main(String[] args) { ConceptEntryBO e = new ConceptEntryBO(); e.setConceptName("tester"); //e.setField("test"); //e.setRuleName("To Uppercase"); CreateTable ct = new CreateTable(); ct.datasetFields = new ArrayList(); ct.datasetFields.add("test"); ct.datasetFields.add("test2"); Display display = new Display (); final Shell dialog = new Shell (display, SWT.DIALOG_TRIM); ct.shell = dialog; //ct.createEditDialog(1, e); //ct.editRuleDialog = new Shell(ct.shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); //ct.editRuleDialog.setText("Edit Concept"); // ct.entryList = new ConceptEntryList(); GridLayout layout = new GridLayout(1, false); ct.shell.setLayout (layout); ct.run(dialog); while (!ct.shell.isDisposed ()) { ct.refreshTable(); if (!display.readAndDispatch ()) display.sleep (); } ct.shell.dispose (); } public void run(Shell shell) { this.shell = shell; shell.setText(Constants.ADD_CONCEPTS_TITLE); shell.setSize(800, 650); GridLayout layout = new GridLayout(2, false); layout.numColumns = 1; layout.marginLeft = 10; layout.marginRight = 10; layout.makeColumnsEqualWidth = false; shell.setLayout(layout); TabFolder tabFolder = new TabFolder (shell, SWT.FILL | SWT.RESIZE | SWT.MIN | SWT.MAX); TabItem item2 = this.buildDetailsTab("Concepts", tabFolder); Button tmpSave = new Button(shell, SWT.NONE); tmpSave.setText("Test Save"); Listener saveListener = new Listener() { public void handleEvent(Event e) { } }; tmpSave.addListener(SWT.Selection, saveListener); //addChildControls(); shell.open(); } private void createEditDialog(int entryIndex, ConceptEntryBO newEntry){ //tableViewer.getElementAt(index). editRuleDialog = new Shell(this.shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); editRuleDialog.setText("Edit Concept"); String inputFields = ""; if(newEntry != null && newEntry.getRecordList() != null){ inputFields = newEntry.getRecordList().saveListAsString(); } ConceptsRecordList recordList = new ConceptsRecordList(inputFields,datasetFields); newEntry.setRecordList(recordList); ConfigureConceptsUI concept = new ConfigureConceptsUI(newEntry,tableViewer); concept.run(editRuleDialog); } private void saveEditDialog(String oldRuleName, ConceptEntryBO entry, int thisEntryIndex){ String errors = ""; Boolean isValid = true; tableViewer.refresh(); table.setRedraw(true); table.redraw(); editRuleDialog.close(); } private void setDetailFieldsState(Boolean enable){ Color color = new Color(shell.getDisplay(),237,237,237); if(enable){ color = new Color(shell.getDisplay(),255,255,255); } //displayName.setEditable(enable); } private void updateHygieneRuleBO(){ //activeRule.setDisplayTitle(displayName.getText()); } private void loadRuleEditData(int selected){ /* System.out.println("loadRuleEditData - Selected Index: " + selected); if(selected > rules.length-1 || selected == -1 || ruleList.getTitles().length == 0 || ruleName.getText().equalsIgnoreCase("New Rule")){ //new rule System.out.println("new rule"); activeRule = new ConceptRuleBO(""); setDetailFieldsState(true); ruleName.setText("New Rule"); }else{ System.out.println("Current Active Rule : " + activeRule.getConceptName()); System.out.println("Loading new (existing) Active Rule: " + selected); activeRule = ruleList.get(selected); System.out.println("Loading : " + activeRule.getConceptName()); setDetailFieldsState(false); } */ System.out.println(activeRule.getConceptName()); // displayName.setText(activeRule.getDisplayTitle()); } /** * Add the Buttons * @param parent */ private void createButtons(Composite parent) { // Create and configure the "Add" button Button add = new Button(parent, SWT.PUSH | SWT.CENTER); add.setText("Add"); GridData gridData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING); gridData.widthHint = 80; add.setLayoutData(gridData); add.addSelectionListener(new SelectionAdapter() { // Add a record and refresh the view public void widgetSelected(SelectionEvent e) { removeRowButtons(); //System.out.println("Index: " + table.getSelectionIndex()); entryList.addEntry(table.getSelectionIndex()); addRowButtons(); tableViewer.refresh(); table.redraw(); createEditDialog(entryList.getEntries().size()-1, entryList.getEntry(entryList.getEntries().size()-1)); // rules = ruleList.getTitles(); } }); // Create and configure the "Delete" button Button delete = new Button(parent, SWT.PUSH | SWT.CENTER); delete.setText("Delete Selected"); gridData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING); gridData.widthHint = 90; delete.setLayoutData(gridData); delete.addSelectionListener(new SelectionAdapter() { //Remove all the records that are checked and refresh the view public void widgetSelected(SelectionEvent e) { List<Integer> arlCheckedIndexes = new ArrayList<Integer>(); for (int i = 0; i < table.getItemCount(); i++) { if (table.getItems()[i].getChecked()) { arlCheckedIndexes.add(i); } } Collections.sort(arlCheckedIndexes); Integer[] arrSortedIndexes = arlCheckedIndexes.toArray(new Integer[arlCheckedIndexes.size()]); for (int j = arrSortedIndexes.length - 1 ; j>=0; j--) { deleteEntry(arrSortedIndexes[j]); } table.getColumns()[0].setImage(RecordLabels.getImage("unchecked")); } }); } public void addColumns(){ TableColumn column = new TableColumn(table, SWT.LEFT, 0); column.setText("Concepts"); column.setWidth(500); TableColumn column2 = new TableColumn(table, SWT.CENTER, 1); column2.setText("Edit"); column2.setWidth(50); TableColumn column3 = new TableColumn(table, SWT.CENTER, 2); column3.setText("Delete"); column3.setWidth(50); } public void loadData(){ tableViewer.setContentProvider(new ExampleContentProvider()); //Set the Content Provider for the table tableViewer.setLabelProvider(new ConceptEntryLabels()); //Set the Label Provider for the table tableViewer.setInput(entryList); table.setRedraw(true); } public CreateTable(Shell shell) { // ruleList = new ConceptRuleList(); //ruleList.createDefault(); this.shell = shell; } public CreateTable(Shell shell, String[] datasets) { // ruleList = new ConceptRuleList(); //ruleList.createDefault(); this.shell = shell; this.datasetFields = new ArrayList(); for(int i = 0; i< datasets.length; i++){ this.datasetFields.add(datasets[i]); } } /** * InnerClass that acts as a proxy for the RecordList providing content for the Table. It implements the IRecordListViewer * interface since it must register changeListeners with the RecordList */ class ExampleContentProvider implements IStructuredContentProvider, IConceptEntryListViewer { public void inputChanged(Viewer v, Object oldInput, Object newInput) { if (newInput != null) { ((ConceptEntryList) newInput).addChangeListener(this); } if (oldInput != null) ((ConceptEntryList) oldInput).removeChangeListener(this); } public void dispose() { entryList.removeChangeListener(this); } // Return the tasks as an array of Objects public Object[] getElements(Object parent) { return entryList.getEntries().toArray(); } public void addEntry(ConceptEntryBO record) { //System.out.println("addRecord"); //Insert the record at a specific position // removeRowButtons(); if(tableViewer.getTable().getSelectionIndex() >= 0){ tableViewer.insert(record, tableViewer.getTable().getSelectionIndex()+1); //buildRowButtons(tableViewer.getTable().getSelectionIndex()+1); } else { tableViewer.add(record); //buildRowButtons(table.getItems().length-1); } refreshTable(); } public void removeEntry(int index) { //deleteEntry(index); } public void modifyEntry(ConceptEntryBO record) { tableViewer.update(record, null); } } public Button buildCheckbox(String strLabel, Composite cBox ){ Button chk = new Button(cBox,SWT.CHECK); chk.setText(strLabel); GridData chkData = new GridData(); chkData.horizontalSpan = 2; chkData.widthHint = 200; chkData.horizontalAlignment = SWT.RIGHT; chk.setLayoutData(chkData); return chk; } public Text buildText(String strLabel, Composite groupBox) { // label Label fmt = new Label(groupBox, SWT.RIGHT); fmt.setText(strLabel); Text text = new Text(groupBox, SWT.SINGLE | SWT.LEFT | SWT.BORDER); GridData gridData = new GridData(); gridData.widthHint = 200; text.setLayoutData(gridData); return text; } public Text buildMultiText(String strLabel, Composite groupBox) { // label Label fmt = new Label(groupBox, SWT.RIGHT); fmt.setText(strLabel); Text text = new Text(groupBox, SWT.MULTI | SWT.LEFT | SWT.BORDER | SWT.V_SCROLL); GridData gridData = new GridData(); gridData.widthHint = 200; text.setLayoutData(gridData); return text; } public Combo buildCombo(String strLabel, Composite groupBox, String[] items) { // label Label fmt = new Label(groupBox, SWT.RIGHT); fmt.setText(strLabel); Combo combo = new Combo(groupBox, SWT.MULTI | SWT.LEFT | SWT.BORDER); combo.setItems(items); GridData gridData = new GridData(); gridData.widthHint = 183; combo.setLayoutData(gridData); return combo; } public Label buildLabel(String strLabel, Control prevControl, ModifyListener lsMod, int middle, int margin, Composite groupBox){ Label fmt = new Label(groupBox, SWT.RIGHT); fmt.setText(strLabel); return fmt; } }