@@ -22,6 +22,7 @@ import java.io.IOException; | |||||
import com.sun.org.apache.bcel.internal.classfile.ClassParser; | import com.sun.org.apache.bcel.internal.classfile.ClassParser; | ||||
import com.sun.org.apache.bcel.internal.classfile.ConstantValue; | import com.sun.org.apache.bcel.internal.classfile.ConstantValue; | ||||
import com.sun.org.apache.bcel.internal.classfile.Field; | |||||
import com.sun.org.apache.bcel.internal.classfile.JavaClass; | import com.sun.org.apache.bcel.internal.classfile.JavaClass; | ||||
// CheckStyle:HideUtilityClassConstructorCheck OFF - bc | // CheckStyle:HideUtilityClassConstructorCheck OFF - bc | ||||
@@ -40,7 +41,7 @@ public final class JavaClassHelper { | |||||
* @return a StringBuffer contains the name=value pairs | * @return a StringBuffer contains the name=value pairs | ||||
* @exception IOException if an error occurs | * @exception IOException if an error occurs | ||||
*/ | */ | ||||
public static StringBuffer getConstants(byte[] bytes) | |||||
public static StringBuffer getConstants(final byte[] bytes) | |||||
throws IOException { | throws IOException { | ||||
final StringBuffer sb = new StringBuffer(); | final StringBuffer sb = new StringBuffer(); | ||||
final ByteArrayInputStream bis = new ByteArrayInputStream(bytes); | final ByteArrayInputStream bis = new ByteArrayInputStream(bytes); | ||||
@@ -20,6 +20,7 @@ package org.apache.tools.ant.listener; | |||||
import java.io.PrintStream; | import java.io.PrintStream; | ||||
import org.apache.commons.logging.Log; | |||||
import org.apache.commons.logging.LogConfigurationException; | import org.apache.commons.logging.LogConfigurationException; | ||||
import org.apache.commons.logging.LogFactory; | import org.apache.commons.logging.LogFactory; | ||||
import org.apache.tools.ant.BuildEvent; | import org.apache.tools.ant.BuildEvent; | ||||
@@ -29,7 +30,6 @@ import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
import org.apache.tools.ant.UnknownElement; | import org.apache.tools.ant.UnknownElement; | ||||
import sun.rmi.runtime.Log; | |||||
/** | /** | ||||
* Jakarta Commons Logging listener. | * Jakarta Commons Logging listener. | ||||
@@ -80,31 +80,31 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
suffix = suffix.replace(' ', '-'); | suffix = suffix.replace(' ', '-'); | ||||
cat = cat + "." + suffix; | cat = cat + "." + suffix; | ||||
} | } | ||||
PrintStream tmpOut = System.out; | |||||
PrintStream tmpErr = System.err; | |||||
final PrintStream tmpOut = System.out; | |||||
final PrintStream tmpErr = System.err; | |||||
System.setOut(out); | System.setOut(out); | ||||
System.setErr(err); | System.setErr(err); | ||||
if (!initialized) { | if (!initialized) { | ||||
try { | try { | ||||
logFactory = LogFactory.getFactory(); | logFactory = LogFactory.getFactory(); | ||||
} catch (LogConfigurationException e) { | |||||
} catch (final LogConfigurationException e) { | |||||
e.printStackTrace(System.err); | e.printStackTrace(System.err); | ||||
return null; | return null; | ||||
} | } | ||||
} | } | ||||
initialized = true; | initialized = true; | ||||
Log log = logFactory.getInstance(cat); | |||||
final Log log = logFactory.getInstance(cat); | |||||
System.setOut(tmpOut); | System.setOut(tmpOut); | ||||
System.setErr(tmpErr); | System.setErr(tmpErr); | ||||
return log; | return log; | ||||
} | } | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void buildStarted(BuildEvent event) { | |||||
String categoryString = PROJECT_LOG; | |||||
Log log = getLog(categoryString, null); | |||||
public void buildStarted(final BuildEvent event) { | |||||
final String categoryString = PROJECT_LOG; | |||||
final Log log = getLog(categoryString, null); | |||||
if (initialized) { | if (initialized) { | ||||
realLog(log, "Build started.", Project.MSG_INFO, null); | realLog(log, "Build started.", Project.MSG_INFO, null); | ||||
@@ -112,10 +112,10 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
} | } | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void buildFinished(BuildEvent event) { | |||||
public void buildFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
String categoryString = PROJECT_LOG; | |||||
Log log = getLog(categoryString, event.getProject().getName()); | |||||
final String categoryString = PROJECT_LOG; | |||||
final Log log = getLog(categoryString, event.getProject().getName()); | |||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
realLog(log, "Build finished.", Project.MSG_INFO, null); | realLog(log, "Build finished.", Project.MSG_INFO, null); | ||||
@@ -130,9 +130,9 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* @see BuildListener#targetStarted | * @see BuildListener#targetStarted | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void targetStarted(BuildEvent event) { | |||||
public void targetStarted(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Log log = getLog(TARGET_LOG, | |||||
final Log log = getLog(TARGET_LOG, | |||||
event.getTarget().getName()); | event.getTarget().getName()); | ||||
// Since task log category includes target, we don't really | // Since task log category includes target, we don't really | ||||
// need this message | // need this message | ||||
@@ -145,10 +145,10 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* @see BuildListener#targetFinished | * @see BuildListener#targetFinished | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void targetFinished(BuildEvent event) { | |||||
public void targetFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
String targetName = event.getTarget().getName(); | |||||
Log log = getLog(TARGET_LOG, | |||||
final String targetName = event.getTarget().getName(); | |||||
final Log log = getLog(TARGET_LOG, | |||||
event.getTarget().getName()); | event.getTarget().getName()); | ||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null); | realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null); | ||||
@@ -164,17 +164,17 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* @see BuildListener#taskStarted | * @see BuildListener#taskStarted | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void taskStarted(BuildEvent event) { | |||||
public void taskStarted(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Task task = event.getTask(); | |||||
final Task task = event.getTask(); | |||||
Object real = task; | Object real = task; | ||||
if (task instanceof UnknownElement) { | if (task instanceof UnknownElement) { | ||||
Object realObj = ((UnknownElement) task).getTask(); | |||||
final Object realObj = ((UnknownElement) task).getTask(); | |||||
if (realObj != null) { | if (realObj != null) { | ||||
real = realObj; | real = realObj; | ||||
} | } | ||||
} | } | ||||
Log log = getLog(real.getClass().getName(), null); | |||||
final Log log = getLog(real.getClass().getName(), null); | |||||
if (log.isTraceEnabled()) { | if (log.isTraceEnabled()) { | ||||
realLog(log, "Task \"" + task.getTaskName() + "\" started ", | realLog(log, "Task \"" + task.getTaskName() + "\" started ", | ||||
Project.MSG_VERBOSE, null); | Project.MSG_VERBOSE, null); | ||||
@@ -186,17 +186,17 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* @see BuildListener#taskFinished | * @see BuildListener#taskFinished | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void taskFinished(BuildEvent event) { | |||||
public void taskFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Task task = event.getTask(); | |||||
final Task task = event.getTask(); | |||||
Object real = task; | Object real = task; | ||||
if (task instanceof UnknownElement) { | if (task instanceof UnknownElement) { | ||||
Object realObj = ((UnknownElement) task).getTask(); | |||||
final Object realObj = ((UnknownElement) task).getTask(); | |||||
if (realObj != null) { | if (realObj != null) { | ||||
real = realObj; | real = realObj; | ||||
} | } | ||||
} | } | ||||
Log log = getLog(real.getClass().getName(), null); | |||||
final Log log = getLog(real.getClass().getName(), null); | |||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
if (log.isTraceEnabled()) { | if (log.isTraceEnabled()) { | ||||
realLog(log, "Task \"" + task.getTaskName() + "\" finished.", | realLog(log, "Task \"" + task.getTaskName() + "\" finished.", | ||||
@@ -215,7 +215,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* @see BuildListener#messageLogged | * @see BuildListener#messageLogged | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void messageLogged(BuildEvent event) { | |||||
public void messageLogged(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Object categoryObject = event.getTask(); | Object categoryObject = event.getTask(); | ||||
String categoryString = null; | String categoryString = null; | ||||
@@ -242,16 +242,16 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
} | } | ||||
Log log = getLog(categoryString, categoryDetail); | |||||
int priority = event.getPriority(); | |||||
String message = event.getMessage(); | |||||
final Log log = getLog(categoryString, categoryDetail); | |||||
final int priority = event.getPriority(); | |||||
final String message = event.getMessage(); | |||||
realLog(log, message, priority , null); | realLog(log, message, priority , null); | ||||
} | } | ||||
} | } | ||||
private void realLog(Log log, String message, int priority, Throwable t) { | |||||
PrintStream tmpOut = System.out; | |||||
PrintStream tmpErr = System.err; | |||||
private void realLog(final Log log, final String message, final int priority, final Throwable t) { | |||||
final PrintStream tmpOut = System.out; | |||||
final PrintStream tmpErr = System.err; | |||||
System.setOut(out); | System.setOut(out); | ||||
System.setErr(err); | System.setErr(err); | ||||
switch (priority) { | switch (priority) { | ||||
@@ -300,7 +300,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* This is not used, the logger config is used instead. | * This is not used, the logger config is used instead. | ||||
* @param level ignored | * @param level ignored | ||||
*/ | */ | ||||
public void setMessageOutputLevel(int level) { | |||||
public void setMessageOutputLevel(final int level) { | |||||
// Use the logger config | // Use the logger config | ||||
} | } | ||||
@@ -308,7 +308,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* Set the output print stream. | * Set the output print stream. | ||||
* @param output the output stream | * @param output the output stream | ||||
*/ | */ | ||||
public void setOutputPrintStream(PrintStream output) { | |||||
public void setOutputPrintStream(final PrintStream output) { | |||||
this.out = output; | this.out = output; | ||||
} | } | ||||
@@ -317,7 +317,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* This is ignored. | * This is ignored. | ||||
* @param emacsMode ignored | * @param emacsMode ignored | ||||
*/ | */ | ||||
public void setEmacsMode(boolean emacsMode) { | |||||
public void setEmacsMode(final boolean emacsMode) { | |||||
// Doesn't make sense for c-l. Use the logger config | // Doesn't make sense for c-l. Use the logger config | ||||
} | } | ||||
@@ -325,7 +325,7 @@ public class CommonsLoggingListener implements BuildListener, BuildLogger { | |||||
* Set the error print stream. | * Set the error print stream. | ||||
* @param err the error stream | * @param err the error stream | ||||
*/ | */ | ||||
public void setErrorPrintStream(PrintStream err) { | |||||
public void setErrorPrintStream(final PrintStream err) { | |||||
this.err = err; | this.err = err; | ||||
} | } | ||||
@@ -18,6 +18,7 @@ | |||||
package org.apache.tools.ant.listener; | package org.apache.tools.ant.listener; | ||||
import org.apache.log4j.Logger; | |||||
import org.apache.log4j.helpers.NullEnumeration; | import org.apache.log4j.helpers.NullEnumeration; | ||||
import org.apache.tools.ant.BuildEvent; | import org.apache.tools.ant.BuildEvent; | ||||
import org.apache.tools.ant.BuildListener; | import org.apache.tools.ant.BuildListener; | ||||
@@ -44,8 +45,8 @@ public class Log4jListener implements BuildListener { | |||||
* Construct the listener and make sure there is a valid appender. | * Construct the listener and make sure there is a valid appender. | ||||
*/ | */ | ||||
public Log4jListener() { | public Log4jListener() { | ||||
Logger log = Logger.getLogger(LOG_ANT); | |||||
Logger rootLog = Logger.getRootLogger(); | |||||
final Logger log = Logger.getLogger(LOG_ANT); | |||||
final Logger rootLog = Logger.getRootLogger(); | |||||
initialized = !(rootLog.getAllAppenders() instanceof NullEnumeration); | initialized = !(rootLog.getAllAppenders() instanceof NullEnumeration); | ||||
if (!initialized) { | if (!initialized) { | ||||
log.error("No log4j.properties in build area"); | log.error("No log4j.properties in build area"); | ||||
@@ -56,9 +57,9 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#buildStarted | * @see BuildListener#buildStarted | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void buildStarted(BuildEvent event) { | |||||
public void buildStarted(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Logger log = Logger.getLogger(Project.class.getName()); | |||||
final Logger log = Logger.getLogger(Project.class.getName()); | |||||
log.info("Build started."); | log.info("Build started."); | ||||
} | } | ||||
} | } | ||||
@@ -67,9 +68,9 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#buildFinished | * @see BuildListener#buildFinished | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void buildFinished(BuildEvent event) { | |||||
public void buildFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Logger log = Logger.getLogger(Project.class.getName()); | |||||
final Logger log = Logger.getLogger(Project.class.getName()); | |||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
log.info("Build finished."); | log.info("Build finished."); | ||||
} else { | } else { | ||||
@@ -82,9 +83,9 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#targetStarted | * @see BuildListener#targetStarted | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void targetStarted(BuildEvent event) { | |||||
public void targetStarted(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Logger log = Logger.getLogger(Target.class.getName()); | |||||
final Logger log = Logger.getLogger(Target.class.getName()); | |||||
log.info("Target \"" + event.getTarget().getName() + "\" started."); | log.info("Target \"" + event.getTarget().getName() + "\" started."); | ||||
} | } | ||||
} | } | ||||
@@ -93,10 +94,10 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#targetFinished | * @see BuildListener#targetFinished | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void targetFinished(BuildEvent event) { | |||||
public void targetFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
String targetName = event.getTarget().getName(); | |||||
Logger cat = Logger.getLogger(Target.class.getName()); | |||||
final String targetName = event.getTarget().getName(); | |||||
final Logger cat = Logger.getLogger(Target.class.getName()); | |||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
cat.info("Target \"" + targetName + "\" finished."); | cat.info("Target \"" + targetName + "\" finished."); | ||||
} else { | } else { | ||||
@@ -110,10 +111,10 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#taskStarted | * @see BuildListener#taskStarted | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void taskStarted(BuildEvent event) { | |||||
public void taskStarted(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Task task = event.getTask(); | |||||
Logger log = Logger.getLogger(task.getClass().getName()); | |||||
final Task task = event.getTask(); | |||||
final Logger log = Logger.getLogger(task.getClass().getName()); | |||||
log.info("Task \"" + task.getTaskName() + "\" started."); | log.info("Task \"" + task.getTaskName() + "\" started."); | ||||
} | } | ||||
} | } | ||||
@@ -122,10 +123,10 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#taskFinished | * @see BuildListener#taskFinished | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void taskFinished(BuildEvent event) { | |||||
public void taskFinished(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Task task = event.getTask(); | |||||
Logger log = Logger.getLogger(task.getClass().getName()); | |||||
final Task task = event.getTask(); | |||||
final Logger log = Logger.getLogger(task.getClass().getName()); | |||||
if (event.getException() == null) { | if (event.getException() == null) { | ||||
log.info("Task \"" + task.getTaskName() + "\" finished."); | log.info("Task \"" + task.getTaskName() + "\" finished."); | ||||
} else { | } else { | ||||
@@ -139,7 +140,7 @@ public class Log4jListener implements BuildListener { | |||||
* @see BuildListener#messageLogged | * @see BuildListener#messageLogged | ||||
*/ | */ | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void messageLogged(BuildEvent event) { | |||||
public void messageLogged(final BuildEvent event) { | |||||
if (initialized) { | if (initialized) { | ||||
Object categoryObject = event.getTask(); | Object categoryObject = event.getTask(); | ||||
if (categoryObject == null) { | if (categoryObject == null) { | ||||
@@ -149,7 +150,7 @@ public class Log4jListener implements BuildListener { | |||||
} | } | ||||
} | } | ||||
Logger log | |||||
final Logger log | |||||
= Logger.getLogger(categoryObject.getClass().getName()); | = Logger.getLogger(categoryObject.getClass().getName()); | ||||
switch (event.getPriority()) { | switch (event.getPriority()) { | ||||
case Project.MSG_ERR: | case Project.MSG_ERR: | ||||
@@ -25,7 +25,6 @@ import java.io.InputStream; | |||||
import java.io.OutputStream; | import java.io.OutputStream; | ||||
import java.io.PrintStream; | import java.io.PrintStream; | ||||
import java.io.UnsupportedEncodingException; | import java.io.UnsupportedEncodingException; | ||||
import java.net.PasswordAuthentication; | |||||
import java.security.Provider; | import java.security.Provider; | ||||
import java.security.Security; | import java.security.Security; | ||||
import java.util.Enumeration; | import java.util.Enumeration; | ||||
@@ -37,19 +36,23 @@ import java.util.Vector; | |||||
import javax.activation.DataHandler; | import javax.activation.DataHandler; | ||||
import javax.activation.FileDataSource; | import javax.activation.FileDataSource; | ||||
import javax.mail.Address; | |||||
import javax.mail.Authenticator; | |||||
import javax.mail.Message; | |||||
import javax.mail.MessagingException; | |||||
import javax.mail.PasswordAuthentication; | |||||
import javax.mail.SendFailedException; | import javax.mail.SendFailedException; | ||||
import javax.mail.Session; | |||||
import javax.mail.Transport; | |||||
import javax.mail.internet.AddressException; | import javax.mail.internet.AddressException; | ||||
import javax.mail.internet.InternetAddress; | import javax.mail.internet.InternetAddress; | ||||
import javax.mail.internet.MimeBodyPart; | |||||
import javax.mail.internet.MimeMessage; | import javax.mail.internet.MimeMessage; | ||||
import javax.mail.internet.MimeMultipart; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import sun.rmi.transport.Transport; | |||||
import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException; | |||||
import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeBodyPart; | |||||
import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeMultipart; | |||||
/** | /** | ||||
* Uses the JavaMail classes to send Mime format email. | * Uses the JavaMail classes to send Mime format email. | ||||
@@ -83,7 +86,7 @@ public class MimeMailer extends Mailer { | |||||
throw new IOException("No data"); | throw new IOException("No data"); | ||||
} | } | ||||
if (out != null) { | if (out != null) { | ||||
String encodedOut = out.toString(charset); | |||||
final String encodedOut = out.toString(charset); | |||||
data = (data != null) ? data.concat(encodedOut) : encodedOut; | data = (data != null) ? data.concat(encodedOut) : encodedOut; | ||||
out = null; | out = null; | ||||
} | } | ||||
@@ -95,7 +98,7 @@ public class MimeMailer extends Mailer { | |||||
return out; | return out; | ||||
} | } | ||||
public void setContentType(String type) { | |||||
public void setContentType(final String type) { | |||||
this.type = type.toLowerCase(Locale.ENGLISH); | this.type = type.toLowerCase(Locale.ENGLISH); | ||||
} | } | ||||
@@ -113,7 +116,7 @@ public class MimeMailer extends Mailer { | |||||
return "StringDataSource"; | return "StringDataSource"; | ||||
} | } | ||||
public void setCharset(String charset) { | |||||
public void setCharset(final String charset) { | |||||
this.charset = charset; | this.charset = charset; | ||||
} | } | ||||
@@ -129,7 +132,7 @@ public class MimeMailer extends Mailer { | |||||
*/ | */ | ||||
public void send() { | public void send() { | ||||
try { | try { | ||||
Properties props = new Properties(); | |||||
final Properties props = new Properties(); | |||||
props.put("mail.smtp.host", host); | props.put("mail.smtp.host", host); | ||||
props.put("mail.smtp.port", String.valueOf(port)); | props.put("mail.smtp.port", String.valueOf(port)); | ||||
@@ -141,10 +144,10 @@ public class MimeMailer extends Mailer { | |||||
Authenticator auth = null; | Authenticator auth = null; | ||||
if (SSL) { | if (SSL) { | ||||
try { | try { | ||||
Provider p = (Provider) Class.forName( | |||||
final Provider p = (Provider) Class.forName( | |||||
"com.sun.net.ssl.internal.ssl.Provider").newInstance(); | "com.sun.net.ssl.internal.ssl.Provider").newInstance(); | ||||
Security.addProvider(p); | Security.addProvider(p); | ||||
} catch (Exception e) { | |||||
} catch (final Exception e) { | |||||
throw new BuildException("could not instantiate ssl " | throw new BuildException("could not instantiate ssl " | ||||
+ "security provider, check that you have JSSE in " | + "security provider, check that you have JSSE in " | ||||
+ "your classpath"); | + "your classpath"); | ||||
@@ -169,8 +172,8 @@ public class MimeMailer extends Mailer { | |||||
sesh = Session.getInstance(props, auth); | sesh = Session.getInstance(props, auth); | ||||
//create the message | //create the message | ||||
MimeMessage msg = new MimeMessage(sesh); | |||||
MimeMultipart attachments = new MimeMultipart(); | |||||
final MimeMessage msg = new MimeMessage(sesh); | |||||
final MimeMultipart attachments = new MimeMultipart(); | |||||
//set the sender | //set the sender | ||||
if (from.getName() == null) { | if (from.getName() == null) { | ||||
@@ -204,7 +207,7 @@ public class MimeMailer extends Mailer { | |||||
} | } | ||||
} | } | ||||
// Using javax.activation.DataSource paradigm | // Using javax.activation.DataSource paradigm | ||||
StringDataSource sds = new StringDataSource(); | |||||
final StringDataSource sds = new StringDataSource(); | |||||
sds.setContentType(message.getMimeType()); | sds.setContentType(message.getMimeType()); | ||||
sds.setCharset(charset); | sds.setCharset(charset); | ||||
@@ -214,23 +217,23 @@ public class MimeMailer extends Mailer { | |||||
msg.addHeader("Date", getDate()); | msg.addHeader("Date", getDate()); | ||||
if (headers != null) { | if (headers != null) { | ||||
for (Iterator iter = headers.iterator(); iter.hasNext();) { | |||||
Header h = (Header) iter.next(); | |||||
for (final Iterator iter = headers.iterator(); iter.hasNext();) { | |||||
final Header h = (Header) iter.next(); | |||||
msg.addHeader(h.getName(), h.getValue()); | msg.addHeader(h.getName(), h.getValue()); | ||||
} | } | ||||
} | } | ||||
PrintStream out = new PrintStream(sds.getOutputStream()); | |||||
final PrintStream out = new PrintStream(sds.getOutputStream()); | |||||
message.print(out); | message.print(out); | ||||
out.close(); | out.close(); | ||||
MimeBodyPart textbody = new MimeBodyPart(); | |||||
final MimeBodyPart textbody = new MimeBodyPart(); | |||||
textbody.setDataHandler(new DataHandler(sds)); | textbody.setDataHandler(new DataHandler(sds)); | ||||
attachments.addBodyPart(textbody); | attachments.addBodyPart(textbody); | ||||
Enumeration e = files.elements(); | |||||
final Enumeration e = files.elements(); | |||||
while (e.hasMoreElements()) { | while (e.hasMoreElements()) { | ||||
File file = (File) e.nextElement(); | |||||
final File file = (File) e.nextElement(); | |||||
MimeBodyPart body; | MimeBodyPart body; | ||||
@@ -240,8 +243,8 @@ public class MimeMailer extends Mailer { | |||||
+ "\" does not exist or is not " | + "\" does not exist or is not " | ||||
+ "readable."); | + "readable."); | ||||
} | } | ||||
FileDataSource fileData = new FileDataSource(file); | |||||
DataHandler fileDataHandler = new DataHandler(fileData); | |||||
final FileDataSource fileData = new FileDataSource(file); | |||||
final DataHandler fileDataHandler = new DataHandler(fileData); | |||||
body.setDataHandler(fileDataHandler); | body.setDataHandler(fileDataHandler); | ||||
body.setFileName(file.getName()); | body.setFileName(file.getName()); | ||||
@@ -250,10 +253,10 @@ public class MimeMailer extends Mailer { | |||||
msg.setContent(attachments); | msg.setContent(attachments); | ||||
try { | try { | ||||
// Send the message using SMTP, or SMTPS if the host uses SSL | // Send the message using SMTP, or SMTPS if the host uses SSL | ||||
Transport transport = sesh.getTransport(SSL ? "smtps" : "smtp"); | |||||
final Transport transport = sesh.getTransport(SSL ? "smtps" : "smtp"); | |||||
transport.connect(host, user, password); | transport.connect(host, user, password); | ||||
transport.sendMessage(msg, msg.getAllRecipients()); | transport.sendMessage(msg, msg.getAllRecipients()); | ||||
} catch (SendFailedException sfe) { | |||||
} catch (final SendFailedException sfe) { | |||||
if (!shouldIgnoreInvalidRecipients()) { | if (!shouldIgnoreInvalidRecipients()) { | ||||
throw new BuildException(GENERIC_ERROR, sfe); | throw new BuildException(GENERIC_ERROR, sfe); | ||||
} else if (sfe.getValidSentAddresses() == null | } else if (sfe.getValidSentAddresses() == null | ||||
@@ -277,22 +280,22 @@ public class MimeMailer extends Mailer { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} catch (MessagingException e) { | |||||
} catch (final MessagingException e) { | |||||
throw new BuildException(GENERIC_ERROR, e); | throw new BuildException(GENERIC_ERROR, e); | ||||
} catch (IOException e) { | |||||
} catch (final IOException e) { | |||||
throw new BuildException(GENERIC_ERROR, e); | throw new BuildException(GENERIC_ERROR, e); | ||||
} | } | ||||
} | } | ||||
private static InternetAddress[] internetAddresses(Vector list) | |||||
private static InternetAddress[] internetAddresses(final Vector list) | |||||
throws AddressException, UnsupportedEncodingException { | throws AddressException, UnsupportedEncodingException { | ||||
final int size = list.size(); | final int size = list.size(); | ||||
InternetAddress[] addrs = new InternetAddress[size]; | |||||
final InternetAddress[] addrs = new InternetAddress[size]; | |||||
for (int i = 0; i < size; ++i) { | for (int i = 0; i < size; ++i) { | ||||
EmailAddress addr = (EmailAddress) list.elementAt(i); | |||||
final EmailAddress addr = (EmailAddress) list.elementAt(i); | |||||
String name = addr.getName(); | |||||
final String name = addr.getName(); | |||||
addrs[i] = (name == null) | addrs[i] = (name == null) | ||||
? new InternetAddress(addr.getAddress()) | ? new InternetAddress(addr.getAddress()) | ||||
: new InternetAddress(addr.getAddress(), name); | : new InternetAddress(addr.getAddress(), name); | ||||
@@ -300,23 +303,23 @@ public class MimeMailer extends Mailer { | |||||
return addrs; | return addrs; | ||||
} | } | ||||
private String parseCharSetFromMimeType(String type) { | |||||
private String parseCharSetFromMimeType(final String type) { | |||||
if (type == null) { | if (type == null) { | ||||
return null; | return null; | ||||
} | } | ||||
int pos = type.indexOf("charset"); | |||||
final int pos = type.indexOf("charset"); | |||||
if (pos < 0) { | if (pos < 0) { | ||||
return null; | return null; | ||||
} | } | ||||
// Assuming mime type in form "text/XXXX; charset=XXXXXX" | // Assuming mime type in form "text/XXXX; charset=XXXXXX" | ||||
StringTokenizer token = new StringTokenizer(type.substring(pos), "=; "); | |||||
final StringTokenizer token = new StringTokenizer(type.substring(pos), "=; "); | |||||
token.nextToken(); // Skip 'charset=' | token.nextToken(); // Skip 'charset=' | ||||
return token.nextToken(); | return token.nextToken(); | ||||
} | } | ||||
private void didntReach(Address addr, String category, | |||||
MessagingException ex) { | |||||
String msg = "Failed to send mail to " + category + " address " | |||||
private void didntReach(final Address addr, final String category, | |||||
final MessagingException ex) { | |||||
final String msg = "Failed to send mail to " + category + " address " | |||||
+ addr + " because of " + ex.getMessage(); | + addr + " because of " + ex.getMessage(); | ||||
if (task != null) { | if (task != null) { | ||||
task.log(msg, Project.MSG_WARN); | task.log(msg, Project.MSG_WARN); | ||||
@@ -328,12 +331,11 @@ public class MimeMailer extends Mailer { | |||||
static class SimpleAuthenticator extends Authenticator { | static class SimpleAuthenticator extends Authenticator { | ||||
private String user = null; | private String user = null; | ||||
private String password = null; | private String password = null; | ||||
public SimpleAuthenticator(String user, String password) { | |||||
public SimpleAuthenticator(final String user, final String password) { | |||||
this.user = user; | this.user = user; | ||||
this.password = password; | this.password = password; | ||||
} | } | ||||
public PasswordAuthentication getPasswordAuthentication() { | public PasswordAuthentication getPasswordAuthentication() { | ||||
return new PasswordAuthentication(user, password); | return new PasswordAuthentication(user, password); | ||||
} | } | ||||
} | } | ||||
@@ -26,8 +26,8 @@ import javax.xml.transform.Transformer; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.taskdefs.XSLTProcess; | import org.apache.tools.ant.taskdefs.XSLTProcess; | ||||
import org.apache.xalan.trace.PrintTraceListener; | import org.apache.xalan.trace.PrintTraceListener; | ||||
import org.apache.xalan.transformer.TransformerImpl; | |||||
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl; | |||||
/** | /** | ||||
* Sets up trace support for a given transformer. | * Sets up trace support for a given transformer. | ||||
@@ -35,11 +35,11 @@ import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl; | |||||
* @since Ant 1.8.0 | * @since Ant 1.8.0 | ||||
*/ | */ | ||||
public class Xalan2TraceSupport implements XSLTTraceSupport { | public class Xalan2TraceSupport implements XSLTTraceSupport { | ||||
public void configureTrace(Transformer t, | |||||
XSLTProcess.TraceConfiguration conf) { | |||||
public void configureTrace(final Transformer t, | |||||
final XSLTProcess.TraceConfiguration conf) { | |||||
if (t instanceof TransformerImpl && conf != null) { | if (t instanceof TransformerImpl && conf != null) { | ||||
PrintWriter w = new PrintWriter(conf.getOutputStream(), false); | |||||
PrintTraceListener tl = new PrintTraceListener(w); | |||||
final PrintWriter w = new PrintWriter(conf.getOutputStream(), false); | |||||
final PrintTraceListener tl = new PrintTraceListener(w); | |||||
tl.m_traceElements = conf.getElements(); | tl.m_traceElements = conf.getElements(); | ||||
tl.m_traceExtension = conf.getExtension(); | tl.m_traceExtension = conf.getExtension(); | ||||
tl.m_traceGeneration = conf.getGeneration(); | tl.m_traceGeneration = conf.getGeneration(); | ||||
@@ -47,7 +47,7 @@ public class Xalan2TraceSupport implements XSLTTraceSupport { | |||||
tl.m_traceTemplates = conf.getTemplates(); | tl.m_traceTemplates = conf.getTemplates(); | ||||
try { | try { | ||||
((TransformerImpl) t).getTraceManager().addTraceListener(tl); | ((TransformerImpl) t).getTraceManager().addTraceListener(tl); | ||||
} catch (TooManyListenersException tml) { | |||||
} catch (final TooManyListenersException tml) { | |||||
throw new BuildException(tml); | throw new BuildException(tml); | ||||
} | } | ||||
} | } | ||||
@@ -61,7 +61,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
private static DocumentBuilder getDocumentBuilder() { | private static DocumentBuilder getDocumentBuilder() { | ||||
try { | try { | ||||
return DocumentBuilderFactory.newInstance().newDocumentBuilder(); | return DocumentBuilderFactory.newInstance().newDocumentBuilder(); | ||||
} catch (Exception exc) { | |||||
} catch (final Exception exc) { | |||||
throw new ExceptionInInitializerError(exc); | throw new ExceptionInInitializerError(exc); | ||||
} | } | ||||
} | } | ||||
@@ -70,10 +70,12 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* The XML document. | * The XML document. | ||||
*/ | */ | ||||
private Document doc; | private Document doc; | ||||
/** | /** | ||||
* The wrapper for the whole testsuite. | * The wrapper for the whole testsuite. | ||||
*/ | */ | ||||
private Element rootElement; | private Element rootElement; | ||||
/** | /** | ||||
* Element for the current test. | * Element for the current test. | ||||
* | * | ||||
@@ -82,23 +84,25 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* so we can't easily match Test objects without manually iterating over all keys and checking | * so we can't easily match Test objects without manually iterating over all keys and checking | ||||
* individual fields. | * individual fields. | ||||
*/ | */ | ||||
private Hashtable<String, Element> testElements = new Hashtable<String, Element>(); | |||||
private final Hashtable<String, Element> testElements = new Hashtable<String, Element>(); | |||||
/** | /** | ||||
* tests that failed. | * tests that failed. | ||||
*/ | */ | ||||
private Hashtable failedTests = new Hashtable(); | |||||
private final Hashtable failedTests = new Hashtable(); | |||||
/** | /** | ||||
* Tests that were skipped. | * Tests that were skipped. | ||||
*/ | */ | ||||
private Hashtable<String, Test> skippedTests = new Hashtable<String, Test>(); | |||||
private final Hashtable<String, Test> skippedTests = new Hashtable<String, Test>(); | |||||
/** | /** | ||||
* Tests that were ignored. See the note above about the key being a bit of a hack. | * Tests that were ignored. See the note above about the key being a bit of a hack. | ||||
*/ | */ | ||||
private Hashtable<String, Test> ignoredTests = new Hashtable<String, Test>(); | |||||
private final Hashtable<String, Test> ignoredTests = new Hashtable<String, Test>(); | |||||
/** | /** | ||||
* Timing helper. | * Timing helper. | ||||
*/ | */ | ||||
private Hashtable<String, Long> testStarts = new Hashtable<String, Long>(); | |||||
private final Hashtable<String, Long> testStarts = new Hashtable<String, Long>(); | |||||
/** | /** | ||||
* Where to write the log to. | * Where to write the log to. | ||||
*/ | */ | ||||
@@ -109,17 +113,17 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
} | } | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void setOutput(OutputStream out) { | |||||
public void setOutput(final OutputStream out) { | |||||
this.out = out; | this.out = out; | ||||
} | } | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void setSystemOutput(String out) { | |||||
public void setSystemOutput(final String out) { | |||||
formatOutput(SYSTEM_OUT, out); | formatOutput(SYSTEM_OUT, out); | ||||
} | } | ||||
/** {@inheritDoc}. */ | /** {@inheritDoc}. */ | ||||
public void setSystemError(String out) { | |||||
public void setSystemError(final String out) { | |||||
formatOutput(SYSTEM_ERR, out); | formatOutput(SYSTEM_ERR, out); | ||||
} | } | ||||
@@ -127,10 +131,10 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* The whole testsuite started. | * The whole testsuite started. | ||||
* @param suite the testsuite. | * @param suite the testsuite. | ||||
*/ | */ | ||||
public void startTestSuite(JUnitTest suite) { | |||||
public void startTestSuite(final JUnitTest suite) { | |||||
doc = getDocumentBuilder().newDocument(); | doc = getDocumentBuilder().newDocument(); | ||||
rootElement = doc.createElement(TESTSUITE); | rootElement = doc.createElement(TESTSUITE); | ||||
String n = suite.getName(); | |||||
final String n = suite.getName(); | |||||
rootElement.setAttribute(ATTR_NAME, n == null ? UNKNOWN : n); | rootElement.setAttribute(ATTR_NAME, n == null ? UNKNOWN : n); | ||||
//add the timestamp | //add the timestamp | ||||
@@ -141,14 +145,14 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
rootElement.setAttribute(HOSTNAME, getHostname()); | rootElement.setAttribute(HOSTNAME, getHostname()); | ||||
// Output properties | // Output properties | ||||
Element propsElement = doc.createElement(PROPERTIES); | |||||
final Element propsElement = doc.createElement(PROPERTIES); | |||||
rootElement.appendChild(propsElement); | rootElement.appendChild(propsElement); | ||||
Properties props = suite.getProperties(); | |||||
final Properties props = suite.getProperties(); | |||||
if (props != null) { | if (props != null) { | ||||
Enumeration e = props.propertyNames(); | |||||
final Enumeration e = props.propertyNames(); | |||||
while (e.hasMoreElements()) { | while (e.hasMoreElements()) { | ||||
String name = (String) e.nextElement(); | |||||
Element propElement = doc.createElement(PROPERTY); | |||||
final String name = (String) e.nextElement(); | |||||
final Element propElement = doc.createElement(PROPERTY); | |||||
propElement.setAttribute(ATTR_NAME, name); | propElement.setAttribute(ATTR_NAME, name); | ||||
propElement.setAttribute(ATTR_VALUE, props.getProperty(name)); | propElement.setAttribute(ATTR_VALUE, props.getProperty(name)); | ||||
propsElement.appendChild(propElement); | propsElement.appendChild(propElement); | ||||
@@ -163,11 +167,11 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
private String getHostname() { | private String getHostname() { | ||||
String hostname = "localhost"; | String hostname = "localhost"; | ||||
try { | try { | ||||
InetAddress localHost = InetAddress.getLocalHost(); | |||||
final InetAddress localHost = InetAddress.getLocalHost(); | |||||
if (localHost != null) { | if (localHost != null) { | ||||
hostname = localHost.getHostName(); | hostname = localHost.getHostName(); | ||||
} | } | ||||
} catch (UnknownHostException e) { | |||||
} catch (final UnknownHostException e) { | |||||
// fall back to default 'localhost' | // fall back to default 'localhost' | ||||
} | } | ||||
return hostname; | return hostname; | ||||
@@ -178,7 +182,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* @param suite the testsuite. | * @param suite the testsuite. | ||||
* @throws BuildException on error. | * @throws BuildException on error. | ||||
*/ | */ | ||||
public void endTestSuite(JUnitTest suite) throws BuildException { | |||||
public void endTestSuite(final JUnitTest suite) throws BuildException { | |||||
rootElement.setAttribute(ATTR_TESTS, "" + suite.runCount()); | rootElement.setAttribute(ATTR_TESTS, "" + suite.runCount()); | ||||
rootElement.setAttribute(ATTR_FAILURES, "" + suite.failureCount()); | rootElement.setAttribute(ATTR_FAILURES, "" + suite.failureCount()); | ||||
rootElement.setAttribute(ATTR_ERRORS, "" + suite.errorCount()); | rootElement.setAttribute(ATTR_ERRORS, "" + suite.errorCount()); | ||||
@@ -191,13 +195,13 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
wri = new BufferedWriter(new OutputStreamWriter(out, "UTF8")); | wri = new BufferedWriter(new OutputStreamWriter(out, "UTF8")); | ||||
wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); | wri.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); | ||||
(new DOMElementWriter()).write(rootElement, wri, 0, " "); | (new DOMElementWriter()).write(rootElement, wri, 0, " "); | ||||
} catch (IOException exc) { | |||||
} catch (final IOException exc) { | |||||
throw new BuildException("Unable to write log file", exc); | throw new BuildException("Unable to write log file", exc); | ||||
} finally { | } finally { | ||||
if (wri != null) { | if (wri != null) { | ||||
try { | try { | ||||
wri.flush(); | wri.flush(); | ||||
} catch (IOException ex) { | |||||
} catch (final IOException ex) { | |||||
// ignore | // ignore | ||||
} | } | ||||
} | } | ||||
@@ -214,11 +218,11 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* <p>A new Test is started. | * <p>A new Test is started. | ||||
* @param t the test. | * @param t the test. | ||||
*/ | */ | ||||
public void startTest(Test t) { | |||||
public void startTest(final Test t) { | |||||
testStarts.put(createDescription(t), System.currentTimeMillis()); | testStarts.put(createDescription(t), System.currentTimeMillis()); | ||||
} | } | ||||
private static String createDescription(Test test) throws BuildException { | |||||
private static String createDescription(final Test test) throws BuildException { | |||||
return JUnitVersionHelper.getTestCaseName(test) + "(" + JUnitVersionHelper.getTestCaseClassName(test) + ")"; | return JUnitVersionHelper.getTestCaseName(test) + "(" + JUnitVersionHelper.getTestCaseClassName(test) + ")"; | ||||
} | } | ||||
@@ -228,8 +232,8 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* <p>A Test is finished. | * <p>A Test is finished. | ||||
* @param test the test. | * @param test the test. | ||||
*/ | */ | ||||
public void endTest(Test test) { | |||||
String testDescription = createDescription(test); | |||||
public void endTest(final Test test) { | |||||
final String testDescription = createDescription(test); | |||||
// Fix for bug #5637 - if a junit.extensions.TestSetup is | // Fix for bug #5637 - if a junit.extensions.TestSetup is | ||||
// used and throws an exception during setUp then startTest | // used and throws an exception during setUp then startTest | ||||
@@ -240,7 +244,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
Element currentTest; | Element currentTest; | ||||
if (!failedTests.containsKey(test) && !skippedTests.containsKey(testDescription) && !ignoredTests.containsKey(testDescription)) { | if (!failedTests.containsKey(test) && !skippedTests.containsKey(testDescription) && !ignoredTests.containsKey(testDescription)) { | ||||
currentTest = doc.createElement(TESTCASE); | currentTest = doc.createElement(TESTCASE); | ||||
String n = JUnitVersionHelper.getTestCaseName(test); | |||||
final String n = JUnitVersionHelper.getTestCaseName(test); | |||||
currentTest.setAttribute(ATTR_NAME, | currentTest.setAttribute(ATTR_NAME, | ||||
n == null ? UNKNOWN : n); | n == null ? UNKNOWN : n); | ||||
// a TestSuite can contain Tests from multiple classes, | // a TestSuite can contain Tests from multiple classes, | ||||
@@ -253,7 +257,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
currentTest = testElements.get(testDescription); | currentTest = testElements.get(testDescription); | ||||
} | } | ||||
Long l = testStarts.get(createDescription(test)); | |||||
final Long l = testStarts.get(createDescription(test)); | |||||
currentTest.setAttribute(ATTR_TIME, | currentTest.setAttribute(ATTR_TIME, | ||||
"" + ((System.currentTimeMillis() - l) / ONE_SECOND)); | "" + ((System.currentTimeMillis() - l) / ONE_SECOND)); | ||||
} | } | ||||
@@ -265,7 +269,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* @param test the test. | * @param test the test. | ||||
* @param t the exception. | * @param t the exception. | ||||
*/ | */ | ||||
public void addFailure(Test test, Throwable t) { | |||||
public void addFailure(final Test test, final Throwable t) { | |||||
formatError(FAILURE, test, t); | formatError(FAILURE, test, t); | ||||
} | } | ||||
@@ -276,7 +280,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* @param test the test. | * @param test the test. | ||||
* @param t the assertion. | * @param t the assertion. | ||||
*/ | */ | ||||
public void addFailure(Test test, AssertionFailedError t) { | |||||
public void addFailure(final Test test, final AssertionFailedError t) { | |||||
addFailure(test, (Throwable) t); | addFailure(test, (Throwable) t); | ||||
} | } | ||||
@@ -287,17 +291,17 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
* @param test the test. | * @param test the test. | ||||
* @param t the error. | * @param t the error. | ||||
*/ | */ | ||||
public void addError(Test test, Throwable t) { | |||||
public void addError(final Test test, final Throwable t) { | |||||
formatError(ERROR, test, t); | formatError(ERROR, test, t); | ||||
} | } | ||||
private void formatError(String type, Test test, Throwable t) { | |||||
private void formatError(final String type, final Test test, final Throwable t) { | |||||
if (test != null) { | if (test != null) { | ||||
endTest(test); | endTest(test); | ||||
failedTests.put(test, test); | failedTests.put(test, test); | ||||
} | } | ||||
Element nested = doc.createElement(type); | |||||
final Element nested = doc.createElement(type); | |||||
Element currentTest; | Element currentTest; | ||||
if (test != null) { | if (test != null) { | ||||
currentTest = testElements.get(createDescription(test)); | currentTest = testElements.get(createDescription(test)); | ||||
@@ -307,24 +311,24 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
currentTest.appendChild(nested); | currentTest.appendChild(nested); | ||||
String message = t.getMessage(); | |||||
final String message = t.getMessage(); | |||||
if (message != null && message.length() > 0) { | if (message != null && message.length() > 0) { | ||||
nested.setAttribute(ATTR_MESSAGE, t.getMessage()); | nested.setAttribute(ATTR_MESSAGE, t.getMessage()); | ||||
} | } | ||||
nested.setAttribute(ATTR_TYPE, t.getClass().getName()); | nested.setAttribute(ATTR_TYPE, t.getClass().getName()); | ||||
String strace = JUnitTestRunner.getFilteredTrace(t); | |||||
Text trace = doc.createTextNode(strace); | |||||
final String strace = JUnitTestRunner.getFilteredTrace(t); | |||||
final Text trace = doc.createTextNode(strace); | |||||
nested.appendChild(trace); | nested.appendChild(trace); | ||||
} | } | ||||
private void formatOutput(String type, String output) { | |||||
Element nested = doc.createElement(type); | |||||
private void formatOutput(final String type, final String output) { | |||||
final Element nested = doc.createElement(type); | |||||
rootElement.appendChild(nested); | rootElement.appendChild(nested); | ||||
nested.appendChild(doc.createCDATASection(output)); | nested.appendChild(doc.createCDATASection(output)); | ||||
} | } | ||||
public void testIgnored(Test test) { | |||||
public void testIgnored(final Test test) { | |||||
formatSkip(test, JUnitVersionHelper.getIgnoreMessage(test)); | formatSkip(test, JUnitVersionHelper.getIgnoreMessage(test)); | ||||
if (test != null) { | if (test != null) { | ||||
ignoredTests.put(createDescription(test), test); | ignoredTests.put(createDescription(test), test); | ||||
@@ -332,12 +336,12 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
} | } | ||||
public void formatSkip(Test test, String message) { | |||||
public void formatSkip(final Test test, final String message) { | |||||
if (test != null) { | if (test != null) { | ||||
endTest(test); | endTest(test); | ||||
} | } | ||||
Element nested = doc.createElement("skipped"); | |||||
final Element nested = doc.createElement("skipped"); | |||||
if (message != null) { | if (message != null) { | ||||
nested.setAttribute("message", message); | nested.setAttribute("message", message); | ||||
@@ -354,7 +358,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan | |||||
} | } | ||||
public void testAssumptionFailure(Test test, Throwable failure) { | |||||
public void testAssumptionFailure(final Test test, final Throwable failure) { | |||||
formatSkip(test, failure.getMessage()); | formatSkip(test, failure.getMessage()); | ||||
skippedTests.put(createDescription(test), test); | skippedTests.put(createDescription(test), test); | ||||
@@ -25,9 +25,11 @@ import java.text.NumberFormat; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import com.jcraft.jsch.Channel; | |||||
import com.jcraft.jsch.ChannelExec; | import com.jcraft.jsch.ChannelExec; | ||||
import com.jcraft.jsch.ChannelSftp; | import com.jcraft.jsch.ChannelSftp; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
import com.jcraft.jsch.SftpProgressMonitor; | import com.jcraft.jsch.SftpProgressMonitor; | ||||
/** | /** | ||||
@@ -36,10 +38,10 @@ import com.jcraft.jsch.SftpProgressMonitor; | |||||
public abstract class AbstractSshMessage { | public abstract class AbstractSshMessage { | ||||
private static final double ONE_SECOND = 1000.0; | private static final double ONE_SECOND = 1000.0; | ||||
private Session session; | |||||
private boolean verbose; | |||||
private final Session session; | |||||
private final boolean verbose; | |||||
private LogListener listener = new LogListener() { | private LogListener listener = new LogListener() { | ||||
public void log(String message) { | |||||
public void log(final String message) { | |||||
// do nothing; | // do nothing; | ||||
} | } | ||||
}; | }; | ||||
@@ -48,7 +50,7 @@ public abstract class AbstractSshMessage { | |||||
* Constructor for AbstractSshMessage | * Constructor for AbstractSshMessage | ||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
*/ | */ | ||||
public AbstractSshMessage(Session session) { | |||||
public AbstractSshMessage(final Session session) { | |||||
this(false, session); | this(false, session); | ||||
} | } | ||||
@@ -58,7 +60,7 @@ public abstract class AbstractSshMessage { | |||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public AbstractSshMessage(boolean verbose, Session session) { | |||||
public AbstractSshMessage(final boolean verbose, final Session session) { | |||||
this.verbose = verbose; | this.verbose = verbose; | ||||
this.session = session; | this.session = session; | ||||
} | } | ||||
@@ -69,8 +71,8 @@ public abstract class AbstractSshMessage { | |||||
* @return the channel | * @return the channel | ||||
* @throws JSchException on error | * @throws JSchException on error | ||||
*/ | */ | ||||
protected Channel openExecChannel(String command) throws JSchException { | |||||
ChannelExec channel = (ChannelExec) session.openChannel("exec"); | |||||
protected Channel openExecChannel(final String command) throws JSchException { | |||||
final ChannelExec channel = (ChannelExec) session.openChannel("exec"); | |||||
channel.setCommand(command); | channel.setCommand(command); | ||||
return channel; | return channel; | ||||
@@ -82,7 +84,7 @@ public abstract class AbstractSshMessage { | |||||
* @throws JSchException on error | * @throws JSchException on error | ||||
*/ | */ | ||||
protected ChannelSftp openSftpChannel() throws JSchException { | protected ChannelSftp openSftpChannel() throws JSchException { | ||||
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); | |||||
final ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); | |||||
return channel; | return channel; | ||||
} | } | ||||
@@ -92,8 +94,8 @@ public abstract class AbstractSshMessage { | |||||
* @param out the output stream to use | * @param out the output stream to use | ||||
* @throws IOException on error | * @throws IOException on error | ||||
*/ | */ | ||||
protected void sendAck(OutputStream out) throws IOException { | |||||
byte[] buf = new byte[1]; | |||||
protected void sendAck(final OutputStream out) throws IOException { | |||||
final byte[] buf = new byte[1]; | |||||
buf[0] = 0; | buf[0] = 0; | ||||
out.write(buf); | out.write(buf); | ||||
out.flush(); | out.flush(); | ||||
@@ -106,9 +108,9 @@ public abstract class AbstractSshMessage { | |||||
* @throws IOException on I/O error | * @throws IOException on I/O error | ||||
* @throws BuildException on other errors | * @throws BuildException on other errors | ||||
*/ | */ | ||||
protected void waitForAck(InputStream in) | |||||
protected void waitForAck(final InputStream in) | |||||
throws IOException, BuildException { | throws IOException, BuildException { | ||||
int b = in.read(); | |||||
final int b = in.read(); | |||||
// b may be 0 for success, | // b may be 0 for success, | ||||
// 1 for error, | // 1 for error, | ||||
@@ -118,7 +120,7 @@ public abstract class AbstractSshMessage { | |||||
// didn't receive any response | // didn't receive any response | ||||
throw new BuildException("No response from server"); | throw new BuildException("No response from server"); | ||||
} else if (b != 0) { | } else if (b != 0) { | ||||
StringBuffer sb = new StringBuffer(); | |||||
final StringBuffer sb = new StringBuffer(); | |||||
int c = in.read(); | int c = in.read(); | ||||
while (c > 0 && c != '\n') { | while (c > 0 && c != '\n') { | ||||
@@ -150,7 +152,7 @@ public abstract class AbstractSshMessage { | |||||
* Set a log listener. | * Set a log listener. | ||||
* @param aListener the log listener | * @param aListener the log listener | ||||
*/ | */ | ||||
public void setLogListener(LogListener aListener) { | |||||
public void setLogListener(final LogListener aListener) { | |||||
listener = aListener; | listener = aListener; | ||||
} | } | ||||
@@ -158,7 +160,7 @@ public abstract class AbstractSshMessage { | |||||
* Log a message to the log listener. | * Log a message to the log listener. | ||||
* @param message the message to log | * @param message the message to log | ||||
*/ | */ | ||||
protected void log(String message) { | |||||
protected void log(final String message) { | |||||
listener.log(message); | listener.log(message); | ||||
} | } | ||||
@@ -168,11 +170,11 @@ public abstract class AbstractSshMessage { | |||||
* @param timeEnded the finishing time | * @param timeEnded the finishing time | ||||
* @param totalLength the total length | * @param totalLength the total length | ||||
*/ | */ | ||||
protected void logStats(long timeStarted, | |||||
long timeEnded, | |||||
long totalLength) { | |||||
double duration = (timeEnded - timeStarted) / ONE_SECOND; | |||||
NumberFormat format = NumberFormat.getNumberInstance(); | |||||
protected void logStats(final long timeStarted, | |||||
final long timeEnded, | |||||
final long totalLength) { | |||||
final double duration = (timeEnded - timeStarted) / ONE_SECOND; | |||||
final NumberFormat format = NumberFormat.getNumberInstance(); | |||||
format.setMaximumFractionDigits(2); | format.setMaximumFractionDigits(2); | ||||
format.setMinimumFractionDigits(1); | format.setMinimumFractionDigits(1); | ||||
listener.log("File transfer time: " + format.format(duration) | listener.log("File transfer time: " + format.format(duration) | ||||
@@ -197,11 +199,11 @@ public abstract class AbstractSshMessage { | |||||
* @param percentTransmitted the current percent transmitted | * @param percentTransmitted the current percent transmitted | ||||
* @return the percent that the file is of the total | * @return the percent that the file is of the total | ||||
*/ | */ | ||||
protected final int trackProgress(long filesize, long totalLength, | |||||
int percentTransmitted) { | |||||
protected final int trackProgress(final long filesize, final long totalLength, | |||||
final int percentTransmitted) { | |||||
// CheckStyle:MagicNumber OFF | // CheckStyle:MagicNumber OFF | ||||
int percent = (int) Math.round(Math.floor((totalLength | |||||
final int percent = (int) Math.round(Math.floor((totalLength | |||||
/ (double) filesize) * 100)); | / (double) filesize) * 100)); | ||||
if (percent > percentTransmitted) { | if (percent > percentTransmitted) { | ||||
@@ -246,13 +248,13 @@ public abstract class AbstractSshMessage { | |||||
private long totalLength = 0; | private long totalLength = 0; | ||||
private int percentTransmitted = 0; | private int percentTransmitted = 0; | ||||
public void init(int op, String src, String dest, long max) { | |||||
public void init(final int op, final String src, final String dest, final long max) { | |||||
initFileSize = max; | initFileSize = max; | ||||
totalLength = 0; | totalLength = 0; | ||||
percentTransmitted = 0; | percentTransmitted = 0; | ||||
} | } | ||||
public boolean count(long len) { | |||||
public boolean count(final long len) { | |||||
totalLength += len; | totalLength += len; | ||||
percentTransmitted = trackProgress(initFileSize, | percentTransmitted = trackProgress(initFileSize, | ||||
totalLength, | totalLength, | ||||
@@ -24,6 +24,7 @@ import org.apache.tools.ant.Task; | |||||
import com.jcraft.jsch.JSch; | import com.jcraft.jsch.JSch; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
/** | /** | ||||
* Base class for Ant tasks using jsch. | * Base class for Ant tasks using jsch. | ||||
@@ -40,7 +41,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
private int port = SSH_PORT; | private int port = SSH_PORT; | ||||
private boolean failOnError = true; | private boolean failOnError = true; | ||||
private boolean verbose; | private boolean verbose; | ||||
private SSHUserInfo userInfo; | |||||
private final SSHUserInfo userInfo; | |||||
/** | /** | ||||
* Constructor for SSHBase. | * Constructor for SSHBase. | ||||
@@ -55,7 +56,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param host The new host value | * @param host The new host value | ||||
*/ | */ | ||||
public void setHost(String host) { | |||||
public void setHost(final String host) { | |||||
this.host = host; | this.host = host; | ||||
} | } | ||||
@@ -73,7 +74,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* @param failure if true throw a build exception when a failure occuries, | * @param failure if true throw a build exception when a failure occuries, | ||||
* otherwise just log the failure and continue | * otherwise just log the failure and continue | ||||
*/ | */ | ||||
public void setFailonerror(boolean failure) { | |||||
public void setFailonerror(final boolean failure) { | |||||
failOnError = failure; | failOnError = failure; | ||||
} | } | ||||
@@ -90,7 +91,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* @param verbose if true output more verbose logging | * @param verbose if true output more verbose logging | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setVerbose(boolean verbose) { | |||||
public void setVerbose(final boolean verbose) { | |||||
this.verbose = verbose; | this.verbose = verbose; | ||||
} | } | ||||
@@ -108,7 +109,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param username The new username value | * @param username The new username value | ||||
*/ | */ | ||||
public void setUsername(String username) { | |||||
public void setUsername(final String username) { | |||||
userInfo.setName(username); | userInfo.setName(username); | ||||
} | } | ||||
@@ -118,7 +119,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param password The new password value | * @param password The new password value | ||||
*/ | */ | ||||
public void setPassword(String password) { | |||||
public void setPassword(final String password) { | |||||
userInfo.setPassword(password); | userInfo.setPassword(password); | ||||
} | } | ||||
@@ -127,7 +128,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param keyfile The new keyfile value | * @param keyfile The new keyfile value | ||||
*/ | */ | ||||
public void setKeyfile(String keyfile) { | |||||
public void setKeyfile(final String keyfile) { | |||||
userInfo.setKeyfile(keyfile); | userInfo.setKeyfile(keyfile); | ||||
} | } | ||||
@@ -136,7 +137,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param passphrase The new passphrase value | * @param passphrase The new passphrase value | ||||
*/ | */ | ||||
public void setPassphrase(String passphrase) { | |||||
public void setPassphrase(final String passphrase) { | |||||
userInfo.setPassphrase(passphrase); | userInfo.setPassphrase(passphrase); | ||||
} | } | ||||
@@ -148,7 +149,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param knownHosts a path to the known hosts file. | * @param knownHosts a path to the known hosts file. | ||||
*/ | */ | ||||
public void setKnownhosts(String knownHosts) { | |||||
public void setKnownhosts(final String knownHosts) { | |||||
this.knownHosts = knownHosts; | this.knownHosts = knownHosts; | ||||
} | } | ||||
@@ -157,7 +158,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param yesOrNo if true trust the identity of unknown hosts. | * @param yesOrNo if true trust the identity of unknown hosts. | ||||
*/ | */ | ||||
public void setTrust(boolean yesOrNo) { | |||||
public void setTrust(final boolean yesOrNo) { | |||||
userInfo.setTrust(yesOrNo); | userInfo.setTrust(yesOrNo); | ||||
} | } | ||||
@@ -166,7 +167,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* | * | ||||
* @param port port number of remote host. | * @param port port number of remote host. | ||||
*/ | */ | ||||
public void setPort(int port) { | |||||
public void setPort(final int port) { | |||||
this.port = port; | this.port = port; | ||||
} | } | ||||
@@ -195,14 +196,14 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
* @throws JSchException on error | * @throws JSchException on error | ||||
*/ | */ | ||||
protected Session openSession() throws JSchException { | protected Session openSession() throws JSchException { | ||||
JSch jsch = new JSch(); | |||||
final JSch jsch = new JSch(); | |||||
final SSHBase base = this; | final SSHBase base = this; | ||||
if(verbose) { | if(verbose) { | ||||
JSch.setLogger(new com.jcraft.jsch.Logger(){ | JSch.setLogger(new com.jcraft.jsch.Logger(){ | ||||
public boolean isEnabled(int level){ | |||||
public boolean isEnabled(final int level){ | |||||
return true; | return true; | ||||
} | } | ||||
public void log(int level, String message){ | |||||
public void log(final int level, final String message){ | |||||
base.log(message, Project.MSG_INFO); | base.log(message, Project.MSG_INFO); | ||||
} | } | ||||
}); | }); | ||||
@@ -216,7 +217,7 @@ public abstract class SSHBase extends Task implements LogListener { | |||||
jsch.setKnownHosts(knownHosts); | jsch.setKnownHosts(knownHosts); | ||||
} | } | ||||
Session session = jsch.getSession(userInfo.getName(), host, port); | |||||
final Session session = jsch.getSession(userInfo.getName(), host, port); | |||||
session.setConfig("PreferredAuthentications", | session.setConfig("PreferredAuthentications", | ||||
"publickey,keyboard-interactive,password"); | "publickey,keyboard-interactive,password"); | ||||
session.setUserInfo(userInfo); | session.setUserInfo(userInfo); | ||||
@@ -41,6 +41,7 @@ import org.apache.tools.ant.util.TeeOutputStream; | |||||
import com.jcraft.jsch.ChannelExec; | import com.jcraft.jsch.ChannelExec; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
/** | /** | ||||
* Executes a command on a remote machine via ssh. | * Executes a command on a remote machine via ssh. | ||||
@@ -31,6 +31,8 @@ import org.apache.tools.ant.Task; | |||||
import org.apache.tools.ant.TaskContainer; | import org.apache.tools.ant.TaskContainer; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
/** | /** | ||||
* Establishes an ssh session with a remote machine, optionally | * Establishes an ssh session with a remote machine, optionally | ||||
@@ -43,10 +45,10 @@ public class SSHSession extends SSHBase { | |||||
/** units are milliseconds, default is 0=infinite */ | /** units are milliseconds, default is 0=infinite */ | ||||
private long maxwait = 0; | private long maxwait = 0; | ||||
private Vector localTunnels = new Vector(); | |||||
private Set localPortsUsed = new TreeSet(); | |||||
private Vector remoteTunnels = new Vector(); | |||||
private Set remotePortsUsed = new TreeSet(); | |||||
private final Vector localTunnels = new Vector(); | |||||
private final Set localPortsUsed = new TreeSet(); | |||||
private final Vector remoteTunnels = new Vector(); | |||||
private final Set remotePortsUsed = new TreeSet(); | |||||
private NestedSequential nestedSequential = null; | private NestedSequential nestedSequential = null; | ||||
private static final String TIMEOUT_MESSAGE = | private static final String TIMEOUT_MESSAGE = | ||||
@@ -54,7 +56,7 @@ public class SSHSession extends SSHBase { | |||||
/** Optional Vector holding the nested tasks */ | /** Optional Vector holding the nested tasks */ | ||||
private Vector nestedTasks = new Vector(); | |||||
private final Vector nestedTasks = new Vector(); | |||||
/** | /** | ||||
* Add a nested task to Sequential. | * Add a nested task to Sequential. | ||||
@@ -62,7 +64,7 @@ public class SSHSession extends SSHBase { | |||||
* @param nestedTask Nested task to execute Sequential | * @param nestedTask Nested task to execute Sequential | ||||
* <p> | * <p> | ||||
*/ | */ | ||||
public void addTask(Task nestedTask) { | |||||
public void addTask(final Task nestedTask) { | |||||
nestedTasks.addElement(nestedTask); | nestedTasks.addElement(nestedTask); | ||||
} | } | ||||
@@ -73,7 +75,7 @@ public class SSHSession extends SSHBase { | |||||
* | * | ||||
* @param timeout The new timeout value in seconds | * @param timeout The new timeout value in seconds | ||||
*/ | */ | ||||
public void setTimeout(long timeout) { | |||||
public void setTimeout(final long timeout) { | |||||
maxwait = timeout; | maxwait = timeout; | ||||
} | } | ||||
@@ -84,15 +86,15 @@ public class SSHSession extends SSHBase { | |||||
* @param tunnels a comma-delimited list of lport:rhost:rport | * @param tunnels a comma-delimited list of lport:rhost:rport | ||||
* tunnel specifications | * tunnel specifications | ||||
*/ | */ | ||||
public void setLocaltunnels(String tunnels) { | |||||
String[] specs = tunnels.split(", "); | |||||
public void setLocaltunnels(final String tunnels) { | |||||
final String[] specs = tunnels.split(", "); | |||||
for (int i = 0; i < specs.length; i++) { | for (int i = 0; i < specs.length; i++) { | ||||
if (specs[i].length() > 0) { | if (specs[i].length() > 0) { | ||||
String[] spec = specs[i].split(":", 3); | |||||
int lport = Integer.parseInt(spec[0]); | |||||
String rhost = spec[1]; | |||||
int rport = Integer.parseInt(spec[2]); | |||||
LocalTunnel tunnel = createLocalTunnel(); | |||||
final String[] spec = specs[i].split(":", 3); | |||||
final int lport = Integer.parseInt(spec[0]); | |||||
final String rhost = spec[1]; | |||||
final int rport = Integer.parseInt(spec[2]); | |||||
final LocalTunnel tunnel = createLocalTunnel(); | |||||
tunnel.setLPort(lport); | tunnel.setLPort(lport); | ||||
tunnel.setRHost(rhost); | tunnel.setRHost(rhost); | ||||
tunnel.setRPort(rport); | tunnel.setRPort(rport); | ||||
@@ -107,15 +109,15 @@ public class SSHSession extends SSHBase { | |||||
* @param tunnels a comma-delimited list of rport:lhost:lport | * @param tunnels a comma-delimited list of rport:lhost:lport | ||||
* tunnel specifications | * tunnel specifications | ||||
*/ | */ | ||||
public void setRemotetunnels(String tunnels) { | |||||
String[] specs = tunnels.split(", "); | |||||
public void setRemotetunnels(final String tunnels) { | |||||
final String[] specs = tunnels.split(", "); | |||||
for (int i = 0; i < specs.length; i++) { | for (int i = 0; i < specs.length; i++) { | ||||
if (specs[i].length() > 0) { | if (specs[i].length() > 0) { | ||||
String[] spec = specs[i].split(":", 3); | |||||
int rport = Integer.parseInt(spec[0]); | |||||
String lhost = spec[1]; | |||||
int lport = Integer.parseInt(spec[2]); | |||||
RemoteTunnel tunnel = createRemoteTunnel(); | |||||
final String[] spec = specs[i].split(":", 3); | |||||
final int rport = Integer.parseInt(spec[0]); | |||||
final String lhost = spec[1]; | |||||
final int lport = Integer.parseInt(spec[2]); | |||||
final RemoteTunnel tunnel = createRemoteTunnel(); | |||||
tunnel.setRPort(rport); | tunnel.setRPort(rport); | ||||
tunnel.setLHost(lhost); | tunnel.setLHost(lhost); | ||||
tunnel.setLPort(lport); | tunnel.setLPort(lport); | ||||
@@ -153,28 +155,28 @@ public class SSHSession extends SSHBase { | |||||
session = openSession(); | session = openSession(); | ||||
session.setTimeout((int) maxwait); | session.setTimeout((int) maxwait); | ||||
for (Iterator i = localTunnels.iterator(); i.hasNext();) { | |||||
LocalTunnel tunnel = (LocalTunnel) i.next(); | |||||
for (final Iterator i = localTunnels.iterator(); i.hasNext();) { | |||||
final LocalTunnel tunnel = (LocalTunnel) i.next(); | |||||
session.setPortForwardingL(tunnel.getLPort(), | session.setPortForwardingL(tunnel.getLPort(), | ||||
tunnel.getRHost(), | tunnel.getRHost(), | ||||
tunnel.getRPort()); | tunnel.getRPort()); | ||||
} | } | ||||
for (Iterator i = remoteTunnels.iterator(); i.hasNext();) { | |||||
RemoteTunnel tunnel = (RemoteTunnel) i.next(); | |||||
for (final Iterator i = remoteTunnels.iterator(); i.hasNext();) { | |||||
final RemoteTunnel tunnel = (RemoteTunnel) i.next(); | |||||
session.setPortForwardingR(tunnel.getRPort(), | session.setPortForwardingR(tunnel.getRPort(), | ||||
tunnel.getLHost(), | tunnel.getLHost(), | ||||
tunnel.getLPort()); | tunnel.getLPort()); | ||||
} | } | ||||
for (Iterator i = nestedSequential.getNested().iterator(); | |||||
for (final Iterator i = nestedSequential.getNested().iterator(); | |||||
i.hasNext();) { | i.hasNext();) { | ||||
Task nestedTask = (Task) i.next(); | |||||
final Task nestedTask = (Task) i.next(); | |||||
nestedTask.perform(); | nestedTask.perform(); | ||||
} | } | ||||
// completed successfully | // completed successfully | ||||
} catch (JSchException e) { | |||||
} catch (final JSchException e) { | |||||
if (e.getMessage().indexOf("session is down") >= 0) { | if (e.getMessage().indexOf("session is down") >= 0) { | ||||
if (getFailonerror()) { | if (getFailonerror()) { | ||||
throw new BuildException(TIMEOUT_MESSAGE, e); | throw new BuildException(TIMEOUT_MESSAGE, e); | ||||
@@ -189,10 +191,10 @@ public class SSHSession extends SSHBase { | |||||
Project.MSG_ERR); | Project.MSG_ERR); | ||||
} | } | ||||
} | } | ||||
} catch (BuildException e) { | |||||
} catch (final BuildException e) { | |||||
// avoid wrapping it into yet another BuildException further down | // avoid wrapping it into yet another BuildException further down | ||||
throw e; | throw e; | ||||
} catch (Exception e) { | |||||
} catch (final Exception e) { | |||||
if (getFailonerror()) { | if (getFailonerror()) { | ||||
throw new BuildException(e); | throw new BuildException(e); | ||||
} else { | } else { | ||||
@@ -206,13 +208,13 @@ public class SSHSession extends SSHBase { | |||||
} | } | ||||
public LocalTunnel createLocalTunnel() { | public LocalTunnel createLocalTunnel() { | ||||
LocalTunnel tunnel = new LocalTunnel(); | |||||
final LocalTunnel tunnel = new LocalTunnel(); | |||||
localTunnels.add(tunnel); | localTunnels.add(tunnel); | ||||
return tunnel; | return tunnel; | ||||
} | } | ||||
public RemoteTunnel createRemoteTunnel() { | public RemoteTunnel createRemoteTunnel() { | ||||
RemoteTunnel tunnel = new RemoteTunnel(); | |||||
final RemoteTunnel tunnel = new RemoteTunnel(); | |||||
remoteTunnels.add(tunnel); | remoteTunnels.add(tunnel); | ||||
return tunnel; | return tunnel; | ||||
} | } | ||||
@@ -223,8 +225,8 @@ public class SSHSession extends SSHBase { | |||||
int lport = 0; | int lport = 0; | ||||
String rhost = null; | String rhost = null; | ||||
int rport = 0; | int rport = 0; | ||||
public void setLPort(int lport) { | |||||
Integer portKey = new Integer(lport); | |||||
public void setLPort(final int lport) { | |||||
final Integer portKey = new Integer(lport); | |||||
if (localPortsUsed.contains(portKey)) { | if (localPortsUsed.contains(portKey)) { | ||||
throw new BuildException("Multiple local tunnels defined to" | throw new BuildException("Multiple local tunnels defined to" | ||||
+ " use same local port " + lport); | + " use same local port " + lport); | ||||
@@ -232,8 +234,8 @@ public class SSHSession extends SSHBase { | |||||
localPortsUsed.add(portKey); | localPortsUsed.add(portKey); | ||||
this.lport = lport; | this.lport = lport; | ||||
} | } | ||||
public void setRHost(String rhost) { this.rhost = rhost; } | |||||
public void setRPort(int rport) { this.rport = rport; } | |||||
public void setRHost(final String rhost) { this.rhost = rhost; } | |||||
public void setRPort(final int rport) { this.rport = rport; } | |||||
public int getLPort() { | public int getLPort() { | ||||
if (lport == 0) { | if (lport == 0) { | ||||
throw new BuildException("lport is required for LocalTunnel."); | throw new BuildException("lport is required for LocalTunnel."); | ||||
@@ -260,10 +262,10 @@ public class SSHSession extends SSHBase { | |||||
int lport = 0; | int lport = 0; | ||||
String lhost = null; | String lhost = null; | ||||
int rport = 0; | int rport = 0; | ||||
public void setLPort(int lport) { this.lport = lport; } | |||||
public void setLHost(String lhost) { this.lhost = lhost; } | |||||
public void setRPort(int rport) { | |||||
Integer portKey = new Integer(rport); | |||||
public void setLPort(final int lport) { this.lport = lport; } | |||||
public void setLHost(final String lhost) { this.lhost = lhost; } | |||||
public void setRPort(final int rport) { | |||||
final Integer portKey = new Integer(rport); | |||||
if (remotePortsUsed.contains(portKey)) { | if (remotePortsUsed.contains(portKey)) { | ||||
throw new BuildException("Multiple remote tunnels defined to" | throw new BuildException("Multiple remote tunnels defined to" | ||||
+ " use same remote port " + rport); | + " use same remote port " + rport); | ||||
@@ -309,15 +311,14 @@ public class SSHSession extends SSHBase { | |||||
* This is a simple task container. | * This is a simple task container. | ||||
*/ | */ | ||||
public static class NestedSequential implements TaskContainer { | public static class NestedSequential implements TaskContainer { | ||||
private List<Task> nested = new ArrayList<Task>(); | |||||
private final List<Task> nested = new ArrayList<Task>(); | |||||
/** | /** | ||||
* Add a task or type to the container. | * Add a task or type to the container. | ||||
* | * | ||||
* @param task an unknown element. | * @param task an unknown element. | ||||
*/ | */ | ||||
@Override | |||||
public void addTask(Task task) { | |||||
public void addTask(final Task task) { | |||||
nested.add(task); | nested.add(task); | ||||
} | } | ||||
@@ -31,6 +31,7 @@ import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.types.FileSet; | import org.apache.tools.ant.types.FileSet; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
/** | /** | ||||
* Ant task for sending files to remote machine over ssh/scp. | * Ant task for sending files to remote machine over ssh/scp. | ||||
@@ -61,7 +62,7 @@ public class Scp extends SSHBase { | |||||
* <i>user:password@host:/directory/path/*</i><br> | * <i>user:password@host:/directory/path/*</i><br> | ||||
* @param aFromUri a string representing the file to transfer. | * @param aFromUri a string representing the file to transfer. | ||||
*/ | */ | ||||
public void setFile(String aFromUri) { | |||||
public void setFile(final String aFromUri) { | |||||
setFromUri(aFromUri); | setFromUri(aFromUri); | ||||
this.isFromRemote = isRemoteUri(this.fromUri); | this.isFromRemote = isRemoteUri(this.fromUri); | ||||
} | } | ||||
@@ -75,7 +76,7 @@ public class Scp extends SSHBase { | |||||
* @param aToUri a string representing the target of the copy. | * @param aToUri a string representing the target of the copy. | ||||
*/ | */ | ||||
public void setTodir(String aToUri) { | |||||
public void setTodir(final String aToUri) { | |||||
setToUri(aToUri); | setToUri(aToUri); | ||||
this.isToRemote = isRemoteUri(this.toUri); | this.isToRemote = isRemoteUri(this.toUri); | ||||
} | } | ||||
@@ -87,7 +88,7 @@ public class Scp extends SSHBase { | |||||
* @param aFromUri a string representing the source of the copy. | * @param aFromUri a string representing the source of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setLocalFile(String aFromUri) { | |||||
public void setLocalFile(final String aFromUri) { | |||||
setFromUri(aFromUri); | setFromUri(aFromUri); | ||||
this.isFromRemote = false; | this.isFromRemote = false; | ||||
} | } | ||||
@@ -98,7 +99,7 @@ public class Scp extends SSHBase { | |||||
* @param aFromUri a string representing the source of the copy. | * @param aFromUri a string representing the source of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setRemoteFile(String aFromUri) { | |||||
public void setRemoteFile(final String aFromUri) { | |||||
validateRemoteUri("remoteFile", aFromUri); | validateRemoteUri("remoteFile", aFromUri); | ||||
setFromUri(aFromUri); | setFromUri(aFromUri); | ||||
this.isFromRemote = true; | this.isFromRemote = true; | ||||
@@ -111,7 +112,7 @@ public class Scp extends SSHBase { | |||||
* @param aToUri a string representing the target of the copy. | * @param aToUri a string representing the target of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setLocalTodir(String aToUri) { | |||||
public void setLocalTodir(final String aToUri) { | |||||
setToUri(aToUri); | setToUri(aToUri); | ||||
this.isToRemote = false; | this.isToRemote = false; | ||||
} | } | ||||
@@ -121,7 +122,7 @@ public class Scp extends SSHBase { | |||||
* remote system is to be preserved during copy. | * remote system is to be preserved during copy. | ||||
* @since Ant 1.8.0 | * @since Ant 1.8.0 | ||||
*/ | */ | ||||
public void setPreservelastmodified(boolean yesOrNo) { | |||||
public void setPreservelastmodified(final boolean yesOrNo) { | |||||
this.preserveLastModified = yesOrNo; | this.preserveLastModified = yesOrNo; | ||||
} | } | ||||
@@ -131,13 +132,13 @@ public class Scp extends SSHBase { | |||||
* @param aToUri a string representing the target of the copy. | * @param aToUri a string representing the target of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setRemoteTodir(String aToUri) { | |||||
public void setRemoteTodir(final String aToUri) { | |||||
validateRemoteUri("remoteToDir", aToUri); | validateRemoteUri("remoteToDir", aToUri); | ||||
setToUri(aToUri); | setToUri(aToUri); | ||||
this.isToRemote = true; | this.isToRemote = true; | ||||
} | } | ||||
private static void validateRemoteUri(String type, String aToUri) { | |||||
private static void validateRemoteUri(final String type, final String aToUri) { | |||||
if (!isRemoteUri(aToUri)) { | if (!isRemoteUri(aToUri)) { | ||||
throw new BuildException(type + " '" + aToUri + "' is invalid. " | throw new BuildException(type + " '" + aToUri + "' is invalid. " | ||||
+ "The 'remoteToDir' attribute must " | + "The 'remoteToDir' attribute must " | ||||
@@ -153,7 +154,7 @@ public class Scp extends SSHBase { | |||||
* @param aToUri a string representing the target of the copy. | * @param aToUri a string representing the target of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setLocalTofile(String aToUri) { | |||||
public void setLocalTofile(final String aToUri) { | |||||
setToUri(aToUri); | setToUri(aToUri); | ||||
this.isToRemote = false; | this.isToRemote = false; | ||||
} | } | ||||
@@ -164,7 +165,7 @@ public class Scp extends SSHBase { | |||||
* @param aToUri a string representing the target of the copy. | * @param aToUri a string representing the target of the copy. | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public void setRemoteTofile(String aToUri) { | |||||
public void setRemoteTofile(final String aToUri) { | |||||
validateRemoteUri("remoteToFile", aToUri); | validateRemoteUri("remoteToFile", aToUri); | ||||
setToUri(aToUri); | setToUri(aToUri); | ||||
this.isToRemote = true; | this.isToRemote = true; | ||||
@@ -175,7 +176,7 @@ public class Scp extends SSHBase { | |||||
* | * | ||||
* @param yesOrNo if true sftp protocol will be used. | * @param yesOrNo if true sftp protocol will be used. | ||||
*/ | */ | ||||
public void setSftp(boolean yesOrNo) { | |||||
public void setSftp(final boolean yesOrNo) { | |||||
isSftp = yesOrNo; | isSftp = yesOrNo; | ||||
} | } | ||||
@@ -185,7 +186,7 @@ public class Scp extends SSHBase { | |||||
* | * | ||||
* @param set FileSet to send to remote host. | * @param set FileSet to send to remote host. | ||||
*/ | */ | ||||
public void addFileset(FileSet set) { | |||||
public void addFileset(final FileSet set) { | |||||
if (fileSets == null) { | if (fileSets == null) { | ||||
fileSets = new LinkedList(); | fileSets = new LinkedList(); | ||||
} | } | ||||
@@ -233,10 +234,10 @@ public class Scp extends SSHBase { | |||||
+ "must have syntax like the following: " | + "must have syntax like the following: " | ||||
+ "user:password@host:/path"); | + "user:password@host:/path"); | ||||
} | } | ||||
} catch (Exception e) { | |||||
} catch (final Exception e) { | |||||
if (getFailonerror()) { | if (getFailonerror()) { | ||||
if(e instanceof BuildException) { | if(e instanceof BuildException) { | ||||
BuildException be = (BuildException) e; | |||||
final BuildException be = (BuildException) e; | |||||
if(be.getLocation() == null) { | if(be.getLocation() == null) { | ||||
be.setLocation(getLocation()); | be.setLocation(getLocation()); | ||||
} | } | ||||
@@ -250,9 +251,9 @@ public class Scp extends SSHBase { | |||||
} | } | ||||
} | } | ||||
private void download(String fromSshUri, String toPath) | |||||
private void download(final String fromSshUri, final String toPath) | |||||
throws JSchException, IOException { | throws JSchException, IOException { | ||||
String file = parseUri(fromSshUri); | |||||
final String file = parseUri(fromSshUri); | |||||
Session session = null; | Session session = null; | ||||
try { | try { | ||||
@@ -281,16 +282,16 @@ public class Scp extends SSHBase { | |||||
} | } | ||||
} | } | ||||
private void upload(List fileSet, String toSshUri) | |||||
private void upload(final List fileSet, final String toSshUri) | |||||
throws IOException, JSchException { | throws IOException, JSchException { | ||||
String file = parseUri(toSshUri); | |||||
final String file = parseUri(toSshUri); | |||||
Session session = null; | Session session = null; | ||||
try { | try { | ||||
List list = new ArrayList(fileSet.size()); | |||||
for (Iterator i = fileSet.iterator(); i.hasNext();) { | |||||
FileSet set = (FileSet) i.next(); | |||||
Directory d = createDirectory(set); | |||||
final List list = new ArrayList(fileSet.size()); | |||||
for (final Iterator i = fileSet.iterator(); i.hasNext();) { | |||||
final FileSet set = (FileSet) i.next(); | |||||
final Directory d = createDirectory(set); | |||||
if (d != null) { | if (d != null) { | ||||
list.add(d); | list.add(d); | ||||
} | } | ||||
@@ -315,9 +316,9 @@ public class Scp extends SSHBase { | |||||
} | } | ||||
} | } | ||||
private void upload(String fromPath, String toSshUri) | |||||
private void upload(final String fromPath, final String toSshUri) | |||||
throws IOException, JSchException { | throws IOException, JSchException { | ||||
String file = parseUri(toSshUri); | |||||
final String file = parseUri(toSshUri); | |||||
Session session = null; | Session session = null; | ||||
try { | try { | ||||
@@ -342,17 +343,17 @@ public class Scp extends SSHBase { | |||||
} | } | ||||
} | } | ||||
private String parseUri(String uri) { | |||||
private String parseUri(final String uri) { | |||||
int indexOfAt = uri.indexOf('@'); | int indexOfAt = uri.indexOf('@'); | ||||
int indexOfColon = uri.indexOf(':'); | |||||
final int indexOfColon = uri.indexOf(':'); | |||||
if (indexOfColon > -1 && indexOfColon < indexOfAt) { | if (indexOfColon > -1 && indexOfColon < indexOfAt) { | ||||
// user:password@host:/path notation | // user:password@host:/path notation | ||||
// everything upto the last @ before the last : is considered | // everything upto the last @ before the last : is considered | ||||
// password. (so if the path contains an @ and a : it will not work) | // password. (so if the path contains an @ and a : it will not work) | ||||
int indexOfCurrentAt = indexOfAt; | int indexOfCurrentAt = indexOfAt; | ||||
int indexOfLastColon = uri.lastIndexOf(':'); | |||||
final int indexOfLastColon = uri.lastIndexOf(':'); | |||||
while (indexOfCurrentAt > -1 && indexOfCurrentAt < indexOfLastColon) | while (indexOfCurrentAt > -1 && indexOfCurrentAt < indexOfLastColon) | ||||
{ | { | ||||
indexOfAt = indexOfCurrentAt; | indexOfAt = indexOfCurrentAt; | ||||
@@ -374,7 +375,7 @@ public class Scp extends SSHBase { | |||||
+ "given. Can't authenticate."); | + "given. Can't authenticate."); | ||||
} | } | ||||
int indexOfPath = uri.indexOf(':', indexOfAt + 1); | |||||
final int indexOfPath = uri.indexOf(':', indexOfAt + 1); | |||||
if (indexOfPath == -1) { | if (indexOfPath == -1) { | ||||
throw new BuildException("no remote path in " + uri); | throw new BuildException("no remote path in " + uri); | ||||
} | } | ||||
@@ -387,26 +388,26 @@ public class Scp extends SSHBase { | |||||
return remotePath; | return remotePath; | ||||
} | } | ||||
private static boolean isRemoteUri(String uri) { | |||||
private static boolean isRemoteUri(final String uri) { | |||||
boolean isRemote = true; | boolean isRemote = true; | ||||
int indexOfAt = uri.indexOf('@'); | |||||
final int indexOfAt = uri.indexOf('@'); | |||||
if (indexOfAt < 0) { | if (indexOfAt < 0) { | ||||
isRemote = false; | isRemote = false; | ||||
} | } | ||||
return isRemote; | return isRemote; | ||||
} | } | ||||
private Directory createDirectory(FileSet set) { | |||||
DirectoryScanner scanner = set.getDirectoryScanner(getProject()); | |||||
private Directory createDirectory(final FileSet set) { | |||||
final DirectoryScanner scanner = set.getDirectoryScanner(getProject()); | |||||
Directory root = new Directory(scanner.getBasedir()); | Directory root = new Directory(scanner.getBasedir()); | ||||
String[] files = scanner.getIncludedFiles(); | |||||
final String[] files = scanner.getIncludedFiles(); | |||||
if (files.length != 0) { | if (files.length != 0) { | ||||
for (int j = 0; j < files.length; j++) { | for (int j = 0; j < files.length; j++) { | ||||
String[] path = Directory.getPath(files[j]); | |||||
final String[] path = Directory.getPath(files[j]); | |||||
Directory current = root; | Directory current = root; | ||||
File currentParent = scanner.getBasedir(); | File currentParent = scanner.getBasedir(); | ||||
for (int i = 0; i < path.length; i++) { | for (int i = 0; i < path.length; i++) { | ||||
File file = new File(currentParent, path[i]); | |||||
final File file = new File(currentParent, path[i]); | |||||
if (file.isDirectory()) { | if (file.isDirectory()) { | ||||
current.addDirectory(new Directory(file)); | current.addDirectory(new Directory(file)); | ||||
current = current.getChild(file); | current = current.getChild(file); | ||||
@@ -423,26 +424,26 @@ public class Scp extends SSHBase { | |||||
return root; | return root; | ||||
} | } | ||||
private void setFromUri(String fromUri) { | |||||
private void setFromUri(final String fromUri) { | |||||
if (this.fromUri != null) { | if (this.fromUri != null) { | ||||
throw exactlyOne(FROM_ATTRS); | throw exactlyOne(FROM_ATTRS); | ||||
} | } | ||||
this.fromUri = fromUri; | this.fromUri = fromUri; | ||||
} | } | ||||
private void setToUri(String toUri) { | |||||
private void setToUri(final String toUri) { | |||||
if (this.toUri != null) { | if (this.toUri != null) { | ||||
throw exactlyOne(TO_ATTRS); | throw exactlyOne(TO_ATTRS); | ||||
} | } | ||||
this.toUri = toUri; | this.toUri = toUri; | ||||
} | } | ||||
private BuildException exactlyOne(String[] attrs) { | |||||
private BuildException exactlyOne(final String[] attrs) { | |||||
return exactlyOne(attrs, null); | return exactlyOne(attrs, null); | ||||
} | } | ||||
private BuildException exactlyOne(String[] attrs, String alt) { | |||||
StringBuffer buf = new StringBuffer("Exactly one of ").append( | |||||
private BuildException exactlyOne(final String[] attrs, final String alt) { | |||||
final StringBuffer buf = new StringBuffer("Exactly one of ").append( | |||||
'[').append(attrs[0]); | '[').append(attrs[0]); | ||||
for (int i = 1; i < attrs.length; i++) { | for (int i = 1; i < attrs.length; i++) { | ||||
buf.append('|').append(attrs[i]); | buf.append('|').append(attrs[i]); | ||||
@@ -28,8 +28,10 @@ import java.io.OutputStream; | |||||
import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
import com.jcraft.jsch.Channel; | |||||
import com.jcraft.jsch.ChannelSftp; | import com.jcraft.jsch.ChannelSftp; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
import com.jcraft.jsch.SftpATTRS; | import com.jcraft.jsch.SftpATTRS; | ||||
import com.jcraft.jsch.SftpException; | import com.jcraft.jsch.SftpException; | ||||
@@ -51,7 +53,7 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
* Constructor for ScpFromMessage | * Constructor for ScpFromMessage | ||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
*/ | */ | ||||
public ScpFromMessage(Session session) { | |||||
public ScpFromMessage(final Session session) { | |||||
super(session); | super(session); | ||||
} | } | ||||
@@ -61,7 +63,7 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public ScpFromMessage(boolean verbose, Session session) { | |||||
public ScpFromMessage(final boolean verbose, final Session session) { | |||||
super(verbose, session); | super(verbose, session); | ||||
} | } | ||||
@@ -74,11 +76,11 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
* @param recursive if true use recursion (-r option to scp) | * @param recursive if true use recursion (-r option to scp) | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public ScpFromMessage(boolean verbose, | |||||
Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive) { | |||||
public ScpFromMessage(final boolean verbose, | |||||
final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive) { | |||||
this(false, session, aRemoteFile, aLocalFile, recursive, false); | this(false, session, aRemoteFile, aLocalFile, recursive, false); | ||||
} | } | ||||
@@ -89,10 +91,10 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
* @param aLocalFile the local file | * @param aLocalFile the local file | ||||
* @param recursive if true use recursion (-r option to scp) | * @param recursive if true use recursion (-r option to scp) | ||||
*/ | */ | ||||
public ScpFromMessage(Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive) { | |||||
public ScpFromMessage(final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive) { | |||||
this(false, session, aRemoteFile, aLocalFile, recursive); | this(false, session, aRemoteFile, aLocalFile, recursive); | ||||
} | } | ||||
@@ -107,12 +109,12 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
* modification times | * modification times | ||||
* @since Ant 1.8.0 | * @since Ant 1.8.0 | ||||
*/ | */ | ||||
public ScpFromMessage(boolean verbose, | |||||
Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive, | |||||
boolean preserveLastModified) { | |||||
public ScpFromMessage(final boolean verbose, | |||||
final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive, | |||||
final boolean preserveLastModified) { | |||||
super(verbose, session); | super(verbose, session); | ||||
this.remoteFile = aRemoteFile; | this.remoteFile = aRemoteFile; | ||||
this.localFile = aLocalFile; | this.localFile = aLocalFile; | ||||
@@ -131,11 +133,11 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
command += "-r "; | command += "-r "; | ||||
} | } | ||||
command += remoteFile; | command += remoteFile; | ||||
Channel channel = openExecChannel(command); | |||||
final Channel channel = openExecChannel(command); | |||||
try { | try { | ||||
// get I/O streams for remote scp | // get I/O streams for remote scp | ||||
OutputStream out = channel.getOutputStream(); | |||||
InputStream in = channel.getInputStream(); | |||||
final OutputStream out = channel.getOutputStream(); | |||||
final InputStream in = channel.getInputStream(); | |||||
channel.connect(); | channel.connect(); | ||||
@@ -153,18 +155,18 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
return preserveLastModified; | return preserveLastModified; | ||||
} | } | ||||
private void startRemoteCpProtocol(InputStream in, | |||||
OutputStream out, | |||||
File localFile) | |||||
private void startRemoteCpProtocol(final InputStream in, | |||||
final OutputStream out, | |||||
final File localFile) | |||||
throws IOException, JSchException { | throws IOException, JSchException { | ||||
File startFile = localFile; | File startFile = localFile; | ||||
while (true) { | while (true) { | ||||
// C0644 filesize filename - header for a regular file | // C0644 filesize filename - header for a regular file | ||||
// T time 0 time 0\n - present if perserve time. | // T time 0 time 0\n - present if perserve time. | ||||
// D directory - this is the header for a directory. | // D directory - this is the header for a directory. | ||||
ByteArrayOutputStream stream = new ByteArrayOutputStream(); | |||||
final ByteArrayOutputStream stream = new ByteArrayOutputStream(); | |||||
while (true) { | while (true) { | ||||
int read = in.read(); | |||||
final int read = in.read(); | |||||
if (read < 0) { | if (read < 0) { | ||||
return; | return; | ||||
} | } | ||||
@@ -173,7 +175,7 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
} | } | ||||
stream.write(read); | stream.write(read); | ||||
} | } | ||||
String serverResponse = stream.toString("UTF-8"); | |||||
final String serverResponse = stream.toString("UTF-8"); | |||||
if (serverResponse.charAt(0) == 'C') { | if (serverResponse.charAt(0) == 'C') { | ||||
parseAndFetchFile(serverResponse, startFile, out, in); | parseAndFetchFile(serverResponse, startFile, out, in); | ||||
} else if (serverResponse.charAt(0) == 'D') { | } else if (serverResponse.charAt(0) == 'D') { | ||||
@@ -191,14 +193,14 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
} | } | ||||
} | } | ||||
private File parseAndCreateDirectory(String serverResponse, | |||||
File localFile) { | |||||
private File parseAndCreateDirectory(final String serverResponse, | |||||
final File localFile) { | |||||
int start = serverResponse.indexOf(" "); | int start = serverResponse.indexOf(" "); | ||||
// appears that the next token is not used and it's zero. | // appears that the next token is not used and it's zero. | ||||
start = serverResponse.indexOf(" ", start + 1); | start = serverResponse.indexOf(" ", start + 1); | ||||
String directoryName = serverResponse.substring(start + 1); | |||||
final String directoryName = serverResponse.substring(start + 1); | |||||
if (localFile.isDirectory()) { | if (localFile.isDirectory()) { | ||||
File dir = new File(localFile, directoryName); | |||||
final File dir = new File(localFile, directoryName); | |||||
dir.mkdir(); | dir.mkdir(); | ||||
log("Creating: " + dir); | log("Creating: " + dir); | ||||
return dir; | return dir; | ||||
@@ -206,19 +208,19 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
return null; | return null; | ||||
} | } | ||||
private void parseAndFetchFile(String serverResponse, | |||||
File localFile, | |||||
OutputStream out, | |||||
InputStream in) | |||||
private void parseAndFetchFile(final String serverResponse, | |||||
final File localFile, | |||||
final OutputStream out, | |||||
final InputStream in) | |||||
throws IOException, JSchException { | throws IOException, JSchException { | ||||
int start = 0; | int start = 0; | ||||
int end = serverResponse.indexOf(" ", start + 1); | int end = serverResponse.indexOf(" ", start + 1); | ||||
start = end + 1; | start = end + 1; | ||||
end = serverResponse.indexOf(" ", start + 1); | end = serverResponse.indexOf(" ", start + 1); | ||||
long filesize = Long.parseLong(serverResponse.substring(start, end)); | |||||
String filename = serverResponse.substring(end + 1); | |||||
final long filesize = Long.parseLong(serverResponse.substring(start, end)); | |||||
final String filename = serverResponse.substring(end + 1); | |||||
log("Receiving: " + filename + " : " + filesize); | log("Receiving: " + filename + " : " + filesize); | ||||
File transferFile = (localFile.isDirectory()) | |||||
final File transferFile = (localFile.isDirectory()) | |||||
? new File(localFile, filename) | ? new File(localFile, filename) | ||||
: localFile; | : localFile; | ||||
fetchFile(transferFile, filesize, out, in); | fetchFile(transferFile, filesize, out, in); | ||||
@@ -226,25 +228,25 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
sendAck(out); | sendAck(out); | ||||
} | } | ||||
private void fetchFile(File localFile, | |||||
private void fetchFile(final File localFile, | |||||
long filesize, | long filesize, | ||||
OutputStream out, | |||||
InputStream in) | |||||
final OutputStream out, | |||||
final InputStream in) | |||||
throws IOException, JSchException { | throws IOException, JSchException { | ||||
byte[] buf = new byte[BUFFER_SIZE]; | |||||
final byte[] buf = new byte[BUFFER_SIZE]; | |||||
sendAck(out); | sendAck(out); | ||||
// read a content of lfile | // read a content of lfile | ||||
FileOutputStream fos = new FileOutputStream(localFile); | |||||
final FileOutputStream fos = new FileOutputStream(localFile); | |||||
int length; | int length; | ||||
long totalLength = 0; | long totalLength = 0; | ||||
long startTime = System.currentTimeMillis(); | |||||
final long startTime = System.currentTimeMillis(); | |||||
// only track progress for files larger than 100kb in verbose mode | // only track progress for files larger than 100kb in verbose mode | ||||
boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
final boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
// since filesize keeps on decreasing we have to store the | // since filesize keeps on decreasing we have to store the | ||||
// initial filesize | // initial filesize | ||||
long initFilesize = filesize; | |||||
final long initFilesize = filesize; | |||||
int percentTransmitted = 0; | int percentTransmitted = 0; | ||||
try { | try { | ||||
@@ -269,7 +271,7 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
} | } | ||||
} | } | ||||
} finally { | } finally { | ||||
long endTime = System.currentTimeMillis(); | |||||
final long endTime = System.currentTimeMillis(); | |||||
logStats(startTime, endTime, totalLength); | logStats(startTime, endTime, totalLength); | ||||
fos.flush(); | fos.flush(); | ||||
fos.close(); | fos.close(); | ||||
@@ -280,14 +282,14 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
} | } | ||||
} | } | ||||
private void setLastModified(File localFile) throws JSchException { | |||||
private void setLastModified(final File localFile) throws JSchException { | |||||
SftpATTRS fileAttributes = null; | SftpATTRS fileAttributes = null; | ||||
ChannelSftp channel = openSftpChannel(); | |||||
final ChannelSftp channel = openSftpChannel(); | |||||
channel.connect(); | channel.connect(); | ||||
try { | try { | ||||
fileAttributes = channel.lstat(remoteDir(remoteFile) | fileAttributes = channel.lstat(remoteDir(remoteFile) | ||||
+ localFile.getName()); | + localFile.getName()); | ||||
} catch (SftpException e) { | |||||
} catch (final SftpException e) { | |||||
throw new JSchException("failed to stat remote file", e); | throw new JSchException("failed to stat remote file", e); | ||||
} | } | ||||
FileUtils.getFileUtils().setFileLastModified(localFile, | FileUtils.getFileUtils().setFileLastModified(localFile, | ||||
@@ -299,7 +301,7 @@ public class ScpFromMessage extends AbstractSshMessage { | |||||
/** | /** | ||||
* returns the directory part of the remote file, if any. | * returns the directory part of the remote file, if any. | ||||
*/ | */ | ||||
private static String remoteDir(String remoteFile) { | |||||
private static String remoteDir(final String remoteFile) { | |||||
int index = remoteFile.lastIndexOf("/"); | int index = remoteFile.lastIndexOf("/"); | ||||
if (index < 0) { | if (index < 0) { | ||||
index = remoteFile.lastIndexOf("\\"); | index = remoteFile.lastIndexOf("\\"); | ||||
@@ -25,6 +25,7 @@ import org.apache.tools.ant.util.FileUtils; | |||||
import com.jcraft.jsch.ChannelSftp; | import com.jcraft.jsch.ChannelSftp; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
import com.jcraft.jsch.SftpATTRS; | import com.jcraft.jsch.SftpATTRS; | ||||
import com.jcraft.jsch.SftpException; | import com.jcraft.jsch.SftpException; | ||||
import com.jcraft.jsch.SftpProgressMonitor; | import com.jcraft.jsch.SftpProgressMonitor; | ||||
@@ -37,7 +38,7 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
private static final int HUNDRED_KILOBYTES = 102400; | private static final int HUNDRED_KILOBYTES = 102400; | ||||
private String remoteFile; | private String remoteFile; | ||||
private File localFile; | |||||
private final File localFile; | |||||
private boolean isRecursive = false; | private boolean isRecursive = false; | ||||
private boolean verbose = false; | private boolean verbose = false; | ||||
@@ -50,11 +51,11 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
* @param recursive if true use recursion | * @param recursive if true use recursion | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public ScpFromMessageBySftp(boolean verbose, | |||||
Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive) { | |||||
public ScpFromMessageBySftp(final boolean verbose, | |||||
final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive) { | |||||
this(verbose, session, aRemoteFile, aLocalFile, recursive, false); | this(verbose, session, aRemoteFile, aLocalFile, recursive, false); | ||||
} | } | ||||
@@ -65,10 +66,10 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
* @param aLocalFile the local file | * @param aLocalFile the local file | ||||
* @param recursive if true use recursion | * @param recursive if true use recursion | ||||
*/ | */ | ||||
public ScpFromMessageBySftp(Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive) { | |||||
public ScpFromMessageBySftp(final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive) { | |||||
this(false, session, aRemoteFile, aLocalFile, recursive); | this(false, session, aRemoteFile, aLocalFile, recursive); | ||||
} | } | ||||
@@ -83,12 +84,12 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
* modification times | * modification times | ||||
* @since Ant 1.8.0 | * @since Ant 1.8.0 | ||||
*/ | */ | ||||
public ScpFromMessageBySftp(boolean verbose, | |||||
Session session, | |||||
String aRemoteFile, | |||||
File aLocalFile, | |||||
boolean recursive, | |||||
boolean preserveLastModified) { | |||||
public ScpFromMessageBySftp(final boolean verbose, | |||||
final Session session, | |||||
final String aRemoteFile, | |||||
final File aLocalFile, | |||||
final boolean recursive, | |||||
final boolean preserveLastModified) { | |||||
super(verbose, session, aRemoteFile, aLocalFile, recursive, | super(verbose, session, aRemoteFile, aLocalFile, recursive, | ||||
preserveLastModified); | preserveLastModified); | ||||
this.verbose = verbose; | this.verbose = verbose; | ||||
@@ -103,20 +104,20 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
* @throws JSchException on errors detected by scp | * @throws JSchException on errors detected by scp | ||||
*/ | */ | ||||
public void execute() throws IOException, JSchException { | public void execute() throws IOException, JSchException { | ||||
ChannelSftp channel = openSftpChannel(); | |||||
final ChannelSftp channel = openSftpChannel(); | |||||
try { | try { | ||||
channel.connect(); | channel.connect(); | ||||
try { | try { | ||||
SftpATTRS attrs = channel.stat(remoteFile); | |||||
final SftpATTRS attrs = channel.stat(remoteFile); | |||||
if (attrs.isDir() && !remoteFile.endsWith("/")) { | if (attrs.isDir() && !remoteFile.endsWith("/")) { | ||||
remoteFile = remoteFile + "/"; | remoteFile = remoteFile + "/"; | ||||
} | } | ||||
} catch (SftpException ee) { | |||||
} catch (final SftpException ee) { | |||||
// Ignored | // Ignored | ||||
} | } | ||||
getDir(channel, remoteFile, localFile); | getDir(channel, remoteFile, localFile); | ||||
} catch (SftpException e) { | |||||
JSchException schException = new JSchException("Could not get '"+ remoteFile | |||||
} catch (final SftpException e) { | |||||
final JSchException schException = new JSchException("Could not get '"+ remoteFile | |||||
+"' to '"+localFile+"' - " | +"' to '"+localFile+"' - " | ||||
+e.toString()); | +e.toString()); | ||||
schException.initCause(e); | schException.initCause(e); | ||||
@@ -129,9 +130,9 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
log("done\n"); | log("done\n"); | ||||
} | } | ||||
private void getDir(ChannelSftp channel, | |||||
String remoteFile, | |||||
File localFile) throws IOException, SftpException { | |||||
private void getDir(final ChannelSftp channel, | |||||
final String remoteFile, | |||||
final File localFile) throws IOException, SftpException { | |||||
String pwd = remoteFile; | String pwd = remoteFile; | ||||
if (remoteFile.lastIndexOf('/') != -1) { | if (remoteFile.lastIndexOf('/') != -1) { | ||||
if (remoteFile.length() > 1) { | if (remoteFile.length() > 1) { | ||||
@@ -142,11 +143,11 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
if (!localFile.exists()) { | if (!localFile.exists()) { | ||||
localFile.mkdirs(); | localFile.mkdirs(); | ||||
} | } | ||||
java.util.Vector files = channel.ls(remoteFile); | |||||
final java.util.Vector files = channel.ls(remoteFile); | |||||
final int size = files.size(); | final int size = files.size(); | ||||
for (int i = 0; i < size; i++) { | for (int i = 0; i < size; i++) { | ||||
ChannelSftp.LsEntry le = (ChannelSftp.LsEntry) files.elementAt(i); | |||||
String name = le.getFilename(); | |||||
final ChannelSftp.LsEntry le = (ChannelSftp.LsEntry) files.elementAt(i); | |||||
final String name = le.getFilename(); | |||||
if (le.getAttrs().isDir()) { | if (le.getAttrs().isDir()) { | ||||
if (name.equals(".") || name.equals("..")) { | if (name.equals(".") || name.equals("..")) { | ||||
continue; | continue; | ||||
@@ -161,13 +162,13 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
channel.cd(".."); | channel.cd(".."); | ||||
} | } | ||||
private void getFile(ChannelSftp channel, | |||||
ChannelSftp.LsEntry le, | |||||
private void getFile(final ChannelSftp channel, | |||||
final ChannelSftp.LsEntry le, | |||||
File localFile) throws IOException, SftpException { | File localFile) throws IOException, SftpException { | ||||
String remoteFile = le.getFilename(); | |||||
final String remoteFile = le.getFilename(); | |||||
if (!localFile.exists()) { | if (!localFile.exists()) { | ||||
String path = localFile.getAbsolutePath(); | |||||
int i = path.lastIndexOf(File.pathSeparator); | |||||
final String path = localFile.getAbsolutePath(); | |||||
final int i = path.lastIndexOf(File.pathSeparator); | |||||
if (i != -1) { | if (i != -1) { | ||||
if (path.length() > File.pathSeparator.length()) { | if (path.length() > File.pathSeparator.length()) { | ||||
new File(path.substring(0, i)).mkdirs(); | new File(path.substring(0, i)).mkdirs(); | ||||
@@ -179,11 +180,11 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
localFile = new File(localFile, remoteFile); | localFile = new File(localFile, remoteFile); | ||||
} | } | ||||
long startTime = System.currentTimeMillis(); | |||||
long totalLength = le.getAttrs().getSize(); | |||||
final long startTime = System.currentTimeMillis(); | |||||
final long totalLength = le.getAttrs().getSize(); | |||||
SftpProgressMonitor monitor = null; | SftpProgressMonitor monitor = null; | ||||
boolean trackProgress = getVerbose() && totalLength > HUNDRED_KILOBYTES; | |||||
final boolean trackProgress = getVerbose() && totalLength > HUNDRED_KILOBYTES; | |||||
if (trackProgress) { | if (trackProgress) { | ||||
monitor = getProgressMonitor(); | monitor = getProgressMonitor(); | ||||
} | } | ||||
@@ -191,7 +192,7 @@ public class ScpFromMessageBySftp extends ScpFromMessage { | |||||
log("Receiving: " + remoteFile + " : " + le.getAttrs().getSize()); | log("Receiving: " + remoteFile + " : " + le.getAttrs().getSize()); | ||||
channel.get(remoteFile, localFile.getAbsolutePath(), monitor); | channel.get(remoteFile, localFile.getAbsolutePath(), monitor); | ||||
} finally { | } finally { | ||||
long endTime = System.currentTimeMillis(); | |||||
final long endTime = System.currentTimeMillis(); | |||||
logStats(startTime, endTime, (int) totalLength); | logStats(startTime, endTime, (int) totalLength); | ||||
} | } | ||||
if (getPreserveLastModified()) { | if (getPreserveLastModified()) { | ||||
@@ -26,7 +26,9 @@ import java.io.OutputStream; | |||||
import java.util.Iterator; | import java.util.Iterator; | ||||
import java.util.List; | import java.util.List; | ||||
import com.jcraft.jsch.Channel; | |||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
/** | /** | ||||
* Utility class to carry out an upload scp transfer. | * Utility class to carry out an upload scp transfer. | ||||
@@ -44,7 +46,7 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* Constructor for ScpToMessage | * Constructor for ScpToMessage | ||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
*/ | */ | ||||
public ScpToMessage(Session session) { | |||||
public ScpToMessage(final Session session) { | |||||
super(session); | super(session); | ||||
} | } | ||||
@@ -54,7 +56,7 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param session the ssh session to use | * @param session the ssh session to use | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public ScpToMessage(boolean verbose, Session session) { | |||||
public ScpToMessage(final boolean verbose, final Session session) { | |||||
super(verbose, session); | super(verbose, session); | ||||
} | } | ||||
@@ -66,10 +68,10 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public ScpToMessage(boolean verbose, | |||||
Session session, | |||||
File aLocalFile, | |||||
String aRemotePath) { | |||||
public ScpToMessage(final boolean verbose, | |||||
final Session session, | |||||
final File aLocalFile, | |||||
final String aRemotePath) { | |||||
this(verbose, session, aRemotePath); | this(verbose, session, aRemotePath); | ||||
this.localFile = aLocalFile; | this.localFile = aLocalFile; | ||||
@@ -83,10 +85,10 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
public ScpToMessage(boolean verbose, | |||||
Session session, | |||||
List aDirectoryList, | |||||
String aRemotePath) { | |||||
public ScpToMessage(final boolean verbose, | |||||
final Session session, | |||||
final List aDirectoryList, | |||||
final String aRemotePath) { | |||||
this(verbose, session, aRemotePath); | this(verbose, session, aRemotePath); | ||||
this.directoryList = aDirectoryList; | this.directoryList = aDirectoryList; | ||||
@@ -99,9 +101,9 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
private ScpToMessage(boolean verbose, | |||||
Session session, | |||||
String aRemotePath) { | |||||
private ScpToMessage(final boolean verbose, | |||||
final Session session, | |||||
final String aRemotePath) { | |||||
super(verbose, session); | super(verbose, session); | ||||
this.remotePath = aRemotePath; | this.remotePath = aRemotePath; | ||||
} | } | ||||
@@ -112,9 +114,9 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param aLocalFile the local file | * @param aLocalFile the local file | ||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
*/ | */ | ||||
public ScpToMessage(Session session, | |||||
File aLocalFile, | |||||
String aRemotePath) { | |||||
public ScpToMessage(final Session session, | |||||
final File aLocalFile, | |||||
final String aRemotePath) { | |||||
this(false, session, aLocalFile, aRemotePath); | this(false, session, aLocalFile, aRemotePath); | ||||
} | } | ||||
@@ -124,9 +126,9 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
* @param aDirectoryList a list of directories | * @param aDirectoryList a list of directories | ||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
*/ | */ | ||||
public ScpToMessage(Session session, | |||||
List aDirectoryList, | |||||
String aRemotePath) { | |||||
public ScpToMessage(final Session session, | |||||
final List aDirectoryList, | |||||
final String aRemotePath) { | |||||
this(false, session, aDirectoryList, aRemotePath); | this(false, session, aDirectoryList, aRemotePath); | ||||
} | } | ||||
@@ -146,12 +148,12 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
} | } | ||||
private void doSingleTransfer() throws IOException, JSchException { | private void doSingleTransfer() throws IOException, JSchException { | ||||
String cmd = "scp -t " + remotePath; | |||||
Channel channel = openExecChannel(cmd); | |||||
final String cmd = "scp -t " + remotePath; | |||||
final Channel channel = openExecChannel(cmd); | |||||
try { | try { | ||||
OutputStream out = channel.getOutputStream(); | |||||
InputStream in = channel.getInputStream(); | |||||
final OutputStream out = channel.getOutputStream(); | |||||
final InputStream in = channel.getInputStream(); | |||||
channel.connect(); | channel.connect(); | ||||
@@ -165,16 +167,16 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
} | } | ||||
private void doMultipleTransfer() throws IOException, JSchException { | private void doMultipleTransfer() throws IOException, JSchException { | ||||
Channel channel = openExecChannel("scp -r -d -t " + remotePath); | |||||
final Channel channel = openExecChannel("scp -r -d -t " + remotePath); | |||||
try { | try { | ||||
OutputStream out = channel.getOutputStream(); | |||||
InputStream in = channel.getInputStream(); | |||||
final OutputStream out = channel.getOutputStream(); | |||||
final InputStream in = channel.getInputStream(); | |||||
channel.connect(); | channel.connect(); | ||||
waitForAck(in); | waitForAck(in); | ||||
for (Iterator i = directoryList.iterator(); i.hasNext();) { | |||||
Directory current = (Directory) i.next(); | |||||
for (final Iterator i = directoryList.iterator(); i.hasNext();) { | |||||
final Directory current = (Directory) i.next(); | |||||
sendDirectory(current, in, out); | sendDirectory(current, in, out); | ||||
} | } | ||||
} finally { | } finally { | ||||
@@ -184,21 +186,21 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
} | } | ||||
} | } | ||||
private void sendDirectory(Directory current, | |||||
InputStream in, | |||||
OutputStream out) throws IOException { | |||||
for (Iterator fileIt = current.filesIterator(); fileIt.hasNext();) { | |||||
private void sendDirectory(final Directory current, | |||||
final InputStream in, | |||||
final OutputStream out) throws IOException { | |||||
for (final Iterator fileIt = current.filesIterator(); fileIt.hasNext();) { | |||||
sendFileToRemote((File) fileIt.next(), in, out); | sendFileToRemote((File) fileIt.next(), in, out); | ||||
} | } | ||||
for (Iterator dirIt = current.directoryIterator(); dirIt.hasNext();) { | |||||
Directory dir = (Directory) dirIt.next(); | |||||
for (final Iterator dirIt = current.directoryIterator(); dirIt.hasNext();) { | |||||
final Directory dir = (Directory) dirIt.next(); | |||||
sendDirectoryToRemote(dir, in, out); | sendDirectoryToRemote(dir, in, out); | ||||
} | } | ||||
} | } | ||||
private void sendDirectoryToRemote(Directory directory, | |||||
InputStream in, | |||||
OutputStream out) throws IOException { | |||||
private void sendDirectoryToRemote(final Directory directory, | |||||
final InputStream in, | |||||
final OutputStream out) throws IOException { | |||||
String command = "D0755 0 "; | String command = "D0755 0 "; | ||||
command += directory.getDirectory().getName(); | command += directory.getDirectory().getName(); | ||||
command += "\n"; | command += "\n"; | ||||
@@ -213,11 +215,11 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
waitForAck(in); | waitForAck(in); | ||||
} | } | ||||
private void sendFileToRemote(File localFile, | |||||
InputStream in, | |||||
OutputStream out) throws IOException { | |||||
private void sendFileToRemote(final File localFile, | |||||
final InputStream in, | |||||
final OutputStream out) throws IOException { | |||||
// send "C0644 filesize filename", where filename should not include '/' | // send "C0644 filesize filename", where filename should not include '/' | ||||
long filesize = localFile.length(); | |||||
final long filesize = localFile.length(); | |||||
String command = "C0644 " + filesize + " "; | String command = "C0644 " + filesize + " "; | ||||
command += localFile.getName(); | command += localFile.getName(); | ||||
command += "\n"; | command += "\n"; | ||||
@@ -228,16 +230,16 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
waitForAck(in); | waitForAck(in); | ||||
// send a content of lfile | // send a content of lfile | ||||
FileInputStream fis = new FileInputStream(localFile); | |||||
byte[] buf = new byte[BUFFER_SIZE]; | |||||
long startTime = System.currentTimeMillis(); | |||||
final FileInputStream fis = new FileInputStream(localFile); | |||||
final byte[] buf = new byte[BUFFER_SIZE]; | |||||
final long startTime = System.currentTimeMillis(); | |||||
long totalLength = 0; | long totalLength = 0; | ||||
// only track progress for files larger than 100kb in verbose mode | // only track progress for files larger than 100kb in verbose mode | ||||
boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
final boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
// since filesize keeps on decreasing we have to store the | // since filesize keeps on decreasing we have to store the | ||||
// initial filesize | // initial filesize | ||||
long initFilesize = filesize; | |||||
final long initFilesize = filesize; | |||||
int percentTransmitted = 0; | int percentTransmitted = 0; | ||||
try { | try { | ||||
@@ -245,7 +247,7 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
log("Sending: " + localFile.getName() + " : " + localFile.length()); | log("Sending: " + localFile.getName() + " : " + localFile.length()); | ||||
} | } | ||||
while (true) { | while (true) { | ||||
int len = fis.read(buf, 0, buf.length); | |||||
final int len = fis.read(buf, 0, buf.length); | |||||
if (len <= 0) { | if (len <= 0) { | ||||
break; | break; | ||||
} | } | ||||
@@ -263,7 +265,7 @@ public class ScpToMessage extends AbstractSshMessage { | |||||
waitForAck(in); | waitForAck(in); | ||||
} finally { | } finally { | ||||
if (this.getVerbose()) { | if (this.getVerbose()) { | ||||
long endTime = System.currentTimeMillis(); | |||||
final long endTime = System.currentTimeMillis(); | |||||
logStats(startTime, endTime, totalLength); | logStats(startTime, endTime, totalLength); | ||||
} | } | ||||
fis.close(); | fis.close(); | ||||
@@ -25,6 +25,7 @@ import java.util.List; | |||||
import com.jcraft.jsch.ChannelSftp; | import com.jcraft.jsch.ChannelSftp; | ||||
import com.jcraft.jsch.JSchException; | import com.jcraft.jsch.JSchException; | ||||
import com.jcraft.jsch.Session; | |||||
import com.jcraft.jsch.SftpException; | import com.jcraft.jsch.SftpException; | ||||
import com.jcraft.jsch.SftpProgressMonitor; | import com.jcraft.jsch.SftpProgressMonitor; | ||||
@@ -36,7 +37,7 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
private static final int HUNDRED_KILOBYTES = 102400; | private static final int HUNDRED_KILOBYTES = 102400; | ||||
private File localFile; | private File localFile; | ||||
private String remotePath; | |||||
private final String remotePath; | |||||
private List directoryList; | private List directoryList; | ||||
/** | /** | ||||
@@ -47,10 +48,10 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public ScpToMessageBySftp(boolean verbose, | |||||
Session session, | |||||
File aLocalFile, | |||||
String aRemotePath) { | |||||
public ScpToMessageBySftp(final boolean verbose, | |||||
final Session session, | |||||
final File aLocalFile, | |||||
final String aRemotePath) { | |||||
this(verbose, session, aRemotePath); | this(verbose, session, aRemotePath); | ||||
this.localFile = aLocalFile; | this.localFile = aLocalFile; | ||||
@@ -64,10 +65,10 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
*/ | */ | ||||
public ScpToMessageBySftp(boolean verbose, | |||||
Session session, | |||||
List aDirectoryList, | |||||
String aRemotePath) { | |||||
public ScpToMessageBySftp(final boolean verbose, | |||||
final Session session, | |||||
final List aDirectoryList, | |||||
final String aRemotePath) { | |||||
this(verbose, session, aRemotePath); | this(verbose, session, aRemotePath); | ||||
this.directoryList = aDirectoryList; | this.directoryList = aDirectoryList; | ||||
@@ -80,9 +81,9 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
* @since Ant 1.6.2 | * @since Ant 1.6.2 | ||||
*/ | */ | ||||
private ScpToMessageBySftp(boolean verbose, | |||||
Session session, | |||||
String aRemotePath) { | |||||
private ScpToMessageBySftp(final boolean verbose, | |||||
final Session session, | |||||
final String aRemotePath) { | |||||
super(verbose, session); | super(verbose, session); | ||||
this.remotePath = aRemotePath; | this.remotePath = aRemotePath; | ||||
} | } | ||||
@@ -93,9 +94,9 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
* @param aLocalFile the local file | * @param aLocalFile the local file | ||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
*/ | */ | ||||
public ScpToMessageBySftp(Session session, | |||||
File aLocalFile, | |||||
String aRemotePath) { | |||||
public ScpToMessageBySftp(final Session session, | |||||
final File aLocalFile, | |||||
final String aRemotePath) { | |||||
this(false, session, aLocalFile, aRemotePath); | this(false, session, aLocalFile, aRemotePath); | ||||
} | } | ||||
@@ -105,9 +106,9 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
* @param aDirectoryList a list of directories | * @param aDirectoryList a list of directories | ||||
* @param aRemotePath the remote path | * @param aRemotePath the remote path | ||||
*/ | */ | ||||
public ScpToMessageBySftp(Session session, | |||||
List aDirectoryList, | |||||
String aRemotePath) { | |||||
public ScpToMessageBySftp(final Session session, | |||||
final List aDirectoryList, | |||||
final String aRemotePath) { | |||||
this(false, session, aDirectoryList, aRemotePath); | this(false, session, aDirectoryList, aRemotePath); | ||||
} | } | ||||
@@ -127,13 +128,13 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
} | } | ||||
private void doSingleTransfer() throws IOException, JSchException { | private void doSingleTransfer() throws IOException, JSchException { | ||||
ChannelSftp channel = openSftpChannel(); | |||||
final ChannelSftp channel = openSftpChannel(); | |||||
try { | try { | ||||
channel.connect(); | channel.connect(); | ||||
try { | try { | ||||
sendFileToRemote(channel, localFile, remotePath); | sendFileToRemote(channel, localFile, remotePath); | ||||
} catch (SftpException e) { | |||||
JSchException schException = new JSchException("Could not send '" + localFile | |||||
} catch (final SftpException e) { | |||||
final JSchException schException = new JSchException("Could not send '" + localFile | |||||
+ "' to '" + remotePath + "' - " | + "' to '" + remotePath + "' - " | ||||
+ e.toString()); | + e.toString()); | ||||
schException.initCause(e); | schException.initCause(e); | ||||
@@ -147,14 +148,14 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
} | } | ||||
private void doMultipleTransfer() throws IOException, JSchException { | private void doMultipleTransfer() throws IOException, JSchException { | ||||
ChannelSftp channel = openSftpChannel(); | |||||
final ChannelSftp channel = openSftpChannel(); | |||||
try { | try { | ||||
channel.connect(); | channel.connect(); | ||||
try { | try { | ||||
try { | try { | ||||
channel.stat(remotePath); | channel.stat(remotePath); | ||||
} catch (SftpException e) { | |||||
} catch (final SftpException e) { | |||||
if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { | if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { | ||||
// dir does not exist. | // dir does not exist. | ||||
channel.mkdir(remotePath); | channel.mkdir(remotePath); | ||||
@@ -164,20 +165,20 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
} | } | ||||
} | } | ||||
channel.cd(remotePath); | channel.cd(remotePath); | ||||
} catch (SftpException e) { | |||||
} catch (final SftpException e) { | |||||
throw new JSchException("Could not CD to '" + remotePath | throw new JSchException("Could not CD to '" + remotePath | ||||
+ "' - " + e.toString(), e); | + "' - " + e.toString(), e); | ||||
} | } | ||||
Directory current = null; | Directory current = null; | ||||
try { | try { | ||||
for (Iterator i = directoryList.iterator(); i.hasNext();) { | |||||
for (final Iterator i = directoryList.iterator(); i.hasNext();) { | |||||
current = (Directory) i.next(); | current = (Directory) i.next(); | ||||
if (getVerbose()) { | if (getVerbose()) { | ||||
log("Sending directory " + current); | log("Sending directory " + current); | ||||
} | } | ||||
sendDirectory(channel, current); | sendDirectory(channel, current); | ||||
} | } | ||||
} catch (SftpException e) { | |||||
} catch (final SftpException e) { | |||||
String msg = "Error sending directory"; | String msg = "Error sending directory"; | ||||
if (current != null && current.getDirectory() != null) { | if (current != null && current.getDirectory() != null) { | ||||
msg += " '" + current.getDirectory().getName() + "'"; | msg += " '" + current.getDirectory().getName() + "'"; | ||||
@@ -191,25 +192,25 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
} | } | ||||
} | } | ||||
private void sendDirectory(ChannelSftp channel, | |||||
Directory current) | |||||
private void sendDirectory(final ChannelSftp channel, | |||||
final Directory current) | |||||
throws IOException, SftpException { | throws IOException, SftpException { | ||||
for (Iterator fileIt = current.filesIterator(); fileIt.hasNext();) { | |||||
for (final Iterator fileIt = current.filesIterator(); fileIt.hasNext();) { | |||||
sendFileToRemote(channel, (File) fileIt.next(), null); | sendFileToRemote(channel, (File) fileIt.next(), null); | ||||
} | } | ||||
for (Iterator dirIt = current.directoryIterator(); dirIt.hasNext();) { | |||||
Directory dir = (Directory) dirIt.next(); | |||||
for (final Iterator dirIt = current.directoryIterator(); dirIt.hasNext();) { | |||||
final Directory dir = (Directory) dirIt.next(); | |||||
sendDirectoryToRemote(channel, dir); | sendDirectoryToRemote(channel, dir); | ||||
} | } | ||||
} | } | ||||
private void sendDirectoryToRemote(ChannelSftp channel, | |||||
Directory directory) | |||||
private void sendDirectoryToRemote(final ChannelSftp channel, | |||||
final Directory directory) | |||||
throws IOException, SftpException { | throws IOException, SftpException { | ||||
String dir = directory.getDirectory().getName(); | |||||
final String dir = directory.getDirectory().getName(); | |||||
try { | try { | ||||
channel.stat(dir); | channel.stat(dir); | ||||
} catch (SftpException e) { | |||||
} catch (final SftpException e) { | |||||
// dir does not exist. | // dir does not exist. | ||||
if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { | if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { | ||||
channel.mkdir(dir); | channel.mkdir(dir); | ||||
@@ -220,21 +221,21 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
channel.cd(".."); | channel.cd(".."); | ||||
} | } | ||||
private void sendFileToRemote(ChannelSftp channel, | |||||
File localFile, | |||||
private void sendFileToRemote(final ChannelSftp channel, | |||||
final File localFile, | |||||
String remotePath) | String remotePath) | ||||
throws IOException, SftpException { | throws IOException, SftpException { | ||||
long filesize = localFile.length(); | |||||
final long filesize = localFile.length(); | |||||
if (remotePath == null) { | if (remotePath == null) { | ||||
remotePath = localFile.getName(); | remotePath = localFile.getName(); | ||||
} | } | ||||
long startTime = System.currentTimeMillis(); | |||||
long totalLength = filesize; | |||||
final long startTime = System.currentTimeMillis(); | |||||
final long totalLength = filesize; | |||||
// only track progress for files larger than 100kb in verbose mode | // only track progress for files larger than 100kb in verbose mode | ||||
boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
final boolean trackProgress = getVerbose() && filesize > HUNDRED_KILOBYTES; | |||||
SftpProgressMonitor monitor = null; | SftpProgressMonitor monitor = null; | ||||
if (trackProgress) { | if (trackProgress) { | ||||
@@ -248,7 +249,7 @@ public class ScpToMessageBySftp extends ScpToMessage/*AbstractSshMessage*/ { | |||||
channel.put(localFile.getAbsolutePath(), remotePath, monitor); | channel.put(localFile.getAbsolutePath(), remotePath, monitor); | ||||
} finally { | } finally { | ||||
if (this.getVerbose()) { | if (this.getVerbose()) { | ||||
long endTime = System.currentTimeMillis(); | |||||
final long endTime = System.currentTimeMillis(); | |||||
logStats(startTime, endTime, (int) totalLength); | logStats(startTime, endTime, (int) totalLength); | ||||
} | } | ||||
} | } | ||||
@@ -18,9 +18,10 @@ | |||||
package org.apache.tools.ant.types.resolver; | package org.apache.tools.ant.types.resolver; | ||||
import com.sun.org.apache.xml.internal.resolver.Catalog; | |||||
import com.sun.org.apache.xml.internal.resolver.CatalogEntry; | |||||
import com.sun.org.apache.xml.internal.resolver.helpers.PublicId; | |||||
import org.apache.xml.resolver.Catalog; | |||||
import org.apache.xml.resolver.CatalogEntry; | |||||
import org.apache.xml.resolver.helpers.PublicId; | |||||
/** | /** | ||||
* This class extends the Catalog class provided by Norman Walsh's | * This class extends the Catalog class provided by Norman Walsh's | ||||
@@ -54,7 +55,7 @@ public class ApacheCatalog extends Catalog { | |||||
* @return the catalog. | * @return the catalog. | ||||
*/ | */ | ||||
protected Catalog newCatalog() { | protected Catalog newCatalog() { | ||||
ApacheCatalog cat = (ApacheCatalog) super.newCatalog(); | |||||
final ApacheCatalog cat = (ApacheCatalog) super.newCatalog(); | |||||
cat.setResolver(resolver); | cat.setResolver(resolver); | ||||
return cat; | return cat; | ||||
} | } | ||||
@@ -63,7 +64,7 @@ public class ApacheCatalog extends Catalog { | |||||
* Set the resolver object to callback. | * Set the resolver object to callback. | ||||
* @param resolver the apache catalog resolver. | * @param resolver the apache catalog resolver. | ||||
*/ | */ | ||||
public void setResolver(ApacheCatalogResolver resolver) { | |||||
public void setResolver(final ApacheCatalogResolver resolver) { | |||||
this.resolver = resolver; | this.resolver = resolver; | ||||
} | } | ||||
@@ -84,14 +85,14 @@ public class ApacheCatalog extends Catalog { | |||||
* | * | ||||
* @param entry The CatalogEntry to process. | * @param entry The CatalogEntry to process. | ||||
*/ | */ | ||||
public void addEntry(CatalogEntry entry) { | |||||
public void addEntry(final CatalogEntry entry) { | |||||
int type = entry.getEntryType(); | |||||
final int type = entry.getEntryType(); | |||||
if (type == PUBLIC) { | if (type == PUBLIC) { | ||||
String publicid = PublicId.normalize(entry.getEntryArg(0)); | |||||
String systemid = normalizeURI(entry.getEntryArg(1)); | |||||
final String publicid = PublicId.normalize(entry.getEntryArg(0)); | |||||
final String systemid = normalizeURI(entry.getEntryArg(1)); | |||||
if (resolver == null) { | if (resolver == null) { | ||||
catalogManager.debug | catalogManager.debug | ||||
@@ -102,8 +103,8 @@ public class ApacheCatalog extends Catalog { | |||||
} else if (type == URI) { | } else if (type == URI) { | ||||
String uri = normalizeURI(entry.getEntryArg(0)); | |||||
String altURI = normalizeURI(entry.getEntryArg(1)); | |||||
final String uri = normalizeURI(entry.getEntryArg(0)); | |||||
final String altURI = normalizeURI(entry.getEntryArg(1)); | |||||
if (resolver == null) { | if (resolver == null) { | ||||
catalogManager.debug | catalogManager.debug | ||||
@@ -25,10 +25,10 @@ import java.net.URL; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.types.ResourceLocation; | import org.apache.tools.ant.types.ResourceLocation; | ||||
import org.apache.tools.ant.types.XMLCatalog; | import org.apache.tools.ant.types.XMLCatalog; | ||||
import org.apache.xml.resolver.Catalog; | |||||
import org.apache.xml.resolver.CatalogManager; | |||||
import org.apache.xml.resolver.tools.CatalogResolver; | |||||
import com.sun.org.apache.xml.internal.resolver.Catalog; | |||||
import com.sun.org.apache.xml.internal.resolver.CatalogManager; | |||||
import com.sun.org.apache.xml.internal.resolver.tools.CatalogResolver; | |||||
/** | /** | ||||
* <p>This class extends the CatalogResolver class provided by Norman | * <p>This class extends the CatalogResolver class provided by Norman | ||||
@@ -91,7 +91,7 @@ public class ApacheCatalogResolver extends CatalogResolver { | |||||
* Set the XMLCatalog object to callback. | * Set the XMLCatalog object to callback. | ||||
* @param xmlCatalog the XMLCatalog to use. | * @param xmlCatalog the XMLCatalog to use. | ||||
*/ | */ | ||||
public void setXMLCatalog(XMLCatalog xmlCatalog) { | |||||
public void setXMLCatalog(final XMLCatalog xmlCatalog) { | |||||
this.xmlCatalog = xmlCatalog; | this.xmlCatalog = xmlCatalog; | ||||
} | } | ||||
@@ -100,22 +100,22 @@ public class ApacheCatalogResolver extends CatalogResolver { | |||||
* file within a <code><catalogfiles></code> fileset. | * file within a <code><catalogfiles></code> fileset. | ||||
* @param file the external catalog file. | * @param file the external catalog file. | ||||
*/ | */ | ||||
public void parseCatalog(String file) { | |||||
public void parseCatalog(final String file) { | |||||
Catalog catalog = getCatalog(); | |||||
final Catalog catalog = getCatalog(); | |||||
if (!(catalog instanceof ApacheCatalog)) { | if (!(catalog instanceof ApacheCatalog)) { | ||||
throw new BuildException("Wrong catalog type found: " + catalog.getClass().getName()); | throw new BuildException("Wrong catalog type found: " + catalog.getClass().getName()); | ||||
} | } | ||||
ApacheCatalog apacheCatalog = (ApacheCatalog) catalog; | |||||
final ApacheCatalog apacheCatalog = (ApacheCatalog) catalog; | |||||
// Pass in reference to ourselves so we can be called back. | // Pass in reference to ourselves so we can be called back. | ||||
apacheCatalog.setResolver(this); | apacheCatalog.setResolver(this); | ||||
try { | try { | ||||
apacheCatalog.parseCatalog(file); | apacheCatalog.parseCatalog(file); | ||||
} catch (MalformedURLException ex) { | |||||
} catch (final MalformedURLException ex) { | |||||
throw new BuildException(ex); | throw new BuildException(ex); | ||||
} catch (IOException ex) { | |||||
} catch (final IOException ex) { | |||||
throw new BuildException(ex); | throw new BuildException(ex); | ||||
} | } | ||||
} | } | ||||
@@ -133,11 +133,11 @@ public class ApacheCatalogResolver extends CatalogResolver { | |||||
* directory in which the catalog is located. | * directory in which the catalog is located. | ||||
* | * | ||||
*/ | */ | ||||
public void addPublicEntry(String publicid, | |||||
String systemid, | |||||
URL base) { | |||||
public void addPublicEntry(final String publicid, | |||||
final String systemid, | |||||
final URL base) { | |||||
ResourceLocation dtd = new ResourceLocation(); | |||||
final ResourceLocation dtd = new ResourceLocation(); | |||||
dtd.setBase(base); | dtd.setBase(base); | ||||
dtd.setPublicId(publicid); | dtd.setPublicId(publicid); | ||||
dtd.setLocation(systemid); | dtd.setLocation(systemid); | ||||
@@ -159,11 +159,11 @@ public class ApacheCatalogResolver extends CatalogResolver { | |||||
* directory in which the catalog is located. | * directory in which the catalog is located. | ||||
* | * | ||||
*/ | */ | ||||
public void addURIEntry(String uri, | |||||
String altURI, | |||||
URL base) { | |||||
public void addURIEntry(final String uri, | |||||
final String altURI, | |||||
final URL base) { | |||||
ResourceLocation entity = new ResourceLocation(); | |||||
final ResourceLocation entity = new ResourceLocation(); | |||||
entity.setBase(base); | entity.setBase(base); | ||||
entity.setPublicId(uri); | entity.setPublicId(uri); | ||||
entity.setLocation(altURI); | entity.setLocation(altURI); | ||||
@@ -23,7 +23,11 @@ import java.util.StringTokenizer; | |||||
import com.sun.org.apache.bcel.internal.classfile.ConstantClass; | import com.sun.org.apache.bcel.internal.classfile.ConstantClass; | ||||
import com.sun.org.apache.bcel.internal.classfile.ConstantNameAndType; | import com.sun.org.apache.bcel.internal.classfile.ConstantNameAndType; | ||||
import com.sun.org.apache.bcel.internal.classfile.ConstantPool; | |||||
import com.sun.org.apache.bcel.internal.classfile.EmptyVisitor; | |||||
import com.sun.org.apache.bcel.internal.classfile.Field; | |||||
import com.sun.org.apache.bcel.internal.classfile.JavaClass; | import com.sun.org.apache.bcel.internal.classfile.JavaClass; | ||||
import com.sun.org.apache.bcel.internal.classfile.Method; | |||||
/** | /** | ||||
* A BCEL visitor implementation to collect class dependency information | * A BCEL visitor implementation to collect class dependency information | ||||
@@ -31,7 +35,7 @@ import com.sun.org.apache.bcel.internal.classfile.JavaClass; | |||||
*/ | */ | ||||
public class DependencyVisitor extends EmptyVisitor { | public class DependencyVisitor extends EmptyVisitor { | ||||
/** The collected dependencies */ | /** The collected dependencies */ | ||||
private Hashtable<String, String> dependencies = new Hashtable<String, String>(); | |||||
private final Hashtable<String, String> dependencies = new Hashtable<String, String>(); | |||||
/** | /** | ||||
* The current class's constant pool - used to determine class names | * The current class's constant pool - used to determine class names | ||||
* from class references. | * from class references. | ||||
@@ -58,7 +62,7 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param constantPool the constant pool of the class being visited. | * @param constantPool the constant pool of the class being visited. | ||||
*/ | */ | ||||
public void visitConstantPool(ConstantPool constantPool) { | |||||
public void visitConstantPool(final ConstantPool constantPool) { | |||||
this.constantPool = constantPool; | this.constantPool = constantPool; | ||||
} | } | ||||
@@ -67,8 +71,8 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param constantClass the constantClass entry for the class reference | * @param constantClass the constantClass entry for the class reference | ||||
*/ | */ | ||||
public void visitConstantClass(ConstantClass constantClass) { | |||||
String classname | |||||
public void visitConstantClass(final ConstantClass constantClass) { | |||||
final String classname | |||||
= constantClass.getConstantValue(constantPool).toString(); | = constantClass.getConstantValue(constantPool).toString(); | ||||
addSlashClass(classname); | addSlashClass(classname); | ||||
} | } | ||||
@@ -80,18 +84,18 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param obj the name and type reference being visited. | * @param obj the name and type reference being visited. | ||||
*/ | */ | ||||
public void visitConstantNameAndType(ConstantNameAndType obj) { | |||||
String name = obj.getName(constantPool); | |||||
public void visitConstantNameAndType(final ConstantNameAndType obj) { | |||||
final String name = obj.getName(constantPool); | |||||
if (obj.getSignature(constantPool).equals("Ljava/lang/Class;") | if (obj.getSignature(constantPool).equals("Ljava/lang/Class;") | ||||
&& name.startsWith("class$")) { | && name.startsWith("class$")) { | ||||
String classname | String classname | ||||
= name.substring("class$".length()).replace('$', '.'); | = name.substring("class$".length()).replace('$', '.'); | ||||
// does the class have a package structure | // does the class have a package structure | ||||
int index = classname.lastIndexOf("."); | |||||
final int index = classname.lastIndexOf("."); | |||||
if (index > 0) { | if (index > 0) { | ||||
char start; | char start; | ||||
// check if the package structure is more than 1 level deep | // check if the package structure is more than 1 level deep | ||||
int index2 = classname.lastIndexOf(".", index - 1); | |||||
final int index2 = classname.lastIndexOf(".", index - 1); | |||||
if (index2 != -1) { | if (index2 != -1) { | ||||
// class name has more than 1 package level 'com.company.Class' | // class name has more than 1 package level 'com.company.Class' | ||||
start = classname.charAt(index2 + 1); | start = classname.charAt(index2 + 1); | ||||
@@ -124,7 +128,7 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param field the field being visited | * @param field the field being visited | ||||
*/ | */ | ||||
public void visitField(Field field) { | |||||
public void visitField(final Field field) { | |||||
addClasses(field.getSignature()); | addClasses(field.getSignature()); | ||||
} | } | ||||
@@ -133,7 +137,7 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param javaClass the class being visited. | * @param javaClass the class being visited. | ||||
*/ | */ | ||||
public void visitJavaClass(JavaClass javaClass) { | |||||
public void visitJavaClass(final JavaClass javaClass) { | |||||
addClass(javaClass.getClassName()); | addClass(javaClass.getClassName()); | ||||
} | } | ||||
@@ -142,9 +146,9 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param method the method being visited. | * @param method the method being visited. | ||||
*/ | */ | ||||
public void visitMethod(Method method) { | |||||
String signature = method.getSignature(); | |||||
int pos = signature.indexOf(")"); | |||||
public void visitMethod(final Method method) { | |||||
final String signature = method.getSignature(); | |||||
final int pos = signature.indexOf(")"); | |||||
addClasses(signature.substring(1, pos)); | addClasses(signature.substring(1, pos)); | ||||
addClasses(signature.substring(pos + 1)); | addClasses(signature.substring(pos + 1)); | ||||
} | } | ||||
@@ -154,7 +158,7 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param classname the class to be added to the list of dependencies. | * @param classname the class to be added to the list of dependencies. | ||||
*/ | */ | ||||
void addClass(String classname) { | |||||
void addClass(final String classname) { | |||||
dependencies.put(classname, classname); | dependencies.put(classname, classname); | ||||
} | } | ||||
@@ -164,11 +168,11 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* @param string the descriptor string, being descriptors separated by | * @param string the descriptor string, being descriptors separated by | ||||
* ';' characters. | * ';' characters. | ||||
*/ | */ | ||||
private void addClasses(String string) { | |||||
StringTokenizer tokens = new StringTokenizer(string, ";"); | |||||
private void addClasses(final String string) { | |||||
final StringTokenizer tokens = new StringTokenizer(string, ";"); | |||||
while (tokens.hasMoreTokens()) { | while (tokens.hasMoreTokens()) { | ||||
String descriptor = tokens.nextToken(); | |||||
int pos = descriptor.indexOf('L'); | |||||
final String descriptor = tokens.nextToken(); | |||||
final int pos = descriptor.indexOf('L'); | |||||
if (pos != -1) { | if (pos != -1) { | ||||
addSlashClass(descriptor.substring(pos + 1)); | addSlashClass(descriptor.substring(pos + 1)); | ||||
} | } | ||||
@@ -181,7 +185,7 @@ public class DependencyVisitor extends EmptyVisitor { | |||||
* | * | ||||
* @param classname the class name in slash format | * @param classname the class name in slash format | ||||
*/ | */ | ||||
private void addSlashClass(String classname) { | |||||
private void addSlashClass(final String classname) { | |||||
addClass(classname.replace('/', '.')); | addClass(classname.replace('/', '.')); | ||||
} | } | ||||
} | } | ||||
@@ -19,12 +19,14 @@ | |||||
package org.apache.tools.ant.util.regexp; | package org.apache.tools.ant.util.regexp; | ||||
import java.util.Vector; | import java.util.Vector; | ||||
import java.util.regex.MatchResult; | |||||
import org.apache.oro.text.regex.MatchResult; | |||||
import org.apache.oro.text.regex.Pattern; | |||||
import org.apache.oro.text.regex.Perl5Compiler; | import org.apache.oro.text.regex.Perl5Compiler; | ||||
import org.apache.oro.text.regex.Perl5Matcher; | import org.apache.oro.text.regex.Perl5Matcher; | ||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
/** | /** | ||||
* Implementation of RegexpMatcher for Jakarta-ORO. | * Implementation of RegexpMatcher for Jakarta-ORO. | ||||
* | * | ||||
@@ -47,7 +49,7 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* Set the regexp pattern from the String description. | * Set the regexp pattern from the String description. | ||||
* @param pattern the pattern to match | * @param pattern the pattern to match | ||||
*/ | */ | ||||
public void setPattern(String pattern) { | |||||
public void setPattern(final String pattern) { | |||||
this.pattern = pattern; | this.pattern = pattern; | ||||
} | } | ||||
@@ -65,13 +67,13 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @return the compiled pattern | * @return the compiled pattern | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
protected Pattern getCompiledPattern(int options) | |||||
protected Pattern getCompiledPattern(final int options) | |||||
throws BuildException { | throws BuildException { | ||||
try { | try { | ||||
// compute the compiler options based on the input options first | // compute the compiler options based on the input options first | ||||
Pattern p = compiler.compile(pattern, getCompilerOptions(options)); | |||||
final Pattern p = compiler.compile(pattern, getCompilerOptions(options)); | |||||
return p; | return p; | ||||
} catch (Exception e) { | |||||
} catch (final Exception e) { | |||||
throw new BuildException(e); | throw new BuildException(e); | ||||
} | } | ||||
} | } | ||||
@@ -82,7 +84,7 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @return true if the pattern matches | * @return true if the pattern matches | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
public boolean matches(String argument) throws BuildException { | |||||
public boolean matches(final String argument) throws BuildException { | |||||
return matches(argument, MATCH_DEFAULT); | return matches(argument, MATCH_DEFAULT); | ||||
} | } | ||||
@@ -93,9 +95,9 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @return true if the pattern matches | * @return true if the pattern matches | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
public boolean matches(String input, int options) | |||||
public boolean matches(final String input, final int options) | |||||
throws BuildException { | throws BuildException { | ||||
Pattern p = getCompiledPattern(options); | |||||
final Pattern p = getCompiledPattern(options); | |||||
return matcher.contains(input, p); | return matcher.contains(input, p); | ||||
} | } | ||||
@@ -110,7 +112,7 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @return the vector of groups | * @return the vector of groups | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
public Vector getGroups(String argument) throws BuildException { | |||||
public Vector getGroups(final String argument) throws BuildException { | |||||
return getGroups(argument, MATCH_DEFAULT); | return getGroups(argument, MATCH_DEFAULT); | ||||
} | } | ||||
@@ -125,14 +127,14 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @return the vector of groups | * @return the vector of groups | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
public Vector getGroups(String input, int options) | |||||
public Vector getGroups(final String input, final int options) | |||||
throws BuildException { | throws BuildException { | ||||
if (!matches(input, options)) { | if (!matches(input, options)) { | ||||
return null; | return null; | ||||
} | } | ||||
Vector v = new Vector(); | |||||
MatchResult mr = matcher.getMatch(); | |||||
int cnt = mr.groups(); | |||||
final Vector v = new Vector(); | |||||
final MatchResult mr = matcher.getMatch(); | |||||
final int cnt = mr.groups(); | |||||
for (int i = 0; i < cnt; i++) { | for (int i = 0; i < cnt; i++) { | ||||
String match = mr.group(i); | String match = mr.group(i); | ||||
// treat non-matching groups as empty matches | // treat non-matching groups as empty matches | ||||
@@ -149,7 +151,7 @@ public class JakartaOroMatcher implements RegexpMatcher { | |||||
* @param options the generic options | * @param options the generic options | ||||
* @return the specific options | * @return the specific options | ||||
*/ | */ | ||||
protected int getCompilerOptions(int options) { | |||||
protected int getCompilerOptions(final int options) { | |||||
int cOptions = Perl5Compiler.DEFAULT_MASK; | int cOptions = Perl5Compiler.DEFAULT_MASK; | ||||
if (RegexpUtil.hasFlag(options, MATCH_CASE_INSENSITIVE)) { | if (RegexpUtil.hasFlag(options, MATCH_CASE_INSENSITIVE)) { | ||||
@@ -18,6 +18,8 @@ | |||||
package org.apache.tools.ant.util.regexp; | package org.apache.tools.ant.util.regexp; | ||||
import org.apache.oro.text.regex.Perl5Substitution; | import org.apache.oro.text.regex.Perl5Substitution; | ||||
import org.apache.oro.text.regex.Substitution; | |||||
import org.apache.oro.text.regex.Util; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
/*** | /*** | ||||
@@ -40,10 +42,10 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||||
* @return the result of the operation | * @return the result of the operation | ||||
* @throws BuildException on error | * @throws BuildException on error | ||||
*/ | */ | ||||
public String substitute(String input, String argument, int options) | |||||
public String substitute(final String input, final String argument, final int options) | |||||
throws BuildException { | throws BuildException { | ||||
// translate \1 to $1 so that the Perl5Substitution will work | // translate \1 to $1 so that the Perl5Substitution will work | ||||
StringBuffer subst = new StringBuffer(); | |||||
final StringBuffer subst = new StringBuffer(); | |||||
for (int i = 0; i < argument.length(); i++) { | for (int i = 0; i < argument.length(); i++) { | ||||
char c = argument.charAt(i); | char c = argument.charAt(i); | ||||
if (c == '$') { | if (c == '$') { | ||||
@@ -52,7 +54,7 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||||
} else if (c == '\\') { | } else if (c == '\\') { | ||||
if (++i < argument.length()) { | if (++i < argument.length()) { | ||||
c = argument.charAt(i); | c = argument.charAt(i); | ||||
int value = Character.digit(c, DECIMAL); | |||||
final int value = Character.digit(c, DECIMAL); | |||||
if (value > -1) { | if (value > -1) { | ||||
subst.append("$").append(value); | subst.append("$").append(value); | ||||
} else { | } else { | ||||
@@ -68,7 +70,7 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||||
} | } | ||||
// Do the substitution | // Do the substitution | ||||
Substitution s = | |||||
final Substitution s = | |||||
new Perl5Substitution(subst.toString(), | new Perl5Substitution(subst.toString(), | ||||
Perl5Substitution.INTERPOLATE_ALL); | Perl5Substitution.INTERPOLATE_ALL); | ||||
return Util.substitute(matcher, | return Util.substitute(matcher, | ||||
@@ -84,8 +86,8 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp { | |||||
* @param options the ant regexp options | * @param options the ant regexp options | ||||
* @return the oro substition options | * @return the oro substition options | ||||
*/ | */ | ||||
protected int getSubsOptions(int options) { | |||||
boolean replaceAll = RegexpUtil.hasFlag(options, REPLACE_ALL); | |||||
protected int getSubsOptions(final int options) { | |||||
final boolean replaceAll = RegexpUtil.hasFlag(options, REPLACE_ALL); | |||||
int subsOptions = 1; | int subsOptions = 1; | ||||
if (replaceAll) { | if (replaceAll) { | ||||
subsOptions = Util.SUBSTITUTE_ALL; | subsOptions = Util.SUBSTITUTE_ALL; | ||||