/* * 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.IlvExceptionMessage; import ilog.views.maps.datasource.IlvMapDataSource; import ilog.views.maps.format.dted.IlvRasterDTEDReader; import ilog.views.maps.raster.IlvRasterAbstractReader; import ilog.views.maps.raster.datasource.IlvRasterDataSourceFactory; import ilog.views.maps.raster.datasource.IlvThreadMonitoringData; import java.io.File; import java.io.IOException; import java.net.URL; import java.security.AccessControlException; import java.util.Enumeration; import java.util.Vector; import javax.swing.JFileChooser; import javax.swing.JOptionPane; /** * Class that manages DTED import action. */ public class DTEDLoadAction extends DefaultLoadAction { /** * Creates an action for the specified view * @param view view to add map data to. */ public DTEDLoadAction(IlvManagerView view) { super(view); } /** * @see plugins.ImportAction#getSubDirectory() */ protected String getSubDirectory() { return IlvMapUtil.getString(getClass(),"DTEDLoadAction.CDDirectory"); //$NON-NLS-1$ } /** * @see plugins.DefaultLoadAction#makeReader(java.lang.String) */ public IlvRasterAbstractReader makeReader(String fileName) { return makeReader(new String[] {fileName},null); } /** * @see plugins.DefaultLoadAction#makeReader(URL) */ public IlvRasterAbstractReader makeReader(URL url) throws IOException { IlvRasterDTEDReader r = new IlvRasterDTEDReader(); r.addMap(url); return r; } /** * @param monitorData * @see plugins.DefaultLoadAction#makeReader(java.lang.String) */ IlvRasterAbstractReader makeReader(String[] fileNames, IlvThreadMonitoringData monitorData) { Vector fileList=new Vector(); boolean asked=false; IlvRasterDTEDReader r = new IlvRasterDTEDReader(); for (int j = 0; j < fileNames.length; j++) { compileDTEDImages(fileNames[j],fileList); if(fileList.size()>1000 && !asked) { asked=true; int ans=JOptionPane.showConfirmDialog(getView(), IlvMapUtil.getString(getClass(),"DTEDLoadAction.TooManyFiles")); //$NON-NLS-1$ if(ans == JOptionPane.NO_OPTION){ break; } else if(ans != JOptionPane.YES_OPTION){ return null; } } } int size=fileList.size(); LoadDataRunnable runnable = null; if (Thread.currentThread() instanceof LoadDataRunnable) { runnable = (LoadDataRunnable)Thread.currentThread(); } for (int i = 0; i < size; i++) { try { r.addMap((String)fileList.get(i)); if (monitorData != null) { int percent = Math.round(i/(float)size * 100); monitorData.updateProgress(percent); } } catch(IOException e) { String errorMsg=IlvMapUtil.getString(getClass(),"DTEDLoadAction.Error"); //$NON-NLS-1$ new IlvExceptionMessage(e,errorMsg+(String)fileList.get(i)); } if (runnable != null) { if (runnable.wasStoppedCleanly()) { if(monitorData!=null) { monitorData.updateProgress(100); } break; } } } return r; } /** * @see plugins.DefaultLoadAction#getExtensions() */ public String [] getExtensions(){ return new String[]{".dt0", //$NON-NLS-1$ ".dt1", //$NON-NLS-1$ ".dt2", //$NON-NLS-1$ ".dt3"}; //$NON-NLS-1$ } private void compileDTEDImages(String fileName,Vector fileList) { File f=new File(fileName); boolean dir=false; try { dir=f.isDirectory(); } catch (AccessControlException e){ // applets. } if(dir){ File sub[]=f.listFiles(); for (int i = 0; i < sub.length; i++) { compileDTEDImages(sub[i].getPath(),fileList); } } else if (accept(f)) { fileList.add(fileName); } } /** Loads data by creating a data source with a specific reader for each of the files passed. * @see #makeReader(String) * @see plugins.ImportAction#getDataSources(java.lang.String[]) */ public Enumeration getDataSources(String fileNames[]) { return new FileTableLoader(fileNames,this) { /** * @see java.util.Enumeration#nextElement() */ public Object nextElement() { if(hasMoreElements()) { // int i=currentFile; // File f=new File(fileNames[i]); String name = new File((String)fileNames[currentFile]).getName() + "~" + new File((String)fileNames[fileNames.length-1]).getName(); //$NON-NLS-1$ IlvThreadMonitoringData monitorData=new IlvThreadMonitoringData(importAction.getMonitor(),fileNames, name + " " + importAction.getActivityDescription(RENDERING) ,0,100); //$NON-NLS-1$ IlvMapDataSource dataSource; IlvRasterAbstractReader r=((DTEDLoadAction)importAction).makeReader((String[])fileNames,monitorData); if(r!=null) { dataSource = IlvRasterDataSourceFactory.buildTiledImageDataSource( importAction.getView().getManager(), r, true,true,monitorData); dataSource.setName(importAction.getFormatName()+" "+name); //$NON-NLS-1$ currentFile = this.fileNames.length; return dataSource; } } return null; } }; } /** * returns JFileChooser.FILES_AND_DIRECTORIES * @see plugins.ImportAction#getSelectionMode() */ public int getSelectionMode() { return JFileChooser.FILES_AND_DIRECTORIES; } /** * @see plugins.DefaultLoadAction#getFormatName() */ public String getFormatName() { return ilog.views.maps.IlvMapUtil.getString(getClass(),"DTEDLoadAction.FormatName"); //$NON-NLS-1$ } /** * @see plugins.ImportAction#approveSelection(java.io.File[]) */ public boolean approveSelection(File selection[]) { if(selection.length==1){ if(selection[0].getParent()==null)return false; } return super.approveSelection(selection); } }