package lancs.mobilemedia.core.ui.controller; import java.io.InputStream; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.List; import javax.microedition.rms.RecordStoreFullException; 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 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.ui.screens.NewLabelScreen; import lancs.mobilemedia.core.util.Constants; import de.ovgu.cide.jakutil.*; /** * @author Eduardo Figueiredo * Added in the Scenario 02 */ public class MediaController extends MediaListController { private MediaData media; private NewLabelScreen screen; public MediaController( MainUIMidlet midlet, AlbumData albumData, AlbumListScreen albumListScreen){ super(midlet,albumData,albumListScreen); } public boolean handleCommand( Command command){ return new MediaController_handleCommand(this,command).execute(); } void updateMedia( MediaData media) throws InvalidImageDataException, PersistenceMechanismException { getAlbumData().updateMediaInfo(media,media); } /** * Get the last selected image from the Photo List screen. * TODO: This really only gets the selected List item. * So it is only an image name if you are on the PhotoList screen... * Need to fix this */ public String getSelectedMediaName(){ List selected=(List)Display.getDisplay(midlet).getCurrent(); if (selected == null) System.out.println("Current List from display is NULL!"); String name=selected.getString(selected.getSelectedIndex()); return name; } /** * [EF] update this method or merge with method of super class. * Go to the previous screen */ private boolean goToPreviousScreen(){ System.out.println("<* PhotoController.goToPreviousScreen() *>"); String currentScreenName=ScreenSingleton.getInstance().getCurrentScreenName(); if (currentScreenName.equals(Constants.ALBUMLIST_SCREEN)) { System.out.println("Can't go back here...Should never reach this spot"); } else if (currentScreenName.equals(Constants.IMAGE_SCREEN)) { showMediaList(getCurrentStoreName(),false,false); ScreenSingleton.getInstance().setCurrentScreenName(Constants.IMAGELIST_SCREEN); return true; } else if (currentScreenName.equals(Constants.ADDPHOTOTOALBUM_SCREEN)) { showMediaList(getCurrentStoreName(),false,false); ScreenSingleton.getInstance().setCurrentScreenName(Constants.IMAGELIST_SCREEN); return true; } return false; } /** * @param image the image to set */ public void setMedia( MediaData media){ this.media=media; } /** * @return the image */ public MediaData getMedia(){ return media; } /** * @param screen */ public void setScreen( NewLabelScreen screen){ this.screen=screen; } /** * @return */ public NewLabelScreen getScreen(){ return screen; } @MethodObject static class MediaController_handleCommand { MediaController_handleCommand( MediaController _this, Command command){ this._this=_this; this.command=command; } boolean execute(){ try { label=command.getLabel(); System.out.println("<* PhotoController.handleCommand() *> " + label); if (label.equals("Add")) { ScreenSingleton.getInstance().setCurrentScreenName(Constants.ADDPHOTOTOALBUM_SCREEN); form=new AddMediaToAlbum("Add new item to Album"); form.setCommandListener(_this); _this.setCurrentScreen(form); return true; } this.hook26(); this.hook23(); this.hook28(); this.hook22(); this.hook21(); if (label.equals("Save Item")) { try { _this.getAlbumData().addNewMediaToAlbum(((AddMediaToAlbum)_this.getCurrentScreen()).getItemName(),((AddMediaToAlbum)_this.getCurrentScreen()).getPath(),_this.getCurrentStoreName()); this.hook24(); } 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 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()); } catch ( ImageNotFoundException e) { this.hook25(); } return _this.goToPreviousScreen(); } if (label.equals("Delete")) { selectedMediaName=_this.getSelectedMediaName(); try { _this.getAlbumData().deleteMedia(_this.getCurrentStoreName(),selectedMediaName); } catch ( PersistenceMechanismException e) { alert=new Alert("Error","The mobile database can not delete this item",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); return true; } catch ( ImageNotFoundException e) { alert=new Alert("Error","The selected item was not found in the mobile device",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); return true; } _this.showMediaList(_this.getCurrentStoreName(),false,false); ScreenSingleton.getInstance().setCurrentScreenName(Constants.IMAGELIST_SCREEN); return true; } if (label.equals("Edit Label")) { selectedImageName=_this.getSelectedMediaName(); try { _this.media=_this.getAlbumData().getMediaInfo(selectedImageName); formScreen=new NewLabelScreen("Edit Label Item",NewLabelScreen.LABEL_PHOTO); formScreen.setCommandListener(_this); _this.setScreen(formScreen); _this.setCurrentScreen(formScreen); formScreen=null; } catch ( ImageNotFoundException e) { alert=new Alert("Error","The selected item was not found in the mobile device",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); } return true; } this.hook27(); if (label.equals("Set Favorite")) { selectedMediaName=_this.getSelectedMediaName(); try { media=_this.getAlbumData().getMediaInfo(selectedMediaName); media.toggleFavorite(); _this.updateMedia(media); System.out.println("<* BaseController.handleCommand() *> Image = " + selectedMediaName + "; Favorite = "+ media.isFavorite()); } catch ( ImageNotFoundException e) { alert=new Alert("Error","The selected item was not found in the mobile device",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); } 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()); } 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 update new informations",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); } return true; } if (label.equals("View Favorites")) { _this.showMediaList(_this.getCurrentStoreName(),false,true); ScreenSingleton.getInstance().setCurrentScreenName(Constants.IMAGELIST_SCREEN); return true; } if (label.equals("Save")) { System.out.println("<* PhotoController.handleCommand() *> Save Photo Label = " + _this.screen.getLabelName()); _this.getMedia().setMediaLabel(_this.screen.getLabelName()); try { _this.updateMedia(_this.media); } 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()); } catch ( PersistenceMechanismException e) { alert=new Alert("Error","The mobile database can not update this photo",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); } return _this.goToPreviousScreen(); } if (label.equals("Back")) { return _this.goToPreviousScreen(); } if (label.equals("Cancel")) { return _this.goToPreviousScreen(); } return false; } catch ( ReturnBoolean r) { return r.value; } } protected MediaController _this; protected Command command; protected String label; protected AddMediaToAlbum form; protected String selectedImageName; protected String selectedMediaName; protected String selectedMediaName; protected CaptureVideoScreen playscree; protected VideoCaptureController controller; protected CaptureVideoScreen playscree; protected PhotoViewController controller; protected MediaData mymedia; protected Alert alert; protected Alert alert; protected Alert alert; protected String selectedMediaName; protected Alert alert; protected Alert alert; protected String selectedImageName; protected NewLabelScreen formScreen; protected Alert alert; protected String selectedMediaName; protected MediaData media; protected Alert alert; protected Alert alert; protected Alert alert; protected Alert alert; protected Alert alert; protected void hook21(){ } protected void hook22(){ } protected void hook23(){ } protected void hook24() throws InvalidImageDataException, PersistenceMechanismException, ImageNotFoundException { } protected void hook25(){ } protected void hook26(){ } protected void hook27(){ } protected void hook28(){ } } }