⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 josqlfreechartxydataset.java

📁 JoSQL 1.5的源代码。JoSQL(SQL for Java Objects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java
💻 JAVA
字号:
/* * Copyright 2004-2005 Gary Bentley  *  * Licensed under the Apache License, Version 2.0 (the "License"); you may  * not use this file except in compliance with the License.  * You may obtain a copy of the License at  *    http://www.apache.org/licenses/LICENSE-2.0  * * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License. */package org.josql.contrib;import java.util.List;import java.util.ArrayList;import java.util.Map;import java.util.HashMap;import org.jfree.data.xy.XYDataset;import org.jfree.data.DomainOrder;import org.jfree.data.general.DatasetGroup;import org.jfree.data.general.DatasetChangeListener;import org.jfree.data.general.DatasetChangeEvent;import org.josql.Query;import org.josql.QueryResults;import org.josql.QueryExecutionException;import org.josql.QueryParseException;import org.josql.internal.Utilities;import org.josql.expressions.SelectItemExpression;public class JoSQLFreeChartXYDataset extends Query implements XYDataset{    private int row = 0;    private List results = null;    private Map series = new HashMap ();    private List listeners = new ArrayList ();    private DatasetGroup group = null;    public JoSQLFreeChartXYDataset ()    {    }    public void addChangeListener (DatasetChangeListener l)    {	this.listeners.add (l);    }    public void removeChangeListener (DatasetChangeListener l)    {	this.listeners.remove (l);    }    public DatasetGroup getGroup ()    {	return this.group;    }    public void setGroup (DatasetGroup g)    {	this.group = g;    }    public int indexOf (Comparable c)    {	// Must be an integer.	return ((Integer) c).intValue ();    }    public Comparable getSeriesKey (int series)    {	return new Integer (series);    }    public int getSeriesCount ()    {	return this.series.size ();    }    public void removeSeries (int series)    {	this.series.remove (new Integer (series));    }    public void addSeries (int    series,			   int    xCol,			   int    yCol)	                   throws IllegalArgumentException,	                          IllegalStateException,	                          QueryParseException    {	if (!this.parsed ())	{	    throw new IllegalStateException ("Cannot add a series until a query has been specified and parsed.");	}	if (xCol < 1)	{	    throw new IllegalArgumentException ("X column index must be a minimum of 1.");	}	if (yCol < 1)	{	    throw new IllegalArgumentException ("Y column index must be a minimum of 1.");	}	List cols = this.getColumns ();	if (xCol > cols.size ())	{	    throw new IllegalArgumentException ("X column index must be a minimum of " + 						cols.size () + 						".");	}	if (yCol > cols.size ())	{	    throw new IllegalArgumentException ("Y column index must be a minimum of " + 						cols.size () + 						".");	}	SelectItemExpression xexp = (SelectItemExpression) cols.get (xCol - 1);	Class xc = xexp.getExpectedReturnType (this);	if (!Utilities.isNumber (xc))	{	    throw new IllegalArgumentException ("X column: " +						xexp +						" will evaluate to an instance of type: " +						xc.getName () +						", but only columns that return numbers are allowed.");	    	}	SelectItemExpression yexp = (SelectItemExpression) cols.get (yCol - 1);	Class yc = yexp.getExpectedReturnType (this);	if (!Utilities.isNumber (yc))	{	    throw new IllegalArgumentException ("Y column: " +						yexp +						" will evaluate to an instance of type: " +						yc.getName () +						", but only columns that return numbers are allowed.");	    	}	this.series.put (new Integer (series),			 new Series (xCol,				     yCol));    }    /**     * Exectute the query and return the results.  A reference to the results is also held to      * allow them to be iterated over.  If you plan on re-using this data source then      * you should call: {@link #clearResults()} to free up the references to the results.     *     * @param l The List of objects to execute the query on.     * @return The results.     * @throws QueryExecutionException If the query cannot be executed, or if the query     *                                 is set to return objects rather than "columns".     */    public QueryResults executeQuery (List   l)	                              throws QueryExecutionException    {	if (this.isWantObjects ())	{	    throw new QueryExecutionException ("Only SQL statements that return columns (not the objects passed in) can be used.");	}	QueryResults qr = super.execute (l);	this.results = qr.getResults ();	// Notify our listeners.	DatasetChangeEvent dce = new DatasetChangeEvent (this,							 this);	for (int i = 0; i < this.listeners.size (); i++)	{	    DatasetChangeListener d = (DatasetChangeListener) this.listeners.get (i);	    d.datasetChanged (dce);	}	return qr;    }    public List getResults ()    {	return this.results;    }    public void clearResults ()    {	this.results = null;    }        public int getItemCount (int series)    {	if (this.results == null)	{	    return 0;	}	return this.results.size ();    }    public double getXValue (int series,			     int item)    {	// Bad man!	return ((Double) this.getX (series,				    item)).doubleValue ();    }    public double getYValue (int series,			     int item)    {	// Bad man!	return ((Double) this.getY (series,				    item)).doubleValue ();    }    public Number getX (int series,			int item)    {	if (this.results == null)	{	    return new Double (0);	}	List l = (List) this.results.get (item);	Series s = (Series) this.series.get (new Integer (series));	if (s == null)	{	    return new Double (0);	}	Number n = (Number) l.get (s.xCol - 1);	if (n instanceof Double)	{	    return n;	} else {	    return new Double (n.doubleValue ());	}    }    public Number getY (int series,			int item)    {	if (this.results == null)	{	    return new Double (0);	}	List l = (List) this.results.get (item);	Series s = (Series) this.series.get (new Integer (series));	if (s == null)	{	    return new Double (0);	}	Number n = (Number) l.get (s.yCol - 1);	if (n instanceof Double)	{	    return n;	} else {	    return new Double (n.doubleValue ());	}    }    public DomainOrder getDomainOrder ()    {	return DomainOrder.ASCENDING;    }    private class Series    {	public int xCol = 0;	public int yCol = 0;	public Series (int x,		       int y)	{	    this.xCol = x;	    this.yCol = y;	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -