I have a JSF table which displays activity of users.
<p:lineChart id="logins" value="#{StatisticsController.weekActivity}" legendPosition="e"
title="Weekly Logins" seriesColors="4D94FF, 1975FF, 005CE6, 0047B2" minY="0" maxY="200"/>
public class Statistics implements Serializable {
private CartesianChartModel weeksActivity;
public Statistics() {
createweeksActivity();
}
public CartesianChartModel getweekActivity() {
return weeksActivity;
}
private void createweeksActivity() {
weeksActivity = new CartesianChartModel();
ChartSeries boys = new ChartSeries();
boys.setLabel("Active Accounts");
boys.set("Monday", 120);
boys.set("Tuesday", 100);
boys.set("Wednesday", 44);
boys.set("Thursday", 150);
boys.set("Friday", 120);
boys.set("Saturday", 82);
boys.set("Sunday", 115);
ChartSeries girls = new ChartSeries();
girls.setLabel("Blocked Accounts");
girls.set("Monday", 52);
girls.set("Tuesday", 60);
girls.set("Wednesday", 110);
girls.set("Thursday", 135);
girls.set("Friday", 120);
girls.set("Saturday", 140);
girls.set("Saturday", 130);
girls.set("Sunday", 140);
weeksActivity.addSeries(boys);
weeksActivity.addSeries(girls);
}
}
I want to display the current day always last in order. For example:
Now I get this order: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
If for example today is Wednesday I want to get this order when I open the web page:
Thursday, Friday, Saturday, Sunday, Monday, Tuesday, Wednesday
How I can solve this problem?
EDIT:
I updated the code this way:
private void createweeksActivity()
{
weeksActivity = new CartesianChartModel();
ChartSeries activeAccounts = new ChartSeries();
activeAccounts.setLabel("Active Accounts");
ChartSeries blockedAccounts = new ChartSeries();
blockedAccounts.setLabel("Blocked Accounts");
GregorianCalendar calendar = new GregorianCalendar();
DateFormat df = new SimpleDateFormat("EEEE");
for (int i = 0; i < 7; i++)
{
calendar.add(Calendar.DATE, 1);
System.out.println(df.format(calendar.getTime()));
activeAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime())));
blockedAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime())));
}
weeksActivity.addSeries(activeAccounts);
weeksActivity.addSeries(blockedAccounts);
}
public int getNumberOfLogins(String day){
// Get here the number of logins using SQL command
// Example: SELECT * FROM HISTORY WHERE DAY = day;
return 100;
}
I suppose that it will work.
A GregorianCalendar represents an instant in time, under our gregorian calendar. Its no-arg constructor initializes it to the current time.
A DateFormat is used to format dates. You can transform a
(Gregorian)Calendarinto a Date using itsgetTime()method. “EEEE” means the day of the week, in its longest form.The
(Gregorian)Calendar.add()method allows adding a value to any field of the calendar (year, month, date, hour, etc.). Since you want to iterate through the days of the week, I start from tomorrow, and add 1 day at each iteration.Everything is available in the javadoc.