diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java new file mode 100644 index 00000000..3a73bdf7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java @@ -0,0 +1,297 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs.optional.splash; + +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; + +import javax.swing.ImageIcon; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.optional.net.SetProxy; +import org.apache.tools.ant.util.Base64Converter; + +/** + * Creates a splash screen. The splash screen is displayed + * for the duration of the build and includes a handy progress bar as + * well. Use in conjunction with the sound task to provide interest + * whilst waiting for your builds to complete... + * @since Ant1.5 + */ +public class SplashTask extends Task { + private static final int DEFAULT_SHOW_DURATION = 5000; + + private String imgurl = null; + private String proxy = null; + private String user = null; + private String password = null; + private String port = "80"; + private int showDuration = DEFAULT_SHOW_DURATION; + private boolean useProxy = false; + private String progressRegExp = null; + private String displayText = null; + + private static SplashScreen splash = null; + + /** + * A URL pointing to an image to display; optional, default antlogo.gif + * from the classpath. + * @param imgurl the url string pointing to the image + */ + public void setImageURL(String imgurl) { + this.imgurl = imgurl; + } + + /** + * flag to enable proxy settings; optional, deprecated : consider + * using <setproxy> instead + * @param useProxy if ture, enable proxy settings + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.taskdefs.optional.net.SetProxy + */ + @Deprecated + public void setUseproxy(boolean useProxy) { + this.useProxy = useProxy; + } + + /** + * name of proxy; optional. + * @param proxy the name of the proxy host + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.taskdefs.optional.net.SetProxy + */ + @Deprecated + public void setProxy(String proxy) { + this.proxy = proxy; + } + + /** + * Proxy port; optional, default 80. + * @param port the proxy port + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.taskdefs.optional.net.SetProxy + */ + @Deprecated + public void setPort(String port) { + this.port = port; + } + + /** + * Proxy user; optional, default =none. + * @param user the proxy user + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.taskdefs.optional.net.SetProxy + */ + @Deprecated + public void setUser(String user) { + this.user = user; + } + + /** + * Proxy password; required if <tt>user</tt> is set. + * @param password the proxy password + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.taskdefs.optional.net.SetProxy + */ + @Deprecated + public void setPassword(String password) { + this.password = password; + } + + /** + * how long to show the splash screen in milliseconds, + * optional; default 5000 ms. + * @param duration the splash duration in milliseconds + */ + public void setShowduration(int duration) { + this.showDuration = duration; + } + + + /** + * Progress regular expression which is used to parse the output + * and dig out current progress optional; if not provided, + * progress is increased every action and log output line + * @param progressRegExp Progress regular expression, exactly one + * group pattern must exists, and it represents the progress + * number (0-100) (i.e "Progress: (.*)%") + * @since Ant 1.8.0 + */ + public void setProgressRegExp(String progressRegExp) { + this.progressRegExp = progressRegExp; + } + + /** + * Sets the display text presented in the splash window. + * optional; defaults to "Building ..." + * @param displayText the display text presented the splash window + * @since Ant 1.8.0 + */ + public void setDisplayText(String displayText) { + this.displayText = displayText; + } + + /** + * Execute the task. + * @throws BuildException on error + */ + @Override + public void execute() throws BuildException { + if (splash != null) { + splash.setVisible(false); + getProject().removeBuildListener(splash); + splash.dispose(); + splash = null; + } + + log("Creating new SplashScreen", Project.MSG_VERBOSE); + InputStream in = null; + + if (imgurl != null) { + try { + URLConnection conn = null; + + SetProxy sp = new SetProxy(); + sp.setProxyHost(proxy); + if (port != null) { + sp.setProxyPort(Integer.parseInt(port)); + } + sp.setProxyUser(user); + sp.setProxyPassword(password); + sp.applyWebProxySettings(); + + if (useProxy && (proxy != null && proxy.length() > 0) + && (port != null && port.length() > 0)) { + + log("Using proxied Connection", Project.MSG_DEBUG); + System.getProperties().put("http.proxySet", "true"); + + URL url = new URL(imgurl); + + conn = url.openConnection(); + if (user != null && user.length() > 0) { + // converted from sun internal classes to + // new Base64Converter + // utility class extracted from Get task + String encodedcreds = + new Base64Converter().encode(user + ":" + password); + conn.setRequestProperty("Proxy-Authorization", + encodedcreds); + } + + } else { + System.getProperties().put("http.proxySet", "false"); + log("Using Direction HTTP Connection", Project.MSG_DEBUG); + URL url = new URL(imgurl); + conn = url.openConnection(); + } + conn.setDoInput(true); + conn.setDoOutput(false); + + in = conn.getInputStream(); + + // Catch everything - some of the above return nulls, + // throw exceptions or generally misbehave + // in the event of a problem etc + + } catch (Throwable ioe) { + log("Unable to download image, trying default Ant Logo", + Project.MSG_DEBUG); + log("(Exception was \"" + ioe.getMessage() + "\"", + Project.MSG_DEBUG); + } + } + + if (in == null) { + ClassLoader cl = SplashTask.class.getClassLoader(); + if (cl != null) { + in = cl.getResourceAsStream("images/ant_logo_large.gif"); + } else { + in = ClassLoader + .getSystemResourceAsStream("images/ant_logo_large.gif"); + } + } + + boolean success = false; + if (in != null) { + DataInputStream din = new DataInputStream(in); + try { + ByteArrayOutputStream bout = new ByteArrayOutputStream(); + int data; + while ((data = din.read()) != -1) { + bout.write((byte) data); + } + + log("Got ByteArray, creating splash", Project.MSG_DEBUG); + + try { + ImageIcon img = new ImageIcon(bout.toByteArray()); + splash = new SplashScreen(img, progressRegExp, displayText); + success = true; + } catch (Throwable e) { + logHeadless(e); + } + } catch (Exception e) { + throw new BuildException(e); + } finally { + try { + din.close(); + } catch (IOException ioe) { + // swallow if there was an error before so that + // original error will be passed up + if (success) { + throw new BuildException(ioe); + } + } + } + } else { + try { + splash = new SplashScreen("Image Unavailable.", progressRegExp, + displayText); + success = true; + } catch (Throwable e) { + logHeadless(e); + } + } + + if (success) { + splash.setVisible(true); + splash.toFront(); + getProject().addBuildListener(splash); + try { + Thread.sleep(showDuration); + } catch (InterruptedException e) { + // Ignore Exception + } + } + } + + private void logHeadless(Throwable e) { + log("failed to display SplashScreen, caught " + + e.getClass().getName() + " with message: " + e.getMessage(), + Project.MSG_WARN); + } + +} |