Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

ReportWizardMatrix

 
Greenhorn
Posts: 8
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Report post to moderator
if you are having a code like this and it gives you a nullException what may be the cause


/**
* TODO ...
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward bucketMatrixReport(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws ReportWizardActionException {

HttpSession session = request.getSession();
try {
Debug.println(this, "<< bucketMatrixReport: IN HERE myReport");

ReportWizardForm wizForm = (ReportWizardForm) form;
String fromDate = wizForm.getStartdate();
String toDate = wizForm.getEnddate();
String interval = wizForm.getInterval();
ArrayList bucketDates = createBucketDates(fromDate, toDate,
interval);

// Recover the intial REPORT created by the SimpleSQLReportAction
Report prereport = (Report) session.getAttribute("report");

// refactor the report according to the bucketDates.
Report bucketReport = createBucketReport(bucketDates, prereport,
interval);
//Debug.println(this, prereport.getRecords().get(0).toString());
//Debug.println(this, String.valueOf(bucketReport.getRecords().size()));
//Debug.println(this, bucketReport.getRecords().get(0).toString());

return (mapping.findForward("matrixReportResult"));
} catch (Exception e) {
e.printStackTrace();
String msg = "Exception: " + e.getClass().getName() + ", MSG: "
+ e.getMessage();
Debug.println(this.getClass(), Debug.INFO, msg);
throw new ReportWizardActionException(msg);
}

}

/**
* Method to create bucketDates based on interval selected. These dates are
* the "Start"Dates for each internval
*
* @param fromDate
* @param toDate
* @param interval
* @return bucketDates . The ArrayList of dates
* @throws
*/
private ArrayList createBucketDates(String fromDate, String toDate,
String interval) {// TODO Thando to put int exception handling

ArrayList bucketDates = new ArrayList();

long dailyIncreament = 24 * 60 * 60 * 1000;
long weeklyIncreament = 7 * dailyIncreament;

// create calendar instance usinf fromDate, set time to 0
Timestamp tsFrom = Timestamp.valueOf(fromDate);
Date dtFrom = new Date(tsFrom.getTime());
Calendar calFromDate = new GregorianCalendar();

calFromDate.setTime(dtFrom);
calFromDate.set(Calendar.HOUR, 0);
calFromDate.set(Calendar.MINUTE, 0);
calFromDate.set(Calendar.SECOND, 0);

// create calendar instance using toDate, time set to 0
Timestamp tsTo = Timestamp.valueOf(toDate);
Date dtTo = new Date(tsTo.getTime());
Calendar calToDate = new GregorianCalendar();
calToDate.setTime(dtTo);
calToDate.set(Calendar.HOUR, 0);
calToDate.set(Calendar.MINUTE, 0);
calToDate.set(Calendar.SECOND, 0);

if (interval.equals(AppConstants.INTERVAL_DAILY)) {
// add dates in range into an ArrayList, move a day forward and test
// for equality
do {
bucketDates.add(calFromDate.getTime());
Debug.println(this, calFromDate.getTime().toString());
Debug.println(this, calToDate.getTime().toString());
// TODO Thando, to check the month end scenario's
// TODO 24*60*60


long day = calFromDate.getTimeInMillis() + dailyIncreament;
calFromDate.setTimeInMillis(day);
//calFromDate.roll(calFromDate.DATE, true);
Debug.println(this, "From date " + calFromDate.toString());
Debug.println(this, "To date " + calToDate.toString());

} while (calFromDate.before(calToDate));
}else if(interval.equals(AppConstants.INTERVAL_WEEKLY)){
do {
bucketDates.add(calFromDate.getTime());
Debug.println(this, calFromDate.getTime().toString());
Debug.println(this, calToDate.getTime().toString());

long day = calFromDate.getTimeInMillis() + weeklyIncreament;
calFromDate.setTimeInMillis(day);
//calFromDate.roll(calFromDate.DATE, true);
Debug.println(this, "From date " + calFromDate.toString());
Debug.println(this, "To date " + calToDate.toString());

} while (calFromDate.before(calToDate));
}else if(interval.equals(AppConstants.INTERVAL_MONTHLY)){
do {
bucketDates.add(calFromDate.getTime());
Debug.println(this, calFromDate.getTime().toString());
Debug.println(this, calToDate.getTime().toString());

calFromDate.roll(calFromDate.MONTH, true);
Debug.println(this, "From date " + calFromDate.toString());
Debug.println(this, "To date " + calToDate.toString());

} while (calFromDate.before(calToDate));
}else if(interval.equals(AppConstants.INTERVAL_ANNUALLY)){
do {
bucketDates.add(calFromDate.getTime());
Debug.println(this, calFromDate.getTime().toString());
Debug.println(this, calToDate.getTime().toString());

calFromDate.roll(calFromDate.YEAR, true);
Debug.println(this, "From date " + calFromDate.toString());
Debug.println(this, "To date " + calToDate.toString());

} while (calFromDate.before(calToDate));
}

return bucketDates;
}

/**
* This method takes the previously run "REPORT" object produced by the
* SimpleSQLReportAction here we re-process the Report into the buckets
* selected from the Report Wizard.
*
* @param bucket
* @param report
* @param frequency
* @return Forwards the REPORT object to the HTTP Session for JSP process
*/
private Report createBucketReport(ArrayList bucketDates, Report report, String interval) throws ReportWizardActionException{
Report modifiedReport = new Report();
ArrayList sortedcolumns = new ArrayList();
boolean bucketFlag = true;
boolean newRec = false;
String key = new String();
String prevKey = new String();
String nameCol = new String();
String scoreCol = new String();
String dateCol = new String();
float score = 0f;
float bucketscore = 0f;
int scoreCount = 0;
Timestamp datets=null;
Date recdate=null;
Date currBucketDate=null;
Date beginDate = null;

ReportRecord reportRecord2 = new ReportRecord();
ReportRecord record = null;
TreeMap cells = null;
Iterator iter = null;

Debug.println(this, "Report 1>> " + report);
Debug.println(this, "================== Before generating report 2 ...." );
try {
// Initialise the control values...
String keyIndex =(String)((ReportRecord)report.getRecords().get(1)).getCells().firstKey();
ReportCell keyCell = (ReportCell)((ReportRecord)report.getRecords().get(1)).getCell(keyIndex);
key = (String)keyCell.getFieldVal().toString();

Debug.println(this.getClass().getName(), " Initial Key: " + key);

prevKey = key;
int norecs = report.getRecords().size();

Debug.println(this, "Report 2: No Recs = " + norecs);
for(int i =0; i < norecs; i++){
Debug.println(this, "RECORD >> " + report.getRecords().get(i).toString());
record = (ReportRecord)report.getRecords().get(i);

cells = (TreeMap)record.getCells();
iter = cells.keySet().iterator();

while(iter.hasNext()){
String column_name = (String)iter.next();
Object value = null;
try{
value = (String)((ReportCell)record.getCells().get(column_name)).getFieldVal().toString();
if(column_name.equalsIgnoreCase("fullName")){

key = value.toString();
Debug.println(this, "rec: " + i + ", FullName: " + key);
}

if(column_name.equalsIgnoreCase("scorevalue")){
score = Float.parseFloat(value.toString());
Debug.println(this, "rec: " + i + ", Score: " + score);
}

if(column_name.equalsIgnoreCase("lastupdated")){
datets = Timestamp.valueOf(value.toString());
Date updated = new Date(datets.getTime());
Calendar calUpdated = new GregorianCalendar();
calUpdated.setTime(updated);
// Init the time to 0:0:0
calUpdated.set(Calendar.HOUR, 0);
calUpdated.set(Calendar.MINUTE, 0);
calUpdated.set(Calendar.SECOND, 0);

recdate = calUpdated.getTime();

Debug.println(this," rec: RecDate = "+ updated);
}
}catch (ClassCastException e) {
String msg = "Exception: " + e.getClass().getName() + ", MSG: "
+ e.getMessage();
Debug.println(this.getClass(), Debug.INFO, msg);
throw new ReportWizardActionException(msg);
}
}

//check if currenyt bucket date is null. if it is get the current bucket date using the recod date and the bucketdates ArrayList
//if(currBucketDate == null){
//Debug.println(this, "CurrBucketDate == null");
////begin date might be after the next entities begin date, this must always be set to an entities begin date.
//currBucketDate = getBucketDate(bucketDates, recdate);
//beginDate = currBucketDate;
//}

// If we have changed to next object rec, add the new Rec, and
// continue...
if(!key.equals(prevKey) && bucketFlag == false){
prevKey = key;
String cellKey = currBucketDate.toString();
Object cellVal = new Float(bucketscore/scoreCount);
reportRecord2 = new ReportRecord();
reportRecord2.init(modifiedReport.getSortedColumns());
reportRecord2.addCell(cellKey, cellVal);
modifiedReport.addRecord(reportRecord2);

reportRecord2 = new ReportRecord();

scoreCount =0 ;
bucketscore = 0;
bucketFlag = false;
currBucketDate = beginDate;
newRec = true;
}

if (bucketFlag == true){
// get nextbucketdate if the rec has moved past previous bucket
// date
currBucketDate = getBucketDate(bucketDates, recdate);
bucketFlag = false;
}

//check if we still busy with the same record or have we moved on to the next one
//if(newRec){
//Debug.println(this, "do nothing because we'll be looking at the next record so we don't need to check date in bucket");
//}else{
if (isInBucket(bucketDates, recdate,currBucketDate)){
scoreCount++;
bucketscore += score;
}
else{
String cellKey = currBucketDate.toString();
Object cellVal = new Float(bucketscore/scoreCount);
reportRecord2.init(report.getSortedColumns());
reportRecord2.addCell(cellKey, cellVal);
//this line throws
Debug.println(reportRecord2, "Report 2: Adding new Cell to the report 2 record " );
scoreCount =0 ;
bucketscore = 0;
bucketFlag = true;
i--;//restore the previous record to re-capture TODO: Exercise when really bored - change to Recursion!
}
}
//}
}catch (Exception e) {
String msg = "Exception: " + e.getClass().getName() + ", MSG: "
+ e.getMessage();
Debug.println(this.getClass(), Debug.INFO, msg);
throw new ReportWizardActionException(msg);
}
Debug.println(this, "Report 2: " + modifiedReport);
Debug.println(this, "+++++++++++++++++++++= After generating report 2 ...." );

return modifiedReport;
}

/**
* Simple test to see if the recdate is in the current bucket
* @param bucketDates
* @param recdate
* @param currBucketDate
* @return
*/
private boolean isInBucket(ArrayList bucketDates, Date recdate, Date currBucketDate) throws Exception{
Date recBucketDate = getBucketDate(bucketDates,recdate);

if (recBucketDate.equals(currBucketDate)) {
return true;
}

return false;
}

/**
* Private method to return the START date of the particular bucket given the
* record date and the interval selected
*
* @param bucketDates
* @param recdate
* @param interval
* @return the start Date
*/
private Date getBucketDate(ArrayList bucketDates, Date recdate) throws Exception{
Date startdate = null;
Calendar recordcal = new GregorianCalendar();
Calendar bucketcal = new GregorianCalendar();

try{
Date currDate = null;
Iterator iter = bucketDates.iterator();

recordcal.setTime(recdate);
while (iter.hasNext()){
currDate = (Date)iter.next();
bucketcal.setTime(currDate);

/*Once we find a bucket start date that is less than this records date
* then return this as the new bucket start date
*/

if (recordcal.after(bucketcal) || recdate.equals(currDate)){
startdate = bucketcal.getTime();
continue;
}
}
}catch (Exception e) {
String msg = "Exception: " + e.getClass().getName() + ", MSG: "
+ e.getMessage();
Debug.println(this.getClass(), Debug.INFO, msg);
throw e;
}

return startdate;
}
}
 
author
Posts: 3285
13
Mac OS X Eclipse IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Report post to moderator
Hi there and welcome to Javaranch!

1.) Please put your code examples in UBB Code tags, e.g. tags.

2.) When you run the code, which line is throwing the NullPointerException?
 
Sheriff
Posts: 22783
131
Eclipse IDE Spring VI Editor Chrome Java Windows
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Report post to moderator
Please Use One Thread Per Question. Three is really not necessary. this one will be quite enough.

Also Carefully Choose One Forum. This has nothing to do with SCJP.
 
Don't get me started about those stupid light bulbs.
    Bookmark Topic Watch Topic
  • New Topic