Package net.sourceforge.squirrel_sql.client.update.gui

Source Code of net.sourceforge.squirrel_sql.client.update.gui.UpdateSummaryTable$i18n

package net.sourceforge.squirrel_sql.client.update.gui;

/*
* Copyright (C) 2007 Rob Manning
* manningr@users.sourceforge.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.INSTALL;
import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.NONE;
import static net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction.REMOVE;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.ListSelectionModel;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;

import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;

/**
* Implements the table summary of updates which includes artifacts in each of
* the core, plugins and translations modules.
*
* @author manningr
*/
public class UpdateSummaryTable extends SortableTable {

  private static final long serialVersionUID = 1L;

   /** Internationalized strings for this class. */
   private static final StringManager s_stringMgr =
     StringManagerFactory.getStringManager(UpdateSummaryTable.class);
  
   private interface i18n {
     //i18n[UpdateSummaryTable.allTranslationsLabel=All translations]
     String ALL_TRANSLATIONS_LABEL = s_stringMgr.getString("UpdateSummaryTable.allTranslationsLabel");
    
     //i18n[UpdateSummaryTable.allPluginsLabel=All plugins]
     String ALL_PLUGINS_LABEL = s_stringMgr.getString("UpdateSummaryTable.allPluginsLabel");
    
     //i18n[UpdateSummaryTable.installOptionsLabel=Install Options]
     String INSTALL_OPTIONS_LABEL = s_stringMgr.getString("UpdateSummaryTable.installOptionsLabel");
   }

   private List<ArtifactStatus> _artifacts = null;
   private boolean _releaseVersionWillChange = false;
   private UpdateSummaryTableModel _model = null;
  
   public UpdateSummaryTable(List<ArtifactStatus> artifactStatus,
                             UpdateSummaryTableModel model) {
      super(model);
      _model = model;
      _artifacts = artifactStatus;
      setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
      getTableHeader().setResizingAllowed(true);
      getTableHeader().setReorderingAllowed(true);
      setAutoCreateColumnsFromModel(false);
      setAutoResizeMode(AUTO_RESIZE_LAST_COLUMN);

      final TableColumnModel tcm = new DefaultTableColumnModel();
      JComboBox _actionComboBox = new JComboBox();
    for (int i = 0; i < model.getColumnCount(); ++i) {
         final TableColumn col = new TableColumn(i, model.getColumnWidth(i));
         col.setHeaderValue(model.getColumnName(i));
         if (i == 3) {
            col.setCellEditor(new DefaultCellEditor(initCbo(_actionComboBox)));
         }
         tcm.addColumn(col);
      }
      setColumnModel(tcm);
      initPopup();
   }

   /**
    * Gets the list of changes requested by the user.
    */
   public List<ArtifactStatus> getUserRequestedChanges() {
      List<ArtifactStatus> changes = new ArrayList<ArtifactStatus>();
      for (ArtifactStatus artifactStatus : _artifacts) {
         if (artifactStatus.getArtifactAction() != ArtifactAction.NONE) {
            changes.add(artifactStatus);
         }
      }
      return changes;
   }

  /**
   * This will adjust the list of artifacts presented to the user based on whether or not the release version
   * will change.
   *
   * @param releaseVersionWillChange
   *           a boolean value indicating whether or not the release version will change - that is, whether
   *           or not new core artifacts will be downloaded.
   */
  public void setReleaseVersionWillChange(boolean releaseVersionWillChange)
  {
    Iterator<ArtifactStatus> i = _artifacts.iterator();
    _releaseVersionWillChange = releaseVersionWillChange;
    if (releaseVersionWillChange) {
      // All currently installed artifacts will be marked with INSTALL action.
      while (i.hasNext()) {
        ArtifactStatus status = i.next();
        if (status.isInstalled()) {
          status.setArtifactAction(ArtifactAction.INSTALL);
        }
      }
     
    } else {
      // Remove the core items since they are the most recent, and the user is not allowed to remove them
      while (i.hasNext()) {
        ArtifactStatus status = i.next();
        if (status.isCoreArtifact()) {
          i.remove();
        }
      }
     
    }
  }
 
  /**
   * @return a boolean value indicating whether or not the release version will change with this update.
   */
  public boolean getReleaseVersionWillChange() {
    return _releaseVersionWillChange;
  }
  
  
   private void initPopup() {
      final JPopupMenu popup = new JPopupMenu(i18n.INSTALL_OPTIONS_LABEL);
     
      JMenuItem pluginItem = new JMenuItem(i18n.ALL_PLUGINS_LABEL);
      pluginItem.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            for (ArtifactStatus status : _artifacts) {
               if (status.isPluginArtifact()) {
                  status.setArtifactAction(ArtifactAction.INSTALL);
               }
            }
            _model.fireTableDataChanged();
         }
      });
      JMenuItem translationItem = new JMenuItem(i18n.ALL_TRANSLATIONS_LABEL);
      translationItem.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            for (ArtifactStatus status : _artifacts) {
               if (status.isTranslationArtifact()) {
                  status.setArtifactAction(ArtifactAction.INSTALL);
               }
            }
            _model.fireTableDataChanged();
         }
      });
                 
      popup.add(pluginItem);
      popup.add(translationItem);
     
      addMouseListener(new MouseAdapter() {
         public void mousePressed(MouseEvent event){
          if(popup.isPopupTrigger(event)){
           popup.show(event.getComponent(), event.getX(),event.getY());
          }
         }
         public void mouseReleased(MouseEvent event){
          if(popup.isPopupTrigger(event)){
           popup.show(event.getComponent(), event.getX(),event.getY());
          }
         }
        });           
   }
     
   private JComboBox initCbo(final JComboBox cbo) {
      cbo.setEditable(false);
      setModel(cbo, NONE, INSTALL, REMOVE);
     
      cbo.addPopupMenuListener(new PopupMenuListener() {
      public void popupMenuCanceled(PopupMenuEvent e) {}
      public void popupMenuWillBecomeInvisible(PopupMenuEvent e){}
      public void popupMenuWillBecomeVisible(PopupMenuEvent e)
      {
        JComboBox source =(JComboBox) e.getSource();
        updateDataModel(source);
      }
      });
     
      return cbo;
   }
  
   /**
    *  We want to adjust the items in the popup menu that are available to the user to select
    *  based on 1) whether or not the release version will change, and 2) what type of artifact the row
    *  is dealing with and 3) whether or not the artifact is already installed  
    * @param e
    * @param source
    */
   private void updateDataModel(JComboBox source) {
    final int row = UpdateSummaryTable.this.getEditingRow();
    if (row == -1) {
      return;
    }
    final ArtifactStatus as = UpdateSummaryTable.this._artifacts.get(row);
   
    // is it installed?
    boolean installed = as.isInstalled();

    // get the type of artifact
    if (as.isCoreArtifact()) {
      if (_releaseVersionWillChange) {
        source.setModel(getComboBoxModel(INSTALL));
      } else {
        // core artifacts are not displayed
      }
    } else {
      if (_releaseVersionWillChange) {
        if (installed) {
          setModel(source, INSTALL, REMOVE);
        } else {
          setModel(source, NONE, INSTALL);
        }
      } else {
        if (installed) {
          setModel(source, NONE, REMOVE);
        } else {
          setModel(source, NONE, INSTALL);
        }
      }
    }  
   }
  
   private void setModel(JComboBox box, ArtifactAction... actions) {
     ComboBoxModel oldModel = box.getModel();
     box.setModel(getComboBoxModel(actions));
     if (oldModel.getSize() != actions.length) {
       box.firePropertyChange("itemCount", oldModel.getSize(), actions.length);
     }
   }
  
   private ComboBoxModel getComboBoxModel(ArtifactAction... actions) {
     ComboBoxModel result = new DefaultComboBoxModel(actions);
     result.setSelectedItem(actions[0]);
     return result;
   }

}
TOP

Related Classes of net.sourceforge.squirrel_sql.client.update.gui.UpdateSummaryTable$i18n

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.