1 package at.ac.tuwien.vitalab.hrcrm.pdf.name; 2 3 import java.awt.Color; 4 import java.lang.reflect.Field; 5 import java.util.List; 6 import java.util.Map; 7 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 11 import org.springframework.beans.factory.annotation.Required; 12 import org.springframework.web.servlet.view.document.AbstractPdfView; 13 14 import at.ac.tuwien.vitalab.hrcrm.adaptor.NameAdaptor; 15 import at.ac.tuwien.vitalab.hrcrm.dto.name.PartyNameType; 16 17 import com.lowagie.text.Document; 18 import com.lowagie.text.Table; 19 import com.lowagie.text.pdf.PdfWriter; 20 21 public class NamesPdfView<T> extends AbstractPdfView { 22 private NameAdaptor<T> nameAdaptor; 23 24 @Override 25 @SuppressWarnings( "unchecked" ) 26 protected void buildPdfDocument( final Map model, final Document document, final PdfWriter writer, 27 final HttpServletRequest request, final HttpServletResponse response ) throws Exception { 28 29 List<PartyNameType> partyNameTypes = (List<PartyNameType>) model.get( "partyNameTypes" ); 30 if( partyNameTypes.size() == 0 ) 31 throw new IllegalArgumentException( "Unable to generate pdf file. Dadabase is empty!" ); 32 33 T object = this.nameAdaptor.partyNameType2Name( partyNameTypes.get( 0 ) ); 34 Table table = generateTableStub( object ); 35 36 this.generateTableHeader( object, table ); 37 this.generateTableBody( partyNameTypes, table ); 38 39 document.add( table ); 40 } 41 42 43 /*** 44 * {@inheritDoc} 45 */ 46 @Override 47 @SuppressWarnings("unchecked") 48 protected void buildPdfMetadata( Map model, Document document, HttpServletRequest request ) { 49 document.addCreationDate(); 50 document.addAuthor( "HR-CRM Service" ); 51 document.addTitle( "All Available Party Names" ); 52 } 53 54 55 private Table generateTableStub( T object ) throws Exception { 56 Table table = new Table( object.getClass().getDeclaredFields().length ); 57 table.setWidth( 90 ); 58 table.setBorderWidth( 1 ); 59 table.setBorderColor( Color.BLACK ); 60 table.setBackgroundColor( Color.LIGHT_GRAY ); 61 table.setPadding( 3 ); 62 return table; 63 } 64 65 private void generateTableHeader( final T object, final Table table ) throws Exception { 66 Field[] fields = object.getClass().getDeclaredFields(); 67 for( Field field : fields ) { 68 field.setAccessible( true ); 69 table.addCell( field.getName().toUpperCase() ); 70 } 71 } 72 73 private void generateTableBody( final List<PartyNameType> partyNameTypes, final Table table ) throws Exception { 74 for( PartyNameType partyNameType : partyNameTypes ) { 75 T object = this.nameAdaptor.partyNameType2Name( partyNameType ); 76 Field[] fields = object.getClass().getDeclaredFields(); 77 for( Field field : fields ) { 78 field.setAccessible( true ); 79 table.addCell( String.valueOf( field.get( object ) ) ); 80 } 81 } 82 } 83 84 /*** 85 * Write access to private field. 86 * @param nameAdaptor 87 * The nameAdaptor to set. 88 */ 89 @Required 90 public void setNameAdaptor( final NameAdaptor<T> nameAdaptor ) { 91 this.nameAdaptor = nameAdaptor; 92 } 93 94 }