package lancs.mobilemedia.core.ui.datamodel; import javax.microedition.rms.RecordStore; import javax.microedition.rms.RecordStoreException; import javax.microedition.rms.RecordStoreFullException; import javax.microedition.rms.RecordStoreNotFoundException; import javax.microedition.rms.RecordStoreNotOpenException; import lancs.mobilemedia.lib.exceptions.ImageNotFoundException; import lancs.mobilemedia.lib.exceptions.InvalidImageDataException; import lancs.mobilemedia.lib.exceptions.InvalidPhotoAlbumNameException; import lancs.mobilemedia.lib.exceptions.PersistenceMechanismException; import lancs.mobilemedia.lib.exceptions.UnavailablePhotoAlbumException; import de.ovgu.cide.jakutil.*; /** * @author tyoung * This class represents the data model for Photo Albums. A Photo Album object * is essentially a list of photos or images, stored in a Hashtable. Due to * constraints of the J2ME RecordStore implementation, the class stores a table * of the images, indexed by an identifier, and a second table of image metadata * (ie. labels, album name etc.) * This uses the ImageAccessor class to retrieve the image data from the * recordstore (and eventually file system etc.) */ public abstract class AlbumData { protected MediaAccessor mediaAccessor; /** * Load any photo albums that are currently defined in the record store */ public String[] getAlbumNames(){ try { mediaAccessor.loadAlbums(); } catch ( InvalidImageDataException e) { e.printStackTrace(); } catch ( PersistenceMechanismException e) { e.printStackTrace(); } return mediaAccessor.getAlbumNames(); } /** * Get all images for a given Photo Album that exist in the Record Store. * @throws UnavailablePhotoAlbumException * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public MediaData[] getMedias( String recordName) throws UnavailablePhotoAlbumException { MediaData[] result; try { result=mediaAccessor.loadMediaDataFromRMS(recordName); } catch ( PersistenceMechanismException e) { throw new UnavailablePhotoAlbumException(e); } catch ( InvalidImageDataException e) { throw new UnavailablePhotoAlbumException(e); } return result; } /** * Define a new user photo album. This results in the creation of a new * RMS Record store. * @throws PersistenceMechanismException * @throws InvalidPhotoAlbumNameException */ public void createNewAlbum( String albumName) throws PersistenceMechanismException, InvalidPhotoAlbumNameException { mediaAccessor.createNewAlbum(albumName); } /** * @param albumName * @throws PersistenceMechanismException */ public void deleteAlbum( String albumName) throws PersistenceMechanismException { mediaAccessor.deleteAlbum(albumName); } /** * @param label * @param path * @param album * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public void addNewMediaToAlbum( String label, String path, String album) throws InvalidImageDataException, PersistenceMechanismException { mediaAccessor.addMediaData(label,path,album); } /** * Delete a photo from the photo album. This permanently deletes the image from the record store * @throws ImageNotFoundException * @throws PersistenceMechanismException */ public void deleteMedia( String mediaName, String storeName) throws PersistenceMechanismException, ImageNotFoundException { mediaAccessor.deleteSingleMediaFromRMS(mediaName,storeName); } /** * Reset the image data for the application. This is a wrapper to the ImageAccessor.resetImageRecordStore * method. It is mainly used for testing purposes, to reset device data to the default album and photos. * @throws PersistenceMechanismException * @throws InvalidImageDataException */ public void resetMediaData() throws PersistenceMechanismException { try { mediaAccessor.resetRecordStore(); } catch ( InvalidImageDataException e) { e.printStackTrace(); } } /** * @param imageName * @return * @throws ImageNotFoundException */ public MediaData getMediaInfo( String imageName) throws ImageNotFoundException { return mediaAccessor.getMediaInfo(imageName); } /** * @param recordName * @return * @throws PersistenceMechanismException * @throws InvalidImageDataException */ public MediaData[] loadMediaDataFromRMS( String recordName) throws PersistenceMechanismException, InvalidImageDataException { return mediaAccessor.loadMediaDataFromRMS(recordName); } /** * @param oldData * @param newData * @return * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public boolean updateMediaInfo( MediaData oldData, MediaData newData) throws InvalidImageDataException, PersistenceMechanismException { return mediaAccessor.updateMediaInfo(oldData,newData); } /** * @param recordName * @param recordId * @return * @throws PersistenceMechanismException */ public byte[] loadMediaBytesFromRMS( String recordName, int recordId) throws PersistenceMechanismException { return mediaAccessor.loadMediaBytesFromRMS(recordName,recordId); } /** * @param photoname * @param imgdata * @param albumname * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public void addImageData( String photoname, byte[] imgdata, String albumname) throws InvalidImageDataException, PersistenceMechanismException { if (mediaAccessor instanceof ImageMediaAccessor) ((ImageMediaAccessor)mediaAccessor).addImageData(photoname,imgdata,albumname); } }