KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > compiere > model > MImage


1 /******************************************************************************
2  * The contents of this file are subject to the Compiere License Version 1.1
3  * ("License"); You may not use this file except in compliance with the License
4  * You may obtain a copy of the License at http://www.compiere.org/license.html
5  * Software distributed under the License is distributed on an "AS IS" basis,
6  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
7  * the specific language governing rights and limitations under the License.
8  * The Original Code is Compiere ERP & CRM Business Solution
9  * The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
10  * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts
11  * created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
12  * Contributor(s): ______________________________________.
13  *****************************************************************************/

14 package org.compiere.model;
15
16 import java.awt.*;
17 import java.util.*;
18 import java.sql.*;
19 import java.io.*;
20 import javax.swing.*;
21
22 import org.compiere.util.*;
23
24 /**
25  * Image Model
26  * (DisplayType = 32)
27  *
28  * @author Jorg Janke
29  * @version $Id: MImage.java,v 1.7 2002/08/14 02:26:10 jjanke Exp $
30  */

31 public class MImage extends PO
32 {
33     /**
34      * Constructor
35      * @param ctx context
36      * @param AD_Image_ID image
37      */

38     public MImage(Properties ctx, int AD_Image_ID)
39     {
40         super (ctx, AD_Image_ID);
41         if (AD_Image_ID < 1)
42             setName("-/-");
43     } // MImage
44

45     /** The Image */
46     private ImageIcon m_image = null;
47     /** The Image File */
48     private File m_file = null;
49
50     /**
51      * Load
52      * @param ctx context
53      * @return POInfo PO Info
54      */

55     protected POInfo initPO (Properties ctx)
56     {
57         int AD_Table_ID = 461;
58         return POInfo.getPOInfo (ctx, AD_Table_ID);
59     } // MImage
60

61     /**
62      * Get Name
63      * @return Name
64      */

65     public String JavaDoc getName()
66     {
67         return (String JavaDoc)getValue("Name");
68     } // getName
69

70     /**
71      * Set Name
72      * @param newName name
73      */

74     public void setName (String JavaDoc newName)
75     {
76         String JavaDoc fileName = newName;
77         if (fileName.length() > 60)
78             fileName = "..." + fileName.substring(fileName.length()-60+3);
79         setValue("Name", fileName);
80     } // setName
81

82     /**
83      * Set ImageURL
84      * @param newURL url
85      */

86     public void setImageURL (String JavaDoc newURL)
87     {
88         String JavaDoc url = newURL;
89         if (url.length() > 256)
90             url = "..." + url.substring(url.length()-256+3);
91         setValue("ImageURL", url);
92     } // setImageURL
93

94     /**
95      * Get Image
96      * @return Image
97      */

98     public ImageIcon getImage()
99     {
100         return m_image;
101     } // getImage
102

103     /**
104      * String Representation
105      * @return String
106      */

107     public String JavaDoc toString()
108     {
109         return "MImage[ID=" + getID() + ",Name=" + getName() + "]";
110     } // toString
111

112     /**
113      * Load Special data (images, ..).
114      * To be extended by sub-classes
115      * @param rs result set
116      * @param index zero based index
117      * @return value
118      * @throws SQLException
119      */

120     protected Object JavaDoc loadSpecial (ResultSet rs, int index) throws SQLException
121     {
122         Log.trace(Log.l4_Data, "MImage.loadSpecial", p_info.getColumnName(index));
123
124         // BLOB
125
int length = 0;
126         try
127         {
128             Blob blob = rs.getBlob(index);
129             length = (int)blob.length();
130             if (length > 0)
131             {
132                 byte[] data = blob.getBytes(1, length);
133             // Image image = Toolkit.getDefaultToolkit().createImage(data);
134
m_image = new ImageIcon(data);
135                 if (m_image == null)
136                     Log.error("MImage.loadSpecial - Image not created - BLOB length = " + length);
137                 else
138                     Log.trace(Log.l6_Database, "Image loaded", "BLOB length = " + length
139                         + ", h=" + m_image.getIconHeight() + ", w=" + m_image.getIconWidth());
140             }
141             else
142                 Log.trace(Log.l6_Database, "BLOB not Loaded - length=" + length);
143         }
144         catch (SQLException e)
145         {
146             Log.error("MImage.loadSpecial - BLOB length = " + length, e);
147         }
148         catch (Exception JavaDoc e1)
149         {
150             Log.error("MImage.loadSpecial - BLOB length = " + length, e1);
151         }
152         return m_image;
153     } // loadSpecial
154

155     /**
156      * Save Special Data
157      * @param value value
158      * @param index index
159      * @return SQL code for INSERT VALUES clause
160      */

161     protected String JavaDoc saveNewSpecial (Object JavaDoc value, int index)
162     {
163         Log.trace(Log.l5_DData, "MImage.saveNewSpecial", p_info.getColumnName(index));
164         return "Empty_BLOB()";
165     } // saveNewSpecial
166

167     /**
168      * Set Image file to load; Set before saving
169      * @param imageFile file
170      */

171     public void setImageFile (File imageFile)
172     {
173         if (imageFile != null && (imageFile.isDirectory() || !imageFile.exists()))
174             throw new IllegalArgumentException JavaDoc ("MImage.setImageFile - Invalid File " + imageFile.toString());
175         m_file = imageFile;
176     } // setImageFile
177

178
179     /**
180      * Save only when a imageFile is set
181      * @return true if saved
182      */

183     public boolean save()
184     {
185         if (m_file != null)
186             return super.save();
187         return true;
188     } // save
189

190     /**
191      * Save new or update complete.
192      * Save Image from file.
193      * @param newRecord new record
194      * @param success success
195      * @return true if saved
196      */

197     protected boolean saveComplete (boolean newRecord, boolean success)
198     {
199         // do nothing if previous command failed or no image file there
200
if (!success || m_file == null)
201             return success;
202         Log.trace(Log.l4_Data, "MImage.saveComplete - Save Image to BLOB", "Success=" + success);
203
204         String JavaDoc sql = "SELECT BinaryData FROM AD_Image WHERE AD_Image_ID=? FOR UPDATE";
205         try
206         {
207             Connection con = DB.createConnection(false, Connection.TRANSACTION_SERIALIZABLE);
208             PreparedStatement pstmt = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
209             pstmt.setInt(1, getID());
210             ResultSet rs = pstmt.executeQuery();
211             if (rs.next())
212             {
213                 Blob blob = rs.getBlob(1);
214                 long blobLength = blob.length();
215                 Log.trace(Log.l5_DData, "MImage.saveComplete blob - "
216                     + m_file.getAbsolutePath() + ", Size=" + m_file.length()
217                     + ", BLOB length=" + blobLength);
218                 try
219                 {
220                     FileInputStream fis = new FileInputStream (m_file);
221                     byte[] buffer = new byte[1024]; // 1k Buffer
222
int length = -1;
223                     long pos = 1l;
224                     while ((length = fis.read(buffer)) != -1)
225                     {
226                         int written = blob.setBytes(pos, buffer);
227                         pos += written;
228                     }
229                     fis.close();
230                     Log.trace(Log.l6_Database, "New length=" + blob.length());
231                 }
232                 catch (IOException ioe)
233                 {
234                     Log.error("MImage.saveComplete (blob-io)", ioe);
235                     success = false;
236                 }
237             }
238             else
239             {
240                 Log.error("MImage.saveComplete - No Record for BLOB");
241                 success = false;
242             }
243             rs.close();
244             pstmt.close();
245             con.close();
246         }
247         catch (SQLException e)
248         {
249             Log.error("MImage.saveComplete", e);
250             success = false;
251         }
252
253         return success;
254     } // saveComplete
255

256 } // MImage
257
Popular Tags