/* * 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.ListExecutable; import com.cyanogenmod.filemanager.console.ExecutionException; import com.cyanogenmod.filemanager.console.InsufficientPermissionsException; import com.cyanogenmod.filemanager.console.NoSuchFileOrDirectory; import com.cyanogenmod.filemanager.model.FileSystemObject; import com.cyanogenmod.filemanager.model.ParentDirectory; import com.cyanogenmod.filemanager.util.FileHelper; import java.io.File; import java.util.ArrayList; import java.util.List; /** * A class for list information about files and directories. */ public class ListCommand extends Program implements ListExecutable { private static final String TAG = "ListCommand"; //$NON-NLS-1$ private final String mSrc; private final LIST_MODE mMode; private final List<FileSystemObject> mFiles; /** * Constructor of <code>ListCommand</code>. List mode. * * @param src The file system object to be listed * @param mode The mode of listing */ public ListCommand(String src, LIST_MODE mode) { super(); this.mSrc = src; this.mMode = mode; this.mFiles = new ArrayList<FileSystemObject>(); } /** * {@inheritDoc} */ @Override public List<FileSystemObject> getResult() { return this.mFiles; } /** * Method that returns a single result of the program invocation. * Only must be called within a <code>FILEINFO</code> mode listing. * * @return FileSystemObject The file system object reference */ public FileSystemObject getSingleResult() { return this.mFiles.get(0); } /** * {@inheritDoc} */ @Override public void execute() throws InsufficientPermissionsException, NoSuchFileOrDirectory, ExecutionException { if (isTrace()) { Log.v(TAG, String.format("Listing %s. Mode: %s", //$NON-NLS-1$ this.mSrc, this.mMode)); } File f = new File(this.mSrc); if (!f.exists()) { if (isTrace()) { Log.v(TAG, "Result: FAIL. NoSuchFileOrDirectory"); //$NON-NLS-1$ } throw new NoSuchFileOrDirectory(this.mSrc); } if (this.mMode.compareTo(LIST_MODE.DIRECTORY) == 0) { File[] files = f.listFiles(); if (files != null) { for (int i = 0; i < files.length; i++) { FileSystemObject fso = FileHelper.createFileSystemObject(files[i]); if (fso != null) { if (isTrace()) { Log.v(TAG, String.valueOf(fso)); } this.mFiles.add(fso); } } } //Now if not is the root directory if (this.mSrc != null && this.mSrc.compareTo(FileHelper.ROOT_DIRECTORY) != 0 && this.mMode.compareTo(LIST_MODE.DIRECTORY) == 0) { this.mFiles.add(0, new ParentDirectory(new File(this.mSrc).getParent())); } } else { // Build the parent information FileSystemObject fso = FileHelper.createFileSystemObject(f); if (fso != null) { if (isTrace()) { Log.v(TAG, String.valueOf(fso)); } this.mFiles.add(fso); } } if (isTrace()) { Log.v(TAG, "Result: OK"); //$NON-NLS-1$ } } }