Dec 27, 2007

Απεικονίζοντας ADF γραφήματα (graphs) στον JDeveloper 10.1.3

Μια από τις σημαντικότερες προσθήκες στον JDeveloper 11g είναι η υποστήριξη διαφόρων τύπων γραφημάτων για το πλαίσιο ανάπτυξης ADF. Τι γίνεται όμως όταν εργαζόμαστε στην έκδοση 10.1.3; Ένα εξαιρετικό άρθρο (http://www.oracle.com/technology/pub/articles/marx-jchart.html) που δημοσιεύτηκε στο OTN αφορά την χρήση του JFreeChart για τη δημοσίευση γραφημάτων από μια Java εφαρμογή. Σε αυτό το άρθρο θα εξειδικεύσω την χρησιμοποίηση του JFreeChart για ADF JSF BC εφαρμογές.

Το software που είναι απαραίτητο για αυτό το σκοπό περιλαμβάνει τα:
  1. JFreeChart (http://www.jfree.org/jfreechart/) που αναλαμβάνει την παραγωγή των γραφημάτων. Από τη σελίδα του SourceForge μπορούμε να κατεβάσουμε και το σχετικό JavaDoc
  2. JSF ChartCreator (http://sourceforge.net/projects/jsfchart) που μας επιτρέπει να ενσωματώσουμε γραφήματα του JFreeChart στις JSF σελίδες μας
Καταρχήν, εγκαθιστούμε τις βιβλιοθήκες στον JDeveloper. Στο παράδειγμά μας, έχω φτιάξει μια νέα βιβλιοθήκη που περιλαμβάνει το JFreeChart και το ChartCreator και επίσης έχω δηλώσει ως Tag Library αυτή του ChartCreator. Την πρώτη βιβλιοθήκη είναι απαραίτητο να τη δηλώσουμε στο Model και το ViewController project μας, ενώ τη δεύτερη στο ViewController, ως tag library.



Έπειτα, έχω δημιουργήσει ένα ViewObject (έστω AverageSalaryReport) βασισμένο πάνω στο σχήμα OE, που υπολογίζει τους μέσους όρους των μισθών ανά τμήμα.

Για την παραγωγή ενός γραφήματος βασισμένο στο παραπάνω ViewObject, θα προσθέσουμε μια μέθοδο στο ApplicationModule που θα διατρέχει τα δεδομένα και θα τα εισάγει στις κατάλληλες δομές του JFreeChart, ως εξής:

public CategoryDataset reportSalariesPerDepartment() {
ViewObject report = getAverageSalaryReport();

DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
for (Row row=report.first(); row != null; row=report.next()) {
dataSet.addValue(((Number)row.getAttribute("AvgSalary")).doubleValue(),
row.getAttribute("DepartmentName").toString(),
row.getAttribute("DepartmentName").toString());
}
return dataSet;
}

H παραπάνω μέθοδος θα πρέπει να δηλωθεί ως exportable στον client.

Στο ViewController project μας φτιάχνουμε ένα νέο Managed Bean (π.χ. ReportBean.java) που θα κάνει την κατάλληλη κλήση στο Application Module μας. Σημειώστε σε αυτό το σημείο την χρησιμοποίηση της ADFUtils που θα τη βρούμε ως helper class στο SRDemo.


Τέλος στη σελίδα μας, αρκεί να καλέσουμε μέσω του ChartCreator, το παραπάνω Managed Bean. Πληροφορίες για τον τρόπο σύνταξης στο http://jsf-comp.sourceforge.net/components/chartcreator/index.html
Πιο συγκεκριμένα στην περίπτωσή μας, προσθέτουμε το tag στη σελίδα μας:

<jc:chart id="chart1">

datasource="#{reportBean.deptSalariesReport}"
type="bar"
is3d="true"
antialias="true"
title="Salaries per Department"
xlabel="Department"
ylabel="Salary"
legend="true"
height="640" width="680">
</jc:chart>

Το τελικό αποτέλεσμα εμφανίζεται στην ακόλουθη εικόνα. Το γράφημα παρέχεται σε μορφή PNG.

2 comments:

Anonymous said...

για ελληνικά labels στο chart έχεις κάποιο tip?

Serafeim Karapatis said...

Δοκίμασα στο tag jc:chart να προσθέσω ελληνικά στις ιδιότητες xlabel, ylabel και εμφανίστηκαν κανονικά. Το contentType του παραδείγματος μου είναι windows-1253