package org.hpccsystems.recordlayout;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
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.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.pentaho.di.core.Const;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.ui.job.dialog.JobDialog;
import org.pentaho.di.ui.trans.step.BaseStepDialog;
import org.hpccsystems.eclguifeatures.AutoPopulate;
import org.hpccsystems.eclguifeatures.ErrorNotices;
import org.hpccsystems.recordlayout.CreateTable;
import org.hpccsystems.recordlayout.RecordBO;
import org.hpccsystems.recordlayout.RecordLabels;
import org.hpccsystems.recordlayout.RecordList;
import org.hpccsystems.ecljobentrybase.*;
public class AddColumnsDialog {
private String datasetName = "";
private ArrayList<String> selectedColumns = null;
private Display display = null;
String[] items = null;//ap.fieldsByDataset( datasetName,jobMeta.getJobCopies());
public AddColumnsDialog(Display display){
this.display=display;
selectedColumns = new ArrayList<String>();
}
public String getDatasetName() {
return datasetName;
}
public void setDatasetName(String datasetName) {
this.datasetName = datasetName;
}
public ArrayList<String> getSelectedColumns() {
return selectedColumns;
}
public void setSelectedColumns(ArrayList<String> selectedColumns) {
selectedColumns = selectedColumns;
}
public Display getDisplay() {
return display;
}
public void setDisplay(Display display) {
this.display = display;
}
public String[] getItems() {
return items;
}
public void setItems(String[] items) {
this.items = items;
}
public void run(){
// Need to preserve checked status
final Shell shellFilter = new Shell(display);
FormLayout layoutFilter = new FormLayout();
layoutFilter.marginWidth = 25;
layoutFilter.marginHeight = 25;
shellFilter.setLayout(layoutFilter);
shellFilter.setText("Select Columns");
Label filter = new Label(shellFilter, SWT.NONE);
filter.setText("Filter: ");
final Text NameFilter = new Text(shellFilter, SWT.SINGLE | SWT.BORDER);
final ArrayList<String[]> field = new ArrayList<String[]>();
final Tree tab = new Tree(shellFilter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
tab.setHeaderVisible(true);
tab.setLinesVisible(true);
final TreeColumn column1 = new TreeColumn(tab, SWT.LEFT);
column1.setText("Fields");
column1.setWidth(200);
column1.setImage(RecordLabels.getImage("unchecked"));
column1.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
boolean checkBoxFlag = false;
for (int i = 0; i < tab.getItemCount(); i++) {
if (tab.getItems()[i].getChecked()) {
checkBoxFlag = true;
}
}
if (checkBoxFlag) {
for (int m = 0; m < tab.getItemCount(); m++) {
tab.getItems()[m].setChecked(false);
column1.setImage(RecordLabels.getImage("unchecked"));
tab.deselectAll();
}
} else {
for (int m = 0; m < tab.getItemCount(); m++) {
tab.getItems()[m].setChecked(true);
column1.setImage(RecordLabels.getImage("checked"));
tab.selectAll();
}
}
for(int m = 0; m<tab.getItemCount(); m++){
if(tab.getItem(m).getChecked()){
String st = tab.getItem(m).getText();
int idx = 0;
for(Iterator<String[]> it2 = field.iterator(); it2.hasNext(); ){
String[] s = it2.next();
if(s[0].equalsIgnoreCase(st)){
idx = field.indexOf(s);
break;
}
}
field.remove(idx);
field.add(idx,new String[]{st,"true"});
// to find index of the selected item in the original field array list
}
}
tab.redraw();
}
});
Button okFilter = new Button(shellFilter, SWT.PUSH);
okFilter.setText(" OK ");
Button CancelFilter = new Button(shellFilter, SWT.PUSH);
CancelFilter.setText(" Cancel ");
AutoPopulate ap = new AutoPopulate();
try{
for(int i = 0; i < items.length; i++){
TreeItem item = new TreeItem(tab, SWT.NONE);
item.setText(items[i].toLowerCase());
field.add(new String[]{items[i].toLowerCase(),"false"});
}
}catch (Exception ex){
System.out.println("failed to load record definitions");
System.out.println(ex.toString());
ex.printStackTrace();
}
FormData dat = new FormData();
dat.top = new FormAttachment(NameFilter, 0, SWT.CENTER);
filter.setLayoutData(dat);
dat = new FormData();
dat.left = new FormAttachment(filter, 75, SWT.LEFT);
dat.right = new FormAttachment(100, 0);
NameFilter.setLayoutData(dat);
dat = new FormData(200,200);
dat.top = new FormAttachment(filter, 25);
dat.left = new FormAttachment(filter, 0, SWT.LEFT);
tab.setLayoutData(dat);
dat = new FormData();
dat.top = new FormAttachment(tab, 25);
dat.left = new FormAttachment(0, 45);
okFilter.setLayoutData(dat);
dat = new FormData();
dat.top = new FormAttachment(tab, 25);
dat.left = new FormAttachment(okFilter, 15);
CancelFilter.setLayoutData(dat);
NameFilter.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
tab.setItemCount(0);
for(Iterator<String[]> it1 = field.iterator(); it1.hasNext(); ){
String[] s = it1.next();
if(s[0].startsWith(NameFilter.getText())){
TreeItem I = new TreeItem(tab, SWT.NONE);
I.setText(0,s[0]);
if(s[1].equalsIgnoreCase("true"))
I.setChecked(true);
}
}
tab.setRedraw(true);
}
});
tab.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
String st = ((TreeItem)event.item).getText();
boolean f = ((TreeItem)event.item).getChecked();
int idx = 0;
for(Iterator<String[]> it2 = field.iterator(); it2.hasNext(); ){
String[] s = it2.next();
if(s[0].equalsIgnoreCase(st)){
idx = field.indexOf(s);
break;
}
}
field.remove(idx);
if(f)
field.add(idx,new String[]{st,"true"});
else
field.add(idx,new String[]{st,"false"});
}
});
Listener okfilter = new Listener(){
@Override
public void handleEvent(Event arg0) {
ArrayList<String[]> Str = new ArrayList<String[]>();
//for(Iterator<RecordBO> iterator = recordlist.getRecords().iterator(); iterator.hasNext();){
// String[] s1 = {iterator.next().getColumnName(),"STRING",""};
// Str.add(s1);
//}
for(int i = 0; i<tab.getItemCount(); i++){
if(tab.getItem(i).getChecked()){
boolean flag = true;
selectedColumns.add(tab.getItem(i).getText());
/*recordlist = ct.getRecordList();
if(recordlist.getRecords() != null && recordlist.getRecords().size() > 0) {
for(Iterator<RecordBO> iterator = recordlist.getRecords().iterator(); iterator.hasNext();){
if(tab.getItem(i).getText().equals(iterator.next().getColumnName()))
{flag = false; break;}
}
}*/
if(flag){
String[] S = {tab.getItem(i).getText(),"STRING",""};
Str.add(S);
}
}
}
//ct.setRecordList(jobEntry.ArrayListToRecordList(Str));
//ct.redrawTable(true);
//recordlist = ct.getRecordList();
shellFilter.dispose();
}
};
okFilter.addListener(SWT.Selection, okfilter);
Listener cancelfilter = new Listener(){
@Override
public void handleEvent(Event arg0) {
shellFilter.dispose();
}
};
CancelFilter.addListener(SWT.Selection, cancelfilter);
shellFilter.pack();
shellFilter.open();
while (!shellFilter.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}