Compare commits

...

3 Commits

5 changed files with 159 additions and 70 deletions

View File

@@ -13,10 +13,10 @@
>
<SIGNATURE />
</HEADER>
<FAMILIES>
<FAMILY>Internet/SCP</FAMILY>
</FAMILIES>
<FAMILIES>
<FAMILY>Internet/SCP</FAMILY>
</FAMILIES>
<DOCUMENTATION>
<URL />
@@ -108,7 +108,7 @@
<DEFAULT>"/.ssh/id_dsa"</DEFAULT>
</PARAMETER>
<PARAMETER
<PARAMETER
NAME="PASSPHRASE"
FIELD="TEXT"
NUM_ROW="50"
@@ -125,15 +125,22 @@
NUM_ROW="100"
>
<ITEMS>
<ITEM NAME="SOURCE" />
<ITEM NAME="SOURCE" />
</ITEMS>
</PARAMETER>
<PARAMETER
NAME="DIE_ON_ERROR"
FIELD="CHECK"
NUM_ROW="120"
>
<DEFAULT>true</DEFAULT>
</PARAMETER>
</PARAMETERS>
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="Java_SCP" MODULE="ganymed-ssh2.jar" REQUIRED="true"/>
<IMPORT NAME="Java_SCP" MODULE="ganymed-ssh2.jar" REQUIRED="true"/>
</IMPORTS>
</CODEGENERATION>

View File

@@ -3,7 +3,6 @@ imports="
org.talend.core.model.process.INode
org.talend.core.model.process.ElementParameterParser
org.talend.designer.codegen.config.CodeGeneratorArgument
java.util.List
java.util.Map
"
@@ -13,52 +12,77 @@ imports="
CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
INode node = (INode)codeGenArgument.getArgument();
String cid = node.getUniqueName();
List<Map<String, String>> filelist = (List<Map<String,String>>)ElementParameterParser.getObjectValue(node, "__FILELIST__");
boolean dieOnError = "true".equals(ElementParameterParser.getValue(node, "__DIE_ON_ERROR__"));
if(dieOnError){
%>
//initial the command
StringBuilder command_<%=cid %> = new StringBuilder();
String dir_<%=cid%> = null;
boolean isCmdFailed_<%= cid %> = false;
<%
for (int i = 0;i<filelist.size();i++) {
%>
dir_<%=cid%> = <%=filelist.get(i).get("SOURCE")%>;
dir_<%=cid%> = "\""+dir_<%=cid%>+"\"";
<%
if(i==0){
%>
command_<%=cid %>.append("rm " + dir_<%=cid%>);
nb_file_<%=cid %> ++;
<%}else{%>
if(command_<%=cid %>.length() > 0){
command_<%=cid %>.append(" ");
}
command_<%=cid %>.append(dir_<%=cid%>);
%>
StringBuilder command_<%=cid %> = new StringBuilder("rm -f");
ch.ethz.ssh2.Session sessNew_<%=cid%> = conn_<%=cid%>.openSession();
<%
for(Map<String,String> map : filelist){
%>
command_<%=cid %>.append(" ");
command_<%=cid %>.append("\"");
command_<%=cid %>.append(<%= map.get("SOURCE") %>);
command_<%=cid %>.append("\"");
nb_file_<%=cid %> ++;
<%}
<%
}
%>
/* Create a session */
ch.ethz.ssh2.Session sess_<%=cid%> = conn_<%=cid%>.openSession();
String rmCmd_<%= cid %> = command_<%=cid %>.toString();
if(!"rm -f".equals(rmCmd_<%= cid %>)){
sessNew_<%=cid%>.execCommand(rmCmd_<%= cid %>);
<% if(dieOnError){ %>
StringBuilder errMsg_<%= cid %> = new StringBuilder("File(s) deleting failed.");
int returnCondition_<%= cid %> = sessNew_<%=cid%>.waitForCondition(ch.ethz.ssh2.ChannelCondition.EXIT_STATUS,300L);
Integer exitCode_<%= cid %> = sessNew_<%=cid%>.getExitStatus();
if((returnCondition_<%= cid %> & ch.ethz.ssh2.ChannelCondition.EXIT_STATUS) == ch.ethz.ssh2.ChannelCondition.EXIT_STATUS){
if (exitCode_<%= cid %> != 0) {
isCmdFailed_<%= cid %> = true;
errMsg_<%= cid %>.append("Exit code: ");
errMsg_<%= cid %>.append(exitCode_<%= cid %>);
}
}else if((returnCondition_<%= cid %> & ch.ethz.ssh2.ChannelCondition.TIMEOUT) == ch.ethz.ssh2.ChannelCondition.TIMEOUT){
isCmdFailed_<%= cid %> = true;
errMsg_<%= cid %>.append("The request timeout.");
}else if((returnCondition_<%= cid %> & ch.ethz.ssh2.ChannelCondition.CLOSED) == ch.ethz.ssh2.ChannelCondition.CLOSED){
isCmdFailed_<%= cid %> = true;
errMsg_<%= cid %>.append("Unexpected closed session.");
}else{
System.err.println("Unexpected error.");
isCmdFailed_<%= cid %> = true;
}
<% } %>
//execute the command
sess_<%=cid%>.execCommand((command_<%=cid %>).toString());
//get the return info
java.io.InputStream stderr_<%=cid%> = sess_<%=cid%>.getStderr();
java.io.InputStream stderr_<%=cid%> = sessNew_<%=cid%>.getStderr();
java.io.BufferedReader breer_<%=cid%>= new java.io.BufferedReader(new java.io.InputStreamReader(stderr_<%=cid%>));
String line_err_<%=cid%> = "";
StringBuilder stringStderr_<%=cid%> =new StringBuilder();
while((line_err_<%=cid%> = breer_<%=cid%>.readLine()) != null) {
String errInfo_<%= cid %> = new String(line_err_<%=cid%>.getBytes(),"UTF-8");
System.err.println(errInfo_<%= cid %>);
stringStderr_<%=cid%>.append(line_err_<%=cid%> + "\n");
}
String stderrString_<%=cid %> = stringStderr_<%=cid %>.toString();
<%for (int i = 0;i<filelist.size();i++) {%>
<% if(dieOnError){
%>
if(stderrString_<%=cid %> != null && stderrString_<%=cid %>.length() > 0){
isCmdFailed_<%= cid %> = true;
}
if(isCmdFailed_<%= cid %>){
throw new RuntimeException(errMsg_<%= cid %>.toString());
}
<%
}
%>
<%for (int i = 0;i<filelist.size();i++) {%>
if(stderrString_<%=cid %>.contains(<%=filelist.get(i).get("SOURCE")%>)){
nb_file_<%=cid %> --;
}
@@ -67,11 +91,13 @@ imports="
breer_<%=cid%>.close();
stderr_<%=cid%>.close();
/* Close this session */
sess_<%=cid%>.close();
if(("").equals(stringStderr_<%=cid %>.toString()) || (stringStderr_<%=cid %>.toString() == null)){
if("".equals(stderrString_<%=cid %>) || (stderrString_<%=cid %> == null)){
globalMap.put("<%=cid %>_STATUS","File(s) deleted OK");
}else{
globalMap.put("<%=cid %>_STATUS",stringStderr_<%=cid %>.toString());
}
}else{
globalMap.put("<%=cid %>_STATUS","No file to be deleted.");
}
sessNew_<%=cid%>.close();

View File

@@ -28,3 +28,5 @@ USE_EXISTING_CONNECTION.NAME=Use an existing connection
STATUS.NAME=status
NB_FILE.NAME=Number of files
DIE_ON_ERROR.NAME=Die on error

View File

@@ -246,8 +246,8 @@
<extension
point="org.talend.core.runtime.service">
<Service
serviceId="IRepositoryService"
class="org.talend.repository.RepositoryService"/>
serviceId="IRepositoryService"
class="org.talend.repository.RepositoryService"/>
<Service
class="org.talend.repository.StatusPreferenceInitService"
serviceId="IStatusPreferenceInitService">
@@ -862,13 +862,13 @@
id="org.talend.repository.model.migration.renameMultiSchemaToMSMigrationTask"
name="Rename the XMLMultiSchema to MSXML">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeExtendInsertDefaultValueMigrationTask"
description="change the tMysqlOutput'extend insert default value&quot;&quot; from &quot;false&quot; to &quot;true&quot;"
id="org.talend.repository.model.migration.ChangeExtendInsertDefaultValueMigrationTask"
name="ChangeExtendInsertDefaultValueMigrationTask">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeExtendInsertDefaultValueMigrationTask"
description="change the tMysqlOutput'extend insert default value&quot;&quot; from &quot;false&quot; to &quot;true&quot;"
id="org.talend.repository.model.migration.ChangeExtendInsertDefaultValueMigrationTask"
name="ChangeExtendInsertDefaultValueMigrationTask">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.RenametFSUniq"
@@ -1158,14 +1158,14 @@
id="org.talend.repository.model.migration.UpgrateDatabaseTypeForSybaseConnection"
name="UpgrateDatabaseTypeForSybaseConnection">
</projecttask>
<projecttask
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.RenameModeParaForPigMigrationTask"
description="Rename pig mode parameter for bug TDI-13406 "
id="org.talend.repository.model.migration.RenameModeParaForPigMigrationTask"
name="Rename pig mode parameter">
</projecttask>
<projecttask
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.SetStandaloneModeForHiveComponentsMigrationTask"
description="Set the standalone value for the connection mode for old jobs for feature TDI-20301 "
@@ -1185,7 +1185,7 @@
description="Rename pig mode parameter for bug TDI-20076 "
id="org.talend.repository.model.migration.RenameVersionParametersForPigMigrationTask"
name="Rename pig parameters">
</projecttask>
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.RenamePasswordParaForLdapMigrationTask"
@@ -1296,37 +1296,37 @@
id="org.talend.repository.model.migration.AddCopyBookXc2jFileMigrationTask"
name="AddCopyBookXc2jFileMigrationTask">
</projecttask>
<projecttask
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.AddAdditionalFieldMigrationTask"
id="org.talend.repository.model.migration.AddAdditionalFieldMigrationTask"
name="Add additionalField to the job model">
</projecttask>
<projecttask
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.SetFilterTiemFromTotoFromPOPComponentsMigrationTask"
description="Set the value from 'To' to 'From' for FILTER_TIEM in ADVANCED_FILTER of the component tPOP in Bug TDI-21568"
id="org.talend.repository.model.migration.SetFilterTiemFromTotoFromPOPComponentsMigrationTask"
name="SetFilterTiemFromTotoFromPOPComponentsMigrationTask">
</projecttask>
<projecttask
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeDefaultValueTDIBug21708"
id="org.talend.repository.model.migration.ChangeDefaultValueTDIBug21708"
name="ChangeDefaultValueTDIBug21708">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeOptionDefaultValueFortNormalize"
id="org.talend.repository.model.migration.ChangeOptionDefaultValueFortNormalize"
name="ChangeOptionDefaultValueFortNormalize">
</projecttask>
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeOptionDefaultValueFortNormalize"
id="org.talend.repository.model.migration.ChangeOptionDefaultValueFortNormalize"
name="ChangeOptionDefaultValueFortNormalize">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeDefaultValueFortNormalizeCSVOption"
id="org.talend.repository.model.migration.ChangeDefaultValueFortNormalizeCSVOption"
name="ChangeDefaultValueFortNormalizeCSVOption">
</projecttask>
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeDefaultValueFortNormalizeCSVOption"
id="org.talend.repository.model.migration.ChangeDefaultValueFortNormalizeCSVOption"
name="ChangeDefaultValueFortNormalizeCSVOption">
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.ChangeMysqlJarReference4MysqlComponents"
@@ -1334,7 +1334,7 @@
id="org.talend.repository.model.migration.ChangeMysqlJarReference4MysqlComponents"
name="ChangeMysqlJarReference4MysqlComponents">
</projecttask>
<projecttask
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.RenametStandardizePhoneNumberColumnName"
description="Rename the schema column &quot;IsPossiblePhoneNumber &quot; to &quot;IsPossiblePhoneNumber&quot;"
@@ -1356,6 +1356,13 @@
name="UpdateJobSettingsForMysqlMigrationTask"
>
</projecttask>
<projecttask
beforeLogon="false"
class="org.talend.repository.model.migration.SetDieOnErrorFalse4tSCPDelete"
description="set old tSCPDelete die on error as fasle"
id="org.talend.repository.model.migration.SetDieOnErrorFalse4tSCPDelete"
name="SetDieOnErrorFalse4tSCPDelete">
</projecttask>
</extension>
<extension
@@ -1390,7 +1397,7 @@
message="%libraryneeded.fororacleconnection"
name="ojdbc5-11g.jar"
required="false"/>
<libraryNeeded
<libraryNeeded
context="%libraryneeded.dbconnectionwizard"
language="java"
message="%libraryneeded.forparaccelconnection"

View File

@@ -0,0 +1,47 @@
package org.talend.repository.model.migration;
import java.util.Arrays;
import java.util.Date;
import java.util.GregorianCalendar;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.core.model.components.ComponentUtilities;
import org.talend.core.model.components.ModifyComponentsAction;
import org.talend.core.model.components.conversions.IComponentConversion;
import org.talend.core.model.components.filters.IComponentFilter;
import org.talend.core.model.components.filters.NameComponentFilter;
import org.talend.core.model.migration.AbstractJobMigrationTask;
import org.talend.core.model.properties.Item;
import org.talend.designer.core.model.utils.emf.talendfile.NodeType;
import org.talend.designer.core.model.utils.emf.talendfile.ProcessType;
public class SetDieOnErrorFalse4tSCPDelete extends AbstractJobMigrationTask {
public Date getOrder() {
return new GregorianCalendar(2014, 12, 04, 14, 0, 0).getTime();
}
@Override
public ExecutionResult execute(Item item) {
ProcessType processType = getProcessType(item);
if (processType == null) {
return ExecutionResult.NOTHING_TO_DO;
}
IComponentFilter filter = new NameComponentFilter("tSCPDelete");
try {
ModifyComponentsAction.searchAndModify(item, processType, filter,
Arrays.<IComponentConversion> asList(new IComponentConversion() {
public void transform(NodeType node) {
if (ComponentUtilities.getNodeProperty(node, "DIE_ON_ERROR") == null) {
ComponentUtilities.addNodeProperty(node, "DIE_ON_ERROR", "CHECK");
}
ComponentUtilities.getNodeProperty(node, "DIE_ON_ERROR").setValue("false");
}
}));
} catch (Exception e) {
ExceptionHandler.process(e);
return ExecutionResult.FAILURE;
}
return ExecutionResult.SUCCESS_NO_ALERT;
}
}