text:
- 1 Download
- 2 Features
- 3 Integration
- 3.1 Can I use the Eclipse Chart engine in my own application?
- 3.2 What JARs are needed on the classpath to deploy the Eclipse Chart Engine?
- 3.3 How to configure the Chart Engine environment?
- 3.4 Can I use the Chart Builder in my application?
- 3.5 How do I show a chart in my Eclipse RCP application?
- 4 Chart Output Formats
- 5 Chart Terminology
- 6 Chart Rendering
- 6.1 How do I externalize text that needs to retrieve a runtime value from a locale specific message file?
- 6.2 How do I intercept the chart generation/rendering process and alter the content of the chart using custom business logic?
- 7 Chart Engine Extensions
- 8 Chart API Programming
- 8.1 How to get started?
- 8.2 How is the Chart Model working?
- 8.3 Which Chart class should I start with?
- 8.4 How to navigate through the model structure?
- 8.5 How is the chart library structured?
- 8.6 What is a device renderer?
- 8.7 What is a display server?
- 8.8 What is a series renderer?
- 8.9 What are blocks?
- 8.10 How are defaults assigned to the model?
- 8.11 How do I create an equivalent of a 'Hello Chart' first chart example with a plot containing axes?
- 8.12 How do I set the dimension (i.e. 2D, 2D with depth, 3D) of the chart?
- 8.13 How does transposing of the chart model work?
- 8.14 How do I set a solid color for various attributes (e.g. foreground, background, line edge)?
- 8.15 How do I set a gradient as the background fill of any region?
- 8.16 How do I set a tiled image as the background of the plot area?
- 8.17 How do I set a line or border edge style and thickness?
- 8.18 How do I set the edge color to represent a darker shade of a solid color?
- 8.19 How do I set text font face, size, styles, rotation, etc (for axis labels, title, data point values, etc)?
- 8.20 How do I apply insets within the text bounds of any label?
- 8.21 How do I draw a border with a custom line style around a label?
- 8.22 How do I add a shadow behind a rendered label?
- 8.23 How does 'auto axis scaling' work?
- 8.24 How are axes and series defined in a ChartWithAxes?
- 8.25 How do I define the axis origin or the intersecting point between two perpendicular axes?
- 8.26 How are series defined in a chart without axes?
- 8.27 How do I create a combination chart?
- 8.28 How do I show data point labels next to my graphic elements in each chart type? How do I format these data point labels? How do I position these labels for the various supported chart types?
- 8.29 How do I define chart interaction via API for the generated output?
- 8.30 How do I create a chart and perform a minimal refresh to show updated scrolling data values using animation?
- 8.31 How do I set an axis scale as logarithmic?
- 8.32 How do I set a series as stacked? Are all series types stackable?
- 8.33 How do I set an axis scale as a percent scale?
- 8.34 Can I combine stacked, logarithmic and/or percent properties on a single scale?
- 8.35 How do I add marker lines and marker ranges to the plot?
Where can I get the Eclipse Chart Engine distribution?
The Chart package is included in the main BIRT distribution, but you can get it separately from the download page. Select the BIRT version you need, and choose the Chart Engine distribution (which contains the chart examples plugin). You can also get it from CVS directly, if you wish to get the latest source as well as the unit tests.
What are the supported chart types?
The following table summarizes the available chart types.
|2D with depth
(3D effect)
|3D (real 3D rendering)
|Percent Stacked
|Percent Stacked
|Percent Stacked
|Candle Stick
|Bar Stick
|Single Dials
|Superimposed Dial
Can I use the Eclipse Chart engine in my own application?
Yes. A primary goal of the Eclipse Chart Engine project is to provide a package that can be used both with the BIRT reporting components as well as standalone.
As such, it is a complete Charting library with both a Chart Builder UI and a Chart Engine, with an out-of-the-box integration with BIRT. It can run outside of Eclipse as well and provides numerous extension points to add new capabilities, or to integrate in any application.
What JARs are needed on the classpath to deploy the Eclipse Chart Engine?
The following JARs and folders need to be included in your CLASSPATH at build/run time. They are all available in the chart engine download, except for the EMF plugins you need to get from the Eclipse EMF download site. Note that you don't necessarily need all of those if your application do not use certain functionalities.
Chart engine libraries:
- org.eclipse.birt.chart.device.extension_2.1.0.jar
- org.eclipse.birt.chart.device.svg_2.1.0.jar
- org.eclipse.birt.chart.device.swt_2.1.0.jar
- org.eclipse.birt.chart.engine.extension_2.1.0.jar
- org.eclipse.birt.chart.engine_2.1.0.jar
- org.eclipse.birt.chart.ui.extension_2.1.0.jar
- org.eclipse.birt.core.ui_2.1.0.jar
- org.eclipse.birt.core_2.1.0.jar
- Any jar from a custom extension plugin you wrote.
Third party dependencies:
- org.mozilla.rhino_1.6.0 (folder)
- org.apache.commons.codec_1.3.0 (folder)
- org.apache.batik_1.6.0 (folder)
- org.apache.batik.pdf_1.6.0 (folder)
- org.apache.xerces_2.8.0 (folder)
- org.eclipse.emf.common_2.x.y.jar
- org.eclipse.emf.common.resources_2.x.y.jar
- org.eclipse.emf.ecore_2.x.y.jar
- org.eclipse.emf.ecore.resources_2.x.y.jar
- org.eclipse.emf.ecore.xmi_2.x.y.jar
OSGi dependencies
Eclipse 3.2 now uses OSGi to load the plugins, so if you want to benefit from the extension mechanism outside Eclipse, you will need the OSGi plugins. If you use STANDALONE (see below), you won't need them though. Get the BIRT runtime package from the download site to see how plugins are organized outside Eclipse with OSGi support.
How to configure the Chart Engine environment?
Any application using the Chart Engine needs to set either one of those system properties (they should not be used together).
STANDALONE: if you don't need any extension plugin, like the PDF plugin for instance. No value is needed.
BIRT_HOME: if you need chart extensions plugins to be loaded. Set the value to the directory containing the chart and extensions plugins, such as the PDF plugin (inside a plugins subfolder).
To set the property you can use System.setProperty() or set it in your java command line through –D. Example: java –DSTANDALONE MyApplication
Can I use the Chart Builder in my application?
Yes, the Chart Builder can be used outside of a BIRT report, and can be integrated in any Java environment. Look at the ChartWizardLauncher example in the org.eclipse.birt.chart.example plugin.
The Chart Builder is fully extensible and can take advantage of any chart model/engine extensions you write, it can also be integrated in any Data environment. It has no dependency on other BIRT reporting plugins.
How do I show a chart in my Eclipse RCP application?
You could create a plug-in with a ViewPart extension that creates an SWT canvas and notifies a PaintListener implementation where the chart rendering code may be written. Look at the SWT viewer examples in the examples plugin.
Chart Output Formats
What output formats does the chart engine support?
Internally, the charting engine writes to device independent primitives. This means that any output format may be plugged in by writing a device extension. A device refers to an implementation that translates rendering primitives into a specific file format. Release 2.0 provides the following:
Static images (PNG, JPG, BMP) with optional ImageMap support.
PDF document
SWT graphics (GC)
SWING graphics (Graphics2D)
SVG (Scalable Vector Graphics)
In addition, custom extensions may be written to support additional file formats.
The device rendering framework is tailored to suit the needs of rendering a comprehensive set of graphics primitives, elaborate text layout (focused on typical usage of text rendering in charts), and event handling. The framework is optimized for performance.
What is the best static output format?
Each format has some advantages, so here is a quick guide to select the best output format for your needs:
SVG has a very good interactivity support, but requires the browser to support SVG. For IE, it means you need to install a SVG plugin.
PNG has a more limited interactivity support, but supports tooltips and hyperlinks through an HTML ImageMap. It is probably the best choice over JPG and BMP as it supports transparency, 32 bits colors, and compression without loss. It is widely supported across browsers. The rendering quality of text is also slightly better than SVG for small fonts, although this should be corrected in a future release.
What chart output formats are supported within BIRT reports?
The following table shows from which version each chart output format is supported in a BIRT report. For instance SVG is supported in HTML reports since version 2.0. Note that GIF support has been dropped in 2.1, and can be safely replaced by PNG.
|Chart Output Format
|HTML Report
|PDF Report
Can the chart package output SVG or PDF?
SVG output is supported from release 1.0.1. It has been contributed by IBM as a chart extension plugin org.eclipse.birt.chart.svg, which is included in the BIRT distribution.
PDF is supported from release 2.1. It has also been contributed by IBM as an extension, and requires the batik, batik.pdf and xerces plugins.
What are the known limitations of SWT rendering?
There are some known SWT issues with Linux, and some anti-alias problems when drawing arcs, but those are relatively minor issues.
Chart Terminology
What is the difference between "2D with depth" and "3D"?
2D with depth charts are simply 2D charts with a 3D effect. This can make the charts generally look nicer and is normally sufficient for most cases, like Pie Charts or Bar Charts with a single Series. It is theoretically faster to render than 3D charts as there are no 3D computations done.
3D charts are represented by a 3D engine using lighting, real perspective, and allowing rotations. 3D charts are particularly useful for Charts with Axes with multiple series, as it adds a third Z-Axis to plot different series side by side in a third dimension.
What does "Inherit Report Data" do in Chart Builder?
"Inherit Report Data" means that the Chart will use the data available from its container. It only can work if the chart container is a report item such as a table or list item. In this case, depending on the cell where it is located, different rows will be available. A good example is when you place a chart within a group header or footer, the chart will use all the rows for that group, as a data input.
What do "Orthogonal' and "Base" mean?
This is the old 1.0.x terminology to distinguish between the values plotted on the chart, and what they represent. The 2.0 release now uses Categories (Base) and Values (Orthogonal), as it is more representative. The Categories are plotted on the X-Axis in case of Chart with axes, while the Values are represented on the Y-Axis. Note that this terminology of Base and Orthogonal is still present in the API and code.
Chart Rendering
How do I externalize text that needs to retrieve a runtime value from a locale specific message file?
This depends on whether you are using the Chart within a BIRT report or in standalone mode.
BIRT Report Context
Several text components in a report design may contain externalized text references. The value of these components would be specified using the format:
key=<default value>
As an example, the chart title could be defined as:
sales.chart.title=Sales Title
At generation/presentation time, a lookup for the value for key=sales.chart.title would be performed against the locale specific property text resource bundle associated with the report design that incorporates the chart instance. If the resource bundle is not found or the externalized message key cannot be located, the default value will be presented.
Standalone Mode
In that case, you can use the IMessageLookup interface. By implementing it, it will allow the chart engine to retrieve the value of a given key. If the key is not found it will use the default value.
The key and default values are represented by an expression as Key=<default value>. This is set in the chart model for each static text property. At generation time, a lookup is performed for the key with IMessageLookup. If IMessageLookup does not return a value for the key, the default value will automatically be used.
Extensions Developers
If you are writing a chart extension, you need to make sure your code will support internationalization. Externalized text may be retrieved via the RunTimeContext instance which is available at chart generation time via the following API (independently of BIRT/Standalone):
String externalizedMessage(String key)
How do I intercept the chart generation/rendering process and alter the content of the chart using custom business logic?
The chart library provides support for writing custom business logic via JavaScript or Java. A detailed set of low level callback methods are provided to intercept the generation and rendering process and insert custom business logic. Look at the Chart Script specifications for more details: http://www.eclipse.org/birt/wiki/index.php?n=BPS.BPS18
Chart Engine Extensions
How do I modify the EMF Chart Model?
In some cases, you might want to update the model to add new types for instance. Note that if you change the model, you will not be able to update to a later version without merging your changes.
The steps are:
- Get the chart engine plugin from CVS
- Update the xsd file in the xsd directory with your model changes, using a xml or schema editor
- In the src/model folder, right click on the model.genmodel file and choose "Reload…"
- In the popup window check the box
- Click next and finish
- Double click on model.genmodel to open it
- Right click on the root Model node and choose "Generate Model". It will update the chart model source code automatically.
How do I write a new series type that uses a custom data element?
An example of a chart type that uses a custom data element that already exists in the system is a Stock series chart. Each data element (held in a stock data set) holds four numerical values:
a. High
b. Low
c. Open
d. Close
These four values are encapsulated in a StockEntry class available in package org.eclipse.birt.chart.datafeed
A collection or array of StockEntry instances are wrapped in a StockDataSet instance and associated with a Stock series. At runtime, a StockDataSetProcessor (associated with a Stock series via an extension point definition) is capable of performing the following functions with a StockDataSet:
A] Build a stock data set by parsing a comma separated list of StockEntry values
B] Compute the smallest value of (high, low, open, close) of all StockEntry values
C] Compute the largest value of (high, low, open, close) of all StockEntry values
D] Capable of extracting values from resultset columns and creating StockEntry instances that are fed to a StockDataSet
As can be seen above, the following tasks are needed for a new custom dataset associated with a series:
Task-1: Update the appropriate schema files
Extend …/xsd/model.xsd from plug-in project org.eclipse.birt.chart.engine with a section like this (for the new CustomSeries being added):
<!-- Custom Series -->
<xsd:complexType name="CustomSeries">
<xsd:documentation xml:lang="en">
Custom series documentation goes here.
<xsd:extension base="component:Series">
<xsd:element name="Property1" type="Type1">
<xsd:documentation xml:lang="en">
Documentation for Property1 goes here.
<xsd:element name="Property2" type="Type2">
<xsd:documentation xml:lang="en">
Documentation for Property2 goes here.
Note that the newly added custom series subclasses the component: org.eclipse.birt.chart.model.component.Series
This example illustrates two properties associated with every instance of the newly created CustomSeries
This will result in creation of:
Now, extend …/xsd/data.xsd from plug-in project org.eclipse.birt.chart.engine with a section like this (for the new CustomDataSet being added):
- <!-- Custom Data Set -->
- <xsd:complexType name="CustomDataSet">
|<xsd:documentation xml:lang="en">
|Documentation for new dataset type
|<xsd:extension base="DataSet">
Note that the newly added custom data set subclasses the interface: org.eclipse.birt.chart.model.data.DataSet
This will result in creation of:
Task-2: Regenerate and incrementally update the existing Java source
Use EMF's SDK to regenerate the Java source for all XSDs defined under xsd/
Ensure that the Java source is generated into a folder that contains the existing source. This ensures that existing manual changes are preserved in the existing Java source and only the new sections are incrementally appended.
Details on how to generate Java source using XSDs is available at:
Update the generated Java source into the org.eclipse.birt.chart.engine plug-in project
Task-3: Write the data set processor implementation
Create a new plug-in project (use a suitable name e.g. org.eclipse.birt.chart.dataset.extension)
Write a class CustomDataSetProcessor that subclasses org.eclipse.birt.chart.datafeed.DataSetAdapter (implements org.eclipse.birt.chart.datafeed.IDataSetProcessor). Fill in the implementation for each of the method declarations as appropriate.
Define an 'extension' in this newly created plug-in project as follows:
extension point: org.eclipse.birt.chart.engine.datasetprocessors
series: org.eclipse.birt.chart.model.type.impl.CustomSeriesImpl
processor: org.eclipse.birt.chart.datafeed.CustomDataSetProcessorImpl
At this point, the engine API is updated to work with the newly defined CustomSeries and its associated CustomDataSet. However, there is no renderer capable of rendering values contained in the CustomDataSet on the plot.
Let us assume that we would like the CustomDataSet to contain DateRange (start, end) elements to be plotted on a datetime axis scale. A custom series renderer class would have to be written to support this.
Task-4: Writing a custom series renderer
A datetime range data structure is typically associated with a simple Gantt chart indicating start and end date/time values for the graphic element plotted along a datetime value scale. A Gantt graphic element renderer would be responsible for drawing rectangular bars (with possible captions) on a plot that could be rendered normally or transposed, in 2D or 2D with depth requiring the 2D bars to be extruded.
The custom series renderer could be either written in a new plug-in project or by reusing the same plug-in project defined in task 3.
Define the extension class as org.eclipse.birt.chart.render.Gantt which subclasses org.eclipse.birt.chart.render.AxesRenderer (because the Gantt graphic elements will be rendered on a plot that uses the Axis rendering framework).
Add an extension point as follows:
extension point: org.eclipse.birt.chart.engine.modelrenderers
series: org.eclipse.birt.chart.model.type.impl.CustomSeriesImpl
renderer: org.eclipse.birt.chart.render.Gantt
Implement all abstract methods that are subclassed in the Gantt core implementation series rendering class. These are:
void renderSeries(IPrimitiveRenderer ipr, Plot p, ISeriesRenderingHints isrh) throws ChartException
void renderLegendGraphic(IPrimitiveRenderer ipr, Legend lg, Fill fPaletteEntry, Bounds bo) throws ChartException
void compute(Bounds bo, Plot p, ISeriesRenderingHints isrh) throws ChartException
That's all it takes to now create Gantt charts with a custom dataset via the chart API. If user interface property sheets need to be defined for specifying properties (data and attributes) associated with the Gantt chart, this is also possible. Refer to the documentation on how to extend the user interface for custom series types.
How does the chart library integrate with BIRT?
The following table summarizes the integration between the charting system and the BIRT reporting system. This can serve as a reference/example when integrating the charting system with your own application.
The plug-in org.eclipse.birt.chart.reportitem defines several classes that are responsible for integrating charts with BIRT. This plug-in is directly dependent on core chart plug-ins and its dependent libraries and indirectly dependent on extension chart plug-ins.
The following interface adapters were subclassed and methods implemented in this reportitem plug-in:
|No-op Adapter
|Actual class: ChartReportItemUIImpl
Links extended item to the BIRT UI as a report item and provides UI related services. Also links the builder and the figure for design-time representation.
|Actual class: ChartReportItemBuilderImpl
Represents a extended item user interface builder to specify extended item definition.
|Actual class: DesignerRepresentation
Subclassed and overridden the paint(Graphics) method to draw the extended item in the designer layout.
|Actual class: ChartReportItemFactoryImpl
Capable of creating new extended item 'IReportItem' instances. Also provides hooks to retrieve localized messages.
|Actual class: ChartReportItemImpl
Holds instances of the underlying extended item model(s). Also returns available property definitions and hooks to set/get property definitions and serialize/deserialize/clone the model(s).
|Actual class: ChartElementCommandImpl
Attaches the extended item to the undo/redo framework and links to the command stack.
|Actual class: ChartChoiceDefinitionImpl
Used in exposing a property type that may contain a limited set of enumerated values.
|Actual class: ChartPropertyDefinitionImpl
Used in defining any extended property that needs to be exposed in the property view. This includes the property name, type and default value.
|Actual classes: BIRTMessageLookup, BIRTDesignerMessageLookup, ChartBuilderMessageLookup
Externalize strings in chart rendered in BIRT reports, BIRT Designer and Chart Builder
|Actual class: BIRTActionEvaluator
Invocated at generation time to retrieve the report expressions contained in interactive BIRT Hyperlinks.
|Actual class: BIRTActionRenderer
Used at presentation time to convert BIRT dynamic Hyperlinks into standard HTTP Hyperlinks.
|Actual class: ChartReportStyleProcessor
Used to map BIRT styles to Chart formatting properties
|Actual class: ReportDataServiceProvider
Used by chart builder to retrieve report data.
|Actual class: BIRTDataRowEvaluator
Used for both generation/presentation: evaluates a BIRT expression with a row context.
|Actual class: ChartReportItemQueryImpl
This is activated at runtime to invoke the generation process for a chart. Generation involves extended item query preparation, data binding (linking the BIRT defined data set to the chart) and creation of the device-independent display-server specific pre-computed chart structure.
|Actual class:
This is the generation step: the chart expressions are evaluated and registered in the report document.
|Actual class: ChartReportItemPresentationImpl
This step follows the generation step and is responsible for creating the device-specific finished chart output. In the context of BIRT, the extended item output must be provided as an image file format provided as a byte[] or as an InputStream.
Items in BLUE refer to the UI related interfaces.
Items in GREEN refer to the common interfaces between UI and runtime.
Items in PURPLE refer to Chart engine interfaces
Items in RED refer to the runtime related interfaces.
Chart API Programming
How to get started?
Please get the org.eclipse.birt.chart.examples plugin, it contains a large set of examples demonstrating most of the chart engine features.
How is the Chart Model working?
A majority of the chart structure API comprises of Java classes generated out of XML schema using EMF (eclipse modeling framework).
Read more about EMF at:
EMF provides factory classes to create instances of chart components.
e.g. if a new Axis needs to be created, an instance is retrieved using:
Axis ax = ComponentFactory.eINSTANCE.createAxis();
This object 'ax' is of type 'AxisImpl' and implicitly cast into an 'Axis' interface reference.
The 'Axis' interface is located at org.eclipse.birt.chart.model.component
The 'AxisImpl' class is located at org.eclipse.birt.chart.model.component.impl
'ComponentFactory' is located at org.eclipse.birt.chart.model.component.util
Note the color coding used to identify the relationship between the class names, the package names and the method names.
Now, the new 'Axis' instance created using this method has not been initialized. Default initialization of member variables within a chart component instance (and any other chart API object) is performed using an internal protected 'initialize()' method. Since protected methods are unavailable in public API, appropriate public/static 'create()' methods have been added in the chart APIs' respective implementing classes for each component.
Hence, a preferred mechanism to obtain a new instance of any EMF object (in the context of the BIRT charting API) could be done using the convenient 'create' method(s) as shown:
Axis ax = AxisImpl.create([argument1, argument2, …, argumentN]);
In general, for creation of any 'pre-initialized' chart sub-component, use this mechanism:
ChartSubComponent csc = ChartSubComponentImpl.create(…)
To reiterate, default EMF factory classes should not be used to create object instances (unless all appropriate 'setter' methods are called to initialize member variables). Instead, the defined static 'create(…)' methods should be used. At the time of writing this document, not all impl classes contain a 'create(…)' method. In the absence of a 'create(…)' method, the EMF factory methods may be used.
Which Chart class should I start with?
Decide on a chart type to work with (e.g. Bar, Line, Pie, Stock, Scatter or a combination).
If the chart contains axes, use an instance of ChartWithAxes else, select ChartWithoutAxes. Note that BIRT charts provide pre-defined functionality for rendering a plot with axis in 2D, 2D with depth and 3D.
ChartWithoutAxes does not imply that axes may not be rendered on the plot. It presents a more generic implementation of a chart structure that relies on extension implementations to render the entire plot area.
Hence, using the suggested sub-component creation paradigm, we could create a new Bar chart instance as follows:
ChartWithAxes cwa = ChartWithAxesImpl.create();
Note that the classes that represents the entire chart model is maintained at:
This internally creates a chart instance with the following pre-initialized sub-components:
- The various blocks (i.e. Title, Plot, Legend) that comprise the chart
- The title area with a default attributes
- The plot area with default attributes
- Two primary axes (one vertical and one horizontal). Each axis contains:
- Default positioning and font selection of axis labels
- Default caption, positioning and font selection of each axis title
- Default attributes for major and minor ticks
- Intersection of each primary axis against the other axis
- The plot background
- The legend with default block attributes, text attributes and positioning
Note that BIRT charts containing axes use the following terminology/rules:
1. By default, the horizontal axis is called the 'BASE' axis and the vertical axis is called the 'ORTHOGONAL' axis. Note that when a BIRT chart is transposed (swapping of axes), the base axis becomes the vertical axis and the orthogonal axis becomes the horizontal axis. Transposing a chart containing axes is as simple as calling:
2. A category axis treats data as a sequence of labels with no value. Typically, category axes represent text labels with no intrinsic value. Category axes may also be used with other data types formatted as text values. A category axis always aligns the text caption centrally with respect to each axis unit.
3. A value axis treats data as continuously varying numeric or datetime data and markers (or other graphic elements) in the chart are plotted at a point along the axis which varies according to the numerical or datetime data value.
4. The base axis may be specified as a category or a value axis. As previously indicated in 3 (a) above, two axis are pre-created when a new ChartWithAxes instance is created using the convenient chart sub-component creation API.
To obtain a reference to the base axis, the following API should be used:
Axis[] axaBase = cwa.getPrimaryBaseAxes();
By default, BIRT charts only support a single base axis in release 1. Future releases may provide support for additional base axes.
Hence, to obtain an instance of the primary base axis, use:
Axis axPrimaryBase = axaBase[0];
5. The orthogonal axis may be specified as a value axis only. Category axes are not permitted along an orthogonal axis. To obtain a list of orthogonal axes associated with a specified base axis, use the following API:
Axis[] axaOrthogonal = cwa.getOrthogonalAxes(axPrimaryBase, true);
Each 'chart with axes' may contain one or more orthogonal axes. Only of these orthogonal axes may be defined as a primary axis. All other orthogonal axes are called 'overlay axes'.
The second boolean argument in the getOrthogonalAxes(…) API indicates if the primary orthogonal axis should included or excluded in the returned array.
6. Each axis could have one or more series definitions associated with them. A series definition refers to a constant value that generates a single runtime series or an expression that defines a grouping criterion for multiple runtime series creation.
Hence, a series definition could be defined as:
a. SomeConstantValue resulting in 1 runtime series containing a dataset (e.g. numerical 2, 3, 7, 9, 6)
b. SomeExpression(…) e.g. Census.CITY resulting in 3 runtime series:
i. For New York, values (2, 9, 4, 5, 7)
ii. For Boston, values (4, 6, 9, 8, 6)
iii. For San Francisco, values (8, 1, 6, 2, 4)
Note that all runtime series must contain a data set with a fixed size. If series 6(b)(ii) contained 6 values versus 5 values in 6(b)(i), a validation error occurs at chart generation time indicating that data is out of sync.
Also note that all series associated with a base axis and all series associated with an orthogonal axis must contain the same count of elements in the respective datasets.
7. Each runtime series is provided by a chart type series. Hence, a chart with axes containing a BarSeries and LineSeries would result in a combination Bar/Line chart. Each new series type containing datasets would have to be manually added using API into their respective series definition class.
Typically, all runtime series associated with a base axis are specified using the type independent series class org.eclipse.birt.chart.model.component.Series
All runtime series associated with an orthogonal axis are specified using type specific series classes such as:
… etc
8. For most chart types, a base axis contains a single series definition resulting in a single runtime series. E.g. The series definition would refer to a constant 'All Cities' and the runtime series' dataset would contain { New York, Boston, San Francisco }.
9. Each orthogonal axis could contain one or more series definitions resulting in any number of runtime series. However, as previously noted, all runtime series must contain an identical dataset count for correct chart generation and rendering.
10. Auto axis scaling is turned on by default. If scaling is to be specified manually, then the appropriate setMaximum, setMinimum, setStep API need to be called individually depending on which elements of the scale are to be automated. Calling manual override axis scaling API on a text axis has no effect.
11. A chart containing axes must contain one base axis and any number of orthogonal axes. To get or update attributes in a chart, the following convention is used:
cwa.getTitle().getLabel().getCaption().setValue("The chart title");
12. Intersection between primary base and orthogonal axis may be specified as one of:
a. A fixed value (axis data type specific) e.g. at 0 or at 6/15/2003
b. At the plot MAXIMUM end (above for a vertical axis and to the right for a horizontal axis)
c. At the plot MINIMUM end (below for a vertical axis and to the left for a horizontal axis)
13. Base axis labels and title may be positioned below or above the axis. When transposed, the axis labels and title are positioned to the left or to the right of the axis respectively. Similarly, orthogonal axes labels' and titles may be positioned to the left or to the right of the corresponding axes. When transposed, the positions are switched to below or above respectively.
14. All positions and orientations must be specified as though the chart is not transposed. Attempting to set the label and title position of an X axis to the left or right will result in a chart generation error.
15. The plot content general attributes are defined by a client area structure:
ClientArea ca = cwa.getPlot().getClientArea();
How is the chart library structured?
The chart library comprises of 8 projects (formatted as eclipse plug-ins but not dependent on the eclipse framework) of which 4 are core library components and 4 are true extensions (indicated with a *).
1. BIRT core (org.eclipse.birt.core)
2. BIRT core UI (org.eclipse.birt.core.ui)
3. The engine (org.eclipse.birt.chart.engine)
4. The user interface (org.eclipse.birt.chart.ui)
5. *Engine extensions (org.eclipse.birt.chart.engine.extension)
6. *Device extensions (org.eclipse.birt.chart.device.extension and org.eclipse.birt.chart.device.svg).
7. *User interface extensions (org.eclipse.birt.chart.ui.extension)
8. *The BIRT Report item adapter (aids in integrating the chart library with the BIRT reporting suite) (org.eclipse.birt.chart.reportitem)
What is a device renderer?
A device renderer is implemented as an extension class. It is responsible for generating output to an output file format or device that supports rendering of primitives and user interaction. Default device renderers (implemented as extensions) provided with the chart plug-ins are:
a. A SWING device renderer (capable of rendering charts on a SWING Graphics2D context)
b. A SWT device renderer (capable of rendering charts on an SWT GC context)
c. Image renders for the following image file types:
i) 32-bit PNGs
ii) 24-bit JPEGs
iii) 24-bit BMPs
d. An SVG device renderer (contribution from IBM)
e. A PDF device renderer (contribution from IBM)
What is a display server?
A display server provides generic services to a device renderer. These services include text metric retrieval, image loading, detection of screen resolution, etc. The default display servers provided with the chart plug-ins are:
e. A SWING display server
f. An SWT display server
The display server is used in internally computing the chart content offscreen before the rendering process begins. As an example, the display server provides font metrics that are critical in determining how an axis may be auto scaled using a best-fit algorithm.
What is a series renderer?
A series renderer corresponds to a subclass of either:
a. org.eclipse.birt.chart.render.BaseRenderer
b. org.eclipse.birt.chart.render.AxesRenderer
… depending on the chart type.
Examples of series renderers are:
org.eclipse.birt.chart.render.Bar (subclasses AxesRenderer)
org.eclipse.birt.chart.render.Pie (subclasses BaseRenderer)
Note that AxesRenderer provides a detailed plot rendering framework capable of rendering, scaling, transposing and auto positioning of plot components that contain axes. Offscreen computations (for a chart with axes) are performed using an internal class called PlotWith2DAxes.
What are blocks?
Blocks are rectangular sub-regions within the chart bounds. They serve as a container for various sub-components of a chart. There are several different block types:
Outermost (one per chart)
Title (one per chart)
Label (containing annoted text)
Legend (one per chart)
Plot (one per chart)
By default, a new chart that is created uses the block structure with the following hierarchy:
- Plot
- Legend
The title block uses a 'preferred size' and is anchored north.
The legend block uses a 'preferred size' and is anchored west (or 'right' by default).
The legend block may be repositioned using a combination of the position attribute and the anchor attribute.
Note that the Legend could be 'positioned' INSIDE the bounds of the Plot. When that is done, the generation manager updates the block structure and moves the Legend block within the Plot block. The anchor value determines WHERE in the plot area the legend is placed. If the anchor value is unspecified, the legend is centered within the plot (not well placed for most chart types).
You could obtain references to the blocks as a flattened enumerated list using the following API:
Chart cm = …;
Block blOutermost = cm.getBlock();
Enumeration eBlocks = blOutermost.children();
Or you could 'search' for blocks using convenience API such as:
Chart cm = …;
Plot pl = cm.getPlot();
Legend lg = cm.getLegend();
Title ti = cm.getTitle();
Properties such as a 'background fill', 'border line attributes', 'insets', etc may be set on blocks. In addition, a plot and a legend contain a client area which presents a context on which block specific items are rendered. The client area may be obtained using:
ClientArea ca = pl.getClientArea();
Again, properties such as a 'background fill', 'border line attributes', 'insets' may be specified on the client area.
How are defaults assigned to the model?
Defaults are hardwired into the model in the various public 'create' and protected 'initialize' convenience methods that are provided. This will be changed to read in values from a DefaultsManager that will provide defaults for:
A] Axis label attributes + title attributes
B] Axis attributes
C] Grid attributes (major + minor)
D] Data point label attributes
E] Block attributes – for each block type
How do I create an equivalent of a 'Hello Chart' first chart example with a plot containing axes?
The following code snippet illustrates how this may be done:
ChartWithAxes cwaEmpty = ChartWithAxesImpl.create();
cwaEmpty.getTitle().getLabel().getCaption().setValue("Hello Chart");
How do I set the dimension (i.e. 2D, 2D with depth, 3D) of the chart?
Specify the dimension using the ChartDimension enumerated structure as shown below:
Chart cm = …;
Typically, EMF enumerated constants are defined as string values (with a convention that indicates a suffix of _LITERAL) that must be directly used as shown above.
How does transposing of the chart model work?
You could transpose the entire rendered chart (swapping the orientation of the axes) using a simple API call as shown below:
ChartWithAxes cwa = …;
Obviously, transposing of a chart is associated with transposing the axes in a plot associated with a 'chart with axes' model. The following two images illustrate the same chart presented in a standard orientation and transposed. Note that when the chart is transposed, only the plot area (along with axes and axes' titles) is transposed.
Note: The legend and the chart title are left unchanged in a transposed chart.
How do I set a solid color for various attributes (e.g. foreground, background, line edge)?
Any solid color is defined in a chart model using a ColorDefinition instance:
ColorDefinition cd = ColorDefinitionImpl.create(r[0-255], g[0-255], b[0-255], a[0-255]);
ColorDefinition cd = ColorDefinitionImpl.create(r[0-255], g[0-255], b[0-255]);
Or using one of the existing color definitions defined as a constant method call:
ColorDefinition cd = ColorDefinitionImpl.RED();
ColorDefinition cd = ColorDefinitionImpl.BLUE();
… etc
Note that the EMF framework mandates creation of new instances for every usage instance. If a single RED color definition instance is associated with object-1 and then re-associated with object-2, the original association is broken.
You would set colors on various components as follows:
cwa.getTitle().getCaption().setColor(ColorDefinitionImpl.create(232, 55, 196));
How do I set a gradient as the background fill of any region?
Any object (rectangle, polygon, arc, etc) that supports a call to 'setBackground', accepts an abstract org.eclipse.birt.chart.model.attribute.Fill instance. This fill attribute may be defined as a Gradient as shown:
Gradient gr = GradientImpl.create(
ColorDefinitionImpl.CYAN(), -35, false
The value -35 suggests the angle of the gradient change with respect to a horizontal base.
How do I set a tiled image as the background of the plot area?
Any object (rectangle, polygon, arc, etc) that supports a call to 'setBackground', accepts an abstract org.eclipse.birt.chart.model.attribute.Fill instance. This fill attribute may be defined as a tiled image as shown:
Image imgTiled = ImageImpl.create("http://www.eclipse.org/feather.gif")
How do I set a line or border edge style and thickness?
The class LineAttributes defines a color, style and thickness. This may be created using:
LineAttributes lia = LineAttributesImpl.create(
- ColorDefinition,
- LineStyle,
- double dThickness
How do I set the edge color to represent a darker shade of a solid color?
Set the line edge color associated with a fillable area to null.
LineAttributes lia = cm.getPlot().getOutline();
Note that if the fill associated with this 'null' outline is not a solid color, the darker edged outline will be suppressed. In the attached image, the edge color for each of the graphic element bars are defined as nulls. As a result, they are evaluated on-the-fly as a darker version of the bar fill color (if defined as a solid color).
How do I set text font face, size, styles, rotation, etc (for axis labels, title, data point values, etc)?
Obtain an instance of the label representing the text that would be rendered. Typically, this is available using a getLabel() or getTitle() API.
Label la = …;
How do I apply insets within the text bounds of any label?
Insets are associated with any label.
Label la = …;
la.getCaption().getInsets().set(top, left, bottom, right);
Note that the value of these insets 'top', etc must be specified in POINTs. The adjacent image illustrates sample insets defined in points for the series label (caption = 2000) as (8, 10, 0, 5) with results as shown.
How do I draw a border with a custom line style around a label?
Borders are associated with any label.
Label la = …;
LineAttributes lia = la.getCaption().getOutline();
Border line attributes are associated with all four sides of a label. They cannot be individually defined for each side. The adjacent image illustrates a rotated sample label with a solid black border drawn around it.
How do I add a shadow behind a rendered label?
Shadows are associated with any label.
Label la = …;
Note that shadows should be associated with a label containing a background fill otherwise the results may be undesirable. The adjacent image illustrates rotated series labels associated with a pie chart that contain a grey shadow color.
Do I need to manually add an axis? How do I add an overlay axis?=== When you create a new ChartWithAxes instance using the preferred static 'create(…)' method, a base axis and an orthogonal axis are already created. If additional orthogonal overlay axes are required, they may be created using:
The primary base and orthogonal axes may be retrieved using the following APIs:
ChartWithAxes cwa = …
Axis[] cwa.getPrimaryBaseAxes()
Axis[] cwa.getOrthogonalAxes(axaPrimaryBase, true);
A new overlay axis may be added to the model using the following APIs:
Axis yAxisOverlay1 = AxisImpl.create();
… // SETUP ATTRIBUTES AND PROPERTIES FOR 'yAxisOverlay1'
By default, the default base axis data type is set as TEXT.
The default orthogonal axis data type is set as NUMERICAL LINEAR.
The axis data type may be altered using the following API:
This sets the X base axis as a numerical linear category axis.
How does 'auto axis scaling' work?
The scale of the axis is computed automatically if various scale components (i.e. min, max, step, unit) are not explicitly specified. Scaling of the axis occurs on-the-fly and is dependent on the following factors:
A] The range (specifically min and max) of values in all series datasets associated with the given axis.
B] The font (and angle of text rotation) that defines the axis label
C] The format specifier associated with the axis label value that affects the presentation value (if not text)
D] The actual presentation value of each axis label
E] The length of the axis (longer axis lines may accommodate more axis labels)
As an example, assuming that a series containing dataset (36, -4, 99, 26, 5.32, -104) are used. The min value = -105 and the max value = 99. This would result in a default scale where:
The min = -110
The max = 100
The step = 10
The absolute difference between min and max = 210
For the given step, this would result in 210 / 10 = 21 axis labels
Case I
For the given axis length and axis label font/rotation, if all 21 axis labels fit cleanly without any rendering overlap, then…
The scale is zoomed IN to try and accommodate more axis labels. For a numerically linear axis, zooming into the step of 10 would change the step to 5 and the min and max values would be recalculated. The result:
The min = -105
The max = 100
The step = 5
The absolute difference between min and max = 205
For the given step, this would result in 205 / 5 = 41 axis labels
If all 41 labels fit cleanly without any overlap, (i) is repeated for a new zoomed step value.
Steps are zoomed IN for a linear numeric scale as 10, 5, 1, 0.5, 0.1, 0.05, 0.01, etc
As soon as a step is determined that causes the labels to not fit anymore, the last fitting step is used as the most optimal auto computed scale.
Case II
For the given axis length and axis label font/rotation, if all 21 axis labels do not fit cleanly due to a rendering overlap, then…
The scale is zoomed OUT to try and accommodate fewer axis labels. For a numerically linear axis, zooming out a step of 10 would change the step to 50 and the min and max values would be recalculated. The result:
The min = -150
The max = 100
The step = 50
The absolute difference between min and max = 250
For the new zoomed in step, this would result in 250 / 50 = 5 axis labels
If all 5 axis labels do not fit cleanly due to an overlap, (ii) is repeated for a new zoomed out step value.
Steps are zoomed OUT for a linear numeric scale as 10, 50, 100, 500, 1000, etc
As soon as a step is determined that causes the labels to fit, it is used as the most optimal auto computed scale.
The same scaling algorithm (with different zoomed in and zoomed out step values) is used for:
A] Logarithmic scales
B] DateTime scales (uses the scale unit in addition to the step)
Note: Category axes and text value axes do not use any scaling algorithm.
How are axes and series defined in a ChartWithAxes?
A chart with axes contains a set of axes that may be retrieved using:
ChartWithAxes cwa = …;
Axis[] axaBase = cwa.getPrimaryBaseAxes( );
In the initial release, charts with axes may only contain a single primary base axis. Hence, axaBase contains 1 axis that may be de-referenced using axaBase[0].
Axis axPrimaryBase = axaBase[0];
The primary orthogonal axis may be retrieved using:
Axis axPrimaryOrthogonal = cwa.getPrimaryOrthogonalAxis(axPrimaryBase);
An axis is defined as primary if it represents the 'main' axis for a given orientation (e.g. horizontal) and is capable of intersecting the primary axis in the orthogonal orientation (vertical) at any given value. All other axes are defined as non-primary or overlay axes that may be situated at the min or max location of the plot. If an overlay axis is vertical and located at the min of the plot, it is positioned to the left of the plot (and max corresponds to the right). If an overlay axis is horizontal and located at the min of the plot, it is positioned to the bottom of the plot (and max corresponds to above the plot).
Each axis defines a collection of series definitions.
Each series definition is defined using a design-time series type (e.g. bar series) and a query expression that would return a distinct set of runtime values that result in creation of one runtime series (cloned from the design-time bar series) per value.
A second series definition could define a design-time series type (e.g. line series) and a different query expression that would again return a distinct set of runtime values that result in creation of one runtime series (cloned from the design-time line series) per value.
For a chart with axes, series definitions are associated with the base axis and the orthogonal axes.
Note that a base axis typically holds one series definition with the design-time series type specified as a generic non-typed Series instance. Data associated with a base axis may be defined either using a category scale or a value scale.
How do I define the axis origin or the intersecting point between two perpendicular axes?
In each orientation (horizontal or vertical), only one primary axis may be defined. By default, when a new 'chart with axes' model is created, a primary axis is already created. If additional overlay orthogonal axes are to be added, new Axis objects may be created and added to the base axis.
Only a primary axis may intersect another primary perpendicular axis at a specific value offset. As an example, the primary base X axis could be defined using a text scale while the primary orthogonal Y axis could be defined using a numeric scale. The X axis could be set to intersect the Y axis at value '0' on its numeric scale. In addition, the X axis could be set to intersect the Y axis at the 'min' end of the plot or at the 'max' end of the plot. The 'min' end is defined as either the 'left' edge of the plot or the 'bottom' edge of the plot depending on whether the plot is transposed or not respectively. Similarly, the max end is defined as the 'right' edge or the 'top' edge depending on whether the plot is transposed or not.
Note that non primary axes may only intersect a perpendicular primary axis at the 'min' or 'max' end. However, a primary axis may intersect a perpendicular primary axis at the 'min' end, the 'max' end or at any arbitrary value defined on the scale of the perpendicular primary axis.
The intersection between two axes is defined using the following code snippet:
Figure 1: X axis intersects Y axis at value = 0
Figure 2: X axis intersects Y axis at vertical MIN
Figure 3: X axis intersects Y axis at vertical MAX
How are series defined in a chart without axes?
When a new ChartWithoutAxes instance is created using the preferred static 'create(…)' method, there are no series definitions created. Base level series definitions are associated with the model directly. These may be retrieved using:
ChartWithoutAxes cwoa = …;
EList elBase = cwoa.getSeriesDefinitions();
For each base series definition, there may be one or more orthogonal series definitions defined. Note that typically only one base series definition may be associated with a chart without axes.
We retrieve the list of orthogonal series definitions as follows:
SeriesDefinition sdBase = (SeriesDefinition) elBase.get(0);
EList elOrthogonal = sdBase.getSeriesDefinitions();
Each orthogonal series definition may be retrieved by walking through the contents of the EList. Note that an EList is an EMF List implementation.
How do I create a combination chart?
Combination charts may be only created using a ChartWithAxes instance. A combination chart is built by superimposing multiple series on a single plot. The multiple series may be plotted against either a single primary orthogonal axis or multiple overlay orthogonal axes. Hence, if a bar series and a line series are added to a ChartWithAxes instance, a combination chart would be created. Note that the two series may be associated with either a single series definition or multiple series definitions. Each series definition is associated with an orthogonal axis as previously described.
ChartWithAxes cwa = …; // BUILD THE CHART STRUCTURE
Axis axBase = cwa.getPrimaryBaseAxes()[0];
Axis[] axaOrthogonal = cwa.getOrthogonalAxes(axBase, true);
SeriesDefinition sdX = SeriesDefinitionImpl.create();
final int FIRST = 0;
'SeriesDefinition sdY1 '= SeriesDefinitionImpl.create();
'SeriesDefinition sdY2 '= SeriesDefinitionImpl.create();
'// ADD A BAR SERIES 'TO SERIES DEFINITION 'sdY1'
BarSeries bs = (BarSeries) BarSeriesImpl.create();
'// ADD A LINE SERIES 'TO SERIES DEFINITION 'sdY2'
LineSeries ls = (LineSeries) LineSeriesImpl.create();
The bar series and the line series will both be superimposed over the plot area in the order in which they were created.
How do I show data point labels next to my graphic elements in each chart type? How do I format these data point labels? How do I position these labels for the various supported chart types?
Data point labels are already created but set as invisible for each newly created series type (via the preferred static 'create(…)' methods). This is because presentation of data point labels may clutter the plot area.
The adjacent image illustrates data points shown against a yellow background for each value plotted in a scatter chart. These data point labels are positioned above the series markers.
If a data point label needs to be made visible, this may be done using:
BarSeries bs = …;
To specify the structure of the data points, do the following:
DataPoint dp = bs.getDataPoint( ); // already created with the orthogonal value and a comma separator
dp.clear( ); // removes the already created orthogonal value entry
null // no format specified if text values are used
DataPointComponentType.ORTHOGONAL_VALUE_LITERAL, JavaNumberFormatSpecifierImpl.create("0.00")
This would setup the data point format as BASE, ORTHOGONAL. Note that the SERIES value may be also presented in the data point in any order.
The permissible positions (set using bs.setLabelPosition(Position.XYZ) ) for the data point values w.r.t. the graphic element rendered for each series type is as listed:
|Bar Series
|Outside (beyond the outer edge of the bar), Inside (middle of the bar) … irrespective of bar orientation
|Line Series
|Above or Below (transposed into Right or Left respectively)
|Pie Series
|Outside (with leader lines), Inside (middle of each slice)
|Stock Series
|Left or Right (transposed into Above or Below respectively)
|Scatter Series
|Left, Right, Above or Below (transposed into Above, Below, Left or Right respectively)
How do I define chart interaction via API for the generated output?
Chart interaction is implemented by defining triggers. A single trigger is represented by a condition-action pair. Triggers may be associated with series types or blocks.
The various conditions available are:
|Occurs when the pointing device button is clicked over an element
|Occurs when the pointing device button is double clicked over an element.
|Occurs when the pointing device button is pressed over an element.
|Occurs when the pointing device button is released over an element.
|Occurs when the pointing device is moved onto an element.
|Occurs when the pointing device is moved while it is over an element.
|Occurs when the pointing device is moved away from an element.
|Occurs when an element receives focus either by the pointing device or by tabbing navigation
|Occurs when an element loses focus either by the pointing device or by tabbing navigation
|Occurs when a key is pressed down on an element
|Occurs when a key is pressed on an element
|Occurs when a key is up on an element
|Occurs when the chart is loaded in the viewer
The available actions are:
Triggers may be associated with a series type as follows:
BarSeries bs = (BarSeries) BarSeriesImpl.create( );
bs.getTriggers( ).add(
TriggerImpl.create( TriggerCondition.ONCLICK_LITERAL, ActionImpl.create( ActionType.HIGHLIGHT_LITERAL, SeriesValueImpl.create(String.valueOf( bs.getSeriesIdentifier( ) ) ) ) ) );
More details are available in the Chart Interactivity Specifications document
How do I create a chart and perform a minimal refresh to show updated scrolling data values using animation?
A chart may be created by subclassing ChartWithAxes or ChartWithoutAxes as the outermost structure using the preferred creation method. Once the data structures are setup (including dataset binding), the chart needs to be built into a device-independent output format termed as the 'GeneratedChartState'. The generated chart state includes rendering hints to optimize rendering speed when eventually rendered out to device-specific output formats. Hence, to summarize, the various stages are:
A] Create the chart model
B] Bind the dataset(s)
C] Build the chart
D] Render the chart
Now, if the content of the datasets are altered, this may be reflected in the output by:
C] Minimal re-building (using refresh) OR a full re-build (using build) and
D] Re-rendering the chart
… or simply…
D] Re-rendering the chart
The choice for picking one option over the other depends on the values contained in the updated dataset(s).
If the min/max of all numeric values (for a value series dataset) on a value axis are changed and the axis scaling is setup as auto, then a minimal chart re-build is necessary which updates the axis with the new min/max values as determined. If the min/max of all numeric values is unchanged or guaranteed to be contained within the axis value limits, then a basic re-rendering (or refresh) is only needed. If the chart structure is changed, a full rebuild is needed.
If the rendered dimensions of the chart are to be updated, the chart needs to be rebuilt to take into account the new bounds in which the chart content needs to be rendered. Hence, if a chart is built for given bounds, it will be rendered for the same bounds. The bounds used in generation are preserved in the GeneratedChartState structure.
The build, refresh and render API are defined in Generator as:
GeneratedChartState build(IDisplayServer xs, Chart cmDesignTime, Scriptable scParent, Bounds bo, RunTimeContext rtc) throws ChartException
void refresh(GeneratedChartState gcs) throws ChartException
void render(IDeviceRenderer idr, GeneratedChartState gcs) throws ChartException
Refer to the chart demo that illustrates how an animated chart may be computed with minimal overhead.
How do I set an axis scale as logarithmic?
The logarithmic scale is set on an axis by setting the axis data type. Typically, this is set for the orthogonal Y axis as follows:
Axis axYNumerical = …;
Logarithmic scales, like linear scales, use numeric values to identify the scale. The difference between a logarithmic scale and a linear scale is that a logarithmic scale is based on a geometric progression while a linear scale is based on an arithmetic progression.
How do I set a series as stacked? Are all series types stackable?
Typically, a pair of series is set as stacked. A series may be stacked as follows:
BarSeries bse1 = …;
BarSeries bse2 = …;
This would result in a stack group containing BSE1 and BSE2. Stack grouping is dynamically performed based on the series definitions associated with the series.
Hence, if bar series 1 (BSE1) and bar series 2 (BSE2) were dynamically generated using series definition 1 (SD1) while line series 1 (LSE1) and line series 2 (LSE2) were associated with series definition 2 (SD2), two transient stack groups would be setup at the time of plot computations:
SG1 – stack group 1 – containing BSE1 and BSE2
SG2 – stack group 2 – containing LSE1 and LSE2
These two stack groups could be plotted simultaneously against a single orthogonal axis or against two different orthogonal axes resulting in fairly complex and useful chart illustrations.
Not all series types are stackable. The base series class defines stackable as false. However, this value may be overridden by series subclasses by overriding the 'boolean canBeStacked()' method and returning a 'true'. The value returned by 'canBeStacked' for a Bar and a Line series is 'true'.
How do I set an axis scale as a percent scale?
A numeric (either linear or logarithmic) axis' scale may be set as a percent scale using the following code snippet:
Axis axOrthogonalNumerical = …;
This would result in a chart as shown below:
Can I combine stacked, logarithmic and/or percent properties on a single scale?
Yes. The following combinations of numeric scales are possible:
[Linear | Logarithmic] [| Percent] [| Stacked]
Note however that a logarithmic scale cannot plot negative values resulting in a runtime error. Also, the percent modifier is only available for numeric type scales and will result in errors if applied to non-numeric axes.
The axis type can be set using the following APIs: Axis xAxis = …;
Axis yAxis = …;
Stacking is applied on the series … not on an axis.
Hence, the API to stack a series (as previously discussed) is:
BarSeries bse1 = …;
BarSeries bse2 = …;
BarSeries bse3 = …;
This example above results in an interesting chart type wherein a single X-axis category unit is split into two subunits (assuming that all 3 bar series are attached to a single Y-axis):
Subunit-1 contains bse1 and bse2 as stacked
Subunit-2 contains bse3 unstacked as a solitary series
See the attached sample that illustrates how various combinations of stacked and un-stacked series may be used in a single plot:
How do I add marker lines and marker ranges to the plot?
A marker line is associated with an axis at a specific value. If the axis represents a category axis, the marker line value represents the category unit index. A decimal marker line value may be used to place the marker line in between category units. Marker lines are rendered in front of the series graphic elements.
Here's an example of a marker line associated with a category axis:
MarkerLine ml = MarkerLineImpl.create(xAxis, NumberDataElementImpl.create(1.5)); // between unit 1 and 2
Here's an example of a marker line associated with a value axis:
MarkerLine ml = MarkerLineImpl.create(yAxis, NumberDataElementImpl.create(23.25)); // at an absolute value
The label anchor identifies the position of the label associated with the marker line. A format specifier may be used to define the presentation format for the marker line value being displayed.
In addition, the marker line's attributes (color, style, thickness) are configurable.
Marker ranges are similar to marker lines. These are presented as rectangular regions as a backdrop behind all series graphic elements. Here's an example of a marker range being associated with a value axis:
MarkerRange mr = MarkerRangeImpl.create(
The two values 23.5 and 61.35 indicate the start and end values mapped on the value axis – yAxisPrimary. As with marker lines, a label that presents the 'range value' is positioned using the anchor property inside the rectangle shaped marker range bounds.
The adjacent image illustrates a bar chart with a sample red dashed marker line and an orange marker range.


text:
Fact Sheet: Women Deserve a Strong Consumer Bureau to Protect them from Unfair Financial Practices
August 29, 2011
Too many women have paid the price for an outdated regulatory system that has left our financial system vulnerable to collapse and our families without adequate protections. In the summer of 2010, Congress passed and President Obama signed the Wall Street Reform and Consumer Protection Act to rein in excessive risk on Wall Street and preserve economic opportunity on Main Street. This comprehensive financial reform, which put in place the strongest consumer financial protections in history, included the creation of a new, dedicated Consumer Financial Protection Bureau (CFPB).
David Butler

subset: commoncrawl


text:
Refine your search
Used Armstrong Cars in Wareham
Let us help you locate your ideal Used Armstrong car with our email alerts function. Click the button above and we will send you daily report of any Armstrong cars that are newly advertised and that meet your specific Used Car search criteria.
CarSite can help you find the cheapest Armstrong Cars online. We have the most Used Armstrong Cars for Sale in Wareham, listed online. When it comes to looking for a Used Armstrong Car in Wareham CarSite is the ideal search partner for you.
Find Second Hand Armstrong Cars In The Wareham Area
Used Armstrong Cars Wareham
10 Photos
29,000 miles
2 Door
M&M Automotive Used Car Dealer
1947 Armstrong HURRICANE Coupe
Find Used Armstrong Cars listings in Wareham. CarSite has over 1 Used Armstrong Cars Listed for Sale online and over 512,855 Used Cars listed, come find a great Armstrong Car deal in Wareham!
Browse Used Cars by section: Used Cars By Make Model | Car Supermarkets | Used Car Dealers


text:
The Phillies do not have to put together their final, 25-man roster for Opening Day for another week. But a clause in veteran infielder Yuniesky Betancourt's contract forced them into action on Sunday.
As a result, the makeup of the bench became somewhat clearer.
Following Sunday's game, general manager Ruben Amaro Jr. announced the team had released Betancourt, thus opening the likely door for Freddy Galvis on the roster.
The 31-year-old Betancourt, a veteran of eight big league seasons, signed a minor league contract with the Phillies this winter. But the deal included an opt-out date; the team had to notify Betancourt by March 24 if he had made the 25-man roster, and if he did not, he was free to pursue a job elsewhere.
Following Sunday's game, Betancourt, who hit .447 this spring, became a free agent.
"It was a very difficult decision," Amaro said. "He played great for us. We had some other guys feel great, and we're comfortable with where we are as far as those players are concerned."
Said Betancourt: "It's a numbers game, I understand it, and I appreciate the fact that the organization gave me a shot to prove myself at the major league level. I think I did a good enough job to get on with another club, but I'd like to reinforce the fact that I'm appreciative of the Phillies for giving me a chance."
Amaro said the Phillies had trade discussions involving Betancourt on Sunday, but couldn't consumate a deal.
By releasing Betancourt, Freddy Galvis is all but guaranteed a spot on the major league roster.
The only other players in camp who have played shortstop in their careers, other than starter Jimmy Rollins, are Kevin Frandsen and Pete Orr. Neither has been used at shortstop this spring.
"Freddy is pretty much a plus defender wherever you put him," Amaro said. "Charlie put him in right field and he makes a perfect throw to home. He's not going to be playing a whole lot of right field or left field, probably, but he just has great instincts for the game and we have a great deal of respect for what he can bring to the table for us."
As for Frandsen over Betancourt?
"Betancourt has been a regular player; most of his career, he hans't pinch hit at all," manager Charlie Manuel said. "Frandsen, when he got to play, he had a good season at Triple-A, but at the same time the 200 at-bats he got in the big leagues, he put together some real good at-bats and showed he can hit. What he did, that's plays a part. And from Day One in spring training he's kept his bat going. We need hitters to come off the bench and hit and part-time play."
As the roster stands now, the only non-catchers in camp competing for the final bench job are Pete Orr and Rule 5 pick Ender Inciarte.


text:
Bird B Gone has a wide variety of effective and humane products to deter pest birds. A physical bird deterrent will make an area inaccessible to birds, keeping them from landing, roosting or nesting, and forcing them to move on to a new location. Ideal for use on flat surfaces in concentrated areas like ledges, parapet walls, windowsills, roof edges and more.
|Bird Wire
|Bird Spiders
|Bird Slope
|Laser Bird Deterrents
|Solar Bird Repeller
|Vinyl Strip Doors
|Bird Repeller 360°


text:
DIGHTON — Officially, there is only one contested race in Saturday's town election, but the annual affair should draw plenty of interest.
An unofficial race has materialized, as selectmen Chairman Dean Cronin will face a challenge from former Selectwoman Nancy Goulart, who has confirmed that she is running a sticker campaign.
The polls for the election will be held at the Dighton Elementary School from 8 a.m. to 6 p.m.
In the official race, Assistant Town Clerk Pamela J. Waller will vie for the open Board of Assessors seat against Jillian B. Courcy, a human resources coordinator for Pepsi Bottling Group.
Town voters will also be asked to weigh in on ballot questions, that will allow the town to pursue a grant from the Massachusetts School Building Authority. The state will pay for 52 percent of the costs through an accelerated roof repair program.
Last month, voters at Dighton Town Meeting approved the items appearing on tomorrow's election ballot. The items include $6.7 million to help repair and replace the Dighton-Rehoboth Regional High School roof; $1.5 million for the middle school roof; and $2.5 million for the elementary school roof.
Rehoboth voters last month also approved sending the high school roof item to the ballot, as well as its middle school — Beckwith Middle School.
Despite winning Town Meeting approval last month, election voters in Rehoboth rejected the high school roof project by only two votes on Monday. The middle school project, however, was approved by approximately 150 votes, however.
Regional School Committee Chairman Raymond Medeiros confirmed this week that the committee is filing for a recount, so Dighton voters should still weigh in on the high school roof project.
"There will be a request for a recount since there was such a small difference between those in favor and those against the high school bond," Medeiros told the Gazette this week.
In the selectmen's race, Goulart said a group of residents asked if she would consider having her name written in as a candidate and if she would consider passing out stickers outside of the elementary school during the election.
Goulart, a current Finance Committee member, agreed to do so recently.
Originally, she said, she had no interest in running and did not even pull nomination papers.
She said recent events at Town Hall sparked her interest.
"This action was precipitated by the conduct of two selectmen, publicly witnessed, and events recently at Town Hall that were considered unprofessional, offensive and unacceptable," Goulart said.
Goulart would not elaborate any further.
Town officials, however, have confirmed that there was an altercation at Town Hall in March that involved a town employee. The police were called, as a result. Citing the fact that it involved personnel, selectmen would not comment any further.
Goulart served on the select board from 2007-10 before losing a re-election bid. She ran again unsuccessfully.
Goulart also served on the finance committee from 2002-07 and from 2010 to the present. She has a strong financial background, having worked 30 years in education finance for the University of Massachusetts.
She also has served on the Brook Street Bridge land-taking project and played a pivotal role in assembling the Dighton Tricentennial Book.
If re-elected, Cronin will be serving his second term on the board.
He acknowledged this week that Goulart's sticker campaign will still pose a challenge for him in his bid for a second term.
"It's going to be an election — that's for sure," Cronin said.
Cronin has now served as the board chairman for more than a year. Prior to being elected in 2011, Cronin had never served on a town board or committee. He is a retired physical education teacher and coach, who last taught at Dighton-Rehoboth Regional High School.
During his tenure, Cronin said he feels the board has made government more "translucent." He said the board has improved communication and now have budget planning under better control.
He said there is better union negotiations and mutual respect among selectmen and various departments.
"The board as whole — we treat them as a part of town government," Cronin said. "They do their roles and do it well. "
He said there are many initiatives he wants to see completed if re-elected. He wants to help oversee the completion of the police station project, the town master plan and a completely overhauled budget process.
In the assessor's race, Waller said she wants to run to extend her knowledge of how properties are assessed and how taxation is conducted. She said her experience in town government in similar department will be an "asset to the assessor's office."
She has also worked in the treasurer and tax collector's office.
"I will be dedicated to serving the people in town," Waller said, if she is elected as an assessor.
A homeowner in town with curiosity of how the system works, Waller is also a lifelong town resident who has raised two daughters in town.
"Due to some changes in my personal life, l decided to run," she told the Taunton Gazette. "I felt like there was an opportunity to learn about the aspects of town government."
Courcy, also a lifelong, town resident, has worked for Pepsi for the last 15 years, handling unions, employees and payroll responsibilities. She has also worked in lease management, collecting rent money for a property.


text:
888 needed a new logo design and created a contest on 99designs.
A winner was selected from 245 designs submitted by 71 freelance designers.
Pho Vietnam
Pho Vietnam is a restaurant that serves delicious PHO (popular Vietnamese noodle soup) and the killer Vietnamese iced coffee. We also serve bubble tea that's a favorite with the locals, especially during the hot summer months.
Quick overview of our popular menu items:
History of the legendary Pho:
Vietnamese Iced Coffee:
Bubble tea:
Need a clean, modern, fun, expressive, bold logo. Most important aspect is good typography. Avoid the "Web 2.0" look.
Try a completely text-driven logo - a font that makes it looks BOLD, UNIQUE, FLAVORFUL. Just "Pho Vietnam" and "Restaurant" as an underline. Looking forward to your thoughts. If you get one that's close enough, we'll pick yours. This has some "delicious" typefaces to give you some ideas: http://www.sudtipos.com/home
Maybe experiment with colors and adding stroke to the letters like:
Maybe a touch of 3-D like
Food lovers, coffee lovers and casual diners.
Please provide appropriate formats for use on the web and in print (so RGB and CMYK). Logo will be supplied in layered .PSD (300dpi) and/or Vector .EPS and accompanied by any custom fonts used.
Thank you!
Find out how a design contest works or learn more about our logo design services.


text:
You're missing 2 of my retentions.
You've made an error somewhere - Bresnan is on Riley's teamRound 5
GingerFurball -
Cevno - Abhinav Mukund
Himmanv -
rvd619323 -
Spark -
weeman27bob - Dwayne Bravo
morgieb -
Samuel_Vimes - Ross Taylor
Johnners -
Marcuss - Vernon Philander
Cabinet96 -
Daemon/Flem -
Eds -
Prince EWS -
Howe_zat - Tim Bresnan
Noble_One -
@Howe.. balls. Will have to check that.
@GF - Originally only the odd numbered round retentions were there as it's much easier to randomise a list an C&P then it is to manually type out the reverse order. Everything should be there now.
Damn! Dire draft order for me considering the retention.
Starting to notice a theme with these picks
Last edited by Dan; 28-03-2012 at 11:28 PM.
Mind the Windows, Tino!
Deadset randomest Rd1 ever.
What players did in this competition last season isn't taken into account by the database - the database is based completely on real life - but in many cases it may be a good indication as to how they'll perform this season unless they've performed a lot better/worse in real life since then.
Nevill and Woakes in the first round? Jesus.
Want to be the online Don Bradman or Ian Salisbury?
Then join CW Cricket today. It's what all the cool kids desire.
RIP Craig Walsh (Craig) 1985-2012
RIP Hughesy 1988-2014
Haha this is the best first round ever.
Is it necessary to put the draft order in code tags? I can't scroll through a code tag on my phone.
There are currently 1 users browsing this thread. (0 members and 1 guests)


text:
Caleb B has not received any gifts yet
I used to live in Norman as a matter of fact. Boomer!
There's a big OKC group in here - maybe start up a Norman one.
Thanks for the add!
Hi, I'm Mark, the founder of Tennisopolis, the world's largest and most active tennis network. Please share Tennisopolis with your friends by supporting our Facebook page. Click here for a Guide to Meet Tennis Partners.
Have a look at our introduction page which will help you navigate the massive network which now has over 40,000 members and 600 local tennis groups.
Also, I recommend that you upload a profile pic; it can be of anything, but people with pics meet more players.
Friend me,
Mark, The Mayor of Tennisopolis
© 2018 Created by Mark / The Mayor. Powered by


text:
Skywarp64 wrote:As much as I want to buy the hell out of ALL of these, I don't get it. Apart from ball joints, how are these any different from Kre-O?
Kre-o is a System-based creation (good old lego blocks), while these are built in the style of Lego action figures, like Bionicle and Hero Factory (all technic pieces and ball joints).


text:
Please join us at our Sweetlead Salsa school in Hendon (near Brent Cross shopping centre) every WEDNESDAY for a fun filled evening of high quality salsa dance tuition plus practice/social time in an open and friendly atmosphere.
You can expect clear and structured learning that focusses on fundamentals and technique and will build your essential core dance skills. You'll also learn how to apply those techniques to plenty of moves and combinations that you can add to your dance floor repertoire.
And best of all when class is over we have two hours of play time! Practice what you have learned or just come down out and dance with everyone. The 'school disco' goes on till 11:30!
Hendon School, Golder's Rise, London, NW4 2HP
Improver/ Intermediate Techniques Class – 7:45 pm with Trevor 'Sweetlead' and Heidi
Beginners – 8:30pm with Red
Intermediate/advanced – 8:30pm with Trevor 'Sweetlead' and Heidi
Practice/ dance time 9:30 – till 11:30pm All welcome!
£8 for whole evening (£5 NUS), £4 for practice/ social time only (9:30-11:30pm)
Free water and super cheap vending machine drinks available or BRING YOUR OWN DRINKS
Great public transport links: nearest tube Hendon Central * (10 mins), Buses 183, 240
Great Road links: minutes from M1 (J2), A406, A41, A1
On site parking available
*Directions from Hendon Central tube (Northern Line) - When exiting the tube turn left, and then immediately turn left again onto Queens Road. Follow this road until you come to a mini roundabout and turn left here onto Brent Street. Take the next right onto The Crest and you will see the school directly ahead of you at the end of the road. It's about a 10-15 min walk.
Call – 07961171970
Email – firstname.lastname@example.com
Visit – www.sweetlead-salsa.co.uk
Follow - https://twitter.com/SweetleadSalsa
Join our Facebook group
Like our Facebook page:


text:
SAN FRANCISCO (AP) — A man suspected of killing four relatives on a California Indian reservation fired one bullet into his own head and was shot multiple times by sheriff's deputies during a gunbattle, an autopsy concluded Friday.
The report by the Tulare County coroner's office paints a picture of mayhem and overkill on the Tule River Indian Reservation, as relatives of 31-year-old Hector Celaya were shot and killed with a .38-caliber revolver at close range last Saturday.
It says Celaya's 8-year-old daughter Alyssa, whose name was tattooed on his leg, bled to death after she was shot, and the father took off in a car with her and another daughter, 5-year-old Linea, who survived a gunshot wound to the head.
Sheriff's deputies tracing Celaya's cellphone cornered him six hours later on a country road amid citrus orchards.
"He was struck multiple times by officers and had one apparent self-inflicted gunshot wound to the head," the autopsy said. It did not specify which shot killed Celaya.
Tribal officials said it was the worst tragedy members ever have suffered.
Authorities have not explained a motive for the rampage, though Celaya had a history of drug abuse and had been in child support and custody battles with the mother of the children.
Authorities said he opened fire at the family compound on the mountainous reservation where all the victims lived.
Celaya's 60-year-old mother Irene Celaya was shot twice in the head inside a travel trailer. Investigators also found her brother Francisco "Frank" Moreno, 61, dead in the trailer with wounds to his head and chest. Celaya's 6-year-old son Andrew was also discovered in the trailer with multiple gunshots. He is still hospitalized.
In a wooden outbuilding that served as a makeshift bedroom, authorities found Bernard Moreno, 53, with multiple bullets to the upper torso, the autopsy said.
"All of the wounds were the results of shots fired from close contact with the suspect's weapon," the report said.
Hector Celaya was a former custodian at the tribe's Eagle Mountain Casino. Court records show he had spent time in jail in 2008 after pleading no contest to an assault and battery charge.
He was facing a possible return to jail after recent arrests for investigation of drunken driving and drug use.
A toxicology report is pending.


text:
Meet thousands of Pinehurst singles through one of the best Pinehurst online dating sites. Matchmaker.com has great instant messenger and live video Pinehurst chat service for our members. Pinehurst dating has never been easier with our show interest feature that will allow you to break the ice with attractive local singles.
Matchmaker.com has some great services for Pinehurst singles looking for a longer term relationship. Besides our great Pinehurst chat product with live video matchmaker users can send email messages to people in the area. The Pinehurst dating scene can be hard to find the right person at times; however, we are here to help and our Pinehurst online dating service is free to register.
PinehurstJoin Now Free!
Pinehurst Girls | Pinehurst Men | Pinehurst Gay | Pinehurst Lesbians
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
More Pinehurst Links:
Pinehurst Personals | Pinehurst Speed Dating | Pinehurst Chat | Pinehurst Singles | Pinehurst Love
Senior Dating | Catholic Dating | Christian Dating | Muslim Dating
Black Singles | Asian Singles | Latin Dating
Try our Pinehurst dating service today. Matchmaker.com is one of the oldest Pinehurst online dating services on the Internet and has brought thousands of couples together from the area. Test drive our Pinehurst Chat room with one of the best online communities for the Pinehurst single person. Also, keep in mind that we have a huge member base of Pinehurst singles and that we also cater to members of the many backgrounds.
Still not convinced that matchmaker is the free Pinehurst dating service for you? Once you've filled out the quick registration process you will be to see full size photos and profiles of thousands of Pinehurst singles. Did you know that free Pinehurst dating is a few clicks away? Find love and romance in Pinehurst at matchmaker today!


text:
Thrashing done with IH 1206 and IH 914
Best of luck!
I am looking forward to it, just hope it works like it should.
Chaffer set to just lets unthreshed pods thru, shoe sieve set close to barely let clean beans thru.
I also run a SkourKleen, with the slotted soybean screen; removes ALOT of weed and pod halves.
I run the head right on the ground, and keep a sharp eye for rocks.
TRADEMARK DISCLAIMER: Tradenames and Trademarks referred to within Yesterday's Tractor Co. products and within the Yesterday's Tractor Co. websites are the property of their respective trademark holders. None of these trademark holders are affiliated with Yesterday's Tractor Co., our products, or our website nor are we sponsored by them. John Deere and its logos are the registered trademarks of the John Deere Corporation. Agco, Agco Allis, White, Massey Ferguson and their logos are the registered trademarks of AGCO Corporation. Case, Case-IH, Farmall, International Harvester, New Holland and their logos are registered trademarks of CNH Global N.V.


text:
Harley-Davidson announces two more headlines for 110th anniversary
Harley-Davidson announces two more headlines for 110th anniversary
Aerosmith and Toby Keith will perform in Milwaukee over Labor Day weekend as part of the Harley-Davidson 110th anniversary celebration.
Keith will play Aug. 29, Aerosmith will take the stage Aug. 30 and Kid Rock wraps up the weekend on Aug. 31.
Each headline concert is at the Marcus Amphitheater on the Summerfest grounds.
Tickets for the three headlining performances go on sale to the public at 8 a.m. May 6, at www.h-d.com/110tickets.
A special pre-sale begins April 29, and is open to all those who purchase a 110th Anniversary Celebration ticket pack before the April 19 deadline.


text:
Shanida Haya scotyk how are you? just been looking through a few post and came across your's, i'm really interested in traveling through europe by interrail aswell, partly because i'm scared of flying :L but also it would be great to see sights on the journey, I won't have alot of money so i'm happy staying in hostels or anywhere that is really cheap. if your ineterested in having an extra travel, id be more than happy to go along with you :) x
Trip | InterRailing summer 2013!!!
Travel Forum 6 years ago
Travel Forum 6 years ago


text:
HILTON, N.Y. (AP) — A historic lighthouse on Lake Ontario in western New York will be featured as a vacation getaway prize on the TV game show "The Price is Right."
Donald and Nandy Town operate the Braddock Point Lighthouse in Hilton as a luxury bed and breakfast inn. They expect the television exposure on the popular game show to keep them very busy next summer. The lighthouse, built in 1896, will be featured on the show on Jan. 15.
Officials with the Great Lakes Seaway Trail are also hoping for a boost in tourism from the game show appearance.
The Braddock Point Lighthouse is one of 30 historic and replica structures along the 518-mile-long Great Lakes Seaway Trail National Scenic Byway along the St. Lawrence River, Lake Ontario, Niagara River and Lake Erie.


text:
Andrea Lafferty, the president of the Traditional Values Coalition, says something offensive about gays and lesbians practically every time she speaks on the subject. Nevertheless, she hit a new low Friday in her response to conservative Republican Sen. Rob Portman's disclosure Thursday that he now supports same-sex marriage.
The op-ed Portman (R-Ohio) wrote for the Columbus Dispatch offers a perfect argument for conservatives to drop their opposition to same-sex couples taking vows. "We conservatives believe in personal liberty and minimal government interference in people's lives," he wrote. "We also consider the family unit to be the fundamental building block of society. We should encourage people to make long-term commitments to each other and build families, so as to foster strong, stable communities and promote personal responsibility."
Portman came to his new position the same way former Vice President Dick Cheney apparently did: because one of his children is gay. "Two years ago, my son Will, then a college freshman, told my wife, Jane, and me that he is gay," Portman wrote. "He said he'd known for some time, and that his sexual orientation wasn't something he chose; it was simply a part of who he is."


text:
Q. I saw a local news item about religious orders, and they described the order as mendicant, but didn't explain what that means. Could you explain it for me?
A. Here's a reply from Father Reginald Martin:
The Catechism of the Catholic Church beautifully describes the origin of religious life. "From the very beginning of the Church … men and women … set out to follow Christ with greater liberty, and to imitate him more closely, by practicing the evangelical counsels" (No. 918). These "counsels" are the vows of chastity, poverty and obedience, which truly free an individual from many cares that occupy those who embrace marriage, family and economic life in the secular world. The forms of religious life are quite varied, and the Catechism continues, "They led lives dedicated to God, each in his own way. Many … became hermits or founded religious families" (No. 918).
Pope John Paul II described these institutes: "History witnesses to the outstanding service rendered by religious families … from the ancient monastic institutions to the medieval orders, all the way to the more recent congregations" (Catechism, No. 927). The important distinction to consider here is between monastic and mendicant communities. Monasteries are enclosed spaces, so men and women who enter them are, to some extent, separated from the outside world. This means monasteries must find internal means of support. Members of mendicant orders (the word means "to beg") have traditionally had greater contact with society — preaching, teaching, providing services to the poor and the sick.
Copyright © 1996-2018 Our Sunday Visitor, Inc.


text:
For the sixth year in a row, Pharm Exec invites Professor Bill Trombetta of St. Joseph's University to analyze the pharma industry's financial performance with a battery of business metrics, old and new. The highlights: Genentech pulls ahead of its longtime rival, Amgen. Forest delivers another strong performance, despite dropping revenue. Schering-Plough is building enterprise value. Biogen Idec racks up a stellar profit margin. And Merck? Well, Merck is back, baby. And the winner is…
Pharmaceutical Executive's Sixth Annual Industry Audit analyzes the 2006 performance of 16 companies that are publicly traded on stock exchanges and file 10-K reports with the Securities and Exchange Commission (or 20-F reports, in the case of foreign companies). As in past years, the audit goes beyond standard accounting and financial statements, drawing on newer and—arguably—more meaningful metrics, such as sales per employee and percentage of income driven by intellectual capital. Data were gathered primarily from 10-Ks and 20-Fs. In addition, we consulted databases, such as http://finance.yahoo.com/ and Hoovers, and secondary sources, such as Fortune, Business Week, In Vivo, the Wall Street Journal, and the New York Times.
Drug Revenue


text:
- Inside Athletics
- Tickets
- Fan Zone
- Media Zone
- Social
- Shop
- E Fund
JOHNSON CITY, Tenn. (Oct. 22, 2009) - The ETSU volleyball team is set to host Mercer and Kennesaw State this weekend in Brooks Gym as the Bucs look to move up in the Atlantic Sun standings. The Bucs face Mercer at 7 p.m. on Friday, while the Owls come to town on Saturday at 6 p.m.
ETSU (7-14, 5-7 A-Sun) is coming off of a big 3-2 win over UNC Asheville on Tuesday that ended a four-game skid. The Bucs have dropped four of their last five conference matches, with their last win coming at home against Belmont. Junior Whitney Cogburn (Kingsport, Tenn.) leads the way for the Buccaneers as she has a team-best 209 kills and eight double-doubles while posting 116 assists and 182 digs.
The Bucs are.4-3 all-time against Mercer as the Buccaneers swept the Bears on the road earlier this season. ETSU is 4-1 all-time against Kennesaw having won the only contest between the teams earlier this year.
Mercer (6-16, 4-9 A-Sun) is 2-3 in its last five matches having defeated Stetson and Belmont, while losing to Kennesaw State, Lipscomb and Georgia State. The Bears are led by Krista Hurley as she has a team-best 191 kills.
Kennesaw State (11-9, 6-7 A-Sun) comes into the weekend having won two of its last three contests downing Mercer and Belmont, while being swept by Lipscomb. Asjia Stokes leads the Owls as she is sixth in the A-Sun in kills with 275 on the year.
Both matches can be seen live on ASun.TV by clicking the link above. For more information on Buccaneer volleyball and all other athletic news, please visit www.ETSUBucs.com.


text:
MERIDIAN, Idaho (AP) — Slick roads and quickly moving fog led to a pileup involving a logging truck and more than 40 other vehicles Thursday on a busy highway near Boise, injuring at least 10 people during the morning commute.
Authorities said the crash happened as emergency responders tried to clear a previous wreck on Interstate 84, one of the state's main east-west highways.
"Within a three- or four-minute timeframe, the fog rolled in," Idaho State Police Captain Bill Gardiner said. "Witnesses say you could see 30 to 40 feet in front of you — that's all."
Idaho State Police spokeswoman Teresa Baker said a motorist in a black Subaru tried to move to the right lane and away from the previous crash but clipped a silver Subaru. A logging truck then hit the black car, causing a chain-reaction crash in the interstate's westbound lanes that included four other tractor trailers.
Baker said 10 people were transported by ambulance to area hospitals, including the driver of the black Subaru. The man was seriously hurt and had to be extricated from his vehicle, which was crushed to the point where there was little room left for him inside it.
"There was just a little compartment in there, and he was in there," Baker said. "It took them about an hour to get him out."
The man's injuries, including a leg injury, were not considered life-threatening, she said.
Authorities reopened the interstate at about 2 p.m. Baker said police were still investigating, and no citations had been issued so far.
Sleeting rain early Thursday resulted in a number of crashes in and around Boise, the state's most populous city. One of them occurred at about 6:30 a.m. on I-84.
Baker said an incident-response vehicle from the Idaho Transportation Department was parked on the far left side of the road waiting for a tow truck to remove a vehicle from that crash site when the chain-reaction pileup started.
"There was crash upon crash upon crash," Baker said. "It's a significant event. I'm sure there are many people out here who have never seen that many at once."
Baker said a separate crash occurred just ahead of those collisions due to what Idaho State Police surmise was a driver becoming distracted seeing the pileup taking place behind him.
"If you saw that in your rear view mirror, it would be a little dramatic," Baker said.
The secondary crash involved three to five vehicles, she said, and extended the length of the accident scene to about a mile of the interstate. In all, police say 41 vehicles and five tractor trailers, including the logging truck, were involved.
Authorities said the fog moved in quickly and likely caught drivers unaware.
"It's a perfect storm," Gardiner said. "First off, you have icy roads, and then you have the weather change in an instant like that. Then you have people driving too fast for the conditions of the road, sprinkled with a little bit of inattention."
Associated Press writer Keith Ridler in Boise contributed to this report.


text:
About Us
Welcome to Montclair State University Summer & Winter Sessions. We provide undergraduate and graduate courses to help you graduate on time, accelerate your degree program, provide flexibility with your schedule, or focus on challenging courses. Students may also explore areas not covered by an existing course in our special topics courses. The course schedule is posted online by October and is updated as courses are added or dropped.
Who can attend Winter Session
- Montclair State University students
- Visiting students from other colleges and universities
- High-achieving high school students
- Other adult learners
Our Unique Location
Montclair State's unique location provides easy access to all that New York City and New Jersey have to offer in the summer. The campus is served by two train stations and an on-campus bus stop that makes it easy to enroll in classes and still enjoy all the region has to offer. Take advantage of what Montclair Township and the surrounding communities have to offer from boutiques and eateries to the Willowbrook Mall to direct bus and train service to New York City within 30 minutes.
Contact Us
Stop by or contact us if you have any Winter Session questions or concerns.
855 Valley Road - Suite 202, Clifton, NJ 07013 | Call: 973-655-4352 | Fax: 973-655-7851 | Email: email@example.com


text:
GAFFNEY, S.C. – In King's second road game in as many days, the Tornado fell to the Limestone Saints in straight sets to fall to 3-5 (2-4 CC) on the year. Senior outside hitter Michael Koebel led King with nine kills while freshman Matthew Harper led the team in blocks with four assists.
King overcame a three-point deficit at 16-13 behind the combination of Stephen Brown, Matthew Lychock, and Matthew Harper to trail by a single point late in the set. While keeping pace with the Saints, the hosts broke away with a second three-point swing that proved unrecoverable. Scott Warren and Andrew Miller helped create a four-point gap, 23-19, before Warren scored the winning point as a result of a blocking error by King.
The Tornado started the second set strongly with an 8-1 lead that began with Zach Prexta (LOCATION) at the service line. During the run, Matthew Harper put together a pair of block assists. Prexta had one service ace and a kill to support the run. However, the Saints cut into King's lead with three of the next four points scored by Scott Warren, Limestone's leading attacker. Down three points, 13-10, Limestone rallied to score nine of the next 10 points to take an 18-14 lead. The Saints increased their lead to as many as six before Sean Davis scored the final point in a nine-point set victory, 25-18.
Both teams went back and forth in the third set, scrumming all the way to a 16-16 tie before a pair of King errors allowed the Saints to jump out to an 18-16 lead. Eight of the final 10 Limestone points came by way of a King error before the Saints found themselves clinching the set and the match, 25-20.
The loss drops the Tornado to 3-5 overall and to a 2-4 Conference Carolinas ledger. They host Coker College on Feb. 1 inside the Student Center Complex at 7 p.m.


text:
USA Network Is Unlikely to Rescue Happy Endings
But there's still a glimmer of hope.
Nothing's final, but: A deal to bring ABC's canceled Happy Endings to USA Network appeared to be dead late Friday. Multiple sources tell Vulture that, despite intense negotiations and general agreement on financials, it now seems as if the characters from the Sony/ABC Studios-produced show are now unlikely to be welcomed at the network where Characters (are) Welcome. A USA Network rep declined comment late Friday, and reps for the studios could not be reached. All of this does not mean Happy is dead-dead. For one thing, negotiations can take radical and sudden turns, and USA's refusal to comment might indicate there's still a chance the situation will change and a deal will get done. What's more, we're already hearing other networks are mulling the idea of acquiring the show, including NBC and TBS. Stay tuned.


text:
SheKnows.com Lifestyles
14614 North Kierland Boulevard S150
Scottsdale, AZ 85254
Phone: (480) 237-7100
Contact: corporate.sheknows.com
© Copyright 2003-2018 SheKnows, LLC.
All Rights Reserved.
Brand: Pottery Barn
Price: $129.00 USD
Available at: Pottery Barn
Encased by luminous, champagne-tone grosgrain fabric, our elegant photo album and matching storage box keep special memories organized and protected.
The menu button now contains all of the sections of our site.
And you'll see personalized content just for you whenever you click the My Feed heart .
SheKnows is making some changes!