Package org.pdfsam.guiclient.commons.components

Source Code of org.pdfsam.guiclient.commons.components.JPdfVersionCombo

/*
* Created on 25-Nov-2007
* Copyright (C) 2006 by Andrea Vacondio.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License.
* This program 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 General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
*  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.pdfsam.guiclient.commons.components;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Vector;

import javax.swing.JComboBox;

import org.pdfsam.guiclient.configuration.Configuration;
import org.pdfsam.guiclient.dto.StringItem;
import org.pdfsam.guiclient.utils.PdfVersionUtility;
import org.pdfsam.i18n.GettextResource;
/**
* Combo box for the output pdf version choice
* @author Andrea Vacondio
*/
public class JPdfVersionCombo extends JComboBox {

  private static final long serialVersionUID = -5004011941231451770L;
  public static final String SAME_AS_SOURCE = "1000";
 
  private Configuration config;
  private boolean addSameAsSourceItem = false;
  private Vector<Integer> filterVersions = new Vector<Integer>();
  /**
   * Size of the model when full
   */
  private int fullSize = 0;
 
  public JPdfVersionCombo(){
    this(false);
  }
 
  public JPdfVersionCombo(boolean addSameAsSourceItem){
    config = Configuration.getInstance();
    init(addSameAsSourceItem);
    this.fullSize = this.getModel().getSize();
    this.setEnabled(true);
  }
 
  /**
   *
   * @param addSameAsSourceItem if true init adding the item "Same as source"
   * @param checkFilters if true init checking filters vector
   */
  private void init(boolean addSameAsSourceItem, boolean checkFilters){
    removeAllItems();
    this.addSameAsSourceItem = addSameAsSourceItem;
    if(addSameAsSourceItem){
      addItem(new StringItem(SAME_AS_SOURCE, GettextResource.gettext(config.getI18nResourceBundle(),"Same as input document")));     
    }
    ArrayList<StringItem> values = PdfVersionUtility.getVersionsList();
    Integer maxFilter = Integer.valueOf(-1);
    if(checkFilters && !filterVersions.isEmpty()){
      maxFilter = Collections.max(filterVersions);
    }
    for(StringItem currentItem : values){
      if(currentItem!=null && new Integer(currentItem.getId()).compareTo(maxFilter)>=0){
        addItem(currentItem);
      }
    }   
  }
 
  /**
   * default initialization with checkFilters false
   * @param addSameAsSourceItem
   */
  private void init(boolean addSameAsSourceItem){
    init(addSameAsSourceItem, false);
    setSelectedIndex(getModel().getSize()-3);
  }
 
  /**
   * removes items with lower version then <code>version</code>
   * @param version versionFilter
   */
  public synchronized void addVersionFilter(Integer version){
    ArrayList<StringItem> removeList = new ArrayList<StringItem>();
    this.filterVersions.add(version);
    Integer maxFilter = Collections.max(filterVersions);
    Object item = this.getSelectedItem();
    for(int i =0; i<this.getItemCount(); i++){
      StringItem currentItem = (StringItem)getItemAt(i);
      if(currentItem!=null && maxFilter.compareTo(new Integer(currentItem.getId()))>0){
        removeList.add(currentItem);
        if(currentItem.equals(item)){
          item = null;
        }
      }
    }
    if(removeList.size()>0){
      for(StringItem currentItem:  removeList){
        this.removeItem(currentItem);
     
    }
    //if it's empty i disable
    if(this.getItemCount() == 0){
      this.setEnabled(false);
    }else{
      if(item == null){
        setSelectedIndex(0);
      }else{
        setSelectedItem(item);
      }
    }
  }
 
  /**
   * remove the filter
   * @param version versionFilter
   */
  public synchronized void removeVersionFilter(Integer version){
    if(this.filterVersions.remove(version)){
      if(filterVersions.isEmpty()){
        removeFilters();
      }else{
        Integer maxFilter = Collections.max(filterVersions);
        if(maxFilter.compareTo(version)<0){
          Object item = this.getSelectedItem();
          this.removeAllItems();
          this.init(addSameAsSourceItem, true);
          if(item != null){
            setSelectedItem(item);
          }
        }
      }
    }
  }
 
  /**
   * Enables every item
   */
  public synchronized void removeFilters(){
    if(this.getModel().getSize()<fullSize){
      Object item = this.getSelectedItem();
      this.filterVersions.clear();
      this.removeAllItems();
      this.init(addSameAsSourceItem);
      if(item != null){
        setSelectedItem(item);
      }
    }
  }
 
  /**
   * resets the component
   */
  public void resetComponent(){
    this.filterVersions.clear();
    this.init(addSameAsSourceItem);
  }
 
  /**
   * @return the item with the lower id
   */
  public StringItem getMinItem(){
    StringItem minItem = null;
    for(int i =0; i<this.getItemCount(); i++){
      StringItem currentItem = (StringItem)getItemAt(i);
      if(minItem!= null){
        if(currentItem!=null && new Integer(minItem.getId()).compareTo(new Integer(currentItem.getId()))>0){
          minItem = currentItem;       
        }
      }else{
        minItem = currentItem;
      }
    }
    return minItem;
  }
}
TOP

Related Classes of org.pdfsam.guiclient.commons.components.JPdfVersionCombo

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.