aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java116
1 files changed, 116 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java b/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java
new file mode 100644
index 000000000..bd8ef60cb
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkToolsLocator.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.monitor;
+
+import com.android.SdkConstants;
+import com.android.ide.eclipse.ddms.IToolsLocator;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * {@link SdkToolsLocator} has two functions: <ul>
+ * <li> It implements all the methods of {@link IToolsLocator} interface, and
+ * so can be used as such. </li>
+ * <li> It provides the {@link #isValidInstallation()} method to check the validity
+ * of an installation. </li>
+ * The only reason this class does not explicitly implement the {@link IToolsLocator} interface
+ * is that it is used very early during the startup to check the validity of the installation.
+ * Actually implementing that interface causes other bundles to be activated before the
+ * Eclipse Platform is fully initialized, resulting in startup error.
+ */
+public class SdkToolsLocator {
+ public static final String PLATFORM_EXECUTABLE_EXTENSION =
+ (SdkConstants.CURRENT_PLATFORM == SdkConstants.PLATFORM_WINDOWS) ?
+ ".exe" : ""; //$NON-NLS-1$
+
+ public static final String PLATFORM_SCRIPT_EXTENSION =
+ (SdkConstants.CURRENT_PLATFORM == SdkConstants.PLATFORM_WINDOWS) ?
+ ".bat" : ""; //$NON-NLS-1$
+
+ public static final String FN_HPROF_CONV = "hprof-conv" + PLATFORM_EXECUTABLE_EXTENSION; //$NON-NLS-1$
+ public static final String FN_TRACEVIEW = "traceview" + PLATFORM_SCRIPT_EXTENSION; //$NON-NLS-1$
+
+ private final File mSdkFolder;
+
+ public SdkToolsLocator(File sdkFolder) {
+ mSdkFolder = sdkFolder;
+ }
+
+ public String getAdbLocation() {
+ return new File(getSdkPlatformToolsFolder(), SdkConstants.FN_ADB).getAbsolutePath();
+ }
+
+ public String getTraceViewLocation() {
+ return new File(getSdkToolsFolder(), FN_TRACEVIEW).getAbsolutePath();
+ }
+
+ public String getHprofConvLocation() {
+ return new File(getSdkPlatformToolsFolder(), FN_HPROF_CONV).getAbsolutePath();
+ }
+
+ private String getSdkToolsFolder() {
+ return new File(mSdkFolder, SdkConstants.FD_TOOLS).getAbsolutePath();
+ }
+
+ private String getSdkPlatformToolsFolder() {
+ return new File(mSdkFolder, SdkConstants.FD_PLATFORM_TOOLS).getAbsolutePath();
+ }
+
+ public SdkInstallStatus isValidInstallation() {
+ List<String> executables = Arrays.asList(
+ getTraceViewLocation(),
+ getHprofConvLocation());
+
+ for (String exe : executables) {
+ File f = new File(exe);
+ if (!f.exists()) {
+ return SdkInstallStatus.invalidInstallation(exe + " not present.");
+ }
+ if (!f.canExecute()) {
+ return SdkInstallStatus.invalidInstallation(exe + " is not executable.");
+ }
+ }
+
+ return SdkInstallStatus.VALID;
+ }
+
+ public static class SdkInstallStatus {
+ private boolean mValid;
+ private String mCause;
+
+ private SdkInstallStatus(boolean valid, String errorMessage) {
+ mValid = valid;
+ mCause = errorMessage;
+ }
+
+ public boolean isValid() {
+ return mValid;
+ }
+
+ public String getErrorMessage() {
+ return mCause;
+ }
+
+ public static final SdkInstallStatus VALID = new SdkInstallStatus(true, "");
+
+ public static SdkInstallStatus invalidInstallation(String errorMessage) {
+ return new SdkInstallStatus(false, errorMessage);
+ }
+ }
+}