/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.hpccsystems.pentaho.job.saltspecificity;
import java.util.Iterator;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
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.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.FillLayout;
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.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.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.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryDialogInterface;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.ui.core.gui.WindowProperty;
import org.pentaho.di.ui.job.dialog.JobDialog;
import org.pentaho.di.ui.job.entry.JobEntryDialog;
import org.pentaho.di.ui.trans.step.BaseStepDialog;
import org.hpccsystems.eclguifeatures.AutoPopulate;
import org.hpccsystems.eclguifeatures.ErrorNotices;
import org.hpccsystems.recordlayout.RecordBO;
//import org.hpccsystems.saltui.
import org.hpccsystems.saltui.hygiene.*;
import org.hpccsystems.ecljobentrybase.*;
/**
*
* @author ChambersJ
*/
public class SALTSpecificityDialog extends ECLJobEntryDialog{//extends JobEntryDialog implements JobEntryDialogInterface {
private SALTSpecificity jobEntry;
private Text jobEntryName;
private Combo datasetName;
// private Combo idField;
private Button wOK, wCancel;
private boolean backupChanged;
private SelectionAdapter lsDef;
public SALTSpecificityDialog(Shell parent, JobEntryInterface jobEntryInt, Repository rep, JobMeta jobMeta) {
super(parent, jobEntryInt, rep, jobMeta);
jobEntry = (SALTSpecificity) jobEntryInt;
if (this.jobEntry.getName() == null) {
this.jobEntry.setName("Salt Hygiene");
}
}
public JobEntryInterface open() {
Shell parentShell = getParent();
Display display = parentShell.getDisplay();
String datasets[] = null;
AutoPopulate ap = new AutoPopulate();
try{
//Object[] jec = this.jobMeta.getJobCopies().toArray();
datasets = ap.parseDatasetsRecordsets(this.jobMeta.getJobCopies());
}catch (Exception e){
System.out.println("Error Parsing existing Datasets");
System.out.println(e.toString());
datasets = new String[]{""};
}
//see need to get the dataset set on screen a pass its fields in
shell = new Shell(parentShell, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MIN | SWT.MAX);
TabFolder tabFolder = new TabFolder (shell, SWT.FILL | SWT.RESIZE | SWT.MIN | SWT.MAX);
FormData data = new FormData();
data.height = 500;
data.width = 650;
tabFolder.setLayoutData(data);
Composite compForGrp = new Composite(tabFolder, SWT.NONE);
//compForGrp.setLayout(new FillLayout(SWT.VERTICAL));
compForGrp.setBackground(new Color(tabFolder.getDisplay(),255,255,255));
compForGrp.setLayout(new FormLayout());
TabItem item1 = new TabItem(tabFolder, SWT.NULL);
item1.setText ("General");
props.setLook(shell);
JobDialog.setShellImage(shell, jobEntry);
ModifyListener lsMod = new ModifyListener() {
public void modifyText(ModifyEvent e) {
jobEntry.setChanged();
}
};
backupChanged = jobEntry.hasChanged();
FormLayout formLayout = new FormLayout();
formLayout.marginWidth = Const.FORM_MARGIN;
formLayout.marginHeight = Const.FORM_MARGIN;
shell.setLayout(formLayout);
shell.setText("Salt Hygiene");
int middle = props.getMiddlePct();
int margin = Const.MARGIN;
shell.setLayout(formLayout);
shell.setText("Define Salt Hygiene Rules");
FormLayout groupLayout = new FormLayout();
groupLayout.marginWidth = 10;
groupLayout.marginHeight = 10;
// Stepname line
Group generalGroup = new Group(compForGrp, SWT.SHADOW_NONE);
props.setLook(generalGroup);
generalGroup.setText("General Details");
generalGroup.setLayout(groupLayout);
FormData generalGroupFormat = new FormData();
generalGroupFormat.top = new FormAttachment(0, margin);
generalGroupFormat.width = 400;
generalGroupFormat.height = 65;
generalGroupFormat.left = new FormAttachment(middle, 0);
generalGroup.setLayoutData(generalGroupFormat);
jobEntryName = buildText("Job Entry Name", null, lsMod, middle, margin, generalGroup);
//All other contols
//Join Declaration
Group joinGroup = new Group(compForGrp, SWT.SHADOW_NONE);
props.setLook(joinGroup);
joinGroup.setText("Data Profiling Details");
joinGroup.setLayout(groupLayout);
FormData joinGroupFormat = new FormData();
joinGroupFormat.top = new FormAttachment(generalGroup, margin);
joinGroupFormat.width = 400;
joinGroupFormat.height = 150;
joinGroupFormat.left = new FormAttachment(middle, 0);
joinGroup.setLayoutData(joinGroupFormat);
item1.setControl(compForGrp);
this.datasetName = buildCombo("Dataset Name", null, lsMod, middle, margin, joinGroup,datasets);
String[] items = null;
try{
items = ap.fieldsByDataset( datasetName.getText(),jobMeta.getJobCopies());
}catch (Exception exc){
System.out.println("error loading dataset fields");
}
// this.idField = buildCombo("ID Field", datasetName, lsMod, middle, margin, joinGroup,items);
/*
datasetName.addModifyListener(new ModifyListener(){
public void modifyText(ModifyEvent e){
System.out.println("left RS changed");
AutoPopulate ap = new AutoPopulate();
try{
String[] items = ap.fieldsByDataset( datasetName.getText(),jobMeta.getJobCopies());
populateIDField(datasetName.getText(), items);
}catch (Exception exc){
System.out.println("error loading dataset fields");
}
}
});
*/
wOK = new Button(shell, SWT.PUSH);
wOK.setText("OK");
wCancel = new Button(shell, SWT.PUSH);
wCancel.setText("Cancel");
BaseStepDialog.positionBottomButtons(shell, new Button[]{wOK, wCancel}, margin, tabFolder);
// Add listeners
Listener cancelListener = new Listener() {
public void handleEvent(Event e) {
cancel();
}
};
Listener okListener = new Listener() {
public void handleEvent(Event e) {
ok();
}
};
wCancel.addListener(SWT.Selection, cancelListener);
wOK.addListener(SWT.Selection, okListener);
lsDef = new SelectionAdapter() {
public void widgetDefaultSelected(SelectionEvent e) {
ok();
}
};
tabFolder.setRedraw(true);
// Detect X or ALT-F4 or something that kills this window...
shell.addShellListener(new ShellAdapter() {
public void shellClosed(ShellEvent e) {
cancel();
}
});
if (jobEntry.getName() != null) {
jobEntryName.setText(jobEntry.getName());
}
//if (jobEntry.getJoinCondition() != null) {
//this.joinCondition.setText(jobEntry.getJoinCondition());
//}
if (jobEntry.getDatasetName() != null) {
/*
try{
String[] newItems = ap.fieldsByDataset( datasetName.getText(),jobMeta.getJobCopies());
populateIDField(datasetName.getText(), newItems);
}catch (Exception exc){
System.out.println("error loading dataset fields");
}*/
this.datasetName.setText(jobEntry.getDatasetName());
}
//if (jobEntry.getIdField() != null) {
// this.idField.setText(jobEntry.getIdField());
// }
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return jobEntry;
}
/*
public void populateIDField(String dsName, String[] items){
this.idField.removeAll();
for (int i = 0; i<items.length; i++){
this.idField.add(items[i]);
}
}*/
private boolean validate(){
boolean isValid = true;
String errors = "";
if(this.jobEntryName.getText().equals("")){
isValid = false;
errors += "\"Job Entry Name\" is a required field!\r\n";
}
if(this.datasetName.getText().equals("")){
isValid = false;
errors += "\"Dataset Name\" is a required field!\r\n";
}
if(!isValid){
ErrorNotices en = new ErrorNotices();
errors += "\r\n";
errors += "If you continue to save with errors you may encounter compile errors if you try to execute the job.\r\n\r\n";
isValid = en.openValidateDialog(getParent(),errors);
}
return isValid;
}
private void ok() {
if(!validate()){
return;
}
jobEntry.setName(jobEntryName.getText());
jobEntry.setDatasetName(datasetName.getText());
//jobEntry.setIdField((this.idField.getText()));
dispose();
}
private void cancel() {
jobEntry.setChanged(backupChanged);
jobEntry = null;
dispose();
}
}