org.pentaho.di.job.entries.getpop.JobEntryGetPOP 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.job.entries.getpop;
import org.pentaho.di.job.entry.validator.AbstractFileValidator;
import org.pentaho.di.job.entry.validator.AndValidator;
import org.pentaho.di.job.entry.validator.JobEntryValidatorUtils;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import javax.mail.Flags.Flag;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileType;
import org.pentaho.di.cluster.SlaveServer;
import org.pentaho.di.core.CheckResultInterface;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.util.Utils;
import org.pentaho.di.core.Result;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.encryption.Encr;
import org.pentaho.di.core.exception.KettleDatabaseException;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
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.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryBase;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.job.entry.validator.ValidatorContext;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.resource.ResourceEntry;
import org.pentaho.di.resource.ResourceEntry.ResourceType;
import org.pentaho.di.resource.ResourceReference;
import org.pentaho.metastore.api.IMetaStore;
import org.w3c.dom.Node;
/**
* This defines an get pop job entry.
*
* @author Samatar
* @since 01-03-2007
*
*/
public class JobEntryGetPOP extends JobEntryBase implements Cloneable, JobEntryInterface {
private static Class> PKG = JobEntryGetPOP.class; // for i18n purposes, needed by Translator2!!
static final int FOLDER_OUTPUT = 0;
static final int FOLDER_ATTACHMENTS = 1;
public int actiontype;
public int conditionReceivedDate;
public int valueimaplist;
public int aftergetimap;
private String servername;
private String username;
private String password;
private boolean usessl;
private String sslport;
private boolean useproxy;
private String proxyusername;
private String outputdirectory;
private String filenamepattern;
private String firstmails;
public int retrievemails;
private boolean delete;
private String protocol;
private boolean saveattachment;
private boolean savemessage;
private boolean usedifferentfolderforattachment;
private String attachmentfolder;
private String attachmentwildcard;
private String imapfirstmails;
private String imapfolder;
// search term
private String senderSearch;
private boolean notTermSenderSearch;
private String receipientSearch;
private String subjectSearch;
private String bodySearch;
private boolean notTermBodySearch;
private String receivedDate1;
private String receivedDate2;
private boolean notTermSubjectSearch;
private boolean notTermReceipientSearch;
private boolean notTermReceivedDateSearch;
private boolean includesubfolders;
private String moveToIMAPFolder;
private boolean createmovetofolder;
private boolean createlocalfolder;
private static final String DEFAULT_FILE_NAME_PATTERN = "name_{SYS|hhmmss_MMddyyyy|}_#IdFile#.mail";
public static final String DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String FILENAME_ID_PATTERN = "#IdFile#";
private static final String FILENAME_SYS_DATE_OPEN = "{SYS|";
private static final String FILENAME_SYS_DATE_CLOSE = "|}";
private Pattern attachementPattern;
public JobEntryGetPOP( String n ) {
super( n, "" );
servername = null;
username = null;
password = null;
usessl = false;
sslport = null;
useproxy = false;
proxyusername = null;
outputdirectory = null;
filenamepattern = DEFAULT_FILE_NAME_PATTERN;
retrievemails = 0;
firstmails = null;
delete = false;
protocol = MailConnectionMeta.PROTOCOL_STRING_POP3;
saveattachment = true;
savemessage = true;
usedifferentfolderforattachment = false;
attachmentfolder = null;
attachmentwildcard = null;
imapfirstmails = "0";
valueimaplist = MailConnectionMeta.VALUE_IMAP_LIST_ALL;
imapfolder = null;
// search term
senderSearch = null;
notTermSenderSearch = false;
notTermReceipientSearch = false;
notTermSubjectSearch = false;
bodySearch = null;
notTermBodySearch = false;
receivedDate1 = null;
receivedDate2 = null;
notTermReceivedDateSearch = false;
receipientSearch = null;
subjectSearch = null;
actiontype = MailConnectionMeta.ACTION_TYPE_GET;
moveToIMAPFolder = null;
createmovetofolder = false;
createlocalfolder = false;
aftergetimap = MailConnectionMeta.AFTER_GET_IMAP_NOTHING;
includesubfolders = false;
}
public JobEntryGetPOP() {
this( "" );
}
public Object clone() {
JobEntryGetPOP je = (JobEntryGetPOP) super.clone();
return je;
}
public String getXML() {
StringBuilder retval = new StringBuilder( 550 );
retval.append( super.getXML() );
retval.append( " " ).append( XMLHandler.addTagValue( "servername", servername ) );
retval.append( " " ).append( XMLHandler.addTagValue( "username", username ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "password", Encr.encryptPasswordIfNotUsingVariables( password ) ) );
retval.append( " " ).append( XMLHandler.addTagValue( "usessl", usessl ) );
retval.append( " " ).append( XMLHandler.addTagValue( "sslport", sslport ) );
retval.append( " " ).append( XMLHandler.addTagValue( "outputdirectory", outputdirectory ) );
retval.append( " " ).append( XMLHandler.addTagValue( "filenamepattern", filenamepattern ) );
retval.append( " " ).append( XMLHandler.addTagValue( "retrievemails", retrievemails ) );
retval.append( " " ).append( XMLHandler.addTagValue( "firstmails", firstmails ) );
retval.append( " " ).append( XMLHandler.addTagValue( "delete", delete ) );
retval.append( " " ).append( XMLHandler.addTagValue( "savemessage", savemessage ) );
retval.append( " " ).append( XMLHandler.addTagValue( "saveattachment", saveattachment ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "usedifferentfolderforattachment", usedifferentfolderforattachment ) );
retval.append( " " ).append( XMLHandler.addTagValue( "protocol", protocol ) );
retval.append( " " ).append( XMLHandler.addTagValue( "attachmentfolder", attachmentfolder ) );
retval.append( " " ).append( XMLHandler.addTagValue( "attachmentwildcard", attachmentwildcard ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "valueimaplist", MailConnectionMeta.getValueImapListCode( valueimaplist ) ) );
retval.append( " " ).append( XMLHandler.addTagValue( "imapfirstmails", imapfirstmails ) );
retval.append( " " ).append( XMLHandler.addTagValue( "imapfolder", imapfolder ) );
// search term
retval.append( " " ).append( XMLHandler.addTagValue( "sendersearch", senderSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "nottermsendersearch", notTermSenderSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "receipientsearch", receipientSearch ) );
retval
.append( " " ).append( XMLHandler.addTagValue( "nottermreceipientsearch", notTermReceipientSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "subjectsearch", subjectSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "nottermsubjectsearch", notTermSubjectSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "bodysearch", bodySearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "nottermbodysearch", notTermBodySearch ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "conditionreceiveddate", MailConnectionMeta
.getConditionDateCode( conditionReceivedDate ) ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "nottermreceiveddatesearch", notTermReceivedDateSearch ) );
retval.append( " " ).append( XMLHandler.addTagValue( "receiveddate1", receivedDate1 ) );
retval.append( " " ).append( XMLHandler.addTagValue( "receiveddate2", receivedDate2 ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "actiontype", MailConnectionMeta.getActionTypeCode( actiontype ) ) );
retval.append( " " ).append( XMLHandler.addTagValue( "movetoimapfolder", moveToIMAPFolder ) );
retval.append( " " ).append( XMLHandler.addTagValue( "createmovetofolder", createmovetofolder ) );
retval.append( " " ).append( XMLHandler.addTagValue( "createlocalfolder", createlocalfolder ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "aftergetimap", MailConnectionMeta.getAfterGetIMAPCode( aftergetimap ) ) );
retval.append( " " ).append( XMLHandler.addTagValue( "includesubfolders", includesubfolders ) );
retval.append( " " ).append( XMLHandler.addTagValue( "useproxy", useproxy ) );
retval.append( " " ).append( XMLHandler.addTagValue( "proxyusername", proxyusername ) );
return retval.toString();
}
public void loadXML( Node entrynode, List databases, List slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
servername = XMLHandler.getTagValue( entrynode, "servername" );
username = XMLHandler.getTagValue( entrynode, "username" );
password = Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( entrynode, "password" ) );
usessl = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "usessl" ) );
sslport = XMLHandler.getTagValue( entrynode, "sslport" );
outputdirectory = XMLHandler.getTagValue( entrynode, "outputdirectory" );
filenamepattern = XMLHandler.getTagValue( entrynode, "filenamepattern" );
if ( Utils.isEmpty( filenamepattern ) ) {
filenamepattern = DEFAULT_FILE_NAME_PATTERN;
}
retrievemails = Const.toInt( XMLHandler.getTagValue( entrynode, "retrievemails" ), -1 );
firstmails = XMLHandler.getTagValue( entrynode, "firstmails" );
delete = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "delete" ) );
protocol =
Const.NVL( XMLHandler.getTagValue( entrynode, "protocol" ), MailConnectionMeta.PROTOCOL_STRING_POP3 );
String sm = XMLHandler.getTagValue( entrynode, "savemessage" );
if ( Utils.isEmpty( sm ) ) {
savemessage = true;
} else {
savemessage = "Y".equalsIgnoreCase( sm );
}
String sa = XMLHandler.getTagValue( entrynode, "saveattachment" );
if ( Utils.isEmpty( sa ) ) {
saveattachment = true;
} else {
saveattachment = "Y".equalsIgnoreCase( sa );
}
usedifferentfolderforattachment =
"Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "usedifferentfolderforattachment" ) );
attachmentfolder = XMLHandler.getTagValue( entrynode, "attachmentfolder" );
attachmentwildcard = XMLHandler.getTagValue( entrynode, "attachmentwildcard" );
valueimaplist =
MailConnectionMeta.getValueImapListByCode( Const.NVL( XMLHandler
.getTagValue( entrynode, "valueimaplist" ), "" ) );
imapfirstmails = XMLHandler.getTagValue( entrynode, "imapfirstmails" );
imapfolder = XMLHandler.getTagValue( entrynode, "imapfolder" );
// search term
senderSearch = XMLHandler.getTagValue( entrynode, "sendersearch" );
notTermSenderSearch = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "nottermsendersearch" ) );
receipientSearch = XMLHandler.getTagValue( entrynode, "receipientsearch" );
notTermReceipientSearch =
"Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "nottermreceipientsearch" ) );
subjectSearch = XMLHandler.getTagValue( entrynode, "subjectsearch" );
notTermSubjectSearch = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "nottermsubjectsearch" ) );
bodySearch = XMLHandler.getTagValue( entrynode, "bodysearch" );
notTermBodySearch = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "nottermbodysearch" ) );
conditionReceivedDate =
MailConnectionMeta.getConditionByCode( Const.NVL( XMLHandler.getTagValue(
entrynode, "conditionreceiveddate" ), "" ) );
notTermReceivedDateSearch =
"Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "nottermreceiveddatesearch" ) );
receivedDate1 = XMLHandler.getTagValue( entrynode, "receivedDate1" );
receivedDate2 = XMLHandler.getTagValue( entrynode, "receivedDate2" );
actiontype =
MailConnectionMeta.getActionTypeByCode( Const
.NVL( XMLHandler.getTagValue( entrynode, "actiontype" ), "" ) );
moveToIMAPFolder = XMLHandler.getTagValue( entrynode, "movetoimapfolder" );
createmovetofolder = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "createmovetofolder" ) );
createlocalfolder = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "createlocalfolder" ) );
aftergetimap =
MailConnectionMeta.getAfterGetIMAPByCode( Const.NVL(
XMLHandler.getTagValue( entrynode, "aftergetimap" ), "" ) );
includesubfolders = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "includesubfolders" ) );
useproxy = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "useproxy" ) );
proxyusername = XMLHandler.getTagValue( entrynode, "proxyusername" );
} catch ( KettleXMLException xe ) {
throw new KettleXMLException( "Unable to load job entry of type 'get pop' from XML node", xe );
}
}
public int getValueImapList() {
return valueimaplist;
}
public void setValueImapList( int value ) {
this.valueimaplist = value;
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List databases,
List slaveServers ) throws KettleException {
try {
servername = rep.getJobEntryAttributeString( id_jobentry, "servername" );
username = rep.getJobEntryAttributeString( id_jobentry, "username" );
password =
Encr.decryptPasswordOptionallyEncrypted( rep.getJobEntryAttributeString( id_jobentry, "password" ) );
usessl = rep.getJobEntryAttributeBoolean( id_jobentry, "usessl" );
sslport = rep.getJobEntryAttributeString( id_jobentry, "sslport" ); // backward compatible.
outputdirectory = rep.getJobEntryAttributeString( id_jobentry, "outputdirectory" );
filenamepattern = rep.getJobEntryAttributeString( id_jobentry, "filenamepattern" );
if ( Utils.isEmpty( filenamepattern ) ) {
filenamepattern = DEFAULT_FILE_NAME_PATTERN;
}
retrievemails = (int) rep.getJobEntryAttributeInteger( id_jobentry, "retrievemails" );
firstmails = rep.getJobEntryAttributeString( id_jobentry, "firstmails" );
delete = rep.getJobEntryAttributeBoolean( id_jobentry, "delete" );
protocol =
Const.NVL(
rep.getJobEntryAttributeString( id_jobentry, "protocol" ), MailConnectionMeta.PROTOCOL_STRING_POP3 );
String sv = rep.getJobEntryAttributeString( id_jobentry, "savemessage" );
if ( Utils.isEmpty( sv ) ) {
savemessage = true;
} else {
savemessage = rep.getJobEntryAttributeBoolean( id_jobentry, "savemessage" );
}
String sa = rep.getJobEntryAttributeString( id_jobentry, "saveattachment" );
if ( Utils.isEmpty( sa ) ) {
saveattachment = true;
} else {
saveattachment = rep.getJobEntryAttributeBoolean( id_jobentry, "saveattachment" );
}
usedifferentfolderforattachment =
rep.getJobEntryAttributeBoolean( id_jobentry, "usedifferentfolderforattachment" );
attachmentfolder = rep.getJobEntryAttributeString( id_jobentry, "attachmentfolder" );
attachmentwildcard = rep.getJobEntryAttributeString( id_jobentry, "attachmentwildcard" );
valueimaplist =
MailConnectionMeta.getValueListImapListByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "valueimaplist" ), "" ) );
imapfirstmails = rep.getJobEntryAttributeString( id_jobentry, "imapfirstmails" );
imapfolder = rep.getJobEntryAttributeString( id_jobentry, "imapfolder" );
// search term
senderSearch = rep.getJobEntryAttributeString( id_jobentry, "sendersearch" );
notTermSenderSearch = rep.getJobEntryAttributeBoolean( id_jobentry, "nottermsendersearch" );
receipientSearch = rep.getJobEntryAttributeString( id_jobentry, "receipientsearch" );
notTermReceipientSearch = rep.getJobEntryAttributeBoolean( id_jobentry, "nottermreceipientsearch" );
subjectSearch = rep.getJobEntryAttributeString( id_jobentry, "subjectsearch" );
notTermSubjectSearch = rep.getJobEntryAttributeBoolean( id_jobentry, "nottermsubjectsearch" );
bodySearch = rep.getJobEntryAttributeString( id_jobentry, "bodysearch" );
notTermBodySearch = rep.getJobEntryAttributeBoolean( id_jobentry, "nottermbodysearch" );
conditionReceivedDate =
MailConnectionMeta.getConditionByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "conditionreceiveddate" ), "" ) );
notTermReceivedDateSearch = rep.getJobEntryAttributeBoolean( id_jobentry, "nottermreceiveddatesearch" );
receivedDate1 = rep.getJobEntryAttributeString( id_jobentry, "receiveddate1" );
receivedDate2 = rep.getJobEntryAttributeString( id_jobentry, "receiveddate2" );
actiontype =
MailConnectionMeta.getActionTypeByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "actiontype" ), "" ) );
moveToIMAPFolder = rep.getJobEntryAttributeString( id_jobentry, "movetoimapfolder" );
createmovetofolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createmovetofolder" );
createlocalfolder = rep.getJobEntryAttributeBoolean( id_jobentry, "createlocalfolder" );
aftergetimap =
MailConnectionMeta.getAfterGetIMAPByCode( Const.NVL( rep.getJobEntryAttributeString(
id_jobentry, "aftergetimap" ), "" ) );
includesubfolders = rep.getJobEntryAttributeBoolean( id_jobentry, "includesubfolders" );
useproxy = rep.getJobEntryAttributeBoolean( id_jobentry, "useproxy" );
proxyusername = rep.getJobEntryAttributeString( id_jobentry, "proxyusername" );
} catch ( KettleException dbe ) {
throw new KettleException(
"Unable to load job entry of type 'get pop' exists from the repository for id_jobentry=" + id_jobentry,
dbe );
}
}
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
try {
rep.saveJobEntryAttribute( id_job, getObjectId(), "servername", servername );
rep.saveJobEntryAttribute( id_job, getObjectId(), "username", username );
rep.saveJobEntryAttribute( id_job, getObjectId(), "password", Encr
.encryptPasswordIfNotUsingVariables( password ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "usessl", usessl );
rep.saveJobEntryAttribute( id_job, getObjectId(), "sslport", sslport );
rep.saveJobEntryAttribute( id_job, getObjectId(), "outputdirectory", outputdirectory );
rep.saveJobEntryAttribute( id_job, getObjectId(), "filenamepattern", filenamepattern );
rep.saveJobEntryAttribute( id_job, getObjectId(), "retrievemails", retrievemails );
rep.saveJobEntryAttribute( id_job, getObjectId(), "firstmails", firstmails );
rep.saveJobEntryAttribute( id_job, getObjectId(), "delete", delete );
rep.saveJobEntryAttribute( id_job, getObjectId(), "protocol", protocol );
rep.saveJobEntryAttribute( id_job, getObjectId(), "savemessage", savemessage );
rep.saveJobEntryAttribute( id_job, getObjectId(), "saveattachment", saveattachment );
rep.saveJobEntryAttribute(
id_job, getObjectId(), "usedifferentfolderforattachment", usedifferentfolderforattachment );
rep.saveJobEntryAttribute( id_job, getObjectId(), "attachmentfolder", attachmentfolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "attachmentwildcard", attachmentwildcard );
rep.saveJobEntryAttribute( id_job, getObjectId(), "valueimaplist", MailConnectionMeta
.getValueImapListCode( valueimaplist ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "imapfirstmails", imapfirstmails );
rep.saveJobEntryAttribute( id_job, getObjectId(), "imapfolder", imapfolder );
// search term
rep.saveJobEntryAttribute( id_job, getObjectId(), "sendersearch", senderSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nottermsendersearch", notTermSenderSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "receipientsearch", receipientSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nottermreceipientsearch", notTermReceipientSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "subjectsearch", subjectSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nottermsubjectsearch", notTermSubjectSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "bodysearch", bodySearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nottermbodysearch", notTermBodySearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "conditionreceiveddate", MailConnectionMeta
.getConditionDateCode( conditionReceivedDate ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "nottermreceiveddatesearch", notTermReceivedDateSearch );
rep.saveJobEntryAttribute( id_job, getObjectId(), "receiveddate1", receivedDate1 );
rep.saveJobEntryAttribute( id_job, getObjectId(), "receiveddate2", receivedDate2 );
rep.saveJobEntryAttribute( id_job, getObjectId(), "actiontype", MailConnectionMeta
.getActionTypeCode( actiontype ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "movetoimapfolder", moveToIMAPFolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createmovetofolder", createmovetofolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "createlocalfolder", createlocalfolder );
rep.saveJobEntryAttribute( id_job, getObjectId(), "aftergetimap", MailConnectionMeta
.getAfterGetIMAPCode( aftergetimap ) );
rep.saveJobEntryAttribute( id_job, getObjectId(), "includesubfolders", includesubfolders );
rep.saveJobEntryAttribute( id_job, getObjectId(), "useproxy", useproxy );
rep.saveJobEntryAttribute( id_job, getObjectId(), "proxyusername", proxyusername );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( "Unable to save job entry of type 'get pop' to the repository for id_job="
+ id_job, dbe );
}
}
public String getPort() {
return sslport;
}
public String getRealPort() {
return environmentSubstitute( getPort() );
}
public void setPort( String sslport ) {
this.sslport = sslport;
}
public void setFirstMails( String firstmails ) {
this.firstmails = firstmails;
}
public String getFirstMails() {
return firstmails;
}
public boolean isIncludeSubFolders() {
return includesubfolders;
}
public void setIncludeSubFolders( boolean includesubfolders ) {
this.includesubfolders = includesubfolders;
}
public void setFirstIMAPMails( String firstmails ) {
this.imapfirstmails = firstmails;
}
public String getFirstIMAPMails() {
return imapfirstmails;
}
public void setSenderSearchTerm( String senderSearch ) {
this.senderSearch = senderSearch;
}
public String getSenderSearchTerm() {
return this.senderSearch;
}
public void setNotTermSenderSearch( boolean notTermSenderSearch ) {
this.notTermSenderSearch = notTermSenderSearch;
}
public boolean isNotTermSenderSearch() {
return this.notTermSenderSearch;
}
public void setNotTermSubjectSearch( boolean notTermSubjectSearch ) {
this.notTermSubjectSearch = notTermSubjectSearch;
}
public void setNotTermBodySearch( boolean notTermBodySearch ) {
this.notTermBodySearch = notTermBodySearch;
}
public boolean isNotTermSubjectSearch() {
return this.notTermSubjectSearch;
}
public boolean isNotTermBodySearch() {
return this.notTermBodySearch;
}
public void setNotTermReceivedDateSearch( boolean notTermReceivedDateSearch ) {
this.notTermReceivedDateSearch = notTermReceivedDateSearch;
}
public boolean isNotTermReceivedDateSearch() {
return this.notTermReceivedDateSearch;
}
public void setNotTermReceipientSearch( boolean notTermReceipientSearch ) {
this.notTermReceipientSearch = notTermReceipientSearch;
}
public boolean isNotTermReceipientSearch() {
return this.notTermReceipientSearch;
}
public void setCreateMoveToFolder( boolean createfolder ) {
this.createmovetofolder = createfolder;
}
public boolean isCreateMoveToFolder() {
return this.createmovetofolder;
}
public void setReceipientSearch( String receipientSearch ) {
this.receipientSearch = receipientSearch;
}
public String getReceipientSearch() {
return this.receipientSearch;
}
public void setSubjectSearch( String subjectSearch ) {
this.subjectSearch = subjectSearch;
}
public String getSubjectSearch() {
return this.subjectSearch;
}
public void setBodySearch( String bodySearch ) {
this.bodySearch = bodySearch;
}
public String getBodySearch() {
return this.bodySearch;
}
public String getReceivedDate1() {
return this.receivedDate1;
}
public void setReceivedDate1( String inputDate ) {
this.receivedDate1 = inputDate;
}
public String getReceivedDate2() {
return this.receivedDate2;
}
public void setReceivedDate2( String inputDate ) {
this.receivedDate2 = inputDate;
}
public void setMoveToIMAPFolder( String foldername ) {
this.moveToIMAPFolder = foldername;
}
public String getMoveToIMAPFolder() {
return this.moveToIMAPFolder;
}
public void setCreateLocalFolder( boolean createfolder ) {
this.createlocalfolder = createfolder;
}
public boolean isCreateLocalFolder() {
return this.createlocalfolder;
}
public void setConditionOnReceivedDate( int conditionReceivedDate ) {
this.conditionReceivedDate = conditionReceivedDate;
}
public int getConditionOnReceivedDate() {
return this.conditionReceivedDate;
}
public void setActionType( int actiontype ) {
this.actiontype = actiontype;
}
public int getActionType() {
return this.actiontype;
}
public void setAfterGetIMAP( int afterget ) {
this.aftergetimap = afterget;
}
public int getAfterGetIMAP() {
return this.aftergetimap;
}
public String getRealFirstMails() {
return environmentSubstitute( getFirstMails() );
}
public void setServerName( String servername ) {
this.servername = servername;
}
public String getServerName() {
return servername;
}
public void setUserName( String username ) {
this.username = username;
}
public String getUserName() {
return username;
}
public void setOutputDirectory( String outputdirectory ) {
this.outputdirectory = outputdirectory;
}
public void setFilenamePattern( String filenamepattern ) {
this.filenamepattern = filenamepattern;
}
/**
* 0 = retrieve all 2 = retrieve unread
*
* @param nr
* @see {@link #setValueImapList(int)}
*/
public void setRetrievemails( int nr ) {
retrievemails = nr;
}
public int getRetrievemails() {
return this.retrievemails;
}
public String getFilenamePattern() {
return filenamepattern;
}
public String getOutputDirectory() {
return outputdirectory;
}
public String getRealOutputDirectory() {
return environmentSubstitute( getOutputDirectory() );
}
public String getRealFilenamePattern() {
return environmentSubstitute( getFilenamePattern() );
}
public String getRealUsername() {
return environmentSubstitute( getUserName() );
}
public String getRealServername() {
return environmentSubstitute( getServerName() );
}
public String getRealProxyUsername() {
return environmentSubstitute( geProxyUsername() );
}
public String geProxyUsername() {
return this.proxyusername;
}
/**
* @return Returns the password.
*/
public String getPassword() {
return password;
}
/**
* @param password string for resolving
* @return Returns resolved decrypted password or null
* in case of param returns null.
*/
public String getRealPassword( String password ) {
return Utils.resolvePassword( variables, password );
}
public String getAttachmentFolder() {
return attachmentfolder;
}
public String getRealAttachmentFolder() {
return environmentSubstitute( getAttachmentFolder() );
}
public void setAttachmentFolder( String foldername ) {
this.attachmentfolder = foldername;
}
/**
* @param delete
* The delete to set.
*/
public void setDelete( boolean delete ) {
this.delete = delete;
}
/**
* @return Returns the delete.
*/
public boolean getDelete() {
return delete;
}
public String getProtocol() {
return protocol;
}
public void setProtocol( String protocol ) {
this.protocol = protocol;
}
public String getIMAPFolder() {
return imapfolder;
}
public void setIMAPFolder( String folder ) {
this.imapfolder = folder;
}
public void setAttachmentWildcard( String wildcard ) {
attachmentwildcard = wildcard;
}
public String getAttachmentWildcard() {
return attachmentwildcard;
}
/**
* @param usessl
* The usessl to set.
*/
public void setUseSSL( boolean usessl ) {
this.usessl = usessl;
}
/**
* @return Returns the usessl.
*/
public boolean isUseSSL() {
return this.usessl;
}
/**
* @return Returns the useproxy.
*/
public boolean isUseProxy() {
return this.useproxy;
}
public void setUseProxy( boolean useprox ) {
this.useproxy = useprox;
}
public boolean isSaveAttachment() {
return saveattachment;
}
public void setProxyUsername( String username ) {
this.proxyusername = username;
}
public String getProxyUsername() {
return this.proxyusername;
}
public void setSaveAttachment( boolean saveattachment ) {
this.saveattachment = saveattachment;
}
public boolean isSaveMessage() {
return savemessage;
}
public void setSaveMessage( boolean savemessage ) {
this.savemessage = savemessage;
}
public void setDifferentFolderForAttachment( boolean usedifferentfolder ) {
this.usedifferentfolderforattachment = usedifferentfolder;
}
public boolean isDifferentFolderForAttachment() {
return this.usedifferentfolderforattachment;
}
/**
* @param password
* The password to set.
*/
public void setPassword( String password ) {
this.password = password;
}
public Result execute( Result previousResult, int nr ) throws KettleException {
Result result = previousResult;
result.setResult( false );
//FileObject fileObject = null;
MailConnection mailConn = null;
Date beginDate = null;
Date endDate = null;
SimpleDateFormat df = new SimpleDateFormat( DATE_PATTERN );
try {
boolean usePOP3 = getProtocol().equals( MailConnectionMeta.PROTOCOL_STRING_POP3 );
boolean moveafter = false;
int nbrmailtoretrieve =
usePOP3 ? ( getRetrievemails() == 2 ? Const.toInt( getFirstMails(), 0 ) : 0 ) : Const.toInt(
getFirstIMAPMails(), 0 );
String realOutputFolder = createOutputDirectory( JobEntryGetPOP.FOLDER_OUTPUT );
String targetAttachmentFolder = createOutputDirectory( JobEntryGetPOP.FOLDER_ATTACHMENTS );
// Check destination folder
String realMoveToIMAPFolder = environmentSubstitute( getMoveToIMAPFolder() );
if ( getProtocol().equals( MailConnectionMeta.PROTOCOL_STRING_IMAP )
&& ( getActionType() == MailConnectionMeta.ACTION_TYPE_MOVE )
|| ( getActionType() == MailConnectionMeta.ACTION_TYPE_GET
&& getAfterGetIMAP() == MailConnectionMeta.AFTER_GET_IMAP_MOVE ) ) {
if ( Utils.isEmpty( realMoveToIMAPFolder ) ) {
throw new KettleException( BaseMessages
.getString( PKG, "JobGetMailsFromPOP.Error.MoveToIMAPFolderEmpty" ) );
}
moveafter = true;
}
// check search terms
// Received Date
switch ( getConditionOnReceivedDate() ) {
case MailConnectionMeta.CONDITION_DATE_EQUAL:
case MailConnectionMeta.CONDITION_DATE_GREATER:
case MailConnectionMeta.CONDITION_DATE_SMALLER:
String realBeginDate = environmentSubstitute( getReceivedDate1() );
if ( Utils.isEmpty( realBeginDate ) ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.ReceivedDateSearchTermEmpty" ) );
}
beginDate = df.parse( realBeginDate );
break;
case MailConnectionMeta.CONDITION_DATE_BETWEEN:
realBeginDate = environmentSubstitute( getReceivedDate1() );
if ( Utils.isEmpty( realBeginDate ) ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.ReceivedDatesSearchTermEmpty" ) );
}
beginDate = df.parse( realBeginDate );
String realEndDate = environmentSubstitute( getReceivedDate2() );
if ( Utils.isEmpty( realEndDate ) ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.ReceivedDatesSearchTermEmpty" ) );
}
endDate = df.parse( realEndDate );
break;
default:
break;
}
String realserver = getRealServername();
String realusername = getRealUsername();
String realpassword = getRealPassword( getPassword() );
String realFilenamePattern = getRealFilenamePattern();
int realport = Const.toInt( environmentSubstitute( sslport ), -1 );
String realIMAPFolder = environmentSubstitute( getIMAPFolder() );
String realProxyUsername = getRealProxyUsername();
initVariables();
// create a mail connection object
mailConn =
new MailConnection(
log, MailConnectionMeta.getProtocolFromString( getProtocol(), MailConnectionMeta.PROTOCOL_IMAP ),
realserver, realport, realusername, realpassword, isUseSSL(), isUseProxy(), realProxyUsername );
// connect
mailConn.connect();
if ( moveafter ) {
// Set destination folder
// Check if folder exists
mailConn.setDestinationFolder( realMoveToIMAPFolder, isCreateMoveToFolder() );
}
// apply search term?
String realSearchSender = environmentSubstitute( getSenderSearchTerm() );
if ( !Utils.isEmpty( realSearchSender ) ) {
// apply FROM
mailConn.setSenderTerm( realSearchSender, isNotTermSenderSearch() );
}
String realSearchReceipient = environmentSubstitute( getReceipientSearch() );
if ( !Utils.isEmpty( realSearchReceipient ) ) {
// apply TO
mailConn.setReceipientTerm( realSearchReceipient );
}
String realSearchSubject = environmentSubstitute( getSubjectSearch() );
if ( !Utils.isEmpty( realSearchSubject ) ) {
// apply Subject
mailConn.setSubjectTerm( realSearchSubject, isNotTermSubjectSearch() );
}
String realSearchBody = environmentSubstitute( getBodySearch() );
if ( !Utils.isEmpty( realSearchBody ) ) {
// apply body
mailConn.setBodyTerm( realSearchBody, isNotTermBodySearch() );
}
// Received Date
switch ( getConditionOnReceivedDate() ) {
case MailConnectionMeta.CONDITION_DATE_EQUAL:
mailConn.setReceivedDateTermEQ( beginDate );
break;
case MailConnectionMeta.CONDITION_DATE_GREATER:
mailConn.setReceivedDateTermGT( beginDate );
break;
case MailConnectionMeta.CONDITION_DATE_SMALLER:
mailConn.setReceivedDateTermLT( beginDate );
break;
case MailConnectionMeta.CONDITION_DATE_BETWEEN:
mailConn.setReceivedDateTermBetween( beginDate, endDate );
break;
default:
break;
}
// set FlagTerm?
if ( usePOP3 ) {
// retrieve messages
if ( getRetrievemails() == 1 ) {
// New messages
// POP doesn't support the concept of "new" messages!
mailConn.setFlagTermUnread();
}
} else {
switch ( getValueImapList() ) {
case MailConnectionMeta.VALUE_IMAP_LIST_NEW:
mailConn.setFlagTermNew();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_OLD:
mailConn.setFlagTermOld();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_READ:
mailConn.setFlagTermRead();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_UNREAD:
mailConn.setFlagTermUnread();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_FLAGGED:
mailConn.setFlagTermFlagged();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_NOT_FLAGGED:
mailConn.setFlagTermNotFlagged();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_DRAFT:
mailConn.setFlagTermDraft();
break;
case MailConnectionMeta.VALUE_IMAP_LIST_NOT_DRAFT:
mailConn.setFlagTermNotDraft();
break;
default:
break;
}
}
// open folder and retrieve messages
fetchOneFolder(
mailConn, usePOP3, realIMAPFolder, realOutputFolder, targetAttachmentFolder, realMoveToIMAPFolder,
realFilenamePattern, nbrmailtoretrieve, df );
if ( isIncludeSubFolders() ) {
// Fetch also sub folders?
if ( isDebug() ) {
logDebug( BaseMessages.getString( PKG, "JobGetPOP.FetchingSubFolders" ) );
}
String[] subfolders = mailConn.returnAllFolders();
if ( subfolders.length == 0 ) {
if ( isDebug() ) {
logDebug( BaseMessages.getString( PKG, "JobGetPOP.NoSubFolders" ) );
}
} else {
for ( int i = 0; i < subfolders.length; i++ ) {
fetchOneFolder(
mailConn, usePOP3, subfolders[i], realOutputFolder, targetAttachmentFolder, realMoveToIMAPFolder,
realFilenamePattern, nbrmailtoretrieve, df );
}
}
}
result.setResult( true );
result.setNrFilesRetrieved( mailConn.getSavedAttachedFilesCounter() );
result.setNrLinesWritten( mailConn.getSavedMessagesCounter() );
result.setNrLinesDeleted( mailConn.getDeletedMessagesCounter() );
result.setNrLinesUpdated( mailConn.getMovedMessagesCounter() );
if ( isDetailed() ) {
logDetailed( "=======================================" );
logDetailed( BaseMessages.getString( PKG, "JobGetPOP.Log.Info.SavedMessages", ""
+ mailConn.getSavedMessagesCounter() ) );
logDetailed( BaseMessages.getString( PKG, "JobGetPOP.Log.Info.DeletedMessages", ""
+ mailConn.getDeletedMessagesCounter() ) );
logDetailed( BaseMessages.getString( PKG, "JobGetPOP.Log.Info.MovedMessages", ""
+ mailConn.getMovedMessagesCounter() ) );
if ( getActionType() == MailConnectionMeta.ACTION_TYPE_GET && isSaveAttachment() ) {
logDetailed( BaseMessages.getString( PKG, "JobGetPOP.Log.Info.AttachedMessagesSuccess", ""
+ mailConn.getSavedAttachedFilesCounter() ) );
}
logDetailed( "=======================================" );
}
} catch ( Exception e ) {
result.setNrErrors( 1 );
logError( "Unexpected error: " + e.getMessage() );
logError( Const.getStackTracker( e ) );
} finally {
try {
if ( mailConn != null ) {
mailConn.disconnect();
mailConn = null;
}
} catch ( Exception e ) { /* Ignore */
}
}
return result;
}
void fetchOneFolder( MailConnection mailConn, boolean usePOP3, String realIMAPFolder,
String realOutputFolder, String targetAttachmentFolder, String realMoveToIMAPFolder,
String realFilenamePattern, int nbrmailtoretrieve, SimpleDateFormat df ) throws KettleException {
try {
// if it is not pop3 and we have non-default imap folder...
if ( !usePOP3 && !Utils.isEmpty( realIMAPFolder ) ) {
mailConn.openFolder( realIMAPFolder, true );
} else {
mailConn.openFolder( true );
}
mailConn.retrieveMessages();
int messagesCount = mailConn.getMessagesCount();
if ( isDetailed() ) {
logDetailed( BaseMessages.getString( PKG, "JobGetMailsFromPOP.TotalMessagesFolder.Label", ""
+ messagesCount, Const.NVL( mailConn.getFolderName(), MailConnectionMeta.INBOX_FOLDER ) ) );
}
messagesCount =
nbrmailtoretrieve > 0
? ( nbrmailtoretrieve > messagesCount ? messagesCount : nbrmailtoretrieve ) : messagesCount;
if ( messagesCount > 0 ) {
switch ( getActionType() ) {
case MailConnectionMeta.ACTION_TYPE_DELETE:
if ( nbrmailtoretrieve > 0 ) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for ( int i = 0; i < messagesCount && !parentJob.isStopped(); i++ ) {
// Get next message
mailConn.fetchNext();
// Delete this message
mailConn.deleteMessage();
if ( isDebug() ) {
logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.MessageDeleted", "" + i ) );
}
}
} else {
// Delete messages
mailConn.deleteMessages( true );
if ( isDebug() ) {
logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.MessagesDeleted", "" + messagesCount ) );
}
}
break;
case MailConnectionMeta.ACTION_TYPE_MOVE:
if ( nbrmailtoretrieve > 0 ) {
// We need to fetch all messages in order to retrieve
// only the first nbrmailtoretrieve ...
for ( int i = 0; i < messagesCount && !parentJob.isStopped(); i++ ) {
// Get next message
mailConn.fetchNext();
// Move this message
mailConn.moveMessage();
if ( isDebug() ) {
logDebug( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.MessageMoved", "" + i, realMoveToIMAPFolder ) );
}
}
} else {
// Move all messages
mailConn.moveMessages();
if ( isDebug() ) {
logDebug( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.MessagesMoved", "" + messagesCount, realMoveToIMAPFolder ) );
}
}
break;
default:
// Get messages and save it in a local file
// also save attached files if needed
for ( int i = 0; i < messagesCount && !parentJob.isStopped(); i++ ) {
// Get next message
mailConn.fetchNext();
int messagenumber = mailConn.getMessage().getMessageNumber();
boolean okPOP3 = usePOP3 ? true : false; // (mailConn.getMessagesCounter() -1 ) {
int j = rest.indexOf( close, i + open.length() );
// search for closing string
if ( j > -1 ) {
String varName = rest.substring( i + open.length(), j );
DateFormat dateFormat = new SimpleDateFormat( varName );
Object Value = dateFormat.format( datetime );
buffer.append( rest.substring( 0, i ) );
buffer.append( Value );
rest = rest.substring( j + close.length() );
} else {
// no closing tag found; end the search
buffer.append( rest );
rest = "";
}
// keep searching
i = rest.indexOf( close );
}
buffer.append( rest );
return buffer.toString();
}
private void initVariables() {
// Attachment wildcard
attachementPattern = null;
String realAttachmentWildcard = environmentSubstitute( getAttachmentWildcard() );
if ( !Utils.isEmpty( realAttachmentWildcard ) ) {
attachementPattern = Pattern.compile( realAttachmentWildcard );
}
}
public void check( List remarks, JobMeta jobMeta, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
JobEntryValidatorUtils.andValidator().validate( this, "serverName", remarks,
AndValidator.putValidators( JobEntryValidatorUtils.notBlankValidator() ) );
JobEntryValidatorUtils.andValidator().validate( this, "userName", remarks,
AndValidator.putValidators( JobEntryValidatorUtils.notBlankValidator() ) );
JobEntryValidatorUtils.andValidator().validate( this, "password", remarks,
AndValidator.putValidators( JobEntryValidatorUtils.notNullValidator() ) );
ValidatorContext ctx = new ValidatorContext();
AbstractFileValidator.putVariableSpace( ctx, getVariables() );
AndValidator.putValidators( ctx, JobEntryValidatorUtils.notBlankValidator(),
JobEntryValidatorUtils.fileExistsValidator() );
JobEntryValidatorUtils.andValidator().validate( this, "outputDirectory", remarks, ctx );
JobEntryValidatorUtils.andValidator().validate( this, "SSLPort", remarks,
AndValidator.putValidators( JobEntryValidatorUtils.integerValidator() ) );
}
public List getResourceDependencies( JobMeta jobMeta ) {
List references = super.getResourceDependencies( jobMeta );
if ( !Utils.isEmpty( servername ) ) {
String realServername = jobMeta.environmentSubstitute( servername );
ResourceReference reference = new ResourceReference( this );
reference.getEntries().add( new ResourceEntry( realServername, ResourceType.SERVER ) );
references.add( reference );
}
return references;
}
String createOutputDirectory( int folderType ) throws KettleException, FileSystemException, IllegalArgumentException {
if ( ( folderType != JobEntryGetPOP.FOLDER_OUTPUT ) && ( folderType != JobEntryGetPOP.FOLDER_ATTACHMENTS ) ) {
throw new IllegalArgumentException( "Invalid folderType argument" );
}
String folderName = "";
switch ( folderType ) {
case JobEntryGetPOP.FOLDER_OUTPUT:
folderName = getRealOutputDirectory();
break;
case JobEntryGetPOP.FOLDER_ATTACHMENTS:
if ( isSaveAttachment() && isDifferentFolderForAttachment() ) {
folderName = getRealAttachmentFolder();
} else {
folderName = getRealOutputDirectory();
}
break;
}
if ( Utils.isEmpty( folderName ) ) {
switch ( folderType ) {
case JobEntryGetPOP.FOLDER_OUTPUT:
throw new KettleException( BaseMessages
.getString( PKG, "JobGetMailsFromPOP.Error.OutputFolderEmpty" ) );
case JobEntryGetPOP.FOLDER_ATTACHMENTS:
throw new KettleException( BaseMessages
.getString( PKG, "JobGetMailsFromPOP.Error.AttachmentFolderEmpty" ) );
}
}
FileObject folder = KettleVFS.getFileObject( folderName, this );
if ( folder.exists() ) {
if ( folder.getType() != FileType.FOLDER ) {
switch ( folderType ) {
case JobEntryGetPOP.FOLDER_OUTPUT:
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.NotAFolderNot", folderName ) );
case JobEntryGetPOP.FOLDER_ATTACHMENTS:
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.AttachmentFolderNotAFolder", folderName ) );
}
}
if ( isDebug() ) {
switch ( folderType ) {
case JobEntryGetPOP.FOLDER_OUTPUT:
logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.Log.OutputFolderExists", folderName ) );
break;
case JobEntryGetPOP.FOLDER_ATTACHMENTS:
logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.Log.AttachmentFolderExists", folderName ) );
break;
}
}
} else {
if ( isCreateLocalFolder() ) {
folder.createFolder();
} else {
switch ( folderType ) {
case JobEntryGetPOP.FOLDER_OUTPUT:
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.OutputFolderNotExist", folderName ) );
case JobEntryGetPOP.FOLDER_ATTACHMENTS:
throw new KettleException( BaseMessages.getString(
PKG, "JobGetMailsFromPOP.Error.AttachmentFolderNotExist", folderName ) );
}
}
}
String returnValue = KettleVFS.getFilename( folder );
try {
folder.close();
} catch ( IOException ignore ) {
//Ignore error, as the folder was created successfully
}
return returnValue;
}
}