1 /*
2  * JasperReports - Free Java Reporting Library.
3  * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
4  * http://www.jaspersoft.com
5  *
6  * Unless you have purchased a commercial license agreement from Jaspersoft,
7  * the following license terms apply:
8  *
9  * This program is part of JasperReports.
10  *
11  * JasperReports is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * JasperReports is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
23  */

24 package net.sf.jasperreports.components.barbecue;
25
26 import java.awt.Dimension;
27 import java.awt.Graphics2D;
28 import java.awt.geom.AffineTransform;
29 import java.awt.geom.Dimension2D;
30 import java.awt.geom.Rectangle2D;
31
32 import net.sf.jasperreports.engine.JRRuntimeException;
33 import net.sf.jasperreports.engine.JasperReportsContext;
34 import net.sf.jasperreports.engine.type.RotationEnum;
35 import net.sf.jasperreports.renderers.AbstractRenderer;
36 import net.sf.jasperreports.renderers.DimensionRenderable;
37 import net.sf.jasperreports.renderers.Graphics2DRenderable;
38 import net.sourceforge.barbecue.Barcode;
39 import net.sourceforge.barbecue.output.OutputException;
40
41
42 /**
43  * 
44  * @author Lucian Chirita (lucianc@users.sourceforge.net)
45  */

46 public class BarbecueRendererImpl extends AbstractRenderer implements Graphics2DRenderable, DimensionRenderable
47 {
48
49     private static final long serialVersionUID = 1L;
50     
51     private Barcode barcode;
52     
53     private RotationEnum rotation;
54
55     public BarbecueRendererImpl(Barcode barcode) 
56     {
57         this.barcode = barcode;
58     }
59     
60     @Override
61     public Dimension2D getDimension(JasperReportsContext jasperReportsContext)
62     {
63         if (rotation != null
64         {
65             switch(rotation)
66             {
67                 case LEFT:
68                 case RIGHT:
69                     return new Dimension((int)barcode.getSize().getHeight(),(int)barcode.getSize().getWidth());
70                 default:
71                     return barcode.getSize();
72             }
73         } else 
74         {
75             return barcode.getSize();
76         }
77     }
78
79     @Override
80     public void render(JasperReportsContext jasperReportsContext, Graphics2D grx, Rectangle2D rectangle) 
81     {
82         AffineTransform origTransform = grx.getTransform();
83         try
84         {
85             Dimension size = barcode.getSize();
86
87             if (rotation != null)
88             {
89                 switch (rotation)
90                 {
91                     case LEFT:
92                         grx.translate(rectangle.getX(), rectangle.getY() + rectangle.getHeight());
93                         grx.rotate((-1) * Math.PI / 2);
94                         if (rectangle.getWidth() != size.getHeight() 
95                                 || rectangle.getHeight() != size.getWidth())
96                         {
97                             grx.scale(rectangle.getHeight() / size.getWidth(), 
98                                     rectangle.getWidth() / size.getHeight());
99                             
100                         }
101                         break;
102                     case RIGHT: 
103                         grx.translate(rectangle.getX() + rectangle.getWidth(), rectangle.getY());
104                         grx.rotate(Math.PI / 2);
105                         if (rectangle.getWidth() != size.getHeight() 
106                                 || rectangle.getHeight() != size.getWidth())
107                         {
108                             grx.scale(rectangle.getHeight() / size.getWidth(), 
109                                     rectangle.getWidth() / size.getHeight());
110                             
111                         }
112                         break;
113                     case UPSIDE_DOWN:
114                         grx.translate(rectangle.getX() + rectangle.getWidth(), rectangle.getY() + rectangle.getHeight());
115                         grx.rotate(Math.PI);
116                         if (rectangle.getWidth() != size.getWidth() 
117                                 || rectangle.getHeight() != size.getHeight())
118                         {
119                             grx.scale(rectangle.getWidth() / size.getWidth(), 
120                                     rectangle.getHeight() / size.getHeight());
121                         }
122                         break;
123                     case NONE:
124                         grx.translate(rectangle.getX(), rectangle.getY());
125                         if (rectangle.getWidth() != size.getWidth() 
126                                 || rectangle.getHeight() != size.getHeight())
127                         {
128                             grx.scale(rectangle.getWidth() / size.getWidth(), 
129                                     rectangle.getHeight() / size.getHeight());
130                         }
131                         break;
132                 }
133             } else
134             {
135                 grx.translate(rectangle.getX(), rectangle.getY());
136                 if (rectangle.getWidth() != size.getWidth() 
137                         || rectangle.getHeight() != size.getHeight())
138                 {
139                     grx.scale(rectangle.getWidth() / size.getWidth(), 
140                             rectangle.getHeight() / size.getHeight());
141                 }
142             }
143             
144             barcode.draw(grx, 0, 0);
145         }
146         catch (OutputException e)
147         {
148             throw new JRRuntimeException(e);
149         }
150         finally
151         {
152             grx.setTransform(origTransform);
153         }
154     }
155     
156     public void setRotation(RotationEnum rotation){
157         this.rotation = rotation;
158     }
159     
160 }
161