imakerplugin/com.nokia.s60tools.imaker/src/com/nokia/s60tools/imaker/IMakerUtils.java
changeset 0 61163b28edca
child 1 7ff23301fe22
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imakerplugin/com.nokia.s60tools.imaker/src/com/nokia/s60tools/imaker/IMakerUtils.java	Tue Jan 12 13:17:53 2010 -0600
@@ -0,0 +1,283 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+package com.nokia.s60tools.imaker;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+
+import com.nokia.carbide.cpp.sdk.core.ISDKManager;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
+import com.nokia.s60tools.imaker.exceptions.IMakerCoreNotFoundException;
+import com.nokia.s60tools.imaker.internal.managers.ProjectManager;
+import com.nokia.s60tools.imaker.internal.model.iContent.IbyEntry;
+import com.nokia.s60tools.imaker.internal.wrapper.IMakerWrapperPreferences;
+
+public class IMakerUtils {
+	public static final int NORMAL_MSG = 1;
+	public static final int WARNING_MSG = 2;
+	public static final int ERROR_MSG = 3;
+	
+	public static String getLocationWithLeadingSlash(String location) {
+		if (location.length()>0) {
+			if(location.charAt(0)=='/') {				
+				return location.substring(1);
+			}
+			return location;
+		}
+		return "";
+	}
+	
+	/**
+	 * Returns the drive of the location where is project is located
+	 * @param resource
+	 * @return
+	 */
+	public static String getProjectRootLocation(IResource resource) {
+		IProject project = resource.getProject();
+		String location = project.getLocation().toString();
+		return getDrive(location);
+	}
+
+	private static String getDrive(String location) {
+		if(location==null||location.length()<2) {
+			return null;
+		}
+		return location.substring(0,2);
+	}
+
+	public static String getLocationDrive(String location) {	
+		return getDrive(location);
+	}
+	
+	public static int getMessageType(String msg) {
+		String message = msg.toLowerCase();
+		if((message.indexOf("error ") != -1) 
+				|| (message.indexOf("error:") != -1)
+				|| (message.indexOf("no rule to make target") != -1)) {
+			return ERROR_MSG;
+		} else if (message.indexOf("warning")!=-1) {
+			return WARNING_MSG;
+		} else {
+			return NORMAL_MSG;
+		}		
+	}
+
+	/**
+	 * @return
+	 */
+	public static List<String> getAvailableSDKs() {
+		List<String> sdks = new ArrayList<String>();
+		ISDKManager sdkManager = SDKCorePlugin.getSDKManager();
+		List<ISymbianSDK> sdkList = sdkManager.getSDKList();
+		for (ISymbianSDK sdk : sdkList) {
+			sdks.add(sdk.getEPOCROOT());
+		}
+		return sdks;
+	}
+
+	/**
+	 * @param file
+	 * @return
+	 */
+	public static String getFileName(String file) {
+		int index = file.lastIndexOf('/');
+		if(index != -1) {
+			return file.substring(index+1);
+		}
+		return "";
+	}
+
+	/**
+	 * Parses the version of imaker from the specified string
+	 * @param output
+	 * @return
+	 */
+	public static String parseIMakerVersion(String output) {
+		String verpattern = "\\d{2}\\.\\d{2}\\.\\d{2}";
+		Matcher matcher = Pattern.compile(verpattern).matcher(output);
+		if(matcher.find()) {
+			String version = output.substring(matcher.start(), matcher.end());
+			return version;
+		} else {
+			return null;			
+		}
+	}
+	
+	/**
+	 * determines weather imaker core exists
+	 * @return
+	 * @throws IMakerCoreNotFoundException
+	 */
+	public static boolean iMakerCoreExists(String tool) {
+		boolean ret = true;
+		try {
+			File f = new File(tool);
+			if(!f.exists()) {
+				ret = false;
+			}
+		} catch(Exception e) {
+			return false;
+		}
+		return ret;
+	}
+	/**
+	 * Converts a list of Variables to a list of Strings 
+	 * @param config
+	 * @return
+	 */
+	public static List<String> convertVariablesToStrings(List<UIVariable> variables) {
+		if(variables==null) {
+			return null;
+		}
+		List<String> parameters = new ArrayList<String>();
+		for (UIVariable variable : variables) {
+			if(variable.isModified() || variable.getInclude()) {
+				parameters.add(variable.getName()+"="+variable.getValue());
+			}
+		}
+		return parameters;
+	}
+	
+	/**
+	 * Converts a list of Strings to a list of Variables 
+	 * @param config
+	 * @return
+	 */
+	public static List<UIVariable> convertStringsToVariables(List<String> variables) {
+		if(variables==null) {
+			return null;
+		}
+		List<UIVariable> retVars = new ArrayList<UIVariable>();
+		for (String variable : variables) {
+			String[] parts = variable.split("=");
+			retVars.add(new UIVariable(parts[0],parts[1],"","",""));
+		}
+		return retVars;
+	}
+	
+	/**
+	 * Extracts modified variables from a configuration
+	 * @param config
+	 * @return
+	 */
+	public static List<UIVariable> getCommandlineIncludeVariables(List<UIVariable> variables) {
+		if(variables==null) {
+			return null;
+		}
+		List<UIVariable> parameters = new ArrayList<UIVariable>();
+
+		for (UIVariable variable : variables) {
+			if(variable.isModified() || variable.getInclude()) {
+				parameters.add(variable);
+			}
+		}
+		return parameters;
+	}
+	
+	public static List<String> getImakerTool(String epocroot) {
+		List<String> tool = new ArrayList<String>();
+		tool.add(epocroot + "\\" + IMakerWrapperPreferences.DEFAULT_COMMAND);
+		return tool;
+	}
+	
+	/**
+	 * This method creates ibyfiles and makefile under the given project
+	 * @param entries
+	 * @param path The location where to put the created files
+	 * @return The absolute path of the makefile created, null if nothing gets created otherwise
+	 */
+	public static IPath createIbyFiles(List<IbyEntry> entries, ProjectManager manager, IPath path) { 
+		List<IPath> ibyFiles = new ArrayList<IPath>();
+		for (Iterator<IbyEntry> iter = entries.iterator(); iter.hasNext();) {
+			StringBuffer sb = new StringBuffer();
+			IbyEntry ibyEntry =  iter.next();
+			iter.remove();
+			append(ibyEntry,sb);
+			for (Iterator<IbyEntry> iter2 = entries.iterator(); iter2.hasNext();) {
+				IbyEntry entry = (IbyEntry) iter2.next();
+				if(entry.getLocation().equals(ibyEntry.getLocation())) {
+					iter2.remove();
+					append(entry,sb);
+				}
+			}
+			String basename = ProjectManager.IBY_FILENAME_PREFIX
+					+ ibyEntry.getLocation().toString().toLowerCase();
+			// save iby file content
+			String content = sb.toString();
+			if(!content.equals("")) {
+				appendHeaderAndFooter(basename,sb);
+				ibyFiles.add(manager.createIbyFile(basename, sb.toString(), path));				
+			}
+		}
+		if(!ibyFiles.isEmpty()) {
+			return manager.createAdditionsMakefile(ibyFiles, path);
+		} else {
+			return null;
+		}
+	}
+	
+	private static void appendHeaderAndFooter(String basename, StringBuffer sb) {
+		sb.insert(0,"OVERRIDE_REPLACE/ADD\n");
+		sb.append("OVERRIDE_END");
+	}
+
+	private static void append(IbyEntry ibyEntry, StringBuffer sb) {
+		String str = ibyEntry.toString();
+		if(ibyEntry.isEnabled() && !str.equals("")) {
+			sb.append(str);
+			sb.append("\n");
+		}
+	}
+	
+	
+	/**
+	 * @param hostPath
+	 * @return
+	 */
+	public static String getFixedTargetPath(IPath hostPath) {
+		String tp = "\\"; //$NON-NLS-1$
+		
+		if (hostPath.getFileExtension().compareToIgnoreCase("app") == 0) { //$NON-NLS-1$
+			// this is an EKA1 app
+			tp += "system\\apps\\" + hostPath.removeFirstSegments(hostPath.segmentCount()-2).setDevice(null).toOSString(); //$NON-NLS-1$
+		} else if (hostPath.toOSString().toLowerCase().indexOf("\\epoc32\\release\\") >= 0) { //$NON-NLS-1$
+			// this is a binary
+			tp += "sys\\bin\\" + hostPath.lastSegment(); //$NON-NLS-1$
+		} else {
+			// see if this is a resource
+			final String dataZDir = "\\epoc32\\data\\z\\"; //$NON-NLS-1$
+			int index = hostPath.toOSString().toLowerCase().indexOf(dataZDir);
+			if (index >= 0) {
+				tp += hostPath.toOSString().substring(index + dataZDir.length());
+			} else {
+				// fallback - just add filename
+				tp += hostPath.lastSegment();
+			}
+		}
+		return tp;
+	}	
+}