org.crosswire.jsword.util
Class Project

java.lang.Object
  extended by org.crosswire.jsword.util.Project

public final class Project
extends Object

The Project class looks after the source of project files. These are per user files and as such have a different location on different operating systems. These are:

Mac OS X~/Library/Application Support/JSword
Win NT/2000/XP/ME/9x~/Application Data/JSword (~ is all over the place, but Java figures it out)
Unix and otherwise~/.jsword

Previously the location was ~/.jsword, which is unfriendly in the Windows and Mac world. If this location is found on Mac or Windows, it will be moved to the new location, if different and possible.

Author:
Joe Walker [joe at eireneh dot com], DM Smith [dmsmith555 at yahoo dot com]
See Also:
for license details. The copyright to this program is held by it's authors.

Field Summary
static String DIR_NETCACHE
          The cache of downloaded files inside the project directory
static String DIR_PROJECT
          The JSword user settings directory
static String DIR_PROJECT_ALT
          The JSword user settings directory for Mac and Windows
private  URL home
          The home for this application
private static Project instance
          The filesystem resources
private static Logger log
          The log stream
static String MAC_USER_DATA_AREA
          The Mac user settings parent directory
private  URL userArea
          The parent directory for the home of this application
static String WIN32_USER_DATA_AREA
          The Windows user settings parent directory
 
Constructor Summary
private Project()
          Prevent Instansiation.
 
Method Summary
 URL getDeprecatedUserProjectDir()
          Get the location where the project dir used to be.
 URL getTempScratchSpace(String subject, boolean create)
          When we need a directory to write stuff to.
 URL getUserProjectDir()
          Establishes the user's project directory.
 URL getUserProjectDir(String unixDefault, String winMacDefault)
          Establishes the user's project directory.
 URL getWritablePropertiesURL(String subject)
          Get a the URL of a (potentially non-existant) properties file that we can write to.
static Project instance()
          Accessor for the resource singleton.
private  URL migrateUserProjectDir(URL oldPath, URL newPath)
          Migrates the user's project dir, if necessary and possible.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DIR_NETCACHE

public static final String DIR_NETCACHE
The cache of downloaded files inside the project directory

See Also:
Constant Field Values

DIR_PROJECT

public static final String DIR_PROJECT
The JSword user settings directory

See Also:
Constant Field Values

DIR_PROJECT_ALT

public static final String DIR_PROJECT_ALT
The JSword user settings directory for Mac and Windows

See Also:
Constant Field Values

WIN32_USER_DATA_AREA

public static final String WIN32_USER_DATA_AREA
The Windows user settings parent directory

See Also:
Constant Field Values

MAC_USER_DATA_AREA

public static final String MAC_USER_DATA_AREA
The Mac user settings parent directory

See Also:
Constant Field Values

userArea

private URL userArea
The parent directory for the home of this application


home

private URL home
The home for this application


log

private static final Logger log
The log stream


instance

private static Project instance
The filesystem resources

Constructor Detail

Project

private Project()
Prevent Instansiation.

The biggest job is trying to work out which resource bundle to load to work out where the config and data files are stored. We construct a name from the projectname, hostname and any other info and then try to use that.

Method Detail

instance

public static Project instance()
Accessor for the resource singleton.


getUserProjectDir

public URL getUserProjectDir(String unixDefault,
                             String winMacDefault)
Establishes the user's project directory.

Throws:
MalformedURLException

getUserProjectDir

public URL getUserProjectDir()
Establishes the user's project directory.

Throws:
MalformedURLException

getDeprecatedUserProjectDir

public URL getDeprecatedUserProjectDir()
Get the location where the project dir used to be.

Returns:
~/.jsword
Throws:
MalformedURLException

migrateUserProjectDir

private URL migrateUserProjectDir(URL oldPath,
                                  URL newPath)
Migrates the user's project dir, if necessary and possible.

Parameters:
oldPath - the path to the old, deprecated location
newPath - the path to the new location
Returns:
newPath if the migration was possible or not needed.

getWritablePropertiesURL

public URL getWritablePropertiesURL(String subject)
Get a the URL of a (potentially non-existant) properties file that we can write to. This method of aquiring properties files is preferred over getResourceProperties() as this is writable and can take into account user preferences. This method makes no promise that the URL returned is valid. It is totally untested, so reading may well cause errors.

Parameters:
subject - The name (minus the .properties extension)
Returns:
The resource as a URL

getTempScratchSpace

public URL getTempScratchSpace(String subject,
                               boolean create)
                        throws IOException
When we need a directory to write stuff to.

This directory should be used as a cache for something that could also be got at runtime by some other means.

So it is not for config data, and not for program files. If someone were to delete all the files in this directory while you weren't looking then life should not stop, but should carry on albeit with a slower service.

This method may well return null if we are running in a restricted environment, so callers of this method should be prepared for that eventuallity too.

As a result of these limitations it could be OK to use File in place of URL (which is the norm for this project), however there doesn't seem to be a good reason to relax this rule here.

Parameters:
subject - A moniker for the area to write to. This will be converted into a directory name.
Returns:
A file: URL pointing at a local writable directory.
Throws:
IOException

Copyright ยจ 2003-2006