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.lcdui.List; import javax.microedition.rms.RecordStoreFullException; import lancs.mobilemedia.core.ui.MainUIMidlet; import lancs.mobilemedia.core.ui.datamodel.AlbumData; import lancs.mobilemedia.core.ui.screens.AlbumListScreen; import lancs.mobilemedia.core.ui.screens.NewLabelScreen; import lancs.mobilemedia.core.util.Constants; import lancs.mobilemedia.lib.exceptions.InvalidPhotoAlbumNameException; import lancs.mobilemedia.lib.exceptions.PersistenceMechanismException; import de.ovgu.cide.jakutil.*; /** * @author Eduardo Figueiredo * Added in the Scenario 04. * Purpose: simplify method handleCommand() in the BaseController. */ public class AlbumController extends AbstractController { public AlbumController( MainUIMidlet midlet, AlbumData albumData, AlbumListScreen albumListScreen){ super(midlet,albumData,albumListScreen); } public boolean handleCommand( Command command){ return new AlbumController_handleCommand(this,command).execute(); } /** * This option is mainly for testing purposes. If the record store * on the device or emulator gets into an unstable state, or has too * many images, you can reset it, which clears the record stores and * re-creates them with the default images bundled with the application */ private void resetMediaData(){ try { getAlbumData().resetMediaData(); } catch ( PersistenceMechanismException e) { Alert alert=null; if (e.getCause() instanceof RecordStoreFullException) alert=new Alert("Error","The mobile database is full",null,AlertType.ERROR); else alert=new Alert("Error","It is not possible to reset the database",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); return; } for (int i=0; i < getAlbumListScreen().size(); i++) { getAlbumListScreen().delete(i); } String[] albumNames=getAlbumData().getAlbumNames(); for (int i=0; i < albumNames.length; i++) { if (albumNames[i] != null) { getAlbumListScreen().append(albumNames[i],null); } } setCurrentScreen(getAlbumListScreen()); } private void goToPreviousScreen(){ System.out.println("<* AlbumController.goToPreviousScreen() *>"); ((AlbumListScreen)getAlbumListScreen()).repaintListAlbum(getAlbumData().getAlbumNames()); setCurrentScreen(getAlbumListScreen()); ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN); } @MethodObject static class AlbumController_handleCommand { AlbumController_handleCommand( AlbumController _this, Command command){ this._this=_this; this.command=command; } boolean execute(){ try { label=command.getLabel(); System.out.println("<* AlbumController.handleCommand() *>: " + label); if (label.equals("Reset")) { System.out.println("<* BaseController.handleCommand() *> Reset Photo Album"); _this.resetMediaData(); ScreenSingleton.getInstance().setCurrentScreenName(Constants.ALBUMLIST_SCREEN); return true; } else if (label.equals("New Album")) { System.out.println("Create new Photo Album here"); ScreenSingleton.getInstance().setCurrentScreenName(Constants.NEWALBUM_SCREEN); canv=new NewLabelScreen("Add new Photo Album",NewLabelScreen.NEW_ALBUM); canv.setCommandListener(_this); _this.setCurrentScreen(canv); canv=null; return true; } else if (label.equals("Delete Album")) { System.out.println("Delete Photo Album here"); down=(List)Display.getDisplay(midlet).getCurrent(); ScreenSingleton.getInstance().setCurrentScreenName(Constants.CONFIRMDELETEALBUM_SCREEN); ScreenSingleton.getInstance().setCurrentStoreName(down.getString(down.getSelectedIndex())); message="Would you like to remove the album " + ScreenSingleton.getInstance().getCurrentStoreName(); deleteConfAlert=new Alert("Delete Photo Album",message,null,AlertType.CONFIRMATION); deleteConfAlert.setTimeout(Alert.FOREVER); deleteConfAlert.addCommand(new Command("Yes - Delete",Command.OK,2)); deleteConfAlert.addCommand(new Command("No - Delete",Command.CANCEL,2)); _this.setAlbumListAsCurrentScreen(deleteConfAlert); deleteConfAlert.setCommandListener(_this); return true; } else if (label.equals("Yes - Delete")) { { } this.hook17(); try { _this.getAlbumData().deleteAlbum(ScreenSingleton.getInstance().getCurrentStoreName()); } catch ( PersistenceMechanismException e) { alert=new Alert("Error","The mobile database can not delete this photo album",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); } _this.goToPreviousScreen(); return true; } else if (label.equals("No - Delete")) { _this.goToPreviousScreen(); return true; } else if (label.equals("Save")) { try { if (_this.getCurrentScreen() instanceof NewLabelScreen) { currentScreen=(NewLabelScreen)_this.getCurrentScreen(); if (currentScreen.getFormType() == NewLabelScreen.NEW_ALBUM) { _this.getAlbumData().createNewAlbum(currentScreen.getLabelName()); } else if (currentScreen.getFormType() == NewLabelScreen.LABEL_PHOTO) { } } this.hook18(); } 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 album",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); return true; } catch ( InvalidPhotoAlbumNameException e) { alert=new Alert("Error","You have provided an invalid Photo Album name",null,AlertType.ERROR); Display.getDisplay(midlet).setCurrent(alert,Display.getDisplay(midlet).getCurrent()); return true; } _this.goToPreviousScreen(); return true; } this.hook16(); return false; } catch ( ReturnBoolean r) { return r.value; } } protected AlbumController _this; protected Command command; protected String label; protected NewLabelScreen canv; protected List down; protected String message; protected Alert deleteConfAlert; protected String passwd; protected PasswordScreen pwd; protected Alert alert; protected Alert alert; protected NewLabelScreen currentScreen; protected Alert alert; protected Alert alert; protected Alert alert; protected Alert alert; protected String message; protected Alert definePassword; protected PasswordScreen pwd; protected Alert alert; protected Alert alert; protected PasswordScreen password; protected String passwd; protected Alert alert; protected Alert alert; protected PasswordScreen pwd; protected PasswordScreen password; protected void hook16(){ } protected void hook17(){ } protected void hook18() throws PersistenceMechanismException, InvalidPhotoAlbumNameException { } } }