KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > jaspersoft > jasperserver > irplugin > RepositoryJrxmlFile


1 /*
2  * RepositoryFolder.java
3  *
4  * All rights reserved.
5  * Copyright (C) 2005 JasperSoft Corporation
6  *
7  * JasperSoft Corporation
8  * 303 Second Street, Suite 450 North
9  * San Francisco, CA 94107
10  * http://www.jaspersoft.com
11  *
12  *
13  * Created on April 1, 2006, 3:46 PM
14  *
15  */

16
17 package com.jaspersoft.jasperserver.irplugin;
18
19 import com.jaspersoft.jasperserver.api.metadata.xml.domain.impl.ResourceDescriptor;
20 import com.jaspersoft.jasperserver.irplugin.gui.jrxmlvalidator.ImageElementValidationItem;
21 import com.jaspersoft.jasperserver.irplugin.gui.jrxmlvalidator.JrxmlValidationDialog;
22 import com.sun.jmx.mbeanserver.Repository;
23 import it.businesslogic.ireport.CrosstabReportElement;
24 import it.businesslogic.ireport.ImageReportElement;
25 import it.businesslogic.ireport.JRProperty;
26 import it.businesslogic.ireport.Report;
27 import it.businesslogic.ireport.ReportElement;
28 import it.businesslogic.ireport.gui.JReportFrame;
29 import it.businesslogic.ireport.gui.MainFrame;
30 import it.businesslogic.ireport.gui.event.ReportFrameActivatedEvent;
31 import it.businesslogic.ireport.gui.event.ReportFrameActivatedListener;
32 import it.businesslogic.ireport.util.Misc;
33 import java.util.Enumeration JavaDoc;
34 import java.util.List JavaDoc;
35 import java.util.Vector JavaDoc;
36 import javax.swing.JInternalFrame JavaDoc;
37 import java.io.File JavaDoc;
38 import javax.swing.JOptionPane JavaDoc;
39
40
41 /**
42  *
43  * @author gtoffoli
44  */

45 public class RepositoryJrxmlFile extends RepositoryFile implements ReportFrameActivatedListener {
46
47     private JReportFrame reportFrame = null;
48     /** Creates a new instance of RepositoryFolder */
49     public RepositoryJrxmlFile(JServer server, ResourceDescriptor descriptor) {
50         super( server, descriptor);
51         MainFrame.getMainInstance().addReportFrameActivatedListener( this );
52     }
53
54     public String JavaDoc toString()
55     {
56         if (getDescriptor() != null)
57         {
58             return ""+getDescriptor().getLabel();
59         }
60         return "???";
61     }
62
63     public void reportFrameActivated(ReportFrameActivatedEvent reportFrameActivatedEvent) {
64         
65         
66         if (getReportFrame() == null) return;
67         if (reportFrameActivatedEvent.getReportFrame() == null)
68         {
69             // All frames are begin closed...
70
setReportFrame(null);
71             IRPlugin.getMainInstance().getRepositoryExplorer().updateToolBar();
72             return;
73         }
74         
75         // Check if the reportFrame is still open...
76
JInternalFrame JavaDoc[] frames = MainFrame.getMainInstance().getJMDIDesktopPane().getAllFrames();
77         
78         boolean found = false;
79         for (int i=0; i<frames.length; ++i)
80         {
81             if (frames[i] == getReportFrame())
82             {
83                 found = true;
84                 break;
85             }
86         }
87         if (!found)
88         {
89             setReportFrame(null);
90             IRPlugin.getMainInstance().getRepositoryExplorer().updateToolBar();
91         }
92         
93     }
94
95     public void editFile() throws Exception JavaDoc
96     {
97         if (getReportFrame() == null)
98         {
99             // Download the file...
100
// 1. Create a temp file name...
101
String JavaDoc tmpFileName = IRPlugin.createTmpFileName(this.getDescriptor().getName(),".jrxml");
102             getServer().getWSClient().get(this.getDescriptor(), new File JavaDoc(tmpFileName));
103             setReportFrame( MainFrame.getMainInstance().openFile( tmpFileName ) );
104             
105             // Load all images...
106
loadRepositoryImages(getReportFrame().getReport().getElements());
107         }
108         else
109         {
110             getReportFrame().setSelected(true);
111         }
112     }
113     
114     /**
115      * Try to load images with expression starting by repo: and type String...
116      * This method is recursice on crosstab elements...
117      */

118     protected void loadRepositoryImages(java.util.Vector JavaDoc elements)
119     {
120         Enumeration JavaDoc enumElements = elements.elements();
121         while (enumElements.hasMoreElements())
122         {
123             ReportElement re = (ReportElement)enumElements.nextElement();
124             if (re instanceof ImageReportElement)
125             {
126                 ImageReportElement ire = (ImageReportElement)re;
127                 //System.out.println("Getting image for:" + ire.getImageClass() + " / " + ire.getImageExpression());
128
String JavaDoc expression =ire.getImageExpression();
129                 expression = Misc.string_replace("\\","\\\\",expression);
130         expression = Misc.string_replace("","\"",expression);
131                 
132                 if ((ire.getImageClass().length() == 0 || ire.getImageClass().equals("java.lang.String")) &&
133                     expression.toLowerCase().startsWith("repo:"))
134                 {
135                     ResourceDescriptor rd = new ResourceDescriptor();
136                     expression = expression.substring(5);
137                     if (expression.startsWith("/"))
138                     {
139                         rd.setUriString(expression);
140                     }
141                     else
142                     {
143                         rd.setUriString(this.getDescriptor().getParentFolder() + "/" + expression);
144                     }
145                     //System.out.println("Getting:" + rd.getUriString());
146
RepositoryFile rf = new RepositoryFile(this.getServer(), rd);
147                     try {
148                         String JavaDoc imgFile = rf.getFile();
149                         if (imgFile != null)
150                         {
151                             javax.swing.ImageIcon JavaDoc img = new javax.swing.ImageIcon JavaDoc(imgFile);
152                             ire.setImg(img.getImage());
153                         }
154                     } catch (Exception JavaDoc ex)
155                     {
156                         ex.printStackTrace();
157                     }
158                 }
159             }
160             if (re instanceof CrosstabReportElement)
161             {
162                 loadRepositoryImages( ((CrosstabReportElement)re).getElements());
163             }
164         }
165         
166         
167     }
168     
169     public JReportFrame getReportFrame() {
170         return reportFrame;
171     }
172
173     public void setReportFrame(JReportFrame reportFrame) {
174         this.reportFrame = reportFrame;
175     }
176
177     /**
178      * way to check for references....
179      */

180     public boolean validateUrls(JServer server, RepositoryReportUnit repoUnit) {
181         
182         List JavaDoc imageElementValidationItems = new java.util.ArrayList JavaDoc();
183         
184         if (getReportFrame() != null)
185         {
186             Vector JavaDoc elements = getReportFrame().getReport().getElements();
187             for (int i=0; i<elements.size(); ++i)
188             {
189                 ReportElement re = (ReportElement) elements.elementAt(i);
190                 if (re instanceof ImageReportElement)
191                 {
192                     ImageReportElement ire = (ImageReportElement)re;
193                     
194                     String JavaDoc fname = ire.getImageExpression();
195                                 
196                     if (ire.getImageClass().equals("java.lang.String") &&
197                         !ire.getImageExpression().startsWith("\"repo:") &&
198                          fname.length()>3 &&
199                          fname.charAt(0)=='\"' &&
200                          fname.charAt(fname.length()-1 ) == '\"' &&
201                          !(ire.getImageExpression().indexOf("$F{") >= 0 ||
202                            ire.getImageExpression().indexOf("$P{") >= 0 ||
203                            ire.getImageExpression().indexOf("$V{") >= 0 ||
204                            ire.getImageExpression().indexOf("$R{") >= 0))
205                     {
206                         // try to resolve this file locally....
207

208                         fname = Misc.string_replace("\\","\\\\",fname);
209                         // Could be a file...
210
fname = Misc.string_replace("\\","\\\\",fname);
211             fname = Misc.string_replace("","\"",fname);
212                                 
213                         File JavaDoc f = new File JavaDoc( fname );
214                         if (f.exists())
215                         {
216                             ImageElementValidationItem ievi = new ImageElementValidationItem();
217                             ievi.setOriginalFileName( f );
218                             
219                             String JavaDoc name = getValidName( f.getName(), repoUnit );
220                             ievi.setResourceName( name );
221                             ievi.setProposedExpression("repo:" + name );
222                             ievi.setReportElement(ire);
223                             imageElementValidationItems.add(ievi);
224                         }
225                     }
226                 }
227             }
228             
229             Report report = getReportFrame().getReport();
230             boolean skipValidation = false;
231             for (int i=0; i< report.getJRproperties().size(); ++i)
232             {
233                 JRProperty prop = (JRProperty)report.getJRproperties().get(i);
234                 if (prop.getName() != null && prop.getName().equals("com.jaspersoft.irplugin.validation"))
235                 {
236                     if (prop.getValue().equals("0"))
237                     {
238                         skipValidation = true;
239                     }
240                     break;
241                 }
242             }
243             
244             if (imageElementValidationItems.size() > 0 && !skipValidation)
245             {
246                 JrxmlValidationDialog jvd = new JrxmlValidationDialog(MainFrame.getMainInstance(),true);
247                 jvd.setImageElementVelidationItems( imageElementValidationItems );
248                 jvd.setServer( server );
249                 jvd.setReportUnit( repoUnit );
250                 jvd.setReport( getReportFrame().getReport() );
251                 jvd.setVisible(true);
252                 
253                 if (jvd.getDialogResult() == JOptionPane.CANCEL_OPTION)
254                 {
255                     return false;
256                 }
257             }
258         }
259         
260         return true;
261         
262     }
263     
264     public String JavaDoc getValidName( String JavaDoc name, RepositoryReportUnit repoUnit)
265     {
266         return getValidName( name, repoUnit, 0);
267     }
268     
269     private String JavaDoc getValidName( String JavaDoc name, RepositoryReportUnit repoUnit, int k )
270     {
271         // Check if the name is duplicated....
272
String JavaDoc ext = "";
273         String JavaDoc base = name;
274         if (name.lastIndexOf(".") > 0)
275         {
276             ext = name.substring( name.lastIndexOf(".") );
277             base = name.substring(0, name.lastIndexOf(".") );
278         }
279         String JavaDoc newName = base + ( (k==0) ? "" : "-"+k) + ext;
280         
281         for (int i=0; i<repoUnit.getDescriptor().getChildren().size(); ++i)
282         {
283             ResourceDescriptor rd = (ResourceDescriptor) repoUnit.getDescriptor().getChildren().get(i);
284             if (rd.getName().equals(newName))
285             {
286                 return getValidName( name, repoUnit, ++k );
287             }
288         }
289         return newName;
290     }
291
292 }
293
Popular Tags