|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.zkoss.zk.ui.impl.UiEngineImpl
public class UiEngineImpl
An implementation of UiEngine
to create and update components.
Nested Class Summary | |
---|---|
static interface |
UiEngineImpl.Extension
An interface used to extend the UI engine. |
Constructor Summary | |
---|---|
UiEngineImpl()
|
Method Summary | |
---|---|
void |
activate(Execution exec)
Activates an execution such that you can access a component. |
boolean |
activate(Execution exec,
int timeout)
Activates an execution such that you can access a component. |
void |
addInvalidate(Component comp)
Invalidates a component to cause redrawing. |
void |
addInvalidate(Page page)
Invalidates the page to cause all of its components to redraw. |
void |
addMoved(Component comp,
Component oldparent,
Page oldpg,
Page newpg)
Called to update (redraw) a component, when a component is moved. |
void |
addResponse(AuResponse response)
Adds a response directly by using AuResponse.getOverrideKey()
as the override key. |
void |
addResponse(java.lang.String key,
AuResponse response)
Adds a response which will be sent to client at the end of the execution. |
void |
addResponse(java.lang.String key,
AuResponse response,
int priority)
Adds a response with the given priority. |
void |
addSmartUpdate(Component comp,
java.lang.String attr,
java.lang.Object value,
boolean append)
Smart-updates a property of the peer widget. |
void |
addSmartUpdate(Component comp,
java.lang.String attr,
java.lang.Object value,
int priority)
Adds a smart update that will be executed at the given priority. |
void |
addUuidChanged(Component comp)
Called before changing the component's UUID. |
protected void |
afterRenderComponents(java.util.Collection<Component> comps)
Called when this engine renders the given components. |
void |
beginUpdate(Execution exec)
Activates and prepare for asynchronous update |
boolean |
ceaseSuspendedThread(Desktop desktop,
EventProcessingThread evtthd,
java.lang.String cause)
Ceases the specified event thread. |
void |
closeUpdate(java.lang.Object ctx)
Deactivates the execution and cleans up. |
Component[] |
createComponents(Execution exec,
PageDefinition pagedef,
Page page,
Component parent,
Component insertBefore,
VariableResolver resolver,
java.util.Map<?,?> arg)
Creates components from the specified page and definition. |
void |
deactivate(Execution exec)
Deactivates an execution, such that other threads could activate and access components. |
void |
desktopDestroyed(Desktop desktop)
Called when a desktop is being removed. |
boolean |
disableClientUpdate(Component comp,
boolean disable)
Sets whether to disable the update of the client widget. |
void |
endUpdate(Execution exec)
Executes posted events, deactivate and ends the asynchronous update. |
void |
execNewPage(Execution exec,
PageDefinition pagedef,
Page page,
java.io.Writer out)
Creates components specified in the given page definition. |
void |
execNewPage(Execution exec,
Richlet richlet,
Page page,
java.io.Writer out)
Invoke Richlet.service(org.zkoss.zk.ui.Page) , when a new page is creates upon
visiting a richlet. |
void |
execRecover(Execution exec,
FailoverManager failover)
Executes the recovering. |
void |
execUpdate(Execution exec,
java.util.List<AuRequest> requests,
AuWriter out)
Executes an asynchronous update to a component (or page). |
JSONArray |
finishUpdate(java.lang.Object ctx)
Finishes the update and returns the result in an array of JSON object. |
java.lang.String |
getNativeContent(Component comp,
java.util.List<NodeInfo> children,
Native.Helper helper)
Retrieve the native content for a property of the specified component. |
java.util.Collection<EventProcessingThread> |
getSuspendedThreads(Desktop desktop)
Returns a collection of suspended event processing threads belonging to the specified desktop, or empty if no suspended thread at all. |
boolean |
hasSuspendedThread()
Returns if any suspended event processing thread in the whole system. |
boolean |
isInvalidated(Component comp)
Returns if this component needs to be redrawn. |
void |
notify(Desktop desktop,
java.lang.Object mutex)
Wakes up a single event processing thread for the specified desktop that is waiting on the specified object. |
void |
notify(java.lang.Object mutex)
Wakes up a single event processing thread that is waiting on the specified object. |
void |
notifyAll(Desktop desktop,
java.lang.Object mutex)
Wakes up all event processing threads for the specified desktop that are waiting on the specified object. |
void |
notifyAll(java.lang.Object mutex)
Wakes up all event processing thread that are waiting on the specified object. |
void |
recycleDesktop(Execution exec,
Page page,
java.io.Writer out)
Reuse the desktop and generate the output. |
void |
sendRedirect(java.lang.String uri,
java.lang.String target)
Sends a temporary redirect response to the client using the specified redirect location URL. |
void |
setAbortingReason(AbortingReason aborting)
Aborts the current execution. |
Component |
setOwner(Component comp)
Called before a component redraws itself if the component might include another page. |
void |
start(WebApp wapp)
Starts the engine. |
java.lang.Object |
startUpdate(Execution exec)
Activates an execution that will allow developers to update the state of components. |
void |
stop(WebApp wapp)
Stops the engine. |
void |
wait(java.lang.Object mutex)
Suspends the current processing of an event and wait until the other thread invokes UiEngine.notify(Object) , UiEngine.notifyAll(Object) ,
UiEngine.notify(Desktop, Object) or UiEngine.notifyAll(Desktop, Object)
for the specified object. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public UiEngineImpl()
Method Detail |
---|
public void start(WebApp wapp)
UiEngine
start
in interface UiEngine
public void stop(WebApp wapp)
UiEngine
stop
in interface UiEngine
public boolean hasSuspendedThread()
UiEngine
hasSuspendedThread
in interface UiEngine
public java.util.Collection<EventProcessingThread> getSuspendedThreads(Desktop desktop)
UiEngine
An event processing thread is an instance of
EventProcessingThread
getSuspendedThreads
in interface UiEngine
desktop
- the desktop that the suspended event processing
threads belong to (never null).public boolean ceaseSuspendedThread(Desktop desktop, EventProcessingThread evtthd, java.lang.String cause)
UiEngine
ceaseSuspendedThread
in interface UiEngine
desktop
- which desktop the event thread belongs tocause
- an arbitrary text to describe the cause.
It will be the message of the thrown InterruptedException.
public void desktopDestroyed(Desktop desktop)
UiEngine
Application developers don't need to remove pages and desktops. They are removed and cleaned up automatically.
desktopDestroyed
in interface UiEngine
public Component setOwner(Component comp)
UiEngine
If a new page is created, the specified component will become the owner of the new page.
It must reset the owner in the finally clause.
old = ue.setOwner(this);
try{
...
} finally {
ue.setOwner(old);
}
Since 5.0.6, the owner must implement Includer
.
setOwner
in interface UiEngine
public boolean isInvalidated(Component comp)
UiEngine
Note:
UiEngine.addInvalidate(Component)
was not called against this component.
isInvalidated
in interface UiEngine
public void addInvalidate(Page page)
UiEngine
addInvalidate
in interface UiEngine
public void addInvalidate(Component comp)
UiEngine
Component.invalidate()
is called.
addInvalidate
in interface UiEngine
public void addSmartUpdate(Component comp, java.lang.String attr, java.lang.Object value, boolean append)
UiEngine
addSmartUpdate
in interface UiEngine
append
- whether to append the updates of properties with the same
name. If false, only the last value of the same property will be sent
to the client.public void addSmartUpdate(Component comp, java.lang.String attr, java.lang.Object value, int priority)
UiEngine
UiEngine.addSmartUpdate(Component, String, Object, boolean)
is invoked, the priority is assumed to 0.
If the priority is the same, the update is executed in the order of first-in-first out. You rarely need to control the sequence, unless the update is used to instantiate client-side widgets that other updates might depend on. In this case, it is suggested to specify the priority as 10000 (and not to use priority higher than 10000 for other situation).
addSmartUpdate
in interface UiEngine
public void addResponse(AuResponse response)
UiEngine
AuResponse.getOverrideKey()
as the override key.
In other words, it is the same as addResponse(resposne.getOverrideKey(), response)
If the response is component-dependent, AuResponse.getDepends()
must return a component. And, if the component is removed, the response
is removed, too.
addResponse
in interface UiEngine
UiEngine.addResponse(String, AuResponse)
public void addResponse(java.lang.String key, AuResponse response)
UiEngine
AbstractComponent.response(org.zkoss.zk.au.AuResponse)
.
Note: Execution.addAuResponse(org.zkoss.zk.au.AuResponse)
is a shortcut to this method,
and it is used by application developers.
If AuResponse.getDepends()
is not null, the response
depends on the returned component. In other words, the response
is removed if the component is removed.
If it is null, the response is component-independent.
addResponse
in interface UiEngine
key
- could be anything. If null, the response is appended.
If not null, the second invocation of this method
in the same execution with the same key and the same depends (AuResponse.getDepends()
)
will override the previous one.UiEngine.addResponse(AuResponse)
public void addResponse(java.lang.String key, AuResponse response, int priority)
UiEngine
UiEngine.addResponse(String, AuResponse)
and UiEngine.addResponse(AuResponse)
is assumed to be 0.
If the priority is the same, the update is executed in the order of first-in-first out.
addResponse
in interface UiEngine
public void addMoved(Component comp, Component oldparent, Page oldpg, Page newpg)
UiEngine
addMoved
in interface UiEngine
oldparent
- the parent before movedoldpg
- the page before movednewpg
- the page after movedpublic void addUuidChanged(Component comp)
UiEngine
addUuidChanged
in interface UiEngine
public boolean disableClientUpdate(Component comp, boolean disable)
UiEngine
disableClientUpdate
in interface UiEngine
public void execNewPage(Execution exec, Richlet richlet, Page page, java.io.Writer out) throws java.io.IOException
UiEngine
Richlet.service(org.zkoss.zk.ui.Page)
, when a new page is creates upon
visiting a richlet.
execNewPage
in interface UiEngine
java.io.IOException
public void execNewPage(Execution exec, PageDefinition pagedef, Page page, java.io.Writer out) throws java.io.IOException
UiEngine
execNewPage
in interface UiEngine
java.io.IOException
public void recycleDesktop(Execution exec, Page page, java.io.Writer out) throws java.io.IOException
UiEngine
recycleDesktop
in interface UiEngine
java.io.IOException
protected void afterRenderComponents(java.util.Collection<Component> comps)
comps
- the collection of components that have been redrawn.public Component[] createComponents(Execution exec, PageDefinition pagedef, Page page, Component parent, Component insertBefore, VariableResolver resolver, java.util.Map<?,?> arg)
UiEngine
UiEngine.execNewPage(org.zkoss.zk.ui.Execution, org.zkoss.zk.ui.metainfo.PageDefinition, org.zkoss.zk.ui.Page, java.io.Writer)
or UiEngine.execUpdate(org.zkoss.zk.ui.Execution, java.util.List, org.zkoss.zk.au.AuWriter)
was called.
It assumes the execution is already locked to this desktop.
Note: if both page and parent are null, the created components don't belong to any page/parent.
createComponents
in interface UiEngine
exec
- the execution (never null).pagedef
- the page definition (never null).page
- the page. Ignored if parent is specified and
parent's page is not null (parent's page will be used).
If both page and parent are null, the created components won't belong
to any page.parent
- the parent component, or null if no parent component.
If parent is specified, page is ignored.insertBefore
- the sibling component that new components will be
inserted before. Ignored if null (i.e., append as last children).resolver
- the variable resolver used to resolve variables.
Ignored if null.arg
- a map of parameters that is accessible by the arg variable
in EL, or by Execution.getArg()
.
Ignored if null.
public void sendRedirect(java.lang.String uri, java.lang.String target)
UiEngine
After calling this method, the caller shall end the processing immediately (by returning). All pending requests and events will be dropped.
sendRedirect
in interface UiEngine
uri
- the URI to redirect to, or null to reload the same pagetarget
- the new target, or null to denote the same browser windowpublic void setAbortingReason(AbortingReason aborting)
UiEngine
Note: if setAbortingReason is ever set with non-null, you CANNOT set it back to null.
After call this method, you shall not keep processing the page because the rendering is dropped and the client is out-of-sync with the server.
setAbortingReason
in interface UiEngine
aborting
- the aborting reason.public void execRecover(Execution exec, FailoverManager failover)
UiEngine
execRecover
in interface UiEngine
public void beginUpdate(Execution exec)
UiEngine
beginUpdate
in interface UiEngine
public void endUpdate(Execution exec) throws java.io.IOException
UiEngine
endUpdate
in interface UiEngine
java.io.IOException
public void execUpdate(Execution exec, java.util.List<AuRequest> requests, AuWriter out) throws java.io.IOException
UiEngine
Note: the output must be XML and UTF-8.
execUpdate
in interface UiEngine
requests
- a list of AuRequest
.
java.io.IOException
public java.lang.Object startUpdate(Execution exec) throws java.io.IOException
UiEngine
It is designed to implement Bridge
.
startUpdate
in interface UiEngine
UiEngine.finishUpdate(java.lang.Object)
.
java.io.IOException
UiEngine.finishUpdate(java.lang.Object)
,
UiEngine.closeUpdate(java.lang.Object)
public JSONArray finishUpdate(java.lang.Object ctx) throws java.io.IOException
UiEngine
UiEngine.closeUpdate(java.lang.Object)
.
It is designed to implement Bridge
.
finishUpdate
in interface UiEngine
ctx
- the context returned by the previous call to UiEngine.startUpdate(org.zkoss.zk.ui.Execution)
java.io.IOException
UiEngine.startUpdate(org.zkoss.zk.ui.Execution)
,
UiEngine.closeUpdate(java.lang.Object)
public void closeUpdate(java.lang.Object ctx) throws java.io.IOException
UiEngine
It is designed to implement Bridge
.
closeUpdate
in interface UiEngine
java.io.IOException
UiEngine.startUpdate(org.zkoss.zk.ui.Execution)
,
UiEngine.finishUpdate(java.lang.Object)
public void wait(java.lang.Object mutex) throws java.lang.InterruptedException, SuspendNotAllowedException
UiEngine
UiEngine.notify(Object)
, UiEngine.notifyAll(Object)
,
UiEngine.notify(Desktop, Object)
or UiEngine.notifyAll(Desktop, Object)
for the specified object.
It can only be called when the current thread is processing an event. And, when called, the current processing is suspended and ZK continues to process the next event and finally render the result.
It is typical use to implement a modal dialog where it won't return until the modal dialog ends.
wait
in interface UiEngine
mutex
- any non-null object to identify what to wait, such that
UiEngine.notify(Object)
and UiEngine.notify(Desktop, Object)
knows
which object to notify.
SuspendNotAllowedException
- if there are too many suspended
exceptions.
Deployers can control the maximal allowed number of suspended exceptions
by specifying max-suspended-thread
in zk.xml
,
or invoking Configuration.setMaxSuspendedThreads(int)
.
java.lang.InterruptedException
public void notify(java.lang.Object mutex)
UiEngine
Unlike UiEngine.notify(Desktop, Object)
, this method can be invoked only
if the same desktop is locked for processing requests.
notify
in interface UiEngine
mutex
- any non-null object to identify what to notify. It must be
same object passed to UiEngine.wait(java.lang.Object)
.UiEngine.notify(Desktop, Object)
,
UiEngine.notifyAll(Object)
public void notify(Desktop desktop, java.lang.Object mutex)
UiEngine
Unlike UiEngine.notify(Object)
, this method can be called any time.
It is designed to let working threads resume an event processing
thread.
Notice: if this method is NOT called in an event processing thread, the resumed thread won't execute until the next request is received. To enforce it happen, you might use the timer component (found in ZUL).
notify
in interface UiEngine
desktop
- the desktop which the suspended thread is processing.
It must be the same desktop of the suspended thread.mutex
- any non-null object to identify what to notify. It must be
same object passed to UiEngine.wait(java.lang.Object)
.UiEngine.notify(Object)
,
UiEngine.notifyAll(Desktop, Object)
public void notifyAll(java.lang.Object mutex)
UiEngine
Unlike UiEngine.notify(Desktop, Object)
, this method can be invoked only
if the same desktop is locked for processing requests.
notifyAll
in interface UiEngine
mutex
- any non-null object to identify what to notify. It must be
same object passed to UiEngine.wait(java.lang.Object)
.UiEngine.notify(Desktop, Object)
,
UiEngine.notifyAll(Object)
public void notifyAll(Desktop desktop, java.lang.Object mutex)
UiEngine
Unlike UiEngine.notifyAll(Object)
, this method can be called any time.
It is designed to let working threads resume an event processing
thread.
If this method is NOT called in an event processing thread, the resumed thread won't execute until the next request is received. To enforce it happen, you might use the timer component (found in ZUL).
notifyAll
in interface UiEngine
desktop
- the desktop which the suspended thread is processing.
It must be the same desktop of the suspended thread.mutex
- any non-null object to identify what to notify. It must be
same object passed to UiEngine.wait(java.lang.Object)
.UiEngine.notify(Object)
,
UiEngine.notifyAll(Desktop, Object)
public void activate(Execution exec)
UiEngine
UiEngine.deactivate(org.zkoss.zk.ui.Execution)
in the finally clause.
Note: you RARELY need to invoke this method because UiEngine.execNewPage(org.zkoss.zk.ui.Execution, org.zkoss.zk.ui.metainfo.PageDefinition, org.zkoss.zk.ui.Page, java.io.Writer)
and UiEngine.execUpdate(org.zkoss.zk.ui.Execution, java.util.List
will activate and deactivate automatically.
Note: this method can be called only when processing a client request (e.g., HTTP) other than creating a new page and processing async-update.
Also, even if you use this method to grant the right to access components of the specified page, don't post events, create, remove, invalidate and do any smart updates. In other words, READ ONLY.
activate
in interface UiEngine
public boolean activate(Execution exec, int timeout)
UiEngine
UiEngine.activate(Execution)
, you could specify an amount of
time (timeout), and it returns false if it takes longer than the given
amount of time before granted.
activate
in interface UiEngine
timeout
- the number of milliseconds to wait before giving up.
It is ignored if negative, i.e., it waits until granted if negative.
public void deactivate(Execution exec)
UiEngine
deactivate
in interface UiEngine
public java.lang.String getNativeContent(Component comp, java.util.List<NodeInfo> children, Native.Helper helper)
UiEngine
NativeInfo
).
Example:
<html>
<attribute name="content">
<br/>
</attribute>
</html>
getNativeContent
in interface UiEngine
comp
- the component that the native content will be assigned to.
It is the object that the self variable is assigned when evaluating
EL expressions.children
- a list of NativeInfo
,
TextInfo
and others.
This method evaluates them one-by-one and returns the result
which is the value that will be assigned.helper
- the helper used to generate the content.Property
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |