Thanks everybody. I finally managed to display the content of an active log
file.

As mentioned in the earlier responses, all you need is two labels.

*Markup*:

<div id="logData" wicket:id="logData"></div>
<div id="nextLog" wicket:id="nextLog"></div>

*Java*:

Create the "logData" label as you would normally create labels and load the
content of the log file.

Something like this:

private MultiLineLabel createLogData()
    {
        return new MultiLineLabel("logData", new
LoadableDetachableModel<Object>()
        {
            @Override
            protected Object load()
            {
               try{
                return FileUtils.readFiletoString(file);
               }catch(Exception ex){}
               return "";
            }
        });
    }

And now the interesting component "nextLog". It might look something like
this:

private Label createNextLog()
    {
        Label nextLog = new Label("nextLog", new
LoadableDetachableModel<Object>()
        {
            @Override
            protected Object load()
            {
                //use a tailing api like "Tailer" in commons-io or may be
just java.io.RandomAccessFile?
                return "your 'tail' content goes here";
            }
        }){

            // This is needed because, wicket created dynamic ids for the
"nextLog" component
            @Override
            public String getMarkupId(boolean createIfDoesNotExist)
            {
                return "nextLog";
            }
        };
        nextLog.add(new
AjaxSelfUpdatingTimerBehavior(Duration.seconds(REFRESH_INTERVAL))
        {
            @Override
            protected void onPostProcessTarget(AjaxRequestTarget target)
            {

               /*
                * We are doing the following here:
                *   - append the content of "nextLog" to "logData"
                *   - remove "nextLog"
                *   - insert "nextLog" after "logData".
                */
                target.appendJavascript(
                        "$('#logData').append('<p>' + $('#nextLog').text()
+ '</p>');" +
                        "$('#nextLog').remove();" +
                        "$(\"<div
id='nextLog'>\").insertAfter($('#logData'));");
            }
        });
        nextLog.setOutputMarkupId(true);
        return nextLog;
    }

Thank you once again for each and everyone who took their time to give your
thoughts/suggestions. They were precious and I learned a lot by merely
interacting with this wonderful community.

On Mon, Nov 21, 2011 at 1:53 PM, James <james.eliye...@gmail.com> wrote:

> Thanks Igor. You simplified it to the maximum.
> On Nov 21, 2011 1:36 PM, "Igor Vaynberg" <igor.vaynb...@gmail.com> wrote:
>
>> a much simplified version:
>>
>> <div wicket:id="logData">log contents</div>
>> <div wicket:id="nextLog">next log call</div>
>>
>> no panel needed. add self-updating behavior to next log call and in
>> the callback also add
>>
>> target.appendjavascript( "$('#logdata).append($('#nextlog).content());
>> $('#nextlog').remove(); $('#logdata).insertafter($('<div
>> id='nextlog'>));" )
>>
>> im paraphrasing jquery here, but the is that you repaint the nextog
>> div and add javascript that after the repaint you move its contents to
>> the logdata div, and then empty the nextlog div. of course the nextlog
>> div should be hidden via css....
>>
>> -igor
>>
>>
>> On Sun, Nov 20, 2011 at 7:46 PM, Clint Checketts <checke...@gmail.com>
>> wrote:
>> > I'd need to look at Tailer to see how it operates. But here is how I'd
>> try
>> > it (it is quick and I don't like the markup, but we'll optimize it
>> later:
>> >
>> > Create a panel that looks like so (we'll call it LoggingPanel):
>> >
>> > <wicket:panel>
>> > <div wicket:id="logData">log contents</div>
>> > <div wicket:id="nextLog">next log call</div>
>> > </wicket:panel>
>> >
>> > Add a self updating timer behavior so the panel check the Tailer for
>> > output, if there is data, then update the logData label with it, make
>> the
>> > nextLog component be another LoggingPanel with a
>> SelfUpdatingTImerBehavior,
>> > and stop the timerbehavior on the current panel.
>> >
>> > Drawbacks are: the divs keep getting nested, so the markup isn't the
>> most
>> > beautiful, so setRenderBodyOnly(true) might make it nicer.
>> >
>> > -Clint
>> >
>> > On Sun, Nov 20, 2011 at 9:27 PM, James <james.eliye...@gmail.com>
>> wrote:
>> >
>> >> Thanks Steve. I'll look into the commons-io "Tailer".
>> >> But any idea on how to use this with wicket?
>> >>
>> >> On Mon, Nov 21, 2011 at 11:10 AM, Steve Swinsburg <
>> >> steve.swinsb...@gmail.com
>> >> > wrote:
>> >>
>> >> > I've done something similar to this using the Tailer class from
>> >> commons-io.
>> >> >
>> >> > cheers,
>> >> > Steve
>> >> >
>> >> >
>> >> > On 21/11/2011, at 12:59 PM, James wrote:
>> >> >
>> >> > > Dear wicket community,
>> >> > >
>> >> > > In a project that I'm working on, I need to build a "live log
>> viewer"
>> >> or
>> >> > > "dynamic log viewer" or "refreshable log viewer".
>> >> > > Much like how hudson/jenkins displays the console output.
>> >> > >
>> >> > > The idea is to dynamically display the new data added to a log file
>> >> along
>> >> > > with the existing content.
>> >> > >
>> >> > > How to go about doing this? Please throw some light on this.
>> >> > >
>> >> > > I searched about this in the web, mailing lists but couldn't find
>> what
>> >> I
>> >> > > was looking for, so I'm posting it here.
>> >> > > If this is asked elsewhere, kindly re-direct me to the respective
>> >> > resource.
>> >> > >
>> >> > > --
>> >> > > Thanks & Regards,
>> >> > > James
>> >> > > A happy Wicket user
>> >> >
>> >> >
>> >> > ---------------------------------------------------------------------
>> >> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> >> > For additional commands, e-mail: users-h...@wicket.apache.org
>> >> >
>> >> >
>> >>
>> >>
>> >> --
>> >> Thanks & Regards,
>> >> James
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>> For additional commands, e-mail: users-h...@wicket.apache.org
>>
>>


-- 
Thanks & Regards,
James

Reply via email to