/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.hpccsystems.pentaho.job.saltspecificity;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hpccsystems.eclguifeatures.AutoPopulate;
import org.hpccsystems.recordlayout.RecordBO;
import org.hpccsystems.recordlayout.RecordList;
import org.hpccsystems.saltui.hygiene.*;
//import org.hpccsystems.saltui.EntryBO;
//import org.hpccsystems.saltui.EntryList;
//import org.hpccsystems.saltui.HygieneRuleBO;
//import org.hpccsystems.saltui.HygieneRuleList;
import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.compatibility.Value;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.Result;
import org.pentaho.di.core.RowMetaAndData;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.xml.XMLHandler;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryBase;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.w3c.dom.Node;
import org.hpccsystems.ecljobentrybase.*;
import org.hpccsystems.javaecl.SaltGenerateSpecificities;
import org.hpccsystems.javaecl.SaltHygieneReport;
/**
*
* @author ChambersJ
*/
public class SALTSpecificity extends ECLJobEntry{//extends JobEntryBase implements Cloneable, JobEntryInterface {
private String datasetName;
private String layout;
private String idField;
public String getDatasetName() {
return datasetName;
}
public void setDatasetName(String datasetName) {
this.datasetName = datasetName;
}
public String getLayout() {
return layout;
}
public void setLayout(String layout) {
this.layout = layout;
}
public String getIdField() {
return idField;
}
public void setIdField(String idField) {
this.idField = idField;
}
@Override
public Result execute(Result prevResult, int k) throws KettleException {
Result result = modifyResults(prevResult);
if(result.isStopped()){
return result;
}
AutoPopulate ap = new AutoPopulate();
String jobNameNoSpace = "";
JobMeta jobMeta = super.parentJob.getJobMeta();
try{
String jobName = ap.getGlobalVariable(jobMeta.getJobCopies(),"jobName");
jobNameNoSpace = jobName.replace(" ", "_");
this.setLayout(ap.getDatasetsField("record_name", this.getDatasetName(),jobMeta.getJobCopies()));
}catch (Exception e){
System.out.println("Error Parsing existing Global Variables ");
System.out.println(e.toString());
e.printStackTrace();
}
SaltGenerateSpecificities ssr = new SaltGenerateSpecificities();
ssr.setDatasetName(datasetName);
ssr.setName(this.getName());
ssr.setSaltLib(jobNameNoSpace + "module");
ssr.setRecordName(layout);
logBasic("{Dataset Job} Execute = " + ssr.ecl());
logBasic("{Dataset Job} Previous =" + result.getLogText());
result.setResult(true);
RowMetaAndData data = new RowMetaAndData();
data.addValue("ecl", Value.VALUE_TYPE_STRING, ssr.ecl());
List list = result.getRows();
list.add(data);
String eclCode = parseEclFromRowData(list);
/*
String eclCode = "";
if (list == null) {
list = new ArrayList();
} else {
for (int i = 0; i < list.size(); i++) {
RowMetaAndData rowData = (RowMetaAndData) list.get(i);
String code = rowData.getString("ecl", null);
if (code != null) {
eclCode += code;
}
}
logBasic("{Dataset Job} ECL Code =" + eclCode);
}
*/
result.setRows(list);
result.setLogText("ECLDataset executed, ECL code added");
return result;
}
@Override
public void loadXML(Node node, List<DatabaseMeta> list, List<SlaveServer> list1, Repository rpstr) throws KettleXMLException {
try {
super.loadXML(node, list, list1);
if(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "datasetName")) != null)
setDatasetName(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "datasetName")));
if(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "layout")) != null)
setLayout(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "layout")));
if(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "idField")) != null)
setIdField(XMLHandler.getNodeValue(XMLHandler.getSubNode(node, "idField")));
} catch (Exception e) {
throw new KettleXMLException("ECL Dataset Job Plugin Unable to read step info from XML node", e);
}
}
public String getXML() {
String retval = "";
retval += super.getXML();
retval += " <datasetName><![CDATA[" + datasetName + "]]></datasetName>" + Const.CR;
retval += " <layout><![CDATA[" + layout + "]]></layout>" + Const.CR;
retval += " <idField><![CDATA[" + this.idField + "]]></idField>" + Const.CR;
return retval;
}
public void loadRep(Repository rep, ObjectId id_jobentry, List<DatabaseMeta> databases, List<SlaveServer> slaveServers)
throws KettleException {
try {
if(rep.getStepAttributeString(id_jobentry, "datasetName") != null)
datasetName = rep.getStepAttributeString(id_jobentry, "datasetName"); //$NON-NLS-1$
if(rep.getStepAttributeString(id_jobentry, "layout") != null)
layout = rep.getStepAttributeString(id_jobentry, "layout"); //$NON-NLS-1$
if(rep.getStepAttributeString(id_jobentry, "idField") != null)
this.setIdField(rep.getStepAttributeString(id_jobentry, "idField")); //$NON-NLS-1$
} catch (Exception e) {
throw new KettleException("Unexpected Exception", e);
}
}
public void saveRep(Repository rep, ObjectId id_job) throws KettleException {
try {
rep.saveStepAttribute(id_job, getObjectId(), "datasetName", datasetName); //$NON-NLS-1$
rep.saveStepAttribute(id_job, getObjectId(), "layout", layout); //$NON-NLS-1$
rep.saveStepAttribute(id_job, getObjectId(), "idField", this.getIdField()); //$NON-NLS-1$
} catch (Exception e) {
throw new KettleException("Unable to save info into repository" + id_job, e);
}
}
}