|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.salespointframework.core.Shop
public class 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(org.salespointframework.core.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(org.salespointframework.core.SaleProcess, org.salespointframework.core.Display, org.salespointframework.core.users.User, org.salespointframework.core.data.interfaces.DataBasket)
and runBackgroundProcess(org.salespointframework.core.SaleProcess, org.salespointframework.core.users.User, org.salespointframework.core.data.interfaces.DataBasket)
.
Nested Class Summary | |
---|---|
protected static class |
Shop.ProcessHandle
A ProcessContext for one remote or background process. |
Field Summary | |
---|---|
static java.lang.String |
DBM_TAG
MenuSheetObject tag marking the "Database Manager" item. |
static int |
DEAD
Constant marking the Shop's state. |
static java.lang.String |
LOAD_TAG
MenuSheetObject tag marking the "Load... |
protected javax.swing.JFrame |
m_jfShopFrame
The Shop's frame. |
protected java.util.List<Shop.ProcessHandle> |
m_lphProcesses
All remote or background processes currently running on this Shop, represented by their process handles . |
protected java.util.List<SalesPoint> |
m_lspSalesPoints
The SalesPoints that belong to the system. |
protected java.util.Map<java.lang.String,java.lang.Object> |
m_pContext
ProcessContext data. |
protected java.awt.Rectangle |
m_rShopFrameBounds
The ShopFrames bounds. |
protected java.lang.String |
m_sShopFrameTitle
The title of the Shop's frame. |
protected Timer |
m_trTimer
The Timer used by this Shop for managing the simulation time. |
static java.lang.String |
QUIT_SHOP_TAG
MenuSheetObject tag marking the "Quit" item. |
static int |
RUNNING
Constant marking the Shop's state. |
static java.lang.String |
SALESPOINT_FULL_NAME
|
static java.lang.String |
SALESPOINT_MAJOR_VERSION
|
static java.lang.String |
SALESPOINT_MINOR_VERSION
|
static java.lang.String |
SALESPOINT_NAME
|
static java.lang.String |
SALESPOINT_VERSION_CODENAME
|
static java.lang.String |
SAVE_TAG
MenuSheetObject tag marking the "Save... |
static java.lang.String |
SEPARATOR_ONE_TAG
MenuSheetObject tag marking the first separator. |
static java.lang.String |
SEPARATOR_TWO_TAG
MenuSheetObject tag marking the second separator. |
static java.lang.String |
SET_CURRENT_SP_TAG
MenuSheetObject tag marking the "Set Current SalesPoint" item. |
static java.lang.String |
SHOP_MENU_TAG
MenuSheetObject tag marking the entire Shop MenuSheet. |
static int |
SUSPENDED
Constant 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()
Check whether shutdown can be permitted in the current state of the system. |
|
boolean |
checkForRunningProcessesAndUser()
checks for running processes and or logged on users on this shop |
|
protected void |
clearInternalStructures()
Clear the internal structures maintained by the Shop, thus finishing off shutdown. |
|
protected MultiWindow |
createShopFrame()
Creates and returns a new MultiWindow with window view mode set. |
|
protected MenuSheet |
createShopMenuSheet()
Create and return the Shop's main MenuSheet. |
|
void |
forceGlobalProcessTermination()
This method kills all processes on all SalesPoints |
|
|
getCatalog(CatalogIdentifier<T> ciId)
Get a Catalog from the global list of Catalogs. |
|
Catalog<?> |
getCatalog(java.lang.String sName)
Get a Catalog from the global list of Catalogs. |
|
SalesPoint |
getCurrentSalesPoint()
Returns the currently active SalesPoint of the Shop. |
|
static Shop |
getInstance()
Get the current instance |
|
static PreferenceStorage |
getPreferenceStorage()
get the currently active preference storage |
|
protected java.lang.Object |
getProcessesLock()
Return the monitor synchronizing access to the list of processes. |
|
SalesPoint |
getSalesPoint(int id)
get SalesPoint by id ( SalesPoint.getID() ) |
|
java.util.List<SalesPoint> |
getSalesPoints()
Get a list of all SalesPoints in the Shop. |
|
protected java.lang.Object |
getSalesPointsLock()
Return the monitor synchronizing access to the list of SalesPoints. |
|
javax.swing.JFrame |
getShopFrame()
Gets the Shop's main frame. |
|
java.awt.Rectangle |
getShopFrameBounds()
Returns the Framebounds of the Shops assoziated JFrame. |
|
java.lang.String |
getShopFrameTitle()
get m_sShopFrameTitle |
|
int |
getShopState()
Return the Shop's state, being one of DEAD , RUNNING or SUSPENDED . |
|
|
getStock(StockIdentifier<T,CT> ciId)
Look up a Stock in the global Stock list. |
|
Stock |
getStock(java.lang.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. |
|
WindowRepaintListener |
getWindowRepaintListener()
get m_wrlWindowRepaintListener |
|
void |
initializeData()
Called, when the PersistenceManager asks the Shop to initialize it's data |
|
boolean |
isCurrentSalesPointAdjusting()
Return whether or not calls to setCurrentSalesPoint(org.salespointframework.core.SalesPoint) have any effect. |
|
void |
log(Loggable la)
Log a piece of information to the global log file. |
|
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. |
|
void |
quit()
Close the Shop and quit the application. |
|
Catalog<?> |
removeCatalog(java.lang.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(java.lang.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 |
resume()
Resume a suspended Shop. |
|
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. |
|
static void |
setPreferenceStorage(PreferenceStorage ps)
Replace the preference storage Should be done before calling #start() |
|
void |
setShopFrameBounds(java.awt.Rectangle r)
Sets the Framebounds of the Shops assoziated JFrame. |
|
void |
setShopFrameTitle(java.lang.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. |
|
void |
setWindowRepaintListener(WindowRepaintListener wrl)
Sets the callback for replacing the default SalesPoint background render in the shop window |
|
protected void |
showShutdownPreventedHint(MultiWindow mw)
Shows a hint if the shop shutdown was prevented by something. |
|
boolean |
shutdown()
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 |
---|
public static final java.lang.String SALESPOINT_NAME
public static final java.lang.String SALESPOINT_MAJOR_VERSION
public static final java.lang.String SALESPOINT_MINOR_VERSION
public static final java.lang.String SALESPOINT_VERSION_CODENAME
public static final java.lang.String SALESPOINT_FULL_NAME
protected java.util.Map<java.lang.String,java.lang.Object> m_pContext
protected java.util.List<SalesPoint> m_lspSalesPoints
protected java.awt.Rectangle m_rShopFrameBounds
protected java.util.List<Shop.ProcessHandle> m_lphProcesses
process handles
.
protected transient javax.swing.JFrame m_jfShopFrame
protected java.lang.String m_sShopFrameTitle
protected Timer m_trTimer
public static final int DEAD
public static final int RUNNING
public static final int SUSPENDED
suspended
.
public static final java.lang.String SHOP_MENU_TAG
public static final java.lang.String SET_CURRENT_SP_TAG
public static final java.lang.String SEPARATOR_ONE_TAG
public static final java.lang.String LOAD_TAG
public static final java.lang.String SAVE_TAG
public static final java.lang.String DBM_TAG
public static final java.lang.String SEPARATOR_TWO_TAG
public static final java.lang.String QUIT_SHOP_TAG
Constructor Detail |
---|
protected Shop()
Method Detail |
---|
protected final java.lang.Object getSalesPointsLock()
protected final java.lang.Object getProcessesLock()
public void addSalesPoint(SalesPoint sp)
sp
- the SalesPoint to be added.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 removedprotected 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 static void setPreferenceStorage(PreferenceStorage ps)
#start()
ps
- the new PreferenceStorage
public static PreferenceStorage getPreferenceStorage()
public java.util.List<SalesPoint> getSalesPoints()
The list is backed by the SalesPoint's queue, but is immutable.
public SalesPoint getSalesPoint(int id)
SalesPoint.getID()
)
id
-
public void setWindowRepaintListener(WindowRepaintListener wrl)
wrl
- the new WindowRepaintListenerpublic WindowRepaintListener getWindowRepaintListener()
m_wrlWindowRepaintListener
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(org.salespointframework.core.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(org.salespointframework.core.SalesPoint)
.
public boolean isCurrentSalesPointAdjusting()
setCurrentSalesPoint(org.salespointframework.core.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(java.awt.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 java.awt.Rectangle getShopFrameBounds()
public void suspend()
public void resume()
public final 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.
public final boolean checkForRunningProcessesAndUser()
public final void forceGlobalProcessTermination()
public boolean shutdown()
Calling this method will stop any processes currently running on any SalesPoints in
the Shop after calling canShutdown()
to check whether shutdown is permitted at
the moment. The method must therefore not be called from within a process !
protected void showShutdownPreventedHint(MultiWindow mw)
mw
- Shops MultiWindow, obtained by getShopFrame()
protected boolean canShutdown()
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()
.
public int getShopState()
DEAD
, RUNNING
or SUSPENDED
.
protected void clearInternalStructures()
public void setShopFrameTitle(java.lang.String sTitle)
sTitle
- the new title.public java.lang.String getShopFrameTitle()
m_sShopFrameTitle
public javax.swing.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)
.
protected 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(org.salespointframework.core.SalesPoint) and removeSalesPoint(org.salespointframework.core.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(org.salespointframework.core.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 onpublic void log(Loggable la) throws java.io.IOException
la
- the information to be logged.
java.io.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(java.lang.String sName)
sName
- the name of the Stock to be removed.
public Stock getStock(java.lang.String sName)
sName
- the name of the Stock to be looked up.
public <T extends StockItem,CT extends CatalogItem> Stock<T,CT> getStock(StockIdentifier<T,CT> ciId)
getStock(String)
. It returns the correctly parametrized
stock. However, this does only work if the Stock in question and it's
identifier are parametrized equally.
ciId
- the id 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 void initializeData()
public Catalog<?> removeCatalog(java.lang.String sName)
sName
- the name of the Catalog to be removed.
public Catalog<?> getCatalog(java.lang.String sName)
sName
- the name of the Catalog to be returned.
public <T extends CatalogItem> Catalog<T> getCatalog(CatalogIdentifier<T> ciId)
getCatalog(String)
. It returns the correctly parametrized
catalog. However, this does only work if the Catalog in question and it's
identifier are parametrized equally.
ciId
- the Identifier of the Catalog to be returned.
public static Shop getTheShop()
public static Shop getInstance()
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
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |