/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2015 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.core; import org.pentaho.di.core.logging.BaseLogTable; import org.pentaho.di.core.logging.ChannelLogTable; import org.pentaho.di.core.logging.JobEntryLogTable; import org.pentaho.di.core.logging.JobLogTable; import org.pentaho.di.core.logging.LogTableInterface; import org.pentaho.di.core.logging.MetricsLogTable; import org.pentaho.di.core.logging.PerformanceLogTable; import org.pentaho.di.core.logging.StepLogTable; import org.pentaho.di.core.logging.TransLogTable; import org.pentaho.di.job.JobMeta; import org.pentaho.di.trans.TransMeta; import java.util.ArrayList; import java.util.List; /** * Helper class that filterers information, before exporting meta to xml. * * @author IvanNikolaychuk */ public class XmlExportHelper { /** * When exporting meta we should not export user global parameters. * Method makes clone for each table and deletes all global parameters. * We have to make clones of each table, because we don't want to change real tables content. * * @param transMeta * meta, that contains log tables to be refactored before export */ public static void swapTables( TransMeta transMeta ) { TransLogTable transLogTable = transMeta.getTransLogTable(); if ( transLogTable != null ) { TransLogTable cloneTransLogTable = (TransLogTable) transLogTable.clone(); cloneTransLogTable.setAllGlobalParametersToNull(); transMeta.setTransLogTable( cloneTransLogTable ); } StepLogTable stepLogTable = transMeta.getStepLogTable(); if ( stepLogTable != null ) { StepLogTable cloneStepLogTable = (StepLogTable) stepLogTable.clone(); cloneStepLogTable.setAllGlobalParametersToNull(); transMeta.setStepLogTable( cloneStepLogTable ); } PerformanceLogTable performanceLogTable = transMeta.getPerformanceLogTable(); if ( performanceLogTable != null ) { PerformanceLogTable clonePerformanceLogTable = (PerformanceLogTable) performanceLogTable.clone(); clonePerformanceLogTable.setAllGlobalParametersToNull(); transMeta.setPerformanceLogTable( clonePerformanceLogTable ); } ChannelLogTable channelLogTable = transMeta.getChannelLogTable(); if ( channelLogTable != null ) { ChannelLogTable cloneChannelLogTable = (ChannelLogTable) channelLogTable.clone(); cloneChannelLogTable.setAllGlobalParametersToNull(); transMeta.setChannelLogTable( cloneChannelLogTable ); } MetricsLogTable metricsLogTable = transMeta.getMetricsLogTable(); if ( metricsLogTable != null ) { MetricsLogTable cloneMetricsLogTable = (MetricsLogTable) metricsLogTable.clone(); cloneMetricsLogTable.setAllGlobalParametersToNull(); transMeta.setMetricsLogTable( cloneMetricsLogTable ); } } /** * @param jobMeta * contains log tables to be refactored before export */ public static void swapTables( JobMeta jobMeta ) { JobLogTable jobLogTable = jobMeta.getJobLogTable(); if ( jobLogTable != null ) { JobLogTable cloneJobLogTable = (JobLogTable) jobLogTable.clone(); cloneJobLogTable.setAllGlobalParametersToNull(); jobMeta.setJobLogTable( cloneJobLogTable ); } JobEntryLogTable jobEntryLogTable = jobMeta.getJobEntryLogTable(); if ( jobEntryLogTable != null ) { JobEntryLogTable cloneEntryLogTable = (JobEntryLogTable) jobEntryLogTable.clone(); cloneEntryLogTable.setAllGlobalParametersToNull(); jobMeta.setJobEntryLogTable( cloneEntryLogTable ); } ChannelLogTable channelLogTable = jobMeta.getChannelLogTable(); if ( channelLogTable != null ) { ChannelLogTable cloneChannelLogTable = (ChannelLogTable) channelLogTable.clone(); cloneChannelLogTable.setAllGlobalParametersToNull(); jobMeta.setChannelLogTable( cloneChannelLogTable ); } List<LogTableInterface> extraLogTables = jobMeta.getExtraLogTables(); if ( extraLogTables != null ) { List<LogTableInterface> cloneExtraLogTables = new ArrayList<>(); for ( LogTableInterface logTable : extraLogTables ) { if ( logTable instanceof BaseLogTable ) { if ( logTable instanceof Cloneable ) { BaseLogTable cloneExtraLogTable = (BaseLogTable) logTable.clone(); cloneExtraLogTable.setAllGlobalParametersToNull(); cloneExtraLogTables.add( (LogTableInterface) cloneExtraLogTable ); } } } jobMeta.setExtraLogTables( cloneExtraLogTables ); } } }