You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.7 KiB
188 lines
5.7 KiB
package de.superx.servlet; |
|
|
|
import java.math.BigDecimal; |
|
import java.sql.Date; |
|
import java.text.ParseException; |
|
import java.util.Iterator; |
|
import java.util.List; |
|
import java.util.Locale; |
|
|
|
import de.memtext.util.DateUtils; |
|
import de.superx.common.Field; |
|
import de.superx.common.Maske; |
|
import de.superx.common.SxResultRow; |
|
import de.superx.common.SxUser; |
|
import net.sf.jasperreports.engine.JRDataSource; |
|
import net.sf.jasperreports.engine.JRException; |
|
import net.sf.jasperreports.engine.JRField; |
|
|
|
public class SxJasperDataSource implements JRDataSource { |
|
private Maske maske; |
|
private String mandantenID; |
|
private int index = -1; |
|
private List headerCaptions; |
|
private Iterator it; |
|
private SxResultRow row; |
|
private SxUser user; |
|
private Locale desiredLocale; |
|
private static final String captionIds[] = { "REPORT_HEADING_INSTITUTION", |
|
"REPORT_HEADING_URL", "REPORT_LOGO_FILE", "REPORT_HEADING_ADRESS", |
|
"REPORT_EMAIL", "REPORT_DOCUMENTATION_URL" |
|
|
|
}; |
|
|
|
SxJasperDataSource(String mandantenID,Locale desiredLocale,SxUser user, Maske maske) { |
|
this.mandantenID=mandantenID; |
|
this.desiredLocale=desiredLocale; |
|
this.user = user; |
|
this.maske = maske; |
|
headerCaptions = maske.getHeaderCaptionList(mandantenID,true); |
|
it = maske.getResult_el().getResultSet().iterator(); |
|
|
|
} |
|
|
|
/** |
|
* seltsam, man muss Jasper vorgaukeln, dass noch ein weiterer Datensatz |
|
* kommt, damit er ihn auch verarbeitet, wenn dann der scheinbar nächste |
|
* nachdem letzten aufgerufen wird, verhindert ein if vor it.next das er in |
|
* einen Fehler rennt |
|
*/ |
|
public boolean next() throws JRException { |
|
index++; |
|
// System.out.println("line " + index + " of " + |
|
// maske.getResult_el().getResultSet().size()); |
|
if (it.hasNext()) |
|
row = (SxResultRow) it.next(); |
|
// System.out.println("Budgetstelle "+getVal("Budgetstelle")); |
|
|
|
return it.hasNext() |
|
|| index < maske.getResult_el().getResultSet().size(); |
|
|
|
} |
|
|
|
/** |
|
* |
|
*/ |
|
public Object getFieldValue(JRField field) throws JRException { |
|
Object value = null; |
|
|
|
String fieldName = field.getName(); |
|
if (fieldName.equals("Berichtsname")) |
|
value = maske.getName(); |
|
else if (fieldName.equalsIgnoreCase("Erlaeuterung")) |
|
value = maske.getExplanation(); |
|
else if (fieldName.equalsIgnoreCase("Hinweis")) |
|
value = maske.getHinweisCaption(); |
|
else if (fieldName.equalsIgnoreCase("standdatum")) |
|
value = maske.getStandString(); |
|
else if (fieldName.equalsIgnoreCase("user")) |
|
value = user.getName(); |
|
else if (fieldName.startsWith("legende_") |
|
&& fieldName.endsWith("_value")) |
|
value = getLegendFieldValue(fieldName); |
|
else if (fieldName.startsWith("legende_") |
|
&& fieldName.endsWith("_label")) |
|
value = getLegendFieldLabel(fieldName); |
|
else if (isSxCaptionsField(fieldName)) |
|
value=getSxCaption(fieldName); |
|
|
|
else |
|
value = getVal(fieldName); |
|
|
|
if (value instanceof Short) |
|
value = new Integer(((Short) value).intValue()); |
|
if (value instanceof BigDecimal) |
|
value = new Double(((BigDecimal) value).doubleValue()); |
|
//Datumsobjekte als String Formatieren |
|
//DQ 14.1.2012: Problem bei Konvertierung im Servlet Betrieb, daher entfernen |
|
/* if (value instanceof java.util.Date) |
|
value =DateUtils.format((Date) value); |
|
if (value instanceof java.sql.Date) |
|
value =DateUtils.format((java.sql.Date) value);*/ |
|
// System.out.println("returning "+value+" for "+fieldName +" row "+index); |
|
|
|
return value; |
|
} |
|
|
|
private String getSxCaption(String fieldName) { |
|
|
|
return SxPools.get(mandantenID).getTranslationShort(fieldName,desiredLocale); |
|
|
|
} |
|
|
|
private boolean isSxCaptionsField(String fieldName) { |
|
boolean result=false; |
|
for (int i=0;i<captionIds.length;i++) |
|
{ |
|
if (fieldName.equals(captionIds[i])) |
|
{ |
|
result=true; |
|
break; |
|
} |
|
} |
|
return result; |
|
} |
|
|
|
private int getColNo(String fieldName) { |
|
int col = -1; |
|
//System.out.println("Suche x"+fieldName+"x"); |
|
for (int i = 0; i < headerCaptions.size(); i++) { |
|
if (headerCaptions.get(i).toString().equals(fieldName)) { |
|
col = i; |
|
break; |
|
} |
|
} |
|
return col; |
|
} |
|
|
|
private Object getVal(String fieldName) { |
|
Object result = null; |
|
int colno = getColNo(fieldName); |
|
if (colno > -1) |
|
result = row.get(colno); |
|
/*DQ 14.1.2012: Unnötige Fehlermeldung, einfach NULL zurückgeben: |
|
* else |
|
throw new IllegalArgumentException("JasperReport-Feld " + fieldName |
|
+ " wurde nicht im Ergebnis der Maske gefunden");*/ |
|
if (result != null && result.equals("")) |
|
result = null; |
|
return result; |
|
} |
|
|
|
private String getLegendFieldValue(String fieldName) { |
|
String result = ""; |
|
int pos = fieldName.indexOf("_value"); |
|
|
|
Field f = maske.getField(fieldName.substring(8, pos)); |
|
// result = f.getSelectedKey(); |
|
try { |
|
result = f.getSelectedKeyValueCaption(); |
|
} catch (ParseException e) { |
|
e.printStackTrace(); |
|
throw new IllegalArgumentException("Ungültiger wert für Feld " |
|
+ f.getName() + "(" + f.getSelectedKey() + ")"); |
|
} |
|
if (result == null) |
|
System.out.println("Warnung: JasperReport-Legende-Wert " |
|
+ fieldName.substring(7, pos) |
|
+ " wurde nicht im Ergebnis der Maske gefunden"); |
|
return result; |
|
} |
|
|
|
private String getLegendFieldLabel(String fieldName) { |
|
String result = ""; |
|
int pos = fieldName.indexOf("_label"); |
|
|
|
Field f = maske.getField(fieldName.substring(8, pos)); |
|
|
|
result = f.getName(); |
|
if (f.getCaptionShort() != null && !f.getCaptionShort().equals("")) |
|
result = f.getCaptionShort(); |
|
if (result == null) |
|
System.out.println("Warnung: JasperReport-Legende-Label " |
|
+ fieldName.substring(7, pos) |
|
+ " wurde nicht im Ergebnis der Maske gefunden"); |
|
return result; |
|
} |
|
|
|
}
|
|
|