/**************************************************************
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 *
 *************************************************************/



#ifndef __com_sun_star_java_JavaInitializationException_idl__
#define __com_sun_star_java_JavaInitializationException_idl__

#ifndef __com_sun_star_uno_DeploymentException_idl__
#include <com/sun/star/uno/DeploymentException.idl>
#endif

module com { module sun { module star { module java {


/** indicates that there is no Java available <p>
    It is presumed that Java is a vital part of an office installation.
    That is, if Java does work for some reason, it it not guaranteed that
    the office is functional. A JavaInitializationException is therefore
    caused by some misconfiguration of Java which is closer described by
    other exceptions in this namespace which inherit JavaInitializationException.
    These are:
    <p>
    <type scope:"com::sun::star::java">JavaDisabledException</type> <br>
    <type scope:"com::sun::star::java">JavaNotConfiguredException</type> <br>
    <type scope:"com::sun::star::java">MissingJavaRuntimeException</type> <br>
    <type scope:"com::sun::star::java">JavaVMCreationFailureException</type> <br>

    @since OpenOffice 1.1.2
 */
published exception JavaInitializationException: com::sun::star::uno::DeploymentException
{
};

}; }; }; };

#endif
