/**************************************************************
 * 
 * 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 OOo 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 OOo 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
