I would be nice for this work as we have a JFreeChart written which is called 
by other apps too.

> Date: Sat, 14 Nov 2009 10:23:38 +0100
> From: [email protected]
> To: user
    [email protected]
> Subject: Re: Updating a Dynamic Image with AJAX (and JFreeChart)
> 
> Hi there,
> is JFreeChart your only possible approach? Check out flot integration 
> from wicketstuff-core.
> It draws nicer charts and you can update datasets sending json object 
> and redraw it by js.
> 
> Regards,
> Wojtek
> 
> 
> Swarnim Ranjitkar pisze:
> > I couldn't override getResourceState of DynamicImageResource as it new 
> > Resource state uses variable from DynamicImageResource eg format. Instead i 
> > copied DynamicImageResource class and made my own version of it and 
> > modified the getResourceState() get method. When I changed the drop down I 
> > was expecting it to call the geImageData but it wasn't calling it. Could 
> > you please advice.
> > Here is the modified method.
> > protected synchronized ResourceState getResourceState()
> >     {
> >         return new ResourceState()
> >         {
> >             private byte[] imageData;
> >             private final String contentType = "image/" + format;
> >
> >             @Override
> >             public Time lastModifiedTime()
> >             {
> >                 if (lastModifiedTime == null)
> >                 {
> >                     lastModifiedTime = 
> > DynamicImageResource.this.lastModifiedTime;
> >                     if (lastModifiedTime == null)
> >                     {
> >                         lastModifiedTime = Time.now();
> >                     }
> >                 }
> >                 return lastModifiedTime;
> >             }
> >
> >             @Override
> >             public byte[] getData()
> >             {
> > // here is what I made the change.
> >                 imageData = getImageData();
> >                 return imageData;
> >             }
> >
> >             @Override
> >             public String getContentType()
> >             {
> >                 return contentType;
> >             }
> >         };
> >     }
> >
> > From my  Image Class I called the copied version of   in getImageResource() 
> > {
> >
> >         return new DynamicImageResource(){
> >
> >
> > public class TugboatChartImage extends NonCachingImage  {
> >
> >     private int width;
> >     private int height;
> >
> >     public TugboatChartImage(String id, JFreeChart chart, int width, int 
> > height){
> >         super(id, new Model(chart));
> >         this.width = width;
> >         this.height = height;
> >     }
> >
> >     @Override
> >     protected Resource getImageResource() {
> >         return new DynamicImageResource(){//my copied version of 
> > DynamicResouce
> >             @Override
> >             protected byte[] getImageData() {
> >                 JFreeChart chart = (JFreeChart)getDefaultModelObject();
> >                 return toImageData(chart.createBufferedImage(width, 
> > height));
> >             }
> >             
> >
> >         };
> >     }
> >
> > }
> >
> >
> >   
> >> To: [email protected]
> >> From: [email protected]
> >> Subject: Re: Updating a Dynamic Image with AJAX (and JFreeChart)
> >> Date: Fri, 13 Nov 2009 23:31:39 -0500
> >>
> >> Look at the source of the DynamicImageResource class.  The 
> >> getResourceState method does something like (sorry for the lame 
> >> pseudocode) 'if image data is null then save and return value of 
> >> getImageData else return the previous image data'.  So its gonna call your 
> >> getImageData() method once and save the value.  This falls in line with 
> >> the super class's (DynamicWebResource) javadoc that says:
> >>
> >> very useful for things you   generate dynamically, but reuse for a while 
> >> after that. If you need resources that stream   directly and are not 
> >> cached, extend WebResource directly and implement 
> >> Resouce.getResourceStream() yourself.
> >>
> >> It has nothing to do with HTTP caching, which it looks like you're trying 
> >> to solve with your headers, but server-side caching.  Anyways... in this 
> >> case, getResourceStream of WebResource ends up calling getResourceState of 
> >> DynamicImageResource.  All you need to do is is override getResourceState 
> >> (and therefore kind of overrides the behavior of getResourceStream) of 
> >> your DynamicImageResource and ensure that it doesn't cache the result of 
> >> getImageData() and you should be set.
> >>
> >> Craig
> >>   _____  
> >>
> >> From: wicketnewuser [mailto:[email protected]]
> >> To: [email protected]
> >> Sent: Fri, 13 Nov 2009 20:32:05 -0500
> >> Subject: Re: Updating a Dynamic Image with AJAX (and JFreeChart)
> >>
> >>
> >>   I have same situation. I'm not able to refresh my image. But if i view 
> >> the
> >>   image i do get refreshed image
> >>   Here is my code. Based on my dropdownchoice it should make new Jfreechart
> >>   and the image should refresh. I couldn't get it working so i wrapped the
> >>   image with in a span but it still doesn't work. TugboatChartImage extends
> >>   NonCachingImage . Can any one point out what I'm doing wrong
> >>   Chart chart1 = new Chart(this.getString(column1.toString()), "Date",
> >>   "Dollars");
> >>     final String yAxisType = "linear";
> >>     final int smallChartWidth=400;
> >>     final int smallChartHeight=200;
> >>     JFreeChart jfChartOne = chart1.render(chartOneCollection, null, 
> >> yAxisType,
> >>   smallChartWidth, smallChartHeight);
> >>     
> >>     
> >>     // make an image
> >>     final TugboatChartImage imageOne = new TugboatChartImage("chart1image",
> >>   jfChartOne, smallChartWidth, smallChartHeight);
> >>     final WebMarkupContainer chart1Span = new
> >>   WebMarkupContainer("chart1Span");
> >>     chart1Span.add(imageOne);
> >>     add(chart1Span);
> >>   
> >>     // draw chart 2
> >>     Chart chart2 = new Chart(this.getString(column2.toString()), "Date",
> >>   "Count");
> >>     JFreeChart jfChartTwo = chart2.render(chartTwoCollection, null, 
> >> yAxisType,
> >>   smallChartWidth, smallChartHeight);
> >>     
> >>     // make an image
> >>     TugboatChartImage imageTwo = new TugboatChartImage("chart2image",
> >>   jfChartTwo, smallChartWidth, smallChartHeight);
> >>     add(imageTwo);
> >>     String filterStringList ="";
> >>     if (filterStringList!= null){
> >>      filterStringList =
> >>   report.getFilterParameterList().toString().replaceAll("\\[", "");
> >>      filterStringList = filterStringList.replaceAll("\\]", "");
> >>     }
> >>     final DropDownChoice<TugboatReportData.ColumnName> chart1Select = new
> >>   DropDownChoice<TugboatReportData.ColumnName>("chart1Select" ,new
> >>   PropertyModel(this, "column1"), TugboatReportData.trafficColumns,new
> >>   IChoiceRenderer() {
> >>      public Object getDisplayValue(Object obj) {
> >>       //this.getString give you value from the propertyfile
> >>          return
> >>   ReportResultsPage.this.getString(((TugboatReportData.ColumnName)
> >>   obj).toString());
> >>      }
> >>   
> >>      public String getIdValue(Object obj, int index) {
> >>       return obj.toString();
> >>      }
> >>     });
> >>     chart1Select.add(new  AjaxFormComponentUpdatingBehavior("onchange") {
> >>      protected void onUpdate(AjaxRequestTarget target) {
> >>             sortByColumn(displayRowSetFinal, column1);
> >>             Chart chart1R = new
> >>   Chart(ReportResultsPage.this.getString(column1.toString()), "Date",
> >>   "Dollars");
> >>             
> >>             SwishTimeSeriesCollection chartOneCollectionR =
> >>   createChartCollection(report, originalRowSet, 
> >> displayRowSetFinal.subList(0,
> >>   (originalRowSet.size() > 10) ? 9 : originalRowSet.size() - 1), column1);
> >>             logger.error(displayRowSetFinal);
> >>             JFreeChart jfChartOneR = chart1R.render(chartOneCollectionR, 
> >> null,
> >>   yAxisType, smallChartWidth, smallChartHeight);
> >>             imageOne.setDefaultModelObject(jfChartOneR);
> >>             imageOne.modelChanged();
> >>                chart1Span.modelChanged();
> >>             chart1Span.setOutputMarkupId(true);
> >>             imageOne.setOutputMarkupId(true);
> >>             target.addComponent(imageOne);
> >>             target.addComponent(chart1Span);
> >>      }
> >>     });
> >>   
> >>   Jason Mihalick wrote:
> >>   > 
> >>   > I am integrating JFreeChart into my application and I've followed the
> >>   > JFreeChart example on the wiki.  That works very nicely.  I was 
> >> impressed. 
> >>   > What I want to do now is update the graph that I display based on the
> >>   > selection from a drop down list.  I've successfully added the
> >>   > DropDownChoice component and added a AjaxFormComponentUpdatingBehavior 
> >> to
> >>   > it.  I've verified that my onUpdate( AjaxRequestTarget ) method is 
> >> being
> >>   > invoked and I'm receiving the updated value, which is very cool.  Here 
> >> is
> >>   > my onUpdate implementation for the DropDownChoice control:
> >>   > 
> >>   > protected void onUpdate( AjaxRequestTarget target ) {
> >>   >   log.debug( "graphStyles onUpdate invoked! SelectedGraphStyle = " +  
> >>   >                  FieldResultsPanel.this.getSelectedGraphStyle() );
> >>   >   FieldResultsPanel.this.updateGraph();  // Update the model and 
> >> re-create
> >>   > the JFreeChart Image
> >>   > 
> >>   >   // fieldGraph is my JFreeChartImage instance (derived from Image)
> >>   >   // This is supposed to indicate back to the browser that the image 
> >> needs
> >>   > updated.  I think this
> >>   >   // is working properly
> >>   >   target.addComponent( FieldResultsPanel.this.fieldGraph );  
> >>   > }
> >>   > 
> >>   > Even though I am updating the model of my JFreeChartImage, it appears 
> >> that
> >>   > the getImageData method is never invoked afterwards.
> >>   > 
> >>   > What do I need to do in order to get the image data to be re-read?
> >>   > 
> >>   > Here is my JFreeChartImage class:
> >>   > 
> >>   > public class JFreeChartImage extends Image {
> >>   > 
> >>   >   private static final Logger log = LoggerFactory.getLogger(
> >>   > JFreeChartImage.class );
> >>   >   
> >>   >   private int width;
> >>   >   private int height;
> >>   > 
> >>   >   public JFreeChartImage( String id ) {
> >>   >     super( id );
> >>   >   }
> >>   > 
> >>   >   public JFreeChartImage( String id, int width, int height ) {
> >>   >     this( id );
> >>   >     this.width = width;
> >>   >     this.height = height;
> >>   >   }
> >>   >   
> >>   >   public JFreeChartImage( String id, JFreeChart chart, int width, int
> >>   > height ) {
> >>   >     super(id, new Model( chart ) );
> >>   >     this.width = width;
> >>   >     this.height = height;
> >>   >   }
> >>   > 
> >>   >   public Component setModel( JFreeChart chart ) {
> >>   >     log.debug( "setModel invoked with chart: " + chart );
> >>   >     return super.setModel( new Model( chart ) );
> >>   >   }
> >>   >   
> >>   >   @Override
> >>   >   protected Resource getImageResource() {
> >>   > 
> >>   >     return new DynamicImageResource(){
> >>   >       private static final long serialVersionUID = 1L;
> >>   > 
> >>   >       @Override
> >>   >       protected byte[] getImageData() {
> >>   >         log.debug( "Invoking getImageData..." );
> >>   >         JFreeChart chart = (JFreeChart)getModelObject();
> >>   >         log.debug( "Chart object: " + chart );
> >>   >         return toImageData( chart.createBufferedImage( width, height ) 
> >> );
> >>   >       }
> >>   >   
> >>   >       @Override
> >>   >       protected void setHeaders( WebResponse response ) {
> >>   >         if ( isCacheable() ) {
> >>   >           super.setHeaders(response);
> >>   >         } else {
> >>   >           response.setHeader( "Pragma", "no-cache" );
> >>   >           response.setHeader( "Cache-Control", "no-cache" );
> >>   >           response.setDateHeader( "Expires", 0 );
> >>   >         }
> >>   >       }
> >>   >     };
> >>   >   }
> >>   >  
> >>   > Any help is much appreciated!
> >>   > 
> >>   > --
> >>   > Jason
> >>   > 
> >>   
> >>   -- 
> >>   View this message in context: 
> >> http://old.nabble.com/Updating-a-Dynamic-Image-with-AJAX-%28and-JFreeChart%29-tp12884455p26346217.html
> >>   Sent from the Wicket - User mailing list archive at Nabble.com.
> >>   
> >>   
> >>   ---------------------------------------------------------------------
> >>   To unsubscribe, e-mail: [email protected]
> >>   For additional commands, e-mail: [email protected]
> >>   
> >>     
> >>     
> >                                       
> >   
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
                                          

Reply via email to