/*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2010 University of Dundee. All rights reserved.
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package org.openmicroscopy.shoola.agents.fsimporter.chooser;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.openmicroscopy.shoola.agents.fsimporter.view.Importer;
import org.openmicroscopy.shoola.env.data.model.FileObject;
import org.openmicroscopy.shoola.util.ui.UIUtilities;
import omero.gateway.model.ExperimenterData;
import omero.gateway.model.GroupData;
/**
* Hosts information about the file to import.
*
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald
* <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
* @version 3.0
* <small>
* (<b>Internal version:</b> $Revision: $Date: $)
* </small>
* @since 3.0-Beta4
*/
class FileElement
{
/** The file to host. */
private FileObject file;
/** The name of the imported file. */
private String name;
/** The size of the file. */
private long length;
/**
* Flag indicating that it is allowed to modify the container location.
* The value will only be taken into account if the object is a file.
*/
private boolean toggleContainer;
/** The type when the file was added.*/
private int type;
/** The group where the file will be imported.*/
private GroupData group;
/** The user to import data as */
private ExperimenterData user;
/**
* Creates a new instance.
*
* @param file The file to import.
* @param type The type of container when the file was added.
* @param group The group where to import the data.
* @param user The user to import data as.
*/
FileElement(FileObject file, int type, GroupData group, ExperimenterData user)
{
if (file == null)
throw new IllegalArgumentException("No file set");
this.file = file;
this.type = type;
this.group = group;
this.user = user;
length = -1;
if (type == Importer.SCREEN_TYPE)
this.toggleContainer = false;
}
/**
* Sets to <code>true</code> if the container can be modified,
* <code>false</code> otherwise. The value will only be taken into account
* if the object is a file.
*
* @param toggleContainer The value to set.
*/
void setToggleContainer(boolean toggleContainer)
{
this.toggleContainer = toggleContainer;
}
/**
* Returns <code>true</code> if the container can be modified,
* <code>false</code> otherwise. The value will only be taken into account
* if the object is a file.
*
* @return See above.
*/
boolean isToggleContainer()
{
if (type == Importer.SCREEN_TYPE) return false;
return toggleContainer;
}
/**
* Returns the type associated to that element.
*
* @return See above.
*/
int getType() { return type; }
/**
* Returns the length of the file
*
* @return See above.
*/
long getFileLength()
{
if (length > 0) return length;
return file.getLength();
}
/**
* Returns the length of the file in as a formatted string.
*
* @return See above.
*/
String getFileLengthAsString()
{
long l = getFileLength();
if (l <= 0) return "--";
return UIUtilities.formatFileSize(l);
}
/**
* Returns <code>true</code> if the file is a directory,
* <code>false</code> otherwise.
*
* @return See above.
*/
boolean isDirectory()
{
if (file.getFile() instanceof File) {
File f = (File) file.getFile();
if (f.isFile()) return false;
File[] list = f.listFiles();
if (list == null || list.length == 0) return false;
return true;
}
return false;
}
/**
* Returns the files within the directory.
*
* @return See above.
*/
List<File> getFiles()
{
if (!isDirectory()) return null;
File f = (File) file.getFile();
File[] list = f.listFiles();
List<File> files = new ArrayList<File>();
if (list == null || list.length == 0) return files;
for (int i = 0; i < list.length; i++) {
if (!list[i].isHidden() && !list[i].isDirectory())
files.add(list[i]);
}
return files;
}
/**
* Returns the name to give to the imported file.
*
* @return See above.
*/
String getName()
{
if (name == null) return file.getName();
return name;
}
/**
* Sets the name to give to the imported file.
*
* @param name The name to set.
*/
void setName(String name) { this.name = name; }
/**
* Returns the file hosted by this component.
*
* @return See above.
*/
public FileObject getFile() { return file; }
/**
* Returns the group.
*
* @return See above.
*/
public GroupData getGroup() { return group; }
/**
* Overridden to return the name to give to the imported file.
* @see Object#toString()
*/
public String toString() { return getName(); }
/**
* Returns the user.
*
* @return See above.
*/
public ExperimenterData getUser() { return user; }
}