use of org.pentaho.di.core.gui.Point in project pentaho-kettle by pentaho.
the class BaseStreamingDialog method createSubTransMeta.
protected TransMeta createSubTransMeta() {
RecordsFromStreamMeta rm = new RecordsFromStreamMeta();
String[] fieldNames = getFieldNames();
int[] empty = new int[fieldNames.length];
Arrays.fill(empty, -1);
rm.setFieldname(fieldNames);
rm.setType(getFieldTypes());
rm.setLength(empty);
rm.setPrecision(empty);
StepMeta recsFromStream = new StepMeta("RecordsFromStream", "Get records from stream", rm);
recsFromStream.setLocation(new Point(100, 100));
recsFromStream.setDraw(true);
TransMeta transMeta = new TransMeta();
transMeta.addStep(recsFromStream);
transMeta.setFilename("");
return transMeta;
}
use of org.pentaho.di.core.gui.Point in project pentaho-kettle by pentaho.
the class SpoonJobDelegate method pasteXML.
public void pasteXML(JobMeta jobMeta, String clipcontent, Point loc) {
try {
Document doc = XMLHandler.loadXMLString(clipcontent);
// De-select all, re-select pasted steps...
jobMeta.unselectAll();
Node entriesnode = XMLHandler.getSubNode(doc, Spoon.XML_TAG_JOB_JOB_ENTRIES);
int nr = XMLHandler.countNodes(entriesnode, "entry");
spoon.getLog().logDebug(spoon.toString(), "I found " + nr + " job entries to paste on location: " + loc);
List<JobEntryCopy> entryList = new ArrayList<>(nr);
// Point min = new Point(loc.x, loc.y);
Point min = new Point(99999999, 99999999);
for (int i = 0; i < nr; i++) {
Node entrynode = XMLHandler.getSubNodeByNr(entriesnode, "entry", i);
JobEntryCopy copy = new JobEntryCopy(entrynode, jobMeta.getDatabases(), jobMeta.getSlaveServers(), spoon.getRepository(), spoon.getMetaStore());
if (copy.isStart() && (jobMeta.findStart() != null)) {
JobGraph.showOnlyStartOnceMessage(spoon.getShell());
continue;
}
String name = jobMeta.getAlternativeJobentryName(copy.getName());
copy.setName(name);
if (loc != null) {
Point p = copy.getLocation();
if (min.x > p.x) {
min.x = p.x;
}
if (min.y > p.y) {
min.y = p.y;
}
}
entryList.add(copy);
}
JobEntryCopy[] entries = entryList.toArray(new JobEntryCopy[] {});
// What's the difference between loc and min?
// This is the offset:
Point offset = new Point(loc.x - min.x, loc.y - min.y);
// Undo/redo object positions...
int[] position = new int[entries.length];
for (int i = 0; i < entries.length; i++) {
Point p = entries[i].getLocation();
String name = entries[i].getName();
entries[i].setLocation(p.x + offset.x, p.y + offset.y);
// Check the name, find alternative...
entries[i].setName(jobMeta.getAlternativeJobentryName(name));
jobMeta.addJobEntry(entries[i]);
position[i] = jobMeta.indexOfJobEntry(entries[i]);
}
// Save undo information too...
spoon.addUndoNew(jobMeta, entries, position);
if (jobMeta.hasChanged()) {
spoon.refreshTree();
spoon.refreshGraph();
}
} catch (KettleException e) {
new ErrorDialog(spoon.getShell(), BaseMessages.getString(PKG, "Spoon.ErrorDialog.ErrorPasingJobEntries.Title"), BaseMessages.getString(PKG, "Spoon.ErrorDialog.ErrorPasingJobEntries.Message"), e);
}
}
use of org.pentaho.di.core.gui.Point in project pentaho-kettle by pentaho.
the class SpoonJobDelegate method ripDB.
public JobMeta ripDB(final List<DatabaseMeta> databases, final String jobname, final RepositoryDirectoryInterface repdir, final String directory, final DatabaseMeta sourceDbInfo, final DatabaseMeta targetDbInfo, final String[] tables) {
//
// Create a new job...
//
final JobMeta jobMeta = new JobMeta();
jobMeta.setDatabases(databases);
jobMeta.setFilename(null);
jobMeta.setName(jobname);
if (spoon.getRepository() != null) {
jobMeta.setRepositoryDirectory(repdir);
} else {
jobMeta.setFilename(Const.createFilename(directory, jobname, "." + Const.STRING_JOB_DEFAULT_EXT));
}
spoon.refreshTree();
spoon.refreshGraph();
final Point location = new Point(50, 50);
// The start entry...
final JobEntryCopy start = JobMeta.createStartEntry();
start.setLocation(new Point(location.x, location.y));
start.setDrawn();
jobMeta.addJobEntry(start);
// final Thread parentThread = Thread.currentThread();
// Create a dialog with a progress indicator!
IRunnableWithProgress op = monitor -> {
try {
// This is running in a new process: copy some KettleVariables
// info
// LocalVariables.getInstance().createKettleVariables(Thread.currentThread().getName(),
// parentThread.getName(), true);
monitor.beginTask(BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.BuildingNewJob"), tables.length);
monitor.worked(0);
JobEntryCopy previous = start;
// Loop over the table-names...
for (int i = 0; i < tables.length && !monitor.isCanceled(); i++) {
monitor.setTaskName(BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.ProcessingTable") + tables[i] + "]...");
//
// Create the new transformation...
//
String transname = BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Transname1") + sourceDbInfo + "].[" + tables[i] + BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Transname2") + targetDbInfo + "]";
TransMeta transMeta = new TransMeta();
if (repdir != null) {
transMeta.setRepositoryDirectory(repdir);
} else {
transMeta.setFilename(Const.createFilename(directory, transname, "." + Const.STRING_TRANS_DEFAULT_EXT));
}
// Add the source & target db
transMeta.addDatabase(sourceDbInfo);
transMeta.addDatabase(targetDbInfo);
//
// Add a note
//
String note = BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Note1") + tables[i] + BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Note2") + sourceDbInfo + "]" + Const.CR;
note += BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Note3") + tables[i] + BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.Note4") + targetDbInfo + "]";
NotePadMeta ni = new NotePadMeta(note, 150, 10, -1, -1);
transMeta.addNote(ni);
//
// Add the TableInputMeta step...
//
String fromstepname = BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.FromStep.Name") + tables[i] + "]";
TableInputMeta tii = new TableInputMeta();
tii.setDefault();
tii.setDatabaseMeta(sourceDbInfo);
// It's already quoted!
tii.setSQL("SELECT * FROM " + tables[i]);
String fromstepid = PluginRegistry.getInstance().getPluginId(StepPluginType.class, tii);
StepMeta fromstep = new StepMeta(fromstepid, fromstepname, tii);
fromstep.setLocation(150, 100);
fromstep.setDraw(true);
fromstep.setDescription(BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.FromStep.Description") + tables[i] + BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.FromStep.Description2") + sourceDbInfo + "]");
transMeta.addStep(fromstep);
//
// Add the TableOutputMeta step...
//
String tostepname = BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.ToStep.Name") + tables[i] + "]";
TableOutputMeta toi = new TableOutputMeta();
toi.setDatabaseMeta(targetDbInfo);
toi.setTableName(tables[i]);
toi.setCommitSize(100);
toi.setTruncateTable(true);
String tostepid = PluginRegistry.getInstance().getPluginId(StepPluginType.class, toi);
StepMeta tostep = new StepMeta(tostepid, tostepname, toi);
tostep.setLocation(500, 100);
tostep.setDraw(true);
tostep.setDescription(BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.ToStep.Description1") + tables[i] + BaseMessages.getString(PKG, "Spoon.RipDB.Monitor.ToStep.Description2") + targetDbInfo + "]");
transMeta.addStep(tostep);
//
// Add a hop between the two steps...
//
TransHopMeta hi = new TransHopMeta(fromstep, tostep);
transMeta.addTransHop(hi);
//
// Now we generate the SQL needed to run for this
// transformation.
//
// First set the limit to 1 to speed things up!
String tmpSql = tii.getSQL();
tii.setSQL(tii.getSQL() + sourceDbInfo.getLimitClause(1));
String sql;
try {
sql = transMeta.getSQLStatementsString();
} catch (KettleStepException kse) {
throw new InvocationTargetException(kse, BaseMessages.getString(PKG, "Spoon.RipDB.Exception.ErrorGettingSQLFromTransformation") + transMeta + "] : " + kse.getMessage());
}
// remove the limit
tii.setSQL(tmpSql);
//
// Now, save the transformation...
//
boolean ok;
if (spoon.getRepository() != null) {
ok = spoon.saveToRepository(transMeta, false);
} else {
ok = spoon.saveToFile(transMeta);
}
if (!ok) {
throw new InvocationTargetException(new Exception(BaseMessages.getString(PKG, "Spoon.RipDB.Exception.UnableToSaveTransformationToRepository")), BaseMessages.getString(PKG, "Spoon.RipDB.Exception.UnableToSaveTransformationToRepository"));
}
// We can now continue with the population of the job...
// //////////////////////////////////////////////////////////////////////
location.x = 250;
if (i > 0) {
location.y += 100;
}
//
if (!Utils.isEmpty(sql)) {
String jesqlname = BaseMessages.getString(PKG, "Spoon.RipDB.JobEntrySQL.Name") + tables[i] + "]";
JobEntrySQL jesql = new JobEntrySQL(jesqlname);
jesql.setDatabase(targetDbInfo);
jesql.setSQL(sql);
jesql.setDescription(BaseMessages.getString(PKG, "Spoon.RipDB.JobEntrySQL.Description") + targetDbInfo + "].[" + tables[i] + "]");
JobEntryCopy jecsql = new JobEntryCopy();
jecsql.setEntry(jesql);
jecsql.setLocation(new Point(location.x, location.y));
jecsql.setDrawn();
jobMeta.addJobEntry(jecsql);
// Add the hop too...
JobHopMeta jhi = new JobHopMeta(previous, jecsql);
jobMeta.addJobHop(jhi);
previous = jecsql;
}
//
// Add the jobentry for the transformation too...
//
String jetransname = BaseMessages.getString(PKG, "Spoon.RipDB.JobEntryTrans.Name") + tables[i] + "]";
JobEntryTrans jetrans = new JobEntryTrans(jetransname);
jetrans.setTransname(transMeta.getName());
if (spoon.getRepository() != null) {
jetrans.setSpecificationMethod(ObjectLocationSpecificationMethod.REPOSITORY_BY_NAME);
jetrans.setDirectory(transMeta.getRepositoryDirectory().getPath());
} else {
jetrans.setSpecificationMethod(ObjectLocationSpecificationMethod.FILENAME);
jetrans.setFileName(Const.createFilename("${" + Const.INTERNAL_VARIABLE_JOB_FILENAME_DIRECTORY + "}", transMeta.getName(), "." + Const.STRING_TRANS_DEFAULT_EXT));
}
JobEntryCopy jectrans = new JobEntryCopy(jetrans);
jectrans.setDescription(BaseMessages.getString(PKG, "Spoon.RipDB.JobEntryTrans.Description1") + Const.CR + BaseMessages.getString(PKG, "Spoon.RipDB.JobEntryTrans.Description2") + sourceDbInfo + "].[" + tables[i] + "]" + Const.CR + BaseMessages.getString(PKG, "Spoon.RipDB.JobEntryTrans.Description3") + targetDbInfo + "].[" + tables[i] + "]");
jectrans.setDrawn();
location.x += 400;
jectrans.setLocation(new Point(location.x, location.y));
jobMeta.addJobEntry(jectrans);
// Add a hop between the last 2 job entries.
JobHopMeta jhi2 = new JobHopMeta(previous, jectrans);
jobMeta.addJobHop(jhi2);
previous = jectrans;
monitor.worked(1);
}
monitor.worked(100);
monitor.done();
} catch (Exception e) {
new ErrorDialog(spoon.getShell(), "Error", "An unexpected error occurred!", e);
}
};
try {
ProgressMonitorDialog pmd = new ProgressMonitorDialog(spoon.getShell());
pmd.run(false, true, op);
} catch (InvocationTargetException | InterruptedException e) {
new ErrorDialog(spoon.getShell(), BaseMessages.getString(PKG, "Spoon.ErrorDialog.RipDB.ErrorRippingTheDatabase.Title"), BaseMessages.getString(PKG, "Spoon.ErrorDialog.RipDB.ErrorRippingTheDatabase.Message"), e);
return null;
} finally {
spoon.refreshGraph();
spoon.refreshTree();
}
return jobMeta;
}
use of org.pentaho.di.core.gui.Point in project pentaho-kettle by pentaho.
the class SpoonJobDelegate method undoJobAction.
public void undoJobAction(JobMeta jobMeta, TransAction transAction) {
switch(transAction.getType()) {
// We created a new entry : undo this...
case TransAction.TYPE_ACTION_NEW_JOB_ENTRY:
// Delete the entry at correct location:
int[] idx = transAction.getCurrentIndex();
for (int i = idx.length - 1; i >= 0; i--) {
jobMeta.removeJobEntry(idx[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We created a new note : undo this...
case TransAction.TYPE_ACTION_NEW_NOTE:
// Delete the note at correct location:
idx = transAction.getCurrentIndex();
for (int i = idx.length - 1; i >= 0; i--) {
jobMeta.removeNote(idx[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We created a new hop : undo this...
case TransAction.TYPE_ACTION_NEW_JOB_HOP:
// Delete the hop at correct location:
idx = transAction.getCurrentIndex();
for (int i = idx.length - 1; i >= 0; i--) {
jobMeta.removeJobHop(idx[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We delete an entry : undo this...
case TransAction.TYPE_ACTION_DELETE_JOB_ENTRY:
// un-Delete the entry at correct location: re-insert
JobEntryCopy[] ce = (JobEntryCopy[]) transAction.getCurrent();
idx = transAction.getCurrentIndex();
for (int i = 0; i < ce.length; i++) {
jobMeta.addJobEntry(idx[i], ce[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We delete new note : undo this...
case TransAction.TYPE_ACTION_DELETE_NOTE:
// re-insert the note at correct location:
NotePadMeta[] ni = (NotePadMeta[]) transAction.getCurrent();
idx = transAction.getCurrentIndex();
for (int i = 0; i < idx.length; i++) {
jobMeta.addNote(idx[i], ni[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We deleted a new hop : undo this...
case TransAction.TYPE_ACTION_DELETE_JOB_HOP:
// re-insert the hop at correct location:
JobHopMeta[] hi = (JobHopMeta[]) transAction.getCurrent();
idx = transAction.getCurrentIndex();
for (int i = 0; i < hi.length; i++) {
jobMeta.addJobHop(idx[i], hi[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We changed a job entry: undo this...
case TransAction.TYPE_ACTION_CHANGE_JOB_ENTRY:
// Delete the current job entry, insert previous version.
for (int i = 0; i < transAction.getPrevious().length; i++) {
JobEntryCopy copy = (JobEntryCopy) ((JobEntryCopy) transAction.getPrevious()[i]).clone();
jobMeta.getJobEntry(transAction.getCurrentIndex()[i]).replaceMeta(copy);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We changed a note : undo this...
case TransAction.TYPE_ACTION_CHANGE_NOTE:
// Delete & re-insert
NotePadMeta[] prev = (NotePadMeta[]) transAction.getPrevious();
idx = transAction.getCurrentIndex();
for (int i = 0; i < idx.length; i++) {
jobMeta.removeNote(idx[i]);
jobMeta.addNote(idx[i], prev[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// We changed a hop : undo this...
case TransAction.TYPE_ACTION_CHANGE_JOB_HOP:
// Delete & re-insert
JobHopMeta[] prevHops = (JobHopMeta[]) transAction.getPrevious();
idx = transAction.getCurrentIndex();
for (int i = 0; i < idx.length; i++) {
jobMeta.removeJobHop(idx[i]);
jobMeta.addJobHop(idx[i], prevHops[i]);
}
spoon.refreshTree();
spoon.refreshGraph();
break;
// The position of a step has changed: undo this...
case TransAction.TYPE_ACTION_POSITION_JOB_ENTRY:
// Find the location of the step:
idx = transAction.getCurrentIndex();
Point[] p = transAction.getPreviousLocation();
for (int i = 0; i < p.length; i++) {
JobEntryCopy entry = jobMeta.getJobEntry(idx[i]);
entry.setLocation(p[i]);
}
spoon.refreshGraph();
break;
// The position of a note has changed: undo this...
case TransAction.TYPE_ACTION_POSITION_NOTE:
idx = transAction.getCurrentIndex();
Point[] prevLoc = transAction.getPreviousLocation();
for (int i = 0; i < idx.length; i++) {
NotePadMeta npi = jobMeta.getNote(idx[i]);
npi.setLocation(prevLoc[i]);
}
spoon.refreshGraph();
break;
default:
break;
}
}
use of org.pentaho.di.core.gui.Point in project pentaho-kettle by pentaho.
the class SpoonStepsDelegate method dupeStep.
public void dupeStep(TransMeta transMeta, StepMeta stepMeta) {
spoon.getLog().logDebug(toString(), // Duplicate
BaseMessages.getString(PKG, "Spoon.Log.DuplicateStep") + stepMeta.getName());
// step:
StepMeta stMeta = (StepMeta) stepMeta.clone();
if (stMeta != null) {
String newname = transMeta.getAlternativeStepname(stepMeta.getName());
int nr = 2;
while (transMeta.findStep(newname) != null) {
newname = stepMeta.getName() + " (copy " + nr + ")";
nr++;
}
stMeta.setName(newname);
// Don't select this new step!
stMeta.setSelected(false);
Point loc = stMeta.getLocation();
stMeta.setLocation(loc.x + 20, loc.y + 20);
transMeta.addStep(stMeta);
spoon.addUndoNew(transMeta, new StepMeta[] { (StepMeta) stMeta.clone() }, new int[] { transMeta.indexOfStep(stMeta) });
spoon.refreshTree();
spoon.refreshGraph();
}
}
Aggregations