|
SalesPoint v3.3 API | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object sale.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(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.ProcessHandle
A ProcessContext for one remote or background process. |
Field Summary | |
---|---|
static int |
DEAD
Constant marking the Shop's state. |
static String |
LOAD_TAG
MenuSheetObject tag marking the "Load... |
protected JFrame |
m_jfShopFrame
The Shop's frame. |
protected List<Shop.ProcessHandle> |
m_lphProcesses
All remote or background processes currently running on this Shop, represented by their process handles . |
protected List<SalesPoint> |
m_lspSalesPoints
The SalesPoints that belong to the system. |
protected Map<Object,Object> |
m_mpToPersistify
Objects that where registered to be made persistent. |
protected Map<String,Object> |
m_pContext
ProcessContext data. |
protected Rectangle |
m_rShopFrameBounds
The ShopFrames bounds. |
protected 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 String |
QUIT_SHOP_TAG
MenuSheetObject tag marking the "Quit" item. |
static int |
RUNNING
Constant marking the Shop's state. |
static String |
SAVE_TAG
MenuSheetObject tag marking the "Save... |
static String |
SEPARATOR_ONE_TAG
MenuSheetObject tag marking the first separator. |
static String |
SEPARATOR_TWO_TAG
MenuSheetObject tag marking the second separator. |
static String |
SET_CURRENT_SP_TAG
MenuSheetObject tag marking the "Set Current SalesPoint" item. |
static 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(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 MultiWindow with window view mode set. |
|
protected MenuSheet |
createShopMenuSheet()
Create and return the Shop's main MenuSheet. |
|
|
getCatalog(CatalogIdentifier<T> ciId)
Get a Catalog from the global list of Catalogs. |
|
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<Object> |
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<SalesPoint> |
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 , RUNNING or SUSPENDED . |
|
|
getStock(StockIdentifier<T,CT> ciId)
Look up a Stock in the global Stock list. |
|
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 |
makePersistent0()
|
|
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<String,Object> m_pContext
protected List<SalesPoint> m_lspSalesPoints
protected Rectangle m_rShopFrameBounds
protected List<Shop.ProcessHandle> m_lphProcesses
process handles
.
protected transient JFrame m_jfShopFrame
protected String m_sShopFrameTitle
protected Timer m_trTimer
protected Map<Object,Object> 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<SalesPoint> 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 makePersistent0() throws IOException, CancelledException
IOException
CancelledException
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<Object> 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) and removeSalesPoint(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 onpublic 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 <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 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 <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 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 v3.3 API | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |