The API for programming the DSpace system.

## DSpace System Architecture

Briefly, DSpace consists of a three-layer architecture:

Application Layer | `org.dspace.app.*`
Business Logic Layer | `org.dspace.*`
Storage Layer | `org.dspace.storage.*`

Each layer is divided into subsystems. These are stored in separate packages. Only the public API of each subsystem should be used by other subsystems. Additionally, subsystems in the Application Layer should not use the Storage Layer directly.

The top level of each package must contain only public classes and methods that are part of the public API of the subsystem. This way, conservative use of `import` ensures that subsystems are only using appropriate public APIs.

Test classes for subsystems that have automatic self-tests reside in a `test` sub-package. For example, the browse subsystem tests reside in `org.dspace.browse.test`. Such test classes must also have a name that ends in `Test.Java`, for example `BrowseTest.java`.

Each of the layers and the packages that are part of them are described below.

### Application Layer

Presently, the application layer consists of:

- The Web user interface
- The Open Archives Protocol for Initiative Metadata Harvesting implementation
- Item import and export tools
- The Media Filter tool, which is a batch tool that iterates through the bitstreams in DSpace, and applies filters to bitstreams of a particular format. This can be used to e.g. generate image thumbnails, and extract full-text from documents for indexing.
- The METS tools -- currently just an exporter, which exports DSpace AIPs with the metadata stored in an XML METS file. Soon a corresponding importer will be added too.

Since this and other applications are "customers" of DSpace, they do not need to have strictly defined public APIs. Subsystems in the application layer should be sub-packages of `org.dspace.app`. Subsystems in the application layer should not use the storage layer directly.

### Business Logic Layer

This is where the main smarts of the system lie. It consists of a number of subsystems, stored in sub-packages of `org.dspace`, and some core classes in `org.dspace.core`. Sub-packages of org.dspace that are not in `org.dspace.app` or `org.dspace.storage` are business logic subsystems.

`org.dspace.content` (the content management API) is probably the most useful to applications. Other subsystems are generally only directly used by applications providing administrative functionality.

### Storage Layer

The storage layer currently consists of two subsystems: The relational database management system interface, and the bitstore. These are in packages `org.dspace.storage.rdbms` and `org.dspace.storage.bitstore` respectively. Any new storage subsystems should also be sub-packages of `org.dspace.storage`.

## More Information

More detailed architectural information for the current stable release of DSpace can be found here:

http://dspace.org/technology/system-docs/

If you're using a beta or earlier version of DSpace, you should download the 'dspace-docs' documentation package corresponding to the version you're using from the SourceForge download page:

http://sourceforge.net/project/showfiles.php?group_id=19984