/* * ****************************************************************************** * * 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.trans.steps.xmloutput; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.step.BaseStepMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.dictionary.DictionaryConst; import org.pentaho.metaverse.api.IMetaverseNode; import org.pentaho.metaverse.api.IMetaverseObjectFactory; import org.pentaho.metaverse.api.MetaverseAnalyzerException; import org.pentaho.metaverse.api.MetaverseException; import org.pentaho.metaverse.api.StepField; import org.pentaho.metaverse.api.analyzer.kettle.step.ExternalResourceStepAnalyzer; import org.pentaho.metaverse.api.model.IExternalResourceInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; import java.util.Set; /** * The XMLOutputStepAnalyzer is responsible for providing nodes and links (i.e. relationships) between for the * fields operated on by XML Output steps. */ public class XMLOutputStepAnalyzer extends ExternalResourceStepAnalyzer<XMLOutputMeta> { private Logger log = LoggerFactory.getLogger( XMLOutputStepAnalyzer.class ); @Override protected Set<StepField> getUsedFields( XMLOutputMeta meta ) { return null; } @Override protected void customAnalyze( XMLOutputMeta meta, IMetaverseNode node ) throws MetaverseAnalyzerException { super.customAnalyze( meta, node ); node.setProperty( "parentnode", meta.getMainElement() ); node.setProperty( "rownode", meta.getRepeatElement() ); } @Override public Set<Class<? extends BaseStepMeta>> getSupportedSteps() { return new HashSet<Class<? extends BaseStepMeta>>() { { add( XMLOutputMeta.class ); } }; } @Override public IMetaverseNode createResourceNode( IExternalResourceInfo resource ) throws MetaverseException { return createFileNode( resource.getName(), getDescriptor() ); } @Override public String getResourceInputNodeType() { return null; } @Override public String getResourceOutputNodeType() { return DictionaryConst.NODE_TYPE_FILE_FIELD; } @Override public boolean isOutput() { return true; } @Override public boolean isInput() { return false; } @Override public Set<String> getOutputResourceFields( XMLOutputMeta meta ) { Set<String> fields = new HashSet<>(); XMLField[] outputFields = meta.getOutputFields(); for ( int i = 0; i < outputFields.length; i++ ) { XMLField outputField = outputFields[ i ]; fields.add( outputField.getFieldName() ); } return fields; } ///////////// for unit testing protected void setBaseStepMeta( XMLOutputMeta meta ) { baseStepMeta = meta; } protected void setRootNode( IMetaverseNode node ) { rootNode = node; } protected void setParentTransMeta( TransMeta tm ) { parentTransMeta = tm; } protected void setParentStepMeta( StepMeta sm ) { parentStepMeta = sm; } protected void setObjectFactory( IMetaverseObjectFactory objectFactory ) { this.metaverseObjectFactory = objectFactory; } }