//$HeadURL$
/*---------------- FILE HEADER ------------------------------------------
This file is part of deegree.
Copyright (C) 2001-2008 by:
Department of Geography, University of Bonn
http://www.giub.uni-bonn.de/deegree/
lat/lon GmbH
http://www.lat-lon.de
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Contact:
Andreas Poth
lat/lon GmbH
Aennchenstr. 19
53177 Bonn
Germany
E-Mail: poth@lat-lon.de
Prof. Dr. Klaus Greve
Department of Geography
University of Bonn
Meckenheimer Allee 166
53115 Bonn
Germany
E-Mail: greve@giub.uni-bonn.de
---------------------------------------------------------------------------*/
package org.deegree.igeo.views.swing.util;
import java.awt.Container;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.swing.filechooser.FileFilter;
import org.deegree.framework.util.StringTools;
import org.deegree.igeo.ApplicationContainer;
import org.deegree.igeo.i18n.Messages;
import org.deegree.igeo.settings.FileFilters;
/**
*
*
* @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
* @author last edited by: $Author$
*
* @version. $Revision$, $Date$
*/
public class IGeoFileFilter extends FileFilter {
/**
*
*/
public static final IGeoFileFilter SHP = new IGeoFileFilter( Messages.get( "$MD10356" ), "shp" );
/**
*
*/
public static final IGeoFileFilter PDF = new IGeoFileFilter( Messages.get( "$MD10356" ), "pdf" );
/**
*
*/
public static final IGeoFileFilter HTML = new IGeoFileFilter( Messages.get( "$MD10370" ), "htm", "html" );
/**
*
*/
public static final IGeoFileFilter XML = new IGeoFileFilter( Messages.get( "$MD10371" ), "xml" );
/**
*
*/
public static final IGeoFileFilter JASPER = new IGeoFileFilter( Messages.get( "$MD10371" ), "xml", "jrxml" );
/**
*
*/
public static final IGeoFileFilter JPEG = new IGeoFileFilter( Messages.get( "$MD10372" ), "jpg", "jpeg" );
/**
*
*/
public static final IGeoFileFilter PNG = new IGeoFileFilter( Messages.get( "$MD10373" ), "png" );
/**
*
*/
public static final IGeoFileFilter GPX = new IGeoFileFilter( Messages.get( "$MD10997" ), "gpx" );
/**
*
*/
public static final IGeoFileFilter TIFF = new IGeoFileFilter( Messages.get( "$MD10378" ), "tif", "tiff" );
/**
*
*/
public static final IGeoFileFilter GIF = new IGeoFileFilter( Messages.get( "$MD10379" ), "gif" );
/**
*
*/
public static final IGeoFileFilter BMP = new IGeoFileFilter( Messages.get( "$MD10380" ), "bmp" );
/**
*
*/
public static final IGeoFileFilter IMAGES = new IGeoFileFilter( Messages.get( "$MD10381" ), "jpg", "jpeg", "png",
"tif", "tiff", "gif", "bmp", "svg" );
/**
*
*/
public static final IGeoFileFilter PRJ = new IGeoFileFilter( Messages.get( "$MD10907" ), "prj" );
private LinkedList<String> extensions = null;
private String description;
/**
* <code>FILETYPE</code>
*
* @author <a href="mailto:schmitz@lat-lon.de">Andreas Schmitz</a>
* @author last edited by: $Author$
*
* @version $Revision$, $Date$
*/
public enum FILETYPE {
/**
*
*/
vector,
/**
*
*/
raster,
/**
*
*/
any
}
/**
* @param appContainer
* @param type
* @return list of {@link FileFilter}s for file formats known by iGeoDesktop
*/
public static List<IGeoFileFilter> createForwellKnownFormats( ApplicationContainer<Container> appContainer,
FILETYPE type ) {
FileFilters ff = appContainer.getSettings().getFileFilters();
List<String> ext = new ArrayList<String>();
List<String> extensions = ff.getFileExtensions();
if ( type == FILETYPE.any ) {
for ( String val : extensions ) {
ext.add( val + ';' + ff.getDescription( val ) );
}
} else if ( type == FILETYPE.vector ) {
for ( String val : extensions ) {
if ( ff.isVectorFormat( val ) ) {
ext.add( val + ';' + ff.getDescription( val ) );
}
}
} else if ( type == FILETYPE.raster ) {
for ( String val : extensions ) {
if ( !ff.isVectorFormat( val ) ) {
ext.add( val + ';' + ff.getDescription( val ) );
}
}
}
return IGeoFileFilter.createForExtensions( ext.toArray( new String[ext.size()] ) );
}
/**
*
* @param extensions
* @return list of {@link FileFilter}s; one for each extension
*/
public static List<IGeoFileFilter> createForExtensions( String... extensions ) {
List<IGeoFileFilter> list = new ArrayList<IGeoFileFilter>( extensions.length );
for ( String extension : extensions ) {
if ( extension.trim().length() > 4 ) {
String[] s = extension.split( ";" );
IGeoFileFilter cff = new IGeoFileFilter( s[0] );
if ( s.length > 1 ) {
cff.setDescription( StringTools.concat( 50, "*.", s[0].toLowerCase(), " - ", s[1] ) );
}
list.add( cff );
}
}
return list;
}
/**
*
* @param extensions
* list of considered file extensions (e.g. tif, BMP, Gif ..) The is is not case sensitive; use '*' for
* returning all files
*/
public IGeoFileFilter( String... extensions ) {
this.extensions = new LinkedList<String>();
for ( int i = 0; i < extensions.length; i++ ) {
this.extensions.add( extensions[i].toUpperCase() );
}
}
/**
* @return the extensions
*/
public LinkedList<String> getExtensions() {
return extensions;
}
/**
* sets a {@link FileFilter}s description text
*
* @param description
*/
public void setDescription( String description ) {
this.description = description;
}
@Override
public String getDescription() {
if ( description != null ) {
return description;
}
StringBuffer sb = new StringBuffer( 100 );
for ( int i = 0; i < extensions.size(); i++ ) {
sb.append( "*." ).append( extensions.get( i ).toLowerCase() );
if ( i < extensions.size() - 1 ) {
sb.append( "; " );
}
}
return sb.toString();
}
/**
* @param f
* @return a file with extension
*/
public File updateFile( File f ) {
String n = f.getName();
if ( n.indexOf( '.' ) == -1 ) {
return new File( f.toString() + "." + extensions.getLast().toLowerCase() );
}
return f;
}
@Override
public boolean accept( java.io.File file ) {
if ( file.isDirectory() ) {
return true;
}
String name = file.getName();
int pos = name.lastIndexOf( "." );
String ext = name.substring( pos + 1 ).toUpperCase();
String s = file.getAbsolutePath() + '/' + name;
File tmp = new File( s );
return extensions.contains( ext ) || ( extensions.contains( "*" ) && !tmp.isDirectory() );
}
}