<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
<!--***********************************************************
 * 
 * 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.
 * 
 ***********************************************************-->


<module-description xmlns:xlink="http://www.w3.org/1999/xlink">

    <module-name>
	ucpfile
    </module-name>

    <component-description>
        <author>
	    Andreas Bille
        </author>
        <name>
            com.sun.star.comp.ucb.FileProvider
        </name>
        <description>
	    This component implements a Content Provider for the Universal
            Content Broker. It provides access to file system contents.
        </description>
        <loader-name>
            com.sun.star.loader.SharedLibrary
        </loader-name>
        <language>
            c++
        </language>
        <status value="final"/>
        <supported-service>
            com.sun.star.ucb.FileContentProvider
        </supported-service>

        <service-dependency>
            com.sun.star.config.SpecialConfigManager
        </service-dependency>
        <service-dependency>
            com.sun.star.configuration.ConfigurationAccess
        </service-dependency>
        <service-dependency>
            com.sun.star.configuration.ConfigurationProvider
        </service-dependency>
        <service-dependency>
            com.sun.star.script.Converter
        </service-dependency>
        <service-dependency>
            com.sun.star.ucb.CachedDynamicResultSetStubFactory
        </service-dependency>
        <service-dependency>
            com.sun.star.ucb.Store
        </service-dependency>
    </component-description>

    <project-build-dependency> sal                </project-build-dependency>
    <project-build-dependency> cppu               </project-build-dependency>
    <project-build-dependency> cppuhelper         </project-build-dependency>
    <project-build-dependency> ucbhelper          </project-build-dependency>

    <runtime-module-dependency>	sal3			  </runtime-module-dependency>
    <runtime-module-dependency>	cppu3			  </runtime-module-dependency>
    <runtime-module-dependency>	cppuhelper3$(COM) </runtime-module-dependency>
    <runtime-module-dependency>	ucbhelper4$(COM)  </runtime-module-dependency>

    <type> com.sun.star.beans.Property                         </type>
    <type> com.sun.star.beans.PropertyAttribute                </type>
    <type> com.sun.star.beans.PropertySetInfoChange            </type>
    <type> com.sun.star.beans.PropertyState                    </type>
    <type> com.sun.star.beans.PropertyValue                    </type>
    <type> com.sun.star.beans.XPropertiesChangeNotifier        </type>
    <type> com.sun.star.beans.XPropertyAccess                  </type>
    <type> com.sun.star.beans.XPropertyContainer               </type>
    <type> com.sun.star.beans.XPropertySetInfo                 </type>
    <type> com.sun.star.beans.XPropertySetInfoChangeNotifier   </type>
    <type> com.sun.star.container.XChild                       </type>
    <type> com.sun.star.container.XHierarchicalNameAccess      </type>
    <type> com.sun.star.frame.ConfigManager                    </type>
    <type> com.sun.star.io.XActiveDataSink                     </type>
    <type> com.sun.star.io.XActiveDataStreamer                 </type>
    <type> com.sun.star.io.XSeekable                           </type>
    <type> com.sun.star.io.XStream                             </type>
    <type> com.sun.star.lang.XMultiServiceFactory              </type>
    <type> com.sun.star.lang.XServiceInfo                      </type>
    <type> com.sun.star.lang.XSingleServiceFactory             </type>
    <type> com.sun.star.lang.XTypeProvider                     </type>
    <type> com.sun.star.registry.XRegistryKey                  </type>
    <type> com.sun.star.script.XTypeConverter                  </type>
    <type> com/sun/star/sdbc/ColumnValue                       </type>
    <type> com.sun.star.sdbc.XCloseable                        </type>
    <type> com.sun.star.sdbc.XResultSetMetaDataSupplier        </type>
    <type> com.sun.star.sdbc.XRow                              </type>
    <type> com.sun.star.ucb.ContentAction                      </type>
    <type> com.sun.star.ucb.ContentInfoAttribute               </type>
    <type> com.sun.star.ucb.FileSystemNotation                 </type>
    <type> com.sun.star.ucb.InsertCommandArgument              </type>
    <type> com.sun.star.ucb.InteractiveBadTransferURLException </type>
    <type> com.sun.star.ucb.ListAction                         </type>
    <type> com.sun.star.ucb.NameClash                          </type>
    <type> com.sun.star.ucb.NumberedSortingInfo                </type>
    <type> com.sun.star.ucb.OpenCommandArgument2               </type>
    <type> com.sun.star.ucb.OpenMode                           </type>
    <type> com.sun.star.ucb.TransferInfo                       </type>
    <type> com.sun.star.ucb.WelcomeDynamicResultSetStruct      </type>
    <type> com.sun.star.ucb.XCachedDynamicResultSetStubFactory </type>
    <type> com.sun.star.ucb.XCommandInfo                       </type>
    <type> com.sun.star.ucb.XCommandProcessor                  </type>
    <type> com.sun.star.ucb.XContentAccess                     </type>
    <type> com.sun.star.ucb.XContentCreator                    </type>
    <type> com.sun.star.ucb.XContentIdentifier                 </type>
    <type> com.sun.star.ucb.XContentIdentifierFactory          </type>
    <type> com.sun.star.ucb.XContentProvider                   </type>
    <type> com.sun.star.ucb.XDynamicResultSet                  </type>
    <type> com.sun.star.ucb.XFileIdentifierConverter           </type>
    <type> com.sun.star.ucb.XPropertySetRegistryFactory        </type>
    <type> com.sun.star.ucb.XSourceInitialization              </type>
    <type> com.sun.star.uno.XWeak                              </type>
</module-description>
