blob: 96ac55e4121e2434e35b6c2098242a80b7e1519f [file] [log] [blame]
/*
* 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.collector.core.internal;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.widgets.TableItem;
import com.motorola.studio.android.common.utilities.FileUtil;
import com.motorola.studio.android.logger.collector.core.ILogFile;
import com.motorola.studio.android.logger.collector.util.LogCollectorExtensionLoader;
import com.motorola.studio.android.logger.collector.util.LoggerCollectorConstants;
import com.motorola.studio.android.logger.collector.util.LoggerCollectorMessages;
import com.motorola.studio.android.logger.collector.util.PlatformException;
import com.motorola.studio.android.logger.collector.util.ZipUtil;
/**
* This class is responsible to manage all collecting log files requirements.
*/
public class CollectLogFile
{
private final ArrayList<ILogFile> logs = LogCollectorExtensionLoader.getLogFiles();
/**
* This method is responsible to retrieve files from informed path.
*
* @param path The path to be retrieved.
* @return The log files
*/
public ArrayList<ILogFile> getLogFileList()
{
return logs;
}
/**
* This method is responsible to compact all log files selected by end-user.
*
* @param fileName The output compacted file name
* @param checkedItems The selected items
* @return if the selected files are compacted successfully
* @throws PlatformException
*/
public boolean zipLogFiles(String fileName, List<TableItem> checkedItems)
throws PlatformException
{
boolean toReturn = true;
String nomalizedDirectory =
FileUtil.normalizePath(new Path(fileName).removeLastSegments(1).toOSString());
// Temporary folder path to store the log files while they are not
// compressed.
final String tempFolderPath = FileUtil.normalizePath(nomalizedDirectory) + "temp" //$NON-NLS-1$
+ Double.toString((Math.random())).replaceAll("\\.", "0") + //$NON-NLS-1$ //$NON-NLS-2$
File.separator;
final IPath tempFolder = new Path(tempFolderPath);
try
{
// Creating the temporary folder.
FileUtil.mkdir(tempFolderPath);
// Copying the log files.
for (TableItem item : checkedItems)
{
ILogFile logFile = (ILogFile) item.getData();
IPath outputFolder = tempFolder.append(logFile.getOutputSubfolderName());
FileUtil.mkdir(outputFolder.toOSString());
for (IPath path : logFile.getLogFilePath())
{
FileUtil.copy(new File(path.toOSString()),
new File(outputFolder.append(path.lastSegment()).toOSString()));
}
}
// Compact all log files from temporary folder
new ZipUtil(fileName, tempFolderPath).zip();
}
catch (IOException e)
{
toReturn = false;
throw new PlatformException(new Status(IStatus.CANCEL,
LoggerCollectorConstants.PLUGIN_ID, LoggerCollectorMessages.getInstance()
.getString("error.logger.collector.zip"))); //$NON-NLS-1$
}
finally
{
// Deleting temporary folder an all files within it.
FileUtil.delete(tempFolderPath);
}
return toReturn;
}
}