I prefer collecting all configuration errors and reporting them at once
over throwing a BuildException for each error. Ok Ant is not a GUI ....
I implemented a helper class for that - is it worth to introduce that
into Ant Core?


Jan



/**
 * @see <a
href="http://martinfowler.com/eaaDev/Notification.html";>Notification
Pattern</a>
 */
public class AntConfigurationChecker {
        List errors = new ArrayList();
        Task task;

        public AntConfigurationChecker(Task task) {
                this.task = task;
        }
        
        public void assertConfig(boolean bedingung, String
fehlermeldung) {
                if (bedingung) {
                        errors.add(fehlermeldung);
                }
        }
        
        public void fail(String fehlermeldung) {
                errors.add(fehlermeldung);
        }
        
        public void checkErrors() throws BuildException {
                if (!errors.isEmpty()) {
                        StringBuffer sb = new StringBuffer();
                        sb.append("Configuration error on <");
                        sb.append(task.getTaskName());
                        sb.append(">:");
                        sb.append(System.getProperty("line.separator"));
                        for (Iterator it = errors.iterator();
it.hasNext();) {
                                String msg = (String) it.next();
                                sb.append("- ");
                                sb.append(msg);
        
sb.append(System.getProperty("line.separator"));
                        }
                        throw new BuildException(sb.toString());
                }               
        }
}



public class MyTask {
        private void checkConfiguration() {
                AntConfigurationChecker checker = new
AntConfigurationChecker(this);
                checker.assertConfig(
                        xmlfile == null && txtfile == null,
                        "You have to specify one of 'txtfile' or
'xmlfile'.");
                checker.assertConfig(
                        release == null,
                        "You have to specify the 'release'.");
                checker.checkErrors();
        }
        public void execute() throws BuildException {
                checkConfiguration();
                ...
        }
}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to