package lancs.mobilemedia.core.ui.controller;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.rms.RecordStoreFullException;
import lancs.mobilemedia.core.ui.MainUIMidlet;
import lancs.mobilemedia.core.ui.datamodel.AlbumData;
import lancs.mobilemedia.core.ui.datamodel.MediaData;
import lancs.mobilemedia.core.ui.screens.AddMediaToAlbum;
import lancs.mobilemedia.core.ui.screens.AlbumListScreen;
import lancs.mobilemedia.core.util.Constants;
import lancs.mobilemedia.lib.exceptions.ImageNotFoundException;
import lancs.mobilemedia.lib.exceptions.ImagePathNotValidException;
import lancs.mobilemedia.lib.exceptions.InvalidImageDataException;
import lancs.mobilemedia.lib.exceptions.PersistenceMechanismException;
import de.ovgu.cide.jakutil.*;
/**
* @author Eduardo Figueiredo
* [EF] Added in Scenario 05
*/
public class PhotoViewController extends AbstractController {
String imageName="";
/**
* @param midlet
* @param nextController
* @param albumData
* @param albumListScreen
* @param currentScreenName
*/
public PhotoViewController( MainUIMidlet midlet, AlbumData albumData, AlbumListScreen albumListScreen, String imageName){
super(midlet,albumData,albumListScreen);
this.imageName=imageName;
}
public boolean handleCommand( Command c){
return new PhotoViewController_handleCommand(this,c).execute();
}
@MethodObject static class PhotoViewController_handleCommand {
PhotoViewController_handleCommand( PhotoViewController _this, Command c){
this._this=_this;
this.c=c;
}
boolean execute(){
try {
label=c.getLabel();
System.out.println("<* PhotoViewController.handleCommand() *> " + label);
if (label.equals("Copy")) {
copyPhotoToAlbum=new AddMediaToAlbum("Copy Photo to Album");
copyPhotoToAlbum.setItemName(_this.imageName);
copyPhotoToAlbum.setLabePath("Copy to Album:");
copyPhotoToAlbum.setCommandListener(_this);
this.hook37();
Display.getDisplay(midlet).setCurrent(copyPhotoToAlbum);
return true;
}
else if (label.equals("Save Item")) {
try {
imageData=null;
this.hook39();
photoname=((AddMediaToAlbum)_this.getCurrentScreen()).getItemName();
albumname=((AddMediaToAlbum)_this.getCurrentScreen()).getPath();
this.hook38();
}
catch ( InvalidImageDataException e) {
alert=null;
if (e instanceof ImagePathNotValidException) alert=new Alert("Error","The path is not valid",null,AlertType.ERROR);
else alert=new Alert("Error","The image file format is not valid",null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent());
return true;
}
catch ( PersistenceMechanismException e) {
alert=null;
if (e.getCause() instanceof RecordStoreFullException) alert=new Alert("Error","The mobile database is full",null,AlertType.ERROR);
else alert=new Alert("Error","The mobile database can not add a new photo",null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent());
}
((AlbumListScreen)_this.getAlbumListScreen()).repaintListAlbum(_this.getAlbumData().getAlbumNames());
_this.setCurrentScreen(_this.getAlbumListScreen());
ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN);
return true;
}
this.hook36();
if ((label.equals("Cancel")) || (label.equals("Back"))) {
((AlbumListScreen)_this.getAlbumListScreen()).repaintListAlbum(_this.getAlbumData().getAlbumNames());
_this.setCurrentScreen(_this.getAlbumListScreen());
ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN);
return true;
}
return false;
}
catch ( ReturnBoolean r) {
return r.value;
}
}
protected PhotoViewController _this;
protected Command c;
protected String label;
protected AddMediaToAlbum copyPhotoToAlbum;
protected MediaData imageData;
protected byte[] imgByte;
protected Alert alert;
protected String photoname;
protected String albumname;
protected Alert alert;
protected Alert alert;
protected byte[] newfoto;
protected AddMediaToAlbum copyPhotoToAlbum;
protected void hook36(){
}
protected void hook37(){
}
protected void hook38() throws InvalidImageDataException, PersistenceMechanismException {
_this.getAlbumData().addMediaData(imageData,albumname);
}
protected void hook39() throws InvalidImageDataException, PersistenceMechanismException {
try {
imageData=_this.getAlbumData().getMediaInfo(_this.imageName);
}
catch ( ImageNotFoundException e) {
alert=new Alert("Error","The selected photo was not found in the mobile device",null,AlertType.ERROR);
Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent());
}
}
}
}