git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@797496 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -307,6 +307,7 @@ Tom Cunningham | |||
| Tom Dimock | |||
| Tom Eugelink | |||
| Tom May | |||
| Tomasz Bech | |||
| Trejkaz Xaoza | |||
| Ulrich Schmidt | |||
| Victor Toni | |||
| @@ -804,6 +804,10 @@ Other changes: | |||
| the http condition. | |||
| Bugzilla Report 30244 | |||
| * <splash> now supports a configurable display text and a regular | |||
| expression based way to determine progress based on logged messages. | |||
| Bugzilla Report 39957. | |||
| Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
| ============================================= | |||
| @@ -1243,6 +1243,10 @@ | |||
| <first>Tom</first> | |||
| <last>May</last> | |||
| </name> | |||
| <name> | |||
| <first>Tomasz</first> | |||
| <last>Bech</last> | |||
| </name> | |||
| <name> | |||
| <first>Trejkaz</first> | |||
| <last>Xaoz</last> | |||
| @@ -52,10 +52,28 @@ whilst waiting for your builds to complete...</p> | |||
| splash in milliseconds.</td> | |||
| <td valign="top" align="center">No</td> | |||
| <td valign="top" align="center">5000 ms</td> | |||
| </tr> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">progressregexp</td> | |||
| <td valign="top">Progress regular expression which is used to | |||
| parse the output and dig out current progress. Exactly one group | |||
| pattern must exists, and it represents the progress number (0-100) | |||
| (i.e "Progress: (.*)%")<br/> | |||
| <em>since Ant 1.8.0</em></td> | |||
| <td valign="top" align="center">No</td> | |||
| <td valign="top" align="center">progress is increased every action | |||
| and log output line</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">displaytext</td> | |||
| <td valign="top">display text presented in the splash window<br/> | |||
| <em>since Ant 1.8.0</em></td> | |||
| <td valign="top" align="center">No</td> | |||
| <td valign="top" align="center">Building ...</td> | |||
| </tr> | |||
| </table> | |||
| <h3>Deprecated properties</h3> | |||
| The following properties can be used to configure the proxy settings to retrieve | |||
| an image from behind a firewall. However, the settings apply not just to this | |||
| task, but to all following tasks. Therefore they are now mostly deprecated in | |||
| @@ -63,7 +81,7 @@ preference to the <code><setproxy></code> task, that makes it clear to rea | |||
| the build exactly what is going on. We say mostly as this task's support | |||
| includes proxy authentication, so you may still need to use its | |||
| proxy attributes. | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| <td valign="top">useproxy</td> | |||
| @@ -110,8 +128,27 @@ proxy attributes. | |||
| showduration="5000"/> | |||
| </pre></blockquote> | |||
| <p>Splashes the jakarta logo, for | |||
| an initial period of 5 seconds.</p> | |||
| <p>Splashes the jakarta logo, for an initial period of 5 seconds.</p> | |||
| <p>Splash with controlled progress and nondefault text</p> | |||
| <blockquote><pre> | |||
| <target name="test_new_features"> | |||
| <echo>New features</echo> | |||
| <splash progressRegExp="Progress: (.*)%" showduration="0" displayText="Test text"/> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 10%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 20%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 50%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 70%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 100%</echo> | |||
| <sleep seconds="3"/> | |||
| </target> | |||
| </pre></blockquote> | |||
| </body> | |||
| @@ -0,0 +1,45 @@ | |||
| <?xml version="1.0"?> | |||
| <!-- | |||
| 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. | |||
| --> | |||
| <project default="test_new_features" name="splash-test" basedir="."> | |||
| <target name="test_old_behaviour"> | |||
| <echo>Old behaviour</echo> | |||
| <splash showduration="0"/> | |||
| <sleep seconds="1"/> | |||
| <sleep seconds="1"/> | |||
| <sleep seconds="1"/> | |||
| <sleep seconds="1"/> | |||
| <sleep seconds="1"/> | |||
| </target> | |||
| <target name="test_new_features"> | |||
| <echo>New features</echo> | |||
| <splash progressregexp="Progress: (.*)%" showduration="0" displayText="Test text"/> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 10%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 20%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 50%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 70%</echo> | |||
| <sleep seconds="1"/> | |||
| <echo>Progress: 100%</echo> | |||
| <sleep seconds="3"/> | |||
| </target> | |||
| </project> | |||
| @@ -25,6 +25,9 @@ import java.awt.Font; | |||
| import java.awt.Toolkit; | |||
| import java.awt.event.ActionEvent; | |||
| import java.awt.event.ActionListener; | |||
| import java.util.regex.Matcher; | |||
| import java.util.regex.Pattern; | |||
| import javax.swing.BorderFactory; | |||
| import javax.swing.ImageIcon; | |||
| import javax.swing.JLabel; | |||
| @@ -41,17 +44,35 @@ class SplashScreen extends JWindow implements ActionListener, BuildListener { | |||
| private int total; | |||
| private static final int MIN = 0; | |||
| private static final int MAX = 200; | |||
| private Pattern progressRegExpPattern; | |||
| public SplashScreen(String msg) { | |||
| init(null); | |||
| setText(msg); | |||
| this(msg, null, null); | |||
| } | |||
| public SplashScreen(ImageIcon img) { | |||
| init(img); | |||
| this(img, null, null); | |||
| } | |||
| public SplashScreen(String msg, String progressRegExp, String displayText) { | |||
| init(null, progressRegExp, displayText); | |||
| setText(msg); | |||
| } | |||
| public SplashScreen(ImageIcon img, String progressRegExp, | |||
| String displayText) { | |||
| init(img, progressRegExp, displayText); | |||
| } | |||
| protected void init(ImageIcon img) { | |||
| init(img, null, null); | |||
| } | |||
| protected void init(ImageIcon img, String progressRegExp, | |||
| String displayText) { | |||
| if (progressRegExp != null) { | |||
| progressRegExpPattern = Pattern.compile(progressRegExp); | |||
| } | |||
| JPanel pan = (JPanel) getContentPane(); | |||
| JLabel piccy; | |||
| @@ -62,7 +83,10 @@ class SplashScreen extends JWindow implements ActionListener, BuildListener { | |||
| } | |||
| piccy.setBorder(BorderFactory.createLineBorder(Color.black, 1)); | |||
| text = new JLabel("Building....", JLabel.CENTER); | |||
| if (displayText == null) { | |||
| displayText = "Building...."; | |||
| } | |||
| text = new JLabel(displayText, JLabel.CENTER); | |||
| text.setFont(new Font("Sans-Serif", Font.BOLD, FONT_SIZE)); | |||
| text.setBorder(BorderFactory.createEtchedBorder()); | |||
| @@ -94,12 +118,14 @@ class SplashScreen extends JWindow implements ActionListener, BuildListener { | |||
| } | |||
| public void actionPerformed(ActionEvent a) { | |||
| if (total < MAX) { | |||
| total++; | |||
| } else { | |||
| total = MIN; | |||
| if (!hasProgressPattern()) { | |||
| if (total < MAX) { | |||
| total++; | |||
| } else { | |||
| total = MIN; | |||
| } | |||
| pb.setValue(total); | |||
| } | |||
| pb.setValue(total); | |||
| } | |||
| public void buildStarted(BuildEvent event) { | |||
| @@ -129,6 +155,26 @@ class SplashScreen extends JWindow implements ActionListener, BuildListener { | |||
| public void messageLogged(BuildEvent event) { | |||
| actionPerformed(null); | |||
| if (hasProgressPattern()) { | |||
| String message = event.getMessage(); | |||
| Matcher matcher = progressRegExpPattern.matcher(message); | |||
| if (matcher != null && matcher.matches()) { | |||
| String gr = matcher.group(1); | |||
| try { | |||
| int i = Math.min(new Integer(gr).intValue() * 2, MAX); | |||
| pb.setValue(i); | |||
| } catch (NumberFormatException e) { | |||
| //TODO: how to reach logger?!? | |||
| //log("Number parsing error in progressRegExp", Project.MSG_VERBOSE); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| protected boolean hasProgressPattern() { | |||
| return progressRegExpPattern != null; | |||
| } | |||
| } | |||
| @@ -47,6 +47,8 @@ public class SplashTask extends Task { | |||
| 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; | |||
| @@ -112,6 +114,29 @@ public class SplashTask extends Task { | |||
| } | |||
| /** | |||
| * 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 | |||
| @@ -201,7 +226,7 @@ public class SplashTask extends Task { | |||
| try { | |||
| ImageIcon img = new ImageIcon(bout.toByteArray()); | |||
| splash = new SplashScreen(img); | |||
| splash = new SplashScreen(img, progressRegExp, displayText); | |||
| success = true; | |||
| } catch (Throwable e) { | |||
| logHeadless(e); | |||
| @@ -221,7 +246,8 @@ public class SplashTask extends Task { | |||
| } | |||
| } else { | |||
| try { | |||
| splash = new SplashScreen("Image Unavailable."); | |||
| splash = new SplashScreen("Image Unavailable.", progressRegExp, | |||
| displayText); | |||
| success = true; | |||
| } catch (Throwable e) { | |||
| logHeadless(e); | |||
| @@ -245,4 +271,5 @@ public class SplashTask extends Task { | |||
| + e.getClass().getName() + " with message: " + e.getMessage(), | |||
| Project.MSG_WARN); | |||
| } | |||
| } | |||