summaryrefslogtreecommitdiff
path: root/src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java')
-rw-r--r--src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java b/src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java
new file mode 100644
index 0000000..e4cdc56
--- /dev/null
+++ b/src/plugins/android/src/com/motorola/studio/android/logger/DevicePropertyLogger.java
@@ -0,0 +1,154 @@
+/*
+ * 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.motorola.studio.android.logger;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import com.motorola.studio.android.AndroidPlugin;
+import com.motorola.studio.android.adt.DDMSFacade;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.logger.collector.core.ILogFile;
+
+/**
+ * This class is the Implementation of ILogFile that is responsible to collect device properties and write them to files.
+ * These files will be used by the Collect Logs functionality
+ */
+public class DevicePropertyLogger implements ILogFile
+{
+
+ private final Collection<String> serialNumbers;
+
+ private final Map<String, Map<String, String>> properties;
+
+ public DevicePropertyLogger()
+ {
+ serialNumbers = DDMSFacade.getConnectedSerialNumbers();
+ properties = new HashMap<String, Map<String, String>>(serialNumbers.size());
+ for (String serialNumber : serialNumbers)
+ {
+ Map<String, String> propertiesMap = new HashMap<String, String>(140);
+ String deviceName = DDMSFacade.getNameBySerialNumber(serialNumber);
+ try
+ {
+ Collection<String> lines =
+ DDMSFacade
+ .execRemoteApp(serialNumber, "getprop", new NullProgressMonitor());
+ for (String line : lines)
+ {
+ String[] split = line.split(":");
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 1; i < split.length; i++)
+ {
+ buffer.append(split[i]);
+ }
+
+ if (!"".equals(split[0]))
+ {
+ propertiesMap.put(split[0], buffer.toString());
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ StudioLogger.error(getClass(), "Unable to execute getprop command on device "
+ + deviceName, e);
+ }
+ properties.put((deviceName), propertiesMap);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.logger.collector.core.ILogFile#getLogFilePath()
+ */
+ public List<IPath> getLogFilePath()
+ {
+ ArrayList<IPath> logs = new ArrayList<IPath>(properties.keySet().size());
+ IPath LOG_PATH = AndroidPlugin.getDefault().getStateLocation();
+ for (String devicename : properties.keySet())
+ {
+ IPath log = LOG_PATH.append(devicename + "_devProperties.log");
+ writeLogFile(log, properties.get(devicename));
+ logs.add(log);
+ }
+
+ return logs;
+ }
+
+ private void writeLogFile(IPath log, Map<String, String> devProperties)
+ {
+ File logFile = log.toFile();
+ BufferedWriter bw = null;
+ try
+ {
+ bw = new BufferedWriter(new FileWriter(logFile));
+
+ for (String propKey : devProperties.keySet())
+ {
+ bw.append(propKey + "=" + devProperties.get(propKey)
+ + System.getProperty("line.separator"));
+ }
+ }
+ catch (IOException e)
+ {
+ StudioLogger.error(getClass(),
+ "An error occurred while trying to write device Properties log file, "
+ + logFile.getAbsolutePath(), e);
+ }
+ finally
+ {
+ try
+ {
+ bw.flush();
+ bw.close();
+ }
+ catch (IOException e)
+ {
+ StudioLogger.error("Could not close stream while writing device property log. "
+ + e.getMessage());
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.logger.collector.core.ILogFile#getLogName()
+ */
+ public String getLogName()
+ {
+ return "Device properties";
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.logger.collector.core.ILogFile#getOutputSubfolderName()
+ */
+ public String getOutputSubfolderName()
+ {
+ return "Devices";
+ }
+}