/*
 * Licensed Materials - Property of Rogue Wave Software, Inc. 
 * © Copyright Rogue Wave Software, Inc. 2014, 2015 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */

package plugins;
import ilog.views.IlvManagerView;
import ilog.views.maps.IlvMapUtil;
import ilog.views.maps.beans.IlvFeatureSelectorPanel;
import ilog.views.maps.datasource.IlvTigerDataSource;
import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


/**
 * Class that manages TIGER/Line import action.
 */
public class TigerLoadAction extends ImportAction {
    
    IlvFeatureSelectorPanel panel;
    TilingParameterPanel tilingPanel;
    JPanel compositePanel;
    /**
   * Creates an action for the specified view
   * @param view view to add map data to.
   */
  public TigerLoadAction(IlvManagerView view)
  {
    super(view);
  }
  /**
   * @see plugins.ImportAction#getSubDirectory()
   */
  protected String getSubDirectory() {
    return IlvMapUtil.getString(getClass(),"TigerLoadAction.CDDirectory"); //$NON-NLS-1$
  }
  /**
   * @see plugins.ImportAction#getDataSources(java.lang.String[])
   */
  public Enumeration getDataSources(String fileNames[]) throws IOException { 
    return getDS(fileNames);   
  }
  /**
   * @see plugins.ImportAction#getDataSources(URL[])
   */
  public Enumeration getDataSources(URL urls[]) throws IOException { 
    return getDS(urls);
  }
  /**
   * @see plugins.ImportAction#getDataSources(java.lang.String[])
   */
  private Enumeration getDS(Object fileNames[]) throws IOException { 
    Vector src=new Vector();
    IlvFeatureSelectorPanel.Feature[] features = panel.getSelectedFeatures();
//  String[] faccCodes = new String[features.length];
          ArrayList cfccCodes = new ArrayList();
          if (features != null) {
              for (int j = 0; j < features.length; j++) {
                  IlvFeatureSelectorPanel.Feature currentFeature = features[j];
                  IlvFeatureSelectorPanel.Feature currentChild;
                  int nChildren=currentFeature.getChildCount();
                  if(nChildren!=0) {// major
                          for (int i = 0; i < currentFeature.getChildCount(); i++) {
                              currentChild = (IlvFeatureSelectorPanel.Feature)currentFeature.getChildAt(i);
                              cfccCodes.add(currentChild.getMajorCode() + currentChild.getMinorCode());                
                          }               
                  } else {
              cfccCodes.add(currentFeature.getMajorCode() + currentFeature.getMinorCode());                
                  }
              }       
          }
     for (int i = 0; i < fileNames.length; i++) {
       if(fileNames[i].toString().toLowerCase().endsWith(".zip")){ //$NON-NLS-1$
         String base=fileNames[i].toString();
         int lastSlash=fileNames[i].toString().lastIndexOf("\\");//$NON-NLS-1$
         if(lastSlash!=-1){
           base=base.substring(lastSlash+1,base.length()-4);
          }
         fileNames[i] = "jar:"+new File(fileNames[i].toString()).toURI().toURL()+"/!/"+base.toUpperCase()+".RT1";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
        }
       IlvTigerDataSource source;
       if(fileNames[i] instanceof URL){
         source = new IlvTigerDataSource((URL)fileNames[i]);
       } else {
         source = new IlvTigerDataSource(fileNames[i].toString());
       }
        source.setCFCCCodeList((String[])cfccCodes.toArray(new String[0]));   
        source.setTilingParameters(tilingPanel.isTiling(),tilingPanel.getRows(),tilingPanel.getColumns());
        source.setAreaOfinterest(tilingPanel.getLonMin(),tilingPanel.getLatMin(),tilingPanel.getLonMax(),tilingPanel.getLatMax());
        source.setManager(getView().getManager());
        source.setName(getFormatName() + " (" + new File(fileNames[i].toString()).getName() + ")"); //$NON-NLS-1$ //$NON-NLS-2$
        src.add(source);
    }
    return src.elements();
   }
  
  /**
   * @see plugins.ImportAction#approveSelection(File [])
   */
  public boolean approveSelection(File selection[]) {
    IlvFeatureSelectorPanel.Feature[] features = panel.getSelectedFeatures();
    if (features == null || features.length==0){
      JOptionPane.showMessageDialog(view,
          IlvMapUtil.getString(TigerLoadAction.class,"TigerLoadAction.NoFeatureMessage"), //$NON-NLS-1$
          IlvMapUtil.getString(TigerLoadAction.class,"TigerLoadAction.NoFeatureTitle"),//$NON-NLS-1$
          JOptionPane.ERROR_MESSAGE);
      return false;
    }
    return super.approveSelection(selection);
  }

  /**
   * @see plugins.ImportAction#getExtensions()
   */
  public String [] getExtensions(){
    return new String[]{".rt1",".zip"}; //$NON-NLS-1$ //$NON-NLS-2$
 }
  /**
   * Returns an IlvFeatureSelectorPanel
   * @see plugins.ImportAction#getAccessory()
   */
  public JComponent getAccessory() {
    String filename = "TigerFeaturesEN.xml"; //$NON-NLS-1$
    if (compositePanel == null) {
        compositePanel = new JPanel(new BorderLayout());
        panel = new IlvFeatureSelectorPanel(null, filename,"Tiger");//$NON-NLS-1$
        JScrollPane sp = new JScrollPane(panel);
        compositePanel.add(sp,BorderLayout.CENTER);
        tilingPanel=new TilingParameterPanel(getView(),false);
        compositePanel.add(tilingPanel,BorderLayout.SOUTH);
     }
    return compositePanel;
  }
  

  /**
   * @see plugins.ImportAction#getFormatName()
   */
  public String getFormatName() {
    return ilog.views.maps.IlvMapUtil.getString(getClass(),"TigerLoadAction.FormatName"); //$NON-NLS-1$
  }
}