| 
 | SalesPoint Framework v3.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectsale.Shop
The central class in a SalesPoint application, responsible for central management tasks and for persistence.
There is only one instance of the Shop class per application, and you can
 obtain, or change this central, singleton instance through calls to
 getTheShop() or setTheShop(sale.Shop), resp.
The Shop will manage the application's display, creating and removing
 additional SalesPoints' displays as necessary. Also, the Shop will offer a
 central MenuSheet, from which the user can select certain central,
 administrative actions, like shutdown, loadup, creating and removing
 SalesPoints, etc. This MenuSheet can, of course, be adapted. See
 createShopMenuSheet(), if you're interested in this.
The Shop can make persistent the entire current state of the application
 by calling just one method: makePersistent().
The Shop serves as a ProcessContext for remote and background
 processes, which will be equipped with a
 NullDisplay. To find out about running processes at the Shop, see
 runProcess(sale.SaleProcess, sale.Display, users.User, data.DataBasket) and runBackgroundProcess(sale.SaleProcess, users.User, data.DataBasket).
| Nested Class Summary | |
| protected static class | Shop.ProcessHandleA ProcessContext for one remote or background process. | 
| Field Summary | |
| static int | DEADConstant marking the Shop's state. | 
| static String | LOAD_TAGMenuSheetObject tag marking the "Load... | 
| protected  JFrame | m_jfShopFrameThe Shop's frame. | 
| protected  List | m_lphProcessesAll remote or background processes currently running on this Shop, represented by their process handles. | 
| protected  List | m_lspSalesPointsThe SalesPoints that belong to the system. | 
| protected  Map | m_mpToPersistifyObjects that where registered to be made persistent. | 
| protected  Map | m_pContextProcessContext data. | 
| protected  Rectangle | m_rShopFrameBoundsThe ShopFrames bounds. | 
| protected  String | m_sShopFrameTitleThe title of the Shop's frame. | 
| protected  Timer | m_trTimerThe Timer used by this Shop for managing the simulation time. | 
| static String | QUIT_SHOP_TAGMenuSheetObject tag marking the "Quit" item. | 
| static int | RUNNINGConstant marking the Shop's state. | 
| static String | SAVE_TAGMenuSheetObject tag marking the "Save... | 
| static String | SEPARATOR_ONE_TAGMenuSheetObject tag marking the first separator. | 
| static String | SEPARATOR_TWO_TAGMenuSheetObject tag marking the second separator. | 
| static String | SET_CURRENT_SP_TAGMenuSheetObject tag marking the "Set Current SalesPoint" item. | 
| static String | SHOP_MENU_TAGMenuSheetObject tag marking the entire Shop MenuSheet. | 
| static int | SUSPENDEDConstant marking the Shop's state. | 
| Constructor Summary | |
| protected  | Shop()Sole constructor to enforce singleton pattern. | 
| Method Summary | |
|  void | addCatalog(Catalog c)Add a Catalog to the global table of Catalogs. | 
|  void | addSalesPoint(SalesPoint sp)Add a SalesPoint to the Shop. | 
|  void | addStock(Stock st)Add a Stock to the global list of Stocks. | 
| protected  boolean | canShutdown(boolean fPersistify)Check whether shutdown can be permitted in the current state of the system. | 
| protected  void | clearInternalStructures()Clear the internal structures maintained by the Shop, thus finishing off shutdown. | 
| protected  MultiWindow | createShopFrame()Creates and returns a new MultiWindowwith window view mode set. | 
| protected  MenuSheet | createShopMenuSheet()Create and return the Shop's main MenuSheet. | 
|  Catalog | getCatalog(String sName)Get a Catalog from the global list of Catalogs. | 
|  SalesPoint | getCurrentSalesPoint()Returns the currently active SalesPoint of the Shop. | 
|  Object | getPersistentObject(Object oKey)Get a persistent object. | 
|  Iterator | getPersistentObjects()Get an iterator of all persistent objects. | 
| protected  Object | getProcessData(String sKey)Get an object from the ProcessContext. | 
| protected  Object | getProcessesLock()Return the monitor synchronizing access to the list of processes. | 
|  SalesPoint | getSalesPoint(int id) | 
|  List | getSalesPoints()Get a list of all SalesPoints in the Shop. | 
| protected  Object | getSalesPointsLock()Return the monitor synchronizing access to the list of SalesPoints. | 
| protected  JFrame | getShopFrame()Gets the Shop's main frame. | 
|  Rectangle | getShopFrameBounds()Returns the Framebounds of the Shops assoziated JFrame. | 
|  String | getShopFrameTitle() | 
|  int | getShopState()Return the Shop's state, being one of DEAD,RUNNINGorSUSPENDED. | 
|  Stock | getStock(String sName)Look up a Stock in the global Stock list. | 
| static Shop | getTheShop()Get the global, singleton Shop instance. | 
|  Timer | getTimer()Get the Shop's timer. | 
|  boolean | isCurrentSalesPointAdjusting()Return whether or not calls to setCurrentSalesPoint(sale.SalesPoint)have any effect. | 
|  void | log(Loggable la)Log a piece of information to the global log file. | 
|  void | makePersistent()Make the current state of the Shop persistent. | 
| protected  void | onLoadFrames(ObjectInputStream ois)Loads the Shop's main frame and the SalesPoints' frames' states from the given stream. | 
| protected  void | onSalesPointAdded(SalesPoint sp)Hook method performing additional work when a SalesPoint was added. | 
| protected  void | onSalesPointRemoved(SalesPoint sp)Hook method called when a SalesPoint was removed from the Shop. | 
| protected  void | onSaveFrames(ObjectOutputStream oos)Save the Shop's main frame's and the status frame's state to the given stream. | 
|  void | quit()Close the Shop and quit the application. | 
|  Catalog | removeCatalog(String sName)Remove a catalog from the global table of Catalogs. | 
|  void | removeSalesPoint(SalesPoint sp)Remove a SalesPoint from the Shop. | 
| protected  void | removeStatusDisplay(Display d)Close a status display. | 
|  Stock | removeStock(String sName)Remove a Stock from the global list of Stocks. | 
|  void | resetCurrentSalesPointIsAdjusting()Reset a flag that can be used to optimize setCurrentSalesPoint calls. | 
|  void | restore()Restore the Shop's state from a Stream. | 
|  void | resume()Resume a suspended Shop. | 
| protected  InputStream | retrievePersistenceInStream()Retrieves the stream from which to read the Shop's state. | 
| protected  OutputStream | retrievePersistenceOutStream()Retrieves the stream to which the Shop's state is to be written. | 
|  void | runBackgroundProcess(SaleProcess p,
                                         User usr,
                                         DataBasket db)Run a background process on the Shop. | 
|  void | runProcess(SaleProcess p,
                     Display d,
                     User usr,
                     DataBasket db)Run a process on the Shop. | 
|  void | setCurrentSalesPoint(SalesPoint sp)Makes a SalesPoint the current SalesPoint. | 
|  void | setCurrentSalesPointIsAdjusting()Sets a flag that can be used to optimize setCurrentSalesPoint calls. | 
|  Object | setObjectPersistent(Object oKey,
                                       Object oToPersistify)Sets an object to be persistent. | 
|  Object | setObjectTransient(Object oKey)Set an object to be no longer persistent. | 
| protected  void | setProcessData(String sKey,
                             Object oData)Put an object into the ProcessContext. | 
|  void | setShopFrameBounds(Rectangle r)Sets the Framebounds of the Shops assoziated JFrame. | 
|  void | setShopFrameTitle(String sTitle)Set the Shop frame's title. | 
| static void | setTheShop(Shop shTheShop)Set the global, singleton Shop instance. | 
|  void | setTimer(Timer trTimer)Set the Shop's Timer. | 
|  void | setViewMode(int viewMode)Sets the view mode for the Shop. | 
|  boolean | shutdown(boolean fPersistify)Close the Shop. | 
|  void | start()Start the Shop. | 
|  void | suspend()Suspend a running Shop. | 
| Methods inherited from class java.lang.Object | 
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
protected Map m_pContext
protected List m_lspSalesPoints
protected Rectangle m_rShopFrameBounds
protected List m_lphProcesses
process handles.
protected transient JFrame m_jfShopFrame
protected String m_sShopFrameTitle
protected Timer m_trTimer
protected Map m_mpToPersistify
public static final int DEAD
public static final int RUNNING
public static final int SUSPENDED
suspended.
public static final String SHOP_MENU_TAG
public static final String SET_CURRENT_SP_TAG
public static final String SEPARATOR_ONE_TAG
public static final String LOAD_TAG
public static final String SAVE_TAG
public static final String SEPARATOR_TWO_TAG
public static final String QUIT_SHOP_TAG
| Constructor Detail | 
protected Shop()
| Method Detail | 
protected void setProcessData(String sKey,
                              Object oData)
sKey - object's identifieroData - the data objectprotected Object getProcessData(String sKey)
sKey - object's key
protected final Object getSalesPointsLock()
protected final Object getProcessesLock()
public void addSalesPoint(SalesPoint sp)
sp - the SalesPoint to be added.onSalesPointAdded(sale.SalesPoint).public void setViewMode(int viewMode)
viewMode - can be MultiWindow.WINDOW_VIEW, MultiWindow.TABBED_VIEW, MultiWindow.DESKTOP_VIEWprotected void onSalesPointAdded(SalesPoint sp)
sp - the SalesPoint that was removed from the Shop.public void removeSalesPoint(SalesPoint sp)
Prior to being removed from the Shop, the SalesPoint will be
 suspended.
sp - the SalesPoint to be removedonSalesPointRemoved(sale.SalesPoint).protected void onSalesPointRemoved(SalesPoint sp)
sp - the SalesPoint that was removed from the Shop.protected void removeStatusDisplay(Display d)
d - the status display to be closed.public List getSalesPoints()
The list is backed by the SalesPoint's queue, but is immutable.
public SalesPoint getSalesPoint(int id)
public void setCurrentSalesPoint(SalesPoint sp)
This will bring the specified SalesPoint's window to the front.
sp - the SalesPoint to be the current SalesPoint from now on.public void setCurrentSalesPointIsAdjusting()
isCurrentSalesPointAdjusting() returns true, calls to setCurrentSalesPoint(sale.SalesPoint) will have no
 effect. You can reset the flag by calling resetCurrentSalesPointIsAdjusting().
public void resetCurrentSalesPointIsAdjusting()
resetCurrentSalesPointIsAdjusting for each call to setCurrentSalesPointIsAdjusting().
 Calls to this function must be followed by an explicit call to setCurrentSalesPoint(sale.SalesPoint).
public boolean isCurrentSalesPointAdjusting()
setCurrentSalesPoint(sale.SalesPoint) have any effect.
public SalesPoint getCurrentSalesPoint()
public void runProcess(SaleProcess p,
                       Display d,
                       User usr,
                       DataBasket db)
p - the process to be run.d - the display to be used by the Shop. This can be null, then, a NullDisplay
 will be used.usr - the user to be the current user for the process.db - the DataBasket to be used by the process.
public void runBackgroundProcess(SaleProcess p,
                                 User usr,
                                 DataBasket db)
p - the process to be run.usr - the user to be the current user for the process.db - the DataBasket to be used by the process.public void start()
This method must not be called after load up.
public void setShopFrameBounds(Rectangle r)
Example:
  
Shop.getTheShop().setShopFrameBounds (new Rectangle (10,10,200,200));
 This moves the JFrame to Position (10,10) with a size of (200,200).
public Rectangle getShopFrameBounds()
public void suspend()
public void resume()
public void quit()
This method is linked to the "Quit" item in the Shop's MenuSheet as well as to the close window gesture for the Shop frame.
if (Shop.getTheShop().shutdown (true)) { System.exit (0); };
public boolean shutdown(boolean fPersistify)
Calling this method will stop any processes currently running on any SalesPoints in
 the Shop after calling canShutdown(boolean) to check whether shutdown is permitted at
 the moment. The method must therefore not be called from within a process !
fPersistify - if true, the current state of the Shop will be made persistent prior
 to actually closing the Shop.
protected boolean canShutdown(boolean fPersistify)
In this method you can assume that you are the owner of getSalesPointsLock()
 and getProcessesLock(), so that you can access the list of SalesPoints and the
 list of processes without extra synchronization.
The default implementation will first suspend() the Shop, should
 its state be RUNNING. It will then check all processes running on the
 Shop. If no such processes exist or if all of them confirm that shut down is possible, it will call the
 SalesPoint.canQuit(boolean) method of any SalesPoint in the system, passing
 !fPersistify as the parameter. If all SalesPoints return true, the Shop stays suspended and
 canShutdown returns true. In any other case, the Shop will be resumed again,
 and false will be returned.
This method is usually not called directly, but if you do, make sure to call it
 with synchronization on getSalesPointsLock() and getProcessesLock().
fPersistify - if true, the Shop's state will be made persistent before shutdown.
public int getShopState()
DEAD, RUNNING or SUSPENDED.
public void makePersistent()
                    throws IOException,
                           CancelledException
IOException - if an error occurred.
CancelledException - if the retrieval of the persistence stream was cancelled by the user.
protected void onSaveFrames(ObjectOutputStream oos)
                     throws IOException
oos - the Stream to save to
IOException - if an error occurred while saving the frames' states.
public void restore()
             throws IOException,
                    ClassNotFoundException,
                    CancelledException
Attention: Any old reference to the Shop is invalid afterwards. The new Shop can be
 acquired through Shop.getTheShop().
IOException - if an exception occurred while loading
ClassNotFoundException - if an exception occurred while loading
CancelledException - if the user cancels loading.
protected void onLoadFrames(ObjectInputStream ois)
                     throws IOException,
                            ClassNotFoundException
ois - the Stream to load from
IOException - if an error occurred while loading the frames' states.
ClassNotFoundException - if an error occurred while loading the frames' states.
protected OutputStream retrievePersistenceOutStream()
                                             throws IOException,
                                                    CancelledException
IOException - if an exception occurred while creating the stream
CancelledException - if the user cancelled the save process.
protected InputStream retrievePersistenceInStream()
                                           throws IOException,
                                                  CancelledException
IOException - if an exception occurred while creating the stream
CancelledException - if the user cancelled the save process.
public Object setObjectPersistent(Object oKey,
                                  Object oToPersistify)
oKey - the key at which the object can be accessed.oToPersistify - the object that is to be made persistent.
public Object setObjectTransient(Object oKey)
oKey - the key at which the object can be accessed.
public Object getPersistentObject(Object oKey)
oKey - the key that describes the object.
public Iterator getPersistentObjects()
protected void clearInternalStructures()
public void setShopFrameTitle(String sTitle)
sTitle - the new title.public String getShopFrameTitle()
protected JFrame getShopFrame()
The main Shop frame will be the frame in which the Shop's menu gets displayed.
By default this creates a MultiWindow with the title that you specified
 in a call to setShopFrameTitle(java.lang.String).
createShopFrame() insteadprotected MultiWindow createShopFrame()
MultiWindow with window view mode set.
protected MenuSheet createShopMenuSheet()
The default implementation will provide two MenuSheets in the Shop's MenuSheet:
| MenuSheet (name/tag) | Item text | Item tag | Item action | Comments | 
|---|---|---|---|---|
| Shop SHOP_MENU_TAG | Set current SalesPoint | SET_CURRENT_SP_TAG | setCurrentSalesPoint(). | This is a Sub-MenuSheet that shows all the SalesPoints in the Shop. The user can click the one
         he or she wants to select. As long as this MenuSheet is found in the Shop's MenuSheet, it will
         be updated by calls to addSalesPoint(sale.SalesPoint)andremoveSalesPoint(sale.SalesPoint). | 
| Separator | SEPARATOR_ONE_TAG | |||
| Load... | LOAD_TAG | Load a persistent Shop image. | ||
| Save... | SAVE_TAG | Save current Shop state to create a persistant Shop image. | ||
| Separator | SEPARATOR_TWO_TAG | |||
| Quit | QUIT_SHOP_TAG | quit(). | ||
| MultiWindow MultiWindow.MULTIWINDOW_MENU_TAG | see MultiWindow.getMultiWindowMenuSheet() | 
public Timer getTimer()
setTimer(sale.Timer), the default timer will be a
 StepTimer with a Step time.
public void setTimer(Timer trTimer)
trTimer - the Timer to be used from now on
public void log(Loggable la)
         throws IOException
la - the information to be logged.
IOException - on any error while logging.
public void addStock(Stock st)
              throws DuplicateKeyException
st - the Stock to be added to the global list of Stocks.
DuplicateKeyException - if a Stock of the same name already exists in the global list of Stocks.public Stock removeStock(String sName)
sName - the name of the Stock to be removed.
public Stock getStock(String sName)
sName - the name of the Stock to be looked up.
public void addCatalog(Catalog c)
                throws DuplicateKeyException
c - the Catalog to be added to the global list of Catalogs
DuplicateKeyException - if a Catalog of the same name already existed in the global list of
 Catalogs.public Catalog removeCatalog(String sName)
sName - the name of the Catalog to be removed.
public Catalog getCatalog(String sName)
sName - the name of the Catalog to be returned.
public static Shop getTheShop()
public static void setTheShop(Shop shTheShop)
This method will only have an effect the next time, getTheShop() gets called.
 So to avoid inconsistency, use this method only in the beginning of your program, to
 install an instance of a subclass of Shop as the global, singleton Shop instance.
shTheShop - the new global, singleton Shop instance| 
 | SalesPoint Framework v3.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||