/* * Created on Sep 28, 2004 */ package lancs.mobilemedia.core.ui.datamodel; import javax.microedition.lcdui.Image; 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; /** * @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() { //Shouldn't load all the albums each time //Add a check somewhere in ImageAccessor to see if they've been //loaded into memory already, and avoid the extra work... 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); } // #ifdef includeCopyPhoto /** * @param mediaData * @param albumname * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public void addMediaData(MediaData mediaData, String albumname) throws InvalidImageDataException, PersistenceMechanismException { mediaAccessor.addMediaData(mediaData, albumname); } // #endif // #ifdef includeSmsFeature /* [NC] Added in scenario 06 */ /** * @param photoname * @param imgdata * @param albumname * @throws InvalidImageDataException * @throws PersistenceMechanismException */ public void addImageData(String photoname, Image imgdata, String albumname) throws InvalidImageDataException, PersistenceMechanismException { if (mediaAccessor instanceof ImageMediaAccessor) ((ImageMediaAccessor)mediaAccessor).addImageData(photoname, imgdata, albumname); } // #endif /** * 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(); } } /** * [EF] Added in order to have access to ImageData * @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); } }