Search in sources :

Example 81 with Result

use of org.pentaho.di.core.Result in project pentaho-kettle by pentaho.

the class SystemData method getSystemData.

private Object[] getSystemData(RowMetaInterface inputRowMeta, Object[] inputRowData) throws KettleException {
    Object[] row = new Object[data.outputRowMeta.size()];
    for (int i = 0; i < inputRowMeta.size(); i++) {
        // no data is changed, clone is not needed here.
        row[i] = inputRowData[i];
    }
    for (int i = 0, index = inputRowMeta.size(); i < meta.getFieldName().length; i++, index++) {
        Calendar cal;
        int argnr = 0;
        switch(meta.getFieldType()[i]) {
            case TYPE_SYSTEM_INFO_SYSTEM_START:
                row[index] = getTrans().getCurrentDate();
                break;
            case TYPE_SYSTEM_INFO_SYSTEM_DATE:
                row[index] = new Date();
                break;
            case TYPE_SYSTEM_INFO_TRANS_DATE_FROM:
                row[index] = getTrans().getStartDate();
                break;
            case TYPE_SYSTEM_INFO_TRANS_DATE_TO:
                row[index] = getTrans().getEndDate();
                break;
            case TYPE_SYSTEM_INFO_JOB_DATE_FROM:
                row[index] = getTrans().getJobStartDate();
                break;
            case TYPE_SYSTEM_INFO_JOB_DATE_TO:
                row[index] = getTrans().getJobEndDate();
                break;
            case TYPE_SYSTEM_INFO_PREV_DAY_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, -1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_DAY_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, -1);
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_DAY_START:
                cal = Calendar.getInstance();
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_DAY_END:
                cal = Calendar.getInstance();
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_DAY_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_DAY_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_MONTH_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, -1);
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_MONTH_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, -1);
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_MONTH_START:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_MONTH_END:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_MONTH_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 1);
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_MONTH_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 1);
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_COPYNR:
                row[index] = new Long(getCopy());
                break;
            case TYPE_SYSTEM_INFO_TRANS_NAME:
                row[index] = getTransMeta().getName();
                break;
            case TYPE_SYSTEM_INFO_MODIFIED_USER:
                row[index] = getTransMeta().getModifiedUser();
                break;
            case TYPE_SYSTEM_INFO_MODIFIED_DATE:
                row[index] = getTransMeta().getModifiedDate();
                break;
            case TYPE_SYSTEM_INFO_TRANS_BATCH_ID:
                row[index] = new Long(getTrans().getBatchId());
                break;
            case TYPE_SYSTEM_INFO_JOB_BATCH_ID:
                row[index] = new Long(getTrans().getPassedBatchId());
                break;
            case TYPE_SYSTEM_INFO_HOSTNAME_REAL:
                row[index] = Const.getHostnameReal();
                break;
            case TYPE_SYSTEM_INFO_HOSTNAME:
                row[index] = Const.getHostname();
                break;
            case TYPE_SYSTEM_INFO_IP_ADDRESS:
                try {
                    row[index] = Const.getIPAddress();
                } catch (Exception e) {
                    throw new KettleException(e);
                }
                break;
            case TYPE_SYSTEM_INFO_FILENAME:
                row[index] = getTransMeta().getFilename();
                break;
            case TYPE_SYSTEM_INFO_ARGUMENT_01:
            case TYPE_SYSTEM_INFO_ARGUMENT_02:
            case TYPE_SYSTEM_INFO_ARGUMENT_03:
            case TYPE_SYSTEM_INFO_ARGUMENT_04:
            case TYPE_SYSTEM_INFO_ARGUMENT_05:
            case TYPE_SYSTEM_INFO_ARGUMENT_06:
            case TYPE_SYSTEM_INFO_ARGUMENT_07:
            case TYPE_SYSTEM_INFO_ARGUMENT_08:
            case TYPE_SYSTEM_INFO_ARGUMENT_09:
            case TYPE_SYSTEM_INFO_ARGUMENT_10:
                argnr = meta.getFieldType()[i].ordinal() - SystemDataTypes.TYPE_SYSTEM_INFO_ARGUMENT_01.ordinal();
                if (getTrans().getArguments() != null && argnr < getTrans().getArguments().length) {
                    row[index] = getTrans().getArguments()[argnr];
                } else {
                    row[index] = null;
                }
                break;
            case TYPE_SYSTEM_INFO_KETTLE_VERSION:
                row[index] = BuildVersion.getInstance().getVersion();
                break;
            case TYPE_SYSTEM_INFO_KETTLE_BUILD_VERSION:
                row[index] = BuildVersion.getInstance().getVersion();
                break;
            case TYPE_SYSTEM_INFO_KETTLE_BUILD_DATE:
                row[index] = BuildVersion.getInstance().getBuildDateAsLocalDate();
                break;
            case TYPE_SYSTEM_INFO_CURRENT_PID:
                row[index] = new Long(Management.getPID());
                break;
            case TYPE_SYSTEM_INFO_JVM_TOTAL_MEMORY:
                row[index] = Runtime.getRuntime().totalMemory();
                break;
            case TYPE_SYSTEM_INFO_JVM_FREE_MEMORY:
                row[index] = Runtime.getRuntime().freeMemory();
                break;
            case TYPE_SYSTEM_INFO_JVM_MAX_MEMORY:
                row[index] = Runtime.getRuntime().maxMemory();
                break;
            case TYPE_SYSTEM_INFO_JVM_AVAILABLE_MEMORY:
                Runtime rt = Runtime.getRuntime();
                row[index] = rt.freeMemory() + (rt.maxMemory() - rt.totalMemory());
                break;
            case TYPE_SYSTEM_INFO_AVAILABLE_PROCESSORS:
                row[index] = (long) Runtime.getRuntime().availableProcessors();
                break;
            case TYPE_SYSTEM_INFO_JVM_CPU_TIME:
                row[index] = Management.getJVMCpuTime() / 1000000;
                break;
            case TYPE_SYSTEM_INFO_TOTAL_PHYSICAL_MEMORY_SIZE:
                row[index] = Management.getTotalPhysicalMemorySize();
                break;
            case TYPE_SYSTEM_INFO_TOTAL_SWAP_SPACE_SIZE:
                row[index] = Management.getTotalSwapSpaceSize();
                break;
            case TYPE_SYSTEM_INFO_COMMITTED_VIRTUAL_MEMORY_SIZE:
                row[index] = Management.getCommittedVirtualMemorySize();
                break;
            case TYPE_SYSTEM_INFO_FREE_PHYSICAL_MEMORY_SIZE:
                row[index] = Management.getFreePhysicalMemorySize();
                break;
            case TYPE_SYSTEM_INFO_FREE_SWAP_SPACE_SIZE:
                row[index] = Management.getFreeSwapSpaceSize();
                break;
            case TYPE_SYSTEM_INFO_PREV_WEEK_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, -1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_WEEK_END:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_WEEK_OPEN_END:
                cal = Calendar.getInstance(Locale.ROOT);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                cal.add(Calendar.DAY_OF_WEEK, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_WEEK_START_US:
                cal = Calendar.getInstance(Locale.US);
                cal.add(Calendar.WEEK_OF_YEAR, -1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_WEEK_END_US:
                cal = Calendar.getInstance(Locale.US);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_WEEK_START:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_WEEK_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_WEEK_OPEN_END:
                cal = Calendar.getInstance(Locale.ROOT);
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                cal.add(Calendar.DAY_OF_WEEK, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_WEEK_START_US:
                cal = Calendar.getInstance(Locale.US);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_WEEK_END_US:
                cal = Calendar.getInstance(Locale.US);
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_WEEK_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_WEEK_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.WEEK_OF_YEAR, 2);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_WEEK_OPEN_END:
                cal = Calendar.getInstance(Locale.ROOT);
                cal.add(Calendar.WEEK_OF_YEAR, 2);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                cal.add(Calendar.DAY_OF_WEEK, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_WEEK_START_US:
                cal = Calendar.getInstance(Locale.US);
                cal.add(Calendar.WEEK_OF_YEAR, 1);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_WEEK_END_US:
                cal = Calendar.getInstance(Locale.US);
                cal.add(Calendar.WEEK_OF_YEAR, 2);
                cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, -1);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_QUARTER_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, -3 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_QUARTER_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, -1 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_QUARTER_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 0 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_QUARTER_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 2 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_QUARTER_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 3 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, 1);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_QUARTER_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.MONTH, 5 - (cal.get(Calendar.MONTH) % 3));
                cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_YEAR_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.YEAR, -1);
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREV_YEAR_END:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.add(Calendar.DAY_OF_YEAR, -1);
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_YEAR_START:
                cal = Calendar.getInstance();
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_THIS_YEAR_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.YEAR, 1);
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.add(Calendar.DAY_OF_YEAR, -1);
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_YEAR_START:
                cal = Calendar.getInstance();
                cal.add(Calendar.YEAR, 1);
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_NEXT_YEAR_END:
                cal = Calendar.getInstance();
                cal.add(Calendar.YEAR, 2);
                cal.set(Calendar.DAY_OF_YEAR, cal.getActualMinimum(Calendar.DATE));
                cal.add(Calendar.DAY_OF_YEAR, -1);
                cal.set(Calendar.HOUR_OF_DAY, 23);
                cal.set(Calendar.MINUTE, 59);
                cal.set(Calendar.SECOND, 59);
                cal.set(Calendar.MILLISECOND, 999);
                row[index] = cal.getTime();
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_RESULT:
                Result previousResult = getTrans().getPreviousResult();
                boolean result = false;
                if (previousResult != null) {
                    result = previousResult.getResult();
                }
                row[index] = result;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_EXIT_STATUS:
                previousResult = getTrans().getPreviousResult();
                long value = 0;
                if (previousResult != null) {
                    value = previousResult.getExitStatus();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_ENTRY_NR:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getEntryNr();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_FILES:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getResultFiles().size();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_FILES_RETRIEVED:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrFilesRetrieved();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_DELETED:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesDeleted();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_INPUT:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesInput();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_OUTPUT:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesOutput();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_READ:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesRead();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_REJETED:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesRejected();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_UPDATED:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesUpdated();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_LINES_WRITTEN:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrLinesWritten();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_ROWS:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getRows().size();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_IS_STOPPED:
                previousResult = getTrans().getPreviousResult();
                boolean stop = false;
                if (previousResult != null) {
                    stop = previousResult.isStopped();
                }
                row[index] = stop;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_NR_ERRORS:
                previousResult = getTrans().getPreviousResult();
                value = 0;
                if (previousResult != null) {
                    value = previousResult.getNrErrors();
                }
                row[index] = value;
                break;
            case TYPE_SYSTEM_INFO_PREVIOUS_RESULT_LOG_TEXT:
                previousResult = getTrans().getPreviousResult();
                String errorReason = null;
                if (previousResult != null) {
                    errorReason = previousResult.getLogText();
                }
                row[index] = errorReason;
                break;
            default:
                break;
        }
    }
    return row;
}
Also used : KettleException(org.pentaho.di.core.exception.KettleException) Calendar(java.util.Calendar) Date(java.util.Date) KettleException(org.pentaho.di.core.exception.KettleException) Result(org.pentaho.di.core.Result)

Example 82 with Result

use of org.pentaho.di.core.Result in project pentaho-kettle by pentaho.

the class RowsFromResult method processRow.

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {
    Result previousResult = getTrans().getPreviousResult();
    if (previousResult == null || getLinesRead() >= previousResult.getRows().size()) {
        setOutputDone();
        return false;
    }
    RowMetaAndData row = previousResult.getRows().get((int) getLinesRead());
    incrementLinesRead();
    data = (RowsFromResultData) sdi;
    // We don't get the meta-data from the previous steps (there aren't any) but from the previous transformation or job
    // 
    data.outputRowMeta = row.getRowMeta();
    // copy row to possible alternate rowset(s).
    // 
    putRow(data.outputRowMeta, row.getData());
    if (checkFeedback(getLinesRead())) {
        if (log.isBasic()) {
            logBasic(BaseMessages.getString(PKG, "RowsFromResult.Log.LineNumber") + getLinesRead());
        }
    }
    return true;
}
Also used : RowMetaAndData(org.pentaho.di.core.RowMetaAndData) Result(org.pentaho.di.core.Result)

Example 83 with Result

use of org.pentaho.di.core.Result in project pentaho-metaverse by pentaho.

the class TransformationRuntimeExtensionPoint method createLineGraph.

protected void createLineGraph(final Trans trans) {
    try {
        // Get the current execution profile for this transformation
        LineageHolder holder = TransLineageHolderMap.getInstance().getLineageHolder(trans);
        Future lineageTask = holder.getLineageTask();
        if (lineageTask != null) {
            try {
                lineageTask.get();
            } catch (InterruptedException e) {
            // Do nothing
            } catch (ExecutionException e) {
                log.warn(Messages.getString("ERROR.CouldNotWriteLineageGraph", trans.getName(), Const.NVL(e.getLocalizedMessage(), "Unspecified")));
                log.debug(Messages.getString("ERROR.ErrorDuringAnalysisStackTrace"), e);
            }
        }
        IExecutionProfile executionProfile = holder.getExecutionProfile();
        if (executionProfile == null) {
            // Something's wrong here, the transStarted method didn't properly store the execution profile. We should know
            // the same info, so populate a new ExecutionProfile using the current Trans
            // TODO: Beware duplicate profiles!
            executionProfile = new ExecutionProfile();
            populateExecutionProfile(executionProfile, trans);
        }
        ExecutionData executionData = (ExecutionData) executionProfile.getExecutionData();
        Result result = trans.getResult();
        if (result != null) {
            executionData.setFailureCount(result.getNrErrors());
        }
        // Export the lineage info (execution profile, lineage graph, etc.)
        try {
            if (lineageWriter != null && !"none".equals(lineageWriter.getOutputStrategy())) {
                // clearOutput right before the first call to outputXYZ().
                if ("latest".equals(lineageWriter.getOutputStrategy())) {
                    lineageWriter.cleanOutput(holder);
                }
                lineageWriter.outputExecutionProfile(holder);
            }
        } catch (IOException e) {
            log.warn(Messages.getString("ERROR.CouldNotWriteExecutionProfile", trans.getName(), Const.NVL(e.getLocalizedMessage(), "Unspecified")));
            log.debug(Messages.getString("ERROR.ErrorDuringAnalysisStackTrace"), e);
        }
        // lineage information into its own graph
        try {
            Job parentJob = trans.getParentJob();
            Trans parentTrans = trans.getParentTrans();
            if (parentJob == null && parentTrans == null) {
                // Add the execution profile information to the lineage graph
                addRuntimeLineageInfo(holder);
                if (lineageWriter != null && !"none".equals(lineageWriter.getOutputStrategy())) {
                    lineageWriter.outputLineageGraph(holder);
                }
            }
        } catch (IOException e) {
            log.warn(Messages.getString("ERROR.CouldNotWriteExecutionProfile", trans.getName(), Const.NVL(e.getLocalizedMessage(), "Unspecified")));
            log.debug(Messages.getString("ERROR.ErrorDuringAnalysisStackTrace"), e);
        }
    } catch (Throwable t) {
        log.warn(Messages.getString("ERROR.ErrorDuringAnalysis", trans.getName(), Const.NVL(t.getLocalizedMessage(), "Unspecified")));
        log.debug(Messages.getString("ERROR.ErrorDuringAnalysisStackTrace"), t);
    }
}
Also used : IExecutionProfile(org.pentaho.metaverse.api.model.IExecutionProfile) Future(java.util.concurrent.Future) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) Job(org.pentaho.di.job.Job) ExecutionProfile(org.pentaho.metaverse.impl.model.ExecutionProfile) IExecutionProfile(org.pentaho.metaverse.api.model.IExecutionProfile) Trans(org.pentaho.di.trans.Trans) LineageHolder(org.pentaho.metaverse.api.model.LineageHolder) IExecutionData(org.pentaho.metaverse.api.model.IExecutionData) ExecutionData(org.pentaho.metaverse.impl.model.ExecutionData) Result(org.pentaho.di.core.Result)

Example 84 with Result

use of org.pentaho.di.core.Result in project pentaho-metaverse by pentaho.

the class JobEntryExternalResourceListenerTest method testBeforeAfterExecution.

@Test
public void testBeforeAfterExecution() throws Exception {
    IJobEntryExternalResourceConsumer consumer = mock(IJobEntryExternalResourceConsumer.class);
    JobMeta mockJobMeta = mock(JobMeta.class);
    Job job = mock(Job.class);
    when(job.getJobMeta()).thenReturn(mockJobMeta);
    JobEntryInterface jobEntryInterface = mock(JobEntryInterface.class);
    when(jobEntryInterface.getParentJob()).thenReturn(job);
    when(jobEntryInterface.getResourceDependencies(mockJobMeta)).thenReturn(Collections.singletonList(new ResourceReference(null, Collections.singletonList(new ResourceEntry("myFile", ResourceEntry.ResourceType.FILE)))));
    JobEntryCopy jobEntryCopy = mock(JobEntryCopy.class);
    IExecutionProfile executionProfile = mock(IExecutionProfile.class);
    IExecutionData executionData = mock(IExecutionData.class);
    when(executionProfile.getExecutionData()).thenReturn(executionData);
    JobLineageHolderMap.getInstance().getLineageHolder(job).setExecutionProfile(executionProfile);
    JobEntryExternalResourceListener listener = new JobEntryExternalResourceListener(consumer);
    FileObject mockFile = mock(FileObject.class);
    FileName mockFilename = mock(FileName.class);
    when(mockFilename.getPath()).thenReturn("/path/to/file");
    when(mockFile.getName()).thenReturn(mockFilename);
    ResultFile resultFile = mock(ResultFile.class);
    when(resultFile.getFile()).thenReturn(mockFile);
    List<ResultFile> resultFiles = Collections.singletonList(resultFile);
    Result result = mock(Result.class);
    when(result.getResultFilesList()).thenReturn(resultFiles);
    // Call beforeExecution for coverage
    listener.beforeExecution(null, null, null);
    listener.afterExecution(job, jobEntryCopy, jobEntryInterface, result);
}
Also used : JobMeta(org.pentaho.di.job.JobMeta) JobEntryInterface(org.pentaho.di.job.entry.JobEntryInterface) FileName(org.apache.commons.vfs2.FileName) ResultFile(org.pentaho.di.core.ResultFile) Result(org.pentaho.di.core.Result) JobEntryCopy(org.pentaho.di.job.entry.JobEntryCopy) IExecutionData(org.pentaho.metaverse.api.model.IExecutionData) ResourceEntry(org.pentaho.di.resource.ResourceEntry) IExecutionProfile(org.pentaho.metaverse.api.model.IExecutionProfile) ResourceReference(org.pentaho.di.resource.ResourceReference) FileObject(org.apache.commons.vfs2.FileObject) IJobEntryExternalResourceConsumer(org.pentaho.metaverse.api.analyzer.kettle.jobentry.IJobEntryExternalResourceConsumer) Job(org.pentaho.di.job.Job) Test(org.junit.Test)

Example 85 with Result

use of org.pentaho.di.core.Result in project pentaho-metaverse by pentaho.

the class TransformationRuntimeExtensionPointTest method testTransFinished.

@Test
public void testTransFinished() throws Exception {
    TransformationRuntimeExtensionPoint ext = spy(transExtensionPoint);
    ext.transFinished(null);
    verify(ext, never()).populateExecutionProfile(Mockito.any(IExecutionProfile.class), Mockito.any(Trans.class));
    ext.transFinished(trans);
    verify(ext, times(1)).startAnalyzer(trans);
    verify(ext, times(1)).populateExecutionProfile(Mockito.any(IExecutionProfile.class), Mockito.any(Trans.class));
    Trans mockTrans = spy(trans);
    Result result = mock(Result.class);
    when(mockTrans.getResult()).thenReturn(result);
    ext.transFinished(mockTrans);
    // The logic in transFinished() is now in a thread, so we can't verify methods were called
    verify(ext, times(1)).startAnalyzer(mockTrans);
    verify(ext, times(2)).populateExecutionProfile(Mockito.any(IExecutionProfile.class), Mockito.any(Trans.class));
}
Also used : IExecutionProfile(org.pentaho.metaverse.api.model.IExecutionProfile) Trans(org.pentaho.di.trans.Trans) Result(org.pentaho.di.core.Result) Test(org.junit.Test)

Aggregations

Result (org.pentaho.di.core.Result)192 Test (org.junit.Test)75 KettleException (org.pentaho.di.core.exception.KettleException)75 KettleDatabaseException (org.pentaho.di.core.exception.KettleDatabaseException)64 KettleXMLException (org.pentaho.di.core.exception.KettleXMLException)57 RowMetaAndData (org.pentaho.di.core.RowMetaAndData)40 FileObject (org.apache.commons.vfs2.FileObject)34 Job (org.pentaho.di.job.Job)32 IOException (java.io.IOException)24 ResultFile (org.pentaho.di.core.ResultFile)20 File (java.io.File)17 ArrayList (java.util.ArrayList)16 ValueMetaString (org.pentaho.di.core.row.value.ValueMetaString)15 KettleExtensionPoint (org.pentaho.di.core.extension.KettleExtensionPoint)12 Pattern (java.util.regex.Pattern)10 KettleFileException (org.pentaho.di.core.exception.KettleFileException)10 Database (org.pentaho.di.core.database.Database)9 Date (java.util.Date)8 Trans (org.pentaho.di.trans.Trans)8 Matcher (java.util.regex.Matcher)7