core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/BuildTargetTreeNode.java
changeset 0 fb279309251b
child 1433 1a693b01d107
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/BuildTargetTreeNode.java	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2007-2009 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.carbide.cpp.sdk.ui.shared;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.TreeNode;
+
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
+import com.nokia.carbide.cpp.sdk.core.ISDKManager;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
+
+/**
+ * A tree node representing a Symbian OS SDK.  This node's children will be the
+ * list of available build configurations.
+ */
+public class BuildTargetTreeNode extends TreeNode {
+
+	/**
+	 * Constructs a new tree node for the given SDK
+	 * @param value the SDK to create the tree node for
+	 */
+	public BuildTargetTreeNode(ISymbianSDK value) {
+		this(value, false);
+	}
+
+	/**
+	 * Constructs a new tree node for the given SDK
+	 * @param value the SDK to create the tree node for
+	 * @since 1.4
+	 */
+	public BuildTargetTreeNode(ISymbianSDK value, boolean sbsv2Project) {
+		super(value);
+		
+		List<ISymbianBuildContext> configurations = sbsv2Project ? SBSv2Utils.getFilteredSBSv2BuildContexts(value) : value.getFilteredBuildConfigurations();
+
+		TreeNode[] children = new TreeNode[configurations.size()];
+		int index = 0;
+		for (ISymbianBuildContext config : configurations) {
+			children[index++] = new TreeNode(config) {
+				@Override
+				public String toString() {
+					ISymbianBuildContext context = (ISymbianBuildContext)getValue();
+					return context.getDisplayString();
+				}
+			};
+		}
+		setChildren(children);
+	}
+
+	/**
+	 * Returns the unique id the SDK associated with this node
+	 */
+	public String toString() {
+		ISymbianSDK value = (ISymbianSDK) getValue();
+		return value.getUniqueId();
+	}
+	
+	/**
+	 * Get the SDK for this node
+	 * @return the ISymbianSDK object for this tree node
+	 */
+	public ISymbianSDK getSymbianSDK() {
+		return (ISymbianSDK) getValue();
+	}
+	
+	/**
+	 * Gets the list of SDK tree nodes for use in a tree viewer.  The SDK's are gathered
+	 * from the SDK preferences page.  Only enabled SDK's are used.  Each SDK node will
+	 * have build configurations for children appropriate for the SDK.  These configurations
+	 * are filtered based on the platform filtering preference panel.
+	 * @return
+	 */
+	public static BuildTargetTreeNode[] getTreeViewerInput() {
+		return getTreeViewerInput(false);
+	}
+
+	/**
+	 * Gets the list of SDK tree nodes for use in a tree viewer.  The SDK's are gathered
+	 * from the SDK preferences page.  Only enabled SDK's are used.  Each SDK node will
+	 * have build configurations for children appropriate for the SDK.  These configurations
+	 * are filtered based on the platform filtering preference panel.
+	 * @param sbsv2Project true if this is an SBSv2 project which affects how the build
+	 * configuration list is calculated
+	 * @return array of BuildTargetTreeNode, or null
+	 * @since 1.4
+	 */
+	public static BuildTargetTreeNode[] getTreeViewerInput(boolean sbsv2Project) {
+		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
+		List<ISymbianSDK> sdkList = sdkMgr.getSDKList();
+		if (sdkList == null)
+			return null;
+		
+		List<ISymbianSDK> sdkListCopy = new ArrayList<ISymbianSDK>();
+		// Only add SDKs that are enabled
+		for (ISymbianSDK currSDK : sdkList){
+			if (currSDK.isEnabled()){
+				sdkListCopy.add(currSDK);
+			}
+		}
+		
+		if (sbsv2Project) {
+			// filter non-SBSv2 supported SDK's
+			sdkListCopy = SBSv2Utils.getSupportedSDKs(sdkListCopy);
+		}
+		
+		BuildTargetTreeNode[] input = new BuildTargetTreeNode[sdkListCopy.size()];
+		int index = 0;
+		for (Iterator<ISymbianSDK> iter = sdkListCopy.iterator(); iter.hasNext();) {
+			
+			BuildTargetTreeNode treeNode = new BuildTargetTreeNode(iter.next(), sbsv2Project);
+			if (treeNode.getChildren() != null){
+				input[index++] = treeNode;
+			}
+		}
+		
+		// Filter out any SDKs that don't have configs
+		BuildTargetTreeNode[] realInput = new BuildTargetTreeNode[index];
+		index = 0;
+		for (BuildTargetTreeNode currNode : input) {
+			if (currNode != null){
+				realInput[index++] = currNode;
+			}
+		}
+		return realInput;
+	}
+}