/** * Copyright (c) 2009 Juwi MacMillan Group GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.juwimm.cms.content.panel; import static de.juwimm.cms.client.beans.Application.getBean; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.SystemColor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.io.File; import java.io.FileInputStream; import java.util.Enumeration; import java.util.ResourceBundle; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileFilter; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import de.juwimm.cms.Messages; import de.juwimm.cms.client.beans.Beans; import de.juwimm.cms.common.Constants; import de.juwimm.cms.common.UserRights; import de.juwimm.cms.content.ContentManager; import de.juwimm.cms.content.event.EditpaneFiredEvent; import de.juwimm.cms.content.event.EditpaneFiredListener; import de.juwimm.cms.content.frame.DlgPdfDocumentPassword; import de.juwimm.cms.content.frame.DlgSaveDocument; import de.juwimm.cms.content.frame.helper.DocumentFilter; import de.juwimm.cms.content.frame.helper.ImagePreview; import de.juwimm.cms.content.frame.helper.Utils; import de.juwimm.cms.content.panel.util.DocumentPreviewComponent; import de.juwimm.cms.content.panel.util.PdfPreviewFrame; import de.juwimm.cms.exceptions.InvalidSizeException; import de.juwimm.cms.gui.FrmProgressDialog; import de.juwimm.cms.gui.controls.FileTransferHandler; import de.juwimm.cms.gui.table.DocumentTableModel; import de.juwimm.cms.gui.table.TableSorter; import de.juwimm.cms.gui.views.PanContentView; import de.juwimm.cms.util.Communication; import de.juwimm.cms.util.PdfUtils; import de.juwimm.cms.util.UIConstants; import de.juwimm.cms.vo.DocumentSlimValue; import de.juwimm.cms.vo.DocumentValue; /** * * @author <a href="sascha-matthias.kulawik@juwimm.com">Sascha-Matthias Kulawik</a> * @author <a href="carsten.schalm@juwimm.com">Carsten Schalm</a> * @version $Id$ */ public class PanDocuments extends JPanel implements EditpaneFiredListener{ private static Logger log = Logger.getLogger(PanDocuments.class); private static final int COMBO_REGION_UNIT=0; private static final int COMBO_REGION_SITE=1; private static final int COMBO_REGION_VIEWCOMPONENT=2; private final ResourceBundle rb = Constants.rb; private Integer intDocId; private final JPanel panBottom = new JPanel(); private final JButton btnDelete = new JButton(); private final JScrollPane scrollPane = new JScrollPane(); private final JPanel panDocumentButtons = new JPanel(); private final FlowLayout panDocumentsLayout = new FlowLayout(); private final JPanel panFileAction = new JPanel(); private ButtonGroup bgrp = new ButtonGroup(); private final Integer intActUnit; private final Integer intRootUnit; private int anzahlItems; private final Communication comm = ((Communication) getBean(Beans.COMMUNICATION)); private final ContentManager contentManager = ((ContentManager) getBean(Beans.CONTENT_MANAGER)); private final JComboBox cboRegion = new JComboBox(); private final JButton btnAdd = new JButton(); private final JButton btnUpdate = new JButton(); private final JButton btnPreview = new JButton(); private final JPanel panLinkName = new JPanel(); private final JTextField txtDocumentLabel = new JTextField(); private final JLabel lbDocumentLabel = new JLabel(); private final JTextField txtDocumentDescription = new JTextField(); private final JLabel lbDocumentDescription = new JLabel(); private final JTextField txtAuthor = new JTextField(); private final JLabel lbAuthor = new JLabel(); private final JTextField txtCategory = new JTextField(); private final JLabel lbCategory = new JLabel(); private final JCheckBox ckbDocumentSearchable = new JCheckBox(); private final JTextField txtLinkDesc = new JTextField(); private final JLabel lbLinkDescription = new JLabel(); private final GridBagLayout panLinkNameLayout = new GridBagLayout(); private final JCheckBox cbxDisplayTypeInline = new JCheckBox(); private final JTable tblDocuments = new JTable(); private DocumentTableModel tblDocumentsModel = null; private TableSorter tblDocumentSorter = null; private PanViewSelect panViewSelect = null; private JToggleButton btnListView = null; private JToggleButton btnSymbolView = null; private int maxButtonWidth = 0; private boolean isDataActualization = false; boolean showRegionCombo = true; boolean showDocumentProperties=true; private String selectedDocName; private String mimeType = ""; private Integer viewComponentId; public PanDocuments(boolean showRegionCombo, boolean showDocumentProperties) { this.showRegionCombo = showRegionCombo; this.showDocumentProperties=showDocumentProperties; viewComponentId = PanContentView.getInstance().getViewComponent().getViewComponentId(); try { jbInit(); tblDocuments.getSelectionModel().addListSelectionListener(new DocumentListSelectionListener()); tblDocuments.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); btnDelete.setText(Messages.getString("panel.content.documents.deleteDocument")); btnAdd.setText(Messages.getString("panel.content.documents.addDocument")); btnPreview.setText(Messages.getString("dialog.preview")); btnUpdate.setText(Messages.getString("panel.content.documents.updateDocument")); btnUpdate.setVisible(false); lbLinkDescription.setText(Messages.getString("panel.content.documents.linkdescription")); lbDocumentLabel.setText(Messages.getString("panel.content.documents.documentLabel")); lbDocumentDescription.setText(Messages.getString("panel.content.documents.documentDescription")); lbAuthor.setText(Messages.getString("panel.content.documents.author")); lbCategory.setText(Messages.getString("panel.content.documents.category")); ckbDocumentSearchable.setText(Messages.getString("panel.content.documents.documentSearchable")); ckbDocumentSearchable.setSelected(true); cbxDisplayTypeInline.setText(rb.getString("content.modules.externalLink.displayTypeInline")); } catch (Exception exe) { log.error("Initialization error", exe); } this.panDocumentButtons.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { resizeScrollpane(); } }); this.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { resizeScrollpane(); } }); intActUnit = new Integer(((ContentManager) getBean(Beans.CONTENT_MANAGER)).getActUnitId()); intRootUnit = new Integer(((ContentManager) getBean(Beans.CONTENT_MANAGER)).getRootUnitId()); this.cboRegion.addItem(new CboModel(Messages.getString("panel.content.documents.files4ThisUnit"), intActUnit, true)); this.cboRegion.addItem(new CboModel(Messages.getString("panel.content.documents.files4AllUnits"), intRootUnit, true)); this.cboRegion.addItem(new CboModel(Messages.getString("panel.content.documents.files4ThisComponent"), viewComponentId, false)); cboRegion.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { regionSelected(); } }); cboRegion.setSelectedIndex(2); btnAdd.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnAddActionPerformed(e); } }); btnPreview.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnPreviewActionPerformed(e); } }); btnUpdate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnUpdateActionPerformed(e); } }); btnDelete.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnDeleteActionPerformed(e); } }); //regionSelected(); } /** */ public final class CboModel { private final String strView; private final Integer intRegionId; private final boolean isUnit; public CboModel(String view, Integer regionid, boolean isUnit) { this.isUnit = isUnit; this.strView = view; this.intRegionId = regionid; } public String getView() { return this.strView; } public Integer getRegionId() { return this.intRegionId; } @Override public String toString() { return this.strView; } } public void resizeScrollpane() { int width = ((int) scrollPane.getSize().getWidth()) - 20; int fitinrow = 1; int height = 1; double dblSmall = 0; try { fitinrow = width / this.maxButtonWidth; } catch (ArithmeticException e) { } if (fitinrow < 1) fitinrow = 1; try { dblSmall = ((double) anzahlItems / (double) fitinrow) - (anzahlItems / fitinrow); } catch (ArithmeticException e) { } if (dblSmall < 1 && dblSmall > 0) { try { height = ((anzahlItems / fitinrow) + 1) * 100; } catch (ArithmeticException e) { } } else { try { height = (anzahlItems / fitinrow) * 100; } catch (ArithmeticException e) { } } panDocumentButtons.setPreferredSize(new Dimension(width, height)); } private void jbInit() throws Exception { mimeType = ""; btnDelete.setText("Datei löschen"); panBottom.setLayout(new BorderLayout()); panDocumentButtons.setLayout(panDocumentsLayout); btnAdd.setText("Datei hinzufügen"); lbLinkDescription.setText(" Linkbeschreibung "); this.setLayout(new BorderLayout()); panLinkName.setLayout(panLinkNameLayout); panDocumentsLayout.setAlignment(FlowLayout.LEFT); panDocumentButtons.setBackground(SystemColor.text); this.add(panBottom, BorderLayout.SOUTH); panBottom.add(panFileAction, BorderLayout.EAST); panFileAction.add(btnUpdate, null); panFileAction.add(btnAdd, null); panFileAction.add(btnDelete, null); panFileAction.add(btnPreview, null); panBottom.add(panLinkName, BorderLayout.NORTH); panLinkName.add(lbLinkDescription, new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(txtLinkDesc, new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); if (showDocumentProperties) { panLinkName.add(lbDocumentLabel, new GridBagConstraints(0, 1, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(txtDocumentLabel, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(lbDocumentDescription, new GridBagConstraints(0, 2, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(txtDocumentDescription, new GridBagConstraints(1, 2, 1, 1, 1, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(lbAuthor, new GridBagConstraints(0, 3, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(txtAuthor, new GridBagConstraints(1, 3, 1, 1, 1, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(lbCategory, new GridBagConstraints(0, 4, 1, 1, 0, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(txtCategory, new GridBagConstraints(1, 4, 1, 1, 1, 0, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); panLinkName.add(ckbDocumentSearchable, new GridBagConstraints(0, 5, 2, 1, 1, 1, GridBagConstraints.BASELINE_LEADING, GridBagConstraints.BOTH, new Insets(2, 2, 2, 2), 2, 2)); } panBottom.add(cbxDisplayTypeInline, BorderLayout.WEST); this.add(scrollPane, BorderLayout.CENTER); if (showRegionCombo) { this.add(cboRegion, BorderLayout.NORTH); } this.add(getViewSelectPan(), BorderLayout.WEST); scrollPane.getViewport().add(tblDocuments, null); scrollPane.setTransferHandler(new FileTransferHandler(this)); } private void loadThumbs(Integer unit) { this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { tblDocumentsModel = new DocumentTableModel(); tblDocumentSorter = new TableSorter(tblDocumentsModel, tblDocuments.getTableHeader()); tblDocuments.getSelectionModel().clearSelection(); tblDocuments.setModel(tblDocumentSorter); DocumentSlimValue[] dsva = null; if (((CboModel) cboRegion.getSelectedItem()).isUnit) { dsva = comm.getAllSlimDocumentValues(unit); } else { dsva = comm.getAllSlimDocumentValues4ViewComponent(viewComponentId); } panDocumentButtons.removeAll(); anzahlItems = 0; bgrp = new ButtonGroup(); for (int i = 0; i < dsva.length; i++) { DocumentSlimValue dsv = dsva[i]; tblDocumentsModel.addRow(dsv); PanDocumentSymbol pan = new PanDocumentSymbol(); // pan.setPreferredSize(new Dimension(95,95)); pan.getFileButton().setIcon(Utils.getIcon4Extension(Utils.getExtension(dsv.getDocumentName()))); pan.getFileNameLabel().setText(dsv.getDocumentName()); pan.getFileButton().setActionCommand(dsv.getDocumentId() + ""); pan.getFileButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnFileActionPerformed(e); } }); if (intDocId != null && (intDocId.intValue() == dsv.getDocumentId())) { pan.getFileButton().doClick(); mimeType = dsv.getMimeType(); selectDocument(intDocId); } panDocumentButtons.add(pan, null); anzahlItems++; bgrp.add(pan.getFileButton()); this.setMaxButtonWidth(pan); } panDocumentButtons.validate(); panDocumentButtons.repaint(); resizeScrollpane(); } catch (Exception exe) { log.error("Error loading thumbs", exe); } this.setCursor(Cursor.getDefaultCursor()); } private void btnFileActionPerformed(ActionEvent e) { if (e.getActionCommand().equals("CLICK")) { Enumeration en = bgrp.getElements(); while (en.hasMoreElements()) { PanDocumentSymbol.JToggleBtt btn = (PanDocumentSymbol.JToggleBtt) en.nextElement(); if (!btn.isSelected()) { btn.unClick(); } else { btn.doClick(); } } intDocId = new Integer(bgrp.getSelection().getActionCommand()); selectDocument(intDocId); } else { ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "CLICK"); ((PanDocumentSymbol.JToggleBtt) e.getSource()).fireActionPerformedT(ae); } } public void regionSelected() { setCursor(new Cursor(Cursor.WAIT_CURSOR)); Integer intSelItem = ((CboModel) this.cboRegion.getSelectedItem()).getRegionId(); loadThumbs(intSelItem); try { if (intRootUnit.equals(intSelItem)) { if (comm.isUserInRole(UserRights.SITE_ROOT) || intActUnit.equals(intRootUnit)) { this.btnDelete.setVisible(true); this.btnAdd.setVisible(true); this.btnPreview.setVisible(true); } else { this.btnDelete.setVisible(false); this.btnAdd.setVisible(false); this.btnPreview.setVisible(false); } } else { this.btnDelete.setVisible(true); this.btnAdd.setVisible(true); this.btnPreview.setVisible(true); } } catch (Exception ex) { } setCursor(Cursor.getDefaultCursor()); } private void btnDeleteActionPerformed(ActionEvent e) { try { DocumentSlimValue currDoc = null; String acc = bgrp.getSelection().getActionCommand(); int rowInModel = tblDocumentsModel.getRowForDocument(Integer.valueOf(acc)); if (rowInModel >= 0) { currDoc = (DocumentSlimValue) tblDocumentsModel.getValueAt(rowInModel, 4); } String tmp = acc; if (currDoc != null && currDoc.getDocumentName() != null && !"".equalsIgnoreCase(currDoc.getDocumentName())) { tmp += " (" + currDoc.getDocumentName() + ")"; } /* if (currDoc != null && (currDoc.getUseCountLastVersion() + currDoc.getUseCountPublishVersion()) > 0) { JOptionPane.showMessageDialog(this, SwingMessages.getString("panel.content.documents.deleteButInUse", tmp), SwingMessages.getString("panel.content.documents.deleteDocument"), JOptionPane.WARNING_MESSAGE); return; } */ int ret = JOptionPane.showConfirmDialog(this, Messages.getString("panel.content.documents.deleteThisDocument", tmp), Messages.getString("panel.content.documents.deleteDocument"), JOptionPane.WARNING_MESSAGE, JOptionPane.YES_NO_OPTION); if (ret == JOptionPane.YES_OPTION) { comm.removeDocument(Integer.valueOf(acc).intValue()); loadThumbs(((CboModel) this.cboRegion.getSelectedItem()).getRegionId()); } } catch (NullPointerException ex) { } catch (Exception ex) { if (ex.getMessage().contains("validation exception")) { JOptionPane.showConfirmDialog(this, rb.getString("panel.content.documents.delete.exception"), rb.getString("panel.content.documents.deleteDocument"), JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE); } else { log.warn("exception on delete document"); if (log.isDebugEnabled()) { log.debug(ex); } } } } private void btnAddActionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { CboModel cb = (CboModel) cboRegion.getSelectedItem(); isDataActualization = false; if (cb.isUnit) { upload(cb.getView(), cb.getRegionId(), null, null); } else { upload(cb.getView(), null, cb.getRegionId(), null); } loadThumbs(cb.getRegionId()); } }); } /** * Method called when pressing <b>Preview</b> button in Document selection panel. It uses <i>SwingUtilities.invokeLater</i> in order to display a separate {@link JFrame} with the content of the document. * @param e */ private void btnPreviewActionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { DocumentSlimValue currDoc = null; String acc = bgrp.getSelection().getActionCommand(); int rowInModel = tblDocumentsModel.getRowForDocument(Integer.valueOf(acc)); if (rowInModel >= 0) { currDoc = (DocumentSlimValue) tblDocumentsModel.getValueAt(rowInModel, 4); } String tmp = acc; if (currDoc != null && currDoc.getDocumentName() != null && !currDoc.getDocumentName().isEmpty()) { tmp += " (" + currDoc.getDocumentName() + ")"; } if (log.isDebugEnabled()) { log.info(tmp); } //load a pdf from a byte buffer byte[] data = comm.getDocumentBytes(currDoc.getDocumentId()); DocumentPreviewComponent component = new PdfPreviewFrame(); component.setDocumentContent(data); component.displayComponent(); } }); } private void btnUpdateActionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { CboModel cb = (CboModel) cboRegion.getSelectedItem(); /**overwrite the content of the document*/ isDataActualization = true; if (cb.isUnit) { upload(cb.getView(), cb.getRegionId(), null, intDocId); } else { upload(cb.getView(), null, cb.getRegionId(), intDocId); } loadThumbs(cb.getRegionId()); } }); } private void upload(String prosa, Integer unit, Integer viewComponentId, Integer documentId) { this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); JFileChooser fc = new JFileChooser(); int ff = fc.getChoosableFileFilters().length; FileFilter[] fft = fc.getChoosableFileFilters(); for (int i = 0; i < ff; i++) { fc.removeChoosableFileFilter(fft[i]); } fc.addChoosableFileFilter(new DocumentFilter()); fc.setAccessory(new ImagePreview(fc)); fc.setDialogTitle(prosa); fc.setMultiSelectionEnabled(true); fc.setCurrentDirectory(Constants.LAST_LOCAL_UPLOAD_DIR); int returnVal = fc.showDialog(this, Messages.getString("panel.content.documents.addDocument")); if (returnVal == JFileChooser.APPROVE_OPTION) { File[] files = fc.getSelectedFiles(); uploadFiles(files, unit, viewComponentId, documentId); Constants.LAST_LOCAL_UPLOAD_DIR = fc.getCurrentDirectory(); } this.setCursor(Cursor.getDefaultCursor()); } /** * * @param files * @param unit * @param documentId */ public void uploadFiles(File[] files, Integer unit, Integer viewComponentId, Integer documentId) { if ((files != null) && (files.length > 0)) { for (int i = (files.length - 1); i >= 0; i--) { File file = files[i]; FrmProgressDialog prog = new FrmProgressDialog(Messages.getString("panel.content.documents.addDocument"), Messages.getString("panel.content.upload.ParseFile"), 100); prog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { String fext = Utils.getExtension(file); String mimetype = Utils.getMimeType4Extension(fext); if (mimetype.equals("")) { mimetype = "application/octet-stream"; } prog.setProgress(Messages.getString("panel.content.upload.Uploading"), 50); String password=null; if(mimetype.equals("application/pdf") && PdfUtils.isPassswordProtected(file)){ DlgPdfDocumentPassword dlgPdfDocumentPassword=new DlgPdfDocumentPassword(password); dlgPdfDocumentPassword.setSize(350, 280); dlgPdfDocumentPassword.setLocationRelativeTo(UIConstants.getMainFrame()); dlgPdfDocumentPassword.setModal(true); dlgPdfDocumentPassword.setVisible(true); dlgPdfDocumentPassword.pack(); password=dlgPdfDocumentPassword.getPassword(); } int existingDocId = -1; if (unit != null) { existingDocId = comm.getDocumentIdForNameAndUnit(file.getName(), unit); } else if (viewComponentId != null) { existingDocId = comm.getDocumentIdForNameAndViewComponent(file.getName(), viewComponentId); } else { throw new RuntimeException("There must be at least one of unitId or viewComponentId present in method call"); } //this.intDocId = this.comm.addOrUpdateDocument(file, unit, file.getName(), mimetype, documentId); if (!isDataActualization) { if (existingDocId == 0) { try{ DocumentValue documentValue=new DocumentValue(); // documentValue.setDescription(txtDocumentDescription.getText()); documentValue.setDocument(IOUtils.toByteArray(new FileInputStream(file))); documentValue.setDocumentId(documentId); documentValue.setDocumentName(file.getName()); // documentValue.setLabel(txtDocumentLabel.getText()); documentValue.setMimeType(mimetype); documentValue.setPassword(password); // documentValue.setSearchable(ckbDocumentSearchable.isSelected()); documentValue.setUnitId(unit); documentValue.setViewDocumentId(viewComponentId); this.intDocId = this.comm.addOrUpdateDocument(documentValue).getDocumentId(); } catch (InvalidSizeException e) { JOptionPane.showMessageDialog(UIConstants.getMainFrame(), e.getMessage(), rb.getString("dialog.title"), JOptionPane.INFORMATION_MESSAGE); return; } } else { DlgSaveDocument saveDialog = new DlgSaveDocument(file, unit, file.getName(), mimetype, existingDocId); int frameHeight = 280; int frameWidth = 350; saveDialog.setSize(frameWidth, frameHeight); saveDialog.setLocationRelativeTo(UIConstants.getMainFrame()); saveDialog.setModal(true); saveDialog.setVisible(true); } } else { if ((existingDocId == 0) || (file.getName().equalsIgnoreCase(selectedDocName))) { try{ DocumentValue documentValue=new DocumentValue(); documentValue.setDescription(txtDocumentDescription.getText()); documentValue.setDocument(IOUtils.toByteArray(new FileInputStream(file))); documentValue.setDocumentId(documentId); documentValue.setDocumentName(file.getName()); documentValue.setLabel(txtDocumentLabel.getText()); documentValue.setMimeType(mimetype); documentValue.setPassword(password); documentValue.setSearchable(ckbDocumentSearchable.isSelected()); documentValue.setAuthor(txtAuthor.getText()); documentValue.setCategory(txtCategory.getText()); documentValue.setUnitId(unit); documentValue.setViewDocumentId(viewComponentId); this.intDocId = this.comm.addOrUpdateDocument(documentValue).getDocumentId(); } catch (InvalidSizeException e) { JOptionPane.showMessageDialog(UIConstants.getMainFrame(), e.getMessage(), rb.getString("dialog.title"), JOptionPane.INFORMATION_MESSAGE); return; } } else if ((existingDocId != 0) && (!file.getName().equalsIgnoreCase(selectedDocName))) { JOptionPane.showMessageDialog(UIConstants.getMainFrame(), Messages.getString("dialog.saveDocument.imposibleToOverwrite"), rb.getString("dialog.title"), JOptionPane.INFORMATION_MESSAGE); } } } catch (Exception exe) { log.error("Error upload document " + file.getName(), exe); } finally { prog.setProgress(Messages.getString("panel.content.upload.Finished"), 100); prog.dispose(); prog.setCursor(Cursor.getDefaultCursor()); } } } } public void refreshList() { loadThumbs(((CboModel) this.cboRegion.getSelectedItem()).getRegionId()); } public Integer getDocumentId() { return this.intDocId; } public void setDocumentId(Integer docid) { this.intDocId = docid; if(intDocId!=null){ DocumentSlimValue slimValue=comm.getDocumentSlimValue(intDocId); if(slimValue.getViewDocumentId()!=null){ cboRegion.setSelectedIndex(COMBO_REGION_VIEWCOMPONENT); } if(slimValue.getUnitId()!=null && slimValue.getUnitId().equals(intActUnit)){ cboRegion.setSelectedIndex(COMBO_REGION_UNIT); } if(slimValue.getUnitId()!=null && slimValue.getUnitId().equals(intRootUnit)){ cboRegion.setSelectedIndex(COMBO_REGION_SITE); } } //loadThumbs(intActUnit); } public String getDocumentName() { try { return comm.getDocumentName(getDocumentId().intValue()); } catch (Exception exe) { return ""; } } public String getDocumentDescription() { return this.txtLinkDesc.getText(); } public void setDocumentDescription(String docDesc) { txtLinkDesc.setText(docDesc); } /** * */ private class DocumentListSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; } if (tblDocuments.getSelectedRow() >= 0) { DocumentSlimValue vo = (DocumentSlimValue) tblDocumentSorter.getValueAt(tblDocuments.getSelectedRow(), 4); intDocId = vo.getDocumentId(); selectedDocName = vo.getDocumentName(); String linkDesc = vo.getDocumentName(); if (linkDesc.lastIndexOf(".") != -1) { linkDesc = linkDesc.substring(0, linkDesc.lastIndexOf(".")); } if (txtLinkDesc.getText().isEmpty()) { txtLinkDesc.setText(linkDesc); } txtDocumentLabel.setText(vo.getLabel()); txtDocumentDescription.setText(vo.getDescription()); txtAuthor.setText(vo.getAuthor()); txtCategory.setText(vo.getCategory()); ckbDocumentSearchable.setSelected(vo.isSearchable()); mimeType = vo.getMimeType(); } btnUpdate.setVisible(false); if (intDocId != null) { Integer intSelItem = ((CboModel) cboRegion.getSelectedItem()).getRegionId(); if (intRootUnit.equals(intSelItem)) { if (comm.isUserInRole(UserRights.SITE_ROOT) || intActUnit.equals(intRootUnit)) { btnUpdate.setVisible(true); } else { btnUpdate.setVisible(false); } } else { btnUpdate.setVisible(true); } Enumeration en = bgrp.getElements(); while (en.hasMoreElements()) { PanDocumentSymbol.JToggleBtt btn = (PanDocumentSymbol.JToggleBtt) en.nextElement(); if (Integer.valueOf(btn.getActionCommand()).intValue() == intDocId.intValue()) { btn.doClick(); } else { btn.unClick(); } } } } } private void selectDocument(Integer documentId) { int rowInModel = tblDocumentsModel.getRowForDocument(documentId); if (rowInModel >= 0) { int rowInView = tblDocumentSorter.getRowInView(rowInModel); tblDocuments.getSelectionModel().setSelectionInterval(rowInView, rowInView); } } private JPanel getViewSelectPan() { if (panViewSelect == null) { panViewSelect = new PanViewSelect(); panViewSelect.setPreferredSize(new Dimension(26, scrollPane.getHeight())); btnListView = new JToggleButton(UIConstants.BTN_LIST_VIEW, true); btnListView.setToolTipText(rb.getString("PanDocument.view.list")); btnListView.setPreferredSize(new Dimension(UIConstants.BTN_LIST_VIEW.getIconHeight() + 10, UIConstants.BTN_LIST_VIEW.getIconWidth() + 10)); btnSymbolView = new JToggleButton(UIConstants.BTN_SYMBOL_VIEW, false); btnSymbolView.setToolTipText(rb.getString("PanDocument.view.symbol")); btnSymbolView.setPreferredSize(new Dimension(UIConstants.BTN_SYMBOL_VIEW.getIconHeight() + 10, UIConstants.BTN_SYMBOL_VIEW.getIconWidth() + 10)); btnSymbolView.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Component current = scrollPane.getViewport().getView(); if (current != null) { scrollPane.getViewport().remove(current); } scrollPane.getViewport().add(panDocumentButtons, null); } }); btnListView.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Component current = scrollPane.getViewport().getView(); if (current != null) { scrollPane.getViewport().remove(current); } scrollPane.getViewport().add(tblDocuments, null); } }); panViewSelect.addButton(btnListView); panViewSelect.addButton(btnSymbolView); } return panViewSelect; } private void setMaxButtonWidth(JPanel pan) { int currentWidth = pan.getPreferredSize().width; if (this.maxButtonWidth < currentWidth) this.maxButtonWidth = currentWidth; } public JCheckBox getCbxDisplayTypeInline() { return cbxDisplayTypeInline; } public void setDisplayTypeEditable(boolean editable) { this.cbxDisplayTypeInline.setVisible(editable); } /** * @return the mimeType */ public String getMimeType() { return mimeType; } public void editpaneFiredPerformed(EditpaneFiredEvent ae) { //get selected document if (intDocId != null) { DocumentSlimValue slimValue= comm.getDocumentSlimValue(intDocId); slimValue.setDescription(txtDocumentDescription.getText()); slimValue.setLabel(txtDocumentLabel.getText()); slimValue.setAuthor(txtAuthor.getText()); slimValue.setCategory(txtCategory.getText()); slimValue.setSearchable(ckbDocumentSearchable.isSelected()); comm.updateDocumentSlimValue(slimValue); } //get properties //update document //send to server } public void editpaneCancelPerformed(EditpaneFiredEvent ae) { // TODO Auto-generated method stub } }