/*
 * 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.format.image.IlvRasterBasicImageReader;
import ilog.views.maps.raster.IlvRasterAbstractReader;
import ilog.views.maps.raster.IlvRasterProperties;
import ilog.views.maps.srs.coordtrans.IlvMathTransform;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.net.URL;
import java.security.AccessControlException;
import javax.swing.JComponent;
import calibration.BasicImageAccessory;

/**
 * Class that manages GIF,JPG and TIFF import action.
 */
public class BasicImageLoadAction extends DefaultLoadAction {
  boolean isTiled=true;
  BasicImageAccessory _ac=new BasicImageAccessory(false);
  
  private BasicImageAccessory getAc() {
      if (_ac==null){
          _ac=new BasicImageAccessory(false); 
      }
      return _ac;
  }
  /**
   * Creates an action for the specified view
   * @param view view to add map data to.
   */
  public BasicImageLoadAction(IlvManagerView view)
  {
    super(view);
  }
  /**
   * @see plugins.ImportAction#getSubDirectory()
   */
  protected String getSubDirectory() {
    return IlvMapUtil.getString(getClass(),"BasicImageLoadAction.CDDirectory"); //$NON-NLS-1$
  }
  private URL lastURL;
  private String lastFileName;
  /**
   * @see plugins.DefaultLoadAction#makeReader(java.lang.String)
   */
  public IlvRasterAbstractReader makeReader(String fileName)
  {
      // JV-5476 : make sure we do not reuse the exact same reader, or we cause problem when one of them is removed from the map.
      if (fileName.equals(lastFileName)){
          getAc().setFile(new File(fileName)) ;
       }
      lastFileName=fileName;
    return makeReader();
  }
  /**
   * @see plugins.DefaultLoadAction#makeReader(URL)
   */
  public IlvRasterAbstractReader makeReader(URL url)
  {
      // JV-5476 : make sure we do not reuse the exact same reader, or we cause problem when one of them is removed from the map.
    if (url.equals(lastURL)){
       getAc().setURL(url) ;
    }
    lastURL=url;
    return makeReader();
  } 
  private IlvRasterAbstractReader makeReader()
  {
      BasicImageAccessory ac=getAc();
    IlvRasterBasicImageReader r = ac.getReader();
    if(r==null){
      r = new IlvRasterBasicImageReader();
      r.addMap(ac.getFile().toString());
      Rectangle2D.Double e=r.getImageBounds(0);
      ac.getModel().getControlPoint(0).setIconX(e.x);
      ac.getModel().getControlPoint(0).setIconY(e.y);
      ac.getModel().getControlPoint(1).setIconX(e.x+e.width);
      ac.getModel().getControlPoint(1).setIconY(e.y+e.height);
      IlvRasterProperties p=r.getRasterProperties(0);
      p.setTileWidth(p.getNumColumns());
      p.setTileHeight(p.getNumLines());
    }
    IlvMathTransform trans=ac.getModel().makeTransform();
    if(trans==null){
      Rectangle2D bounds=ac.getModel().getLatLonBounds();
      r.setImageBounds(0,bounds.getMinX(),bounds.getMaxY(),bounds.getMaxX(),bounds.getMinY()); // in kernel
   } else {
      r.setInternalTransformation(trans);
    }
    return r;
  } 
  /**
   * @see plugins.ImportAction#selectedFileChanged(java.io.File)
   */
  public void selectedFileChanged(File file) {
    boolean dir=false;
    try {
      if(file!=null)dir=file.isDirectory();
    } catch (AccessControlException e){
      // applets.
    }
    if(file != null && accept(file)&&!dir){
        getAc().setFile(file);
    } else {
        getAc().setFile(null);
    }
  }
  /**
   * @see plugins.ImportAction#selectedURLChanged(URL)
   */
  public void selectedURLChanged(URL url) {
    if(url != null && accept(new File(url.getFile()))){
        getAc().setURL(url);
    } else {
        getAc().setURL(null);
    }
  }  
  /**
   * Returns a BasicImageAccessory.
   * @see plugins.ImportAction#getAccessory()
   */
  public JComponent getAccessory()
  {
    getAc().setView(getView());
    return getAc();
  }

 
 
  /**
   * @see plugins.DefaultLoadAction#getExtensions()
   */
  public String [] getExtensions(){
    return new String[]{
        ".gif",//$NON-NLS-1$
        ".tif",//$NON-NLS-1$
        ".png",//$NON-NLS-1$
        ".jpg",//$NON-NLS-1$
        ".jpeg" //$NON-NLS-1$
    };
  }
  /**
   * Returns false.
   * @see plugins.ImportAction#isMultiSelectionEnabled()
   */
  public boolean isMultiSelectionEnabled() {
     return false;
   }
  
   /**
   * @see plugins.ImportAction#getFormatName()
   */
  public String getFormatName()
  {
    return ilog.views.maps.IlvMapUtil.getString(getClass(),"BasicImageLoadAction.FormatName"); //$NON-NLS-1$
  }
}