Jump to content

Percentage without jrxml


plapla

Recommended Posts

 

I m trying to instantiate percentage without jrxml. the users wants the percentage of cell not null in a column.

Im working with a extreme component table and with jasper i want  a pdf .

I have writed a new class which  extends JRAbstractExtendedIncrementerFactory

It works well if i want to obtain the percent of cell not null in one column , but in two column it s not ok .Someone can help me, please ?   Thanks

 

Code:
import java.math.BigDecimal;import java.sql.Timestamp;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import net.sf.jasperreports.engine.fill.AbstractValueProvider;import net.sf.jasperreports.engine.fill.JRAbstractExtendedIncrementer;import net.sf.jasperreports.engine.fill.JRAbstractExtendedIncrementerFactory;import net.sf.jasperreports.engine.fill.JRCalculable;import net.sf.jasperreports.engine.fill.JRDefaultIncrementerFactory;import net.sf.jasperreports.engine.fill.JRExtendedIncrementer; /** * nouvelleclasse pour implémenter le pourcentage non nulls *  * */public class CPJRPourcentageIncrementerFactory extends JRAbstractExtendedIncrementerFactory{		 	 	 	protected static final Long ZERO = new Long(0);						public JRExtendedIncrementer getExtendedIncrementer(byte calculation){		  if ( calculation == CPJRVariable.CALCULATION_POURCENTAGEDISTINCT  ) {		      return INCREMENTOR;		    }  else {		     throw new UnsupportedOperationException(		             "CPJRLongIncrementerFactory can only do pourcenbtage distinct calculations" );		    }		 		}		 		 		 public static JRExtendedIncrementer INCREMENTOR = new JRAbstractExtendedIncrementer() {		/**		 *on veut avoir (decomptenonnull/rowcount) 		 */			 		public  BigDecimal decomptenonnullValue ;		public   BigDecimal countValue  ; 		public Object className =null ;					 	public Object increment(			JRCalculable variable, 			Object expressionValue,			AbstractValueProvider valueProvider			)		{ 	Object result = variable.getIncrementedValue();			BigDecimal BigDecimalZero = new BigDecimal("0");			BigDecimal BigDecimalUn = new BigDecimal("1");			 			 if (decomptenonnullValue ==null)  {				 decomptenonnullValue=BigDecimalZero;			 }			 if (countValue ==null)  {				 countValue=BigDecimalZero;			 }			if (expressionValue != null) //|| expressionValue!=CPJRLongIncrementerFactory.ZERO)			{	className = expressionValue.getClass();			 			decomptenonnullValue= decomptenonnullValue.add(BigDecimalUn) ;			}			countValue=countValue.add(BigDecimalUn) ;				 			if (countValue.longValue()>0 &&className!=null){																System.out.println(decomptenonnullValue);				System.out.println(countValue);				System.out.println("(decomptenonnullValue/ countValue)*100");				BigDecimal result1 = new BigDecimal("0");				result1 = (decomptenonnullValue.divide(countValue,2,BigDecimal.ROUND_HALF_UP));				result1=result1.multiply(new BigDecimal("100"));				System.out.println((result1));			 if (java.math.BigDecimal.class.equals(className))					{						 	result= result1;						 					}			else if (						java.lang.Number.class.equals(className)						|| java.lang.Double.class.equals(className)						)					{						 	result= result1.doubleValue();						 					}			else if (java.lang.Float.class.equals(className))					{						 	result= result1.floatValue();						 					}			else if			  				  (java.lang.Long.class.equals(className))						{														 						 result= (result1.longValue());						 					}								 else if (java.lang.Integer.class.equals(className))				{					 	result= result1.intValue();					 				}				 else if (java.lang.Short.class.equals(className))				{					 	result= result1.shortValue();//ou exact??				}				else if (java.lang.Byte.class.equals(className))				{					 	result= result1.byteValue();//ou exact??				}				else if (java.lang.Boolean.class.equals(className))					{					 						result= result1.intValue();//ou exact??						result=new Boolean(result.toString());					}				else if (java.lang.String.class.equals(className))					{					 						result= result1.intValue();//ou exact??						result=new String(result.toString());					}			 				else if (java.sql.Timestamp.class.equals(className))					{					 						result= result1.intValue();//ou exact??						//SimpleDateFormat uneDateFormat = new SimpleDateFormat("dd");						 								//result=uneDateFormat.parse(result.toString());						result =new Timestamp(result1.longValue());						 					}			 					 				}			 return result;		}				public Object initialValue()		{	decomptenonnullValue =new BigDecimal(0);			countValue=new BigDecimal(0);			return CPJRPourcentageIncrementerFactory.ZERO;		} 	  		 } ; }
Link to comment
Share on other sites

  • 7 years later...
  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic

Hi, 

I have one question about Matrix/Crosstab reports in JasperReports. I would like to show Departmentwise, which Salesmen, Clerks, Analysts and Managers are working. For example, see below table. There are multiple values in Measure column.   Since, I am beginner and have no idea how to print multiple values in Measure field.   

I am getting single value means only name of one employee.  Not all clerks and salemen are displayed. Even though I choosed 'Nothing' option in the wizard for Measure Field.  

I have got an idea somehow that need to implement custom incrementer class and that will be used inside property 'Incrementer Factory class'. But unfortunately, no idea how to start and write that custom class using 'JRAbstractExtendedIncrementer' and 'JRExtendedIncrementer' interfaces.

Does anyone have any report sample using them or any other idea to display such information ??  

Looking forward to your replies.

 CLERKMANAGERPRESIDENTANALYSTSALESMAN
ACCOUNTINGMILLERCLARKKINGJAMESNull
RESEARCHADAMS
SMITH
PETER
JONESNullNullNull
SALESJAMESBLAKENullNullALLEN
MARTIN
TURNER
WARD

 

Thank you.

 

Regards,

Eddie

 
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...