# 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.

# This is your sidebar TOC. The sidebar code loops through sections here and provides the appropriate formatting.

# Sidebar
entries:
- title: Sidebar
  subcategories:
  - title:
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: pdf
    type: frontmatter
    items:
    - title:
      url: /titlepage.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: pdf
      type: frontmatter
    - title:
      url: /tocpage.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: pdf
      type: frontmatter

  - title: Overview
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: web, pdf
    items:
    - title: Introduction
      url: /docs/edgent_index.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf
    - title: Edgent Overview
      url: /docs/home.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf
    - title: The Power of Edgent
      url: /docs/power-of-edgent.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf
    - title: FAQ
      url: /docs/faq.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

  - title: Get Started
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: web, pdf
    items:
    - title: Downloads
      url: /docs/downloads.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Getting Started Guide
      url: /docs/edgent-getting-started.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Quickstart with Edgent Samples
      url: /docs/edgent-getting-started-samples.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Understanding App Development
      url: /docs/application-development.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Quickstart IBM Watson IoT Platform
      url: /docs/quickstart.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Streaming concepts
      url: /docs/streaming-concepts.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Common operations
      url: /docs/common-edgent-operations.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

  - title: Edgent Cookbook
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: web, pdf
    items:
    - title: Hello Edgent!
      url: /recipes/recipe_hello_edgent.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Writing a source function
      url: /recipes/recipe_source_function.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Detecting a sensor value out of expected range
      url: /recipes/recipe_value_out_of_range.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Applying different processing against a single stream
      url: /recipes/recipe_different_processing_against_stream.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Splitting a stream to apply different processing
             and combining the results into a single stream
      url: /recipes/recipe_combining_streams_processing_results.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Using an external configuration file for filter ranges
      url: /recipes/recipe_external_filter_range.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Changing a filter's range
      url: /recipes/recipe_adaptable_filter_range.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Changing a polled source stream's period
      url: /recipes/recipe_adaptable_polling_source.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Using an adaptable deadtime filter
      url: /recipes/recipe_adaptable_deadtime_filter.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Dynamically enabling analytic flows
      url: /recipes/recipe_dynamic_analytic_control.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: How can I run analytics on several tuples in parallel?
      url: /recipes/recipe_parallel_analytics.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: How can I run several analytics on a tuple concurrently?
      url: /recipes/recipe_concurrent_analytics.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: How do I write a connector?
      url: /recipes/recipe_writing_a_connector.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

  - title: Using the Console
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: web, pdf
    items:
    - title: Using the console
      url: /docs/console.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

  - title: Get Involved
    audience: writers, designers
    platform: all
    product: all
    version: all
    output: web, pdf
    items:
    - title: How to participate
      url: /docs/community.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf

    - title: Committers
      url: /docs/committers.html
      audience: writers, designers
      platform: all
      product: all
      version: all
      output: web, pdf
