/*
* Copyright (C) 2012 The CyanogenMod 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.cyanogenmod.filemanager.commands.java;
import android.util.Log;
import com.cyanogenmod.filemanager.commands.MountPointInfoExecutable;
import com.cyanogenmod.filemanager.console.ExecutionException;
import com.cyanogenmod.filemanager.console.InsufficientPermissionsException;
import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory;
import com.cyanogenmod.filemanager.model.MountPoint;
import com.cyanogenmod.filemanager.util.ParseHelper;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
/**
* A class for get information about disk usage.
*/
public class MountPointInfoCommand extends Program implements MountPointInfoExecutable {
private static final String TAG = "MountPointInfoCommand"; //$NON-NLS-1$
private final String mMountsFile;
private final List<MountPoint> mMountPoints;
/**
* Constructor of <code>MountPointInfoCommand</code>.
*
* @param mountsFile The system mounts file
*/
public MountPointInfoCommand(String mountsFile) {
super();
this.mMountPoints = new ArrayList<MountPoint>();
this.mMountsFile = mountsFile;
}
/**
* {@inheritDoc}
*/
@Override
public List<MountPoint> getResult() {
return this.mMountPoints;
}
/**
* {@inheritDoc}
*/
@Override
public void execute()
throws InsufficientPermissionsException, NoSuchFileOrDirectory, ExecutionException {
if (isTrace()) {
Log.v(TAG,
String.format("Getting usage from %s", //$NON-NLS-1$
this.mMountsFile));
}
// Read the file with the mount information
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(this.mMountsFile)), getBufferSize());
StringBuilder sb = new StringBuilder();
int read = 0;
char[] data = new char[getBufferSize()];
while ((read = br.read(data, 0, getBufferSize())) != -1) {
sb.append(data, 0, read);
}
// Send to parse
String[] lines = sb.toString().split("\n"); //$NON-NLS-1$
for (int i = 0; i < lines.length; i++) {
MountPoint mp = ParseHelper.toMountPoint(lines[i]);
if (isTrace()) {
Log.v(TAG, String.valueOf(mp));
}
this.mMountPoints.add(mp);
}
} catch (Exception e) {
if (isTrace()) {
Log.v(TAG, "Result: FAIL. InsufficientPermissionsException"); //$NON-NLS-1$
}
throw new InsufficientPermissionsException();
} finally {
try {
if (br != null) {
br.close();
}
} catch (Throwable _throw) {/**NON BLOCK**/}
}
if (isTrace()) {
Log.v(TAG, "Result: OK"); //$NON-NLS-1$
}
}
}