sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/BuilderUtil.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/analyzetoolext/com.nokia.s60tools.analyzetool/src/com/nokia/s60tools/analyzetool/builder/BuilderUtil.java Thu Feb 11 15:22:14 2010 +0200
@@ -0,0 +1,255 @@
+/*
+ * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "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: Definitions for the class BuilderUtil
+ *
+ */
+
+package com.nokia.s60tools.analyzetool.builder;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Add and removes AnalyzeTool build natures to project natures.
+ *
+ * @author kihe
+ *
+ */
+public class BuilderUtil {
+
+ /**
+ * Constructor.
+ */
+ public BuilderUtil() {
+ // MethodDeclaration/Block[count(BlockStatement) = 0 and
+ // @containsComment = 'false']
+ }
+
+ /**
+ * Adds AnalyzeTool build natures.
+ *
+ * @param project
+ * Project reference
+ * @return True no errors otherwise False
+ */
+ private boolean addAnalysisNatures(final IProject project) {
+ try {
+
+ // get existing natures
+ String[] natures = project.getDescription().getNatureIds();
+
+ // get project description
+ IProjectDescription description = project.getDescription();
+
+ // create array for the new natures
+ String[] newNatures = new String[natures.length + 2];
+
+
+ //if QT nature found we must adjust pre- and post natures to correct place
+ if( description.hasNature(com.trolltech.qtcppproject.QtNature.QT_NATURE_ID) ) {
+
+ //find QT nature location
+ int qtNatureIndex = 0;
+ for( int i=0; i<natures.length; i++ ) {
+ if( natures[i].equals(com.trolltech.qtcppproject.QtNature.QT_NATURE_ID ) ) {
+ qtNatureIndex = i;
+ break;
+ }
+ }
+
+ //QT nature id found and it is first nature=> now start to copy existing id and add AT id
+ if( qtNatureIndex == 0 ) {
+ //add natures
+ newNatures[0] = natures[0];
+ newNatures[1] = PreNature.NATURE_ID;
+
+ //copy rest of the existing natures
+ System.arraycopy(natures, 1, newNatures, 2, natures.length-1);
+
+ // add post-builder nature
+ newNatures[natures.length + 1] = PostNature.NATURE_ID;
+ }
+ //QT nature id found but there are some other natures
+ //before QT nature
+ else {
+ //copy existing natures
+ System.arraycopy(natures, 0, newNatures, 0, qtNatureIndex+1);
+ newNatures[qtNatureIndex+1] = PreNature.NATURE_ID;
+
+ //copy rest of the existing natures
+ System.arraycopy(natures, qtNatureIndex+1, newNatures, qtNatureIndex+2, natures.length-qtNatureIndex);
+
+ // add post-builder nature
+ newNatures[natures.length + 1] = PostNature.NATURE_ID;
+ }
+ }
+ //no QT nature found just add pre nature first and post nature last
+ else {
+
+ // set pre-builder nature
+ newNatures[0] = PreNature.NATURE_ID;
+
+ // copy existing natures
+ System.arraycopy(natures, 0, newNatures, 1, natures.length);
+
+ // add post-builder nature
+ newNatures[natures.length + 1] = PostNature.NATURE_ID;
+ }
+
+ // update project description
+ description.setNatureIds(newNatures);
+ project.setDescription(description, null);
+
+ return true;
+ } catch (CoreException ce) {
+ ce.printStackTrace();
+ return false;
+ }
+ }
+
+
+
+ /**
+ * Disable AnalyzeTool build natures.
+ *
+ * @param project
+ * Project reference
+ */
+ public final void disableNatures(final IProject project) {
+ try {
+ // both natures found
+ if (isNatureEnabled(project)) {
+ removeNature(project, 2);
+ } else {
+ IProjectDescription description = project.getDescription();
+
+ // find natures
+ boolean foundPreNature = description
+ .hasNature(PreNature.NATURE_ID);
+ boolean foundPostNature = description
+ .hasNature(PostNature.NATURE_ID);
+
+ //either pre- or post builder nature found => remove it
+ if (foundPreNature || foundPostNature) {
+ removeNature(project, 1);
+ }
+
+ }
+ } catch (CoreException ce) {
+ ce.printStackTrace();
+ }
+
+ }
+
+ /**
+ * Add AnalyzeTool custom builder nature to project builder natures.
+ *
+ * @param project
+ * Project reference
+ * @return True if natures are added otherwise False
+ */
+ public final boolean enableNatures(final IProject project) {
+ try {
+ // check is nature enable
+ if( isNatureEnabled(project)) {
+ return true;
+ }
+ // get project description
+ IProjectDescription description = project.getDescription();
+
+ // find natures
+ boolean foundPreNature = description
+ .hasNature(PreNature.NATURE_ID);
+ boolean foundPostNature = description
+ .hasNature(PostNature.NATURE_ID);
+
+ // only one analyzetool nature found => remove it
+ if (foundPostNature || foundPreNature) {
+ removeNature(project, 1);
+ }
+
+ // add right analysis natures
+ return addAnalysisNatures(project);
+
+ } catch (CoreException ce) {
+ ce.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * Checks is AnalyzeTool custom nature enabled.
+ *
+ * @param projRef
+ * Project reference
+ * @return True both pre or post nature enabled otherwise False
+ */
+ public final boolean isNatureEnabled(final IProject projRef) {
+ boolean preNatureFound = false;
+ boolean postNatureFound = false;
+
+ //check project validity
+ if (projRef == null || !projRef.isOpen()) {
+ return false;
+ }
+
+ try {
+ IProjectDescription description = projRef.getDescription();
+ preNatureFound = description.hasNature(PreNature.NATURE_ID);
+ postNatureFound = description.hasNature(PostNature.NATURE_ID);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ if (preNatureFound && postNatureFound) {
+ return true;
+ }
+ return false;
+
+ }
+
+ /**
+ * Removes AnalyzeTool custom builder natures.
+ *
+ * @param project
+ * Project reference
+ * @param count
+ * How many natures to remove
+ */
+ private void removeNature(final IProject project, final int count) {
+ try {
+ IProjectDescription desc = project.getDescription();
+ String[] natures = desc.getNatureIds();
+ String[] newNatures = new String[natures.length - count];
+
+ int index = 0;
+
+ //thru natures
+ //if pre- or post nature found skip it
+ for (int i = 0; i < natures.length; i++) {
+ if (!natures[i].equals(PreNature.NATURE_ID)
+ && !natures[i].equals(PostNature.NATURE_ID)) {
+ newNatures[index] = natures[i];
+ index++;
+ }
+ }
+ desc.setNatureIds(newNatures);
+ project.setDescription(desc, null);
+
+ } catch (CoreException ce) {
+ ce.printStackTrace();
+ }
+
+ }
+}