/*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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.
*
* 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 ( see the LICENSE file ).
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* AELITIS, SAS au capital de 46,603.30 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.views.tableitems.files;
import java.io.File;
import java.io.IOException;
import org.gudy.azureus2.plugins.ui.tables.*;
import org.gudy.azureus2.core3.disk.DiskManagerFileInfo;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerState;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.ui.swt.views.FilesView;
import org.gudy.azureus2.ui.swt.views.table.CoreTableColumnSWT;
public class PathItem
extends CoreTableColumnSWT
implements TableCellRefreshListener
{
/** Default Constructor */
public PathItem() {
super("path", ALIGN_LEAD, POSITION_LAST, 200, TableManager.TABLE_TORRENT_FILES);
}
public void fillTableColumnInfo(TableColumnInfo info) {
info.addCategories(new String[] {
CAT_CONTENT,
});
info.setProficiency(TableColumnInfo.PROFICIENCY_BEGINNER);
}
public void refresh(TableCell cell) {
DiskManagerFileInfo fileInfo = (DiskManagerFileInfo)cell.getDataSource();
cell.setText(determinePath(fileInfo));
}
private static String determinePath(DiskManagerFileInfo fileInfo) {
if( fileInfo == null ) {
return "";
}
boolean has_link = fileInfo.getLink() != null;
boolean show_full_path = FilesView.show_full_path;
DownloadManager dm = fileInfo.getDownloadManager();
File dl_save_path_file = dm.getAbsoluteSaveLocation();
TOTorrent torrent = dm.getTorrent();
if ( torrent != null && torrent.isSimpleTorrent()){
dl_save_path_file = dl_save_path_file.getParentFile();
}
String dl_save_path = dl_save_path_file.getPath();
if (!dl_save_path.endsWith(File.separator)) {
dl_save_path += File.separator;
}
File file = fileInfo.getFile(true);
/**
* Figure out whether we should show the full path anyway.
* We'll do this if the path is relative to he current
* download save path.
*/
//
if (has_link && !show_full_path) {
show_full_path = !file.getAbsolutePath().startsWith(dl_save_path);
}
String path = "";
if (show_full_path) {
try {
path = file.getParentFile().getCanonicalPath();
}
catch( IOException e ) {
path = file.getParentFile().getAbsolutePath();
}
if ( !path.endsWith( File.separator )){
path += File.separator;
}
}else{
path = file.getAbsolutePath().substring(dl_save_path.length());
if (path.length() == 0) {
path = File.separator;
}
else {
if (path.charAt(0) == File.separatorChar) {
path = path.substring(1);
}
int pos = path.lastIndexOf(File.separator);
if (pos > 0 ) {
path = File.separator + path.substring( 0, pos );
}
else {
path = File.separator;
}
}
}
if ( fileInfo.isSkipped()){
String dnd_sf = dm.getDownloadState().getAttribute( DownloadManagerState.AT_DND_SUBFOLDER );
if ( dnd_sf != null ){
dnd_sf = dnd_sf.trim();
if ( dnd_sf.length() > 0 ){
if ( show_full_path ){
dnd_sf += File.separatorChar;
if ( path.endsWith( dnd_sf )){
path = path.substring( 0, path.length() - dnd_sf.length());
}
}else{
if ( path.endsWith( dnd_sf )){
path = path.substring( 0, path.length() - dnd_sf.length());
if ( path.length() > 1 && path.endsWith( File.separator )){
path = path.substring( 0, path.length()-1 );
}
}
}
}
}
}
return path;
}
}