/**************************************************************
 * 
 * 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 INCLUDED_COM_SUN_STAR_DEPLOYMENT_DEPENDENCYEXCEPTION_IDL
#define INCLUDED_COM_SUN_STAR_DEPLOYMENT_DEPENDENCYEXCEPTION_IDL

#include "com/sun/star/uno/Exception.idl"

module com { module sun { module star { module xml { module dom {
    interface XElement;
}; }; }; }; };

module com { module sun { module star { module deployment {

/**
   describes unsatisfied dependencies a deployment unit has on its target
   environment.

   <p>This exception is intended to be used with an
   <type scope="com::sun::star::task">XInteractionHandler</type>.</p>

   @since OpenOffice 2.0.4
*/
exception DependencyException: com::sun::star::uno::Exception {
    /**
       a sequence of dependencies represented by XML elements.

       <p>The exact nature of those XML elements is deliberately left open, so
       that new kinds of dependencies can be defined in the future.
       OOo&nbsp;2.0.4 does not define any kinds of dependencies.  Each such XML
       element should have an attribute whose global name consists of the
       namespace name
       <code>http://openoffice.org/extensions/description/2006</code> and the
       local part <code>name</code> and whose value is a human-readable
       (english) description of the dependency.  If an instance of OpenOffice does not
       know more about a specific kind of dependency, it should display the
       value of that attribute to the user.</p>

       <p>The sequence must not be emtpy, and none of the elements may be
       <NULL/>.</p>
    */
    sequence< com::sun::star::xml::dom::XElement > UnsatisfiedDependencies;
};

}; }; }; };

#endif
