buildframework/helium/tools/common/java/src/com/nokia/ant/taskdefs/GetValueFromVariableSet.java
changeset 1 be27ed110b50
child 179 d8ac696cc51f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/tools/common/java/src/com/nokia/ant/taskdefs/GetValueFromVariableSet.java	Wed Oct 28 14:39:48 2009 +0000
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+package com.nokia.ant.taskdefs;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.Reference;
+import java.util.Iterator;
+import java.util.Vector;
+import com.nokia.ant.types.VariableSet;
+import com.nokia.ant.types.Variable;
+
+
+/**
+ * To retrive a variable value from a collection of variable set based on name, which contains property-value in pair.
+ *  
+ * <pre>
+ * Example:
+ * 
+ * &lt;hlm:argSet id="test.variableSet"&gt;
+ * &lt;variable name="v1" value="the_value_1"/&gt;
+ *     &lt;variable name="v2" value="the_value_2"/&gt;
+ *      &lt;variable name="v3" value="the_value_3"/&gt;
+ * &lt;/hlm:argSet&gt;
+ *       
+ *  &lt;hlm:getVariableValue name="v3" property="v1.value"&gt;
+ * &lt;hlm:argSet refid="test.variableSet"/&gt;
+ * &lt;/hlm:getVariableValue&gt;
+ * </pre>
+ * @ant.task name="getVariableValue"
+ */
+public class GetValueFromVariableSet extends Task {
+    private String name;
+    private String property;
+    private Vector<VariableSet> variablesets = new Vector<VariableSet>();
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void setProperty(String property) {
+        this.property = property;
+    }
+
+    public void add(VariableSet vs) {
+        variablesets.add(vs);
+    }
+
+    public VariableSet createVariableSet() {
+        VariableSet vs = new VariableSet();
+        variablesets.add(vs);
+        return vs;
+    }
+
+    public void execute() {
+        if (name == null)
+            throw new BuildException("'name' attribute has not been defined.");
+        if (property == null)
+            throw new BuildException(
+                    "'property' attribute has not been defined.");
+
+        for (Iterator<VariableSet> vsit = variablesets.iterator(); vsit
+                .hasNext();) {
+            VariableSet vs = vsit.next();
+            if (vs.isReference()) {
+                Reference reference = vs.getRefid();
+                vs = (VariableSet)reference.getReferencedObject(getProject());
+            }
+            for (Iterator vit = vs.getVariables().iterator(); vit.hasNext();) {
+                Variable v = (Variable) vit.next();
+                if (v.getName().equals(name)) {
+                    log("Setting '" + property + "' property to '" + v.getValue() + "'");
+                    getProject().setProperty(property, v.getValue());
+                    return;
+                }
+            }
+        }
+
+        throw new BuildException("Could not find '" + name + "' variable.");
+    }
+
+}