org.pentaho.di.trans.steps.rssoutput.RssOutputMeta Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of kettle-engine Show documentation
Show all versions of kettle-engine Show documentation
Container pom for Pentaho Data Integration modules
The newest version!
/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2017 by Hitachi Vantara : 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.rssoutput;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.apache.commons.vfs2.FileObject;
import org.pentaho.di.core.CheckResult;
import org.pentaho.di.core.CheckResultInterface;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleStepException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.core.vfs.KettleVFS;
import org.pentaho.di.core.xml.XMLHandler;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDataInterface;
import org.pentaho.di.trans.step.StepInterface;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.step.StepMetaInterface;
import org.pentaho.metastore.api.IMetaStore;
import org.w3c.dom.Node;
/**
* Output rows to RSS feed and create a file.
*
* @author Samatar
* @since 6-nov-2007
*/
public class RssOutputMeta extends BaseStepMeta implements StepMetaInterface {
private static Class> PKG = RssOutput.class; // for i18n purposes, needed by Translator2!!
private String channeltitle;
private String channeldescription;
private String channellink;
private String channelpubdate;
private String channelcopyright;
private String channelimagetitle;
private String channelimagelink;
private String channelimageurl;
private String channelimagedescription;
private String channellanguage;
private String channelauthor;
private String itemtitle;
private String itemdescription;
private String itemlink;
private String itempubdate;
private String itemauthor;
private String geopointlat;
private String geopointlong;
private boolean AddToResult;
/** The base name of the output file */
private String fileName;
/** The file extention in case of a generated filename */
private String extension;
/** Flag: add the stepnr in the filename */
private boolean stepNrInFilename;
/** Flag: add the partition number in the filename */
private boolean partNrInFilename;
/** Flag: add the date in the filename */
private boolean dateInFilename;
/** Flag: add the time in the filename */
private boolean timeInFilename;
/** Flag: create parent folder if needed */
private boolean createparentfolder;
/** Rss version **/
private String version;
/** Rss encoding **/
private String encoding;
/** Flag : add image to RSS feed **/
private boolean addimage;
private boolean addgeorss;
private boolean usegeorssgml;
/** The field that contain filename */
private String filenamefield;
/** Flag : is filename defined in a field **/
private boolean isfilenameinfield;
/** which fields do we use for Channel Custom ? */
private String[] ChannelCustomFields;
/** add namespaces? */
private String[] NameSpaces;
private String[] NameSpacesTitle;
/** which fields do we use for getChannelCustomTags Custom ? */
private String[] ChannelCustomTags;
/** which fields do we use for Item Custom Field? */
private String[] ItemCustomFields;
/** which fields do we use for Item Custom tag ? */
private String[] ItemCustomTags;
/** create custom RSS ? */
private boolean customrss;
/** display item tag in output ? */
private boolean displayitem;
public void loadXML( Node stepnode, List databases, IMetaStore metaStore ) throws KettleXMLException {
readData( stepnode );
}
public Object clone() {
RssOutputMeta retval = (RssOutputMeta) super.clone();
int nrfields = ChannelCustomFields.length;
retval.allocate( nrfields );
// Read custom channel fields
System.arraycopy( ChannelCustomFields, 0, retval.ChannelCustomFields, 0, nrfields );
System.arraycopy( ChannelCustomTags, 0, retval.ChannelCustomTags, 0, nrfields );
// items
int nritemfields = ItemCustomFields.length;
retval.allocateitem( nritemfields );
System.arraycopy( ItemCustomFields, 0, retval.ItemCustomFields, 0, nritemfields );
System.arraycopy( ItemCustomTags, 0, retval.ItemCustomTags, 0, nritemfields );
// Namespaces
int nrNameSpaces = NameSpaces.length;
retval.allocatenamespace( nrNameSpaces );
System.arraycopy( NameSpacesTitle, 0, retval.NameSpacesTitle, 0, nrNameSpaces );
System.arraycopy( NameSpaces, 0, retval.NameSpaces, 0, nrNameSpaces );
return retval;
}
public void allocate( int nrfields ) {
ChannelCustomFields = new String[nrfields];
ChannelCustomTags = new String[nrfields];
}
public void allocateitem( int nrfields ) {
ItemCustomFields = new String[nrfields];
ItemCustomTags = new String[nrfields];
}
public void allocatenamespace( int nrnamespaces ) {
NameSpaces = new String[nrnamespaces];
NameSpacesTitle = new String[nrnamespaces];
}
/**
* @return Returns the version.
*/
public String getVersion() {
return version;
}
/**
* @param version
* The version to set.
*/
public void setVersion( String version ) {
this.version = version;
}
/**
* @return Returns the encoding.
*/
public String getEncoding() {
return encoding;
}
/**
* @param encoding
* The encoding to set.
*/
public void setEncoding( String encoding ) {
this.encoding = encoding;
}
/**
* @return Returns the filenamefield.
*/
public String getFileNameField() {
return filenamefield;
}
/**
* @param encoding
* The encoding to set.
*/
public void setFileNameField( String filenamefield ) {
this.filenamefield = filenamefield;
}
/**
* @return Returns the extension.
*/
public String getExtension() {
return extension;
}
/**
* @param extension
* The extension to set.
*/
public void setExtension( String extension ) {
this.extension = extension;
}
/**
* @return Returns the fileName.
*/
public String getFileName() {
return fileName;
}
/**
* @return Returns the stepNrInFilename.
*/
public boolean isStepNrInFilename() {
return stepNrInFilename;
}
/**
* @param stepNrInFilename
* The stepNrInFilename to set.
*/
public void setStepNrInFilename( boolean stepNrInFilename ) {
this.stepNrInFilename = stepNrInFilename;
}
/**
* @return Returns the timeInFilename.
*/
public boolean isTimeInFilename() {
return timeInFilename;
}
/**
* @return Returns the dateInFilename.
*/
public boolean isDateInFilename() {
return dateInFilename;
}
/**
* @param dateInFilename
* The dateInFilename to set.
*/
public void setDateInFilename( boolean dateInFilename ) {
this.dateInFilename = dateInFilename;
}
/**
* @param timeInFilename
* The timeInFilename to set.
*/
public void setTimeInFilename( boolean timeInFilename ) {
this.timeInFilename = timeInFilename;
}
/**
* @param fileName
* The fileName to set.
*/
public void setFileName( String fileName ) {
this.fileName = fileName;
}
/**
* @return Returns the Add to result filesname flag.
*/
public boolean AddToResult() {
return AddToResult;
}
/**
* @param AddToResult
* The Add file to result to set.
*/
public void setAddToResult( boolean AddToResult ) {
this.AddToResult = AddToResult;
}
/**
* @param customrss
* The custom RSS flag to set.
*/
public void setCustomRss( boolean customrss ) {
this.customrss = customrss;
}
/**
* @return Returns the custom RSS flag.
*/
public boolean isCustomRss() {
return customrss;
}
/**
* @param displayitem
* The display itema ta flag.
*/
public void setDisplayItem( boolean displayitem ) {
this.displayitem = displayitem;
}
/**
* @return Returns the displayitem.
*/
public boolean isDisplayItem() {
return displayitem;
}
/**
* @return Returns the addimage flag.
*/
public boolean AddImage() {
return addimage;
}
/**
* @param addimage
* The addimage to set.
*/
public void setAddImage( boolean addimage ) {
this.addimage = addimage;
}
/**
* @return Returns the addgeorss flag.
*/
public boolean AddGeoRSS() {
return addgeorss;
}
/**
* @param addgeorss
* The addgeorss to set.
*/
public void setAddGeoRSS( boolean addgeorss ) {
this.addgeorss = addgeorss;
}
/**
* @return Returns the addgeorss flag.
*/
public boolean useGeoRSSGML() {
return usegeorssgml;
}
/**
* @param usegeorssgml
* The usegeorssgml to set.
*/
public void setUseGeoRSSGML( boolean usegeorssgml ) {
this.usegeorssgml = usegeorssgml;
}
/**
* @return Returns the isfilenameinfield flag.
*/
public boolean isFilenameInField() {
return isfilenameinfield;
}
/**
* @param isfilenameinfield
* The isfilenameinfield to set.
*/
public void setFilenameInField( boolean isfilenameinfield ) {
this.isfilenameinfield = isfilenameinfield;
}
/**
* @return Returns the ChannelCustomFields (names in the stream).
*/
public String[] getChannelCustomFields() {
return ChannelCustomFields;
}
/**
* @param ChannelCustomFields
* The ChannelCustomFields to set.
*/
public void setChannelCustomFields( String[] ChannelCustomFields ) {
this.ChannelCustomFields = ChannelCustomFields;
}
/**
* @return Returns the NameSpaces.
*/
public String[] getNameSpaces() {
return NameSpaces;
}
/**
* @param NameSpaces
* The NameSpaces to set.
*/
public void setNameSpaces( String[] NameSpaces ) {
this.NameSpaces = NameSpaces;
}
/**
* @return Returns the NameSpaces.
*/
public String[] getNameSpacesTitle() {
return NameSpacesTitle;
}
/**
* @param NameSpacesTitle
* The NameSpacesTitle to set.
*/
public void setNameSpacesTitle( String[] NameSpacesTitle ) {
this.NameSpacesTitle = NameSpacesTitle;
}
/**
* @return Returns the getChannelCustomTags (names in the stream).
*/
public String[] getChannelCustomTags() {
return ChannelCustomTags;
}
/**
* @param getChannelCustomTags
* The getChannelCustomTags to set.
*/
public void setChannelCustomTags( String[] ChannelCustomTags ) {
this.ChannelCustomTags = ChannelCustomTags;
}
/**
* @return Returns the getChannelCustomTags (names in the stream).
*/
public String[] getItemCustomTags() {
return ItemCustomTags;
}
/**
* @param getChannelCustomTags
* The getChannelCustomTags to set.
*/
public void setItemCustomTags( String[] ItemCustomTags ) {
this.ItemCustomTags = ItemCustomTags;
}
/**
* @return Returns the ItemCustomFields (names in the stream).
*/
public String[] getItemCustomFields() {
return ItemCustomFields;
}
/**
* @param value
* The ItemCustomFields to set.
*/
public void setItemCustomFields( String[] value ) {
this.ItemCustomFields = value;
}
/**
* @return Returns the create parent folder flag.
*/
public boolean isCreateParentFolder() {
return createparentfolder;
}
/**
* @param createparentfolder
* The create parent folder flag to set.
*/
public void setCreateParentFolder( boolean createparentfolder ) {
this.createparentfolder = createparentfolder;
}
public boolean isPartNrInFilename() {
return partNrInFilename;
}
public void setPartNrInFilename( boolean value ) {
partNrInFilename = value;
}
public String[] getFiles( VariableSpace space ) throws KettleStepException {
int copies = 1;
int parts = 1;
if ( stepNrInFilename ) {
copies = 3;
}
if ( partNrInFilename ) {
parts = 3;
}
int nr = copies * parts;
if ( nr > 1 ) {
nr++;
}
String[] retval = new String[nr];
int i = 0;
for ( int copy = 0; copy < copies; copy++ ) {
for ( int part = 0; part < parts; part++ ) {
retval[i] = buildFilename( space, copy );
i++;
}
}
if ( i < nr ) {
retval[i] = "...";
}
return retval;
}
private String getFilename( VariableSpace space ) throws KettleStepException {
FileObject file = null;
try {
file = KettleVFS.getFileObject( space.environmentSubstitute( getFileName() ) );
return KettleVFS.getFilename( file );
} catch ( Exception e ) {
throw new KettleStepException( BaseMessages
.getString( PKG, "RssOutput.Meta.ErrorGettingFile", getFileName() ), e );
} finally {
if ( file != null ) {
try {
file.close();
} catch ( Exception e ) { /* Ignore */
}
}
}
}
public String buildFilename( VariableSpace space, int stepnr ) throws KettleStepException {
SimpleDateFormat daf = new SimpleDateFormat();
// Replace possible environment variables...
String retval = getFilename( space );
Date now = new Date();
if ( dateInFilename ) {
daf.applyPattern( "yyyMMdd" );
String d = daf.format( now );
retval += "_" + d;
}
if ( timeInFilename ) {
daf.applyPattern( "HHmmss" );
String t = daf.format( now );
retval += "_" + t;
}
if ( stepNrInFilename ) {
retval += "_" + stepnr;
}
if ( extension != null && extension.length() != 0 ) {
retval += "." + extension;
}
return retval;
}
private void readData( Node stepnode ) throws KettleXMLException {
try {
displayitem = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "displayitem" ) );
customrss = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "customrss" ) );
channeltitle = XMLHandler.getTagValue( stepnode, "channel_title" );
channeldescription = XMLHandler.getTagValue( stepnode, "channel_description" );
channellink = XMLHandler.getTagValue( stepnode, "channel_link" );
channelpubdate = XMLHandler.getTagValue( stepnode, "channel_pubdate" );
channelcopyright = XMLHandler.getTagValue( stepnode, "channel_copyright" );
channelimagetitle = XMLHandler.getTagValue( stepnode, "channel_image_title" );
channelimagelink = XMLHandler.getTagValue( stepnode, "channel_image_link" );
channelimageurl = XMLHandler.getTagValue( stepnode, "channel_image_url" );
channelimagedescription = XMLHandler.getTagValue( stepnode, "channel_image_description" );
channellanguage = XMLHandler.getTagValue( stepnode, "channel_language" );
channelauthor = XMLHandler.getTagValue( stepnode, "channel_author" );
version = XMLHandler.getTagValue( stepnode, "version" );
encoding = XMLHandler.getTagValue( stepnode, "encoding" );
addimage = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addimage" ) );
// Items ...
itemtitle = XMLHandler.getTagValue( stepnode, "item_title" );
itemdescription = XMLHandler.getTagValue( stepnode, "item_description" );
itemlink = XMLHandler.getTagValue( stepnode, "item_link" );
itempubdate = XMLHandler.getTagValue( stepnode, "item_pubdate" );
itemauthor = XMLHandler.getTagValue( stepnode, "item_author" );
addgeorss = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "addgeorss" ) );
usegeorssgml = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "usegeorssgml" ) );
geopointlat = XMLHandler.getTagValue( stepnode, "geopointlat" );
geopointlong = XMLHandler.getTagValue( stepnode, "geopointlong" );
filenamefield = XMLHandler.getTagValue( stepnode, "file", "filename_field" );
fileName = XMLHandler.getTagValue( stepnode, "file", "name" );
isfilenameinfield =
"Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "is_filename_in_field" ) );
createparentfolder =
"Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "create_parent_folder" ) );
extension = XMLHandler.getTagValue( stepnode, "file", "extention" );
stepNrInFilename = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "split" ) );
partNrInFilename = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "haspartno" ) );
dateInFilename = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "add_date" ) );
timeInFilename = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "add_time" ) );
AddToResult = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "file", "AddToResult" ) );
Node keys = XMLHandler.getSubNode( stepnode, "fields" );
// Custom Channel fields
int nrchannelfields = XMLHandler.countNodes( keys, "channel_custom_fields" );
allocate( nrchannelfields );
for ( int i = 0; i < nrchannelfields; i++ ) {
Node knode = XMLHandler.getSubNodeByNr( keys, "channel_custom_fields", i );
ChannelCustomTags[i] = XMLHandler.getTagValue( knode, "tag" );
ChannelCustomFields[i] = XMLHandler.getTagValue( knode, "field" );
}
// Custom Item fields
int nritemfields = XMLHandler.countNodes( keys, "item_custom_fields" );
allocateitem( nritemfields );
for ( int i = 0; i < nritemfields; i++ ) {
Node knode = XMLHandler.getSubNodeByNr( keys, "item_custom_fields", i );
ItemCustomTags[i] = XMLHandler.getTagValue( knode, "tag" );
ItemCustomFields[i] = XMLHandler.getTagValue( knode, "field" );
}
// NameSpaces
Node keysNameSpaces = XMLHandler.getSubNode( stepnode, "namespaces" );
int nrnamespaces = XMLHandler.countNodes( keysNameSpaces, "namespace" );
allocatenamespace( nrnamespaces );
for ( int i = 0; i < nrnamespaces; i++ ) {
Node knode = XMLHandler.getSubNodeByNr( keysNameSpaces, "namespace", i );
NameSpacesTitle[i] = XMLHandler.getTagValue( knode, "namespace_tag" );
NameSpaces[i] = XMLHandler.getTagValue( knode, "namespace_value" );
}
} catch ( Exception e ) {
throw new KettleXMLException( "Unable to load step info from XML", e );
}
}
public void setDefault() {
displayitem = true;
customrss = false;
channeltitle = null;
channeldescription = null;
channellink = null;
channelpubdate = null;
channelcopyright = null;
channelimagetitle = null;
channelimagelink = null;
channelimageurl = null;
channelimagedescription = null;
channellanguage = null;
channelauthor = null;
createparentfolder = false;
isfilenameinfield = false;
version = "rss_2.0";
encoding = "iso-8859-1";
filenamefield = null;
isfilenameinfield = false;
// Items ...
itemtitle = null;
itemdescription = null;
itemlink = null;
itempubdate = null;
itemauthor = null;
geopointlat = null;
geopointlong = null;
int nrchannelfields = 0;
allocate( nrchannelfields );
// channel custom fields
for ( int i = 0; i < nrchannelfields; i++ ) {
ChannelCustomFields[i] = "field" + i;
ChannelCustomTags[i] = "tag" + i;
}
int nritemfields = 0;
allocateitem( nritemfields );
// Custom Item Fields
for ( int i = 0; i < nritemfields; i++ ) {
ItemCustomFields[i] = "field" + i;
ItemCustomTags[i] = "tag" + i;
}
// Namespaces
int nrnamespaces = 0;
allocatenamespace( nrnamespaces );
// Namespaces
for ( int i = 0; i < nrnamespaces; i++ ) {
NameSpacesTitle[i] = "namespace_title" + i;
NameSpaces[i] = "namespace" + i;
}
}
public String getXML() {
StringBuilder retval = new StringBuilder();
retval.append( " " + XMLHandler.addTagValue( "displayitem", displayitem ) );
retval.append( " " + XMLHandler.addTagValue( "customrss", customrss ) );
retval.append( " " + XMLHandler.addTagValue( "channel_title", channeltitle ) );
retval.append( " " + XMLHandler.addTagValue( "channel_description", channeldescription ) );
retval.append( " " + XMLHandler.addTagValue( "channel_link", channellink ) );
retval.append( " " + XMLHandler.addTagValue( "channel_pubdate", channelpubdate ) );
retval.append( " " + XMLHandler.addTagValue( "channel_copyright", channelcopyright ) );
retval.append( " " + XMLHandler.addTagValue( "channel_image_title", channelimagetitle ) );
retval.append( " " + XMLHandler.addTagValue( "channel_image_link", channelimagelink ) );
retval.append( " " + XMLHandler.addTagValue( "channel_image_url", channelimageurl ) );
retval.append( " " + XMLHandler.addTagValue( "channel_image_description", channelimagedescription ) );
retval.append( " " + XMLHandler.addTagValue( "channel_language", channellanguage ) );
retval.append( " " + XMLHandler.addTagValue( "channel_author", channelauthor ) );
retval.append( " " + XMLHandler.addTagValue( "version", version ) );
retval.append( " " + XMLHandler.addTagValue( "encoding", encoding ) );
retval.append( " " + XMLHandler.addTagValue( "addimage", addimage ) );
// Items ...
retval.append( " " + XMLHandler.addTagValue( "item_title", itemtitle ) );
retval.append( " " + XMLHandler.addTagValue( "item_description", itemdescription ) );
retval.append( " " + XMLHandler.addTagValue( "item_link", itemlink ) );
retval.append( " " + XMLHandler.addTagValue( "item_pubdate", itempubdate ) );
retval.append( " " + XMLHandler.addTagValue( "item_author", itemauthor ) );
retval.append( " " + XMLHandler.addTagValue( "addgeorss", addgeorss ) );
retval.append( " " + XMLHandler.addTagValue( "usegeorssgml", usegeorssgml ) );
retval.append( " " + XMLHandler.addTagValue( "geopointlat", geopointlat ) );
retval.append( " " + XMLHandler.addTagValue( "geopointlong", geopointlong ) );
retval.append( " " + Const.CR );
retval.append( " " + XMLHandler.addTagValue( "filename_field", filenamefield ) );
retval.append( " " + XMLHandler.addTagValue( "name", fileName ) );
retval.append( " " + XMLHandler.addTagValue( "extention", extension ) );
retval.append( " " + XMLHandler.addTagValue( "split", stepNrInFilename ) );
retval.append( " " + XMLHandler.addTagValue( "haspartno", partNrInFilename ) );
retval.append( " " + XMLHandler.addTagValue( "add_date", dateInFilename ) );
retval.append( " " + XMLHandler.addTagValue( "add_time", timeInFilename ) );
retval.append( " " + XMLHandler.addTagValue( "is_filename_in_field", isfilenameinfield ) );
retval.append( " " + XMLHandler.addTagValue( "create_parent_folder", createparentfolder ) );
retval.append( " " + XMLHandler.addTagValue( "addtoresult", AddToResult ) );
retval.append( " " + Const.CR );
retval.append( " " ).append( Const.CR );
for ( int i = 0; i < ChannelCustomFields.length; i++ ) {
retval.append( " " ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "tag", ChannelCustomTags[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "field", ChannelCustomFields[i] ) );
retval.append( " " ).append( Const.CR );
}
for ( int i = 0; i < ItemCustomFields.length; i++ ) {
retval.append( " " ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "tag", ItemCustomTags[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "field", ItemCustomFields[i] ) );
retval.append( " " ).append( Const.CR );
}
retval.append( " " ).append( Const.CR );
retval.append( " " ).append( Const.CR );
for ( int i = 0; i < NameSpaces.length; i++ ) {
retval.append( " " ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "namespace_tag", NameSpacesTitle[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "namespace_value", NameSpaces[i] ) );
retval.append( " " ).append( Const.CR );
}
retval.append( " " ).append( Const.CR );
return retval.toString();
}
public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List databases ) throws KettleException {
try {
displayitem = rep.getStepAttributeBoolean( id_step, "displayitem" );
customrss = rep.getStepAttributeBoolean( id_step, "customrss" );
channeltitle = rep.getStepAttributeString( id_step, "channel_title" );
channeldescription = rep.getStepAttributeString( id_step, "channel_description" );
channellink = rep.getStepAttributeString( id_step, "channel_link" );
channelpubdate = rep.getStepAttributeString( id_step, "channel_pubdate" );
channelcopyright = rep.getStepAttributeString( id_step, "channel_copyright" );
channelimagetitle = rep.getStepAttributeString( id_step, "channel_image_title" );
channelimagelink = rep.getStepAttributeString( id_step, "channel_image_link" );
channelimageurl = rep.getStepAttributeString( id_step, "channel_image_url" );
channelimagedescription = rep.getStepAttributeString( id_step, "channel_image_description" );
channellanguage = rep.getStepAttributeString( id_step, "channel_language" );
channelauthor = rep.getStepAttributeString( id_step, "channel_author" );
version = rep.getStepAttributeString( id_step, "version" );
encoding = rep.getStepAttributeString( id_step, "encoding" );
addimage = rep.getStepAttributeBoolean( id_step, "addimage" );
// items ...
itemtitle = rep.getStepAttributeString( id_step, "item_title" );
itemdescription = rep.getStepAttributeString( id_step, "item_description" );
itemlink = rep.getStepAttributeString( id_step, "item_link" );
itempubdate = rep.getStepAttributeString( id_step, "item_pubdate" );
itemauthor = rep.getStepAttributeString( id_step, "item_author" );
addgeorss = rep.getStepAttributeBoolean( id_step, "addgeorss" );
usegeorssgml = rep.getStepAttributeBoolean( id_step, "usegeorssgml" );
geopointlat = rep.getStepAttributeString( id_step, "geopointlat" );
geopointlong = rep.getStepAttributeString( id_step, "geopointlong" );
filenamefield = rep.getStepAttributeString( id_step, "filename_field" );
fileName = rep.getStepAttributeString( id_step, "file_name" );
extension = rep.getStepAttributeString( id_step, "file_extention" );
stepNrInFilename = rep.getStepAttributeBoolean( id_step, "file_add_stepnr" );
partNrInFilename = rep.getStepAttributeBoolean( id_step, "file_add_partnr" );
dateInFilename = rep.getStepAttributeBoolean( id_step, "file_add_date" );
timeInFilename = rep.getStepAttributeBoolean( id_step, "file_add_time" );
isfilenameinfield = rep.getStepAttributeBoolean( id_step, "is_filename_in_field" );
createparentfolder = rep.getStepAttributeBoolean( id_step, "create_parent_folder" );
AddToResult = rep.getStepAttributeBoolean( id_step, "addtoresult" );
// Channel Custom
int nrchannel = rep.countNrStepAttributes( id_step, "channel_custom_field" );
allocate( nrchannel );
for ( int i = 0; i < nrchannel; i++ ) {
ChannelCustomTags[i] = rep.getStepAttributeString( id_step, i, "channel_custom_tag" );
ChannelCustomFields[i] = rep.getStepAttributeString( id_step, i, "channel_custom_field" );
}
// Item Custom
int nritem = rep.countNrStepAttributes( id_step, "item_custom_field" );
allocateitem( nritem );
for ( int i = 0; i < nritem; i++ ) {
ItemCustomTags[i] = rep.getStepAttributeString( id_step, i, "item_custom_tag" );
ItemCustomFields[i] = rep.getStepAttributeString( id_step, i, "item_custom_field" );
}
// Namespaces
int nrnamespaces = rep.countNrStepAttributes( id_step, "namespace_tag" );
allocatenamespace( nrnamespaces );
for ( int i = 0; i < nrnamespaces; i++ ) {
NameSpacesTitle[i] = rep.getStepAttributeString( id_step, i, "namespace_tag" );
NameSpaces[i] = rep.getStepAttributeString( id_step, i, "namespace_value" );
}
} catch ( Exception e ) {
throw new KettleException( "Unexpected error reading step information from the repository", e );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "displayitem", displayitem );
rep.saveStepAttribute( id_transformation, id_step, "customrss", customrss );
rep.saveStepAttribute( id_transformation, id_step, "channel_title", channeltitle );
rep.saveStepAttribute( id_transformation, id_step, "channel_description", channeldescription );
rep.saveStepAttribute( id_transformation, id_step, "channel_link", channellink );
rep.saveStepAttribute( id_transformation, id_step, "channel_pubdate", channelpubdate );
rep.saveStepAttribute( id_transformation, id_step, "channel_copyright", channelcopyright );
rep.saveStepAttribute( id_transformation, id_step, "channel_image_title", channelimagetitle );
rep.saveStepAttribute( id_transformation, id_step, "channel_image_link", channelimagelink );
rep.saveStepAttribute( id_transformation, id_step, "channel_image_url", channelimageurl );
rep.saveStepAttribute( id_transformation, id_step, "channel_image_description", channelimagedescription );
rep.saveStepAttribute( id_transformation, id_step, "channel_author", channelauthor );
rep.saveStepAttribute( id_transformation, id_step, "channel_language", channellanguage );
rep.saveStepAttribute( id_transformation, id_step, "version", version );
rep.saveStepAttribute( id_transformation, id_step, "encoding", encoding );
rep.saveStepAttribute( id_transformation, id_step, "addimage", addimage );
// items ...
rep.saveStepAttribute( id_transformation, id_step, "item_title", itemtitle );
rep.saveStepAttribute( id_transformation, id_step, "item_description", itemdescription );
rep.saveStepAttribute( id_transformation, id_step, "item_link", itemlink );
rep.saveStepAttribute( id_transformation, id_step, "item_pubdate", itempubdate );
rep.saveStepAttribute( id_transformation, id_step, "item_author", itemauthor );
rep.saveStepAttribute( id_transformation, id_step, "addgeorss", addgeorss );
rep.saveStepAttribute( id_transformation, id_step, "usegeorssgml", usegeorssgml );
rep.saveStepAttribute( id_transformation, id_step, "geopointlat", geopointlat );
rep.saveStepAttribute( id_transformation, id_step, "geopointlong", geopointlong );
rep.saveStepAttribute( id_transformation, id_step, "filename_field", filenamefield );
rep.saveStepAttribute( id_transformation, id_step, "file_name", fileName );
rep.saveStepAttribute( id_transformation, id_step, "file_extention", extension );
rep.saveStepAttribute( id_transformation, id_step, "file_add_stepnr", stepNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_partnr", partNrInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_date", dateInFilename );
rep.saveStepAttribute( id_transformation, id_step, "file_add_time", timeInFilename );
rep.saveStepAttribute( id_transformation, id_step, "is_filename_in_field", isfilenameinfield );
rep.saveStepAttribute( id_transformation, id_step, "create_parent_folder", createparentfolder );
rep.saveStepAttribute( id_transformation, id_step, "addtoresult", AddToResult );
for ( int i = 0; i < ChannelCustomFields.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "channel_custom_field", ChannelCustomFields[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "channel_custom_tag", ChannelCustomTags[i] );
}
for ( int i = 0; i < ItemCustomFields.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "item_custom_field", ItemCustomFields[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "item_custom_tag", ItemCustomTags[i] );
}
for ( int i = 0; i < NameSpaces.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "namespace_tag", NameSpacesTitle[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "namespace_value", NameSpaces[i] );
}
} catch ( Exception e ) {
throw new KettleException( "Unable to save step information to the repository for id_step=" + id_step, e );
}
}
public void check( List remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
// String error_message = "";
// boolean error_found = false;
// OK, we have the table fields.
// Now see what we can find as previous step...
if ( prev != null && prev.size() > 0 ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "RssOutputMeta.CheckResult.FieldsReceived", "" + prev.size() ), stepMeta );
remarks.add( cr );
// Starting from prev...
/*
* for (int i=0;i 0 ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "RssOutputMeta.CheckResult.ExpectedInputOk" ), stepMeta );
remarks.add( cr );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RssOutputMeta.CheckResult.ExpectedInputError" ), stepMeta );
remarks.add( cr );
}
}
public StepDataInterface getStepData() {
return new RssOutputData();
}
/**
* @return the channeltitle
*/
public String getChannelTitle() {
return channeltitle;
}
/**
* @return the channeldescription
*/
public String getChannelDescription() {
return channeldescription;
}
/**
* @return the channellink
*/
public String getChannelLink() {
return channellink;
}
/**
* @return the channelpubdate
*/
public String getChannelPubDate() {
return channelpubdate;
}
/**
* @return the channelimagelink
*/
public String getChannelImageLink() {
return channelimagelink;
}
/**
* @return the channelimageurl
*/
public String getChannelImageUrl() {
return channelimageurl;
}
/**
* @return the channelimagedescription
*/
public String getChannelImageDescription() {
return channelimagedescription;
}
/**
* @return the channelimagetitle
*/
public String getChannelImageTitle() {
return channelimagetitle;
}
/**
* @return the channellanguage
*/
public String getChannelLanguage() {
return channellanguage;
}
/**
* @return the channelauthor
*/
public String getChannelAuthor() {
return channelauthor;
}
/**
* @param channelauthor
* the channelauthor to set
*/
public void setChannelAuthor( String channelauthor ) {
this.channelauthor = channelauthor;
}
/**
* @param channeltitle
* the channeltitle to set
*/
public void setChannelTitle( String channeltitle ) {
this.channeltitle = channeltitle;
}
/**
* @param channellink
* the channellink to set
*/
public void setChannelLink( String channellink ) {
this.channellink = channellink;
}
/**
* @param channelpubdate
* the channelpubdate to set
*/
public void setChannelPubDate( String channelpubdate ) {
this.channelpubdate = channelpubdate;
}
/**
* @param channelimagetitle
* the channelimagetitle to set
*/
public void setChannelImageTitle( String channelimagetitle ) {
this.channelimagetitle = channelimagetitle;
}
/**
* @param channelimagelink
* the channelimagelink to set
*/
public void setChannelImageLink( String channelimagelink ) {
this.channelimagelink = channelimagelink;
}
/**
* @param channelimageurl
* the channelimageurl to set
*/
public void setChannelImageUrl( String channelimageurl ) {
this.channelimageurl = channelimageurl;
}
/**
* @param channelimagedescription
* the channelimagedescription to set
*/
public void setChannelImageDescription( String channelimagedescription ) {
this.channelimagedescription = channelimagedescription;
}
/**
* @param channellanguage
* the channellanguage to set
*/
public void setChannelLanguage( String channellanguage ) {
this.channellanguage = channellanguage;
}
/**
* @param channeldescription
* the channeldescription to set
*/
public void setChannelDescription( String channeldescription ) {
this.channeldescription = channeldescription;
}
/**
* @return the itemtitle
*/
public String getItemTitle() {
return itemtitle;
}
/**
* @return the geopointlat
*/
public String getGeoPointLat() {
return geopointlat;
}
/**
* @param geopointlat
* the geopointlat to set
*/
public void setGeoPointLat( String geopointlat ) {
this.geopointlat = geopointlat;
}
/**
* @return the geopointlong
*/
public String getGeoPointLong() {
return geopointlong;
}
/**
* @param geopointlong
* the geopointlong to set
*/
public void setGeoPointLong( String geopointlong ) {
this.geopointlong = geopointlong;
}
/**
* @return the itemdescription
*/
public String getItemDescription() {
return itemdescription;
}
/**
* @return the itemlink
*/
public String getItemLink() {
return itemlink;
}
/**
* @return the itempubdate
*/
public String getItemPubDate() {
return itempubdate;
}
/**
* @return the itemauthor
*/
public String getItemAuthor() {
return itemauthor;
}
/**
* @param itemtitle
* the itemtitle to set
*/
public void setItemTitle( String itemtitle ) {
this.itemtitle = itemtitle;
}
/**
* @param itemdescription
* the itemdescription to set
*/
public void setItemDescription( String itemdescription ) {
this.itemdescription = itemdescription;
}
/**
* @param itemlink
* the itemlink to set
*/
public void setItemLink( String itemlink ) {
this.itemlink = itemlink;
}
/**
* @param itempubdate
* the itempubdate to set
*/
public void setItemPubDate( String itempubdate ) {
this.itempubdate = itempubdate;
}
/**
* @param itemauthor
* the itemauthor to set
*/
public void setItemAuthor( String itemauthor ) {
this.itemauthor = itemauthor;
}
/**
* @return channelcopyrightt
*/
public String getChannelCopyright() {
return channelcopyright;
}
/**
* @param channelcopyright
* the channelcopyright to set
*/
public void setChannelCopyright( String channelcopyright ) {
this.channelcopyright = channelcopyright;
}
public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int cnr, TransMeta tr,
Trans trans ) {
return new RssOutput( stepMeta, stepDataInterface, cnr, tr, trans );
}
}