You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2015/04/22 18:54:35 UTC

[03/14] wicket git commit: Added sub-module wicket-user-guide to integrate the user guide generation with Maven workflow

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/urls/urls_6.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/urls/urls_6.gdoc b/wicket-user-guide/src/docs/guide/urls/urls_6.gdoc
new file mode 100644
index 0000000..770b1d2
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/urls/urls_6.gdoc
@@ -0,0 +1,209 @@
+
+
+Having structured URLs in our site is a basic requirement if we want to build an efficient SEO1 strategy, but it also contributes to improve user experience with more intuitive URLs. Wicket provides two different ways to control URL generation. The first (and simplest) is to “mount” one or more pages to an arbitrary path, while a more powerful technique is to use custom implementations of IMapperContext and IPageParametersEncoder interfaces. In the next paragraphs we will learn both of these two techniques.
+
+h3. Mounting a single page
+
+With Wicket we can mount a page to a given path in much the same way as we map a servlet filer to a desired path inside file web.xml (see page 9). Using mountPage(String path, Class <T> pageClass) method of the WepApplication class we tell Wicket to respond with a new instance of pageClass whenever a user navigates to the given path. In the application class of the project MountedPagesExample we mount MountedPage to the "/pageMount" path:
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	mountPage("/pageMount", MountedPage.class);
+	//Other initialization code...
+}
+{code}
+
+The path provided to mountPage will be used to generate the URL for any page of the specified class:
+
+{code}
+//it will return "/pageMount"
+RequestCycle.get().urlFor(MountedPage.class);
+{code}
+
+Under the hood the mountPage method mounts an instance of the request mapper @org.apache.wicket.request.mapper.MountedMapper@ configured for the given path:
+
+{code}
+public final <T extends Page> void mountPage(final String path,final Class<T> pageClass) {
+	mount(new MountedMapper(path, pageClass));
+}
+{code}
+
+Request mappers and the Application's method mount have been introduced in the previous chapter (paragraph 9.3).
+
+h3. Using parameter placeholders with mounted pages
+
+The path specified for mounted pages can contain dynamic segments which are populated with the values of the named parameters used to build the page. These segments are declared using special segments called parameter placeholders. Consider the path used in the following example:
+
+{code}
+mountPage("/pageMount/${foo}/otherSegm", MountedPageWithPlaceholder.class);
+{code}
+
+The path used above is composed by three segments: the first and the last are fixed while the second will be replaced by the value of the named parameter foo that must be provided when the page  MountedPageWithPlaceholder is instantiated:
+
+Java code:
+
+{code}
+PageParameters pageParameters = new PageParameters();
+pageParameters.add("foo", "foo");
+				
+setResponsePage(MountedPageWithPlaceholder.class, pageParameters)
+{code}
+
+Generated URL:
+
+{code:html}
+<Application path>/pageMount/foo/otherSegm
+{code}
+
+On the contrary if we manually insert an URL like '<web app path>/pageMount/bar/otherSegm', we can read value 'bar' retrieving the named parameter foo inside our page.
+
+Place holders can be declared as optional using the '#' character in place of '$':
+
+{code}
+mountPage("/pageMount/#{foo}/otherSegm", MountedPageOptionalPlaceholder.class);
+{code}
+
+If the named parameter for an optional placeholder is missing, the corresponding segment is removed from the final URL:
+
+Java code:
+
+{code}
+PageParameters pageParameters = new PageParameters();
+setResponsePage(MountedPageWithPlaceholder.class, pageParameters);
+{code}
+
+Generated URL:
+
+{code:html}
+<Application path>/pageMount/otherSegm
+{code}
+
+h3. Mounting a package
+
+In addition to mounting a single page, Wicket allows to mount all of the pages inside a package to a given path. Method mountPackage(String path, Class<T> pageClass) of class WepApplication will mount every page inside pageClass's package to the specified path.
+
+The resulting URL for package-mounted pages will have the following structure:
+
+{code:html}
+<Application path>/mountedPath/<PageClassName>[optional query string]
+{code}
+
+For example in the MountedPagesExample project we have mounted all pages inside the subpackage org.tutorialWicket.subPackage with this line of code:
+
+{code}
+mountPackage("/mountPackage", StatefulPackageMount.class);
+{code}
+
+StatefulPackageMount is one of the pages placed into the desired package and its URL will be:
+
+{code:html}
+<Application path>/mountPackage/StatefulPackageMount?1
+{code}
+
+Similarly to what is done by the mountPage method, the implementation of the mountPackage method mounts an instance of @org.apache.wicket.request.mapper.PackageMapper@ to the given path.
+
+h3. Providing custom mapper context to request mappers
+
+Interface @org.apache.wicket.request.mapper.IMapperContext@ is used by request mappers to create new page instances and to retrieve static URL segments used to build and parse page URLs. Here is the list of these segments:
+
+* Namespace: it's the first URL segment of non-mounted pages. By default its value is wicket.
+* Identifier for non-bookmarkable URLs: it's the segment that identifies non bookmarkable pages. By default its value is page.
+* Identifier for bookmarkable URLs: it's the segment that identifies bookmarkable pages. By default its value is bookmarkable (as we have seen before in paragraph 8.1.1).
+* Identifier for resources: it's the segment that identifies Wicket resources. Its default value is resources. The topic of resource management will be covered in chapter 13.
+
+IMapperContext provides a getter method for any segment listed above. By default Wicket uses class @org.apache.wicket.DefaultMapperContext@ as mapper context.
+
+Project CustomMapperContext is an example of customization of mapper context where we use index as identifier for non-bookmarkable pages and staticURL as identifier for bookmarkable pages. In this project, instead of implementing our mapper context from scratch, we used DefaultMapperContext as base class overriding just the two methods we need to achieve the desired result (getBookmarkableIdentifier() and getPageIdentifier()).  The final implementation is the following:
+
+{code}
+public class CustomMapperContext extends DefaultMapperContext{
+
+	@Override
+	public String getBookmarkableIdentifier() {
+		return "staticURL";
+	}
+
+	@Override
+	public String getPageIdentifier() {
+		return "index";
+	}
+}
+{code}
+
+Now to use a custom mapper context in our application we must override the newMapperContext() method declared in the Application class and make it return our custom implementation of IMapperContext:
+
+{code}
+@Override
+protected IMapperContext newMapperContext() {
+	return new CustomMapperContext();
+}
+{code}
+
+h3. Controlling how page parameters are encoded with IPageParametersEncoder
+
+Some request mappers (like MountedMapper and PackageMapper) can delegate page parameters encoding/decoding to interface @org.apache.wicket.request.mapper.parameter.IPage ParametersEncoder@. This entity exposes two methods: encodePageParameters() and decodePageParameters(): the first  one is invoked to encode page parameters into an URL while the second one extracts parameters from the URL.
+
+Wicket comes with a built-in implementation of this interface which encodes named page parameters as URL segments using the following pattern: /paramName1/paramValue1/paramName2/param Value2...
+
+This built-in encoder is @org.apache.wicket.request.mapper.parameter.UrlPathPageParametersEncoder@ class. In the @PageParametersEncoderExample@ project we have manually mounted a @MountedMapper@ that takes as input also an @UrlPathPageParametersEncoder@:
+
+{code}
+@Override
+public void init() {
+	super.init();
+	mount(new MountedMapper("/mountedPath", MountedPage.class, new UrlPathPageParametersEncoder()));
+}
+{code}
+
+The home page of the project contains just a link to the MountedPage web page. The code of the link and the resulting page URL are:
+
+Link code:
+
+{code}
+add(new Link("mountedPage") {
+
+	@Override
+	public void onClick() {
+		
+		PageParameters pageParameters = new PageParameters();
+		pageParameters.add("foo", "foo");
+		pageParameters.add("bar", "bar");
+			
+		setResponsePage(MountedPage.class, pageParameters);
+	}
+});
+{code}
+
+Generated URL:
+
+{code:html}
+<Application path>/mountedPath/foo/foo/bar/bar?1
+{code}
+
+h3. Encrypting page URLs
+
+Sometimes URLs are a double–edged sword for our site because they can expose too many details about the internal structure of our web application making it more vulnerable to malicious users.
+
+To avoid this kind of security threat we can use the @CryptoMapper@ request mapper which wraps an existing mapper and encrypts the original URL producing a single encrypted segment:
+
+!url-encrypted.png!
+
+Typically, @CryptoMapper@ is registered into a Wicket application as the root request mapper wrapping the default one:
+
+{code}
+@Override
+public void init() {
+	super.init();
+	setRootRequestMapper(new CryptoMapper(getRootRequestMapper(), this)); 
+	//pages and resources must be mounted after we have set CryptoMapper
+	mountPage("/foo/", HomePage.class);
+{code}
+
+As pointed out in the code above, pages and resources must be mounted after having set @CryptoMapper@ as root mapper, otherwise the mounted paths will not work.
+
+{warning}
+By default @CryptoMapper@ encrypts page URLs with a cipher that might not be strong enough for production environment. Paragraph 21.4 will provide a more detailed description of how Wicket encrypts page URLs and we will see how to use stronger ciphers.
+{warning}

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/urls/urls_7.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/urls/urls_7.gdoc b/wicket-user-guide/src/docs/guide/urls/urls_7.gdoc
new file mode 100644
index 0000000..2145023
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/urls/urls_7.gdoc
@@ -0,0 +1,5 @@
+
+
+Links and URLs are not trivial topics as they may seem and in Wicket they are strictly interconnected. Developers must choose the right trade-off between producing structured URLs and avoiding to make them verbose and vulnerable.
+
+In this chapter we have explored the tools provided by Wicket to control how URLs are generated. We have started with static URLs for bookmarkable pages and we have seen how to pass parameters to target pages with PageParameters. In the second part of the chapter we focused on mounting pages to a specific path and on controlling how parameters are encoded by Wicket. Finally, we have also seen how to encrypt URLs to prevent security vulnerabilities.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/versioningCaching.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/versioningCaching.gdoc b/wicket-user-guide/src/docs/guide/versioningCaching.gdoc
new file mode 100644
index 0000000..6a38305
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/versioningCaching.gdoc
@@ -0,0 +1 @@
+This chapter explains how Wicket manages page instances, underlining the difference between stateful and stateless pages. The chapter also introduces some advanced topics like Java Serialization and multi-level cache. However, to understand what you will read you are not required to be familiar with these concepts.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_1.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_1.gdoc b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_1.gdoc
new file mode 100644
index 0000000..223345e
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_1.gdoc
@@ -0,0 +1,9 @@
+
+
+Wicket pages can be divided into two categories: stateful and stateless pages. Stateful pages are those which rely on user session to store their internal state and to keep track of user interaction.
+On the contrary stateless pages are those which don't change their internal state during their lifecycle and they don't need to occupy space into user session. 
+
+From Wicket's point of view the biggest difference between these two types of page is that stateful pages are versioned, meaning that they will be saved into user session every time their internal state has changed. Wicket automatically assigns a session to the user the first time a stateful page is requested. Page versions are stored into user session using Java Serialization mechanism. 
+Stateless pages are never versioned and that's why they don't require a valid user session. If we want to know whether a page is stateless or not, we can call the isPageStateless() method of class Page.
+
+In order to build a stateless page we must comply with some rules to ensure that the page won't need to use user session. These rules are illustrated in paragraph 8.3 but before talking about stateless pages we must first understand how stateful pages are handled and why they are versioned.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc
new file mode 100644
index 0000000..c83c220
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_2.gdoc
@@ -0,0 +1,139 @@
+
+
+Stateful pages are versioned in order to support browser's back button: when this button is pressed Wicket must respond by rendering the same page instance previously used. 
+
+A new page version is created when a stateful page is requested for the first time or when an existing instance is modified (for example changing its component hierarchy). To identify each page version Wicket uses a session-relative identifier called page id. This is a unique number and it is increased every time a new page version is created. 
+
+In the final example of the previous chapter (project LifeCycleStages), you may have noticed the number appended at the end of URL. This number is the page id we are talking about:
+
+!page-id.png!
+
+In this chapter we will use a revised version of this example project where the component hierarchy is modified inside the Link's onClick()method. This is necessary because Wicket creates a new page version only if the page is modified before its method onBeforeRender() is invoked. The code of the new home page is the following:
+
+{code}
+public class HomePage extends WebPage
+{
+	private static final long serialVersionUID = 1L;
+	private Label firstLabel;
+	private Label secondLabel;
+	
+	public HomePage(){
+		firstLabel = new Label("label", "First label");
+		secondLabel = new Label("label", "Second label");
+		
+		add(firstLabel);
+		
+		add(new Link("reload"){
+			@Override
+			public void onClick() {				
+				if(getPage().contains(firstLabel, true))
+					getPage().replace(secondLabel);
+				else
+					getPage().replace(firstLabel);		
+			}
+		});	
+		
+	}	
+}
+{code}
+
+Now if we run the new example (project LifeCycleStagesRevisited) and we click on the “Reload” button, a new page version is created and the page id is increased by one:
+
+!reload-page.png!
+
+If we press the back button the page version previously rendered (and serialized) will be retrieved (i.e. deserialized) and it will be used again to respond to our request (and page id is decremented):
+
+!browser-back.png!
+
+{note}
+For more details about page storing you can take a look at paragraph "Page storing" from chapter "Wicket Internals". The content of this paragraph is from wiki page https://cwiki.apache.org/confluence/display/WICKET/Page+Storage. 
+{note}
+
+As we have stated at the beginning of this chapter, page versions are stored using Java serialization, therefore every object referenced inside a page must be serializable. In paragraph 9.6 we will see how to overcome this limit and work with non-serializable objects in our components using detachable Wicket models.
+
+h3. Using a specific page version with PageReference
+
+To retrieve a specific page version in our code we can use class @org.apache.wicket.PageReference@ by providing its constructor with the corresponding page id:
+
+{code}
+//load page version with page id = 3
+PageReference pageReference = new PageReference(3);
+//load the related page instance
+Page page = pageReference.getPage();
+{code}
+
+To get the related page instance we must use method getPage.
+
+h3. Turning off page versioning
+
+If for any reason we need to switch off versioning for a given page, we can call its method setVersioned(false).
+
+h3. Pluggable serialization
+
+Starting from version 1.5 it is possible to choose which implementation of Java serialization will be used by Wicket to store page versions. Wicket serializes pages using an implementation of interface @org.apache.wicket.serialize.ISerializer@. The default implementation is @org.apache.wicket.serialize.java.JavaSerializer@ and it uses the standard Java serialization mechanism based on classes ObjectOutputStream and ObjectInputStream. However on Internet we can find other interesting serialization libraries like [Kryo|https://github.com/EsotericSoftware/kryo] or [Fast|http://ruedigermoeller.github.io/fast-serialization/] which perform faster then the standard implementation. The serializer in use can be customized with the setSerializer(ISerializer) method defined by setting interface @org.apache.wicket.settings.IFrameworkSettings@. 
+
+We can access this interface inside the method init of the class Application using the getFrameworkSettings() method :
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	getFrameworkSettings().setSerializer(yourSerializer);
+}
+{code}
+
+A serializer based on Kryo library and another one based on Fast are provided by the WicketStuff project. You can find more information on this project, as well as the instructions to use its modules, in Appendix B.
+
+h3. Page caching
+
+By default Wicket persists versions of pages into a session-relative file on disk, but it uses a two-levels cache to speed up this process. The first level of the cache uses a http session attribute called “wicket:persistentPageManagerData-<APPLICATION_NAME>” to store pages. The second level cache stores pages into application-scoped variables which are identified by a session id and a page id. 
+
+The following picture is an overview of these two caching levels:
+
+!wicket-cache.png!
+
+The session-scoped cache is faster then the other memory levels but it contains only the pages used to serve the last request. Wicket allows us to set the maximum amount of memory allowed for the application-scoped cache and for the page store file. Both parameters can be configured via setting interface @org.apache.wicket.settings.IStoreSettings@. 
+
+This interface provides the setMaxSizePerSession(Bytes bytes) method to set the size for page store file. The Bytes parameter is the maximum size allowed for this file:
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	getStoreSettings().setMaxSizePerSession(Bytes.kilobytes(500));
+}
+{code}
+
+Class @org.apache.wicket.util.lang.Bytes@ is an utility class provided by Wicket to express size in bytes (for further details refer to the JavaDoc).
+For the second level cache we can use the setInmemoryCacheSize(int inmemoryCacheSize) method. The integer parameter is the maximum number of page instances that will be saved into application-scoped cache:
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	getStoreSettings().setInmemoryCacheSize(50);
+}
+{code}
+
+h3. Page expiration
+
+Page instances are not kept in the user session forever. They can be discarded when the limit set with the setMaxSizePerSession method is reached or (more often) when user session expires. When we ask Wicket for a page id corresponding to a page instance removed from the session, we bump into a  PageExpiredException and we get the following default error page:
+
+!page-expired.png!
+
+This error page can be customized with the setPageExpiredErrorPage method of the @org.apache.wicket.settings.IApplicationSettings@ interface:
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	getApplicationSettings().setPageExpiredErrorPage(
+				CustomExpiredErrorPage.class);
+}
+{code}
+
+The page class provided as custom error page must have a public constructor with no argument or a constructor that takes as input a single PageParameters argument (the page must be bookmarkable as described in paragraph 8.1.1).

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc
new file mode 100644
index 0000000..3004164
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_3.gdoc
@@ -0,0 +1,48 @@
+
+
+Wicket makes it very easy to build stateful pages, but sometimes we might want to use an “old school” stateless page that doesn't keep memory of its state in the user session. For example consider the public area of a site or a login page: in those cases a stateful page would be a waste of resources or even a security threat, as we will see in paragraph 10.9. 
+
+In Wicket a page can be stateless only if it satisfies the following requirements:
+
+# it has been instantiated by Wicket (i.e. we don't create it with operator new) using a constructor with no argument or a constructor that takes as input a single PageParameters argument (class PageParameters will be covered in chapter 8).
+# All its children components (and behaviors) are in turn stateless, which means that their method isStateless must return true.
+
+The first requirement implies that, rather than creating a page by hand, we should rely on Wicket's capability of resolving page instances, like we do when we use method setResponsePage(Class page).
+
+In order to comply with the second requirement it could be helpful to check if all children components of a page are stateless. To do this we can leverage method visitChildren and the visitor pattern to iterate over components and test if their method isStateless actually returns true:
+
+{code}
+@Override
+protected void onInitialize() {
+		super.onInitialize();
+		
+		visitChildren(new IVisitor<Component, Void>() {
+			@Override
+			public void component(Component component, IVisit<Void> arg1) {
+				if(!component.isStateless())
+		  			System.out.println("Component " + component.getId() + " is not stateless");
+			}
+		});
+	}
+{code}
+
+Alternatively, we could use the @StatelessComponent@ utility annotation along with the @StatelessChecker@ class (they are both in package @org.apache.wicket.devutils.stateless@). @StatelessChecker@ will throw an @IllegalArgumentException@ if a component annotated with @StatelessComponent@ doesn't respect the requirements for being stateless. To use @StatelessComponent@ annotation we must first add the @StatelessChecker@ to our application as a component render listener:
+
+{code}
+@Override
+public void init()
+{
+	super.init();
+	getComponentPostOnBeforeRenderListeners().add(new StatelessChecker());
+}
+{code}
+
+{note}
+Most of the Wicket's built-in components are stateful, hence they can not be used with a stateless page. However some of them have also a stateless version which can be adopted when we need to keep a page stateless. In the rest of the guide we will point out when a built-in component comes also with a stateless version.
+{note}
+
+A page can be also explicitly declared as stateless setting the appropriate flag to true with the setStatelessHint(true) method. This method will not prevent us from violating the requirements for a stateless page, but if we do so we will get the following warning log message:
+
+{warning}
+Page '<page class>' is not stateless because of component with path '<component path>'
+{warning}

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc
new file mode 100644
index 0000000..18d2c2d
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/versioningCaching/versioningCaching_4.gdoc
@@ -0,0 +1,5 @@
+
+
+In this chapter we have seen how page instances are managed by Wicket. We have learnt that pages can be divided into two families: stateless and stateful pages. Knowing the difference between the two types of pages is important to build the right page for a given task. 
+
+However, to complete the discussion about stateless pages we still have to deal with two topics we have just outlined in this chapter: class PageParameters and bookmarkable pages. The first part of chapter 10 will cover these missing topics.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/whyLearn.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/whyLearn.gdoc b/wicket-user-guide/src/docs/guide/whyLearn.gdoc
new file mode 100644
index 0000000..e6bc92c
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/whyLearn.gdoc
@@ -0,0 +1,6 @@
+Software development is a challenging activity and developers must keep their skills up-to-date with new technologies.
+
+But before starting to learn the last “coolest” framework we should always ask ourself if it is the right tool for us and how it can improve our everyday job.
+Java's ecosystem is already full of many well-known web frameworks, so why should we spend our time learning Wicket?
+
+This chapter will show you how Wicket is different from other web frameworks you may know and it will explain also how it can improve your life as web developer.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_1.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_1.gdoc b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_1.gdoc
new file mode 100644
index 0000000..c275f24
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_1.gdoc
@@ -0,0 +1,9 @@
+...but we all hate spaghetti code! That's why in the first half of the 2000s we have seen the birth of so many web frameworks. Their mission was to separate our business code from presentation layer (like JSP pages).
+
+Some of theme (like Struts, Spring MVC, Velocity, etc...) have become widely adopted and they made the MVC pattern very popular among developers.
+However, none of these frameworks offers a real object-oriented (OO) abstraction for web pages and we still have to take care of web-related tasks such as HTTP request/response handling, URLs mapping, storing data into user session and so on.
+
+The biggest limit of MVC frameworks is that they don't do much to overcome the impedance mismatch between the stateless nature of HTTP protocol and the need of our web applications of handling a (very complex) state.
+
+To overcome these limits developers have started to adopt a new generation of component oriented web frameworks designed to provide a completely different approach to web development.
+

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_2.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_2.gdoc b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_2.gdoc
new file mode 100644
index 0000000..89d33f2
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_2.gdoc
@@ -0,0 +1,14 @@
+Component oriented frameworks differ from classic web frameworks in that they build a model of requested page on the server side and the HTML sent back to the client is generated according to this model. You can think of the model as if it was an “inverse” JavaScript DOM, meaning that:
+
+# is built on server-side
+# is built before HTML is sent to client
+# HTML code is generated using this model and not vice versa.
+
+  !requesthandling-general.png!
+
+  _General schema of page request handling for a component oriented framework_
+
+With this kind of framework our web pages and their HTML components (forms, input controls, links, etc...), are pure class instances.
+Since pages are class instances they live inside the JVM heap and we can handle them as we do with any other Java class.
+This approach is very similar to what GUI frameworks (like Swing or SWT) do with desktop windows and their components. Wicket and the other component oriented frameworks bring to web development the same kind of abstraction that GUI frameworks offer when we build a desktop application. Most of those kind of frameworks hide the details of the HTTP protocol and naturally solve the problem of its stateless nature.
+

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_3.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_3.gdoc b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_3.gdoc
new file mode 100644
index 0000000..20e5575
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_3.gdoc
@@ -0,0 +1,7 @@
+At this point some people may still wonder why OOP is so important also for web development and what benefits it can bring to developers.
+Let's quickly review the main advantages that this paradigm can offer us:
+
+* *Web pages are objects*: web pages are not just text files sent back to the client. They are object instances and we can harness OOP to design web pages and their components. With Wicket we can also apply inheritance to HTML markup in order to build a consistent graphic layout for our applications (we will see markup inheritance in [chapter 4.2|guide:layout_2]).
+* *We don't have to worry about application's state*: pages and components can be considered stateful entities. They are Java objects and they can keep a state inside them and reference other objects. We can stop worrying about keeping track of user data stored inside the @HttpSession@ and we can start managing them in a natural and transparent way.
+* *Testing web applications is much easier*: since pages and components are pure objects, you can use JUnit to test their behavior and to ensure that they render as expected. Wicket has a set of utility classes for unit testing that simulate user interaction with web pages, hence we can write acceptance tests using just JUnit without any other test framework (unit testing is covered in [chapter 21|guide:testing]).
+

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_4.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_4.gdoc b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_4.gdoc
new file mode 100644
index 0000000..5428883
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/whyLearn/whyLearn_4.gdoc
@@ -0,0 +1,11 @@
+Wicket is not the only component oriented framework available in the Java ecosystem. Among its competitors we can find GWT (from Google), JSF (from Oracle), Vaadin (from Vaadin Ltd.), etc... Even if Wicket and all those other frameworks have their pros and cons, there are good reasons to prefer Wicket over them:
+
+* *Wicket is 100% open source*: Wicket is a top Apache project and it doesn't depend on any private company. You don't have to worry about future licensing changes, Wicket will always be released under Apache license 2.0 and freely available.
+
+* *Wicket is a community driven project*: The Wicket team supports and promotes the dialogue with the framework's users through two mailing lists "(one for users and another one for framework developers)":http://wicket.apache.org/help/email.html and an "Apache JIRA":https://issues.apache.org/jira/browse/WICKET (the issue tracking system). Moreover, as any other Apache project, Wicket is developed paying great attention to user feedbacks and to suggested features.
+
+* *Wicket is just about Java and good old HTML*: almost all web frameworks force users to adopt special tags or to use server side code inside HTML markup. This is clearly in contrast with the concept of separation between presentation and business logic and it leads to a more confusing code in our pages. In Wicket we don't have to take care of generating HTML inside the page itself, and we won't need to use any tag other than standard HTML tags. All we have to do is to attach our components (Java instances) to the HTML tags using a simple tag attribute called @wicket:id@ (we will shortly see how to use it).
+
+* *With Wicket we can easily use JavaBeans and "POJO":http://en.wikipedia.org/wiki/Plain_Old_Java_Object in our web tier*: one of the most annoying and error-prone task in web development is collecting user input through a form and keeping form fields updated with previously inserted values. This usually requires a huge amount of code to extract input from request parameters (which are strings), parse them to Java types and store them into some kind of variable. And this is just half of the work we have to do as we must implement the inverse path (load data from Java to the web form).Moreover, most of the times our forms will use a JavaBean or a POJO as backing object, meaning that we must manually map form fields with the corresponding object fields and vice versa. Wicket comes with an intuitive and flexible mechanism that does this mapping for us without any configuration overhead (using a convention over configuration approach) and in a transparent way. [Chapter 10|guide:modelsfo
 rms] will introduce the concept of Wicket model and we will learn how to harness this entity with forms.
+
+* *No complex XML needed*: Wicket was designed to minimize the amount of configuration files needed to run our applications. No XML file is required except for the standard deployment descriptor web.xml (unless you are using Servlet 3 or a later version. See [Chapter 4|guide:whyLearn_2] for more details).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff.gdoc
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_1.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_1.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_1.gdoc
new file mode 100644
index 0000000..18ffad1
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_1.gdoc
@@ -0,0 +1,18 @@
+
+
+WicketStuff is an umbrella project that gathers different Wicket-related projects developed and maintained by the community. The project is hosted on GitHub at "https://github.com/wicketstuff/core":https://github.com/wicketstuff/core. Every module is structured as a parent Maven project containing the actual project that implements the new functionality and an example project that illustrates how to use it in our code. The resulting directory structure of each module is the following:
+
+{code}
+\<module name>-parent
+        |
+        +---<module name>
+        \---<module name>-examples
+{code}
+
+So far we have introduced only modules Kryo Serializer and JavaEE Inject, but WicketStuff comes with many other modules that can be used in our applications. Some of them come in handy to improve the user experience of our pages with complex components or integrating some popular web services (like "Google Maps":http://maps.google.com/ ) and JavaScript libraries (like "TinyMCE":http://www.tinymce.com/ ).
+
+This appendix provides a quick overview of what WicketStuff offers to enhance the usability and the visually-appealing of our pages.
+
+{note}
+Every WicketStuff module can be downloaded as JAR archive at "http://mvnrepository.com":http://mvnrepository.com . This site provides also the XML fragment needed to include it as a dependency into our pom.xml file.
+{note}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_2.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_2.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_2.gdoc
new file mode 100644
index 0000000..03b97a2
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_2.gdoc
@@ -0,0 +1,46 @@
+
+
+Module tinymce offers integration with the namesake JavaScript library that turns our “humble” text-areas into a full-featured HTML WYSIWYG editor:
+
+!tinymce.png!
+
+To “tinyfy” a textarea component we must use behavior TinyMceBehavior:
+
+{code}
+TextArea textArea = new TextArea("textArea", new Model(""));
+textArea.add(new TinyMceBehavior());
+{code}
+
+By default TinyMceBehavior adds only a basic set of functionalities to our textarea:
+
+!tinymce_basic.png!
+
+To add more functionalities we must use class TinyMCESettings to register additional TinyMCE plugins and to customize the toolbars buttons. The following code is an excerpt from example page FullFeaturedTinyMCEPage:
+
+{code}
+TinyMCESettings settings = new TinyMCESettings(
+                       TinyMCESettings.Theme.advanced);
+//...
+// first toolbar
+//...
+settings.add(Button.newdocument, TinyMCESettings.Toolbar.first,
+		      TinyMCESettings.Position.before);
+settings.add(Button.separator, TinyMCESettings.Toolbar.first,
+		      TinyMCESettings.Position.before);
+settings.add(Button.fontselect, TinyMCESettings.Toolbar.first,
+		      TinyMCESettings.Position.after);
+//...
+// other settings
+settings.setToolbarAlign(
+   		TinyMCESettings.Align.left);
+settings.setToolbarLocation(
+   		TinyMCESettings.Location.top);
+settings.setStatusbarLocation(
+   		TinyMCESettings.Location.bottom);
+settings.setResizing(true);
+//...
+TextArea textArea = new TextArea("ta", new Model(TEXT));
+textArea.add(new TinyMceBehavior(settings));
+{code}
+
+For more configuration examples see pages inside package wicket.contrib.examples.tinymce in the example project of the module.

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_3.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_3.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_3.gdoc
new file mode 100644
index 0000000..04d1dd9
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_3.gdoc
@@ -0,0 +1,32 @@
+
+
+Module wicketstuff-gmap3 integrates "Google Maps":http://maps.google.com service with Wicket providing component org.wicketstuff.gmap.GMap. If we want to embed Google Maps into one of our pages we just need to add component GMap inside the page. The following snippet is taken from example page SimplePage:
+
+*HTML:*
+
+{code:html}
+...
+<body>
+  <div wicket:id="map">Map</div>
+</body>
+... 
+{code}
+
+*Java code:*
+
+{code}
+public class SimplePage extends WicketExamplePage
+{
+    public SimplePage()
+    {
+        GMap map = new GMap("map");
+        map.setStreetViewControlEnabled(false);
+        map.setScaleControlEnabled(true);
+        map.setScrollWheelZoomEnabled(true);
+        map.setCenter(new GLatLng(52.47649, 13.228573));        
+        add(map);
+    }
+}
+{code}
+
+The component defines a number of setters to customize its behavior and appearance. More info can be found on wiki page "https://github.com/wicketstuff/core/wiki/Gmap3":https://github.com/wicketstuff/core/wiki/Gmap3 .
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_4.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_4.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_4.gdoc
new file mode 100644
index 0000000..a6825f9
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_4.gdoc
@@ -0,0 +1,32 @@
+
+
+To integrate the "Google Chart":https://developers.google.com/chart/ tool into our pages we can use module wicketstuff-googlecharts. To display a chart we must combine the following entities: component Chart, interface IChartData and class ChartProvider, all inside package org.wicketstuff.googlecharts. The following snippet is taken from example page Home:
+
+*HTML:*
+
+{code:html}
+...
+  <h2>Hello World</h2>
+  <img wicket:id="helloWorld"/>
+... 
+{code}
+
+*Java code:*
+
+{code}
+IChartData data = new AbstractChartData(){
+    public double[][] getData(){
+       return new double[][] { { 34, 22 } };
+    }
+};
+
+ChartProvider provider = new ChartProvider(new Dimension(250, 100), ChartType.PIE_3D, data);
+provider.setPieLabels(new String[] { "Hello", "World" });
+add(new Chart("helloWorld", provider));
+{code}
+
+*Displayed chart:*
+
+!googlechart.png!
+
+As we can see in the snippet above, component Chart must be used with <img> tag while the input data returned by IChartData must be a two-dimensional array of double values. 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc
new file mode 100644
index 0000000..0a810a1
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_5.gdoc
@@ -0,0 +1,40 @@
+
+
+Module wicketstuff-inmethod-grid implements a sophisticated grid-component with class com. inmethod.grid.datagrid.DataGrid. 
+
+Just like pageable repeaters (seen in paragraph 11.4) DataGrid provides data pagination and uses interface IDataProvider as data source. In addition the component is completely ajaxified:
+
+!inmethod-grid1.png!
+
+DataGrid supports also editable cells and row selection:
+
+!inmethod-grid2.png!
+
+The following snippet illustrate how to use DataGrid and is taken from wiki page "https://github.com/wicketstuff/core/wiki/InMethodGrid":https://github.com/wicketstuff/core/wiki/InMethodGrid : 
+
+*HTML:*
+
+{code:html}
+...
+  <div wicket:id="grid">Grid</div>
+... 
+{code}
+
+*Java code:*
+
+{code}
+final List<Person> personList = //load a list of Persons
+final ListDataProvider listDataProvider = new ListDataProvider(personList);
+//define grid's columns
+List<IGridColumn> cols = (List) Arrays.asList(
+	     new PropertyColumn(new Model("First Name"), "firstName"),
+	     new PropertyColumn(new Model("Last Name"), "lastName"));
+
+DataGrid grid = new DefaultDataGrid("grid", new DataProviderAdapter(listDataProvider), cols);
+add(grid);
+{code}
+
+In the code above we have used convenience class DefaultDataGrid that is a subclass of DataGrid and it already comes with a navigation toolbar.
+
+The example pages are under package com.inmethod.grid.examples.pages in the example project which is hosted at "http://www.wicket-library.com/inmethod-grid/data-grid/simple":http://www.wicket-library.com/inmethod-grid/data-grid/simple .
+

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_6.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_6.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_6.gdoc
new file mode 100644
index 0000000..eca9b5e
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_6.gdoc
@@ -0,0 +1,76 @@
+REST-based API are becoming more and more popular around the web and the number of services based on this architecture is constantly increasing.
+
+Wicket is well-known for its capability of transparently handling the state of web applications on server side, but it can be also easily adopted to create RESTful services.
+WicketStuff module for REST provides a special resource class and a set of annotations to implement REST APIs/services in much the same way as we do it with Spring MVC or with the standard JAX-RS.
+
+The module provides class @AbstractRestResource@ as generic abstract class to implement a Wicket resource that handles the request and the response using a particular data format (XML, JSON, etc...).
+Subclassing @AbstractRestResource@ we can create custom resources and map their pubblic methods to a given subpath with annotation @MethodMapping@. The following snippet is taken from resource @PersonsRestResource@ inside module @'restannotations-examples'@:
+
+{code}
+    @MethodMapping("/persons")
+    public List<PersonPojo> getAllPersons() {
+        //method mapped at subpath "/persons" and HTTP method GET
+    }
+
+    @MethodMapping(value = "/persons/{personIndex}", httpMethod = HttpMethod.DELETE)
+    public void deletePerson(int personIndex) {
+        //method mapped at subpath "/persons/{personIndex}" and HTTP method DELETE. 
+        //Segment {personIndex} will contain an integer value as index.
+    }
+
+    @MethodMapping(value = "/persons", httpMethod = HttpMethod.POST)
+    public void createPerson(@RequestBody PersonPojo personPojo) {
+        //creates a new instance of PersonPojo reading it from request body
+    }
+{code}
+
+@MethodMapping@ requires to specify the subpath we want to map the method to. In addition we can specify also the HTTP method that must be used to invoke the method via REST (GET, POST, DELETE, PATCH, etc...). This value can be specified with enum class @HttpMethod@ and is GET by default. 
+In the code above we can see annotation @RequestBody@ which is used to extract the value of a method parameter from the request body (method createPerson).
+To write/read objects to response/from request, @AbstractRestResource@ uses an implementation of interface @IWebSerialDeserial@ which defines the following methods: 
+
+{code}
+
+    public interface IWebSerialDeserial {
+
+       public void objectToResponse(Object targetObject, WebResponse response, String mimeType) throws Exception;
+
+       public <T> T requestToObject(WebRequest request, Class<T> argClass, String mimeType) throws Exception;
+
+       public boolean isMimeTypeSupported(String mimeType);
+    }
+{code}
+
+To convert segments value (which are strings) to parameters type, @AbstractRestResource@ uses the standard Wicket mechanism based on the application converter locator:
+
+{code}
+
+    //return the converter for type clazz
+    IConverter converter = Application.get().getConverterLocator().getConverter(clazz);
+    //convert string to object
+    return converter.convertToObject(value, Session.get().getLocale());
+{code}
+
+In order to promote the principle of convention over configuration, we don't need to use any annotation to map method parameters to path parameters if they are declared in the same order. If we need to manually bind method parameters to path parameters we can use annotation @PathParam@.
+
+{code}
+    @MethodMapping(value = "/variable/{p1}/order/{p2}", produces = RestMimeTypes.PLAIN_TEXT)
+    public String testParamOutOfOrder(@PathParam("p2") String textParam, @PathParam("p1") int intParam) {
+        //method parameter textParam is taken from path param 'p2', while intParam uses 'p1'
+    }
+{code}
+
+As JSON is de-facto standard format for REST API, the project comes also with a ready-to-use resource (@GsonRestResource@) and a serial/deserial (@GsonSerialDeserial@) that work with JSON format (both inside module @'restannotations-json'@). These classes use Gson as JSON library.
+
+@AbstractRestResource@ supports role-based authorizations for mapped method with annotation @AuthorizeInvocation@:
+
+{code}
+    @MethodMapping(value = "/admin", httpMethod = HttpMethod.GET)
+    @AuthorizeInvocation("ROLE_ADMIN")
+    public void testMethodAdminAuth() {
+
+    }
+{code}
+
+To use annotation @AuthorizeInvocation@ we must specify in the resource construcor an instance of Wicket interface @IRoleCheckingStrategy@.
+
+To read the complete documentation of the module and to discover more advanced feature please refer to the "project homepage":https://github.com/wicketstuff/core/blob/master/jdk-1.7-parent/wicketstuff-restannotations-parent

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_7.gdoc
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_7.gdoc b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_7.gdoc
new file mode 100644
index 0000000..967e0a5
--- /dev/null
+++ b/wicket-user-guide/src/docs/guide/wicketstuff/wicketstuff_7.gdoc
@@ -0,0 +1,4 @@
+Wicket makes working with AJAX easy and pleasant with its component-oriented abstraction. However as side effect, AJAX components and behaviors make their hosting page stateful. This can be quite annoying if we are working on a page that must be stateless (for example a login page). 
+In this case an obvious solution would be to roll out our own stateless components/behaviors, but Wicketstuff alredy offers such kind of artifacts with @stateless@ module. Here you can find the stateless version of the basic AJAX componets and behaviors shiped with Wicket, like @StatelessAjaxSubmitLink@, @StatelessAjaxFallbackLink@, @StatelessAjaxEventBehavior@, @StatelessAjaxFormSubmitBehavior@ etc...
+A short introduction to this module can be found on its "home page":https://github.com/wicketstuff/core/tree/master/jdk-1.7-parent/stateless-parent .
+

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/AJAX-tree-repeater.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/AJAX-tree-repeater.png b/wicket-user-guide/src/docs/img/AJAX-tree-repeater.png
new file mode 100644
index 0000000..855b1b2
Binary files /dev/null and b/wicket-user-guide/src/docs/img/AJAX-tree-repeater.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/CallbackURLExample-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/CallbackURLExample-screenshot.png b/wicket-user-guide/src/docs/img/CallbackURLExample-screenshot.png
new file mode 100644
index 0000000..ae56f03
Binary files /dev/null and b/wicket-user-guide/src/docs/img/CallbackURLExample-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/EjbInjectionExample.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/EjbInjectionExample.png b/wicket-user-guide/src/docs/img/EjbInjectionExample.png
new file mode 100644
index 0000000..6a8908b
Binary files /dev/null and b/wicket-user-guide/src/docs/img/EjbInjectionExample.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/InterComponentsEventsExample-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/InterComponentsEventsExample-screenshot.png b/wicket-user-guide/src/docs/img/InterComponentsEventsExample-screenshot.png
new file mode 100644
index 0000000..9c563e0
Binary files /dev/null and b/wicket-user-guide/src/docs/img/InterComponentsEventsExample-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/JMX-console.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/JMX-console.png b/wicket-user-guide/src/docs/img/JMX-console.png
new file mode 100644
index 0000000..01fa521
Binary files /dev/null and b/wicket-user-guide/src/docs/img/JMX-console.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/JMX-console2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/JMX-console2.png b/wicket-user-guide/src/docs/img/JMX-console2.png
new file mode 100644
index 0000000..94ef21b
Binary files /dev/null and b/wicket-user-guide/src/docs/img/JMX-console2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/JMX-console3.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/JMX-console3.png b/wicket-user-guide/src/docs/img/JMX-console3.png
new file mode 100644
index 0000000..a035355
Binary files /dev/null and b/wicket-user-guide/src/docs/img/JMX-console3.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/JMX-console4.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/JMX-console4.png b/wicket-user-guide/src/docs/img/JMX-console4.png
new file mode 100644
index 0000000..6fce925
Binary files /dev/null and b/wicket-user-guide/src/docs/img/JMX-console4.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/JMX-new-connection.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/JMX-new-connection.png b/wicket-user-guide/src/docs/img/JMX-new-connection.png
new file mode 100644
index 0000000..a249000
Binary files /dev/null and b/wicket-user-guide/src/docs/img/JMX-new-connection.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/apache-wicket.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/apache-wicket.png b/wicket-user-guide/src/docs/img/apache-wicket.png
new file mode 100644
index 0000000..7d4d922
Binary files /dev/null and b/wicket-user-guide/src/docs/img/apache-wicket.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/asf_logo.gif
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/asf_logo.gif b/wicket-user-guide/src/docs/img/asf_logo.gif
new file mode 100644
index 0000000..c338757
Binary files /dev/null and b/wicket-user-guide/src/docs/img/asf_logo.gif differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/authorization-access-denied.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/authorization-access-denied.png b/wicket-user-guide/src/docs/img/authorization-access-denied.png
new file mode 100644
index 0000000..a997794
Binary files /dev/null and b/wicket-user-guide/src/docs/img/authorization-access-denied.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/autocomplete-example-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/autocomplete-example-screenshot.png b/wicket-user-guide/src/docs/img/autocomplete-example-screenshot.png
new file mode 100644
index 0000000..ab3ccdb
Binary files /dev/null and b/wicket-user-guide/src/docs/img/autocomplete-example-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/browser-back.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/browser-back.png b/wicket-user-guide/src/docs/img/browser-back.png
new file mode 100644
index 0000000..f869c59
Binary files /dev/null and b/wicket-user-guide/src/docs/img/browser-back.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/choice-form-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/choice-form-screenshot.png b/wicket-user-guide/src/docs/img/choice-form-screenshot.png
new file mode 100644
index 0000000..f270fdf
Binary files /dev/null and b/wicket-user-guide/src/docs/img/choice-form-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/class-diag-IFormSubmittingComponent.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/class-diag-IFormSubmittingComponent.png b/wicket-user-guide/src/docs/img/class-diag-IFormSubmittingComponent.png
new file mode 100644
index 0000000..68e8d6f
Binary files /dev/null and b/wicket-user-guide/src/docs/img/class-diag-IFormSubmittingComponent.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/comp-with-markup-german.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/comp-with-markup-german.png b/wicket-user-guide/src/docs/img/comp-with-markup-german.png
new file mode 100644
index 0000000..39bd9ca
Binary files /dev/null and b/wicket-user-guide/src/docs/img/comp-with-markup-german.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/component-lifecycle.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/component-lifecycle.png b/wicket-user-guide/src/docs/img/component-lifecycle.png
new file mode 100644
index 0000000..73703ca
Binary files /dev/null and b/wicket-user-guide/src/docs/img/component-lifecycle.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/comsysto-logo.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/comsysto-logo.png b/wicket-user-guide/src/docs/img/comsysto-logo.png
new file mode 100644
index 0000000..f6b43e0
Binary files /dev/null and b/wicket-user-guide/src/docs/img/comsysto-logo.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/custom-ajax-call-listener.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/custom-ajax-call-listener.png b/wicket-user-guide/src/docs/img/custom-ajax-call-listener.png
new file mode 100644
index 0000000..bbc6f65
Binary files /dev/null and b/wicket-user-guide/src/docs/img/custom-ajax-call-listener.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/custom-panel-bundle.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/custom-panel-bundle.png b/wicket-user-guide/src/docs/img/custom-panel-bundle.png
new file mode 100644
index 0000000..6a82fbe
Binary files /dev/null and b/wicket-user-guide/src/docs/img/custom-panel-bundle.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/custom-panel-bundle2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/custom-panel-bundle2.png b/wicket-user-guide/src/docs/img/custom-panel-bundle2.png
new file mode 100644
index 0000000..af14b69
Binary files /dev/null and b/wicket-user-guide/src/docs/img/custom-panel-bundle2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/custom-properties-file.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/custom-properties-file.png b/wicket-user-guide/src/docs/img/custom-properties-file.png
new file mode 100644
index 0000000..3bfd9b1
Binary files /dev/null and b/wicket-user-guide/src/docs/img/custom-properties-file.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/datepicker-package-resources.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/datepicker-package-resources.png b/wicket-user-guide/src/docs/img/datepicker-package-resources.png
new file mode 100644
index 0000000..5103655
Binary files /dev/null and b/wicket-user-guide/src/docs/img/datepicker-package-resources.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/datepicker-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/datepicker-screenshot.png b/wicket-user-guide/src/docs/img/datepicker-screenshot.png
new file mode 100644
index 0000000..48e46d2
Binary files /dev/null and b/wicket-user-guide/src/docs/img/datepicker-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/description-of-illegalstate.jpg
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/description-of-illegalstate.jpg b/wicket-user-guide/src/docs/img/description-of-illegalstate.jpg
new file mode 100644
index 0000000..443c7e7
Binary files /dev/null and b/wicket-user-guide/src/docs/img/description-of-illegalstate.jpg differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/detachable-models.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/detachable-models.png b/wicket-user-guide/src/docs/img/detachable-models.png
new file mode 100644
index 0000000..1a0dfe7
Binary files /dev/null and b/wicket-user-guide/src/docs/img/detachable-models.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/dropdown-choice.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/dropdown-choice.png b/wicket-user-guide/src/docs/img/dropdown-choice.png
new file mode 100644
index 0000000..7286c73
Binary files /dev/null and b/wicket-user-guide/src/docs/img/dropdown-choice.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/eclipse-classpath-variables.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/eclipse-classpath-variables.png b/wicket-user-guide/src/docs/img/eclipse-classpath-variables.png
new file mode 100644
index 0000000..335fcc2
Binary files /dev/null and b/wicket-user-guide/src/docs/img/eclipse-classpath-variables.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/eclipse-maven-import.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/eclipse-maven-import.png b/wicket-user-guide/src/docs/img/eclipse-maven-import.png
new file mode 100644
index 0000000..70587b5
Binary files /dev/null and b/wicket-user-guide/src/docs/img/eclipse-maven-import.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/edit-label-example-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/edit-label-example-screenshot.png b/wicket-user-guide/src/docs/img/edit-label-example-screenshot.png
new file mode 100644
index 0000000..7dcae63
Binary files /dev/null and b/wicket-user-guide/src/docs/img/edit-label-example-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/favicon.ico
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/favicon.ico b/wicket-user-guide/src/docs/img/favicon.ico
new file mode 100644
index 0000000..3dfcb92
Binary files /dev/null and b/wicket-user-guide/src/docs/img/favicon.ico differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/feedback-panel-style.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/feedback-panel-style.png b/wicket-user-guide/src/docs/img/feedback-panel-style.png
new file mode 100644
index 0000000..602a541
Binary files /dev/null and b/wicket-user-guide/src/docs/img/feedback-panel-style.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/file-system-trees.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/file-system-trees.png b/wicket-user-guide/src/docs/img/file-system-trees.png
new file mode 100644
index 0000000..f30f4b3
Binary files /dev/null and b/wicket-user-guide/src/docs/img/file-system-trees.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/final-login-page.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/final-login-page.png b/wicket-user-guide/src/docs/img/final-login-page.png
new file mode 100644
index 0000000..087b396
Binary files /dev/null and b/wicket-user-guide/src/docs/img/final-login-page.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/gitMavenPrj.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/gitMavenPrj.png b/wicket-user-guide/src/docs/img/gitMavenPrj.png
new file mode 100644
index 0000000..d0d1d76
Binary files /dev/null and b/wicket-user-guide/src/docs/img/gitMavenPrj.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/gitRepo.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/gitRepo.png b/wicket-user-guide/src/docs/img/gitRepo.png
new file mode 100644
index 0000000..1f4062c
Binary files /dev/null and b/wicket-user-guide/src/docs/img/gitRepo.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/googlechart.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/googlechart.png b/wicket-user-guide/src/docs/img/googlechart.png
new file mode 100644
index 0000000..e597946
Binary files /dev/null and b/wicket-user-guide/src/docs/img/googlechart.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/grails-icon.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/grails-icon.png b/wicket-user-guide/src/docs/img/grails-icon.png
new file mode 100644
index 0000000..68e3678
Binary files /dev/null and b/wicket-user-guide/src/docs/img/grails-icon.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/grails.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/grails.png b/wicket-user-guide/src/docs/img/grails.png
new file mode 100644
index 0000000..9cb734d
Binary files /dev/null and b/wicket-user-guide/src/docs/img/grails.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/groovy.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/groovy.png b/wicket-user-guide/src/docs/img/groovy.png
new file mode 100644
index 0000000..2b81b49
Binary files /dev/null and b/wicket-user-guide/src/docs/img/groovy.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/grouped-checkbox.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/grouped-checkbox.png b/wicket-user-guide/src/docs/img/grouped-checkbox.png
new file mode 100644
index 0000000..b01a5ae
Binary files /dev/null and b/wicket-user-guide/src/docs/img/grouped-checkbox.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/grouped-checkbox2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/grouped-checkbox2.png b/wicket-user-guide/src/docs/img/grouped-checkbox2.png
new file mode 100644
index 0000000..2a5622e
Binary files /dev/null and b/wicket-user-guide/src/docs/img/grouped-checkbox2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/grouped-radiobutton.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/grouped-radiobutton.png b/wicket-user-guide/src/docs/img/grouped-radiobutton.png
new file mode 100644
index 0000000..648f21e
Binary files /dev/null and b/wicket-user-guide/src/docs/img/grouped-radiobutton.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/header-area.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/header-area.png b/wicket-user-guide/src/docs/img/header-area.png
new file mode 100644
index 0000000..60e255e
Binary files /dev/null and b/wicket-user-guide/src/docs/img/header-area.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/inmethod-grid1.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/inmethod-grid1.png b/wicket-user-guide/src/docs/img/inmethod-grid1.png
new file mode 100644
index 0000000..9c189df
Binary files /dev/null and b/wicket-user-guide/src/docs/img/inmethod-grid1.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/inmethod-grid2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/inmethod-grid2.png b/wicket-user-guide/src/docs/img/inmethod-grid2.png
new file mode 100644
index 0000000..c705b49
Binary files /dev/null and b/wicket-user-guide/src/docs/img/inmethod-grid2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/intellj-maven-import.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/intellj-maven-import.png b/wicket-user-guide/src/docs/img/intellj-maven-import.png
new file mode 100644
index 0000000..971d702
Binary files /dev/null and b/wicket-user-guide/src/docs/img/intellj-maven-import.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/jsr303-form-validation.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/jsr303-form-validation.png b/wicket-user-guide/src/docs/img/jsr303-form-validation.png
new file mode 100644
index 0000000..706f80b
Binary files /dev/null and b/wicket-user-guide/src/docs/img/jsr303-form-validation.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/layout-include.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/layout-include.png b/wicket-user-guide/src/docs/img/layout-include.png
new file mode 100644
index 0000000..a3b1de9
Binary files /dev/null and b/wicket-user-guide/src/docs/img/layout-include.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/layout-mock.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/layout-mock.png b/wicket-user-guide/src/docs/img/layout-mock.png
new file mode 100644
index 0000000..018627c
Binary files /dev/null and b/wicket-user-guide/src/docs/img/layout-mock.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/layout.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/layout.png b/wicket-user-guide/src/docs/img/layout.png
new file mode 100644
index 0000000..30b81ec
Binary files /dev/null and b/wicket-user-guide/src/docs/img/layout.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/list-multiple-choices.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/list-multiple-choices.png b/wicket-user-guide/src/docs/img/list-multiple-choices.png
new file mode 100644
index 0000000..cbc055c
Binary files /dev/null and b/wicket-user-guide/src/docs/img/list-multiple-choices.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/list-multiple-choices2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/list-multiple-choices2.png b/wicket-user-guide/src/docs/img/list-multiple-choices2.png
new file mode 100644
index 0000000..9ba29b3
Binary files /dev/null and b/wicket-user-guide/src/docs/img/list-multiple-choices2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/loadable-detachable-model.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/loadable-detachable-model.png b/wicket-user-guide/src/docs/img/loadable-detachable-model.png
new file mode 100644
index 0000000..b5955ab
Binary files /dev/null and b/wicket-user-guide/src/docs/img/loadable-detachable-model.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/locale-german.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/locale-german.png b/wicket-user-guide/src/docs/img/locale-german.png
new file mode 100644
index 0000000..9643908
Binary files /dev/null and b/wicket-user-guide/src/docs/img/locale-german.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/login_calls_hollywood.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/login_calls_hollywood.png b/wicket-user-guide/src/docs/img/login_calls_hollywood.png
new file mode 100644
index 0000000..5933211
Binary files /dev/null and b/wicket-user-guide/src/docs/img/login_calls_hollywood.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/lost-in-redirection-mockup.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/lost-in-redirection-mockup.png b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup.png
new file mode 100644
index 0000000..8f064b3
Binary files /dev/null and b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/lost-in-redirection-mockup2.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/lost-in-redirection-mockup2.png b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup2.png
new file mode 100644
index 0000000..732008e
Binary files /dev/null and b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup2.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/lost-in-redirection-mockup3.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/lost-in-redirection-mockup3.png b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup3.png
new file mode 100644
index 0000000..b6811a9
Binary files /dev/null and b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup3.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/lost-in-redirection-mockup4.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/lost-in-redirection-mockup4.png b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup4.png
new file mode 100644
index 0000000..784fc9a
Binary files /dev/null and b/wicket-user-guide/src/docs/img/lost-in-redirection-mockup4.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/markup-inheritance.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/markup-inheritance.png b/wicket-user-guide/src/docs/img/markup-inheritance.png
new file mode 100644
index 0000000..f45414f
Binary files /dev/null and b/wicket-user-guide/src/docs/img/markup-inheritance.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/modal-window-example-screenshot.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/modal-window-example-screenshot.png b/wicket-user-guide/src/docs/img/modal-window-example-screenshot.png
new file mode 100644
index 0000000..62921bc
Binary files /dev/null and b/wicket-user-guide/src/docs/img/modal-window-example-screenshot.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/model-chaining.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/model-chaining.png b/wicket-user-guide/src/docs/img/model-chaining.png
new file mode 100644
index 0000000..c13a824
Binary files /dev/null and b/wicket-user-guide/src/docs/img/model-chaining.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/multi-select-transfer-component-wicket.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/multi-select-transfer-component-wicket.png b/wicket-user-guide/src/docs/img/multi-select-transfer-component-wicket.png
new file mode 100644
index 0000000..d46d89e
Binary files /dev/null and b/wicket-user-guide/src/docs/img/multi-select-transfer-component-wicket.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/multi-select-transfer-component.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/multi-select-transfer-component.png b/wicket-user-guide/src/docs/img/multi-select-transfer-component.png
new file mode 100644
index 0000000..727b61d
Binary files /dev/null and b/wicket-user-guide/src/docs/img/multi-select-transfer-component.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/mvn-wicket-archetype.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/mvn-wicket-archetype.png b/wicket-user-guide/src/docs/img/mvn-wicket-archetype.png
new file mode 100644
index 0000000..cf6b3e4
Binary files /dev/null and b/wicket-user-guide/src/docs/img/mvn-wicket-archetype.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/mywebapp-class-diagramm.jpg
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/mywebapp-class-diagramm.jpg b/wicket-user-guide/src/docs/img/mywebapp-class-diagramm.jpg
new file mode 100644
index 0000000..e0663c2
Binary files /dev/null and b/wicket-user-guide/src/docs/img/mywebapp-class-diagramm.jpg differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/netbeans-maven-import.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/netbeans-maven-import.png b/wicket-user-guide/src/docs/img/netbeans-maven-import.png
new file mode 100644
index 0000000..fae399d
Binary files /dev/null and b/wicket-user-guide/src/docs/img/netbeans-maven-import.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/note.gif
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/note.gif b/wicket-user-guide/src/docs/img/note.gif
new file mode 100644
index 0000000..1c9883b
Binary files /dev/null and b/wicket-user-guide/src/docs/img/note.gif differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/package-bundles.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/package-bundles.png b/wicket-user-guide/src/docs/img/package-bundles.png
new file mode 100644
index 0000000..f820ece
Binary files /dev/null and b/wicket-user-guide/src/docs/img/package-bundles.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/package-resource-localization.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/package-resource-localization.png b/wicket-user-guide/src/docs/img/package-resource-localization.png
new file mode 100644
index 0000000..07b58dd
Binary files /dev/null and b/wicket-user-guide/src/docs/img/package-resource-localization.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/package-resources.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/package-resources.png b/wicket-user-guide/src/docs/img/package-resources.png
new file mode 100644
index 0000000..8fe2940
Binary files /dev/null and b/wicket-user-guide/src/docs/img/package-resources.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/package-structure-custom-folder.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/package-structure-custom-folder.png b/wicket-user-guide/src/docs/img/package-structure-custom-folder.png
new file mode 100644
index 0000000..1437ffd
Binary files /dev/null and b/wicket-user-guide/src/docs/img/package-structure-custom-folder.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/package-structure-resource-folder.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/package-structure-resource-folder.png b/wicket-user-guide/src/docs/img/package-structure-resource-folder.png
new file mode 100644
index 0000000..aa5d5ee
Binary files /dev/null and b/wicket-user-guide/src/docs/img/package-structure-resource-folder.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/page-and-panel-bundle.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/page-and-panel-bundle.png b/wicket-user-guide/src/docs/img/page-and-panel-bundle.png
new file mode 100644
index 0000000..5c8e7c8
Binary files /dev/null and b/wicket-user-guide/src/docs/img/page-and-panel-bundle.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/page-expired.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/page-expired.png b/wicket-user-guide/src/docs/img/page-expired.png
new file mode 100644
index 0000000..a537530
Binary files /dev/null and b/wicket-user-guide/src/docs/img/page-expired.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/page-id.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/page-id.png b/wicket-user-guide/src/docs/img/page-id.png
new file mode 100644
index 0000000..8fdc283
Binary files /dev/null and b/wicket-user-guide/src/docs/img/page-id.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/page-panel-hierarchy.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/page-panel-hierarchy.png b/wicket-user-guide/src/docs/img/page-panel-hierarchy.png
new file mode 100644
index 0000000..999000a
Binary files /dev/null and b/wicket-user-guide/src/docs/img/page-panel-hierarchy.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/page-storage.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/page-storage.png b/wicket-user-guide/src/docs/img/page-storage.png
new file mode 100644
index 0000000..9c48d08
Binary files /dev/null and b/wicket-user-guide/src/docs/img/page-storage.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/paging-navigator.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/paging-navigator.png b/wicket-user-guide/src/docs/img/paging-navigator.png
new file mode 100644
index 0000000..58e54b5
Binary files /dev/null and b/wicket-user-guide/src/docs/img/paging-navigator.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/quickstart-webpage.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/quickstart-webpage.png b/wicket-user-guide/src/docs/img/quickstart-webpage.png
new file mode 100644
index 0000000..3b14920
Binary files /dev/null and b/wicket-user-guide/src/docs/img/quickstart-webpage.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/regex-form.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/regex-form.png b/wicket-user-guide/src/docs/img/regex-form.png
new file mode 100644
index 0000000..2dd4da7
Binary files /dev/null and b/wicket-user-guide/src/docs/img/regex-form.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/reload-page.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/reload-page.png b/wicket-user-guide/src/docs/img/reload-page.png
new file mode 100644
index 0000000..9ff23f0
Binary files /dev/null and b/wicket-user-guide/src/docs/img/reload-page.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/request-cycle-handler.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/request-cycle-handler.png b/wicket-user-guide/src/docs/img/request-cycle-handler.png
new file mode 100644
index 0000000..d2e0f3f
Binary files /dev/null and b/wicket-user-guide/src/docs/img/request-cycle-handler.png differ

http://git-wip-us.apache.org/repos/asf/wicket/blob/93dca376/wicket-user-guide/src/docs/img/requesthandling-general.png
----------------------------------------------------------------------
diff --git a/wicket-user-guide/src/docs/img/requesthandling-general.png b/wicket-user-guide/src/docs/img/requesthandling-general.png
new file mode 100644
index 0000000..56d9379
Binary files /dev/null and b/wicket-user-guide/src/docs/img/requesthandling-general.png differ