buildframework/helium/sf/java/legacy/src/com/nokia/ant/taskdefs/AntConfigurationTask.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 587 85df38eb4012
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
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;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    23
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    24
import org.apache.commons.configuration.Configuration;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    25
import org.apache.commons.configuration.ConfigurationException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    26
import org.apache.commons.configuration.PropertiesConfiguration;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 587
diff changeset
    27
import org.apache.commons.configuration.XMLConfiguration;
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    28
import org.apache.tools.ant.BuildException;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
import org.apache.tools.ant.Task;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
import org.apache.tools.ant.types.FileSet;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
import org.apache.tools.ant.types.ResourceCollection;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
import org.apache.tools.ant.types.resources.FileResource;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
 * Can load ant configuration file both in .xml and .txt format.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
 * In .txt file configuration could be defined like -
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
 * text.a = text.value.A
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
 * text.b : text.value.B
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
 * text.c : ${text.a}
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
 * In .xml file configuration could be defined like -
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
 * <config>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
 *   <foo>bar</foo>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
 *   <interpolated>foo value = ${foo}</interpolated>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
 *    <xml>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
 *        <c>C</c>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
 *        <d>D</d>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
 *    </xml>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
 *    <array>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
 *        <value>one</value>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
 *        <value>two</value>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
 *    </array>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
 *</config> 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
 * @ant.task name="configuration"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
*/
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
public class AntConfigurationTask extends Task
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
{
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
    private File filepath;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
    private ArrayList<ResourceCollection> rcs = new ArrayList<ResourceCollection>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    public final void setFile(final File file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
        this.filepath = file;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    public final void addFileset(final FileSet set)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
        add(set);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    public final void add( final ResourceCollection res)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
        rcs.add(res);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
    public final void execute() 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    77
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    78
        if (filepath != null)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
            importFile(filepath);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    81
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
        else
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    83
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    84
            Iterator resourceCollectionIter = rcs.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    86
            while (resourceCollectionIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    88
                ResourceCollection resourceCollection = (ResourceCollection) resourceCollectionIter
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
                        .next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    90
                Iterator resourceIter = resourceCollection.iterator();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
                while (resourceIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
                {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
                    FileResource filepath = (FileResource) resourceIter.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    94
                    importFile(filepath.getFile());
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
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
    private void importFile(final File file)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
        try
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
            String filename = file.getName();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
            Configuration config = null;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
            if (filename.endsWith(".txt"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
                config = new PropertiesConfiguration(file);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
            else if (filename.endsWith(".xml"))
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
                config = new XMLConfiguration(file);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
            Iterator keysIter = config.getKeys();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
            while (keysIter.hasNext())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
            {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
                String key = (String) keysIter.next();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
                getProject().setProperty(key, config.getString(key));
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
        catch (ConfigurationException e)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
            throw new BuildException("Not able to import the ANT file " + e.getMessage());
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   126
}