/* * 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(); } }