You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2018/12/06 22:38:32 UTC

[15/17] tomee git commit: exemple-mvc-cxf

exemple-mvc-cxf


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/58589f74
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/58589f74
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/58589f74

Branch: refs/heads/master
Commit: 58589f7459f4b321b3302bd702f0ca3cc7ab0689
Parents: c1f9d19
Author: Daniel Dias <da...@gmail.com>
Authored: Wed Dec 5 11:17:30 2018 -0200
Committer: Daniel Dias <da...@gmail.com>
Committed: Thu Dec 6 19:23:27 2018 -0200

----------------------------------------------------------------------
 examples/mvc-cxf/README.md                      |   23 +
 examples/mvc-cxf/pom.xml                        |  135 +
 .../superbiz/application/MVCApplication.java    |    7 +
 .../org/superbiz/controller/HomeController.java |   15 +
 .../superbiz/controller/PersonController.java   |  144 +
 .../main/java/org/superbiz/model/Address.java   |   57 +
 .../main/java/org/superbiz/model/Errors.java    |   34 +
 .../main/java/org/superbiz/model/Messages.java  |   23 +
 .../main/java/org/superbiz/model/Person.java    |  109 +
 .../superbiz/persistence/PersonProducer.java    |   25 +
 .../superbiz/persistence/PersonRepository.java  |   13 +
 .../src/main/resources/META-INF/beans.xml       |    7 +
 .../src/main/resources/META-INF/persistence.xml |   22 +
 .../src/main/webapp/WEB-INF/views/change.jsp    |  112 +
 .../src/main/webapp/WEB-INF/views/home.jsp      |   20 +
 .../src/main/webapp/WEB-INF/views/insert.jsp    |  109 +
 .../src/main/webapp/WEB-INF/views/list.jsp      |   72 +
 examples/mvc-cxf/src/main/webapp/index.jsp      |   11 +
 .../bootstrap/css/bootstrap-datepicker.css      |  471 ++
 .../resources/bootstrap/css/bootstrap-theme.css |  587 ++
 .../bootstrap/css/bootstrap-theme.css.map       |    1 +
 .../bootstrap/css/bootstrap-theme.min.css       |    6 +
 .../bootstrap/css/bootstrap-theme.min.css.map   |    1 +
 .../resources/bootstrap/css/bootstrap.css       | 6757 ++++++++++++++++++
 .../resources/bootstrap/css/bootstrap.css.map   |    1 +
 .../resources/bootstrap/css/bootstrap.min.css   |    6 +
 .../bootstrap/css/bootstrap.min.css.map         |    1 +
 .../fonts/glyphicons-halflings-regular.eot      |  Bin 0 -> 20127 bytes
 .../fonts/glyphicons-halflings-regular.svg      |  288 +
 .../fonts/glyphicons-halflings-regular.ttf      |  Bin 0 -> 45404 bytes
 .../fonts/glyphicons-halflings-regular.woff     |  Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2    |  Bin 0 -> 18028 bytes
 .../bootstrap/js/bootstrap-datepicker.js        | 2096 ++++++
 .../js/bootstrap-datepicker.pt-BR.min.js        |    1 +
 .../webapp/resources/bootstrap/js/bootstrap.js  | 2377 ++++++
 .../resources/bootstrap/js/bootstrap.min.js     |    7 +
 .../webapp/resources/bootstrap/js/jquery.min.js |    4 +
 .../main/webapp/resources/bootstrap/js/npm.js   |   13 +
 .../src/main/webapp/resources/images/tomee.png  |  Bin 0 -> 6217 bytes
 .../src/main/webapp/templates/footer.jsp        |   33 +
 .../mvc-cxf/src/main/webapp/templates/menu.jsp  |   36 +
 examples/pom.xml                                |    1 +
 42 files changed, 13625 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/README.md
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/README.md b/examples/mvc-cxf/README.md
new file mode 100644
index 0000000..0d09b4d
--- /dev/null
+++ b/examples/mvc-cxf/README.md
@@ -0,0 +1,23 @@
+index-group=Misc
+type=page
+status=published
+title=MVC-CXF
+~~~~~~
+
+
+Simple example of using [JSR-371](http://mvc-spec.org) together with Deltaspike-Data to do CRUD operations.
+
+<h2>Steps to run the example</h2>
+
+Build and start the demo:
+
+    mvn clean package
+
+Open:
+
+    http://localhost:8080/mvc-cxf
+
+<h2>Intro of Eclipse Krazo</h2>
+    
+[Eclipse Krazo](https://projects.eclipse.org/proposals/eclipse-krazo) is an implementation of action-based MVC specifiec by MVC 1.0 (JSR-371). 
+It builds on top of JAX-RS and currently contains support for RESTEasy, Jersey and CXF with a well-defined SPI for other imlementations.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/pom.xml
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/pom.xml b/examples/mvc-cxf/pom.xml
new file mode 100644
index 0000000..49001d8
--- /dev/null
+++ b/examples/mvc-cxf/pom.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.superbiz</groupId>
+  <artifactId>mvc-cxf</artifactId>
+  <packaging>war</packaging>
+
+  <name>mvc-cxf</name>
+  <description>OpenEJB :: Web Examples :: MVC 1.0 - Deltaspike</description>
+  <version>8.0.0-SNAPSHOT</version>
+  <url>http://tomee.apache.org</url>
+
+   <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <tomee.version>8.0.0-SNAPSHOT</tomee.version>
+    <version.deltaspike>1.9.0</version.deltaspike>
+    <version.ozark>1.0.0-m04</version.ozark>
+  </properties>
+
+  <build>
+    <finalName>mvc-cxf</finalName>
+    <plugins>
+      <plugin>
+       <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.5.1</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>3.1.0</version>
+      </plugin>
+    </plugins>
+  </build>
+
+  <repositories>
+    <repository>
+      <id>apache-m2-snapshot</id>
+      <name>Apache Snapshot Repository</name>
+      <url>https://repository.apache.org/content/groups/snapshots</url>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>javaee-api</artifactId>
+      <version>8.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.modules</groupId>
+      <artifactId>deltaspike-data-module-api</artifactId>
+      <version>${version.deltaspike}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.modules</groupId>
+      <artifactId>deltaspike-data-module-impl</artifactId>
+    <version>${version.deltaspike}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.deltaspike.cdictrl</groupId>
+      <artifactId>deltaspike-cdictrl-api</artifactId>
+      <version>${version.deltaspike}</version>
+    </dependency>
+
+    <!-- MVC 1.0(JSR 371) -->
+    <dependency>
+      <groupId>org.mvc-spec.ozark</groupId>
+      <artifactId>ozark-core</artifactId>
+      <version>${version.ozark}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.mvc-spec.ozark</groupId>
+      <artifactId>ozark-cxf</artifactId>
+      <version>${version.ozark}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>jstl</artifactId>
+      <version>1.2</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.eclipse.persistence</groupId>
+      <artifactId>eclipselink</artifactId>
+      <version>2.6.3</version>     
+    </dependency>
+  </dependencies>
+
+  <!--
+  This section allows you to configure where to publish libraries for sharing.
+  It is not required and may be deleted.  For more information see:
+  http://maven.apache.org/plugins/maven-deploy-plugin/
+  -->
+  <distributionManagement>
+    <repository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/repo/</url>
+    </repository>
+    <snapshotRepository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/snapshot-repo/</url>
+    </snapshotRepository>
+  </distributionManagement>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/application/MVCApplication.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/application/MVCApplication.java b/examples/mvc-cxf/src/main/java/org/superbiz/application/MVCApplication.java
new file mode 100644
index 0000000..1639854
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/application/MVCApplication.java
@@ -0,0 +1,7 @@
+package org.superbiz.application;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@ApplicationPath("app")
+public class MVCApplication extends Application { }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/controller/HomeController.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/controller/HomeController.java b/examples/mvc-cxf/src/main/java/org/superbiz/controller/HomeController.java
new file mode 100644
index 0000000..e8a96be
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/controller/HomeController.java
@@ -0,0 +1,15 @@
+package org.superbiz.controller;
+
+import javax.mvc.Controller;
+import javax.mvc.View;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+@Controller
+@Path("home")
+public class HomeController {
+
+	@GET
+	@View("home.jsp")
+	public void homePage() {}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/controller/PersonController.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/controller/PersonController.java b/examples/mvc-cxf/src/main/java/org/superbiz/controller/PersonController.java
new file mode 100644
index 0000000..0f8ff5a
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/controller/PersonController.java
@@ -0,0 +1,144 @@
+package org.superbiz.controller;
+
+import static java.util.stream.Collectors.toList;
+import static javax.ws.rs.core.Response.Status.NOT_FOUND;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Optional;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+import javax.mvc.Models;
+import javax.mvc.Controller;
+import javax.mvc.View;
+import javax.mvc.binding.BindingResult;
+import javax.mvc.binding.ValidationError;
+import javax.validation.Valid;
+import javax.validation.executable.ExecutableType;
+import javax.validation.executable.ValidateOnExecution;
+import javax.ws.rs.BeanParam;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.WebApplicationException;
+
+
+import org.mvcspec.ozark.engine.Viewable;
+import org.superbiz.model.Errors;
+import org.superbiz.model.Messages;
+import org.superbiz.model.Person;
+import org.superbiz.persistence.PersonRepository;
+
+
+
+@Controller
+@Path("mvc")
+public class PersonController {
+
+    private static final Supplier<WebApplicationException> NOT_FOUND_EXCEPTION = () -> new WebApplicationException(NOT_FOUND);
+    
+    @Inject
+    private Models models;
+    
+    @Inject
+    private Messages message;
+    
+    @Inject 
+    private Errors erros;
+    
+    @Inject
+    private BindingResult bindingResult;
+
+    @Inject
+    private PersonRepository repository;
+
+    @GET
+    @Path("new")
+    public Viewable newElement() {
+    	this.models.put("countries", getCountries());
+        return new Viewable("insert.jsp");
+    }
+
+    @GET
+    @Path("show")
+    @View("list.jsp")
+    public void list() {
+        this.models.put("list", repository.findAll());
+    }
+
+    @POST
+    @Path("add")
+    @ValidateOnExecution(type=ExecutableType.NONE)
+    public String add(@Valid @BeanParam Person person) {
+    	if (bindingResult.isFailed()) {
+
+    		this.getErros();
+    		this.models.put("countries", getCountries());
+    		this.models.put("person", person);
+    		return "insert.jsp";
+
+    	}
+        repository.save(person);
+        message.setMessageRedirect("The " + person.getName() + " was successfully registered ! ");
+        return "redirect:mvc/show";
+    }
+
+    @POST
+    @Path("update")
+    @ValidateOnExecution(type=ExecutableType.NONE)
+    public String update(@Valid @BeanParam Person person) {
+    	if (bindingResult.isFailed()) { 
+
+    		this.getErros();
+    		this.models.put("countries", getCountries());
+    		this.models.put("person", person);
+    		return "change.jsp";
+    		
+    	}
+        repository.save(person);
+        message.setMessageRedirect("The " + person.getName() + " was changed successfully ! ");
+        return "redirect:mvc/show";
+    }
+
+    @GET
+    @Path("update/{id}")
+    public Viewable update(@PathParam("id") Long id) {
+
+        Optional<Person> person = repository.findById(id);
+        this.models.put("person", person.orElseThrow(NOT_FOUND_EXCEPTION));
+        this.models.put("countries", getCountries());
+        return new Viewable("change.jsp", models);
+    }
+
+    @GET
+    @Path("remove/{id}")
+    public String delete(@PathParam("id") Long id) {
+        Optional<Person> person = repository.findById(id);
+        repository.remove(person.orElseThrow(NOT_FOUND_EXCEPTION));
+        message.setMessageRedirect("The register was successfully Excluded ! ");
+        return "redirect:mvc/show";
+    }
+
+    private String getCountryName(String country) {
+    	return new Locale(country,country).getDisplayCountry(Locale.ENGLISH);
+    }
+
+    private List<String> getCountries() {
+		return Arrays.stream(Locale.getISOCountries())
+					 .map(country -> getCountryName(country))
+					 .sorted((a, b) -> a.compareTo(b))
+					 .collect(Collectors.toList());
+    }
+    
+    private void getErros() {
+    	erros.setErrors(
+                bindingResult.getAllErrors().stream()
+                .collect(toList()));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/model/Address.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/model/Address.java b/examples/mvc-cxf/src/main/java/org/superbiz/model/Address.java
new file mode 100644
index 0000000..a53ba2c
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/model/Address.java
@@ -0,0 +1,57 @@
+package org.superbiz.model;
+
+import java.util.Objects;
+
+import javax.mvc.binding.MvcBinding;
+import javax.persistence.Embeddable;
+import javax.validation.constraints.NotEmpty;
+import javax.ws.rs.FormParam;
+
+@Embeddable
+public class Address {
+
+    @FormParam("country")
+    @NotEmpty(message="can not be empty")
+    @MvcBinding
+    private String country;
+
+    @FormParam("state")
+    @NotEmpty(message="can not be empty")
+    @MvcBinding
+    private String state;
+
+    public String getCountry() {
+        return country;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Address address = (Address) o;
+        return Objects.equals(country, address.country) &&
+                Objects.equals(state, address.state);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(country, state);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("Address{");
+        sb.append("country='").append(country).append('\'');
+        sb.append(", state='").append(state).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/model/Errors.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/model/Errors.java b/examples/mvc-cxf/src/main/java/org/superbiz/model/Errors.java
new file mode 100644
index 0000000..1e37d40
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/model/Errors.java
@@ -0,0 +1,34 @@
+package org.superbiz.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Named;
+import javax.mvc.binding.ParamError;
+
+@Named("error")
+@RequestScoped
+public class Errors {
+
+	private List<ParamError> errors = new ArrayList<>();
+
+    public void setErrors(List<ParamError> messages) {
+        this.errors = messages;
+    }
+
+    public String getErrors() {
+        return errors.stream()
+                .map(ParamError::getMessage)
+                .collect(Collectors.joining("<br>"));
+    }
+
+    public String getMessage(String param) {
+        return errors.stream()
+                .filter(v -> v.getParamName().equals(param))
+                .map(ParamError::getMessage)
+                .findFirst()
+                .orElse("");
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/model/Messages.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/model/Messages.java b/examples/mvc-cxf/src/main/java/org/superbiz/model/Messages.java
new file mode 100644
index 0000000..0344c31
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/model/Messages.java
@@ -0,0 +1,23 @@
+package org.superbiz.model;
+
+import java.io.Serializable;
+
+import javax.inject.Named;
+import javax.mvc.RedirectScoped;
+
+@Named("message")
+@RedirectScoped
+public class Messages implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private String messageRedirect;
+
+	public String getMessageRedirect() {
+		return messageRedirect;
+	}
+
+	public void setMessageRedirect(String messageRedirect) {
+		this.messageRedirect = messageRedirect;
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/model/Person.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/model/Person.java b/examples/mvc-cxf/src/main/java/org/superbiz/model/Person.java
new file mode 100644
index 0000000..a016c31
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/model/Person.java
@@ -0,0 +1,109 @@
+package org.superbiz.model;
+
+import java.util.Objects;
+
+import javax.mvc.binding.MvcBinding;
+import javax.persistence.Column;
+import javax.persistence.Embedded;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.ws.rs.BeanParam;
+import javax.ws.rs.FormParam;
+
+@Entity
+public class Person {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    @FormParam("id")
+    private Long id;
+
+    @FormParam("name")
+    @NotEmpty(message="can not be empty")
+    @Size(min = 1, max = 20)
+    @MvcBinding
+    private String name;
+
+    @FormParam("age")
+    @MvcBinding
+    @Min(18)
+    private int age;
+
+    @BeanParam
+    @Valid
+    @Embedded
+    private Address address;
+
+    @FormParam("server")
+    @NotNull
+    @MvcBinding
+    private String server;
+
+    @FormParam("description")
+    @Column
+    @NotEmpty(message="can not be empty")
+    @MvcBinding
+    @Size(min = 10, max = 20)
+    private String description;
+
+    public Long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public Address getAddress() {
+        return address;
+    }
+
+    public String getServer() {
+        return server;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Person person = (Person) o;
+        return Objects.equals(id, person.id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(id);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("Person{");
+        sb.append("id='").append(id).append('\'');
+        sb.append(", name='").append(name).append('\'');
+        sb.append(", age=").append(age);
+        sb.append(", address=").append(address);
+        sb.append(", server='").append(server).append('\'');
+        sb.append(", description='").append(description).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonProducer.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonProducer.java b/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonProducer.java
new file mode 100644
index 0000000..7a0e28e
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonProducer.java
@@ -0,0 +1,25 @@
+package org.superbiz.persistence;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Disposes;
+import javax.enterprise.inject.Produces;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.PersistenceUnit;
+
+@ApplicationScoped
+public class PersonProducer {
+
+    @PersistenceUnit
+    private EntityManagerFactory emf;
+
+    @Produces
+    @ApplicationScoped
+    public EntityManager createEntityManager() {
+        return emf.createEntityManager();
+    }
+
+    public void closeEntityManager(@Disposes EntityManager manager) {
+        if (manager.isOpen()) { manager.close(); }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonRepository.java
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonRepository.java b/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonRepository.java
new file mode 100644
index 0000000..3d96a45
--- /dev/null
+++ b/examples/mvc-cxf/src/main/java/org/superbiz/persistence/PersonRepository.java
@@ -0,0 +1,13 @@
+package org.superbiz.persistence;
+
+import java.util.Optional;
+
+import org.apache.deltaspike.data.api.EntityRepository;
+import org.apache.deltaspike.data.api.Repository;
+import org.superbiz.model.Person;
+
+@Repository
+public interface PersonRepository extends EntityRepository<Person, Long> { 
+
+    Optional<Person> findById(Long id);
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/resources/META-INF/beans.xml
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/resources/META-INF/beans.xml b/examples/mvc-cxf/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..8ae1a57
--- /dev/null
+++ b/examples/mvc-cxf/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
+       bean-discovery-mode="all"
+       version="2.0">
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/resources/META-INF/persistence.xml
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/resources/META-INF/persistence.xml b/examples/mvc-cxf/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..116c21d
--- /dev/null
+++ b/examples/mvc-cxf/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             version="2.0"
+             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
+             http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
+
+    <persistence-unit name="mvc-demo" transaction-type="RESOURCE_LOCAL">
+
+      <non-jta-data-source>mvc-demo</non-jta-data-source>
+
+      <class>org.superbiz.model.Address</class>
+      <class>org.superbiz.model.Person</class>
+         
+      <properties>
+          <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.H2Platform"/>
+          <property name="eclipselink.ddl-generation" value="create-tables"/>
+          <property name="eclipselink.ddl-generation.output-mode" value="database"/>
+      </properties>
+    </persistence-unit>
+
+</persistence>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/WEB-INF/views/change.jsp
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/WEB-INF/views/change.jsp b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/change.jsp
new file mode 100644
index 0000000..dde3417
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/change.jsp
@@ -0,0 +1,112 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>MVC 1.0 DEMO</title>
+</head>
+<body>
+
+<div class="container">
+    <c:if test="${error.errors.length() != 0}">
+    <div class="row">
+        <div class="col-md-12">
+            <p class="alert alert-danger">${error.errors}</p>
+        </div>
+    </div>
+    </c:if>
+    <div class="row">
+        <div class="col-md-4 col-md-offset-4">
+            <form action="${mvc.basePath}/mvc/update" method="post">
+                <h2>Change Registration</h2>
+                <div class="form-group">
+                
+                <input type="text" name="id" value="${person.id}" hidden="true">
+             
+                    <label for="name">Name:</label>
+                    <input id="name" name="name" class="form-control" autofocus value="${person.name}">
+						<c:if test="${mvc.encoders.html(error.getMessage('name').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("name"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                <div class="form-group">
+                    <label for="age">Age:</label>
+                    <input type="number" id="age" name="age" class="form-control" value="${person.age}">
+                    <c:if test="${mvc.encoders.html(error.getMessage('age').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("age"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                
+                <div class="form-group">
+                    <label for="state">State:</label>
+                    <input type="text" id="state" name="state" class="form-control" value="${person.address.state}">
+                    <c:if test="${mvc.encoders.html(error.getMessage('state').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("state"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                <div class="form-group">
+                	<label for="state">Application Server:</label> <br />
+                	<label class="radio-inline"><input type="radio" name="server" value="TomEE" class="form-check-input ">TomEE</label>
+					<label class="radio-inline"><input type="radio" name="server" value="Wildfly" class="form-check-input"/>Wildfly</label>
+					<label class="radio-inline"><input type="radio" name="server" value="Payara" class="form-check-input"/>Payara</label>
+					<c:if test="${mvc.encoders.html(error.getMessage('server').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("server"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+					<div class="form-group">
+						<label for="country">Country:</label> 
+						
+						<select id="country" name="country" class="form-control">
+							<option value="${person.address.country}">${person.address.country}</option>
+							<c:forEach var="countries" items="${countries}">
+								<option>${countries}</option>
+							</c:forEach>
+						</select>
+						<c:if test="${mvc.encoders.html(error.getMessage('country').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("country"))}</p>
+								</div>
+							</div>
+						</c:if>
+					</div>
+					<div class="form-group">
+                    <label for="description">Description:</label>
+                    <textarea type="" id="description" name="description" class="form-control">${person.description}</textarea>
+                    <c:if test="${mvc.encoders.html(error.getMessage('description').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("description"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                <button class="btn btn-primary btn-block" type="submit">Register</button>
+            </form>
+        </div>
+    </div>
+</div>
+<br />
+<br />
+<jsp:include page="/templates/footer.jsp"></jsp:include>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/WEB-INF/views/home.jsp
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/WEB-INF/views/home.jsp b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/home.jsp
new file mode 100644
index 0000000..0faca4d
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/home.jsp
@@ -0,0 +1,20 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>MVC 1.0 DEMO</title>
+</head>
+<body>
+	<jsp:include page="/templates/menu.jsp"></jsp:include>
+
+	<h1 align="center">Be welcome!</h1>
+
+	<div align="center">
+		<img src="${pageContext.request.contextPath}/resources/images/tomee.png" class="img-responsive"/>
+	</div>
+	<br />
+	<br />
+	<jsp:include page="/templates/footer.jsp"></jsp:include>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/WEB-INF/views/insert.jsp
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/WEB-INF/views/insert.jsp b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/insert.jsp
new file mode 100644
index 0000000..6d64357
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/insert.jsp
@@ -0,0 +1,109 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>MVC 1.0 DEMO</title>
+</head>
+<body>
+
+<div class="container">
+    <c:if test="${error.errors.length() != 0}">
+    <div class="row">
+        <div class="col-md-12">
+            <p class="alert alert-danger">${error.errors}</p>
+        </div>
+    </div>
+    </c:if>
+    <div class="row">
+        <div class="col-md-4 col-md-offset-4">
+            <form action="add" method="post">
+                <h2>New register</h2>
+                <div class="form-group">
+                    <label for="name">Name:</label>
+                    <input id="name" name="name" class="form-control" autofocus value="${person.name}">
+						<c:if test="${mvc.encoders.html(error.getMessage('name').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("name"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                <div class="form-group">
+                    <label for="age">Age:</label>
+                    <input type="number" id="age" name="age" class="form-control" value="${person.age}">
+                    <c:if test="${mvc.encoders.html(error.getMessage('age').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("age"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                
+                <div class="form-group">
+                    <label for="state">State:</label>
+                    <input type="text" id="state" name="state" class="form-control" value="${person.address.state}">
+                    <c:if test="${mvc.encoders.html(error.getMessage('state').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("state"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                 <div class="form-group">
+                	<label for="state">Application Server:</label> <br />
+                	<label class="radio-inline"><input type="radio" name="server" value="TomEE" class="form-check-input ">TomEE</label>
+					<label class="radio-inline"><input type="radio" name="server" value="Wildfly" class="form-check-input"/>Wildfly</label>
+					<label class="radio-inline"><input type="radio" name="server" value="Payara" class="form-check-input"/>Payara</label>
+					<c:if test="${mvc.encoders.html(error.getMessage('server').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("server"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+					<div class="form-group">
+						<label for="country">Country:</label> 
+						
+						<select id="country" name="country" class="form-control">
+							<option value="${person.address.country}">${person.address.country}</option>
+							<c:forEach var="countries" items="${countries}">
+								<option>${countries}</option>
+							</c:forEach>
+						</select>
+						<c:if test="${mvc.encoders.html(error.getMessage('country').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("country"))}</p>
+								</div>
+							</div>
+						</c:if>
+					</div>
+					<div class="form-group">
+                    <label for="description">Description:</label>
+                    <textarea type="" id="description" name="description" class="form-control">${person.description}</textarea>
+                    <c:if test="${mvc.encoders.html(error.getMessage('description').length() != 0)}">
+							<div class="row">
+								<div class="col-md-12">
+									<p class="alert alert-danger">${mvc.encoders.html(error.getMessage("description"))}</p>
+								</div>
+							</div>
+						</c:if>
+                </div>
+                <button class="btn btn-primary btn-block" type="submit">Register</button>
+            </form>
+        </div>
+    </div>
+</div>
+<br />
+<br />
+<jsp:include page="/templates/footer.jsp"></jsp:include>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/WEB-INF/views/list.jsp
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/WEB-INF/views/list.jsp b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/list.jsp
new file mode 100644
index 0000000..a0389c1
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/WEB-INF/views/list.jsp
@@ -0,0 +1,72 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+         pageEncoding="UTF-8" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    <title>MVC 1.0 DEMO</title>
+</head>
+<body>
+
+<jsp:include page="/templates/menu.jsp"></jsp:include>
+
+
+<div class="container">
+    <c:if test="${message.messageRedirect != null}">
+    <div class="row">
+        <div class="col-md-12">
+            <p class="alert alert-success" id="success-alert">${message.messageRedirect}</p>
+        </div>
+    </div>
+    </c:if>
+    <div class="row">
+	<a class="btn btn-primary" href="new">Add Registres</a>
+	<hr />
+	<table id="tableData" class="table table-bordered table-hover">
+		<thead>
+			<tr>
+				<th>Name</th>
+		        <th>Age</th>
+		        <th>Country</th>
+		        <th>State</th>
+		        <th>Application Server</th>
+		        <th>Description</th>
+		        <th></th>
+		        <th></th>
+			</tr>
+		</thead>
+		<tbody>
+			<tr>
+			 <c:forEach items="${list}" var="person">
+				<td>${person.name}</td>
+	            <td>${person.age}</td>
+	            <td>${person.address.country}</td>
+	            <td>${person.address.state}</td>
+	            <td>${person.server}</td>
+	            <td>${person.description}</td>
+				<td><a href="update/${person.id}" class="btn btn-info" >Edit</a></td>
+				<td><a href="remove/${person.id}"><span class="glyphicon glyphicon-trash"></span> Delete </a></td>
+			</tr>
+			 </c:forEach>
+		</tbody>
+	</table>
+</div>
+</div>
+
+	<br />
+	<br />
+	<script type="text/javascript">
+
+		$(document).ready(function() {
+			$("#success-alert").hide();
+			$().ready(function showAlert() {
+				$("#success-alert").fadeTo(2000, 500).slideUp(500, function() {
+					$("#success-alert").slideUp(500);
+				});
+			});
+		});
+	</script>
+	<jsp:include page="/templates/footer.jsp"></jsp:include>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/index.jsp
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/index.jsp b/examples/mvc-cxf/src/main/webapp/index.jsp
new file mode 100644
index 0000000..980157d
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/index.jsp
@@ -0,0 +1,11 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<title>MVC 1.0 DEMO</title>
+<meta http-equiv="refresh" content="1;url=app/home">
+</head>
+<body>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-datepicker.css
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-datepicker.css b/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-datepicker.css
new file mode 100644
index 0000000..a6c8899
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-datepicker.css
@@ -0,0 +1,471 @@
+/*!
+ * Datepicker for Bootstrap v1.6.4 (https://github.com/eternicode/bootstrap-datepicker)
+ *
+ * Copyright 2012 Stefan Petre
+ * Improvements by Andrew Rowls
+ * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
+ */
+.datepicker {
+  padding: 4px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  direction: ltr;
+}
+.datepicker-inline {
+  width: 220px;
+}
+.datepicker.datepicker-rtl {
+  direction: rtl;
+}
+.datepicker.datepicker-rtl table tr td span {
+  float: right;
+}
+.datepicker-dropdown {
+  top: 0;
+  left: 0;
+}
+.datepicker-dropdown:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #999;
+  border-top: 0;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  position: absolute;
+}
+.datepicker-dropdown:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #fff;
+  border-top: 0;
+  position: absolute;
+}
+.datepicker-dropdown.datepicker-orient-left:before {
+  left: 6px;
+}
+.datepicker-dropdown.datepicker-orient-left:after {
+  left: 7px;
+}
+.datepicker-dropdown.datepicker-orient-right:before {
+  right: 6px;
+}
+.datepicker-dropdown.datepicker-orient-right:after {
+  right: 7px;
+}
+.datepicker-dropdown.datepicker-orient-bottom:before {
+  top: -7px;
+}
+.datepicker-dropdown.datepicker-orient-bottom:after {
+  top: -6px;
+}
+.datepicker-dropdown.datepicker-orient-top:before {
+  bottom: -7px;
+  border-bottom: 0;
+  border-top: 7px solid #999;
+}
+.datepicker-dropdown.datepicker-orient-top:after {
+  bottom: -6px;
+  border-bottom: 0;
+  border-top: 6px solid #fff;
+}
+.datepicker table {
+  margin: 0;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.datepicker td,
+.datepicker th {
+  text-align: center;
+  width: 20px;
+  height: 20px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  border: none;
+}
+.table-striped .datepicker table tr td,
+.table-striped .datepicker table tr th {
+  background-color: transparent;
+}
+.datepicker table tr td.day:hover,
+.datepicker table tr td.day.focused {
+  background: #eee;
+  cursor: pointer;
+}
+.datepicker table tr td.old,
+.datepicker table tr td.new {
+  color: #999;
+}
+.datepicker table tr td.disabled,
+.datepicker table tr td.disabled:hover {
+  background: none;
+  color: #999;
+  cursor: default;
+}
+.datepicker table tr td.highlighted {
+  background: #d9edf7;
+  border-radius: 0;
+}
+.datepicker table tr td.today,
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today.disabled:hover {
+  background-color: #fde19a;
+  background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a);
+  background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
+  background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a);
+  background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a);
+  background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
+  border-color: #fdf59a #fdf59a #fbed50;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  color: #000;
+}
+.datepicker table tr td.today:hover,
+.datepicker table tr td.today:hover:hover,
+.datepicker table tr td.today.disabled:hover,
+.datepicker table tr td.today.disabled:hover:hover,
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active,
+.datepicker table tr td.today.disabled,
+.datepicker table tr td.today:hover.disabled,
+.datepicker table tr td.today.disabled.disabled,
+.datepicker table tr td.today.disabled:hover.disabled,
+.datepicker table tr td.today[disabled],
+.datepicker table tr td.today:hover[disabled],
+.datepicker table tr td.today.disabled[disabled],
+.datepicker table tr td.today.disabled:hover[disabled] {
+  background-color: #fdf59a;
+}
+.datepicker table tr td.today:active,
+.datepicker table tr td.today:hover:active,
+.datepicker table tr td.today.disabled:active,
+.datepicker table tr td.today.disabled:hover:active,
+.datepicker table tr td.today.active,
+.datepicker table tr td.today:hover.active,
+.datepicker table tr td.today.disabled.active,
+.datepicker table tr td.today.disabled:hover.active {
+  background-color: #fbf069 \9;
+}
+.datepicker table tr td.today:hover:hover {
+  color: #000;
+}
+.datepicker table tr td.today.active:hover {
+  color: #fff;
+}
+.datepicker table tr td.range,
+.datepicker table tr td.range:hover,
+.datepicker table tr td.range.disabled,
+.datepicker table tr td.range.disabled:hover {
+  background: #eee;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.datepicker table tr td.range.today,
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today.disabled:hover {
+  background-color: #f3d17a;
+  background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a);
+  background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
+  background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a);
+  background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a);
+  background-image: linear-gradient(to bottom, #f3c17a, #f3e97a);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
+  border-color: #f3e97a #f3e97a #edde34;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.datepicker table tr td.range.today:hover,
+.datepicker table tr td.range.today:hover:hover,
+.datepicker table tr td.range.today.disabled:hover,
+.datepicker table tr td.range.today.disabled:hover:hover,
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active,
+.datepicker table tr td.range.today.disabled,
+.datepicker table tr td.range.today:hover.disabled,
+.datepicker table tr td.range.today.disabled.disabled,
+.datepicker table tr td.range.today.disabled:hover.disabled,
+.datepicker table tr td.range.today[disabled],
+.datepicker table tr td.range.today:hover[disabled],
+.datepicker table tr td.range.today.disabled[disabled],
+.datepicker table tr td.range.today.disabled:hover[disabled] {
+  background-color: #f3e97a;
+}
+.datepicker table tr td.range.today:active,
+.datepicker table tr td.range.today:hover:active,
+.datepicker table tr td.range.today.disabled:active,
+.datepicker table tr td.range.today.disabled:hover:active,
+.datepicker table tr td.range.today.active,
+.datepicker table tr td.range.today:hover.active,
+.datepicker table tr td.range.today.disabled.active,
+.datepicker table tr td.range.today.disabled:hover.active {
+  background-color: #efe24b \9;
+}
+.datepicker table tr td.selected,
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected.disabled:hover {
+  background-color: #9e9e9e;
+  background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080);
+  background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
+  background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080);
+  background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080);
+  background-image: linear-gradient(to bottom, #b3b3b3, #808080);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
+  border-color: #808080 #808080 #595959;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  color: #fff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.selected:hover,
+.datepicker table tr td.selected:hover:hover,
+.datepicker table tr td.selected.disabled:hover,
+.datepicker table tr td.selected.disabled:hover:hover,
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active,
+.datepicker table tr td.selected.disabled,
+.datepicker table tr td.selected:hover.disabled,
+.datepicker table tr td.selected.disabled.disabled,
+.datepicker table tr td.selected.disabled:hover.disabled,
+.datepicker table tr td.selected[disabled],
+.datepicker table tr td.selected:hover[disabled],
+.datepicker table tr td.selected.disabled[disabled],
+.datepicker table tr td.selected.disabled:hover[disabled] {
+  background-color: #808080;
+}
+.datepicker table tr td.selected:active,
+.datepicker table tr td.selected:hover:active,
+.datepicker table tr td.selected.disabled:active,
+.datepicker table tr td.selected.disabled:hover:active,
+.datepicker table tr td.selected.active,
+.datepicker table tr td.selected:hover.active,
+.datepicker table tr td.selected.disabled.active,
+.datepicker table tr td.selected.disabled:hover.active {
+  background-color: #666666 \9;
+}
+.datepicker table tr td.active,
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active.disabled:hover {
+  background-color: #006dcc;
+  background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
+  background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: linear-gradient(to bottom, #08c, #0044cc);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
+  border-color: #0044cc #0044cc #002a80;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  color: #fff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td.active:hover,
+.datepicker table tr td.active:hover:hover,
+.datepicker table tr td.active.disabled:hover,
+.datepicker table tr td.active.disabled:hover:hover,
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active,
+.datepicker table tr td.active.disabled,
+.datepicker table tr td.active:hover.disabled,
+.datepicker table tr td.active.disabled.disabled,
+.datepicker table tr td.active.disabled:hover.disabled,
+.datepicker table tr td.active[disabled],
+.datepicker table tr td.active:hover[disabled],
+.datepicker table tr td.active.disabled[disabled],
+.datepicker table tr td.active.disabled:hover[disabled] {
+  background-color: #0044cc;
+}
+.datepicker table tr td.active:active,
+.datepicker table tr td.active:hover:active,
+.datepicker table tr td.active.disabled:active,
+.datepicker table tr td.active.disabled:hover:active,
+.datepicker table tr td.active.active,
+.datepicker table tr td.active:hover.active,
+.datepicker table tr td.active.disabled.active,
+.datepicker table tr td.active.disabled:hover.active {
+  background-color: #003399 \9;
+}
+.datepicker table tr td span {
+  display: block;
+  width: 23%;
+  height: 54px;
+  line-height: 54px;
+  float: left;
+  margin: 1%;
+  cursor: pointer;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.datepicker table tr td span:hover,
+.datepicker table tr td span.focused {
+  background: #eee;
+}
+.datepicker table tr td span.disabled,
+.datepicker table tr td span.disabled:hover {
+  background: none;
+  color: #999;
+  cursor: default;
+}
+.datepicker table tr td span.active,
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active.disabled:hover {
+  background-color: #006dcc;
+  background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
+  background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
+  background-image: linear-gradient(to bottom, #08c, #0044cc);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
+  border-color: #0044cc #0044cc #002a80;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+  color: #fff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.datepicker table tr td span.active:hover,
+.datepicker table tr td span.active:hover:hover,
+.datepicker table tr td span.active.disabled:hover,
+.datepicker table tr td span.active.disabled:hover:hover,
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active,
+.datepicker table tr td span.active.disabled,
+.datepicker table tr td span.active:hover.disabled,
+.datepicker table tr td span.active.disabled.disabled,
+.datepicker table tr td span.active.disabled:hover.disabled,
+.datepicker table tr td span.active[disabled],
+.datepicker table tr td span.active:hover[disabled],
+.datepicker table tr td span.active.disabled[disabled],
+.datepicker table tr td span.active.disabled:hover[disabled] {
+  background-color: #0044cc;
+}
+.datepicker table tr td span.active:active,
+.datepicker table tr td span.active:hover:active,
+.datepicker table tr td span.active.disabled:active,
+.datepicker table tr td span.active.disabled:hover:active,
+.datepicker table tr td span.active.active,
+.datepicker table tr td span.active:hover.active,
+.datepicker table tr td span.active.disabled.active,
+.datepicker table tr td span.active.disabled:hover.active {
+  background-color: #003399 \9;
+}
+.datepicker table tr td span.old,
+.datepicker table tr td span.new {
+  color: #999;
+}
+.datepicker .datepicker-switch {
+  width: 145px;
+}
+.datepicker .datepicker-switch,
+.datepicker .prev,
+.datepicker .next,
+.datepicker tfoot tr th {
+  cursor: pointer;
+}
+.datepicker .datepicker-switch:hover,
+.datepicker .prev:hover,
+.datepicker .next:hover,
+.datepicker tfoot tr th:hover {
+  background: #eee;
+}
+.datepicker .cw {
+  font-size: 10px;
+  width: 12px;
+  padding: 0 2px 0 5px;
+  vertical-align: middle;
+}
+.input-append.date .add-on,
+.input-prepend.date .add-on {
+  cursor: pointer;
+}
+.input-append.date .add-on i,
+.input-prepend.date .add-on i {
+  margin-top: 3px;
+}
+.input-daterange input {
+  text-align: center;
+}
+.input-daterange input:first-child {
+  -webkit-border-radius: 3px 0 0 3px;
+  -moz-border-radius: 3px 0 0 3px;
+  border-radius: 3px 0 0 3px;
+}
+.input-daterange input:last-child {
+  -webkit-border-radius: 0 3px 3px 0;
+  -moz-border-radius: 0 3px 3px 0;
+  border-radius: 0 3px 3px 0;
+}
+.input-daterange .add-on {
+  display: inline-block;
+  width: auto;
+  min-width: 16px;
+  height: 18px;
+  padding: 4px 5px;
+  font-weight: normal;
+  line-height: 18px;
+  text-align: center;
+  text-shadow: 0 1px 0 #fff;
+  vertical-align: middle;
+  background-color: #eee;
+  border: 1px solid #ccc;
+  margin-left: -5px;
+  margin-right: -5px;
+}
+/*# sourceMappingURL=bootstrap-datepicker.css.map */
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/58589f74/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-theme.css
----------------------------------------------------------------------
diff --git a/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-theme.css b/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-theme.css
new file mode 100644
index 0000000..31d8882
--- /dev/null
+++ b/examples/mvc-cxf/src/main/webapp/resources/bootstrap/css/bootstrap-theme.css
@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+  text-shadow: none;
+}
+.btn:active,
+.btn.active {
+  background-image: none;
+}
+.btn-default {
+  text-shadow: 0 1px 0 #fff;
+  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #dbdbdb;
+  border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+  background-color: #e0e0e0;
+  background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+  background-color: #e0e0e0;
+  border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+  background-color: #e0e0e0;
+  background-image: none;
+}
+.btn-primary {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+  background-color: #265a88;
+  background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #265a88;
+  border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+  background-color: #265a88;
+  background-image: none;
+}
+.btn-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+  background-color: #419641;
+  background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+  background-color: #419641;
+  border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+  background-color: #419641;
+  background-image: none;
+}
+.btn-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+  background-color: #2aabd2;
+  background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+  background-color: #2aabd2;
+  border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+  background-color: #2aabd2;
+  background-image: none;
+}
+.btn-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+  background-color: #eb9316;
+  background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #eb9316;
+  border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+  background-color: #eb9316;
+  background-image: none;
+}
+.btn-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+  background-color: #c12e2a;
+  background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #c12e2a;
+  border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+  background-color: #c12e2a;
+  background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  background-color: #e8e8e8;
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  background-color: #2e6da4;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.navbar-default {
+  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  background-repeat: repeat-x;
+  border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+  background-repeat: repeat-x;
+  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  border-radius: 0;
+}
+@media (max-width: 767px) {
+  .navbar .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+    background-repeat: repeat-x;
+  }
+}
+.alert {
+  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #b2dba1;
+}
+.alert-info {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #9acfea;
+}
+.alert-warning {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #f5e79e;
+}
+.alert-danger {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dca7a7;
+}
+.progress {
+  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-success {
+  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-info {
+  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-warning {
+  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-danger {
+  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+  background-repeat: repeat-x;
+}
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  text-shadow: 0 -1px 0 #286090;
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+  text-shadow: none;
+}
+.panel {
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+  background-repeat: repeat-x;
+}
+.well {
+  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+  background-repeat: repeat-x;
+  border-color: #dcdcdc;
+  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */