Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-15 Thread Richard W. Adams
Fair enough. But I have use a Component, since 
AjaxSelfUpdatingTimerBehavioronly works on a component. Which means I have 
to implement the abstract onRender() method. What's the minimum action my 
onRender() needs to do, considering I just want an invisible component?

Or is there some other way to accomplish this automatic push of JavaScript 
without re-rendering the entire page on every update?




From:   Sven Meier s...@meiers.net
To: users@wicket.apache.org
Date:   05/06/2014 04:37 PM
Subject:Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() 
Never Called



By overriding #onRender() you're preventing the component tag to be 
written into the response.
Since wicket-ajax cannot find the markuo id in the DOM, it will not 
perform the Ajax request.

Sven

On 05/06/2014 08:28 PM, Richard W. Adams wrote:
 The onPostProcessTarget() method of my AjaxSelfUpdatingTimerBehavior is
 not being called for some reason. Here's the code. I can see the start()
 method being called (when the user clicks my Start button), but
 onPostProcessTarget() is never invoked. What am I doing wrong? Do I need
 to use some different sort of timer?

 
//--
 @Override protected void onRender(final MarkupStream stream) {
  /*
   * Does nothing. This component has no markup of its own.
   * It exists only to update the progress bar.
   */
 System.out.println(In ProgressBarUpdater.onRender());
  stream.next();  // Keep Wicket from complaining about not
 advancing the markup stream
 }
 
//--
 /**
   * Opens the Ricola progress bar amp; begins the polling. We don't 
start
 the polling until
   * explicitly told to so do, for efficiency purposes.
   * @param ajax The Ajax request wrapper.
   * @param reporter The object to query for progress data.
   */
 public void start(final AjaxRequestTarget ajax, final ProgressReporter
 reporter) {

  final AjaxSelfUpdatingTimerBehavior behavior = new
  AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)) {
  private static final long serialVersionUID = 1L;

  @Override protected void onPostProcessTarget(final
 AjaxRequestTarget ajax) {

 System.out.printf(In onPostProcessTarget());
  super.onPostProcessTarget(ajax);
  final Progress progress = 
reporter.getProgress();
  final String script =   // 
Build
 script to update
  ProgressScript.build(progress);  //
 progress bar
  ajax.appendJavascript(script);
  if (progress == null) { //
 If operation is finished
  final ProgressBarUpdater updater =
  ProgressBarUpdater.this;
  updater.remove(this); //
 Stop timer to prevent
  ajax.addComponent(updater);  // 
pointless
 polling
  }
  }
  };
  add(behavior);
  ajax.addComponent(this);
 }
 
//--

 Here's the markup for the ProgressBarUpdater, the component to which 
these
 methods belong:

  span wicket:id=progress-updater/span



 From:   Martin Grigorov mgrigo...@apache.org
 To: users@wicket.apache.org users@wicket.apache.org
 Date:   05/05/2014 03:32 PM
 Subject:Re: Progress Bar



 Hi,


 On Mon, May 5, 2014 at 7:18 PM, Richard W. Adams rwada...@up.com 
wrote:

 We have a requirement to implement a progress bar for long-running
 server
 operations. We can't use the code at
 https://github.com/wicketstuff/core/wiki/Progressbar, because it 
doesn't
 meet our corporate user interface look-and-feel standards.

 Have you considered providing your own .css ?
 
https://github.com/wicketstuff/core/blob/wicket-6.x/jdk-1.6-parent/progressbar-parent/progressbar/src/main/java/org/wicketstuff/progressbar/ProgressBar.java#L109




 So, we started our own implementation. Our test page contains these
 methods below (the TestExecutor below class implements
 CallableExecutorResult).



 
//--
 private Component createButton() {
  return new AjaxButton(start-button) {
  private static final long serialVersionUID = -1;

  @Override protected void onSubmit(final
 AjaxRequestTarget
 ajax, final Form? form) {

  final ExecutorService service = Executors.
 newSingleThreadExecutor();
  try {
  final ProgressBarTestPage page =
 ProgressBarTestPage.this

Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-15 Thread Richard W. Adams
I finally got the onTimer() to execute. Had to change my button onclick() 
code to this:

add(new ProgressUpdateBehavior(executor)); 
ajax.addComponent(this); 

It began working when I added the second line above. Without that, the 
client didn't receive the updated
component with the new timer script. 

**

This email and any attachments may contain information that is confidential 
and/or privileged for the sole use of the intended recipient.  Any use, review, 
disclosure, copying, distribution or reliance by others, and any forwarding of 
this email or its contents, without the express permission of the sender is 
strictly prohibited by law.  If you are not the intended recipient, please 
contact the sender immediately, delete the e-mail and destroy all copies.
**


Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-15 Thread Richard W. Adams
Some further info: I changed my class to extend Label instead of Component
, and removed the onRender() override. But onPostProcessTarget() is still 
not called. Any suggestions would be greatly appreciated!




From:   Sven Meier s...@meiers.net
To: users@wicket.apache.org
Date:   05/06/2014 04:37 PM
Subject:Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() 
Never Called



By overriding #onRender() you're preventing the component tag to be 
written into the response.
Since wicket-ajax cannot find the markuo id in the DOM, it will not 
perform the Ajax request.

Sven

On 05/06/2014 08:28 PM, Richard W. Adams wrote:
 The onPostProcessTarget() method of my AjaxSelfUpdatingTimerBehavior is
 not being called for some reason. Here's the code. I can see the start()
 method being called (when the user clicks my Start button), but
 onPostProcessTarget() is never invoked. What am I doing wrong? Do I need
 to use some different sort of timer?

 
//--
 @Override protected void onRender(final MarkupStream stream) {
  /*
   * Does nothing. This component has no markup of its own.
   * It exists only to update the progress bar.
   */
 System.out.println(In ProgressBarUpdater.onRender());
  stream.next();  // Keep Wicket from complaining about not
 advancing the markup stream
 }
 
//--
 /**
   * Opens the Ricola progress bar amp; begins the polling. We don't 
start
 the polling until
   * explicitly told to so do, for efficiency purposes.
   * @param ajax The Ajax request wrapper.
   * @param reporter The object to query for progress data.
   */
 public void start(final AjaxRequestTarget ajax, final ProgressReporter
 reporter) {

  final AjaxSelfUpdatingTimerBehavior behavior = new
  AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)) {
  private static final long serialVersionUID = 1L;

  @Override protected void onPostProcessTarget(final
 AjaxRequestTarget ajax) {

 System.out.printf(In onPostProcessTarget());
  super.onPostProcessTarget(ajax);
  final Progress progress = 
reporter.getProgress();
  final String script =   // 
Build
 script to update
  ProgressScript.build(progress);  //
 progress bar
  ajax.appendJavascript(script);
  if (progress == null) { //
 If operation is finished
  final ProgressBarUpdater updater =
  ProgressBarUpdater.this;
  updater.remove(this); //
 Stop timer to prevent
  ajax.addComponent(updater);  // 
pointless
 polling
  }
  }
  };
  add(behavior);
  ajax.addComponent(this);
 }
 
//--

 Here's the markup for the ProgressBarUpdater, the component to which 
these
 methods belong:

  span wicket:id=progress-updater/span



 From:   Martin Grigorov mgrigo...@apache.org
 To: users@wicket.apache.org users@wicket.apache.org
 Date:   05/05/2014 03:32 PM
 Subject:Re: Progress Bar



 Hi,


 On Mon, May 5, 2014 at 7:18 PM, Richard W. Adams rwada...@up.com 
wrote:

 We have a requirement to implement a progress bar for long-running
 server
 operations. We can't use the code at
 https://github.com/wicketstuff/core/wiki/Progressbar, because it 
doesn't
 meet our corporate user interface look-and-feel standards.

 Have you considered providing your own .css ?
 
https://github.com/wicketstuff/core/blob/wicket-6.x/jdk-1.6-parent/progressbar-parent/progressbar/src/main/java/org/wicketstuff/progressbar/ProgressBar.java#L109




 So, we started our own implementation. Our test page contains these
 methods below (the TestExecutor below class implements
 CallableExecutorResult).



 
//--
 private Component createButton() {
  return new AjaxButton(start-button) {
  private static final long serialVersionUID = -1;

  @Override protected void onSubmit(final
 AjaxRequestTarget
 ajax, final Form? form) {

  final ExecutorService service = Executors.
 newSingleThreadExecutor();
  try {
  final ProgressBarTestPage page =
 ProgressBarTestPage.this;
  final TransactionData data = new
 TransactionData (page.getId(), false);
  final TestExecutor executor = new
 TestExecutor(data

Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-15 Thread Richard W. Adams
I tried simplifying the design by extending AbstractAjaxTimerBehavior 
instead, but still can't get it to do anything. In the following class, 
the onTimer() method is never called:

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.util.time.Duration;

import com.uprr.eni.commons.util.progress.Progress;
import com.uprr.eni.commons.util.progress.ProgressReporter;
import com.uprr.eni.commons.util.progress.ProgressScript;

//--
/**
 * Periodically sends JavaScript to the client to update the progress bar.
 */
public class ProgressUpdateBehavior extends AbstractAjaxTimerBehavior {

private static final long serialVersionUID = 6685938921228093681L;

private final ProgressReporter reporter;
private final Component parent;

//--
/**
 * Constructor.
 * @param reporter The object we will query for progress.
 * @param parent The component to which this behavior is attached. The 
behavior will remove
 * itself from the parent when {@code reporter.getProgress()} returns 
{@code null}.
 */
public ProgressUpdateBehavior(final ProgressReporter reporter, final 
Component parent) {
super(Duration.seconds(2));
this.reporter = reporter;
this.parent = parent;
}
//--
@Override protected void onTimer(final AjaxRequestTarget ajax) {

final Progress progress = reporter.getProgress();
final String script = ProgressScript.build(progress);
ajax.appendJavascript(script);
if (progress == null) {
parent.remove(this);
}
}
//--
}

I add the above behavior to the page when the user clicks a button to 
begin a long running task. I can see the background thread executing as 
expected, but the timer behavior's onTimer() is never executed.

//--
private Component createButton() {
return new AjaxButton(start-button) {
private static final long serialVersionUID = -1;

@Override protected void onSubmit(final AjaxRequestTarget 
ajax, final Form? form) {

final ExecutorService service = 
Executors.newSingleThreadExecutor();
try {
final ProgressBarTestPage page = 
ProgressBarTestPage.this;
final TransactionData data = new 
TransactionData(page.getId(), false);
final TestExecutor executor = new 
TestExecutor(data, getPermissions());

executor.addListener(page); // 
Request notification
final Future? future =// 
When/if task completes
service.submit(executor);  // 
Begin background thread
BACKGROUND_TASKS.put(currentUserName, 
future);// Record what we're doing

add(new ProgressUpdateBehavior(executor, 
this));// Start polling for progress

} catch (final Exception ex) {
throw new RuntimeException(ex);
}
service.shutdown();  
}  
};
}




From:   Sven Meier s...@meiers.net
To: users@wicket.apache.org
Date:   05/06/2014 04:37 PM
Subject:Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() 
Never Called



By overriding #onRender() you're preventing the component tag to be 
written into the response.
Since wicket-ajax cannot find the markuo id in the DOM, it will not 
perform the Ajax request.

Sven

On 05/06/2014 08:28 PM, Richard W. Adams wrote:
 The onPostProcessTarget() method of my AjaxSelfUpdatingTimerBehavior is
 not being called for some reason. Here's the code. I can see the start()
 method being called (when the user clicks my Start button), but
 onPostProcessTarget() is never invoked. What am I doing wrong? Do I need
 to use some different sort of timer?

 
//--
 @Override protected void onRender(final MarkupStream stream) {
  /*
   * Does nothing. This component has no markup of its own.
   * It exists only to update the progress bar.
   */
 System.out.println(In ProgressBarUpdater.onRender());
  stream.next();  // Keep Wicket from complaining about not
 advancing the markup stream

AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-06 Thread Richard W. Adams
The onPostProcessTarget() method of my AjaxSelfUpdatingTimerBehavior is 
not being called for some reason. Here's the code. I can see the start() 
method being called (when the user clicks my Start button), but 
onPostProcessTarget() is never invoked. What am I doing wrong? Do I need 
to use some different sort of timer?

//--
@Override protected void onRender(final MarkupStream stream) {
/*
 * Does nothing. This component has no markup of its own.
 * It exists only to update the progress bar.
 */
System.out.println(In ProgressBarUpdater.onRender());
stream.next();  // Keep Wicket from complaining about not 
advancing the markup stream
}
//--
/**
 * Opens the Ricola progress bar amp; begins the polling. We don't start 
the polling until
 * explicitly told to so do, for efficiency purposes.
 * @param ajax The Ajax request wrapper.
 * @param reporter The object to query for progress data.
 */
public void start(final AjaxRequestTarget ajax, final ProgressReporter 
reporter) {

final AjaxSelfUpdatingTimerBehavior behavior = new
AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)) {
private static final long serialVersionUID = 1L;

@Override protected void onPostProcessTarget(final 
AjaxRequestTarget ajax) {

System.out.printf(In onPostProcessTarget());
super.onPostProcessTarget(ajax);
final Progress progress = reporter.getProgress();
final String script =   // Build 
script to update
ProgressScript.build(progress);  // 
progress bar
ajax.appendJavascript(script);
if (progress == null) { // 
If operation is finished
final ProgressBarUpdater updater =
ProgressBarUpdater.this;
updater.remove(this);   // 
Stop timer to prevent
ajax.addComponent(updater);  // pointless 
polling
}
}
};
add(behavior);
ajax.addComponent(this);
}
//--

Here's the markup for the ProgressBarUpdater, the component to which these 
methods belong:

span wicket:id=progress-updater/span



From:   Martin Grigorov mgrigo...@apache.org
To: users@wicket.apache.org users@wicket.apache.org
Date:   05/05/2014 03:32 PM
Subject:Re: Progress Bar



Hi,


On Mon, May 5, 2014 at 7:18 PM, Richard W. Adams rwada...@up.com wrote:

 We have a requirement to implement a progress bar for long-running 
server
 operations. We can't use the code at
 https://github.com/wicketstuff/core/wiki/Progressbar, because it doesn't
 meet our corporate user interface look-and-feel standards.


Have you considered providing your own .css ?
https://github.com/wicketstuff/core/blob/wicket-6.x/jdk-1.6-parent/progressbar-parent/progressbar/src/main/java/org/wicketstuff/progressbar/ProgressBar.java#L109




 So, we started our own implementation. Our test page contains these
 methods below (the TestExecutor below class implements
 CallableExecutorResult).


 
//--
 private Component createButton() {
 return new AjaxButton(start-button) {
 private static final long serialVersionUID = -1;

 @Override protected void onSubmit(final 
AjaxRequestTarget
 ajax, final Form? form) {

 final ExecutorService service = Executors.
 newSingleThreadExecutor();
 try {
 final ProgressBarTestPage page =
 ProgressBarTestPage.this;
 final TransactionData data = new
 TransactionData (page.getId(), false);
 final TestExecutor executor = new
 TestExecutor(data, getPermissions());

 executor.addListener(page); // 
Request
 notification when done
 future = service.submit(executor); //
 Begin execution
 progressBarUpdater.start(ajax, 
executor);
 // Start polling for progress

 } catch (final Exception ex) {
 throw new RuntimeException(ex);
 }
 service.shutdown(); // Terminate gracefully
 (VM probably
 }   //  won't exit if we fail to do 
this)
 };
 }

 

Re: AjaxSelfUpdatingTimerBehavior.onPostProcessTarget() Never Called

2014-05-06 Thread Sven Meier
By overriding #onRender() you're preventing the component tag to be 
written into the response.
Since wicket-ajax cannot find the markuo id in the DOM, it will not 
perform the Ajax request.


Sven

On 05/06/2014 08:28 PM, Richard W. Adams wrote:

The onPostProcessTarget() method of my AjaxSelfUpdatingTimerBehavior is
not being called for some reason. Here's the code. I can see the start()
method being called (when the user clicks my Start button), but
onPostProcessTarget() is never invoked. What am I doing wrong? Do I need
to use some different sort of timer?

//--
@Override protected void onRender(final MarkupStream stream) {
 /*
  * Does nothing. This component has no markup of its own.
  * It exists only to update the progress bar.
  */
System.out.println(In ProgressBarUpdater.onRender());
 stream.next();  // Keep Wicket from complaining about not
advancing the markup stream
}
//--
/**
  * Opens the Ricola progress bar amp; begins the polling. We don't start
the polling until
  * explicitly told to so do, for efficiency purposes.
  * @param ajax The Ajax request wrapper.
  * @param reporter The object to query for progress data.
  */
public void start(final AjaxRequestTarget ajax, final ProgressReporter
reporter) {

 final AjaxSelfUpdatingTimerBehavior behavior = new
 AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)) {
 private static final long serialVersionUID = 1L;

 @Override protected void onPostProcessTarget(final
AjaxRequestTarget ajax) {

System.out.printf(In onPostProcessTarget());
 super.onPostProcessTarget(ajax);
 final Progress progress = reporter.getProgress();
 final String script =   // Build
script to update
 ProgressScript.build(progress);  //
progress bar
 ajax.appendJavascript(script);
 if (progress == null) { //
If operation is finished
 final ProgressBarUpdater updater =
 ProgressBarUpdater.this;
 updater.remove(this);   //
Stop timer to prevent
 ajax.addComponent(updater);  // pointless
polling
 }
 }
 };
 add(behavior);
 ajax.addComponent(this);
}
//--

Here's the markup for the ProgressBarUpdater, the component to which these
methods belong:

 span wicket:id=progress-updater/span



From:   Martin Grigorov mgrigo...@apache.org
To: users@wicket.apache.org users@wicket.apache.org
Date:   05/05/2014 03:32 PM
Subject:Re: Progress Bar



Hi,


On Mon, May 5, 2014 at 7:18 PM, Richard W. Adams rwada...@up.com wrote:


We have a requirement to implement a progress bar for long-running

server

operations. We can't use the code at
https://github.com/wicketstuff/core/wiki/Progressbar, because it doesn't
meet our corporate user interface look-and-feel standards.


Have you considered providing your own .css ?
https://github.com/wicketstuff/core/blob/wicket-6.x/jdk-1.6-parent/progressbar-parent/progressbar/src/main/java/org/wicketstuff/progressbar/ProgressBar.java#L109




So, we started our own implementation. Our test page contains these
methods below (the TestExecutor below class implements
CallableExecutorResult).




//--

private Component createButton() {
 return new AjaxButton(start-button) {
 private static final long serialVersionUID = -1;

 @Override protected void onSubmit(final

AjaxRequestTarget

ajax, final Form? form) {

 final ExecutorService service = Executors.
newSingleThreadExecutor();
 try {
 final ProgressBarTestPage page =
ProgressBarTestPage.this;
 final TransactionData data = new
TransactionData (page.getId(), false);
 final TestExecutor executor = new
TestExecutor(data, getPermissions());

 executor.addListener(page); //

Request

notification when done
 future = service.submit(executor); //
Begin execution
 progressBarUpdater.start(ajax,

executor);

// Start polling for progress

 } catch (final Exception ex) {
 throw new RuntimeException(ex);