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 */