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); | |||
} | |||
} |