diff options
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.java | 154 |
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"; + } +} |