<?xml version="1.0"?>
<!--

    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.

-->
<enunciate slug="lens" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="http://enunciate.webcohesion.com/schemas/enunciate-2.0.0-M.4.xsd">
  <namespaces>
    <namespace uri="https://gitbox.apache.org/repos/asf/lens.git" id="lens"/>
  </namespaces>
  <modules>
  <api-classes>
    <include pattern="org.apache.lens.server.query.*"/>
    <include pattern="org.apache.lens.server.query.save.*"/>
    <include pattern="org.apache.lens.server.metastore.*"/>
    <include pattern="org.apache.lens.server.quota.*"/>
    <include pattern="org.apache.lens.server.scheduler.*"/>
    <include pattern="org.apache.lens.server.session.*"/>
  </api-classes>
    <docs docsDir="target/enunciate/lens-server"/>
    <csharp disabled="true"/>
    <c disabled="true"/>
    <obj-c disabled="true"></obj-c>
    <java-json-client disabled="true"/>
  </modules>
</enunciate>
