package com.limegroup.gnutella.archive;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;
public class Archives {
/** Internet Archive Media Types */
/** Contributions of media type movies will default to
* the open-source movies collection
*/
public static final int MEDIA_MOVIES = 1;
private static final Integer _mediaMovies =
new Integer( MEDIA_MOVIES );
/* doesn't look like Internet Archive is accepting even
* open-source/CC books from the general community
* (Oct 2005)
*/
//public static final int MEDIA_TEXTS = 2;
/** Contributions of media type audio will default to
* the open-source audio collection
*/
public static final int MEDIA_AUDIO = 3;
private static final Integer _mediaAudio =
new Integer( MEDIA_AUDIO );
/* no contribution of software yet from general community
* (Oct 2005)
*/
// public static final int MEDIA_SOFTWARE = 4;
private static final Map _mediaStrings;
static {
Map m = new HashMap();
m.put( _mediaMovies, "movies" );
m.put( _mediaAudio, "audio" );
_mediaStrings = Collections.unmodifiableMap(m);
}
/* Dublin-core types. See http://dublincore.org/documents/dcmi-type-vocabulary/ */
public static final int TYPE_MOVING_IMAGE = 1;
private static final Integer _typeMovingImage = new Integer( TYPE_MOVING_IMAGE );
public static final int TYPE_SOUND = 2;
private static final Integer _typeSound = new Integer( TYPE_SOUND );
private static final Map _typeStrings;
static {
Map m = new HashMap();
m.put( _typeMovingImage, "MovingImage" );
m.put( _typeSound, "Sound" );
_typeStrings = Collections.unmodifiableMap( m );
}
/* Just use open-source collections for now */
/**** Movie Collections ****/
/** Open-Source Movies - CC-licensed movies */
public static final int COLLECTION_OPENSOURCE_MOVIES = 1;
private static final Integer _collectionOpensourceMovies =
new Integer( COLLECTION_OPENSOURCE_MOVIES );
/**** Audio Collections ****/
/** Open-Source Audio - CC-licensed audio */
public static final int COLLECTION_OPENSOURCE_AUDIO = 2;
private static final Integer _collectionOpensourceAudio =
new Integer( COLLECTION_OPENSOURCE_AUDIO );
private static final Map _collectionStrings;
private static final Map _defaultCollectionsForMedia;
private static final Map _defaultTypesForMedia;
static {
Map mCS = new HashMap();
Map mDCFM = new HashMap();
Map mDTFM = new HashMap();
mCS.put( _collectionOpensourceMovies, "opensource_movies" );
mCS.put( _collectionOpensourceAudio, "opensource_audio" );
_collectionStrings = Collections.unmodifiableMap( mCS );
mDCFM.put( _mediaMovies, _collectionOpensourceMovies );
mDTFM.put( _mediaMovies, _typeMovingImage );
mDCFM.put( _mediaAudio, _collectionOpensourceMovies );
mDTFM.put( _mediaAudio, _typeSound );
_defaultCollectionsForMedia = Collections.unmodifiableMap( mDCFM );
_defaultTypesForMedia = Collections.unmodifiableMap( mDTFM );
}
static String getMediaString( int media ) {
return (String) _mediaStrings.get( new Integer( media ) );
}
static String getCollectionString( int collection ) {
return (String) _collectionStrings
.get( new Integer( collection ) );
}
static String getTypeString( int type ) {
return (String) _typeStrings.get( new Integer( type ));
}
/**
*
* @param media
* @return
* @throws IllegalArgumentException
* If media is not valid
*/
static int defaultCollectionForMedia( int media ) {
Integer c = (Integer) _defaultCollectionsForMedia.get( new Integer( media ) );
if ( c == null ) {
throw new IllegalArgumentException( "Invalid media type: " + media );
}
return c.intValue();
}
/**
*
* @param media
* @return
* @ throws IllegalArgumentException
* If media is not valid
*/
static int defaultTypesForMedia( int media ) {
Integer c = (Integer) _defaultTypesForMedia.get( new Integer( media ));
if (c == null ) {
throw new IllegalArgumentException( "Invalid media type: " + media );
}
return c.intValue();
}
// first character can only be alphanumberic
private static final Pattern BAD_BEGINNING_CHARS =
Pattern.compile( "^[^\\p{Alnum}]+" );
// only allow alphanumerics and . - _
private static final Pattern BAD_CHARS =
Pattern.compile( "[^\\p{Alnum}\\.\\-_]" );
private static final String REPLACE_STR = "_";
public static String normalizeName( String name ) {
final int MIN_LENGTH = 5;
final int MAX_LENGTH = 100;
if ( name == null )
return null;
// chop off all bad beginning characters
name = BAD_BEGINNING_CHARS.matcher( name ).replaceFirst("");
name = BAD_CHARS.matcher( name ).replaceAll(REPLACE_STR);
final StringBuffer nameBuf = new StringBuffer( name );
while ( nameBuf.length() < MIN_LENGTH ) {
nameBuf.append( REPLACE_STR );
}
if ( nameBuf.length() > MAX_LENGTH ) {
nameBuf.setLength( MAX_LENGTH );
}
return nameBuf.toString();
}
/* factory methods */
public static Contribution createContribution( String username, String password,
String title, String description, int media)
throws DescriptionTooShortException {
return new AdvancedContribution( username, password, title, description, media );
}
public static Contribution createContribution( String username, String password,
String title, String description, int media, int collection, int type )
throws DescriptionTooShortException {
return new AdvancedContribution( username, password, title, description, media, collection, type );
}
/**
* checks if the given description would be valid
* @param description
* @return
*/
public static void checkDescription( String description )
throws DescriptionTooShortException
{
AdvancedContribution.checkDescription( description );
}
}