http://git-wip-us.apache.org/repos/asf/polygene-website/blob/bb9c9971/content/java/2017/bootstrap-3.3.7/js/bootstrap.min.js
----------------------------------------------------------------------
diff --git a/content/java/2017/bootstrap-3.3.7/js/bootstrap.min.js 
b/content/java/2017/bootstrap-3.3.7/js/bootstrap.min.js
new file mode 100644
index 0000000..9bcd2fc
--- /dev/null
+++ b/content/java/2017/bootstrap-3.3.7/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires 
jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" 
")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new 
Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but 
lower than version 4")}(jQuery),+function(a){"use strict";function b(){var 
a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd
 otransitionend",transition:"transitionend"};for(var c in b)if(void 
0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var
 c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var 
e=function(){c||a(d).trigger(a.support.transition.end)};return 
setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b
 .target).is(this))return 
b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use 
strict";function b(b){return this.each(function(){var 
c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new 
d(this)),"string"==typeof b&&e[b].call(c)})}var 
c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function
 c(){g.detach().trigger("closed.bs.alert").remove()}var 
e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var
 
g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var
 
e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return
 a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c
 ,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return 
this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof 
b&&b;e||d.data("bs.button",e=new 
c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var 
c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var
 
c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var
 a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var 
c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeCla
 
ss("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else
 
this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var
 
d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return
 
a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var
 
d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"],
 
input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api
 
blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"us
 e strict";function b(b){return this.each(function(){var 
d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof
 b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new 
c(this,f)),"number"==typeof 
b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var 
c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in
 
document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case
 37:this.prev();b
 reak;case 
39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return
 
b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return
 
this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var
 
c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return
 b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return 
this.$items.eq(f)},c.prototype.to=function(a){var 
b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return
 
this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return
 b||(this.paused=!0),thi
 s.$element.find(".next, 
.prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return
 this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return 
this.slide("prev")},c.prototype.slide=function(b,d){var 
e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return
 this.sliding=!1;var 
j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var
 
l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var
 m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return 
a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offs
 
etWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join("
 ")).addClass("active"),e.removeClass(["active",h].join(" 
")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var
 
d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return
 a.fn.carousel=d,this};var e=function(c){var 
d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var
 
g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var
 c=a(this);
 b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var 
c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return
 a(d)}function c(b){return this.each(function(){var 
c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof
 
b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new
 d(this,f)),"string"==typeof b&&e[b]()})}var 
d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var
 a=this.$element.hasClass("width");return 
a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&
 &!this.$element.hasClass("in")){var 
b,e=this.$parent&&this.$parent.children(".panel").children(".in, 
.collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var
 
f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var
 
g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var
 h=function(){this.$element.removeClass("collapsing").addClass("collapse 
in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return
 h.call(this);var 
i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var
 b=a.Event("hide.b
 s.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var 
c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse
 
in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var
 
e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return
 a.support.transition?void 
this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return
 
a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var
 
e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var
 c=a.hasClass("in");a.attr("aria-expande
 d",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var 
e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return
 
a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var
 e=a(this);e.attr("data-target")||d.preventDefault();var 
f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use
 strict";function b(b){var 
c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var
 d=c&&a(c);return d&&d.length?d:b.parent()}function 
c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var 
d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}funct
 ion d(b){return this.each(function(){var 
c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new 
g(this)),"string"==typeof b&&d[b].call(c)})}var 
e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var
 e=a(this);if(!e.is(".disabled, :disabled")){var 
f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in 
document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var
 
h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var
 d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, 
:disabled")){v
 ar e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 
27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" 
li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var 
j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var
 
h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return
 
a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown
 
form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use
 strict";function b(b,d){return this.each(function(){var 
e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof
 b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?
 f[b](d):g.show&&f.show(d)})}var 
c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return
 this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var 
d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dial
 
og.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var
 
e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var
 
f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.m
 
odal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var
 
a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})
 
},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var
 
d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var
 
f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop
 
"+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return
 
this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else
 if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var 
g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransiti
 onEnd(c.BACKDROP_TRANSITION_DURATION):g()}else 
b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var
 
a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var
 a=window.innerWidth;if(!a){var 
b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var
 
a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding
 -right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var 
a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var
 b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var 
d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return
 
a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var
 
d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use
 strict";function b(b){return this.each(function(){var 
d=a(this),e=d.data("bs.tooltip"),f="object"==typeof 
b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"
 string"==typeof b&&e[b]())})}var 
c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div
 class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div 
class="tooltip-inner"></div></div>',trigger:"hover 
focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof
 document.constructor&&!this.options.selector)throw new Error("`selector` 
option must be specified when initializing "+
 this.type+" on the window.document object!");for(var 
e=this.options.trigger.split(" "),f=e.length;f--;){var 
g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else
 if("manual"!=g){var 
h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return
 c.DEFAULTS},c.prototype.getOptions=function(b){return 
b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof
 
b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var
 b={},c=this.getDefaults();return 
this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){v
 ar c=b instanceof 
this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new 
this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b
 instanceof 
a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var
 a in 
this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var
 c=b instanceof 
this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new 
this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b
 instanceof 
a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return
 clearTimeout(c.timeout),c.hoverState="out",c.option
 
s.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var
 
b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var
 
d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var
 
e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var
 h="function"==typeof 
this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var
 k=this.getPosition(),l=f[0].offsetWidth,m=f[0
 ].offsetHeight;if(j){var 
n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var
 p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var 
q=function(){var 
a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var
 
d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var
 i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var 
k=this.getViewport
 AdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var 
l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var
 
a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade
 in top bottom left right")},c.prototype.hide=function(b){function 
d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var
 
e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return
 
f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var
 a=this.$element;(a.attr("title")||"s
 tring"!=typeof 
a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return
 this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var 
c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var
 f=window.SVGElement&&c instanceof 
window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return
 
a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var
 e={top:0,left:0};if(!this.$viewport)ret
 urn e;var 
f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var
 
h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var
 
j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return
 e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return 
a=b.attr("data-original-title")||("function"==typeof 
c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do 
a+=~~(1e6*Math.random());while(document.getElementById(a));return 
a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw
 new Error(this.type+" `template` option must consist of exactly 1 top-level 
element!");return this.$tip},c.prototype.arrow=function(){return 
this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){th
 
is.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var
 c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new 
this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var
 
a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var
 
d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return
 a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return 
this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof 
b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new 
c(this,f)),"string"==typeof b&&e[b]())})}v
 ar c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new 
Error("Popover requires 
tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div
 class="popover" role="tooltip"><div class="arrow"></div><h3 
class="popover-title"></h3><div 
class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return
 c.DEFAULTS},c.prototype.setContent=function(){var 
a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof
 c?"html":"append":"text"](c),a.removeClass("fade top bottom left right 
in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return
 this.getTitle()||this.getContent()},c.prototype.getContent=
 function(){var a=this.$element,b=this.options;return 
a.attr("data-content")||("function"==typeof 
b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return 
this.$arrow=this.$arrow||this.tip().find(".arrow")};var 
d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return
 a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function 
b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+"
 .nav li > 
a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function
 c(c){return this.each(function(){var 
d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof 
c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof 
c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollH
 eight=function(){return 
this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var
 
b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var
 b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return 
f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return
 
a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var
 
a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return
 g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return 
this.activeTarget=null,this.
 clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 
0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
+this.activeTarget=b,this.clear();var 
c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var
 
d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return
 
a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var
 b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function 
b(b){return this.each(function(){var 
d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof 
b&&e[b]()})}var 
c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var
 b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("ta
 
rget");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var
 e=c.find(".active:last 
a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var
 
h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function
 f(){g.removeClass("active").find("> .dropdown-menu > 
.active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var
 g=d.find("> .active"),h=e&
 &a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> 
.fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var
 
d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return
 a.fn.tab=d,this};var 
e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use
 strict";function b(b){return this.each(function(){var 
d=a(this),e=d.data("bs.affix"),f="object"==typeof 
b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var 
c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkP
 osition()};c.VERSION="3.3.7",c.RESET="affix affix-top 
affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var
 
e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return
 e<c&&"top";if("bottom"==this.affixed)return 
null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var 
h=null==this.affixed,i=h?e:f.top,j=h?g:b;return 
null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return
 this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var 
a=this.$target.scrollTop(),b=this.$element.offset();return 
this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var
 
b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"o
 bject"!=typeof d&&(f=e=d),"function"==typeof 
e&&(e=d.top(this.$element)),"function"==typeof 
f&&(f=d.bottom(this.$element));var 
h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var
 
i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var
 
d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return
 
a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var
 
c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-website/blob/bb9c9971/content/java/2017/bootstrap-3.3.7/js/npm.js
----------------------------------------------------------------------
diff --git a/content/java/2017/bootstrap-3.3.7/js/npm.js 
b/content/java/2017/bootstrap-3.3.7/js/npm.js
new file mode 100644
index 0000000..bf6aa80
--- /dev/null
+++ b/content/java/2017/bootstrap-3.3.7/js/npm.js
@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() 
this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js')
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-website/blob/bb9c9971/content/java/2017/build-system.html
----------------------------------------------------------------------
diff --git a/content/java/2017/build-system.html 
b/content/java/2017/build-system.html
new file mode 100644
index 0000000..2168596
--- /dev/null
+++ b/content/java/2017/build-system.html
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";><head><meta http-equiv="Content-Type" 
content="text/html; charset=UTF-8" /><title>Polygene™ Build 
System</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" 
/><link rel="home" href="index.html" title="" /><link rel="up" 
href="tutorials.html" title="Tutorials" /><link rel="prev" 
href="howto-invocation-annotation.html" title="Use @Invocation" /><link 
rel="next" href="community-docs.html" title="Polygene™ Documentation" />
+
+
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <link rel="icon" href="../../favicon.ico">
+
+    <title>Starter Template for Bootstrap</title>
+
+    <!-- Bootstrap core CSS -->
+    <link href="bootstrap-3.3.7/css/bootstrap.min.css" rel="stylesheet">
+
+    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
+    <link href="css/ie10-viewport-bug-workaround.css" rel="stylesheet">
+
+    <!-- Custom styles for this template -->
+    <link href="css/polygene-ng.css" rel="stylesheet">
+
+    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
+    <!--[if lt IE 9]><script 
src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
+    <script src="js/ie-emulation-modes-warning.js"></script>
+
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
+    <!--[if lt IE 9]>
+      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js";></script>
+      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
+    <![endif]-->
+
+<!-- favicon -->
+
+<link rel="shortcut icon" href="http://polygene.apache.org/favicon.ico"; 
type="image/vnd.microsoft.icon" />
+<link rel="icon" href="http://polygene.apache.org/favicon.ico"; 
type="image/x-icon" />
+
+<!-- style -->
+
+<link href="css/shCore.css" rel="stylesheet" type="text/css" />
+<link href="css/shCoreEclipse.css" rel="stylesheet" type="text/css" />
+<link href="css/shThemeEclipse.css" rel="stylesheet" type="text/css" />
+<!--<link href="css/polygene.css" rel="stylesheet" type="text/css" />-->
+
+<!-- Syntax Highlighter -->
+
+<script type="text/javascript" src="js/shCore.js"></script>
+<script type="text/javascript" src="js/shBrushJava.js"></script>
+<script type="text/javascript" src="js/shBrushScala.js"></script>
+<script type="text/javascript" src="js/shBrushJScript.js"></script>
+<script type="text/javascript" src="js/shBrushBash.js"></script>
+<script type="text/javascript" src="js/shBrushPlain.js"></script>
+<script type="text/javascript" src="js/shBrushXml.js"></script>
+<script type="text/javascript" src="js/shBrushGroovy.js"></script>
+<script type="text/javascript" src="js/shBrushPython.js"></script>
+<script type="text/javascript" src="js/shBrushRuby.js"></script>
+<script type="text/javascript" src="js/shBrushCSharp.js"></script>
+
+<script type="text/javascript">
+  SyntaxHighlighter.defaults['tab-size'] = 4;
+  SyntaxHighlighter.defaults['gutter'] = false;
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all()
+</script>
+
+<!-- JQuery -->
+
+<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>
+
+<!-- Image Scaler -->
+
+<script type="text/javascript" src="js/imagescaler.js"></script>
+
+<!-- Table Styler -->
+
+<script type="text/javascript" src="js/tablestyler.js"></script>
+
+<!-- Apache Polygene WebSite Progressive Enhancement -->
+
+<link href="css/progressive-enhancement.css" rel="stylesheet" type="text/css" 
/>
+<script type="text/javascript" src="js/jquery.scrollTo-1.4.2.js"></script>
+<script type="text/javascript" src="js/progressive-enhancement.js"></script>
+
+<!-- Analytics -->
+ <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-62007352-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+  })();
+ </script>
+
+  </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common"; 
class="logo"><a href="index.html"><img src="images/logo-standard.png" 
/></a></div><nav xmlns="" xmlns:exsl="http://exslt.org/common"; class="navbar 
navbar-inverse navbar-fixed-top"><div class="container"><div 
class="navbar-header"><a class="navbar-brand" href="#">Apache<br />Polygene
+          </a></div><div id="navbar" class="collapse navbar-collapse"><span 
class="nav navbar-nav"><div xmlns="http://www.w3.org/1999/xhtml"; 
class="toc"><dl class="toc"><dt><span class="section"><a 
href="index.html#home">Polygene™</a></span></dt><dt><span class="section"><a 
href="intro.html">Introduction</a></span></dt><dt><span class="section"><span 
xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span 
class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span 
class="section"><a href="samples.html">Samples</a></span></dt><dt><span 
class="section"><a href="core.html">Core</a></span></dt><dt><span 
class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span 
class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span 
class="section"><a href="tools.html">Tools</a></span></dt><dt><span 
class="section"><a href="glossary.html">Glossary 
</a></span></dt></dl></div></span></div></div></nav><div xmlns="" 
xmlns:exsl="http://exslt
 .org/common" class="sidenav"><div xmlns="http://www.w3.org/1999/xhtml"; 
class="toc"><dl class="toc"><dt><span class="section"><a 
href="tutorials.html#_overview">Overview</a></span></dt><dt><span 
class="section"><a href="two-minutes-intro.html">Polygene™ in 2 
minutes</a></span></dt><dt><span class="section"><a 
href="ten-minutes-intro.html">Polygene™ in 10 
minutes</a></span></dt><dt><span class="section"><a 
href="thirty-minutes-intro.html">Polygene™ in 30 
minutes</a></span></dt><dt><span class="section"><a 
href="howto-depend-on-polygene.html">Depend on 
Polygene™</a></span></dt><dt><span class="section"><a 
href="howto-assemble-application.html">Assemble an 
Application</a></span></dt><dt><span class="section"><a 
href="tut-composites.html">Transient Composites 
Tutorial</a></span></dt><dt><span class="section"><a 
href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span 
class="section"><a href="howto-contextual-fragments.html">Use contextual 
fragments</a></span
 ></dt><dt><span class="section"><a 
 >href="howto-leverage-properties.html">Leverage 
 >Properties</a></span></dt><dt><span class="section"><a 
 >href="howto-create-constraint.html">Create a 
 >Constraint</a></span></dt><dt><span class="section"><a 
 >href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span 
 >class="section"><a href="howto-create-sideeffect.html">Create a 
 >SideEffect</a></span></dt><dt><span class="section"><a 
 >href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span 
 >class="section"><a href="howto-configure-service.html">Configure a 
 >Service</a></span></dt><dt><span class="section"><a 
 >href="howto-invocation-annotation.html">Use 
 >@Invocation</a></span></dt><dt><span class="section"><span xmlns="" 
 >href="build-system.html">Polygene™ Build System</span></span></dt><dt><span 
 >class="section"><a href="community-docs.html">Polygene™ 
 >Documentation</a></span></dt><dt><span class="section"><a 
 >href="releasing-apache.html">Releasing Polygene™</a></span></dt><
 /dl></div></div><div class="section"><div class="titlepage"><div><div><h3 
class="title"><a id="build-system"></a>Polygene™ Build 
System</h3></div></div></div><p>This tutorial is intended for developers who 
want to build the Polygene™ SDK themselves.
+It describe the Polygene™ SDK Build System from compilation to publication 
of artifacts for consumption by other
+applications.</p><p>If instead you want to setup your project build system to 
depend on modules of the Polygene™ SDK see the
+<a class="link" href="howto-depend-on-polygene.html" title="Depend on 
Polygene™">dedicated tutorial</a>.</p><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_gradle"></a>Gradle</h4></div></div></div><div class="note" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Note</h3><p>All major Java IDEs have great Gradle support.
+Visit the <a class="ulink" href="https://www.gradle.org/resources"; 
target="_top">Gradle</a> website to learn how to import the Polygene™ SDK 
build into your
+favorite IDE.</p></div><p>Polygene™ community migrated away from Maven after 
several years of frustration, especially around release management,
+versioning and cross-module dependency resolution issues, in Feb 2011.
+The tool of choice is now Gradle, and it doesn’t require any installation, 
there are <code class="literal">gradlew</code> and <code 
class="literal">gradlew.bat</code> in
+the root folder of the Polygene™ SDK that will bootstrap Gradle if not done 
so already.</p><p>If you are new to Gradle, you should keep the <a 
class="ulink" href="https://gradle.org/docs"; target="_top">documentation</a> at 
hands.</p><p>Build System configuration is done through Gradle properties.
+This can be done in many ways, see
+<a class="ulink" 
href="https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_properties_and_system_properties";
 target="_top">Gradle properties and system properties</a>.</p></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_main_tasks"></a>Main tasks</h4></div></div></div><p>The Polygene™ SDK 
project has tasks that work with the whole SDK.</p><div 
class="variablelist"><dl class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew downloadDependencies</code>
+</span></dt><dd></dd></dl></div><p>Resolve, download and cache all needed 
dependencies.
+Useful to go offline.</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew</code>
+</span></dt><dd></dd></dl></div><p>The default build, triggered when running 
gradle without any command line arguments, compiles the code and run the
+tests, but nothing else. A quick way to check that nothing broke.</p><div 
class="variablelist"><dl class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew clean</code>
+</span></dt><dd></dd></dl></div><p>Clean up of all build output and restore 
the code base to a fresh state.</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew assemble</code>
+</span></dt><dd></dd></dl></div><p>Produces all the archives, javadocs, 
manuals and website content.
+Global output is generated into <code 
class="literal">distributions/build</code>.</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew check</code>
+</span></dt><dd></dd></dl></div><p>Run the tests and other checks like 
checkstyle.
+Global reports are generated in <code 
class="literal">reports/build/reports</code>.</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew build</code>
+</span></dt><dd></dd></dl></div><p>Equivalent to <code 
class="literal">./gradlew assemble check</code></p><div 
class="variablelist"><dl class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew checkDistributions</code>
+</span></dt><dd></dd></dl></div><p>Run global checks against the assembled 
distributions.
+Can take a while.</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term">
+<code class="literal">./gradlew install</code>
+</span></dt><dd></dd></dl></div><p>Is roughly the same as Maven’s install 
goal.
+It produces the test reports, javadocs and installs all the Jars into the 
local disk repository, for consumption
+by other applications.</p></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a id="_other_tasks"></a>Other 
tasks</h4></div></div></div><p>In addition to that, some submodules have 
specific tasks.
+To see all available tasks, issue the following command:</p><pre 
class="programlisting brush: bash">./gradlew tasks</pre><p>All available tasks 
from all modules of the SDK are shown.
+If you want to narrow your exploration to submodules use the 
following:</p><pre class="programlisting brush: bash">./gradlew 
:test:performance:tasks
+./gradlew :release:tasks</pre><p>These examples will respectively output all 
gradle tasks available in the <code class="literal">:tests:performance</code> 
module where you should find
+the <code class="literal">performanceTest</code> task that runs the 
Polygene™ performance test suite and the <code 
class="literal">:release</code> module tasks.</p><p><code 
class="literal">tasks</code> itself is a task, in the same way we can target 
module(s) with tasks, e.g.:</p><pre class="programlisting brush: 
bash">./gradlew :core:check :libraries:alarm:check</pre></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_versions"></a>Versions</h4></div></div></div><p>By default, the build 
system produces a "zero build".
+It means that there is no version assigned to the build, and a "0" is used in 
the produced artifacts.
+This is due to our disagreement (with Maven community) that the "next" version 
name/number is known prior to
+the release.
+This is in our opinion a delayed decision.
+To build a particular version, you specify a <code 
class="literal">version</code> property on the command-line, like</p><pre 
class="programlisting brush: bash">./gradlew -Dversion=2.0-FLAVOUR 
install</pre><p>If a <code class="literal">version</code> property is not 
defined, the build system will refuse to make a release and upload.
+It will also try hard to do less and not get in your way.</p></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_tests"></a>Tests</h4></div></div></div><div class="note" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Note</h3><p>See the <a class="ulink" 
href="https://builds.apache.org/view/P/view/Polygene/"; 
target="_top">Polygene™ Continuous Integration</a> for current tests 
results</p></div><p>Unit and integration tests are located near the code under 
test.
+You’ll find theses tests across the whole SDK.</p><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
id="_unit_tests_requiring_external_services"></a>Unit tests requiring external 
services</h5></div></div></div><p>Among unit tests, some require an external 
service to be run.
+For example, the Redis EntityStore extension requires an actual Redis server 
to run its tests.</p><div class="note" style="margin-left: 0.5in; margin-right: 
0.5in;"><h3 class="title">Note</h3><p>The HTML test reports generated by Gradle 
shows skipped tests.</p></div><p>Testing against external services is automated 
using Docker and is enabled automatically if a running Docker service
+is reachable.
+The build creates the necessary Docker images and start/stop containers around 
the tests.</p><p>On Linux it should work out of the box.</p><p>The simplest way 
to get this running on other systems (macOS and Windows) is to use <code 
class="literal">docker-machine</code> to create a
+development Docker virtual machine where all images will be built and 
containers started:</p><pre class="programlisting brush: bash">docker-machine 
create dev
+docker-machine start dev
+eval $(docker-machine env dev)</pre><p>The last stanza set environment 
variables for Docker to use the newly created Docker virtual machine.</p><p>If 
you want to run the Docker containers in a remote machine, simply set the <code 
class="literal">DOCKER_HOST</code> and <code 
class="literal">DOCKER_CERT_PATH</code>
+environment variables to something sensible for your setup.</p><p>If you want 
to forcibly skip all Docker related work, set the <code 
class="literal">skipDocker</code> Gradle property by e.g. appending
+<code class="literal">-PskipDocker</code> to your Gradle command 
line.</p></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="_performance_tests"></a>Performance 
tests</h5></div></div></div><p>Performance tests provide performance 
measurements for typical Polygene™ use cases.
+They are not part of the default build and are located in the <code 
class="literal">tests/performance</code> directory of the SDK.</p><p>They can 
be run with the following Gradle command:</p><pre class="programlisting brush: 
bash">./gradlew :tests:performance:performanceTest</pre><p>Results will then be 
available in the test reports.</p></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_documentation_generation"></a>Documentation 
generation</h4></div></div></div><p>The build generates a documentation 
minisite:</p><pre class="programlisting brush: bash">./gradlew 
:manual:assemble</pre><p>Output is in <code 
class="literal">~/manual/build/docs/website</code>.</p><p>You’ll need 
Asciidoc and docbook-xsl installed.</p></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_build_for_releases"></a>Build for releases</h4></div></div></div><div 
class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class
 ="title">Important</h3><p>Remember that if a <code 
class="literal">version</code> property is not defined, the build system will 
refuse to make a release and upload.</p></div><p>The Polygene™ SDK build 
system is setup for an easy release process.
+This is very useful to the Polygene™ Core Team but can also be useful to 
third parties that want to cut a in-house release.
+In this regard, we try to make every aspect of the release process usable for 
such cases.</p><p>The following sections describe various aspects of the 
release process.
+By default you need to have a proper PGP setup, see below.</p><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
id="_release_criteria"></a>Release Criteria</h5></div></div></div><p>The 
Polygene™ SDK modules are of varying maturity level and we try to maintain a 
STATUS (<code class="literal">dev-status.xml</code>) file indicating
+how good the codebase, documentation and unit tests are for each of the 
modules. This is highly subjective and
+potentially different individuals will judge this differently, but at least it 
gives a ballpark idea of the situation
+for our users.</p><p>The Polygene™ SDK build system use the values from the 
<code class="literal">dev-status.xml</code> files to filter out non-releasable 
modules out for
+the <code class="literal">javadocs</code> and <code 
class="literal">uploadArchives</code> root project tasks.
+Moreover, the <code class="literal">release</code> task ensure that no 
releasable module depends on module(s) that don’t fit the release criteria
+and throw a detailed exception if need be.</p><p>This can be relaxed by adding 
<code class="literal">-x checkReleaseSpec</code> arguments to gradle 
invocation.</p></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="_signing"></a>Signing</h5></div></div></div><p>Artifact 
signing is done using PGP.
+You need to provide Gradle the following properties, <code 
class="literal">~/.gradle/gradle.properties</code> is a good place:</p><pre 
class="literallayout">signing.keyId=FB751943
+signing.password=foobar
+signing.secretKeyRingFile=/home/foo/.gnupg/secring.gpg</pre><p>You can skip 
the signing process by adding <code class="literal">-x signArchives</code> 
arguments to gradle invocation.</p></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
id="_artifact_upload"></a>Artifact Upload</h5></div></div></div><p>Artifact 
upload behavior depends on the version assigned to the build.</p><p>By default 
RELEASES are signed, SNAPSHOTS are not.
+Signing can be turned on or off by setting the <code 
class="literal">uploadSigned</code> property to false.</p><p>By default 
RELEASES must satisfy ReleaseSpecification, SNAPSHOT don’t.
+ReleaseSpecification usage can be turned on or off by setting the <code 
class="literal">uploadReleaseSpec</code> property to false.</p><p>By default 
RELEASES and SNAPHOTS are uploaded using HTTP.
+Used Wagon can be overriden by setting the <code 
class="literal">uploadWagon</code> property.</p><p>By default RELEASES and 
SNAPSHOTS are uploaded to the Apache Nexus.
+Target repository can be overriden by setting the <code 
class="literal">uploadRepository</code> property.</p><p>No username/password is 
provided by default.
+If needed set them using the <code class="literal">uploadUsername</code> and 
<code class="literal">uploadPassword</code> properties.</p><p>For example here 
is how to deploy all artifacts as unsigned SNAPSHOTs to a given 
repository:</p><pre class="programlisting brush: bash">./gradlew uploadArchives 
-Dversion=3.2.1-SNAPSHOT -PuploadReleaseSpec=false \
+    -PuploadWagon=what:ever:wagon 
-PuploadRepository=http://what.ever.repository/url \
+    -PuploadUsername=foo -PuploadPassword=bar</pre><p>And here is how to 
deploy a signed release to the local filesystem:</p><pre class="programlisting 
brush: bash">./gradlew uploadArchives -Dversion=3.2.1 
-PuploadRepository=file:///path/to/local/repository</pre><p>See the <a 
class="ulink" 
href="https://docs.gradle.org/current/userguide/maven_plugin.html#wagonLibs"; 
target="_top">Gradle documentation</a> about
+supported protocols.</p></div></div></div><footer xmlns="" 
xmlns:exsl="http://exslt.org/common"; class="footer"><div class="container"><p 
class="text-muted">Copyright © 2017 The Apache Software Foundation, Licensed 
under the <a href="http://www.apache.org/licenses/"; target="_blank">Apache 
License, Version 2.0</a>.
+          Apache Polygene, Polygene, Apache, the Apache feather logo, and the 
Apache Polygene project logo are
+          trademarks of The Apache Software Foundation.
+          All other marks mentioned may be trademarks or registered trademarks 
of their respective owners.
+        </p></div></footer><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js";></script><script
 xmlns="" xmlns:exsl="http://exslt.org/common";>window.jQuery || 
document.write('&lt;script 
src="js/jquery-1.6.4.min.js"&gt;&lt;/script&gt;')</script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"; 
integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb"
 crossorigin="anonymous"></script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="bootstrap-3.3.7/js/bootstrap.min.js"></script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="js/ie10-viewport-bug-workaround.js"></script></body></html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-website/blob/bb9c9971/content/java/2017/community-docs.html
----------------------------------------------------------------------
diff --git a/content/java/2017/community-docs.html 
b/content/java/2017/community-docs.html
new file mode 100644
index 0000000..28cc2c2
--- /dev/null
+++ b/content/java/2017/community-docs.html
@@ -0,0 +1,232 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";><head><meta http-equiv="Content-Type" 
content="text/html; charset=UTF-8" /><title>Polygene™ 
Documentation</title><meta name="generator" content="DocBook XSL Stylesheets 
V1.78.1" /><link rel="home" href="index.html" title="" /><link rel="up" 
href="tutorials.html" title="Tutorials" /><link rel="prev" 
href="build-system.html" title="Polygene™ Build System" /><link rel="next" 
href="releasing-apache.html" title="Releasing Polygene™" />
+
+
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <!-- The above 3 meta tags *must* come first in the head; any other head 
content must come *after* these tags -->
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <link rel="icon" href="../../favicon.ico">
+
+    <title>Starter Template for Bootstrap</title>
+
+    <!-- Bootstrap core CSS -->
+    <link href="bootstrap-3.3.7/css/bootstrap.min.css" rel="stylesheet">
+
+    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
+    <link href="css/ie10-viewport-bug-workaround.css" rel="stylesheet">
+
+    <!-- Custom styles for this template -->
+    <link href="css/polygene-ng.css" rel="stylesheet">
+
+    <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
+    <!--[if lt IE 9]><script 
src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
+    <script src="js/ie-emulation-modes-warning.js"></script>
+
+    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media 
queries -->
+    <!--[if lt IE 9]>
+      <script 
src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js";></script>
+      <script 
src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js";></script>
+    <![endif]-->
+
+<!-- favicon -->
+
+<link rel="shortcut icon" href="http://polygene.apache.org/favicon.ico"; 
type="image/vnd.microsoft.icon" />
+<link rel="icon" href="http://polygene.apache.org/favicon.ico"; 
type="image/x-icon" />
+
+<!-- style -->
+
+<link href="css/shCore.css" rel="stylesheet" type="text/css" />
+<link href="css/shCoreEclipse.css" rel="stylesheet" type="text/css" />
+<link href="css/shThemeEclipse.css" rel="stylesheet" type="text/css" />
+<!--<link href="css/polygene.css" rel="stylesheet" type="text/css" />-->
+
+<!-- Syntax Highlighter -->
+
+<script type="text/javascript" src="js/shCore.js"></script>
+<script type="text/javascript" src="js/shBrushJava.js"></script>
+<script type="text/javascript" src="js/shBrushScala.js"></script>
+<script type="text/javascript" src="js/shBrushJScript.js"></script>
+<script type="text/javascript" src="js/shBrushBash.js"></script>
+<script type="text/javascript" src="js/shBrushPlain.js"></script>
+<script type="text/javascript" src="js/shBrushXml.js"></script>
+<script type="text/javascript" src="js/shBrushGroovy.js"></script>
+<script type="text/javascript" src="js/shBrushPython.js"></script>
+<script type="text/javascript" src="js/shBrushRuby.js"></script>
+<script type="text/javascript" src="js/shBrushCSharp.js"></script>
+
+<script type="text/javascript">
+  SyntaxHighlighter.defaults['tab-size'] = 4;
+  SyntaxHighlighter.defaults['gutter'] = false;
+  SyntaxHighlighter.defaults['toolbar'] = false;
+  SyntaxHighlighter.all()
+</script>
+
+<!-- JQuery -->
+
+<script type="text/javascript" src="js/jquery-1.6.4.min.js"></script>
+
+<!-- Image Scaler -->
+
+<script type="text/javascript" src="js/imagescaler.js"></script>
+
+<!-- Table Styler -->
+
+<script type="text/javascript" src="js/tablestyler.js"></script>
+
+<!-- Apache Polygene WebSite Progressive Enhancement -->
+
+<link href="css/progressive-enhancement.css" rel="stylesheet" type="text/css" 
/>
+<script type="text/javascript" src="js/jquery.scrollTo-1.4.2.js"></script>
+<script type="text/javascript" src="js/progressive-enhancement.js"></script>
+
+<!-- Analytics -->
+ <script type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-62007352-1']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; 
ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 
'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(ga, s);
+  })();
+ </script>
+
+  </head><body><div xmlns="" xmlns:exsl="http://exslt.org/common"; 
class="logo"><a href="index.html"><img src="images/logo-standard.png" 
/></a></div><nav xmlns="" xmlns:exsl="http://exslt.org/common"; class="navbar 
navbar-inverse navbar-fixed-top"><div class="container"><div 
class="navbar-header"><a class="navbar-brand" href="#">Apache<br />Polygene
+          </a></div><div id="navbar" class="collapse navbar-collapse"><span 
class="nav navbar-nav"><div xmlns="http://www.w3.org/1999/xhtml"; 
class="toc"><dl class="toc"><dt><span class="section"><a 
href="index.html#home">Polygene™</a></span></dt><dt><span class="section"><a 
href="intro.html">Introduction</a></span></dt><dt><span class="section"><span 
xmlns="" href="tutorials.html">Tutorials</span></span></dt><dt><span 
class="section"><a href="javadocs.html">Javadoc</a></span></dt><dt><span 
class="section"><a href="samples.html">Samples</a></span></dt><dt><span 
class="section"><a href="core.html">Core</a></span></dt><dt><span 
class="section"><a href="libraries.html">Libraries</a></span></dt><dt><span 
class="section"><a href="extensions.html">Extensions</a></span></dt><dt><span 
class="section"><a href="tools.html">Tools</a></span></dt><dt><span 
class="section"><a href="glossary.html">Glossary 
</a></span></dt></dl></div></span></div></div></nav><div xmlns="" 
xmlns:exsl="http://exslt
 .org/common" class="sidenav"><div xmlns="http://www.w3.org/1999/xhtml"; 
class="toc"><dl class="toc"><dt><span class="section"><a 
href="tutorials.html#_overview">Overview</a></span></dt><dt><span 
class="section"><a href="two-minutes-intro.html">Polygene™ in 2 
minutes</a></span></dt><dt><span class="section"><a 
href="ten-minutes-intro.html">Polygene™ in 10 
minutes</a></span></dt><dt><span class="section"><a 
href="thirty-minutes-intro.html">Polygene™ in 30 
minutes</a></span></dt><dt><span class="section"><a 
href="howto-depend-on-polygene.html">Depend on 
Polygene™</a></span></dt><dt><span class="section"><a 
href="howto-assemble-application.html">Assemble an 
Application</a></span></dt><dt><span class="section"><a 
href="tut-composites.html">Transient Composites 
Tutorial</a></span></dt><dt><span class="section"><a 
href="tut-services.html">Services Composites Tutorial</a></span></dt><dt><span 
class="section"><a href="howto-contextual-fragments.html">Use contextual 
fragments</a></span
 ></dt><dt><span class="section"><a 
 >href="howto-leverage-properties.html">Leverage 
 >Properties</a></span></dt><dt><span class="section"><a 
 >href="howto-create-constraint.html">Create a 
 >Constraint</a></span></dt><dt><span class="section"><a 
 >href="howto-create-concern.html">Create a Concern</a></span></dt><dt><span 
 >class="section"><a href="howto-create-sideeffect.html">Create a 
 >SideEffect</a></span></dt><dt><span class="section"><a 
 >href="howto-create-entity.html">Create an Entity</a></span></dt><dt><span 
 >class="section"><a href="howto-configure-service.html">Configure a 
 >Service</a></span></dt><dt><span class="section"><a 
 >href="howto-invocation-annotation.html">Use 
 >@Invocation</a></span></dt><dt><span class="section"><a 
 >href="build-system.html">Polygene™ Build System</a></span></dt><dt><span 
 >class="section"><span xmlns="" href="community-docs.html">Polygene™ 
 >Documentation</span></span></dt><dt><span class="section"><a 
 >href="releasing-apache.html">Releasing Polygene™</a></span></dt><
 /dl></div></div><div class="section"><div class="titlepage"><div><div><h3 
class="title"><a id="community-docs"></a>Polygene™ 
Documentation</h3></div></div></div><p>The documents use the asciidoc format, 
see:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li 
class="listitem">
+<a class="ulink" href="http://www.methods.co.nz/asciidoc/"; 
target="_top">Aciidoc Reference</a>
+</li><li class="listitem">
+<a class="ulink" href="http://powerman.name/doc/asciidoc"; 
target="_top">AsciiDoc cheatsheet</a>
+</li></ul></div><p>The cheatsheet is really useful!</p><p>You need to install 
<code class="literal">asciidoc</code> and <code 
class="literal">docbook-xsl</code>.</p><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="community-docs-overall-flow"></a>Overall Flow</h4></div></div></div><div 
class="tip" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Tip</h3><p>To generate the website locally use <code 
class="literal">./gradlew website</code>. Output is in <code 
class="literal">~/manual/build/docs/website</code>.</p></div><p>Each 
(sub)project has its own documentation, in <span 
class="emphasis"><em>src/docs/</em></span> and all the Asciidoc documents have 
the <code class="literal">.txt</code> file extension.</p><p>The documents can 
use code snippets which will extract code from the project. This is preferred 
way to include
+source code in the documentation, since any refactoring will be reflected in 
the documentation.</p><p>The above files are all consumed by the build of the 
manual (by adding them as dependencies).
+To get content included in the manual, it has to be explicitly included by a 
document in the manual as well.</p><p>The whole documentation set is generated 
from the <span class="emphasis"><em>*manual*</em></span> module in the SDK, and 
we are currently only creating the website.
+The User Guide and Reference Manual are future projects.</p></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_headings_and_document_structure"></a>Headings and document 
structure</h4></div></div></div><p>Each document starts over with headings from 
level zero (the document title).
+Each document should have an id.
+In some cases sections in the document need to have id’s as well, this 
depends on where they fit in the overall structure.
+To be able to link to content, it has to have an id.
+Missing id’s in mandatory places will produce warnings, or even fail 
(depending on severity), the build.</p><p>This is how a document should 
start:</p><pre class="programlisting brush: 
plain">[[unique-id-verbose-is-ok,Remember This Caption]]
+= The Document Title =</pre><p>To push the headings down to the right level in 
the output, the <code class="literal">leveloffset</code>
+attribute is used when including the document inside of another 
document.</p><p>Subsequent headings in a document should use the following 
syntax:</p><pre class="programlisting brush: plain">== Subheading ==
+
+... content here ...
+
+=== Subsubheading ===
+
+content here ...</pre><p>Asciidoc comes with one more syntax for headings, but 
in this project it’s not used.</p></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_writing"></a>Writing</h4></div></div></div><p>Try to put one sentence on 
each line.
+Lines without empty lines between them still belongs to the same paragraph.
+This makes it easy to move content around, and also easy to spot (too) long 
sentences.</p></div><div class="section"><div class="titlepage"><div><div><h4 
class="title"><a id="_gotchas"></a>Gotchas</h4></div></div></div><div 
class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+A chapter can’t be empty. (the build will fail on the docbook xml validity 
check)
+</li><li class="listitem">
+The document title should be "underlined" by the same
+  number of <code class="literal">=</code> as there are characters in the 
title.
+</li><li class="listitem">
+Always leave a blank line at the end of documents
+  (or the title of the next document might end up in the last
+  paragraph of the document)
+</li><li class="listitem">
+As <code class="literal">{}</code> are used for Asciidoc attributes, 
everything inside will be treated as an attribute.
+  What you have to do is to escape the opening brace: <code 
class="literal">\{</code>.
+  If you don’t, the braces and the text inside them will be removed without 
any warning being issued!
+</li></ul></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_links"></a>Links</h4></div></div></div><p>To link to other parts of the 
manual the id of the target is used.
+This is how such a reference looks:</p><pre class="programlisting brush: 
plain">&lt;&lt;community-docs-overall-flow&gt;&gt;</pre><p>Which will render 
like: <a class="xref" href="community-docs.html#community-docs-overall-flow" 
title="Overall Flow">Documentation Flow</a></p><div class="note" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Note</h3><p>Just write "see &lt;&lt;target-id&gt;&gt;" and 
similar, that’s enough in most cases.</p></div><p>If you need to link to 
another document with your own link text, this is what to do:</p><pre 
class="programlisting brush: plain">&lt;&lt;target-id, link text that fits in 
the context&gt;&gt;</pre><div class="note" style="margin-left: 0.5in; 
margin-right: 0.5in;"><h3 class="title">Note</h3><p>Having lots of linked text 
may work well in a web context but is a pain in print, and we aim for 
both!</p></div><p>External links are added like this:</p><pre 
class="programlisting brush: plain">https://polygene.apache.org/[Link text 
 here]</pre><p>Which renders like: <a class="ulink" 
href="https://polygene.apache.org/"; target="_top">Link text here</a></p><p>For 
short links it may be better not to add a link text, just do:</p><pre 
class="programlisting brush: plain">https://polygene.apache.org/</pre><p>Which 
renders like: <a class="ulink" href="https://polygene.apache.org/"; 
target="_top">https://polygene.apache.org/</a></p><p>It’s ok to have a dot 
right after the URL, it won’t be part of the link.</p><pre 
class="programlisting brush: plain">https://polygene.apache.org/.</pre><p>Which 
renders like: <a class="ulink" href="https://polygene.apache.org/"; 
target="_top">https://polygene.apache.org/</a>.</p></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_text_formatting"></a>Text Formatting</h4></div></div></div><div 
class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+<span class="strong"><strong>Bold</strong></span> - just don’t do it, the 
editor in charge is likely to remove it anyhow!
+</li><li class="listitem">
+_Italics_ is rendered as <span class="emphasis"><em>Italics</em></span>
+</li><li class="listitem">
++methodName()+ is rendered as <code class="literal">methodName()</code> and is 
used for literals as well
+</li><li class="listitem">
+`command` is rendered as <code class="literal">command</code> (typically used 
for command-line)
+</li><li class="listitem">
+'my/path/' is rendered as <span class="emphasis"><em>my/path/</em></span> 
(used for file names and paths)
+</li></ul></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_admonitions"></a>Admonitions</h4></div></div></div><p>These are very 
useful and should be used where appropriate.
+Choose from the following (write all caps and no, we can’t easily add new 
ones):</p><div class="note" style="margin-left: 0.5in; margin-right: 
0.5in;"><h3 class="title">Note</h3><p>Note.</p></div><div class="tip" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Tip</h3><p>Tip.</p></div><div class="important" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Important</h3><p>Important</p></div><div class="caution" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Caution</h3><p>Caution</p></div><div class="warning" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Warning</h3><p>Warning</p></div><p>Here’s how it’s 
done:</p><pre class="programlisting brush: plain">NOTE: Note.</pre><p>A 
multiline variation:</p><pre class="programlisting brush: plain">[TIP]
+Tiptext.
+Line 2.</pre><p>Which is rendered as:</p><div class="tip" style="margin-left: 
0.5in; margin-right: 0.5in;"><h3 class="title">Tip</h3><p>Tiptext.
+Line 2.</p></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_images"></a>Images</h4></div></div></div><div class="important" 
style="margin-left: 0.5in; margin-right: 0.5in;"><h3 
class="title">Important</h3><p><span class="emphasis"><em>All images in the 
entire manual share the same namespace.</em></span></p></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
id="_images_files"></a>Images Files</h5></div></div></div><p>To include an 
image file, make sure it resides in the <span 
class="emphasis"><em>images/</em></span> directory relative to the document 
you’re including it from.
+Then go:</p><pre class="programlisting brush: 
plain">image::logo-standard.png[]</pre><p>Which is rendered as:</p><div 
class="informalfigure"><a class="ulink" href="images/logo-standard.png" 
target="_top">
+<span class="inlinemediaobject"><img src="images/logo-standard.png" 
alt="logo-standard.png" /></span>
+</a></div><p>Please note that the <span 
class="emphasis"><em>images/</em></span> directory is added automatically and 
not part of the link.</p><p>There are also global resources, residing in <span 
class="emphasis"><em>manual/src/resources</em></span>, which will be copied to 
the root of the documentation.</p></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a id="_code_snippets"></a>Code 
Snippets</h4></div></div></div><div class="section"><div 
class="titlepage"><div><div><h5 class="title"><a 
id="_import_from_codebase"></a>Import from 
codebase</h5></div></div></div><p>Most source code that is included in the 
documentation should be extract via <code class="literal">SNIPPET</code> 
markers and then included in document with;</p><pre class="programlisting 
brush: plain"> [snippet,java]
+ -----------
+ 
source=tutorials/introduction/tenminutes/src/main/java/org/apache/polygene/demo/tenminute/OrderEntity.java
+ tag=mainClass
+ -----------</pre><p>The source file is relative to the SDK root, and the 
<span class="emphasis"><em>tag</em></span> is defined in the source file.
+The above could be bringing in content that looks like;</p><pre 
class="programlisting brush: plain">package org.apache.polygene.demo.tenminute;
+
+import org.apache.polygene.api.concern.Concerns;
+import org.apache.polygene.api.entity.EntityComposite;
+import org.apache.polygene.api.sideeffect.SideEffects;
+
+// START SNIPPET: sideEffect
+@SideEffects( MailNotifySideEffect.class )
+// START SNIPPET: mainClass
+@Concerns({PurchaseLimitConcern.class, InventoryConcern.class})
+public interface OrderEntity
+    extends Order, HasSequenceNumber, HasCustomer,
+            HasLineItems, Confirmable, EntityComposite
+{
+// END SNIPPET: sideEffect
+}
+// END SNIPPET: mainClass</pre><p>which will be rendered as;</p><pre 
class="programlisting brush: java">@Concerns( { PurchaseLimitConcern.class, 
InventoryConcern.class } )
+public interface OrderEntity
+    extends Order, Confirmable,
+            HasSequenceNumber, HasCustomer, HasLineItems,
+            EntityComposite
+{
+}
+</pre><p>Note that
+1. The START and END doesn’t need to be matching.
+1. The AsciiDoc plugin will remove the <span class="emphasis"><em>START 
SNIPPET</em></span> and <span class="emphasis"><em>END SNIPPET</em></span> 
lines.
+1. If you have more than one START/END section with the same tag, the plugin 
will insert a "[…snip…]" for the excluded lines.</p></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
id="_explicitly_defined_in_the_document"></a>Explicitly defined in the 
document</h5></div></div></div><div class="warning" style="margin-left: 0.5in; 
margin-right: 0.5in;"><h3 class="title">Warning</h3><p>Use this kind of code 
snippets as little as possible.
+  They are well known to get out of sync with reality after a 
while.</p></div><p>This is how to do it:</p><pre class="programlisting brush: 
plain"> [source,java]
+ ----
+ HashMap&lt;String,String&gt; result = new HashMap&lt;String,String&gt;();
+ for( String name : names )
+ {
+     if( !"".equals( name ) )
+         result.put( name, value );
+ }
+ ----</pre><p>Which is rendered as:</p><pre class="programlisting brush: 
java"> HashMap&lt;String,String&gt; result = new HashMap&lt;String,String&gt;();
+ for( String name : names )
+ {
+     if( !"".equals( name ) )
+         result.put( name, value );
+ }</pre></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="_source_code_highlighting"></a>Source code 
Highlighting</h5></div></div></div><p>If there’s no suitable syntax 
highlighter, just omit the language: <code 
class="literal">[source]</code>.</p><p>Currently the following syntax 
highlighters are enabled:</p><div class="itemizedlist"><ul class="itemizedlist" 
type="disc"><li class="listitem">
+Bash
+</li><li class="listitem">
+Groovy
+</li><li class="listitem">
+Java
+</li><li class="listitem">
+JavaScript
+</li><li class="listitem">
+Python
+</li><li class="listitem">
+Ruby
+</li><li class="listitem">
+Scala
+</li><li class="listitem">
+XML
+</li></ul></div><p>For other highlighters we could add see <a class="ulink" 
href="http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/"; 
target="_top">http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/</a>.</p></div></div><div
 class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="_attributes"></a>Attributes</h4></div></div></div><p>Common attributes you 
can use in documents:</p><div class="itemizedlist"><ul class="itemizedlist" 
type="disc"><li class="listitem">
+</li><li class="listitem">
+</li></ul></div><p>These can substitute part of URLs that point to for example 
APIdocs or source code.</p></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="_toolchain"></a>Toolchain</h4></div></div></div><p>Useful links when 
configuring the docbook toolchain:</p><div class="itemizedlist"><ul 
class="itemizedlist" type="disc"><li class="listitem">
+<a class="ulink" href="http://www.methods.co.nz/asciidoc"; 
target="_top">http://www.methods.co.nz/asciidoc</a>
+</li><li class="listitem">
+<a class="ulink" href="http://powerman.name/doc/asciidoc"; 
target="_top">http://powerman.name/doc/asciidoc</a>
+</li><li class="listitem">
+alexgorbatchev.com/SyntaxHighlighter/manual/brushes/
+</li><li class="listitem">
+<a class="ulink" href="http://www.docbook.org/tdg/en/html/docbook.html"; 
target="_top">http://www.docbook.org/tdg/en/html/docbook.html</a>
+</li><li class="listitem">
+<a class="ulink" href="http://www.sagehill.net/docbookxsl/index.html"; 
target="_top">http://www.sagehill.net/docbookxsl/index.html</a>
+</li><li class="listitem">
+<a class="ulink" 
href="http://docbook.sourceforge.net/release/xsl/1.76.1/doc/html/index.html"; 
target="_top">http://docbook.sourceforge.net/release/xsl/1.76.1/doc/html/index.html</a>
+</li><li class="listitem">
+<a class="ulink" 
href="http://docbook.sourceforge.net/release/xsl/1.76.1/doc/fo/index.html"; 
target="_top">http://docbook.sourceforge.net/release/xsl/1.76.1/doc/fo/index.html</a>
+</li></ul></div></div></div><footer xmlns="" 
xmlns:exsl="http://exslt.org/common"; class="footer"><div class="container"><p 
class="text-muted">Copyright © 2017 The Apache Software Foundation, Licensed 
under the <a href="http://www.apache.org/licenses/"; target="_blank">Apache 
License, Version 2.0</a>.
+          Apache Polygene, Polygene, Apache, the Apache feather logo, and the 
Apache Polygene project logo are
+          trademarks of The Apache Software Foundation.
+          All other marks mentioned may be trademarks or registered trademarks 
of their respective owners.
+        </p></div></footer><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js";></script><script
 xmlns="" xmlns:exsl="http://exslt.org/common";>window.jQuery || 
document.write('&lt;script 
src="js/jquery-1.6.4.min.js"&gt;&lt;/script&gt;')</script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"; 
integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb"
 crossorigin="anonymous"></script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="bootstrap-3.3.7/js/bootstrap.min.js"></script><script xmlns="" 
xmlns:exsl="http://exslt.org/common"; 
src="js/ie10-viewport-bug-workaround.js"></script></body></html>
\ No newline at end of file

Reply via email to