Subversion Repositories XServices

Rev

Rev 20 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 brianR 1
/*
2
 *   Copyright 2010 Brian Rosenberger (Brutex Network)
3
 *
4
 *   Licensed under the Apache License, Version 2.0 (the "License");
5
 *   you may not use this file except in compliance with the License.
6
 *   You may obtain a copy of the License at
7
 *
8
 *       http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 *   Unless required by applicable law or agreed to in writing, software
11
 *   distributed under the License is distributed on an "AS IS" BASIS,
12
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 *   See the License for the specific language governing permissions and
14
 *   limitations under the License.
15
 */
16
package net.brutex.xservices.util;
17
 
11 brianR 18
import java.io.ByteArrayOutputStream;
19
import java.io.PrintStream;
12 brianR 20
import java.util.HashMap;
6 brianR 21
import java.util.Map;
12 brianR 22
import net.brutex.xservices.types.AntProperty;
23
import net.brutex.xservices.types.ReturnCode;
6 brianR 24
import org.apache.tools.ant.BuildException;
25
import org.apache.tools.ant.Project;
26
import org.apache.tools.ant.Target;
27
import org.apache.tools.ant.Task;
11 brianR 28
import org.apache.tools.ant.listener.TimestampedLogger;
6 brianR 29
import org.apache.tools.ant.taskdefs.Echo;
30
 
31
/**
32
 *
33
 * @author Brian Rosenberger, bru@brutex.de
34
 */
35
public class RunTask {
36
 
37
    Project antproject;
38
    Target anttarget;
39
    Task anttask;
20 brianR 40
    ByteArrayOutputStream myout = new ByteArrayOutputStream();
41
    ByteArrayOutputStream myerr = new ByteArrayOutputStream();
42
    PrintStream out = new PrintStream(myout);
43
    PrintStream err = new PrintStream(myerr);
11 brianR 44
    TimestampedLogger log = null;
45
 
6 brianR 46
    public RunTask(Task anttask) {
47
 
48
        antproject = new Project();
49
        antproject.init();
50
        antproject.setBasedir(System.getProperty("java.io.tmpdir"));
11 brianR 51
        log = new TimestampedLogger();
20 brianR 52
        log.setOutputPrintStream(out);
53
        log.setErrorPrintStream(err);
18 brianR 54
        log.setMessageOutputLevel(Echo.EchoLevel.WARN.getLevel());
11 brianR 55
 
6 brianR 56
        antproject.addBuildListener(log);
12 brianR 57
 
6 brianR 58
        anttarget = new Target();
59
        anttarget.setName("XBridgeNGDynamicTarget");
60
        anttarget.setProject(antproject);
61
        antproject.addTarget(anttarget);
62
 
63
        this.anttask = anttask;
64
        prepareTask();
65
    }
66
 
67
    private void prepareTask()
68
            throws BuildException {
12 brianR 69
        anttask.init();
70
        anttask.setProject(antproject);
71
        anttask.setOwningTarget(anttarget);
72
        anttarget.addTask(anttask);
73
        antproject.addOrReplaceTarget(anttarget);
6 brianR 74
    }
75
 
12 brianR 76
    public ReturnCode postTask() {
77
        int returnCode = 0;
78
        Map<String, String> origMap = new HashMap<String, String>();
79
        Map<String, String> newMap = null;
80
        origMap.putAll(antproject.getProperties());
6 brianR 81
        try {
12 brianR 82
            antproject.executeTarget(anttarget.getName());
83
        } catch (BuildException ex) {
20 brianR 84
            err.print(ex.getMessage());
12 brianR 85
            returnCode = 1;
6 brianR 86
        }
12 brianR 87
        newMap = antproject.getProperties();
54 brianR 88
        newMap.putAll(antproject.getUserProperties());
89
 
12 brianR 90
        for (Map.Entry<String, String> e : origMap.entrySet()) {
91
            newMap.remove(e.getKey());
92
        }
93
 
11 brianR 94
        //anttask.execute();
12 brianR 95
        return new ReturnCode(returnCode,
20 brianR 96
                myout.toString(),
97
                myerr.toString(),
12 brianR 98
                AntProperty.createAntPropertyList(newMap));
99
 
6 brianR 100
    }
101
}