view src/java/de/intevation/mxd/ArcGISInitializer.java @ 121:9f74f4d36822

Set default values and improved logging and exception handling for map reader.
author Raimund Renkert <rrenkert@intevation.de>
date Thu, 16 Jun 2011 18:36:48 +0200
parents 104af51a4717
children f4eb506499f5
line wrap: on
line source
package de.intevation.mxd;

import java.io.IOException;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

import org.apache.log4j.Logger;

import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.system.esriLicenseStatus;

/**
 * Initializes the ArcGIS Engine and Objects.
 *
 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
 */
public class ArcGISInitializer {

    /**
     * The Logger.
     */
    private static final Logger logger = Logger.getLogger(ArcGISInitializer.class);

    /**
     * Private member.
     */
    private AoInitialize    aoInit;
    private String          engineInstallDir = "";


    /**
     * Init ArcGIS Java Objects.
     */
    public boolean initArcGIS ()
    throws IOException {
        logger.debug("initArcGIS()");

        String engineInstallDir    = System.getenv("AGSENGINEJAVA");
	if(engineInstallDir == null) {
            engineInstallDir = System.getenv("AGSDESKTOPJAVA");
	    if(engineInstallDir == null) {
                logger.error("Could not find ArcGIS Environment. \n" +
                             "AGSENGINEJAVA or AGSDESKTOPJAVA not set.");
		return false;
	    }
	}

	//Obtain the relative path to the arcobjects.jar file
        String jarPath = engineInstallDir + "java" + File.separator + "lib" +
            			 File.separator + "arcobjects.jar";

        //Create a new file
        File jarFile = new File(jarPath);
        
        //Test for file existence
        if(!jarFile.exists()){
                logger.error("The arcobjects.jar was not found in the following location: " +
                                                jarFile.getParent());
                logger.error("Verify that arcobjects.jar can be located in the specified folder.");
                logger.error("If not present, try uninstalling your ArcGIS software and reinstalling it.");
                System.exit(0);
        }

        //Helps load classes and resources from a search path of URLs
        URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
        Class<URLClassLoader> sysclass = URLClassLoader.class;

        try {
            Method method = sysclass.getDeclaredMethod("addURL", new Class[]{URL.class});
            method.setAccessible(true);
            method.invoke(sysloader, new Object[]{jarFile.toURI().toURL()});
        }
	catch (Throwable throwable) {
            throwable.printStackTrace();
            logger.error("Could not add arcobjects.jar to system classloader");
            System.exit(0);
        }
    
	EngineInitializer.initializeEngine();
	
	aoInit              = new AoInitialize();
        return true;
    }

    /**
     * Init ArcGIS License.
     */
    public boolean initArcGISLicenses()
    throws IOException {
        logger.debug("initArcGISLicenses()");
        if(aoInit.isProductCodeAvailable
           (esriLicenseProductCode.esriLicenseProductCodeEngine) ==
           esriLicenseStatus.esriLicenseAvailable) {
           aoInit.initialize
               (esriLicenseProductCode.esriLicenseProductCodeEngine);
        }
        else if (aoInit.isProductCodeAvailable
                 (esriLicenseProductCode.esriLicenseProductCodeArcView) ==
                 esriLicenseStatus.esriLicenseAvailable) {
                 aoInit.initialize
                     (esriLicenseProductCode.esriLicenseProductCodeArcView);
        }
        else {
            logger.error("Engine Runtime or ArcView" +
                         " license not initialized.\n" +
                         "Please install an ArcGIS product and set the" +
                         " PATH-variable correctly.");
            return false;
        }
        return true;
    }

    /**
     * Shutdown the ArcGIS Objects.
     */
    public boolean shutdownArcGIS()
    throws IOException {
        if(aoInit != null) {
            aoInit.shutdown();
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * Get the ArcGIS Engine Directory.
     */
    public String getEngineDirectory()
    throws Exception {
        if(engineInstallDir == "") {
            throw new Exception("Call initArcGIS() first!");
        }
        else {
            return engineInstallDir;
        }
    }
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)