package lancs.mobilemedia.core.ui.controller; import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List; import lancs.mobilemedia.core.ui.MainUIMidlet; import lancs.mobilemedia.core.ui.datamodel.AlbumData; import de.ovgu.cide.jakutil.*; /** * [EF] Added in scenario 04. * Purpose: (i) to structure controllers and (ii) simplify method handleCommand. * @author Eduardo Figueiredo */ public abstract class AbstractController implements CommandListener, ControllerInterface { protected MainUIMidlet midlet; private ControllerInterface nextController; private AlbumData albumData; private List albumListScreen; /** * @param midlet * @param nextController * @param albumData * @param albumListScreen * @param currentScreenName */ public AbstractController( MainUIMidlet midlet, AlbumData albumData, List albumListScreen){ this.midlet=midlet; this.albumData=albumData; this.albumListScreen=albumListScreen; } public void postCommand( Command command){ System.out.println("AbstractController::postCommand - Current controller is: " + this.getClass().getName()); if (handleCommand(command) == false) { ControllerInterface next=getNextController(); if (next != null) { System.out.println("Passing to next controller in chain: " + next.getClass().getName()); next.postCommand(command); } else { System.out.println("AbstractController::postCommand - Reached top of chain. No more handlers for command: " + command); } } } public void commandAction( Command c, Displayable d){ postCommand(c); } /** * @param a */ public void setAlbumListAsCurrentScreen( Alert a){ setCurrentScreen(a,albumListScreen); } /** * Set the current screen for display, after alert */ public void setCurrentScreen( Alert a, Displayable d){ Display.getDisplay(midlet).setCurrent(a,d); } /** * [EF] RENAMED in Scenario 04: remove "Name". Purpose: avoid method name conflict * Get the current screen name that is displayed */ public Displayable getCurrentScreen(){ return Display.getDisplay(midlet).getCurrent(); } /** * Set the current screen for display */ public void setCurrentScreen( Displayable d){ Display.getDisplay(midlet).setCurrent(d); } /** * @return the albumData */ public AlbumData getAlbumData(){ return albumData; } /** * @param albumData the albumData to set */ public void setAlbumData( AlbumData albumData){ this.albumData=albumData; } /** * @return the nextController */ public ControllerInterface getNextController(){ return nextController; } /** * @param nextController the nextController to set */ public void setNextController( ControllerInterface nextController){ this.nextController=nextController; } /** * [EF] Scenario 04: Just forward method. * @return the currentStoreName */ public String getCurrentStoreName(){ return ScreenSingleton.getInstance().getCurrentStoreName(); } /** * @return the albumListScreen */ public List getAlbumListScreen(){ return albumListScreen; } }