// Apache Streams (incubating)
// Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
// --------------------------------------------------------------------------------
digraph g {

  //providers
  ElasticsearchPersistReader [label="ElasticsearchPersistReader",shape=ellipse,URL="https://github.com/apache/incubator-streams/blob/master/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/ElasticsearchPersistReader.java"];

  //persisters
  ElasticsearchPersistWriter [label="ElasticsearchPersistWriter",shape=ellipse,URL="https://github.com/apache/incubator-streams/blob/master/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/ElasticsearchPersistWriter.java"];

  //data
  source [label="es://{indexes}/{types}",shape=box];
  destination [label="es://{index}/{type}",shape=box];

  //stream
  source -> ElasticsearchPersistReader
  ElasticsearchPersistReader -> ElasticsearchPersistWriter [label="String"];
  ElasticsearchPersistWriter -> destination
}