Class DesignerPageBean
- java.lang.Object
 - 
- de.xima.fc.gui.bean.designer.conversation.DesignerPageBean
 
 
- 
- All Implemented Interfaces:
 Serializable
@Named @ViewScoped public class DesignerPageBean extends Object implements Serializable
Bean for all designer pages. Scopes the designer conversation to the main designer view, initializes the project, keeps track of model changes.- Since:
 - 7.0.0
 - Author:
 - XIMA MEDIA GmbH
 - See Also:
 - Serialized Form
 
 
- 
- 
Constructor Summary
Constructors Constructor Description DesignerPageBean() 
- 
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description EContentViewgetContentView()StringgetConversationId()StringgetFormTitle()voidhandleGenericFileUpload(org.primefaces.event.FileUploadEvent event)Handles an uploaded file and posts and forwards to thevoidhandleProjectUpdate()Remote command invoked when the name of the project was updated.voidinitChild()Called on page load when a child iframe designer page is loaded.voidinitParent()Called on page load when the designer parent page is loaded.booleanisChildPage()booleanisConversationActive()booleanisParentPage()voidpost(ISessionConversationEvent event)Posts the given designer conversation event and informs all event handlers that have subscribed to that event.voidregisterEventHandler(ISessionConversationEventHandler eventHandler)Registers the given conversation event handler for the active designer conversation.<T extends Serializable,R extends ICrossViewScopeRequest<T>>
voidregisterRequestHandler(Class<R> requestType, ICrossViewScopeRequestHandler<T,R> requestHandler)Registers the given conversation request handler for the active designer conversation.<T extends Serializable,R extends ICrossViewScopeRequest<T>>
voidrequest(R request, Duration timeout)Allows to invoke the handler within the scope where it was registered.<T extends Serializable,R extends ICrossViewScopeRequest<T>>
booleanrequest(R request, Duration timeout, ICrossViewScopeResponseConsumer<? super T> handler)Allows to (a) invoke the handler within the scope where it was registered, and (b) to retrieve a piece of data from another view scope that participates in the same conversation.IRequestHandlerBuilderrequestBuilder()<R> RwithDesignerConversationModel(Function<DesignerConversationModel,R> fn)The designer conversation model is shared between different views and may thus be accessed in simultaneously by different threads handling different requests. 
 - 
 
- 
- 
Method Detail
- 
getContentView
public EContentView getContentView()
- Returns:
 - The content view of the currently opened designer tab.
 
 
- 
getConversationId
public String getConversationId()
- Returns:
 - The ID of the current designer 
Conversation. 
 
- 
getFormTitle
public String getFormTitle()
- Returns:
 - The current form title. Either from the persisted project, or when the form designer is open, the title as it has been entered in the form designer.
 
 
- 
handleProjectUpdate
public void handleProjectUpdate()
Remote command invoked when the name of the project was updated. Updates the project name in the bottom bar of the designer. 
- 
handleGenericFileUpload
public void handleGenericFileUpload(org.primefaces.event.FileUploadEvent event)
Handles an uploaded file and posts and forwards to the- Parameters:
 event- Event with the uploaded data.
 
- 
initChild
public void initChild()
Called on page load when a child iframe designer page is loaded. Initializes the designer conversation. 
- 
initParent
public void initParent()
Called on page load when the designer parent page is loaded. Initializes the designer conversation. 
- 
isChildPage
public boolean isChildPage()
- Returns:
 - Whether the current view scope is a designer child page (iframe) contained in the parent page.
 
 
- 
isConversationActive
public boolean isConversationActive()
- Returns:
 - Whether the designer conversation is currently active. Normally it should be ended only when the parent view ends.
 
 
- 
isParentPage
public boolean isParentPage()
- Returns:
 - Whether the current view scope is the designer parent frame that contains the individual iframes.
 
 
- 
post
public void post(ISessionConversationEvent event)
Posts the given designer conversation event and informs all event handlers that have subscribed to that event. When no designer conversation is active, this is a no-op.- Parameters:
 event- Event to post.
 
- 
registerEventHandler
public void registerEventHandler(ISessionConversationEventHandler eventHandler)
Registers the given conversation event handler for the active designer conversation. When no designer conversation is active, this is a no-op.- Parameters:
 eventHandler- Designer conversation event handler to register. All subscriber methods of the event handler will be noticed when the corresponding designer conversation event occurs.
 
- 
registerRequestHandler
public <T extends Serializable,R extends ICrossViewScopeRequest<T>> void registerRequestHandler(Class<R> requestType, ICrossViewScopeRequestHandler<T,R> requestHandler)
Registers the given conversation request handler for the active designer conversation. When no designer conversation is active, this is a no-op.- Type Parameters:
 T- Type of the requested data.R- Type of the request.- Parameters:
 requestType- Request type to listen to.requestHandler- Designer conversation request handler to register. The handler is called when arequestis made.
 
- 
request
public <T extends Serializable,R extends ICrossViewScopeRequest<T>> boolean request(R request, Duration timeout, ICrossViewScopeResponseConsumer<? super T> handler)
Allows to (a) invoke the handler within the scope where it was registered, and (b) to retrieve a piece of data from another view scope that participates in the same conversation.Assume there are two view scopes A and B. A method running in the scope of A wishes to obtain some data form B. It needs to send a message (such as via an event bus) to B. However, when the message handler of B is invoked synchronously, it will still be within the scope of A and will not have access to the state of B.
To solve this, A can first store the request data within the shared conversation state. A can send a push message via a web socket to the client (web browser) of B, which can then initiate an AJAX call to the view scope of B. Now B can access the request data from the shared conversation state, create the requested data and store the requested data in the conversation state. Afterwards, B sends a push message to the client (browser) of A, which initiates another AJAX call to the view scope of A. Finally, A can access the response from the conversation state and proceed to process that response.
- Type Parameters:
 T- Type of the requested data.R- Type of the request.- Parameters:
 request- Request to send.handler- Handler to invoke when the request completes either successfully or erroneously.timeout- Timeout to set on the request. When no response is received within this time frame, the handler is invoked with an error.- Returns:
 trueif there are any pending responses,falseif all requests have been processed, such as when no handlers did respond to the request.
 
- 
requestBuilder
public IRequestHandlerBuilder requestBuilder()
- Returns:
 - A new builder for sending multiple
 
requestsand performing some logic when all have finished. 
 
- 
request
public <T extends Serializable,R extends ICrossViewScopeRequest<T>> void request(R request, Duration timeout)
Allows to invoke the handler within the scope where it was registered.Assume there are two view scope A and B. A method running in the scope of A wishes to obtain some data form B. It needs to send a message (such as via an event bus) to B. However, when the message handler of B is invoked synchronously, it will still be within the scope of A and will not have access to the state of B.
To solve this, A can first store the request data within the shared conversation state. A can send a push message via a web socket to the client (web browser) of B, which can then initiate an AJAX call to the view scope of B. Now B can access the request data from the shared conversation state, create the requested data and store the requested data in the conversation state. Afterwards, B sends a push message to the client (browser) of A, which initiates another AJAX call to the view scope of A. Finally, A can access the response from the conversation state and proceed to process that response.
- Type Parameters:
 T- Type of the requested data.R- Type of the request.- Parameters:
 request- Request to send.timeout- Timeout to set on the request. When no response is received within this time frame, the handler is invoked with an error.
 
- 
withDesignerConversationModel
public <R> R withDesignerConversationModel(Function<DesignerConversationModel,R> fn)
The designer conversation model is shared between different views and may thus be accessed in simultaneously by different threads handling different requests. This method acquires a lock to ensure only one thread processes a conversation model at a given time. The lock is held for as long as the given handlerfnis invoked. Make sure you do not use the model outside the handlerfn.- Parameters:
 fn- It is given the model for the designer session. This is used to share data between the different views in each iframe. This model is scoped to the designerConversation.- Returns:
 - The value return by the given handler 
fn 
 
 - 
 
 -