Repository: camel
Updated Branches:
  refs/heads/master 9bbdb5b50 -> 38941053b


CAMEL-9541: Keep user guide TOC up to date with components from the Camel 
Catalog.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3791e125
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3791e125
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3791e125

Branch: refs/heads/master
Commit: 3791e1250a8e0d392c945330faf6b40dd75adbf7
Parents: 9bbdb5b
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Aug 18 11:12:25 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Aug 18 11:12:25 2016 +0200

----------------------------------------------------------------------
 docs/user-manual/en/SUMMARY.md                  | 456 +++++++++----------
 platforms/catalog/pom.xml                       |   2 +
 .../maven/packaging/PrepareUserGuideMojo.java   | 261 +++++++++++
 3 files changed, 481 insertions(+), 238 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3791e125/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index 687f548..f595706 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -82,247 +82,227 @@
         * Using Camel questions
             * [How do I configure endpoints](how-do-i-configure-endpoints.adoc)
 
+
+
+<!-- core components: START -->
 * Core Components
-    * [Bean](bean-component.adoc)
-    * [Binding](binding-component.adoc)
-    * [Browse](browse-component.adoc)
-    * [Class](class-component.adoc)
-    * [Controlbus](controlbus-component.adoc)
-    * [Dataformat](dataformat-component.adoc)
-    * [Dataset](dataset-component.adoc)
-    * [Direct](direct-component.adoc)
-    * [Direct-vm](direct-vm-component.adoc)
-    * [File](file-component.adoc)
-    * [Language](language-component.adoc)
-    * [Log](log-component.adoc)
-    * [Mock](mock-component.adoc)
-    * [Properties](properties-component.adoc)
-    * [Ref](ref-component.adoc)
-    * [Rest](rest-component.adoc)
-    * [Rest API](rest-api-component.adoc)
-    * [Scheduler](scheduler-component.adoc)
-    * [Seda](seda-component.adoc)
-    * [Stub](stub-component.adoc)
-    * [Test](test-component.adoc)
-    * [Timer](timer-component.adoc)
-    * [Validator](validator-component.adoc)
-    * [VM](vm-component.adoc)
-    * [Xslt](xslt-component.adoc)
+       * [Bean](bean-component.adoc)
+       * [Binding](binding-component.adoc)
+       * [Browse](browse-component.adoc)
+       * [Class](class-component.adoc)
+       * [Control Bus](controlbus-component.adoc)
+       * [Data Format](dataformat-component.adoc)
+       * [Dataset](dataset-component.adoc)
+       * [Direct](direct-component.adoc)
+       * [Direct VM](direct-vm-component.adoc)
+       * [File](file-component.adoc)
+       * [Language](language-component.adoc)
+       * [Log](log-component.adoc)
+       * [Mock](mock-component.adoc)
+       * [Properties](properties-component.adoc)
+       * [REST](rest-component.adoc)
+       * [REST API](rest-api-component.adoc)
+       * [Ref](ref-component.adoc)
+       * [SEDA](seda-component.adoc)
+       * [Scheduler](scheduler-component.adoc)
+       * [Stub](stub-component.adoc)
+       * [Test](test-component.adoc)
+       * [Timer](timer-component.adoc)
+       * [VM](vm-component.adoc)
+       * [Validator](validator-component.adoc)
+       * [XSLT](xslt-component.adoc)
+<!-- core components: END -->
+
+
+
+
+
 
+<!-- components: START -->
 * Components
-    * [Async Http Client (AHC)](ahc-component.adoc)
-    * [AHC Websocket (AHC-WS)](ahc-ws-component.adoc)
-    * [Amqp](amqp-component.adoc)
-    * [Apns](apns-component.adoc)
-    * [Atmosphere Websocket](atmosphere-websocket-component.adoc)
-    * [Atmos](atmos-component.adoc)
-    * [Atom](atom-component.adoc)
-    * [Avro](avro-component.adoc)
-    * [AWS](aws-component.adoc)
-        * [AWS CloudWatch](aws-cw-component.adoc)
-        * [AWS DynamoDB](aws-ddb-component.adoc)
-        * [AWS DynamoDB Streams](aws-ddbstream-component.adoc)
-        * [AWS EC2](aws-ec2-component.adoc)
-        * [AWS Kinesis](aws-kinesis-component.adoc)
-        * [AWS S3](aws-s3-component.adoc)
-        * [AWS SDB](aws-sdb-component.adoc)
-        * [AWS SES](aws-ses-component.adoc)
-        * [AWS SNS](aws-sns-component.adoc)
-        * [AWS SQS](aws-sqs-component.adoc)
-        * [AWS SWF](aws-swf-component.adoc)
-    * [Bam](bam.adoc)
-    * [Barcode](barcode-data-format-component.adoc)
-    * [Base64](base64-component.adoc)
-    * [Beanstalk](beanstalk-component.adoc)
-    * [Bean-validator](bean-validator-component.adoc)
-    * [Bindy](bindy-component.adoc)
-    * [Blueprint](blueprint-testing-component.adoc)
-    * [Boon](boon-component.adoc)
-    * [Box](box-component.adoc)
-    * [Braintree](braintree-component.adoc)
-    * [Cache](cache-component.adoc)
-    * [Cassandraql](cql-component.adoc)
-    * [Castor](castor-component.adoc)
-    * [CDI](cdi.adoc)
-    * [Chunk](chunk-component.adoc)
-    * [Cmis](cmis-component.adoc)
-    * [CM SMS](cm-sms-component.adoc)
-    * [CoAP](coap-component.adoc)
-    * [Cometd](cometd-component.adoc)
-    * [Context](context-component.adoc)
-    * [Couchdb](couchdb-component.adoc)
-    * [Crypto](crypto-component.adoc)
-        * [Crypto Digital Signatures](crypto-digital-signatures.adoc)
-    * [CSV](csv.adoc)
-    * [CXF](cxf-component.adoc)
-        * [CXFRS](cxfrs-component.adoc)
-        * [CXF Transport](cxf-transport.adoc)
-    * [Disruptor](disruptor-component.adoc)
-    * [DNS](dns-component.adoc)
-    * [Docker](docker-component.adoc)
-    * [Dozer](dozer-component.adoc)
-    * [Dropbox](dropbox-component.adoc)
-    * [Eclipse](eclipse.adoc)
-    * [Ehcache](ehcache-component.adoc)
-    * [EJB](ejb-component.adoc)
-    * [ElasticSearch](elasticsearch-component.adoc)
-    * [Elsql](elsql-component.adoc)
-    * [Eventadmin](eventadmin-component.adoc)
-    * [Exec](exec-component.adoc)
-    * [Facebook](facebook-component.adoc)
-    * [Flatpack](flatpack-component.adoc)
-    * [FOP](fop-component.adoc)
-    * [Freemarker](freemarker-component.adoc)
-    * [FTP](ftp-component.adoc)
-    * [Ganglia](ganglia-component.adoc)
-    * [Geocoder](geocoder-component.adoc)
-    * [Git](git-component.adoc)
-    * [Github](github-component.adoc)
-    * [Google Calendar](google-calendar-component.adoc)
-    * [Google Drive](google-drive-component.adoc)
-    * [Google Mail](google-mail-component.adoc)
-    * [Gora](gora-component.adoc)
-    * [Grape](grape-component.adoc)
-    * [Groovy](groovy.adoc)
-        * [Groovy DSL](groovy-dsl.adoc)
-    * [Gson](gson.adoc)
-    * [Guava Eventbus](guava-eventbus-component.adoc)
-    * [Guice](guice.adoc)
-    * [Hawtdb](hawtdb.adoc)
-    * [Hazelcast](hazelcast-component.adoc)
-    * [Hbase](hbase-component.adoc)
-    * [HDFS](hdfs-component.adoc)
-    * [HDFS2](hdfs2-component.adoc)
-    * [Hessian](hessian.adoc)
-    * [Hipchat](hipchat-component.adoc)
-    * [HL7](hl7.adoc)
-    * [Http](http-component.adoc)
-    * [Http4](http4-component.adoc)
-    * [Ibatis](ibatis-component.adoc)
-    * [Infinispan](infinispan-component.adoc)
-    * [IRC](irc-component.adoc)
-    * [Ironmq](ironmq-component.adoc)
-    * [Jackson](jackson.adoc)
-    * [Jasypt](jasypt.adoc)
-    * [Javaspace](javaspace-component.adoc)
-    * [JMS](jms-component.adoc)
-    * [JMX](jmx-component.adoc)
-    * [JSON](json.adoc)
-    * [Jbpm](jbpm-component.adoc)
-    * [Jcache](jcache-component.adoc)
-    * [Jclouds](jclouds-component.adoc)
-    * [Jcr](jcr-component.adoc)
-    * [JDBC](jdbc-component.adoc)
-    * [Jetty](jetty-component.adoc)
-    * [Jgroups](jgroups-component.adoc)
-    * [Jing](jing-component.adoc)
-    * [JIRA](jira-component.adoc)
-    * [Jolt](jolt-component.adoc)
-    * [Jpa](jpa-component.adoc)
-    * [JT400](jt400-component.adoc)
-    * [Kafka](kafka-component.adoc)
-    * [Kestrel](kestrel-component.adoc)
-    * [Krati](krati-component.adoc)
-    * [Kubernetes](kubernetes-component.adoc)
-    * [Kura](kura-component.adoc)
-    * [LDAP](ldap-component.adoc)
-    * [LevelDB](leveldb.adoc)
-    * [Linkedin](linkedin-component.adoc)
-    * [Lucene](lucene-component.adoc)
-    * [Lumberjack](lumberjack-component.adoc)
-    * [Mail](mail.adoc)
-        * [IMAP](imap-component.adoc)
-        * [IMAPs](imaps-component.adoc)
-        * [POP3](pop3-component.adoc)
-        * [POP3s](pop3s-component.adoc)
-        * [SMTP](smtp-component.adoc)
-        * [SMTPs](smtps-component.adoc)
-    * [Metrics](metrics.adoc)
-    * [Mina](mina-component.adoc)
-    * [Mina2](mina2-component.adoc)
-    * [MLLP](mllp.adoc)
-    * [MongoDB](mongodb-component.adoc)
-    * [MongoDB-GridFS](gridfs-component.adoc)
-    * [MQTT](mqtt-component.adoc)
-    * [Msv](msv-component.adoc)
-    * [Mustache](mustache-component.adoc)
-    * [Mvel](mvel-component.adoc)
-    * [Mybatis](mybatis-component.adoc)
-    * [Nagios](nagios-component.adoc)
-    * [Netty](netty-component.adoc)
-    * [Netty4](netty4-component.adoc)
-    * [Netty HTTP](netty-http-component.adoc)
-    * [Netty4 HTTP](netty4-http-component.adoc)
-    * [NATS](nats-component.adoc)
-    * [Olingo2](olingo2-component.adoc)
-    * [Openshift](openshift-component.adoc)
-    * [Optaplanner](optaplanner-component.adoc)
-    * [Paho](paho-component.adoc)
-    * [Paxlogging](paxlogging-component.adoc)
-    * [PDF](pdf-component.adoc)
-    * [PGEvent](pgevent-component.adoc)
-    * [Printer](lpr-component.adoc)
-    * [Quartz](quartz-component.adoc)
-    * [Quartz2](quartz2-component.adoc)
-    * [Quickfix](quickfix-component.adoc)
-    * [RabbitMQ](rabbitmq-component.adoc)
-    * [Restlet](restlet-component.adoc)
-    * [RMI](rmi-component.adoc)
-    * [Routebox](routebox-component.adoc)
-    * [RSS](rss-component.adoc)
-    * [Salesforce](salesforce-component.adoc)
-    * [SAP NetWeaver](sap-netweaver-component.adoc)
-    * [Saxon](xquery.adoc)
-    * [Scp](scp-component.adoc)
-    * [Schematron](schematron-component.adoc)
-    * [SCR](camel-and-scr.adoc)
-    * [Script](script.adoc)
-    * [Servicenow](servicenow-component.adoc)
-    * [Servlet](servlet-component.adoc)
-    * [Servlet Listener](servletlistener.adoc)
-    * [Shiro](shiro-security.adoc)
-    * [SIP](sip-component.adoc)
-    * [SJMS](sjms-component.adoc)
-    * [SJMS Batch](sjms-batch-component.adoc)
-    * [Slack](slack-component.adoc)
-    * [SMPP](smpp-component.adoc)
-    * [SNMP](snmp-component.adoc)
-    * [Solr](solr-component.adoc)
-    * [Spark](spark-component.adoc)
-    * [Spark-Rest](spark-rest-component.adoc)
-    * [Splunk](splunk-component.adoc)
-    * [Spring](spring.adoc)
-    * [Spring-Batch](spring-batch-component.adoc)
-    * [Spring-Boot](spring-boot.adoc)
-    * [Spring-Event](spring-event-component.adoc)
-    * [Spring-Integration](spring-integration-component.adoc)
-    * [Spring-Javaconfig](spring-java-config.adoc)
-    * [Spring-Ldap](spring-ldap-component.adoc)
-    * [Spring-Redis](spring-redis-component.adoc)
-    * [Spring-Security](spring-security.adoc)
-    * [Spring-Web-Services](spring-ws-component.adoc)
-    * [SQL](sql-component.adoc)
-        * [SQL-Stored](sql-stored-component.adoc)
-    * [SSH](ssh-component.adoc)
-    * [StAX](stax-component.adoc)
-    * [Stomp](stomp-component.adoc)
-    * [Stream](stream-component.adoc)
-    * [Stringtemplate](string-template.adoc)
-    * [Swagger](swagger.adoc)
-    * [Swagger Java](swagger-java.adoc)
-    * [Telegram](telegram-component.adoc)
-    * [Twitter](twitter-component.adoc)
-    * [Undertow](undertow-component.adoc)
-    * [URLRewrite](urlrewrite.adoc)
-    * [Velocity](velocity-component.adoc)
-    * [Vertx](vertx-component.adoc)
-    * [Weather](weather-component.adoc)
-    * [Websocket](websocket-component.adoc)
-    * [XML Security](xmlsecurity-component.adoc)
-    * [XMPP](xmpp-component.adoc)
-    * [Yammer](yammer-component.adoc)
-    * [Zipkin](zipkin.adoc)
-    * [ZooKeeper](zookeeper-component.adoc)
+       * [AHC](ahc-component.adoc)
+       * [AHC Websocket](ahc-ws-component.adoc)
+       * [AMQP](amqp-component.adoc)
+       * [APNS](apns-component.adoc)
+       * [AWS CloudWatch](aws-cw-component.adoc)
+       * [AWS DynamoDB](aws-ddb-component.adoc)
+       * [AWS DynamoDB Streams](aws-ddbstream-component.adoc)
+       * [AWS EC2](aws-ec2-component.adoc)
+       * [AWS Kinesis](aws-kinesis-component.adoc)
+       * [AWS S3 Storage Service](aws-s3-component.adoc)
+       * [AWS Simple Email Service](aws-ses-component.adoc)
+       * [AWS Simple Notification System](aws-sns-component.adoc)
+       * [AWS Simple Queue Service](aws-sqs-component.adoc)
+       * [AWS Simple Workflow](aws-swf-component.adoc)
+       * [AWS SimpleDB](aws-sdb-component.adoc)
+       * [Apache Flink](flink-component.adoc)
+       * [Apache Spark](spark-component.adoc)
+       * [Atmos](atmos-component.adoc)
+       * [Atmosphere Websocket](atmosphere-websocket-component.adoc)
+       * [Atom](atom-component.adoc)
+       * [Avro](avro-component.adoc)
+       * [Bean Validator](bean-validator-component.adoc)
+       * [Beanstalk](beanstalk-component.adoc)
+       * [Box](box-component.adoc)
+       * [Braintree](braintree-component.adoc)
+       * [CM SMS Gateway](cm-sms-component.adoc)
+       * [CMIS](cmis-component.adoc)
+       * [CXF](cxf-component.adoc)
+       * [CXF-RS](cxfrs-component.adoc)
+       * [Camel Context](context-component.adoc)
+       * [Cassandra CQL](cql-component.adoc)
+       * [Chronicle Engine](chronicle-engine-component.adoc)
+       * [Chunk](chunk-component.adoc)
+       * [CoAP](coap-component.adoc)
+       * [CometD](cometd-component.adoc)
+       * [Consul](consul-component.adoc)
+       * [CouchDB](couchdb-component.adoc)
+       * [Crypto (JCE)](crypto-component.adoc)
+       * [DNS](dns-component.adoc)
+       * [Disruptor](disruptor-component.adoc)
+       * [Docker](docker-component.adoc)
+       * [Dozer](dozer-component.adoc)
+       * [Dropbox](dropbox-component.adoc)
+       * [EHCache](cache-component.adoc)
+       * [EJB](ejb-component.adoc)
+       * [Ehcache](ehcache-component.adoc)
+       * [ElSQL](elsql-component.adoc)
+       * [Elasticsearch](elasticsearch-component.adoc)
+       * [Exec](exec-component.adoc)
+       * [FOP](fop-component.adoc)
+       * [FTP](ftp-component.adoc)
+       * [FTPS](ftps-component.adoc)
+       * [Facebook](facebook-component.adoc)
+       * [Flatpack](flatpack-component.adoc)
+       * [Freemarker](freemarker-component.adoc)
+       * [Ganglia](ganglia-component.adoc)
+       * [Geocoder](geocoder-component.adoc)
+       * [Git](git-component.adoc)
+       * [GitHub](github-component.adoc)
+       * [Google Calendar](google-calendar-component.adoc)
+       * [Google Drive](google-drive-component.adoc)
+       * [Google Mail](google-mail-component.adoc)
+       * [Gora](gora-component.adoc)
+       * [Grape](grape-component.adoc)
+       * [Guava EventBus](guava-eventbus-component.adoc)
+       * [HBase](hbase-component.adoc)
+       * [HDFS](hdfs-component.adoc)
+       * [HDFS2](hdfs2-component.adoc)
+       * [HTTP](http-component.adoc)
+       * [HTTP4](http4-component.adoc)
+       * [Hazelcast](hazelcast-component.adoc)
+       * [Hipchat](hipchat-component.adoc)
+       * [IMAP](imap-component.adoc)
+       * [IRC](irc-component.adoc)
+       * [Infinispan](infinispan-component.adoc)
+       * [InfluxDB](influxdb-component.adoc)
+       * [JBPM](jbpm-component.adoc)
+       * [JCR](jcr-component.adoc)
+       * [JCache](jcache-component.adoc)
+       * [JClouds](jclouds-component.adoc)
+       * [JDBC](jdbc-component.adoc)
+       * [JGroups](jgroups-component.adoc)
+       * [JIRA](jira-component.adoc)
+       * [JMS](jms-component.adoc)
+       * [JMX](jmx-component.adoc)
+       * [JOLT](jolt-component.adoc)
+       * [JPA](jpa-component.adoc)
+       * [JT400](jt400-component.adoc)
+       * [JavaSpace](javaspace-component.adoc)
+       * [Jetty 9](jetty-component.adoc)
+       * [Jetty Websocket](websocket-component.adoc)
+       * [Jing](jing-component.adoc)
+       * [Kafka](kafka-component.adoc)
+       * [Kestrel](kestrel-component.adoc)
+       * [Krati](krati-component.adoc)
+       * [Kubernetes](kubernetes-component.adoc)
+       * [LDAP](ldap-component.adoc)
+       * [Linkedin](linkedin-component.adoc)
+       * [Lucene](lucene-component.adoc)
+       * [Lumberjack](lumberjack-component.adoc)
+       * [MQTT](mqtt-component.adoc)
+       * [MSV](msv-component.adoc)
+       * [MVEL](mvel-component.adoc)
+       * [Metrics](metrics-component.adoc)
+       * [Mina](mina-component.adoc)
+       * [Mina2](mina2-component.adoc)
+       * [MongoDB](mongodb-component.adoc)
+       * [MongoDBGridFS](gridfs-component.adoc)
+       * [Mustache](mustache-component.adoc)
+       * [MyBatis](mybatis-component.adoc)
+       * [Nagios](nagios-component.adoc)
+       * [Nats](nats-component.adoc)
+       * [Netty](netty-component.adoc)
+       * [Netty HTTP](netty-http-component.adoc)
+       * [Netty4](netty4-component.adoc)
+       * [Netty4 HTTP](netty4-http-component.adoc)
+       * [OSGi EventAdmin](eventadmin-component.adoc)
+       * [OSGi PAX Logging](paxlogging-component.adoc)
+       * [OpenShift](openshift-component.adoc)
+       * [OptaPlanner](optaplanner-component.adoc)
+       * [PDF](pdf-component.adoc)
+       * [Paho](paho-component.adoc)
+       * [PostgresSQL Event](pgevent-component.adoc)
+       * [Printer](lpr-component.adoc)
+       * [Quartz](quartz-component.adoc)
+       * [Quartz2](quartz2-component.adoc)
+       * [QuickFix](quickfix-component.adoc)
+       * [RMI](rmi-component.adoc)
+       * [RSS](rss-component.adoc)
+       * [RabbitMQ](rabbitmq-component.adoc)
+       * [Restlet](restlet-component.adoc)
+       * [RouteBox](routebox-component.adoc)
+       * [SAP NetWeaver](sap-netweaver-component.adoc)
+       * [SCP](scp-component.adoc)
+       * [SFTP](sftp-component.adoc)
+       * [SIP](sip-component.adoc)
+       * [SMPP](smpp-component.adoc)
+       * [SNMP](snmp-component.adoc)
+       * [SQL](sql-component.adoc)
+       * [SQL StoredProcedure](sql-stored-component.adoc)
+       * [SSH](ssh-component.adoc)
+       * [Salesforce](salesforce-component.adoc)
+       * [Schematron](schematron-component.adoc)
+       * [ServiceNow](servicenow-component.adoc)
+       * [Servlet](servlet-component.adoc)
+       * [Simple JMS](sjms-component.adoc)
+       * [Simple JMS Batch](sjms-batch-component.adoc)
+       * [Slack](slack-component.adoc)
+       * [Solr](solr-component.adoc)
+       * [Spark Rest](spark-rest-component.adoc)
+       * [Splunk](splunk-component.adoc)
+       * [Spring Batch](spring-batch-component.adoc)
+       * [Spring Event](spring-event-component.adoc)
+       * [Spring Integration](spring-integration-component.adoc)
+       * [Spring LDAP](spring-ldap-component.adoc)
+       * [Spring Redis](spring-redis-component.adoc)
+       * [Spring WebService](spring-ws-component.adoc)
+       * [StAX](stax-component.adoc)
+       * [Stomp](stomp-component.adoc)
+       * [Stream](stream-component.adoc)
+       * [String Template](string-template-component.adoc)
+       * [Telegram](telegram-component.adoc)
+       * [Twitter](twitter-component.adoc)
+       * [Undertow](undertow-component.adoc)
+       * [Velocity](velocity-component.adoc)
+       * [Vert.x](vertx-component.adoc)
+       * [Weather](weather-component.adoc)
+       * [XML RPC](xmlrpc-component.adoc)
+       * [XML Security](xmlsecurity-component.adoc)
+       * [XMPP](xmpp-component.adoc)
+       * [XQuery](xquery-component.adoc)
+       * [Yammer](yammer-component.adoc)
+       * [ZooKeeper](zookeeper-component.adoc)
+       * [etcd](etcd-component.adoc)
+       * [iBatis](ibatis-component.adoc)
+       * [ironmq](ironmq-component.adoc)
+       * [mllp](mllp-component.adoc)
+<!-- components: END -->
+
+
+
+
+
 
 * [Expression Languages](languages.adoc)
     * [Bean Language](bean-language.adoc)

http://git-wip-us.apache.org/repos/asf/camel/blob/3791e125/platforms/catalog/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/catalog/pom.xml b/platforms/catalog/pom.xml
index e76cdcb..413cf3b 100644
--- a/platforms/catalog/pom.xml
+++ b/platforms/catalog/pom.xml
@@ -90,8 +90,10 @@
         <version>${project.version}</version>
         <executions>
           <execution>
+            <!-- prepare the catalog before the user guide -->
             <goals>
               <goal>prepare-catalog</goal>
+              <goal>prepare-user-guide</goal>
             </goals>
             <phase>process-resources</phase>
           </execution>

http://git-wip-us.apache.org/repos/asf/camel/blob/3791e125/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
----------------------------------------------------------------------
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
new file mode 100644
index 0000000..1b27084
--- /dev/null
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
@@ -0,0 +1,261 @@
+/**
+ * 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.
+ */
+package org.apache.camel.maven.packaging;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import edu.emory.mathcs.backport.java.util.Collections;
+import org.apache.camel.maven.packaging.model.ComponentModel;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+
+import static org.apache.camel.maven.packaging.PackageHelper.loadText;
+import static org.apache.camel.maven.packaging.PackageHelper.writeText;
+
+/**
+ * Prepares the user guide to keep the table of content up to date with the 
components, data formats, and languages.
+ *
+ * @goal prepare-user-guide
+ */
+public class PrepareUserGuideMojo extends AbstractMojo {
+
+    /**
+     * The maven project.
+     *
+     * @parameter property="project"
+     * @required
+     * @readonly
+     */
+    protected MavenProject project;
+
+    /**
+     * The directory for components catalog
+     *
+     * @parameter 
default-value="${project.build.directory}/classes/org/apache/camel/catalog/components"
+     */
+    protected File componentsDir;
+
+    /**
+     * The directory for the user guide
+     *
+     * @parameter 
default-value="${project.directory}/../../../docs/user-manual/en"
+     */
+    protected File userGuideDir;
+
+    /**
+     * Maven ProjectHelper.
+     *
+     * @component
+     * @readonly
+     */
+    private MavenProjectHelper projectHelper;
+
+    /**
+     * Execute goal.
+     *
+     * @throws MojoExecutionException execution of the main class or one of the
+     *                                                        threads it 
generated failed.
+     * @throws MojoFailureException   something bad happened...
+     */
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        executeComponents();
+    }
+
+    protected void executeComponents() throws MojoExecutionException, 
MojoFailureException {
+        Set<File> componentFiles = new TreeSet<File>();
+
+        if (componentsDir != null && componentsDir.isDirectory()) {
+            File[] files = componentsDir.listFiles();
+            if (files != null) {
+                componentFiles.addAll(Arrays.asList(files));
+            }
+        }
+
+        try {
+            List<ComponentModel> models = new ArrayList<>();
+            for (File core : componentFiles) {
+                String json = loadText(new FileInputStream(core));
+                ComponentModel model = generateComponentModel(json);
+
+                // filter out alternative schemas which reuses documentation
+                boolean add = true;
+                if (!model.getAlternativeSchemes().isEmpty()) {
+                    String first = model.getAlternativeSchemes().split(",")[0];
+                    if (!model.getScheme().equals(first)) {
+                        add = false;
+                    }
+                }
+                if (add) {
+                    models.add(model);
+                }
+            }
+
+            // sor the models
+            Collections.sort(models, new ComponentComparator());
+
+            // the summary file has the TOC
+            File file = new File(userGuideDir, "SUMMARY.md");
+
+            // update core components
+            StringBuilder core = new StringBuilder();
+            core.append("* Core Components\n");
+            for (ComponentModel model : models) {
+                if (model.getLabel().contains("core")) {
+                    String line = "\t* " + link(model) + "\n";
+                    core.append(line);
+                }
+            }
+            boolean updated = updateCoreComponents(file, core.toString());
+
+            // update regular components
+            StringBuilder regular = new StringBuilder();
+            regular.append("* Components\n");
+            for (ComponentModel model : models) {
+                if (!model.getLabel().contains("core")) {
+                    String line = "\t* " + link(model) + "\n";
+                    regular.append(line);
+                }
+            }
+            updated |= updateComponents(file, regular.toString());
+
+            if (updated) {
+                getLog().info("Updated user guide file: " + file);
+            } else {
+                getLog().debug("No changes to user guide file: " + file);
+            }
+
+        } catch (IOException e) {
+            throw new MojoFailureException("Error due " + e.getMessage(), e);
+        }
+    }
+
+    private boolean updateCoreComponents(File file, String changed) throws 
MojoExecutionException {
+        if (!file.exists()) {
+            return false;
+        }
+
+        try {
+            String text = loadText(new FileInputStream(file));
+
+            String existing = StringHelper.between(text, "<!-- core 
components: START -->" , "<!-- core components: END -->");
+            if (existing != null) {
+                // remove leading line breaks etc
+                existing = existing.trim();
+                changed = changed.trim();
+                if (existing.equals(changed)) {
+                    return false;
+                } else {
+                    String before = StringHelper.before(text, "<!-- core 
components: START -->");
+                    String after = StringHelper.after(text, "<!-- core 
components: END -->");
+                    text = before + "\n<!-- core components: START -->\n" + 
changed + "\n<!-- core components: END -->\n" + after;
+                    writeText(file, text);
+                    return true;
+                }
+            } else {
+                getLog().warn("Cannot find markers in file " + file);
+                getLog().warn("Add the following markers");
+                getLog().warn("\t<!-- core components: START -->");
+                getLog().warn("\t<!-- core components: END -->");
+                return false;
+            }
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error reading file " + file + " 
Reason: " + e, e);
+        }
+    }
+
+    private boolean updateComponents(File file, String changed) throws 
MojoExecutionException {
+        if (!file.exists()) {
+            return false;
+        }
+
+        try {
+            String text = loadText(new FileInputStream(file));
+
+            String existing = StringHelper.between(text, "<!-- components: 
START -->" , "<!-- components: END -->");
+            if (existing != null) {
+                // remove leading line breaks etc
+                existing = existing.trim();
+                changed = changed.trim();
+                if (existing.equals(changed)) {
+                    return false;
+                } else {
+                    String before = StringHelper.before(text, "<!-- 
components: START -->");
+                    String after = StringHelper.after(text, "<!-- components: 
END -->");
+                    text = before + "\n<!-- components: START -->\n" + changed 
+ "\n<!-- components: END -->\n" + after;
+                    writeText(file, text);
+                    return true;
+                }
+            } else {
+                getLog().warn("Cannot find markers in file " + file);
+                getLog().warn("Add the following markers");
+                getLog().warn("\t<!-- components: START -->");
+                getLog().warn("\t<!-- components: END -->");
+                return false;
+            }
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error reading file " + file + " 
Reason: " + e, e);
+        }
+    }
+
+    private static String link(ComponentModel model) {
+        return "[" + model.getTitle() + "](" + model.getScheme() + 
"-component.adoc)";
+    }
+
+    private static class ComponentComparator implements 
Comparator<ComponentModel> {
+
+        @Override
+        public int compare(ComponentModel o1, ComponentModel o2) {
+            // lets sory by title
+            return o1.getTitle().compareTo(o2.getTitle());
+        }
+    }
+
+    private ComponentModel generateComponentModel(String json) {
+        List<Map<String, String>> rows = 
JSonSchemaHelper.parseJsonSchema("component", json, false);
+
+        ComponentModel component = new ComponentModel();
+        component.setScheme(JSonSchemaHelper.getSafeValue("scheme", rows));
+        component.setSyntax(JSonSchemaHelper.getSafeValue("syntax", rows));
+        
component.setAlternativeSyntax(JSonSchemaHelper.getSafeValue("alternativeSyntax",
 rows));
+        
component.setAlternativeSchemes(JSonSchemaHelper.getSafeValue("alternativeSchemes",
 rows));
+        component.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
+        component.setDescription(JSonSchemaHelper.getSafeValue("description", 
rows));
+        component.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
+        component.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", 
rows));
+        
component.setConsumerOnly(JSonSchemaHelper.getSafeValue("consumerOnly", rows));
+        
component.setProducerOnly(JSonSchemaHelper.getSafeValue("producerOnly", rows));
+        component.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows));
+        component.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
+        component.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", 
rows));
+        component.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+
+        return component;
+    }
+
+}
\ No newline at end of file

Reply via email to