buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntConfigurationTask.java
author wbernard
Tue, 27 Apr 2010 08:33:08 +0300
changeset 587 85df38eb4012
child 628 7c4a911dc066
permissions -rw-r--r--
helium_9.0-a7879c935424
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
* All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
* This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
* which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
* Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
* Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
* Description: 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.ant.taskdefs;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
import java.io.File;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.ArrayList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.util.Iterator;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
import org.apache.tools.ant.BuildException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    24
import org.apache.tools.ant.Task;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    25
import org.apache.tools.ant.types.FileSet;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    26
import org.apache.tools.ant.types.ResourceCollection;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    27
import org.apache.tools.ant.types.resources.FileResource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
import org.apache.commons.configuration.*;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
 * Can load ant configuration file both in .xml and .txt format.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
 * In .txt file configuration could be defined like -
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
 * text.a = text.value.A
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
 * text.b : text.value.B
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
 * text.c : ${text.a}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
 * In .xml file configuration could be defined like -
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
 * <config>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
 *   <foo>bar</foo>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
 *   <interpolated>foo value = ${foo}</interpolated>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
 *    <xml>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
 *        <c>C</c>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
 *        <d>D</d>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
 *    </xml>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
 *    <array>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
 *        <value>one</value>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
 *        <value>two</value>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 *    </array>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 *</config> 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 * @ant.task name="configuration"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
public class AntConfigurationTask extends Task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
{
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    private File filepath;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    private ArrayList<ResourceCollection> rcs = new ArrayList<ResourceCollection>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
    public final void setFile(final File file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
        this.filepath = file;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
    public final void addFileset(final FileSet set)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
        add(set);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    public final void add( final ResourceCollection res)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
        rcs.add(res);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    public final void execute() 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
        if (filepath != null)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
            importFile(filepath);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        else
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
            Iterator resourceCollectionIter = rcs.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
            while (resourceCollectionIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
                ResourceCollection resourceCollection = (ResourceCollection) resourceCollectionIter
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
                        .next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
                Iterator resourceIter = resourceCollection.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
                while (resourceIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
                {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
                    FileResource filepath = (FileResource) resourceIter.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
                    importFile(filepath.getFile());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
                }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    96
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
    private void importFile(final File file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
        try
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
            String filename = file.getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
            Configuration config = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
            if (filename.endsWith(".txt"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
                config = new PropertiesConfiguration(file);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
            else if (filename.endsWith(".xml"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
                config = new XMLConfiguration(file);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            Iterator keysIter = config.getKeys();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
            while (keysIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
                String key = (String) keysIter.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
                getProject().setProperty(key, config.getString(key));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
        catch (ConfigurationException e)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
            throw new BuildException("Not able to import the ANT file " + e.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
}