added null check for attachment entry and move button state management to the auto preview method.

This commit is contained in:
Heng Sin Low 2011-01-19 13:11:01 +08:00
parent 4aef583e4f
commit 8675e83423
1 changed files with 125 additions and 118 deletions

View File

@ -57,7 +57,7 @@ import org.zkoss.zul.Hbox;
import org.zkoss.zul.Iframe; import org.zkoss.zul.Iframe;
/** /**
* *
* @author Low Heng Sin * @author Low Heng Sin
* *
*/ */
@ -72,10 +72,10 @@ public class WAttachment extends Window implements EventListener
/** Window No */ /** Window No */
private int m_WindowNo; private int m_WindowNo;
/** Attachment */ /** Attachment */
private MAttachment m_attachment; private MAttachment m_attachment;
/** Change */ /** Change */
private boolean m_change = false; private boolean m_change = false;
@ -94,13 +94,13 @@ public class WAttachment extends Window implements EventListener
private Button bCancel = new Button(); private Button bCancel = new Button();
private Button bOk = new Button(); private Button bOk = new Button();
private Button bRefresh = new Button(); private Button bRefresh = new Button();
private Panel previewPanel = new Panel(); private Panel previewPanel = new Panel();
private Borderlayout mainPanel = new Borderlayout(); private Borderlayout mainPanel = new Borderlayout();
private Hbox toolBar = new Hbox(); private Hbox toolBar = new Hbox();
private Hbox confirmPanel = new Hbox(); private Hbox confirmPanel = new Hbox();
private int displayIndex; private int displayIndex;
@ -125,12 +125,12 @@ public class WAttachment extends Window implements EventListener
* @param Record_ID record key * @param Record_ID record key
* @param trxName transaction * @param trxName transaction
*/ */
public WAttachment( int WindowNo, int AD_Attachment_ID, public WAttachment( int WindowNo, int AD_Attachment_ID,
int AD_Table_ID, int Record_ID, String trxName) int AD_Table_ID, int Record_ID, String trxName)
{ {
super(); super();
log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID); log.config("ID=" + AD_Attachment_ID + ", Table=" + AD_Table_ID + ", Record=" + Record_ID);
m_WindowNo = WindowNo; m_WindowNo = WindowNo;
@ -143,19 +143,19 @@ public class WAttachment extends Window implements EventListener
{ {
log.log(Level.SEVERE, "", ex); log.log(Level.SEVERE, "", ex);
} }
// Create Model // Create Model
if (AD_Attachment_ID == 0) if (AD_Attachment_ID == 0)
m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName); m_attachment = new MAttachment (Env.getCtx(), AD_Table_ID, Record_ID, trxName);
else else
m_attachment = new MAttachment (Env.getCtx(), AD_Attachment_ID, trxName); m_attachment = new MAttachment (Env.getCtx(), AD_Attachment_ID, trxName);
loadAttachments(); loadAttachments();
try try
{ {
setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
AEnv.showWindow(this); AEnv.showWindow(this);
if (autoPreview(0, true)) if (autoPreview(0, true))
{ {
@ -163,14 +163,14 @@ public class WAttachment extends Window implements EventListener
preview.getUuid() + "').src\", 1000)"; preview.getUuid() + "').src\", 1000)";
Clients.response(new AuScript(null, script)); Clients.response(new AuScript(null, script));
} }
//enter modal //enter modal
doModal(); doModal();
} }
catch (Exception e) catch (Exception e)
{ {
} }
} // WAttachment } // WAttachment
/** /**
@ -186,7 +186,7 @@ public class WAttachment extends Window implements EventListener
* </pre> * </pre>
* @throws Exception * @throws Exception
*/ */
void staticInit() throws Exception void staticInit() throws Exception
{ {
this.setMaximizable(true); this.setMaximizable(true);
@ -198,22 +198,22 @@ public class WAttachment extends Window implements EventListener
this.setBorder("normal"); this.setBorder("normal");
this.appendChild(mainPanel); this.appendChild(mainPanel);
mainPanel.setHeight("100%"); mainPanel.setHeight("100%");
mainPanel.setWidth("100%"); mainPanel.setWidth("100%");
North northPanel = new North(); North northPanel = new North();
northPanel.setCollapsible(false); northPanel.setCollapsible(false);
northPanel.setSplittable(false); northPanel.setSplittable(false);
cbContent.setMold("select"); cbContent.setMold("select");
cbContent.setRows(0); cbContent.setRows(0);
cbContent.addEventListener(Events.ON_SELECT, this); cbContent.addEventListener(Events.ON_SELECT, this);
toolBar.appendChild(bLoad); toolBar.appendChild(bLoad);
toolBar.appendChild(bDelete); toolBar.appendChild(bDelete);
toolBar.appendChild(bSave); toolBar.appendChild(bSave);
toolBar.appendChild(cbContent); toolBar.appendChild(cbContent);
toolBar.appendChild(sizeLabel); toolBar.appendChild(sizeLabel);
mainPanel.appendChild(northPanel); mainPanel.appendChild(northPanel);
Div div = new Div(); Div div = new Div();
div.appendChild(toolBar); div.appendChild(toolBar);
@ -221,7 +221,7 @@ public class WAttachment extends Window implements EventListener
text.setWidth("100%"); text.setWidth("100%");
div.appendChild(text); div.appendChild(text);
northPanel.appendChild(div); northPanel.appendChild(div);
bSave.setEnabled(false); bSave.setEnabled(false);
bSave.setImage("/images/Export24.png"); bSave.setImage("/images/Export24.png");
bSave.setTooltiptext(Msg.getMsg(Env.getCtx(), "AttachmentSave")); bSave.setTooltiptext(Msg.getMsg(Env.getCtx(), "AttachmentSave"));
@ -238,30 +238,30 @@ public class WAttachment extends Window implements EventListener
previewPanel.appendChild(preview); previewPanel.appendChild(preview);
preview.setHeight("100%"); preview.setHeight("100%");
preview.setWidth("100%"); preview.setWidth("100%");
Center centerPane = new Center(); Center centerPane = new Center();
centerPane.setAutoscroll(true); centerPane.setAutoscroll(true);
centerPane.setFlex(true); centerPane.setFlex(true);
mainPanel.appendChild(centerPane); mainPanel.appendChild(centerPane);
centerPane.appendChild(previewPanel); centerPane.appendChild(previewPanel);
South southPane = new South(); South southPane = new South();
mainPanel.appendChild(southPane); mainPanel.appendChild(southPane);
southPane.appendChild(confirmPanel); southPane.appendChild(confirmPanel);
southPane.setHeight("30px"); southPane.setHeight("30px");
bCancel.setImage("/images/Cancel24.png"); bCancel.setImage("/images/Cancel24.png");
bCancel.addEventListener(Events.ON_CLICK, this); bCancel.addEventListener(Events.ON_CLICK, this);
bOk.setImage("/images/Ok24.png"); bOk.setImage("/images/Ok24.png");
bOk.addEventListener(Events.ON_CLICK, this); bOk.addEventListener(Events.ON_CLICK, this);
bDeleteAll.setImage("/images/Delete24.png"); bDeleteAll.setImage("/images/Delete24.png");
bDeleteAll.addEventListener(Events.ON_CLICK, this); bDeleteAll.addEventListener(Events.ON_CLICK, this);
bRefresh.setImage("/images/Refresh24.png"); bRefresh.setImage("/images/Refresh24.png");
bRefresh.addEventListener(Events.ON_CLICK, this); bRefresh.addEventListener(Events.ON_CLICK, this);
confirmPanel.appendChild(bDeleteAll); confirmPanel.appendChild(bDeleteAll);
confirmPanel.appendChild(bRefresh); confirmPanel.appendChild(bRefresh);
confirmPanel.appendChild(bCancel); confirmPanel.appendChild(bCancel);
@ -269,70 +269,83 @@ public class WAttachment extends Window implements EventListener
text.setTooltiptext(Msg.getElement(Env.getCtx(), "TextMsg")); text.setTooltiptext(Msg.getElement(Env.getCtx(), "TextMsg"));
} }
/** /**
* Dispose * Dispose
*/ */
public void dispose () public void dispose ()
{ {
preview = null; preview = null;
this.detach(); this.detach();
} // dispose } // dispose
/** /**
* Load Attachments * Load Attachments
*/ */
private void loadAttachments() private void loadAttachments()
{ {
log.config(""); log.config("");
// Set Text/Description // Set Text/Description
String sText = m_attachment.getTextMsg(); String sText = m_attachment.getTextMsg();
if (sText == null) if (sText == null)
text .setText(""); text .setText("");
else else
text.setText(sText); text.setText(sText);
// Set Combo // Set Combo
int size = m_attachment.getEntryCount(); int size = m_attachment.getEntryCount();
for (int i = 0; i < size; i++) for (int i = 0; i < size; i++)
cbContent.appendItem(m_attachment.getEntryName(i), m_attachment.getEntryName(i)); cbContent.appendItem(m_attachment.getEntryName(i), m_attachment.getEntryName(i));
if (size > 0) if (size > 0)
{ {
cbContent.setSelectedIndex(0); cbContent.setSelectedIndex(0);
} }
} // loadAttachment } // loadAttachment
private boolean autoPreview(int index, boolean immediate) private boolean autoPreview(int index, boolean immediate)
{ {
MAttachmentEntry entry = m_attachment.getEntry(index); MAttachmentEntry entry = m_attachment.getEntry(index);
String mimeType = entry.getContentType(); if (entry != null)
byte[] data = entry.getData();
String unit = " KB";
BigDecimal size = new BigDecimal(data != null ? data.length : 0);
size = size.divide(new BigDecimal("1024"));
if (size.compareTo(new BigDecimal("1024")) >= 0)
{ {
String mimeType = entry.getContentType();
byte[] data = entry.getData();
String unit = " KB";
BigDecimal size = new BigDecimal(data != null ? data.length : 0);
size = size.divide(new BigDecimal("1024")); size = size.divide(new BigDecimal("1024"));
unit = " MB"; if (size.compareTo(new BigDecimal("1024")) >= 0)
} {
size = size.setScale(2, BigDecimal.ROUND_HALF_EVEN); size = size.divide(new BigDecimal("1024"));
sizeLabel.setText(size.toPlainString() + unit); unit = " MB";
if (autoPreviewList.contains(mimeType)) }
{ size = size.setScale(2, BigDecimal.ROUND_HALF_EVEN);
displayData(index, immediate); sizeLabel.setText(size.toPlainString() + unit);
return true;
bSave.setEnabled(true);
bDelete.setEnabled(true);
if (autoPreviewList.contains(mimeType))
{
displayData(index, immediate);
return true;
}
else
{
return false;
}
} }
else else
{ {
bSave.setEnabled(false);
bDelete.setEnabled(false);
return false; return false;
} }
} }
@ -341,15 +354,12 @@ public class WAttachment extends Window implements EventListener
* Display gif or jpg in gifPanel * Display gif or jpg in gifPanel
* @param index index * @param index index
*/ */
private void displayData (int index, boolean immediate) private void displayData (int index, boolean immediate)
{ {
// Reset UI // Reset UI
preview.setSrc(null); preview.setSrc(null);
bDelete.setEnabled(false);
bSave.setEnabled(false);
displayIndex = index; displayIndex = index;
if (immediate) if (immediate)
@ -368,20 +378,17 @@ public class WAttachment extends Window implements EventListener
* Use to refresh preview frame, don't call directly. * Use to refresh preview frame, don't call directly.
*/ */
public void displaySelected() { public void displaySelected() {
MAttachmentEntry entry = m_attachment.getEntry(displayIndex); MAttachmentEntry entry = m_attachment.getEntry(displayIndex);
log.config("Index=" + displayIndex + " - " + entry); log.config("Index=" + displayIndex + " - " + entry);
if (entry != null && entry.getData() != null) if (entry != null && entry.getData() != null)
{ {
bSave.setEnabled(true);
bDelete.setEnabled(true);
log.config(entry.toStringX()); log.config(entry.toStringX());
try try
{ {
String contentType = entry.getContentType(); String contentType = entry.getContentType();
AMedia media = new AMedia(entry.getName(), null, contentType, entry.getData()); AMedia media = new AMedia(entry.getName(), null, contentType, entry.getData());
preview.setContent(media); preview.setContent(media);
preview.setVisible(true); preview.setVisible(true);
preview.invalidate(); preview.invalidate();
@ -392,23 +399,23 @@ public class WAttachment extends Window implements EventListener
} }
} }
} }
/** /**
* Get File Name with index * Get File Name with index
* @param index index * @param index index
* @return file name or null * @return file name or null
*/ */
private String getFileName (int index) private String getFileName (int index)
{ {
String fileName = null; String fileName = null;
if (cbContent.getItemCount() > index) if (cbContent.getItemCount() > index)
{ {
ListItem listitem = cbContent.getItemAtIndex(index); ListItem listitem = cbContent.getItemAtIndex(index);
fileName = (String)listitem.getValue(); fileName = (String)listitem.getValue();
} }
return fileName; return fileName;
} // getFileName } // getFileName
@ -416,26 +423,26 @@ public class WAttachment extends Window implements EventListener
* Action Listener * Action Listener
* @param e event * @param e event
*/ */
public void onEvent(Event e) public void onEvent(Event e)
{ {
// Save and Close // Save and Close
if (e.getTarget() == bOk) if (e.getTarget() == bOk)
{ {
String newText = text.getText(); String newText = text.getText();
if (newText == null) if (newText == null)
newText = ""; newText = "";
String oldText = m_attachment.getTextMsg(); String oldText = m_attachment.getTextMsg();
if (oldText == null) if (oldText == null)
oldText = ""; oldText = "";
if (!m_change) if (!m_change)
m_change = !newText.equals(oldText); m_change = !newText.equals(oldText);
if (newText.length() > 0 || m_attachment.getEntryCount() > 0) if (newText.length() > 0 || m_attachment.getEntryCount() > 0)
{ {
if (m_change) if (m_change)
@ -447,92 +454,92 @@ public class WAttachment extends Window implements EventListener
} }
else else
m_attachment.delete(true); m_attachment.delete(true);
dispose(); dispose();
} }
// Cancel // Cancel
else if (e.getTarget() == bCancel) else if (e.getTarget() == bCancel)
{ {
dispose(); dispose();
} }
// Delete Attachment // Delete Attachment
else if (e.getTarget() == bDeleteAll) else if (e.getTarget() == bDeleteAll)
{ {
deleteAttachment(); deleteAttachment();
dispose(); dispose();
} }
// Delete individual entry and Return // Delete individual entry and Return
else if (e.getTarget() == bDelete) else if (e.getTarget() == bDelete)
deleteAttachmentEntry(); deleteAttachmentEntry();
// Show Data // Show Data
else if (e.getTarget() == cbContent) else if (e.getTarget() == cbContent)
{ {
clearPreview(); clearPreview();
autoPreview (cbContent.getSelectedIndex(), false); autoPreview (cbContent.getSelectedIndex(), false);
} }
// Load Attachment // Load Attachment
else if (e.getTarget() == bLoad) else if (e.getTarget() == bLoad)
loadFile(); loadFile();
// Open Attachment // Open Attachment
else if (e.getTarget() == bSave) else if (e.getTarget() == bSave)
saveAttachmentToFile(); saveAttachmentToFile();
else if (e.getTarget() == bRefresh) else if (e.getTarget() == bRefresh)
displayData(cbContent.getSelectedIndex(), true); displayData(cbContent.getSelectedIndex(), true);
} // onEvent } // onEvent
/************************************************************************** /**************************************************************************
* Load file for attachment * Load file for attachment
*/ */
private void loadFile() private void loadFile()
{ {
log.info(""); log.info("");
preview.setVisible(false); preview.setVisible(false);
Media media = null; Media media = null;
try try
{ {
media = Fileupload.get(true); media = Fileupload.get(true);
if (media != null) if (media != null)
{ {
// pdfViewer.setContent(media); // pdfViewer.setContent(media);
; ;
} }
else else
{ {
preview.setVisible(true); preview.setVisible(true);
preview.invalidate(); preview.invalidate();
return; return;
} }
} }
catch (InterruptedException e) catch (InterruptedException e)
{ {
log.log(Level.WARNING, e.getLocalizedMessage(), e); log.log(Level.WARNING, e.getLocalizedMessage(), e);
} }
String fileName = media.getName(); String fileName = media.getName();
log.config(fileName); log.config(fileName);
int cnt = m_attachment.getEntryCount(); int cnt = m_attachment.getEntryCount();
//update //update
for (int i = 0; i < cnt; i++) for (int i = 0; i < cnt; i++)
{ {
if (m_attachment.getEntryName(i).equals(fileName)) if (m_attachment.getEntryName(i).equals(fileName))
{ {
@ -544,8 +551,8 @@ public class WAttachment extends Window implements EventListener
return; return;
} }
} }
//new //new
if (m_attachment.addEntry(fileName, getMediaData(media))) if (m_attachment.addEntry(fileName, getMediaData(media)))
{ {
cbContent.appendItem(media.getName(), media.getName()); cbContent.appendItem(media.getName(), media.getName());
@ -558,10 +565,10 @@ public class WAttachment extends Window implements EventListener
private byte[] getMediaData(Media media) { private byte[] getMediaData(Media media) {
byte[] bytes = null; byte[] bytes = null;
if (media.inMemory()) if (media.inMemory())
bytes = media.getByteData(); bytes = media.getByteData();
else { else {
InputStream is = media.getStreamData(); InputStream is = media.getStreamData();
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[ 1000 ]; byte[] buf = new byte[ 1000 ];
@ -575,7 +582,7 @@ public class WAttachment extends Window implements EventListener
} }
bytes = baos.toByteArray(); bytes = baos.toByteArray();
} }
return bytes; return bytes;
} }
@ -585,7 +592,7 @@ public class WAttachment extends Window implements EventListener
private void deleteAttachment() private void deleteAttachment()
{ {
log.info(""); log.info("");
if (FDialog.ask(m_WindowNo, this, "AttachmentDelete?")) if (FDialog.ask(m_WindowNo, this, "AttachmentDelete?"))
m_attachment.delete(true); m_attachment.delete(true);
} // deleteAttachment } // deleteAttachment
@ -593,14 +600,14 @@ public class WAttachment extends Window implements EventListener
/** /**
* Delete Attachment Entry * Delete Attachment Entry
*/ */
private void deleteAttachmentEntry() private void deleteAttachmentEntry()
{ {
log.info(""); log.info("");
int index = cbContent.getSelectedIndex(); int index = cbContent.getSelectedIndex();
String fileName = getFileName(index); String fileName = getFileName(index);
if (fileName == null) if (fileName == null)
return; return;
@ -608,7 +615,7 @@ public class WAttachment extends Window implements EventListener
{ {
if (m_attachment.deleteEntry(index)) if (m_attachment.deleteEntry(index))
cbContent.removeItemAt(index); cbContent.removeItemAt(index);
m_change = true; m_change = true;
} }
} // deleteAttachment } // deleteAttachment
@ -616,12 +623,12 @@ public class WAttachment extends Window implements EventListener
/** /**
* Save Attachment to File * Save Attachment to File
*/ */
private void saveAttachmentToFile() private void saveAttachmentToFile()
{ {
int index = cbContent.getSelectedIndex(); int index = cbContent.getSelectedIndex();
log.info("index=" + index); log.info("index=" + index);
if (m_attachment.getEntryCount() < index) if (m_attachment.getEntryCount() < index)
return; return;