--- a/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/legacy/src/com/nokia/ant/BuildStatusDef.java Fri Aug 13 14:59:05 2010 +0300
@@ -1,23 +1,22 @@
/*
-* 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:
-*
-*/
-
+ * 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;
-
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -31,48 +30,47 @@
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
+import org.apache.tools.ant.types.DataType;
import org.dom4j.Comment;
import org.dom4j.Document;
+import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Visitor;
import org.dom4j.VisitorSupport;
import org.dom4j.io.SAXReader;
-import org.dom4j.DocumentException;
-import com.nokia.helium.core.ant.types.HlmPostDefImpl;
-
+import com.nokia.helium.ant.data.PropertyCommentMeta;
import com.nokia.helium.ant.data.PropertyMeta;
-
+import com.nokia.helium.core.ant.PostBuildAction;
/**
* Class to store the status of the signal of a particular target.
*/
-public class BuildStatusDef extends HlmPostDefImpl
-{
+public class BuildStatusDef extends DataType implements PostBuildAction {
+ private static final String DEPRECATED = "deprecated:";
private HashSet<String> output = new HashSet<String>();
-
-
- public void execute(Project prj, String module, String[] targetNames)
- {
- //Run after targets execute so dynamic target names are resolved
- for (int i = 0; i < targetNames.length; i++)
- {
+
+ @Override
+ public void executeOnPostBuild(Project project, String[] targetNames) {
+ // Run after targets execute so dynamic target names are resolved
+ for (int i = 0; i < targetNames.length; i++) {
String[] array = { targetNames[i] };
Target target = findTarget(targetNames[i], getProject(), array);
targetCallsHeliumTarget(target, getProject());
}
checkTargetsProperties(getProject());
-
- if (!output.isEmpty())
- {
+ checkDeprecatedProperties(getProject());
+
+ if (!output.isEmpty()) {
log("*** Configuration report ***", Project.MSG_INFO);
- for (String outputStr : output)
+ for (String outputStr : output) {
log(outputStr, Project.MSG_INFO);
+ }
}
}
-
- /**
+
+ /**
* @param desiredTarget
* Target name to search
* @param project
@@ -82,8 +80,8 @@
*
*/
@SuppressWarnings("unchecked")
- public Target findTarget(String desiredTarget, Project project, String[] targetNames)
- {
+ public Target findTarget(String desiredTarget, Project project,
+ String[] targetNames) {
Hashtable<String, Target> targets;
Vector<Target> sorted;
@@ -94,100 +92,102 @@
sorted = project.topoSort(targetNames[0], targets);
// Find the desiredTarget Target object
- for (Target target : sorted)
- {
- if (target.getName().equals(desiredTarget))
- {
+ for (Target target : sorted) {
+ if (target.getName().equals(desiredTarget)) {
return target;
}
}
- throw new BuildException("Could not find target matching " + desiredTarget + "\n");
+ throw new BuildException("Could not find target matching "
+ + desiredTarget + "\n");
}
-
- /**
- * If a target defined outside helium are calling a private Helium target then print warning
+
+ /**
+ * If a target defined outside helium are calling a private Helium target
+ * then print warning
*
*/
@SuppressWarnings("unchecked")
- public void targetCallsHeliumTarget(Target target, Project project)
- {
+ public void targetCallsHeliumTarget(Target target, Project project) {
String location = target.getLocation().getFileName();
-
+
try {
- String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
+ String heliumpath = new File(project.getProperty("helium.dir"))
+ .getCanonicalPath();
String targetpath = new File(location).getCanonicalPath();
-
- if (!targetpath.contains(heliumpath))
- {
+
+ if (!targetpath.contains(heliumpath)) {
ArrayList<String> antcallTargets = new ArrayList<String>();
- Visitor visitorTarget = new AntTargetVisitor(antcallTargets, project);
-
+ Visitor visitorTarget = new AntTargetVisitor(antcallTargets,
+ project);
+
Element element = findTargetElement(target, project);
- if (element != null)
+ if (element != null) {
element.accept(visitorTarget);
- for (String depTargetString : antcallTargets)
- {
+ }
+ for (String depTargetString : antcallTargets) {
String[] array = { depTargetString };
try {
- Target depTarget = findTarget(depTargetString, project, array);
- targetCallsHeliumTarget(depTarget, project);
- } catch (BuildException x) {
- // We are Ignoring the errors as no need to fail the build.
- log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
+ Target depTarget = findTarget(depTargetString, project,
+ array);
+ targetCallsHeliumTarget(depTarget, project);
+ } catch (BuildException x) {
+ // We are Ignoring the errors as no need to fail the
+ // build.
+ log(
+ "Exception occured while target defined outside helium are calling a private Helium target "
+ + x.toString(), Project.MSG_DEBUG);
x = null;
- }
+ }
}
-
-
- for (Enumeration<String> depsEnum = target.getDependencies(); depsEnum.hasMoreElements();)
- {
+
+ for (Enumeration<String> depsEnum = target.getDependencies(); depsEnum
+ .hasMoreElements();) {
String depTargetString = depsEnum.nextElement();
String[] array = { depTargetString };
try {
- Target depTarget = findTarget(depTargetString, project, array);
- targetCallsHeliumTarget(depTarget, project);
+ Target depTarget = findTarget(depTargetString, project,
+ array);
+ targetCallsHeliumTarget(depTarget, project);
} catch (BuildException x) {
- //We are Ignoring the errors as no need to fail the build.
- log("Exception occured while target defined outside helium are calling a private Helium target " + x.toString(), Project.MSG_DEBUG);
+ // We are Ignoring the errors as no need to fail the
+ // build.
+ log(
+ "Exception occured while target defined outside helium are calling a private Helium target "
+ + x.toString(), Project.MSG_DEBUG);
x = null;
- }
+ }
}
- }
- else
- {
+ } else {
checkIfTargetPrivate(target, project);
}
} catch (IOException e) {
- //We are Ignoring the errors as no need to fail the build.
- log("IOException occured while target defined outside helium are calling a private Helium target " + e.getMessage(), Project.MSG_DEBUG);
+ // We are Ignoring the errors as no need to fail the build.
+ log(
+ "IOException occured while target defined outside helium are calling a private Helium target "
+ + e.getMessage(), Project.MSG_DEBUG);
e.printStackTrace();
}
}
- private class AntTargetVisitor extends VisitorSupport
- {
+ private class AntTargetVisitor extends VisitorSupport {
private List<String> targetList;
private Project project;
- public AntTargetVisitor(List<String> targetList, Project project)
- {
+ public AntTargetVisitor(List<String> targetList, Project project) {
this.targetList = targetList;
this.project = project;
}
- public void visit(Element node)
- {
+ public void visit(Element node) {
String name = node.getName();
- if (name.equals("antcall") || name.equals("runtarget"))
- {
+ if (name.equals("antcall") || name.equals("runtarget")) {
String text = node.attributeValue("target");
extractTarget(text);
}
}
- private void extractTarget(String text)
- {
+ private void extractTarget(String text) {
String iText = project.replaceProperties(text);
targetList.add(iText);
}
@@ -197,134 +197,224 @@
/**
* Find the xml Element for the target
*
- */
+ */
@SuppressWarnings("unchecked")
- public Element findTargetElement(Target target, Project project)
- {
+ public Element findTargetElement(Target target, Project project) {
SAXReader xmlReader = new SAXReader();
-
+
Document antDoc = null;
-
+
String location = target.getLocation().getFileName();
-
+
try {
File file = new File(location);
antDoc = xmlReader.read(file);
} catch (DocumentException e) {
// We are Ignoring the errors as no need to fail the build.
- log("Not able read the XML file. " + e.getMessage(), Project.MSG_WARN);
+ log("Not able read the XML file. " + e.getMessage(),
+ Project.MSG_WARN);
}
-
+
String projectName = antDoc.valueOf("/project/@name");
- for (Iterator<Element> iterator = antDoc.selectNodes("//target").iterator(); iterator.hasNext();)
- {
+ for (Iterator<Element> iterator = antDoc.selectNodes("//target")
+ .iterator(); iterator.hasNext();) {
Element element = iterator.next();
String targetName = element.attributeValue("name");
- if (targetName.equals(target.getName()) || (projectName + "." + targetName).equals(target.getName()))
+ if (targetName.equals(target.getName())
+ || (projectName + "." + targetName)
+ .equals(target.getName())) {
return element;
+ }
}
return null;
}
-
- /**
+
+ /**
* If target has comment that says it is private them print warning
*
*/
@SuppressWarnings("unchecked")
- public void checkIfTargetPrivate(Target target, Project project)
- {
+ public void checkIfTargetPrivate(Target target, Project project) {
Element targetElement = findTargetElement(target, project);
- if (targetElement != null)
- {
- List<Node> children = targetElement.selectNodes("preceding-sibling::node()");
- if (children.size() > 0)
- {
+ if (targetElement != null) {
+ List<Node> children = targetElement
+ .selectNodes("preceding-sibling::node()");
+ if (children.size() > 0) {
// Scan past the text nodes, which are most likely whitespace
int index = children.size() - 1;
Node child = children.get(index);
- while (index > 0 && child.getNodeType() == Node.TEXT_NODE)
- {
+ while (index > 0 && child.getNodeType() == Node.TEXT_NODE) {
index--;
child = (Node) children.get(index);
}
-
+
// Check if there is a comment node
String commentText = null;
- if (child.getNodeType() == Node.COMMENT_NODE)
- {
+ if (child.getNodeType() == Node.COMMENT_NODE) {
Comment macroComment = (Comment) child;
commentText = macroComment.getStringValue().trim();
- //log(macroName + " comment: " + commentText, Project.MSG_DEBUG);
+ // log(macroName + " comment: " + commentText,
+ // Project.MSG_DEBUG);
}
-
- if (commentText != null)
- {
- if (commentText.contains("Private:"))
- {
- output.add("Warning: " + target.getName() + " is private and should only be called by helium");
+
+ if (commentText != null) {
+ if (commentText.contains("Private:")) {
+ output
+ .add("Warning: "
+ + target.getName()
+ + " is private and should only be called by helium");
}
- if (commentText.contains("<deprecated>"))
- {
- output.add("Warning: " + target.getName() + "\n" + commentText);
+ if (commentText.contains("<deprecated>")) {
+ output.add("Warning: " + target.getName() + "\n"
+ + commentText);
}
}
}
}
}
-
- @SuppressWarnings("unchecked")
- public void checkTargetsProperties(Project project)
- {
+
+ /**
+ * To check, is the private properties are overridden by customers.
+ *
+ * @param project
+ */
+ public void checkTargetsProperties(Project project) {
try {
- String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
- com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(project, "private");
+ String heliumpath = new File(project.getProperty("helium.dir"))
+ .getCanonicalPath();
+ com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(
+ project, "private");
ArrayList<String> customerProps = getCustomerProperties(project);
-
- for (PropertyMeta propertyMeta : db.getProperties())
- {
- if (propertyMeta.getLocation().contains(heliumpath) && propertyMeta.getScope().equals("private") && customerProps.contains(propertyMeta.getName()))
+
+ for (PropertyMeta propertyMeta : db.getProperties()) {
+ if (propertyMeta.getType().equals("boolean"))
+ {
+ String value = project.getProperty(propertyMeta.getName());
+ if (value != null && !value.equals("true") && !value.equals("false"))
+ {
+ output.add("Warning: " + propertyMeta.getName() + " property is boolean type and not set to true or false, value is " + value);
+ }
+ }
+ }
+ for (PropertyCommentMeta propertyMeta : db.getCommentProperties()) {
+ if (propertyMeta.getType().equals("boolean"))
{
- output.add("Warning: " + propertyMeta.getName() + " property has been overridden");
+ String value = project.getProperty(propertyMeta.getName());
+ if (value != null && !value.equals("true") && !value.equals("false"))
+ {
+ output.add("Warning: " + propertyMeta.getName() + " property is boolean type and not set to true or false, value is " + value);
+ }
+ }
+ }
+ for (PropertyMeta propertyMeta : db.getProperties()) {
+ if (propertyMeta.getLocation().contains(heliumpath)
+ && propertyMeta.getScope().equals("private")
+ && customerProps.contains(propertyMeta.getName())) {
+ output.add("Warning: " + propertyMeta.getName()
+ + " property has been overridden");
+ }
+ }
+
+ for (PropertyCommentMeta propertyCommentMeta : db.getCommentProperties()) {
+ if (propertyCommentMeta.getLocation().contains(heliumpath)
+ && propertyCommentMeta.getScope().equals("private")
+ && customerProps
+ .contains(propertyCommentMeta.getName())) {
+ output.add("Warning: " + propertyCommentMeta.getName()
+ + " property has been overridden");
}
}
- } catch (IOException e) { e.printStackTrace(); }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
-
+
+ /**
+ * To display the warnings for deprecated properties.
+ *
+ * @param project
+ */
+ public void checkDeprecatedProperties(Project project) {
+ try {
+ String heliumpath = new File(project.getProperty("helium.dir"))
+ .getCanonicalPath();
+ com.nokia.helium.ant.data.Database db = new com.nokia.helium.ant.data.Database(
+ project, "private");
+ ArrayList<String> customerProps = getCustomerProperties(project);
+
+ for (PropertyMeta propertyMeta : db.getProperties()) {
+ if (propertyMeta.getLocation().contains(heliumpath)
+ && (!propertyMeta.getDeprecated().equals(""))
+ && customerProps.contains(propertyMeta.getName())) {
+ output.add("Warning: "
+ + propertyMeta.getName()
+ + " property has been deprecated "
+ + propertyMeta.getDeprecated()
+ + "."
+ + propertyMeta.getSummary().substring(
+ propertyMeta.getSummary().lastIndexOf(
+ DEPRECATED)
+ + DEPRECATED.length()));
+ }
+ }
+
+ for (PropertyCommentMeta propertyCommentMeta : db
+ .getCommentProperties()) {
+ if (propertyCommentMeta.getLocation().contains(heliumpath)
+ && (!propertyCommentMeta.getDeprecated().equals(""))
+ && customerProps
+ .contains(propertyCommentMeta.getName())) {
+ output.add("Warning: "
+ + propertyCommentMeta.getName()
+ + " property has been deprecated "
+ + propertyCommentMeta.getDeprecated()
+ + "."
+ + propertyCommentMeta.getSummary().substring(
+ propertyCommentMeta.getSummary()
+ .lastIndexOf(DEPRECATED)
+ + DEPRECATED.length()));
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
@SuppressWarnings("unchecked")
- public ArrayList<String> getCustomerProperties(Project project)
- {
+ public ArrayList<String> getCustomerProperties(Project project) {
ArrayList<String> props = new ArrayList<String>();
Database db = new Database(null, null, null);
try {
- String heliumpath = new File(project.getProperty("helium.dir")).getCanonicalPath();
+ String heliumpath = new File(project.getProperty("helium.dir"))
+ .getCanonicalPath();
- for (Object object : db.getAntFiles(project))
- {
- String antFile = (String)object;
+ for (Object object : db.getAntFiles(project)) {
+ String antFile = (String) object;
antFile = new File(antFile).getCanonicalPath();
- if (!antFile.contains(heliumpath))
- {
+ if (!antFile.contains(heliumpath)) {
SAXReader xmlReader = new SAXReader();
Document antDoc = xmlReader.read(new File(antFile));
-
- List<Element> propertyNodes = antDoc.selectNodes("//property | //param");
- for (Element propertyNode : propertyNodes)
- {
+
+ List<Element> propertyNodes = antDoc
+ .selectNodes("//property | //param");
+ for (Element propertyNode : propertyNodes) {
props.add(propertyNode.attributeValue("name"));
}
}
}
} catch (IOException e) {
// We are Ignoring the errors as no need to fail the build.
- log("IOException: Not able read the Customer Properties " + e.getMessage(), Project.MSG_WARN);
+ log("IOException: Not able read the Customer Properties "
+ + e.getMessage(), Project.MSG_WARN);
} catch (DocumentException e) {
// We are Ignoring the errors as no need to fail the build.
- log("DocumentException: Not able read the Customer Properties " + e.getMessage(), Project.MSG_WARN);
+ log("DocumentException: Not able read the Customer Properties "
+ + e.getMessage(), Project.MSG_WARN);
}
-
+
return props;
}
-
+
}
\ No newline at end of file