diff --git a/.gitignore b/.gitignore index 30f0f0cbc2..210807d09e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ # Maven log/ target/ + +spring-openid/src/main/resources/application.properties diff --git a/.project b/.project index 2d04570bfe..594b00d611 100644 --- a/.project +++ b/.project @@ -1,11 +1,17 @@ - parent - - - - - - - + parent-modules + + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + diff --git a/apache-fop/pom.xml b/apache-fop/pom.xml index 95505f9374..658d567a90 100644 --- a/apache-fop/pom.xml +++ b/apache-fop/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung apache-fop 0.1-SNAPSHOT @@ -142,16 +142,12 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.8.Final - 5.1.34 + 4.3.11.Final + 5.1.38 - 2.5.5 + 2.7.2 1.7.9 @@ -161,7 +157,7 @@ 5.1.3.Final - 17.0 + 19.0 3.3.2 @@ -172,14 +168,14 @@ 4.4 4.4 - 2.4.0 + 2.9.0 - 3.2 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.12 + 1.4.18 diff --git a/core-java-8/README.md b/core-java-8/README.md index 8bef3a1be0..b03d24c34e 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -8,3 +8,4 @@ - [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) - [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) +- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial) diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 07d3bcd146..bc1e402b4d 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -1,10 +1,10 @@ 4.0.0 - org.baeldung - spring-rest + com.baeldung + core-java8 0.1-SNAPSHOT - spring-rest + core-java8 @@ -114,9 +114,9 @@ 1.10.19 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 diff --git a/core-java/pom.xml b/core-java/pom.xml index b439b41f22..e3a9043b09 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,8 +1,8 @@ 4.0.0 - org.baeldung + com.baeldung core-java - 0.1-SNAPSHOT + 0.1.0-SNAPSHOT core-java @@ -143,16 +143,12 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 - 2.5.5 + 2.7.2 1.7.13 @@ -173,14 +169,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/core-java/src/main/webapp/WEB-INF/api-servlet.xml b/core-java/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4c74be8912..0000000000 --- a/core-java/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/core-java/src/main/webapp/WEB-INF/web.xml b/core-java/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/core-java/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/gson-jackson-performance/.classpath b/gson-jackson-performance/.classpath new file mode 100644 index 0000000000..19b2ff18be --- /dev/null +++ b/gson-jackson-performance/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/gson-jackson-performance/.project b/gson-jackson-performance/.project new file mode 100644 index 0000000000..b3b5ccad87 --- /dev/null +++ b/gson-jackson-performance/.project @@ -0,0 +1,14 @@ + + + gson-jackson-performance + NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse. + + + + org.eclipse.jdt.core.javabuilder + + + + org.eclipse.jdt.core.javanature + + \ No newline at end of file diff --git a/gson-jackson-performance/README.md b/gson-jackson-performance/README.md new file mode 100644 index 0000000000..5b08f6cdec --- /dev/null +++ b/gson-jackson-performance/README.md @@ -0,0 +1,3 @@ +## Performance of Gson and Jackson + +Standalone java programs to measure the performance of both JSON APIs based on file size and object graph complexity. diff --git a/gson-jackson-performance/pom.xml b/gson-jackson-performance/pom.xml new file mode 100644 index 0000000000..1ea43bd7fa --- /dev/null +++ b/gson-jackson-performance/pom.xml @@ -0,0 +1,72 @@ + + 4.0.0 + + com.baeldung + gson-jackson-performance + 0.0.1-SNAPSHOT + jar + + gson-jackson-performance + http://maven.apache.org + + + UTF-8 + + + + gson-jackson-performance + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + + + + com.google.code.gson + gson + 2.5 + + + + com.fasterxml.jackson.core + jackson-databind + 2.7.1-1 + + + + junit + junit + 3.8.1 + test + + + + log4j + log4j + 1.2.17 + + + + + + + diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java new file mode 100644 index 0000000000..b69d306edf --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java @@ -0,0 +1,63 @@ +package com.baeldung.data.complex; + +import java.util.ArrayList; +import java.util.List; + +import com.baeldung.data.utility.Utility; +import com.baeldung.pojo.complex.AddressDetails; +import com.baeldung.pojo.complex.ContactDetails; +import com.baeldung.pojo.complex.CustomerAddressDetails; +import com.baeldung.pojo.complex.CustomerPortfolioComplex; + +/** + * + * This class is responsible for generating data for complex type object + */ + +public class ComplexDataGeneration { + + public static CustomerPortfolioComplex generateData() { + List customerAddressDetailsList = new ArrayList(); + for (int i = 0; i < 600000; i++) { + CustomerAddressDetails customerAddressDetails = new CustomerAddressDetails(); + customerAddressDetails.setAge(20); + customerAddressDetails.setFirstName(Utility.generateRandomName()); + customerAddressDetails.setLastName(Utility.generateRandomName()); + + List addressDetailsList = new ArrayList(); + customerAddressDetails.setAddressDetails(addressDetailsList); + + for (int j = 0; j < 2; j++) { + AddressDetails addressDetails = new AddressDetails(); + addressDetails.setZipcode(Utility.generateRandomZip()); + addressDetails.setAddress(Utility.generateRandomAddress()); + + List contactDetailsList = new ArrayList(); + addressDetails.setContactDetails(contactDetailsList); + + for (int k = 0; k < 2; k++) { + ContactDetails contactDetails = new ContactDetails(); + contactDetails.setLandline(Utility.generateRandomPhone()); + contactDetails.setMobile(Utility.generateRandomPhone()); + contactDetailsList.add(contactDetails); + contactDetails = null; + } + + addressDetailsList.add(addressDetails); + addressDetails = null; + contactDetailsList = null; + } + customerAddressDetailsList.add(customerAddressDetails); + customerAddressDetails = null; + + if (i % 6000 == 0) { + Runtime.getRuntime().gc(); + } + } + + CustomerPortfolioComplex customerPortfolioComplex = new CustomerPortfolioComplex(); + customerPortfolioComplex.setCustomerAddressDetailsList(customerAddressDetailsList); + customerAddressDetailsList = null; + return customerPortfolioComplex; + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java new file mode 100644 index 0000000000..b97893e8f1 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java @@ -0,0 +1,91 @@ +package com.baeldung.data.complex; + +import java.util.Map; + +import org.apache.log4j.Logger; +import com.baeldung.data.utility.Utility; +import com.baeldung.pojo.complex.CustomerPortfolioComplex; + +import com.google.gson.Gson; + +/** + * + * This class is responsible for performing functions for Complex type + * GSON like + * Java to Json + * Json to Map + * Json to Java Object + */ + +public class ComplexDataGson { + + private static final Logger logger = Logger.getLogger(ComplexDataGson.class); + + static Gson gson = new Gson(); + + static long generateJsonAvgTime = 0L; + + static long parseJsonToMapAvgTime = 0L; + + static long parseJsonToActualObjectAvgTime = 0L; + + public static void main(String[] args) { + CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); + int j = 50; + for (int i = 0; i < j; i++) { + logger.info("-------Round " + (i + 1)); + String jsonStr = generateJson(customerPortfolioComplex); + logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); + logger.info("--------------------------------------------------------------------------"); + parseJsonToMap(jsonStr); + parseJsonToActualObject(jsonStr); + jsonStr = null; + } + + generateJsonAvgTime = generateJsonAvgTime / j; + parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; + + logger.info("--------------------------------------------------------------------------"); + logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); + logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); + logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); + logger.info("--------------------------------------------------------------------------"); + } + + private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) { + Runtime.getRuntime().gc(); + long startParsTime = System.nanoTime(); + String json = gson.toJson(customerPortfolioComplex); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + generateJsonAvgTime = generateJsonAvgTime + elapsedTime; + logger.info("Json Generation Time(ms):: " + elapsedTime); + return json; + } + + private static void parseJsonToMap(String jsonStr) { + long startParsTime = System.nanoTime(); + Map parsedMap = gson.fromJson(jsonStr , Map.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; + logger.info("Generating Map from json Time(ms):: " + elapsedTime); + logger.info("--------------------------------------------------------------------------"); + parsedMap = null; + Runtime.getRuntime().gc(); + } + + private static void parseJsonToActualObject(String jsonStr) { + long startParsTime = System.nanoTime(); + CustomerPortfolioComplex customerPortfolioComplex = gson.fromJson(jsonStr , CustomerPortfolioComplex.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; + logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); + logger.info("--------------------------------------------------------------------------"); + customerPortfolioComplex = null; + Runtime.getRuntime().gc(); + + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java new file mode 100644 index 0000000000..07a210fb37 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java @@ -0,0 +1,95 @@ +package com.baeldung.data.complex; + +import java.io.IOException; +import java.util.Map; + +import com.baeldung.data.utility.Utility; +import org.apache.log4j.Logger; +import com.baeldung.pojo.complex.CustomerPortfolioComplex; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * + * This class is responsible for performing functions for Complex type + * Jackson like + * Java to Json + * Json to Map + * Json to Java Object + */ + +public class ComplexDataJackson { + + private static final Logger logger = Logger.getLogger(ComplexDataJackson.class); + + static ObjectMapper mapper = new ObjectMapper(); + + static long generateJsonAvgTime = 0L; + + static long parseJsonToMapAvgTime = 0L; + + static long parseJsonToActualObjectAvgTime = 0L; + + public static void main(String[] args) throws IOException { + CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); + int j = 50; + for (int i = 0; i < j; i++) { + logger.info("-------Round " + (i + 1)); + String jsonStr = generateJson(customerPortfolioComplex); + logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); + logger.info("--------------------------------------------------------------------------"); + parseJsonToMap(jsonStr); + parseJsonToActualObject(jsonStr); + jsonStr = null; + } + + generateJsonAvgTime = generateJsonAvgTime / j; + parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; + + logger.info("--------------------------------------------------------------------------"); + logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); + logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); + logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); + logger.info("--------------------------------------------------------------------------"); + } + + private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) + throws JsonProcessingException { + Runtime.getRuntime().gc(); + long startParsTime = System.nanoTime(); + String json = mapper.writeValueAsString(customerPortfolioComplex); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + generateJsonAvgTime = generateJsonAvgTime + elapsedTime; + logger.info("Json Generation Time(ms):: " + elapsedTime); + return json; + } + + private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { + long startParsTime = System.nanoTime(); + Map parsedMap = mapper.readValue(jsonStr , Map.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; + logger.info("Generating Map from json Time(ms):: " + elapsedTime); + parsedMap = null; + Runtime.getRuntime().gc(); + + } + + private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , + IOException { + long startParsTime = System.nanoTime(); + CustomerPortfolioComplex customerPortfolioComplex = mapper.readValue(jsonStr , CustomerPortfolioComplex.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; + logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); + customerPortfolioComplex = null; + Runtime.getRuntime().gc(); + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java new file mode 100644 index 0000000000..1e186adc72 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java @@ -0,0 +1,35 @@ +package com.baeldung.data.simple; + +import java.util.ArrayList; +import java.util.List; + +import com.baeldung.data.utility.Utility; +import com.baeldung.pojo.simple.Customer; +import com.baeldung.pojo.simple.CustomerPortfolioSimple; + +/** + * + * This class is responsible for generating data for simple type object + */ + +public class SimpleDataGeneration { + + public static CustomerPortfolioSimple generateData() { + List customerList = new ArrayList(); + for (int i = 0; i < 1; i++) { + Customer customer = new Customer(); + customer.setAge(20); + customer.setFirstName(Utility.generateRandomName()); + customer.setLastName(Utility.generateRandomName()); + + customerList.add(customer); + customer = null; + + } + + CustomerPortfolioSimple customerPortfolioSimple = new CustomerPortfolioSimple(); + customerPortfolioSimple.setCustomerLists(customerList); + customerList = null; + return customerPortfolioSimple; + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java new file mode 100644 index 0000000000..b190313462 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java @@ -0,0 +1,91 @@ +package com.baeldung.data.simple; + +import java.util.Map; + +import org.apache.log4j.Logger; +import com.baeldung.data.utility.Utility; +import com.baeldung.pojo.simple.CustomerPortfolioSimple; + +import com.google.gson.Gson; + +/** + * + * This class is responsible for performing functions for Simple type + * GSON like + * Java to Json + * Json to Map + * Json to Java Object + */ + +public class SimpleDataGson { + + private static final Logger logger = Logger.getLogger(SimpleDataGson.class); + + static Gson gson = new Gson(); + + static long generateJsonAvgTime = 0L; + + static long parseJsonToMapAvgTime = 0L; + + static long parseJsonToActualObjectAvgTime = 0L; + + public static void main(String[] args) { + CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); + String jsonStr = null; + int j = 5; + for (int i = 0; i < j; i++) { + logger.info("-------Round " + (i + 1)); + jsonStr = generateJson(customerPortfolioSimple); + logger.info("Size of Simple content Gson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); + logger.info("--------------------------------------------------------------------------"); + parseJsonToMap(jsonStr); + parseJsonToActualObject(jsonStr); + jsonStr = null; + } + generateJsonAvgTime = generateJsonAvgTime / j; + parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; + + logger.info("--------------------------------------------------------------------------"); + logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); + logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); + logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); + logger.info("--------------------------------------------------------------------------"); + } + + private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) { + Runtime.getRuntime().gc(); + long startParsTime = System.nanoTime(); + String json = gson.toJson(customerPortfolioSimple); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + generateJsonAvgTime = generateJsonAvgTime + elapsedTime; + logger.info("Json Generation Time(ms):: " + elapsedTime); + return json; + } + + private static void parseJsonToMap(String jsonStr) { + long startParsTime = System.nanoTime(); + Map parsedMap = gson.fromJson(jsonStr , Map.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; + logger.info("Generating Map from json Time(ms):: " + elapsedTime); + logger.info("--------------------------------------------------------------------------"); + parsedMap = null; + Runtime.getRuntime().gc(); + + } + + private static void parseJsonToActualObject(String jsonStr) { + long startParsTime = System.nanoTime(); + CustomerPortfolioSimple customerPortfolioSimple = gson.fromJson(jsonStr , CustomerPortfolioSimple.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; + logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); + logger.info("--------------------------------------------------------------------------"); + customerPortfolioSimple = null; + Runtime.getRuntime().gc(); + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java new file mode 100644 index 0000000000..9330333604 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java @@ -0,0 +1,95 @@ +package com.baeldung.data.simple; + +import java.io.IOException; +import java.util.Map; + +import com.baeldung.data.utility.Utility; +import org.apache.log4j.Logger; +import com.baeldung.pojo.simple.CustomerPortfolioSimple; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * + * This class is responsible for performing functions for Simple type + * Jackson like + * Java to Json + * Json to Map + * Json to Java Object + */ + +public class SimpleDataJackson { + + private static final Logger logger = Logger.getLogger(SimpleDataJackson.class); + + static ObjectMapper mapper = new ObjectMapper(); + + static long generateJsonAvgTime = 0L; + + static long parseJsonToMapAvgTime = 0L; + + static long parseJsonToActualObjectAvgTime = 0L; + + public static void main(String[] args) throws IOException { + CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); + int j = 50; + for (int i = 0; i < j; i++) { + logger.info("-------Round " + (i + 1)); + String jsonStr = generateJson(customerPortfolioSimple); + logger.info("Size of Simple content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); + logger.info("--------------------------------------------------------------------------"); + + parseJsonToMap(jsonStr); + parseJsonToActualObject(jsonStr); + jsonStr = null; + } + + generateJsonAvgTime = generateJsonAvgTime / j; + parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; + + logger.info("--------------------------------------------------------------------------"); + logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); + logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); + logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); + logger.info("--------------------------------------------------------------------------"); + } + + private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) throws JsonProcessingException { + Runtime.getRuntime().gc(); + long startParsTime = System.nanoTime(); + String json = mapper.writeValueAsString(customerPortfolioSimple); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + generateJsonAvgTime = generateJsonAvgTime + elapsedTime; + logger.info("Json Generation Time(ms):: " + elapsedTime); + return json; + } + + private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { + long startParsTime = System.nanoTime(); + Map parsedMap = mapper.readValue(jsonStr , Map.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; + logger.info("Generating Map from json Time(ms):: " + elapsedTime); + logger.info("--------------------------------------------------------------------------"); + parsedMap = null; + Runtime.getRuntime().gc(); + } + + private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , + IOException { + long startParsTime = System.nanoTime(); + CustomerPortfolioSimple customerPortfolioSimple = mapper.readValue(jsonStr , CustomerPortfolioSimple.class); + long endParsTime = System.nanoTime(); + long elapsedTime = endParsTime - startParsTime; + parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; + logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); + customerPortfolioSimple = null; + Runtime.getRuntime().gc(); + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java b/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java new file mode 100644 index 0000000000..8b0c402e47 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java @@ -0,0 +1,90 @@ +package com.baeldung.data.utility; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Random; + +public class Utility { + + public static String generateRandomName() { + char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 8; i++) { + char c = chars[random.nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String generateRandomAddress() { + char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 30; i++) { + char c = chars[random.nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String generateRandomZip() { + char[] chars = "1234567890".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 8; i++) { + char c = chars[random.nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String generateRandomPhone() { + char[] chars = "1234567890".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 10; i++) { + char c = chars[random.nextInt(chars.length)]; + sb.append(c); + } + return sb.toString(); + } + + public static String readFile(String fileName , Class clazz) throws IOException { + String dir = clazz.getResource("/").getFile(); + dir = dir + "/" + fileName; + + BufferedReader br = new BufferedReader(new FileReader(dir)); + try { + StringBuilder sb = new StringBuilder(); + String line = br.readLine(); + + while (line != null) { + sb.append(line); + sb.append(System.lineSeparator()); + line = br.readLine(); + } + return sb.toString(); + } finally { + br.close(); + } + } + + public static String bytesIntoMB(long bytes) { + long kilobyte = 1024; + long megabyte = kilobyte * 1024; + + if ((bytes >= 0) && (bytes < kilobyte)) { + return bytes + " B"; + + } else if ((bytes >= kilobyte) && (bytes < megabyte)) { + return (bytes / kilobyte) + " KB"; + + } else if ((bytes >= megabyte)) { + return (bytes / megabyte) + " MB"; + } + + return null; + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java new file mode 100644 index 0000000000..79725a97bd --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java @@ -0,0 +1,37 @@ +package com.baeldung.pojo.complex; + +import java.util.List; + +public class AddressDetails { + + private String address; + + private String zipcode; + + private List contactDetails; + + public String getZipcode() { + return zipcode; + } + + public void setZipcode(String zipcode) { + this.zipcode = zipcode; + } + + public List getContactDetails() { + return contactDetails; + } + + public void setContactDetails(List contactDetails) { + this.contactDetails = contactDetails; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java new file mode 100644 index 0000000000..164fe3f470 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java @@ -0,0 +1,25 @@ +package com.baeldung.pojo.complex; + +public class ContactDetails { + + private String mobile; + + private String landline; + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getLandline() { + return landline; + } + + public void setLandline(String landline) { + this.landline = landline; + } + +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java new file mode 100644 index 0000000000..9bc5951716 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java @@ -0,0 +1,18 @@ +package com.baeldung.pojo.complex; + +import java.util.List; + +import com.baeldung.pojo.simple.Customer; + +public class CustomerAddressDetails extends Customer { + + private List addressDetails; + + public List getAddressDetails() { + return addressDetails; + } + + public void setAddressDetails(List addressDetails) { + this.addressDetails = addressDetails; + } +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java new file mode 100644 index 0000000000..13f9d240b8 --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java @@ -0,0 +1,17 @@ +package com.baeldung.pojo.complex; + +import java.util.List; + +public class CustomerPortfolioComplex { + + private List customerAddressDetailsList; + + public List getCustomerAddressDetailsList() { + return customerAddressDetailsList; + } + + public void setCustomerAddressDetailsList(List customerAddressDetailsList) { + this.customerAddressDetailsList = customerAddressDetailsList; + } + +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java new file mode 100644 index 0000000000..3d5668f85a --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java @@ -0,0 +1,36 @@ +package com.baeldung.pojo.simple; + + +public class Customer { + + private String firstName; + + private String lastName; + + private int age; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + +} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java new file mode 100644 index 0000000000..7cb684813c --- /dev/null +++ b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java @@ -0,0 +1,16 @@ +package com.baeldung.pojo.simple; + +import java.util.List; + +public class CustomerPortfolioSimple { + + private List customerLists; + + public List getCustomerLists() { + return customerLists; + } + + public void setCustomerLists(List customerLists) { + this.customerLists = customerLists; + } +} diff --git a/gson-jackson-performance/src/main/resources/log4j.properties b/gson-jackson-performance/src/main/resources/log4j.properties new file mode 100644 index 0000000000..371cbc9048 --- /dev/null +++ b/gson-jackson-performance/src/main/resources/log4j.properties @@ -0,0 +1,16 @@ +# Root logger option +log4j.rootLogger=DEBUG, file + +# Redirect log messages to console +# log4j.appender.stdout=org.apache.log4j.ConsoleAppender +# log4j.appender.stdout.Target=System.out +# log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + +# Redirect log messages to a log file, support file rolling. +log4j.appender.file=org.apache.log4j.RollingFileAppender +log4j.appender.file.File=log4j-application.log +log4j.appender.file.MaxFileSize=5MB +log4j.appender.file.MaxBackupIndex=10 +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/gson/pom.xml b/gson/pom.xml index c0640abcbf..4f331f6fd9 100644 --- a/gson/pom.xml +++ b/gson/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung gson 0.1-SNAPSHOT @@ -112,13 +112,9 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 2.3 @@ -142,14 +138,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/gson/src/main/webapp/WEB-INF/api-servlet.xml b/gson/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4c74be8912..0000000000 --- a/gson/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/gson/src/main/webapp/WEB-INF/web.xml b/gson/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/gson/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/guava/pom.xml b/guava/pom.xml index 2b07be71bf..59ca3aa1bb 100644 --- a/guava/pom.xml +++ b/guava/pom.xml @@ -1,8 +1,8 @@ 4.0.0 - org.baeldung + com.baeldung guava - 0.1-SNAPSHOT + 0.1.0-SNAPSHOT guava @@ -93,13 +93,9 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 1.7.13 @@ -120,14 +116,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/guava/src/main/webapp/WEB-INF/api-servlet.xml b/guava/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4c74be8912..0000000000 --- a/guava/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/guava/src/main/webapp/WEB-INF/web.xml b/guava/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/guava/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/guava18/pom.xml b/guava18/pom.xml index 21f4697a73..6002b37d74 100644 --- a/guava18/pom.xml +++ b/guava18/pom.xml @@ -5,8 +5,8 @@ 4.0.0 com.baeldung - guava - 1.0-SNAPSHOT + guava18 + 0.1.0-SNAPSHOT diff --git a/guava19/README.md b/guava19/README.md new file mode 100644 index 0000000000..be9f2d72a4 --- /dev/null +++ b/guava19/README.md @@ -0,0 +1,7 @@ +========= + +## Guava 19 + + +### Relevant Articles: +- [Guava 19: What’s New?](http://www.baeldung.com/whats-new-in-guava-19) diff --git a/guava19/pom.xml b/guava19/pom.xml index 97c1b0ea4e..13f3b471f1 100644 --- a/guava19/pom.xml +++ b/guava19/pom.xml @@ -1,12 +1,10 @@ - + 4.0.0 com.baeldung - guava - 1.0-SNAPSHOT + guava19 + 0.1.0-SNAPSHOT @@ -25,6 +23,7 @@ 1.3 + diff --git a/handling-spring-static-resources/.classpath b/handling-spring-static-resources/.classpath index 71a1c1e0b5..613195248b 100644 --- a/handling-spring-static-resources/.classpath +++ b/handling-spring-static-resources/.classpath @@ -6,7 +6,11 @@ - + + + + + diff --git a/handling-spring-static-resources/.project b/handling-spring-static-resources/.project index a16def8042..ae47dfac0e 100644 --- a/handling-spring-static-resources/.project +++ b/handling-spring-static-resources/.project @@ -1,6 +1,6 @@ - handling-spring-static-resources + spring-static-resources diff --git a/handling-spring-static-resources/pom.xml b/handling-spring-static-resources/pom.xml index 8efacc4b28..f47d8a5592 100644 --- a/handling-spring-static-resources/pom.xml +++ b/handling-spring-static-resources/pom.xml @@ -1,12 +1,14 @@ 4.0.0 - org.baeldung - handling-spring-static-resources - handling-spring-static-resources - 0.1-SNAPSHOT + + com.baeldung + spring-static-resources + 0.1.0-SNAPSHOT war + spring-static-resources + @@ -161,7 +163,7 @@ - handling-spring-static-resources + spring-static-resources src/main/resources @@ -172,21 +174,22 @@ 1.8 + - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 1.8.1 2.3.2-b01 4.3.11.Final - 5.1.37 + 5.1.38 1.9.2.RELEASE - 2.6.4 + 2.7.2 1.7.13 @@ -207,13 +210,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.14 + 2.19.1 + 1.4.18 \ No newline at end of file diff --git a/httpclient/pom.xml b/httpclient/pom.xml index 0098c40d52..66b2076852 100644 --- a/httpclient/pom.xml +++ b/httpclient/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung httpclient 0.1-SNAPSHOT @@ -148,13 +148,9 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 1.7.13 @@ -175,14 +171,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/jackson/pom.xml b/jackson/pom.xml index ed7a5944a5..e9008a81a7 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -1,6 +1,7 @@ - + 4.0.0 - org.baeldung + com.baeldung jackson 0.1-SNAPSHOT @@ -47,25 +48,31 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - 2.4.0 + ${jackson.version} com.fasterxml.jackson.datatype jackson-datatype-joda - 2.4.0 + ${jackson.version} + + + + com.fasterxml.jackson.module + jackson-module-jsonSchema + 2.6.0 joda-time joda-time - 2.6 + 2.9.2 com.google.code.gson gson - 2.3.1 + 2.6.2 @@ -131,16 +138,12 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 - 2.7.1-1 + 2.7.2 1.7.13 @@ -161,15 +164,15 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 - \ No newline at end of file + diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCreator.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCreator.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCreator.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCreator.java index 01507ab4d6..90a45efc96 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCreator.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCreator.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCustomAnnotation.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCustomAnnotation.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCustomAnnotation.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCustomAnnotation.java index 3b468f474f..65d64059c9 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithCustomAnnotation.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithCustomAnnotation.java @@ -1,10 +1,10 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Date; -import org.baeldung.jackson.annotation.BeanWithCustomAnnotation.CustomAnnotation; +import com.baeldung.jackson.annotation.BeanWithCustomAnnotation.CustomAnnotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithFilter.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithFilter.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithFilter.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithFilter.java index a0627757b6..48fecf8c13 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithFilter.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithFilter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonFilter; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithGetter.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithGetter.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithGetter.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithGetter.java index 6585018564..39db9f06b9 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithGetter.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithGetter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithIgnore.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithIgnore.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithIgnore.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithIgnore.java index 4f0866bdc0..aa4e6b495d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithIgnore.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithIgnore.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithInject.java b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithInject.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithInject.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithInject.java index aa8da1da4f..473058fd1c 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/BeanWithInject.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/BeanWithInject.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JacksonInject; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/ExtendableBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/ExtendableBean.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/annotation/ExtendableBean.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/ExtendableBean.java index c8e5f453ec..e03ffed613 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/ExtendableBean.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/ExtendableBean.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import java.util.HashMap; import java.util.Map; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/MyBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/MyBean.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/annotation/MyBean.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/MyBean.java index 651d7c2da0..5d4ce4202c 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/MyBean.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/MyBean.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/PrivateBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/PrivateBean.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/annotation/PrivateBean.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/PrivateBean.java index 472fa84a26..a49ce2e6d5 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/PrivateBean.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/PrivateBean.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/RawBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/RawBean.java similarity index 87% rename from jackson/src/test/java/org/baeldung/jackson/annotation/RawBean.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/RawBean.java index a481fbf02e..a0482ef5c1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/RawBean.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/RawBean.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonRawValue; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/UnwrappedUser.java b/jackson/src/test/java/com/baeldung/jackson/annotation/UnwrappedUser.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/annotation/UnwrappedUser.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/UnwrappedUser.java index 4c761a57e0..d2b7522221 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/UnwrappedUser.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/UnwrappedUser.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonUnwrapped; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/UserWithIgnoreType.java b/jackson/src/test/java/com/baeldung/jackson/annotation/UserWithIgnoreType.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/annotation/UserWithIgnoreType.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/UserWithIgnoreType.java index eaf4cb7b74..36f383cf65 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/UserWithIgnoreType.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/UserWithIgnoreType.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonIgnoreType; diff --git a/jackson/src/test/java/org/baeldung/jackson/annotation/Zoo.java b/jackson/src/test/java/com/baeldung/jackson/annotation/Zoo.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/annotation/Zoo.java rename to jackson/src/test/java/com/baeldung/jackson/annotation/Zoo.java index d59be09f12..9c11ec0e36 100644 --- a/jackson/src/test/java/org/baeldung/jackson/annotation/Zoo.java +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/Zoo.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.annotation; +package com.baeldung.jackson.annotation; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/AppendBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/AppendBean.java new file mode 100644 index 0000000000..ec67b3c67a --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/AppendBean.java @@ -0,0 +1,31 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.annotation.JsonAppend; + +@JsonAppend(attrs = {@JsonAppend.Attr(value = "appendedProperty", include = JsonInclude.Include.ALWAYS)}) +public class AppendBean { + private int id; + private String name; + + public AppendBean(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/ExtraAnnotationTest.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/ExtraAnnotationTest.java new file mode 100644 index 0000000000..db6993da0f --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/ExtraAnnotationTest.java @@ -0,0 +1,100 @@ +package com.baeldung.jackson.annotation.extra; + +import static org.junit.Assert.*; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.instanceOf; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; +import com.fasterxml.jackson.module.jsonSchema.JsonSchema; +import com.fasterxml.jackson.module.jsonSchema.factories.SchemaFactoryWrapper; + +public class ExtraAnnotationTest { + @Test + public void whenUsingJsonIdentityReferenceAnnotation_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + IdentityReferenceBean bean = new IdentityReferenceBean(1, "Identity Reference Bean"); + String jsonString = mapper.writeValueAsString(bean); + + assertEquals("1", jsonString); + } + + @Test + public void whenUsingJsonAppendAnnotation_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + AppendBean bean = new AppendBean(2, "Append Bean"); + String jsonString = mapper.writeValueAsString(bean); + + assertThat(jsonString, containsString("appendedProperty")); + } + + @Test + public void whenUsingJsonNamingAnnotation_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + NamingBean bean = new NamingBean(3, "Naming Bean"); + String jsonString = mapper.writeValueAsString(bean); + + assertThat(jsonString, containsString("bean_name")); + } + + @Test + public void whenUsingJsonPropertyDescriptionAnnotation_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + SchemaFactoryWrapper wrapper = new SchemaFactoryWrapper(); + mapper.acceptJsonFormatVisitor(PropertyDescriptionBean.class, wrapper); + JsonSchema jsonSchema = wrapper.finalSchema(); + String jsonString = mapper.writeValueAsString(jsonSchema); + + assertThat(jsonString, containsString("This is a description of the name property")); + } + + @Test + public void whenUsingJsonPOJOBuilderAnnotation_thenCorrect() throws IOException { + ObjectMapper mapper = new ObjectMapper(); + String jsonString = "{\"id\":5,\"name\":\"POJO Builder Bean\"}"; + POJOBuilderBean bean = mapper.readValue(jsonString, POJOBuilderBean.class); + + assertEquals(5, bean.getIdentity()); + assertEquals("POJO Builder Bean", bean.getBeanName()); + } + + @Test + public void whenUsingJsonTypeIdAnnotation_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.enableDefaultTyping(DefaultTyping.NON_FINAL); + TypeIdBean bean = new TypeIdBean(6, "Type Id Bean"); + String jsonString = mapper.writeValueAsString(bean); + + assertThat(jsonString, containsString("Type Id Bean")); + } + + @Test + public void whenUsingJsonTypeIdResolverAnnotation_thenCorrect() throws IOException { + TypeIdResolverStructure.FirstBean bean1 = new TypeIdResolverStructure.FirstBean(1, "Bean 1"); + TypeIdResolverStructure.LastBean bean2 = new TypeIdResolverStructure.LastBean(2, "Bean 2"); + + List beans = new ArrayList<>(); + beans.add(bean1); + beans.add(bean2); + + TypeIdResolverStructure.BeanContainer serializedContainer = new TypeIdResolverStructure.BeanContainer(); + serializedContainer.setBeans(beans); + + ObjectMapper mapper = new ObjectMapper(); + String jsonString = mapper.writeValueAsString(serializedContainer); + assertThat(jsonString, containsString("bean1")); + assertThat(jsonString, containsString("bean2")); + + TypeIdResolverStructure.BeanContainer deserializedContainer = mapper.readValue(jsonString, TypeIdResolverStructure.BeanContainer.class); + List beanList = deserializedContainer.getBeans(); + assertThat(beanList.get(0), instanceOf(TypeIdResolverStructure.FirstBean.class)); + assertThat(beanList.get(1), instanceOf(TypeIdResolverStructure.LastBean.class)); + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/IdentityReferenceBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/IdentityReferenceBean.java new file mode 100644 index 0000000000..7f9cd0fdba --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/IdentityReferenceBean.java @@ -0,0 +1,33 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonIdentityReference; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; + +@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") +@JsonIdentityReference(alwaysAsId = true) +public class IdentityReferenceBean { + private int id; + private String name; + + public IdentityReferenceBean(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/NamingBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/NamingBean.java new file mode 100644 index 0000000000..efd26ab9ae --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/NamingBean.java @@ -0,0 +1,31 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import com.fasterxml.jackson.databind.annotation.JsonNaming; + +@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) +public class NamingBean { + private int id; + private String beanName; + + public NamingBean(int id, String beanName) { + this.id = id; + this.beanName = beanName; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getBeanName() { + return beanName; + } + + public void setBeanName(String beanName) { + this.beanName = beanName; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/POJOBuilderBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/POJOBuilderBean.java new file mode 100644 index 0000000000..e0a89c6903 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/POJOBuilderBean.java @@ -0,0 +1,51 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; + +@JsonDeserialize(builder = POJOBuilderBean.BeanBuilder.class) +public class POJOBuilderBean { + private int identity; + private String beanName; + + @JsonPOJOBuilder(buildMethodName = "createBean", withPrefix = "construct") + public static class BeanBuilder { + private int idValue; + private String nameValue; + + public BeanBuilder constructId(int id) { + idValue = id; + return this; + } + + public BeanBuilder constructName(String name) { + nameValue = name; + return this; + } + + public POJOBuilderBean createBean() { + return new POJOBuilderBean(idValue, nameValue); + } + } + + public POJOBuilderBean(int identity, String beanName) { + this.identity = identity; + this.beanName = beanName; + } + + public int getIdentity() { + return identity; + } + + public void setIdentity(int identity) { + this.identity = identity; + } + + public String getBeanName() { + return beanName; + } + + public void setBeanName(String beanName) { + this.beanName = beanName; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/PropertyDescriptionBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/PropertyDescriptionBean.java new file mode 100644 index 0000000000..1563cddb83 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/PropertyDescriptionBean.java @@ -0,0 +1,25 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.annotation.JsonPropertyDescription; + +public class PropertyDescriptionBean { + private int id; + @JsonPropertyDescription("This is a description of the name property") + private String name; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdBean.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdBean.java new file mode 100644 index 0000000000..32a6d5a1d5 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdBean.java @@ -0,0 +1,30 @@ +package com.baeldung.jackson.annotation.extra; + +import com.fasterxml.jackson.annotation.JsonTypeId; + +public class TypeIdBean { + private int id; + @JsonTypeId + private String name; + + public TypeIdBean(int id, String name) { + this.id = id; + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdResolverStructure.java b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdResolverStructure.java new file mode 100644 index 0000000000..9056023c69 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/annotation/extra/TypeIdResolverStructure.java @@ -0,0 +1,130 @@ +package com.baeldung.jackson.annotation.extra; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.fasterxml.jackson.databind.DatabindContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver; +import com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase; + +public class TypeIdResolverStructure { + public static class BeanContainer { + private List beans; + + public List getBeans() { + return beans; + } + + public void setBeans(List beans) { + this.beans = beans; + } + } + + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type") + @JsonTypeIdResolver(BeanIdResolver.class) + public static class AbstractBean { + private int id; + + protected AbstractBean() { + } + + protected AbstractBean(int id) { + this.id = id; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } + + public static class FirstBean extends AbstractBean { + String firstName; + + public FirstBean() { + } + + public FirstBean(int id, String name) { + super(id); + setFirstName(name); + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String name) { + firstName = name; + } + } + + public static class LastBean extends AbstractBean { + String lastName; + + public LastBean() { + } + + public LastBean(int id, String name) { + super(id); + setLastName(name); + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String name) { + lastName = name; + } + } + + public static class BeanIdResolver extends TypeIdResolverBase { + private JavaType superType; + + @Override + public void init(JavaType baseType) { + superType = baseType; + } + + @Override + public Id getMechanism() { + return Id.NAME; + } + + @Override + public String idFromValue(Object obj) { + return idFromValueAndType(obj, obj.getClass()); + } + + @Override + public String idFromValueAndType(Object obj, Class subType) { + String typeId = null; + switch (subType.getSimpleName()) { + case "FirstBean": + typeId = "bean1"; + break; + case "LastBean": + typeId = "bean2"; + } + return typeId; + } + + @Override + public JavaType typeFromId(DatabindContext context, String id) { + Class subType = null; + switch (id) { + case "bean1": + subType = FirstBean.class; + break; + case "bean2": + subType = LastBean.class; + } + return context.constructSpecializedType(superType, subType); + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListDeserializer.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListDeserializer.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListDeserializer.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListDeserializer.java index cc4e1d5589..5f1f1edf2b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListDeserializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListDeserializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.io.IOException; import java.util.ArrayList; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListSerializer.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListSerializer.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListSerializer.java index 545f7e18c1..1d8ca011ea 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/CustomListSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/CustomListSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.io.IOException; import java.util.ArrayList; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/Item.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/Item.java similarity index 87% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/Item.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/Item.java index 223721dc62..55b8632e42 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/Item.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/Item.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; public class Item { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIdentity.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIdentity.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIdentity.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIdentity.java index 2091ec6e40..25de4a8f7a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIdentity.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIdentity.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.ObjectIdGenerators; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIgnore.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIgnore.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIgnore.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIgnore.java index 8b6d623f18..910ccec174 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithIgnore.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithIgnore.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; public class ItemWithIgnore { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithRef.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithRef.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithRef.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithRef.java index 295ec9580d..0ca8d721e8 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithRef.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithRef.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import com.fasterxml.jackson.annotation.JsonManagedReference; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithSerializer.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithSerializer.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithSerializer.java index d9d9612677..a57ca89d2c 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; public class ItemWithSerializer { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithView.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithView.java similarity index 85% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithView.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithView.java index 65e0d08b4e..ffa19fbad2 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/ItemWithView.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/ItemWithView.java @@ -1,6 +1,6 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; -import org.baeldung.jackson.jsonview.Views; +import com.baeldung.jackson.jsonview.Views; import com.fasterxml.jackson.annotation.JsonView; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/User.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/User.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/User.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/User.java index a92dff4052..71c9ec6a68 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/User.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/User.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIdentity.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIdentity.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIdentity.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIdentity.java index 52fa22c32d..db83a09389 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIdentity.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIdentity.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIgnore.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIgnore.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIgnore.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIgnore.java index 7714487f76..857a373cc5 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithIgnore.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithIgnore.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithRef.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithRef.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithRef.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithRef.java index 406b87f78c..3de03fc651 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithRef.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithRef.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithSerializer.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithSerializer.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithSerializer.java index 25c202a9d3..9fda969e41 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithView.java b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithView.java similarity index 87% rename from jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithView.java rename to jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithView.java index e7043292a0..d92d67b3a1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/bidirection/UserWithView.java +++ b/jackson/src/test/java/com/baeldung/jackson/bidirection/UserWithView.java @@ -1,9 +1,9 @@ -package org.baeldung.jackson.bidirection; +package com.baeldung.jackson.bidirection; import java.util.ArrayList; import java.util.List; -import org.baeldung.jackson.jsonview.Views; +import com.baeldung.jackson.jsonview.Views; import com.fasterxml.jackson.annotation.JsonView; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateDeserializer.java b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateDeserializer.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/date/CustomDateDeserializer.java rename to jackson/src/test/java/com/baeldung/jackson/date/CustomDateDeserializer.java index eb1866026f..a63190c8f5 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateDeserializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateDeserializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.io.IOException; import java.text.ParseException; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateSerializer.java b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateSerializer.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/date/CustomDateSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/date/CustomDateSerializer.java index 40aad21482..8d435b7b69 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.io.IOException; import java.text.SimpleDateFormat; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateTimeSerializer.java b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateTimeSerializer.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/date/CustomDateTimeSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/date/CustomDateTimeSerializer.java index 9f2a290bc4..88c069419b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/CustomDateTimeSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/CustomDateTimeSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/CustomLocalDateTimeSerializer.java b/jackson/src/test/java/com/baeldung/jackson/date/CustomLocalDateTimeSerializer.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/date/CustomLocalDateTimeSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/date/CustomLocalDateTimeSerializer.java index b1e6a8ba86..3f8f5e098e 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/CustomLocalDateTimeSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/CustomLocalDateTimeSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.io.IOException; import java.time.LocalDateTime; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/Event.java b/jackson/src/test/java/com/baeldung/jackson/date/Event.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/date/Event.java rename to jackson/src/test/java/com/baeldung/jackson/date/Event.java index 783eee6af8..e20882abc1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/Event.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/Event.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.util.Date; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/EventWithFormat.java b/jackson/src/test/java/com/baeldung/jackson/date/EventWithFormat.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/date/EventWithFormat.java rename to jackson/src/test/java/com/baeldung/jackson/date/EventWithFormat.java index 4b2053eb4b..607e694cef 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/EventWithFormat.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/EventWithFormat.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.util.Date; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/EventWithJodaTime.java b/jackson/src/test/java/com/baeldung/jackson/date/EventWithJodaTime.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/date/EventWithJodaTime.java rename to jackson/src/test/java/com/baeldung/jackson/date/EventWithJodaTime.java index 0c72030650..6abee344ef 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/EventWithJodaTime.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/EventWithJodaTime.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import org.joda.time.DateTime; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/EventWithLocalDateTime.java b/jackson/src/test/java/com/baeldung/jackson/date/EventWithLocalDateTime.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/date/EventWithLocalDateTime.java rename to jackson/src/test/java/com/baeldung/jackson/date/EventWithLocalDateTime.java index 6c48cf3f0e..16104222d4 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/EventWithLocalDateTime.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/EventWithLocalDateTime.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.time.LocalDateTime; diff --git a/jackson/src/test/java/org/baeldung/jackson/date/EventWithSerializer.java b/jackson/src/test/java/com/baeldung/jackson/date/EventWithSerializer.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/date/EventWithSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/date/EventWithSerializer.java index 9cdd6a0fab..c359b5c846 100644 --- a/jackson/src/test/java/org/baeldung/jackson/date/EventWithSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/date/EventWithSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.date; +package com.baeldung.jackson.date; import java.util.Date; diff --git a/jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializer.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializer.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializer.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializer.java index baf5b945e7..3be6685103 100644 --- a/jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializer.java @@ -1,9 +1,9 @@ -package org.baeldung.jackson.deserialization; +package com.baeldung.jackson.deserialization; import java.io.IOException; -import org.baeldung.jackson.dtos.Item; -import org.baeldung.jackson.dtos.User; +import com.baeldung.jackson.dtos.User; +import com.baeldung.jackson.dtos.Item; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializerOnClass.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializerOnClass.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializerOnClass.java rename to jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializerOnClass.java index 346f75db07..169a5c1c50 100644 --- a/jackson/src/test/java/org/baeldung/jackson/deserialization/ItemDeserializerOnClass.java +++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/ItemDeserializerOnClass.java @@ -1,9 +1,9 @@ -package org.baeldung.jackson.deserialization; +package com.baeldung.jackson.deserialization; import java.io.IOException; -import org.baeldung.jackson.dtos.ItemWithSerializer; -import org.baeldung.jackson.dtos.User; +import com.baeldung.jackson.dtos.ItemWithSerializer; +import com.baeldung.jackson.dtos.User; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/Item.java b/jackson/src/test/java/com/baeldung/jackson/dtos/Item.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/dtos/Item.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/Item.java index 1dd840372a..6fce2bc88e 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/Item.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/Item.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; public class Item { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ItemWithSerializer.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ItemWithSerializer.java similarity index 81% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ItemWithSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ItemWithSerializer.java index 6dadfa4908..aea9aa770d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ItemWithSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ItemWithSerializer.java @@ -1,7 +1,7 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; -import org.baeldung.jackson.deserialization.ItemDeserializerOnClass; -import org.baeldung.jackson.serialization.ItemSerializerOnClass; +import com.baeldung.jackson.deserialization.ItemDeserializerOnClass; +import com.baeldung.jackson.serialization.ItemSerializerOnClass; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDto.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDto.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDto.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDto.java index 668eea3fcc..49cf07baea 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDto.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDto.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; public class MyDto { diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoFieldNameChanged.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoFieldNameChanged.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoFieldNameChanged.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoFieldNameChanged.java index 9c4086a965..ce7086f1fe 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoFieldNameChanged.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoFieldNameChanged.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java index b99d793363..ca03a8be62 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoIncludeNonDefault.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessors.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessors.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessors.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessors.java index 6e88f5a2db..6e9abc90ae 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessors.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessors.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; public class MyDtoNoAccessors { diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java index 1723a71230..149969f769 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoNoAccessorsAndFieldVisibility.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoWithFilter.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoWithFilter.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoWithFilter.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoWithFilter.java index 03d7edf985..91f5e148b2 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyDtoWithFilter.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyDtoWithFilter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; import com.fasterxml.jackson.annotation.JsonFilter; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/MyMixInForString.java b/jackson/src/test/java/com/baeldung/jackson/dtos/MyMixInForString.java similarity index 76% rename from jackson/src/test/java/org/baeldung/jackson/dtos/MyMixInForString.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/MyMixInForString.java index 3d5228139e..b386541df6 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/MyMixInForString.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/MyMixInForString.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; import com.fasterxml.jackson.annotation.JsonIgnoreType; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/User.java b/jackson/src/test/java/com/baeldung/jackson/dtos/User.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/dtos/User.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/User.java index cef29f11b4..2418e8070d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/User.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/User.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos; +package com.baeldung.jackson.dtos; public class User { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java index 4e3aecd0d2..f573501e85 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreField.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.ignore; +package com.baeldung.jackson.dtos.ignore; import com.fasterxml.jackson.annotation.JsonIgnore; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java index d752e0576d..e7b8ea2a8e 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreFieldByName.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.ignore; +package com.baeldung.jackson.dtos.ignore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java index 0e28e43024..bc443500a1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreNull.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.ignore; +package com.baeldung.jackson.dtos.ignore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java index 58876aec79..3c813145f6 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreType.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.ignore; +package com.baeldung.jackson.dtos.ignore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java index ca702343eb..c1174a12f5 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/ignore/MyDtoIgnoreUnknown.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.ignore; +package com.baeldung.jackson.dtos.ignore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java index aa05539b89..258eb6febd 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnum.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; public class MyDtoWithEnum { diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java index b58ea4bd15..676e22686e 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/MyDtoWithEnumCustom.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; public class MyDtoWithEnumCustom { diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnum.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnum.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnum.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnum.java index 316fdb12e7..e0c9718330 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnum.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnum.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; import com.fasterxml.jackson.annotation.JsonFormat; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java index b76a5740ec..477db67069 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumSimple.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; public enum TypeEnumSimple { TYPE1(1, "Type A"), TYPE2(2, "Type 2"); diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java index 7e004d2d7d..e7c2859dd1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithCustomSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; import com.fasterxml.jackson.databind.annotation.JsonSerialize; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java index cf104df473..c5ddf222ff 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeEnumWithValue.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; import com.fasterxml.jackson.annotation.JsonValue; diff --git a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeSerializer.java b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeSerializer.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeSerializer.java index 8aa7e5c551..c5d5d7e0a8 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dtos/withEnum/TypeSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/dtos/withEnum/TypeSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dtos.withEnum; +package com.baeldung.jackson.dtos.withEnum; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Address.java b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Address.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Address.java rename to jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Address.java index 41ea8e7be3..c2d2e84d45 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Address.java +++ b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Address.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dynamicIgnore; +package com.baeldung.jackson.dynamicIgnore; public class Address implements Hidable { diff --git a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Hidable.java b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Hidable.java similarity index 77% rename from jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Hidable.java rename to jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Hidable.java index 9eaa0c9619..edca786432 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Hidable.java +++ b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Hidable.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dynamicIgnore; +package com.baeldung.jackson.dynamicIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/HidableSerializer.java b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/HidableSerializer.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/HidableSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/HidableSerializer.java index 35bd8fd7f6..46396dae2a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/HidableSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/HidableSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dynamicIgnore; +package com.baeldung.jackson.dynamicIgnore; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Person.java b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Person.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Person.java rename to jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Person.java index 5fe294a5e1..366f611edf 100644 --- a/jackson/src/test/java/org/baeldung/jackson/dynamicIgnore/Person.java +++ b/jackson/src/test/java/com/baeldung/jackson/dynamicIgnore/Person.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.dynamicIgnore; +package com.baeldung.jackson.dynamicIgnore; public class Person implements Hidable { diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/User.java b/jackson/src/test/java/com/baeldung/jackson/exception/User.java similarity index 81% rename from jackson/src/test/java/org/baeldung/jackson/exception/User.java rename to jackson/src/test/java/com/baeldung/jackson/exception/User.java index 764d5872ad..1d78e82bec 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/User.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/User.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; public class User { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithConflict.java b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithConflict.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/exception/UserWithConflict.java rename to jackson/src/test/java/com/baeldung/jackson/exception/UserWithConflict.java index 79d4199e91..01ff695475 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithConflict.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithConflict.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; public class UserWithConflict { public int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithPrivateFields.java b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithPrivateFields.java similarity index 86% rename from jackson/src/test/java/org/baeldung/jackson/exception/UserWithPrivateFields.java rename to jackson/src/test/java/com/baeldung/jackson/exception/UserWithPrivateFields.java index 707623bbb2..f627975184 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithPrivateFields.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithPrivateFields.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; public class UserWithPrivateFields { int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithRoot.java b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithRoot.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/exception/UserWithRoot.java rename to jackson/src/test/java/com/baeldung/jackson/exception/UserWithRoot.java index 2cf78e0365..d879c16e6a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/UserWithRoot.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/UserWithRoot.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; import com.fasterxml.jackson.annotation.JsonRootName; diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/Zoo.java b/jackson/src/test/java/com/baeldung/jackson/exception/Zoo.java similarity index 84% rename from jackson/src/test/java/org/baeldung/jackson/exception/Zoo.java rename to jackson/src/test/java/com/baeldung/jackson/exception/Zoo.java index 79c24569f2..647b5955c0 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/Zoo.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/Zoo.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; public class Zoo { public Animal animal; diff --git a/jackson/src/test/java/org/baeldung/jackson/exception/ZooConfigured.java b/jackson/src/test/java/com/baeldung/jackson/exception/ZooConfigured.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/exception/ZooConfigured.java rename to jackson/src/test/java/com/baeldung/jackson/exception/ZooConfigured.java index 776b702acb..f51b1e150a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/exception/ZooConfigured.java +++ b/jackson/src/test/java/com/baeldung/jackson/exception/ZooConfigured.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.exception; +package com.baeldung.jackson.exception; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; diff --git a/jackson/src/test/java/org/baeldung/jackson/field/MyDto.java b/jackson/src/test/java/com/baeldung/jackson/field/MyDto.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/field/MyDto.java rename to jackson/src/test/java/com/baeldung/jackson/field/MyDto.java index edfc9d2f91..f19371937d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/field/MyDto.java +++ b/jackson/src/test/java/com/baeldung/jackson/field/MyDto.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.field; +package com.baeldung.jackson.field; public class MyDto { diff --git a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoAccessLevel.java b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoAccessLevel.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/field/MyDtoAccessLevel.java rename to jackson/src/test/java/com/baeldung/jackson/field/MyDtoAccessLevel.java index c164b00e4a..df16720038 100644 --- a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoAccessLevel.java +++ b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoAccessLevel.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.field; +package com.baeldung.jackson.field; public class MyDtoAccessLevel { diff --git a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithGetter.java b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithGetter.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithGetter.java rename to jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithGetter.java index 0f15b2fcc3..4ea20b93c1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithGetter.java +++ b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithGetter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.field; +package com.baeldung.jackson.field; public class MyDtoWithGetter { diff --git a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithSetter.java b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithSetter.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithSetter.java rename to jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithSetter.java index e37793492e..fd3f6790a3 100644 --- a/jackson/src/test/java/org/baeldung/jackson/field/MyDtoWithSetter.java +++ b/jackson/src/test/java/com/baeldung/jackson/field/MyDtoWithSetter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.field; +package com.baeldung.jackson.field; public class MyDtoWithSetter { diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceAnnotationStructure.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceAnnotationStructure.java new file mode 100644 index 0000000000..520929463c --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceAnnotationStructure.java @@ -0,0 +1,96 @@ +package com.baeldung.jackson.inheritance; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +public class IgnoranceAnnotationStructure { + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle() { + } + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + @JsonIgnoreProperties({ "model", "seatingCapacity" }) + public static abstract class Car extends Vehicle { + private int seatingCapacity; + @JsonIgnore + private double topSpeed; + + protected Car() { + } + + protected Car(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Sedan extends Car { + public Sedan() { + } + + public Sedan(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model, seatingCapacity, topSpeed); + } + } + + public static class Crossover extends Car { + private double towingCapacity; + + public Crossover() { + } + + public Crossover(String make, String model, int seatingCapacity, double topSpeed, double towingCapacity) { + super(make, model, seatingCapacity, topSpeed); + this.towingCapacity = towingCapacity; + } + + public double getTowingCapacity() { + return towingCapacity; + } + + public void setTowingCapacity(double towingCapacity) { + this.towingCapacity = towingCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceMixinOrIntrospection.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceMixinOrIntrospection.java new file mode 100644 index 0000000000..52c0bbea5e --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceMixinOrIntrospection.java @@ -0,0 +1,91 @@ +package com.baeldung.jackson.inheritance; + +public class IgnoranceMixinOrIntrospection { + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle() { + } + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + public static abstract class Car extends Vehicle { + private int seatingCapacity; + private double topSpeed; + + protected Car() { + } + + protected Car(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Sedan extends Car { + public Sedan() { + } + + public Sedan(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model, seatingCapacity, topSpeed); + } + } + + public static class Crossover extends Car { + private double towingCapacity; + + public Crossover() { + } + + public Crossover(String make, String model, int seatingCapacity, double topSpeed, double towingCapacity) { + super(make, model, seatingCapacity, topSpeed); + this.towingCapacity = towingCapacity; + } + + public double getTowingCapacity() { + return towingCapacity; + } + + public void setTowingCapacity(double towingCapacity) { + this.towingCapacity = towingCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceTest.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceTest.java new file mode 100644 index 0000000000..8d22f471a6 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/IgnoranceTest.java @@ -0,0 +1,92 @@ +package com.baeldung.jackson.inheritance; + +import static org.junit.Assert.assertThat; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; + +import org.junit.Test; + +import java.util.List; +import java.util.ArrayList; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.introspect.AnnotatedMember; +import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; + +public class IgnoranceTest { + private static abstract class CarMixIn { + @JsonIgnore + public String make; + @JsonIgnore + public String topSpeed; + } + + private static class IgnoranceIntrospector extends JacksonAnnotationIntrospector { + private static final long serialVersionUID = 1422295680188892323L; + + public boolean hasIgnoreMarker(AnnotatedMember m) { + return m.getDeclaringClass() == IgnoranceMixinOrIntrospection.Vehicle.class && m.getName() == "model" || m.getDeclaringClass() == IgnoranceMixinOrIntrospection.Car.class || m.getName() == "towingCapacity" || super.hasIgnoreMarker(m); + } + } + + @Test + public void givenAnnotations_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + + IgnoranceAnnotationStructure.Sedan sedan = new IgnoranceAnnotationStructure.Sedan("Mercedes-Benz", "S500", 5, 250.0); + IgnoranceAnnotationStructure.Crossover crossover = new IgnoranceAnnotationStructure.Crossover("BMW", "X6", 5, 250.0, 6000.0); + + List vehicles = new ArrayList<>(); + vehicles.add(sedan); + vehicles.add(crossover); + + String jsonDataString = mapper.writeValueAsString(vehicles); + + assertThat(jsonDataString, containsString("make")); + assertThat(jsonDataString, not(containsString("model"))); + assertThat(jsonDataString, not(containsString("seatingCapacity"))); + assertThat(jsonDataString, not(containsString("topSpeed"))); + assertThat(jsonDataString, containsString("towingCapacity")); + } + + @Test + public void givenMixIns_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.addMixIn(IgnoranceMixinOrIntrospection.Car.class, CarMixIn.class); + + String jsonDataString = instantiateAndSerializeObjects(mapper); + + assertThat(jsonDataString, not(containsString("make"))); + assertThat(jsonDataString, containsString("model")); + assertThat(jsonDataString, containsString("seatingCapacity")); + assertThat(jsonDataString, not(containsString("topSpeed"))); + assertThat(jsonDataString, containsString("towingCapacity")); + } + + @Test + public void givenIntrospection_whenIgnoringProperties_thenCorrect() throws JsonProcessingException { + ObjectMapper mapper = new ObjectMapper(); + mapper.setAnnotationIntrospector(new IgnoranceIntrospector()); + + String jsonDataString = instantiateAndSerializeObjects(mapper); + + assertThat(jsonDataString, containsString("make")); + assertThat(jsonDataString, not(containsString("model"))); + assertThat(jsonDataString, not(containsString("seatingCapacity"))); + assertThat(jsonDataString, not(containsString("topSpeed"))); + assertThat(jsonDataString, not(containsString("towingCapacity"))); + } + + private String instantiateAndSerializeObjects(ObjectMapper mapper) throws JsonProcessingException { + IgnoranceMixinOrIntrospection.Sedan sedan = new IgnoranceMixinOrIntrospection.Sedan("Mercedes-Benz", "S500", 5, 250.0); + IgnoranceMixinOrIntrospection.Crossover crossover = new IgnoranceMixinOrIntrospection.Crossover("BMW", "X6", 5, 250.0, 6000.0); + + List vehicles = new ArrayList<>(); + vehicles.add(sedan); + vehicles.add(crossover); + + return mapper.writeValueAsString(vehicles); + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConstructorStructure.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConstructorStructure.java new file mode 100644 index 0000000000..8a8db8ae47 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConstructorStructure.java @@ -0,0 +1,92 @@ +package com.baeldung.jackson.inheritance; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class SubTypeConstructorStructure { + public static class Fleet { + private List vehicles; + + public List getVehicles() { + return vehicles; + } + + public void setVehicles(List vehicles) { + this.vehicles = vehicles; + } + } + + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + public static class Car extends Vehicle { + private int seatingCapacity; + private double topSpeed; + + @JsonCreator + public Car(@JsonProperty("make") String make, @JsonProperty("model") String model, @JsonProperty("seating") int seatingCapacity, @JsonProperty("topSpeed") double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Truck extends Vehicle { + private double payloadCapacity; + + @JsonCreator + public Truck(@JsonProperty("make") String make, @JsonProperty("model") String model, @JsonProperty("payload") double payloadCapacity) { + super(make, model); + this.payloadCapacity = payloadCapacity; + } + + public double getPayloadCapacity() { + return payloadCapacity; + } + + public void setPayloadCapacity(double payloadCapacity) { + this.payloadCapacity = payloadCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConversionStructure.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConversionStructure.java new file mode 100644 index 0000000000..346fd65eef --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeConversionStructure.java @@ -0,0 +1,87 @@ +package com.baeldung.jackson.inheritance; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class SubTypeConversionStructure { + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle() { + } + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + public static class Car extends Vehicle { + @JsonIgnore + private int seatingCapacity; + @JsonIgnore + private double topSpeed; + + public Car() { + } + + public Car(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Truck extends Vehicle { + @JsonIgnore + private double payloadCapacity; + + public Truck() { + } + + public Truck(String make, String model, double payloadCapacity) { + super(make, model); + this.payloadCapacity = payloadCapacity; + } + + public double getPayloadCapacity() { + return payloadCapacity; + } + + public void setPayloadCapacity(double payloadCapacity) { + this.payloadCapacity = payloadCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingTest.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingTest.java new file mode 100644 index 0000000000..2d4c8fe698 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingTest.java @@ -0,0 +1,43 @@ +package com.baeldung.jackson.inheritance; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import java.util.List; +import java.util.ArrayList; +import java.io.IOException; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class SubTypeHandlingTest { + @Test + public void givenSubTypes_whenConvertingObjects_thenDataValuesArePreserved() { + ObjectMapper mapper = new ObjectMapper(); + + SubTypeConversionStructure.Car car = new SubTypeConversionStructure.Car("Mercedes-Benz", "S500", 5, 250.0); + SubTypeConversionStructure.Truck truck = mapper.convertValue(car, SubTypeConversionStructure.Truck.class); + + assertEquals("Mercedes-Benz", truck.getMake()); + assertEquals("S500", truck.getModel()); + } + + @Test + public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException{ + ObjectMapper mapper = new ObjectMapper(); + mapper.enableDefaultTyping(); + + SubTypeConstructorStructure.Car car = new SubTypeConstructorStructure.Car("Mercedes-Benz", "S500", 5, 250.0); + SubTypeConstructorStructure.Truck truck = new SubTypeConstructorStructure.Truck("Isuzu", "NQR", 7500.0); + + List vehicles = new ArrayList<>(); + vehicles.add(car); + vehicles.add(truck); + + SubTypeConstructorStructure.Fleet serializedFleet = new SubTypeConstructorStructure.Fleet(); + serializedFleet.setVehicles(vehicles); + + String jsonDataString = mapper.writeValueAsString(serializedFleet); + mapper.readValue(jsonDataString, SubTypeConstructorStructure.Fleet.class); + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoAnnotatedStructure.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoAnnotatedStructure.java new file mode 100644 index 0000000000..cb552a7b80 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoAnnotatedStructure.java @@ -0,0 +1,102 @@ +package com.baeldung.jackson.inheritance; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonSubTypes.Type; + +public class TypeInfoAnnotatedStructure { + public static class Fleet { + private List vehicles; + + public List getVehicles() { + return vehicles; + } + + public void setVehicles(List vehicles) { + this.vehicles = vehicles; + } + } + + @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") + @JsonSubTypes({ @Type(value = Car.class, name = "car"), @Type(value = Truck.class, name = "truck") }) + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle() { + } + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + public static class Car extends Vehicle { + private int seatingCapacity; + private double topSpeed; + + public Car() { + } + + public Car(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Truck extends Vehicle { + private double payloadCapacity; + + public Truck() { + } + + public Truck(String make, String model, double payloadCapacity) { + super(make, model); + this.payloadCapacity = payloadCapacity; + } + + public double getPayloadCapacity() { + return payloadCapacity; + } + + public void setPayloadCapacity(double payloadCapacity) { + this.payloadCapacity = payloadCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionTest.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionTest.java new file mode 100644 index 0000000000..aefbc172d0 --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionTest.java @@ -0,0 +1,57 @@ +package com.baeldung.jackson.inheritance; + +import static org.junit.Assert.assertThat; +import static org.hamcrest.CoreMatchers.instanceOf; + +import org.junit.Test; + +import java.util.List; +import java.util.ArrayList; +import java.io.IOException; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class TypeInfoInclusionTest { + @Test + public void givenTypeInfo_whenAnnotatingGlobally_thenTypesAreCorrectlyRecovered() throws IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.enableDefaultTyping(); + + TypeInfoStructure.Car car = new TypeInfoStructure.Car("Mercedes-Benz", "S500", 5, 250.0); + TypeInfoStructure.Truck truck = new TypeInfoStructure.Truck("Isuzu", "NQR", 7500.0); + + List vehicles = new ArrayList<>(); + vehicles.add(car); + vehicles.add(truck); + + TypeInfoStructure.Fleet serializedFleet = new TypeInfoStructure.Fleet(); + serializedFleet.setVehicles(vehicles); + + String jsonDataString = mapper.writeValueAsString(serializedFleet); + TypeInfoStructure.Fleet deserializedFleet = mapper.readValue(jsonDataString, TypeInfoStructure.Fleet.class); + + assertThat(deserializedFleet.getVehicles().get(0), instanceOf(TypeInfoStructure.Car.class)); + assertThat(deserializedFleet.getVehicles().get(1), instanceOf(TypeInfoStructure.Truck.class)); + } + + @Test + public void givenTypeInfo_whenAnnotatingPerClass_thenTypesAreCorrectlyRecovered() throws IOException { + ObjectMapper mapper = new ObjectMapper(); + + TypeInfoAnnotatedStructure.Car car = new TypeInfoAnnotatedStructure.Car("Mercedes-Benz", "S500", 5, 250.0); + TypeInfoAnnotatedStructure.Truck truck = new TypeInfoAnnotatedStructure.Truck("Isuzu", "NQR", 7500.0); + + List vehicles = new ArrayList<>(); + vehicles.add(car); + vehicles.add(truck); + + TypeInfoAnnotatedStructure.Fleet serializedFleet = new TypeInfoAnnotatedStructure.Fleet(); + serializedFleet.setVehicles(vehicles); + + String jsonDataString = mapper.writeValueAsString(serializedFleet); + TypeInfoAnnotatedStructure.Fleet deserializedFleet = mapper.readValue(jsonDataString, TypeInfoAnnotatedStructure.Fleet.class); + + assertThat(deserializedFleet.getVehicles().get(0), instanceOf(TypeInfoAnnotatedStructure.Car.class)); + assertThat(deserializedFleet.getVehicles().get(1), instanceOf(TypeInfoAnnotatedStructure.Truck.class)); + } +} \ No newline at end of file diff --git a/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoStructure.java b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoStructure.java new file mode 100644 index 0000000000..5c5186dfcc --- /dev/null +++ b/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoStructure.java @@ -0,0 +1,96 @@ +package com.baeldung.jackson.inheritance; + +import java.util.List; + +public class TypeInfoStructure { + public static class Fleet { + private List vehicles; + + public List getVehicles() { + return vehicles; + } + + public void setVehicles(List vehicles) { + this.vehicles = vehicles; + } + } + + public static abstract class Vehicle { + private String make; + private String model; + + protected Vehicle() { + } + + protected Vehicle(String make, String model) { + this.make = make; + this.model = model; + } + + public String getMake() { + return make; + } + + public void setMake(String make) { + this.make = make; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + } + + public static class Car extends Vehicle { + private int seatingCapacity; + private double topSpeed; + + public Car() { + } + + public Car(String make, String model, int seatingCapacity, double topSpeed) { + super(make, model); + this.seatingCapacity = seatingCapacity; + this.topSpeed = topSpeed; + } + + public int getSeatingCapacity() { + return seatingCapacity; + } + + public void setSeatingCapacity(int seatingCapacity) { + this.seatingCapacity = seatingCapacity; + } + + public double getTopSpeed() { + return topSpeed; + } + + public void setTopSpeed(double topSpeed) { + this.topSpeed = topSpeed; + } + } + + public static class Truck extends Vehicle { + private double payloadCapacity; + + public Truck() { + } + + public Truck(String make, String model, double payloadCapacity) { + super(make, model); + this.payloadCapacity = payloadCapacity; + } + + public double getPayloadCapacity() { + return payloadCapacity; + } + + public void setPayloadCapacity(double payloadCapacity) { + this.payloadCapacity = payloadCapacity; + } + } +} \ No newline at end of file diff --git a/jackson/src/test/java/org/baeldung/jackson/jsonview/Item.java b/jackson/src/test/java/com/baeldung/jackson/jsonview/Item.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/jsonview/Item.java rename to jackson/src/test/java/com/baeldung/jackson/jsonview/Item.java index 5705f810af..26d20d4847 100644 --- a/jackson/src/test/java/org/baeldung/jackson/jsonview/Item.java +++ b/jackson/src/test/java/com/baeldung/jackson/jsonview/Item.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.jsonview; +package com.baeldung.jackson.jsonview; import com.fasterxml.jackson.annotation.JsonView; diff --git a/jackson/src/test/java/org/baeldung/jackson/jsonview/MyBeanSerializerModifier.java b/jackson/src/test/java/com/baeldung/jackson/jsonview/MyBeanSerializerModifier.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/jsonview/MyBeanSerializerModifier.java rename to jackson/src/test/java/com/baeldung/jackson/jsonview/MyBeanSerializerModifier.java index 0986e5ea76..3b94c13d8b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/jsonview/MyBeanSerializerModifier.java +++ b/jackson/src/test/java/com/baeldung/jackson/jsonview/MyBeanSerializerModifier.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.jsonview; +package com.baeldung.jackson.jsonview; import java.util.List; diff --git a/jackson/src/test/java/org/baeldung/jackson/jsonview/UpperCasingWriter.java b/jackson/src/test/java/com/baeldung/jackson/jsonview/UpperCasingWriter.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/jsonview/UpperCasingWriter.java rename to jackson/src/test/java/com/baeldung/jackson/jsonview/UpperCasingWriter.java index 948fb36cda..3a69d66a05 100644 --- a/jackson/src/test/java/org/baeldung/jackson/jsonview/UpperCasingWriter.java +++ b/jackson/src/test/java/com/baeldung/jackson/jsonview/UpperCasingWriter.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.jsonview; +package com.baeldung.jackson.jsonview; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; diff --git a/jackson/src/test/java/org/baeldung/jackson/jsonview/User.java b/jackson/src/test/java/com/baeldung/jackson/jsonview/User.java similarity index 91% rename from jackson/src/test/java/org/baeldung/jackson/jsonview/User.java rename to jackson/src/test/java/com/baeldung/jackson/jsonview/User.java index 5850dcbe84..48353fe4e4 100644 --- a/jackson/src/test/java/org/baeldung/jackson/jsonview/User.java +++ b/jackson/src/test/java/com/baeldung/jackson/jsonview/User.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.jsonview; +package com.baeldung.jackson.jsonview; import com.fasterxml.jackson.annotation.JsonView; diff --git a/jackson/src/test/java/org/baeldung/jackson/jsonview/Views.java b/jackson/src/test/java/com/baeldung/jackson/jsonview/Views.java similarity index 75% rename from jackson/src/test/java/org/baeldung/jackson/jsonview/Views.java rename to jackson/src/test/java/com/baeldung/jackson/jsonview/Views.java index 0a430ad123..65950b7f9f 100644 --- a/jackson/src/test/java/org/baeldung/jackson/jsonview/Views.java +++ b/jackson/src/test/java/com/baeldung/jackson/jsonview/Views.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.jsonview; +package com.baeldung.jackson.jsonview; public class Views { public static class Public { diff --git a/jackson/src/test/java/org/baeldung/jackson/node/ExampleStructure.java b/jackson/src/test/java/com/baeldung/jackson/node/ExampleStructure.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/node/ExampleStructure.java rename to jackson/src/test/java/com/baeldung/jackson/node/ExampleStructure.java index 0eb15f3bb8..14f9024d0b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/node/ExampleStructure.java +++ b/jackson/src/test/java/com/baeldung/jackson/node/ExampleStructure.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.node; +package com.baeldung.jackson.node; import java.io.IOException; import java.io.InputStream; diff --git a/jackson/src/test/java/org/baeldung/jackson/node/NodeBean.java b/jackson/src/test/java/com/baeldung/jackson/node/NodeBean.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/node/NodeBean.java rename to jackson/src/test/java/com/baeldung/jackson/node/NodeBean.java index 7d54a6140e..da5ffece51 100644 --- a/jackson/src/test/java/org/baeldung/jackson/node/NodeBean.java +++ b/jackson/src/test/java/com/baeldung/jackson/node/NodeBean.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.node; +package com.baeldung.jackson.node; public class NodeBean { private int id; diff --git a/jackson/src/test/java/org/baeldung/jackson/node/NodeOperationTest.java b/jackson/src/test/java/com/baeldung/jackson/node/NodeOperationTest.java similarity index 99% rename from jackson/src/test/java/org/baeldung/jackson/node/NodeOperationTest.java rename to jackson/src/test/java/com/baeldung/jackson/node/NodeOperationTest.java index c1398b2165..2fcb828613 100644 --- a/jackson/src/test/java/org/baeldung/jackson/node/NodeOperationTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/node/NodeOperationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.node; +package com.baeldung.jackson.node; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertEquals; diff --git a/jackson/src/test/java/org/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java similarity index 97% rename from jackson/src/test/java/org/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java index 58dcec51f6..a68af20f15 100644 --- a/jackson/src/test/java/org/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/sandbox/JacksonPrettyPrintUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.sandbox; +package com.baeldung.jackson.sandbox; import java.io.File; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/sandbox/SandboxTest.java b/jackson/src/test/java/com/baeldung/jackson/sandbox/SandboxTest.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/sandbox/SandboxTest.java rename to jackson/src/test/java/com/baeldung/jackson/sandbox/SandboxTest.java index 19491377e8..958a7eec98 100644 --- a/jackson/src/test/java/org/baeldung/jackson/sandbox/SandboxTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/sandbox/SandboxTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.sandbox; +package com.baeldung.jackson.sandbox; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/sandbox/TestElement.java b/jackson/src/test/java/com/baeldung/jackson/sandbox/TestElement.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/sandbox/TestElement.java rename to jackson/src/test/java/com/baeldung/jackson/sandbox/TestElement.java index 3b6a852b6b..82f53fcf4a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/sandbox/TestElement.java +++ b/jackson/src/test/java/com/baeldung/jackson/sandbox/TestElement.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.sandbox; +package com.baeldung.jackson.sandbox; public class TestElement { diff --git a/jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializer.java b/jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializer.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializer.java rename to jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializer.java index 7a1362a416..cb93f9cb03 100644 --- a/jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializer.java @@ -1,8 +1,8 @@ -package org.baeldung.jackson.serialization; +package com.baeldung.jackson.serialization; import java.io.IOException; -import org.baeldung.jackson.dtos.Item; +import com.baeldung.jackson.dtos.Item; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializerOnClass.java b/jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializerOnClass.java similarity index 88% rename from jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializerOnClass.java rename to jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializerOnClass.java index 44060cabb9..79b450d7f1 100644 --- a/jackson/src/test/java/org/baeldung/jackson/serialization/ItemSerializerOnClass.java +++ b/jackson/src/test/java/com/baeldung/jackson/serialization/ItemSerializerOnClass.java @@ -1,8 +1,8 @@ -package org.baeldung.jackson.serialization; +package com.baeldung.jackson.serialization; import java.io.IOException; -import org.baeldung.jackson.dtos.ItemWithSerializer; +import com.baeldung.jackson.dtos.ItemWithSerializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/serialization/MyDtoNullKeySerializer.java b/jackson/src/test/java/com/baeldung/jackson/serialization/MyDtoNullKeySerializer.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/serialization/MyDtoNullKeySerializer.java rename to jackson/src/test/java/com/baeldung/jackson/serialization/MyDtoNullKeySerializer.java index 8219abaddf..e915378498 100644 --- a/jackson/src/test/java/org/baeldung/jackson/serialization/MyDtoNullKeySerializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/serialization/MyDtoNullKeySerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.serialization; +package com.baeldung.jackson.serialization; import java.io.IOException; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonAnnotationTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonAnnotationTest.java similarity index 90% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonAnnotationTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonAnnotationTest.java index c188e9bce1..74fbd021a0 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonAnnotationTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonAnnotationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; @@ -12,31 +12,32 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; -import org.baeldung.jackson.annotation.BeanWithCreator; -import org.baeldung.jackson.annotation.BeanWithCustomAnnotation; -import org.baeldung.jackson.annotation.BeanWithFilter; -import org.baeldung.jackson.annotation.BeanWithGetter; -import org.baeldung.jackson.annotation.BeanWithIgnore; -import org.baeldung.jackson.annotation.BeanWithInject; -import org.baeldung.jackson.annotation.ExtendableBean; -import org.baeldung.jackson.annotation.MyBean; -import org.baeldung.jackson.annotation.PrivateBean; -import org.baeldung.jackson.annotation.RawBean; -import org.baeldung.jackson.annotation.UnwrappedUser; -import org.baeldung.jackson.annotation.UserWithIgnoreType; -import org.baeldung.jackson.annotation.Zoo; -import org.baeldung.jackson.bidirection.ItemWithIdentity; -import org.baeldung.jackson.bidirection.ItemWithRef; -import org.baeldung.jackson.bidirection.UserWithIdentity; -import org.baeldung.jackson.bidirection.UserWithRef; -import org.baeldung.jackson.date.EventWithFormat; -import org.baeldung.jackson.date.EventWithSerializer; -import org.baeldung.jackson.dtos.MyMixInForString; -import org.baeldung.jackson.dtos.User; -import org.baeldung.jackson.dtos.withEnum.TypeEnumWithValue; -import org.baeldung.jackson.exception.UserWithRoot; -import org.baeldung.jackson.jsonview.Item; -import org.baeldung.jackson.jsonview.Views; +import com.baeldung.jackson.bidirection.ItemWithIdentity; +import com.baeldung.jackson.bidirection.ItemWithRef; +import com.baeldung.jackson.bidirection.UserWithRef; +import com.baeldung.jackson.dtos.User; +import com.baeldung.jackson.dtos.withEnum.TypeEnumWithValue; +import com.baeldung.jackson.annotation.BeanWithCreator; +import com.baeldung.jackson.annotation.BeanWithCustomAnnotation; +import com.baeldung.jackson.annotation.BeanWithFilter; +import com.baeldung.jackson.annotation.BeanWithGetter; +import com.baeldung.jackson.annotation.BeanWithIgnore; +import com.baeldung.jackson.annotation.BeanWithInject; +import com.baeldung.jackson.annotation.ExtendableBean; +import com.baeldung.jackson.annotation.MyBean; +import com.baeldung.jackson.annotation.PrivateBean; +import com.baeldung.jackson.annotation.RawBean; +import com.baeldung.jackson.annotation.UnwrappedUser; +import com.baeldung.jackson.annotation.UserWithIgnoreType; +import com.baeldung.jackson.annotation.Zoo; +import com.baeldung.jackson.bidirection.UserWithIdentity; +import com.baeldung.jackson.date.EventWithFormat; +import com.baeldung.jackson.date.EventWithSerializer; +import com.baeldung.jackson.dtos.MyMixInForString; +import com.baeldung.jackson.exception.UserWithRoot; +import com.baeldung.jackson.jsonview.Item; +import com.baeldung.jackson.jsonview.Views; +import org.junit.Ignore; import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; @@ -337,6 +338,7 @@ public class JacksonAnnotationTest { assertThat(result, not(containsString("dateCreated"))); } + @Ignore("Jackson 2.7.1-1 seems to have changed the API regarding mixins") @Test public void whenSerializingUsingMixInAnnotation_thenCorrect() throws JsonProcessingException { final User user = new User(1, "John"); @@ -345,7 +347,7 @@ public class JacksonAnnotationTest { assertThat(result, containsString("John")); final ObjectMapper mapper = new ObjectMapper(); - mapper.addMixInAnnotations(String.class, MyMixInForString.class); + mapper.addMixIn(String.class, MyMixInForString.class); result = mapper.writeValueAsString(user); assertThat(result, not(containsString("John"))); diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonBidirectionRelationTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonBidirectionRelationTest.java similarity index 87% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonBidirectionRelationTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonBidirectionRelationTest.java index f7f687da96..971b40406a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonBidirectionRelationTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonBidirectionRelationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; @@ -7,19 +7,19 @@ import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.bidirection.Item; -import org.baeldung.jackson.bidirection.ItemWithIdentity; -import org.baeldung.jackson.bidirection.ItemWithIgnore; -import org.baeldung.jackson.bidirection.ItemWithRef; -import org.baeldung.jackson.bidirection.ItemWithSerializer; -import org.baeldung.jackson.bidirection.ItemWithView; -import org.baeldung.jackson.bidirection.User; -import org.baeldung.jackson.bidirection.UserWithIdentity; -import org.baeldung.jackson.bidirection.UserWithIgnore; -import org.baeldung.jackson.bidirection.UserWithRef; -import org.baeldung.jackson.bidirection.UserWithSerializer; -import org.baeldung.jackson.bidirection.UserWithView; -import org.baeldung.jackson.jsonview.Views; +import com.baeldung.jackson.bidirection.Item; +import com.baeldung.jackson.bidirection.ItemWithIdentity; +import com.baeldung.jackson.bidirection.ItemWithIgnore; +import com.baeldung.jackson.bidirection.ItemWithRef; +import com.baeldung.jackson.bidirection.ItemWithSerializer; +import com.baeldung.jackson.bidirection.ItemWithView; +import com.baeldung.jackson.bidirection.User; +import com.baeldung.jackson.bidirection.UserWithIdentity; +import com.baeldung.jackson.bidirection.UserWithIgnore; +import com.baeldung.jackson.bidirection.UserWithRef; +import com.baeldung.jackson.bidirection.UserWithSerializer; +import com.baeldung.jackson.bidirection.UserWithView; +import com.baeldung.jackson.jsonview.Views; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java similarity index 97% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java index c3d8153546..cd166386e6 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonCollectionDeserializationUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.instanceOf; import static org.junit.Assert.assertThat; @@ -7,7 +7,7 @@ import java.io.IOException; import java.util.LinkedHashMap; import java.util.List; -import org.baeldung.jackson.dtos.MyDto; +import com.baeldung.jackson.dtos.MyDto; import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDateTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateTest.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonDateTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonDateTest.java index fc7f7730b8..50ec50b668 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDateTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; @@ -11,11 +11,11 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.TimeZone; -import org.baeldung.jackson.date.Event; -import org.baeldung.jackson.date.EventWithFormat; -import org.baeldung.jackson.date.EventWithJodaTime; -import org.baeldung.jackson.date.EventWithLocalDateTime; -import org.baeldung.jackson.date.EventWithSerializer; +import com.baeldung.jackson.date.EventWithLocalDateTime; +import com.baeldung.jackson.date.Event; +import com.baeldung.jackson.date.EventWithFormat; +import com.baeldung.jackson.date.EventWithJodaTime; +import com.baeldung.jackson.date.EventWithSerializer; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.junit.Test; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDeserializationUnitTest.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonDeserializationUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonDeserializationUnitTest.java index 2ecca664a4..45d957b90b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDeserializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDeserializationUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; @@ -7,11 +7,11 @@ import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.deserialization.ItemDeserializer; -import org.baeldung.jackson.dtos.Item; -import org.baeldung.jackson.dtos.ItemWithSerializer; -import org.baeldung.jackson.dtos.MyDto; -import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreUnknown; +import com.baeldung.jackson.deserialization.ItemDeserializer; +import com.baeldung.jackson.dtos.Item; +import com.baeldung.jackson.dtos.ItemWithSerializer; +import com.baeldung.jackson.dtos.MyDto; +import com.baeldung.jackson.dtos.ignore.MyDtoIgnoreUnknown; import org.junit.Test; import com.fasterxml.jackson.core.JsonFactory; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDynamicIgnoreTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDynamicIgnoreTest.java similarity index 93% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonDynamicIgnoreTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonDynamicIgnoreTest.java index d98f948dec..16a55f442a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonDynamicIgnoreTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDynamicIgnoreTest.java @@ -1,14 +1,14 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; -import org.baeldung.jackson.dynamicIgnore.Address; -import org.baeldung.jackson.dynamicIgnore.Hidable; -import org.baeldung.jackson.dynamicIgnore.HidableSerializer; -import org.baeldung.jackson.dynamicIgnore.Person; +import com.baeldung.jackson.dynamicIgnore.Address; +import com.baeldung.jackson.dynamicIgnore.HidableSerializer; +import com.baeldung.jackson.dynamicIgnore.Person; +import com.baeldung.jackson.dynamicIgnore.Hidable; import org.junit.Before; import org.junit.Test; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonExceptionsTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsTest.java similarity index 86% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonExceptionsTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsTest.java index aab7f9409d..90317848ce 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonExceptionsTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; @@ -7,11 +7,7 @@ import static org.junit.Assert.assertThat; import java.io.IOException; import java.util.List; -import org.baeldung.jackson.dtos.User; -import org.baeldung.jackson.exception.UserWithPrivateFields; -import org.baeldung.jackson.exception.UserWithRoot; -import org.baeldung.jackson.exception.Zoo; -import org.baeldung.jackson.exception.ZooConfigured; +import com.baeldung.jackson.exception.*; import org.junit.Test; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; @@ -71,7 +67,7 @@ public class JacksonExceptionsTest { final String json = "{\"id\":1,\"name\":\"John\"}"; final ObjectMapper mapper = new ObjectMapper(); - mapper.reader().withType(org.baeldung.jackson.exception.User.class).readValue(json); + mapper.reader().withType(User.class).readValue(json); } @Test @@ -79,7 +75,7 @@ public class JacksonExceptionsTest { final String json = "{\"id\":1,\"name\":\"John\"}"; final ObjectMapper mapper = new ObjectMapper(); - final User user = mapper.reader().withType(User.class).readValue(json); + final com.baeldung.jackson.dtos.User user = mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); assertEquals("John", user.name); } @@ -91,7 +87,7 @@ public class JacksonExceptionsTest { final ObjectMapper mapper = new ObjectMapper(); mapper.enable(DeserializationFeature.UNWRAP_ROOT_VALUE); - mapper.reader().withType(User.class).readValue(json); + mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); } @Test @@ -111,7 +107,7 @@ public class JacksonExceptionsTest { final String json = "[{\"id\":1,\"name\":\"John\"},{\"id\":2,\"name\":\"Adam\"}]"; final ObjectMapper mapper = new ObjectMapper(); - mapper.reader().withType(User.class).readValue(json); + mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); } @Test @@ -119,7 +115,7 @@ public class JacksonExceptionsTest { final String json = "[{\"id\":1,\"name\":\"John\"},{\"id\":2,\"name\":\"Adam\"}]"; final ObjectMapper mapper = new ObjectMapper(); - final List users = mapper.reader().withType(new TypeReference>() { + final List users = mapper.reader().withType(new TypeReference>() { }).readValue(json); assertEquals(2, users.size()); @@ -131,7 +127,7 @@ public class JacksonExceptionsTest { final String json = "{\"id\":1,\"name\":\"John\", \"checked\":true}"; final ObjectMapper mapper = new ObjectMapper(); - mapper.reader().withType(User.class).readValue(json); + mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); } @Test @@ -141,7 +137,7 @@ public class JacksonExceptionsTest { final ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); - final User user = mapper.reader().withType(User.class).readValue(json); + final com.baeldung.jackson.dtos.User user = mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); assertEquals("John", user.name); } @@ -151,7 +147,7 @@ public class JacksonExceptionsTest { final String json = "{'id':1,'name':'John'}"; final ObjectMapper mapper = new ObjectMapper(); - mapper.reader().withType(User.class).readValue(json); + mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); } @Test @@ -162,7 +158,7 @@ public class JacksonExceptionsTest { factory.enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); final ObjectMapper mapper = new ObjectMapper(factory); - final User user = mapper.reader().withType(User.class).readValue(json); + final com.baeldung.jackson.dtos.User user = mapper.reader().withType(com.baeldung.jackson.dtos.User.class).readValue(json); assertEquals("John", user.name); } diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonFieldUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonFieldUnitTest.java similarity index 95% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonFieldUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonFieldUnitTest.java index 53933215f5..ccc5905e88 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonFieldUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonFieldUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; @@ -8,9 +8,9 @@ import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.field.MyDtoAccessLevel; -import org.baeldung.jackson.field.MyDtoWithSetter; -import org.baeldung.jackson.field.MyDtoWithGetter; +import com.baeldung.jackson.field.MyDtoAccessLevel; +import com.baeldung.jackson.field.MyDtoWithSetter; +import com.baeldung.jackson.field.MyDtoWithGetter; import org.junit.Test; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonJsonViewTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonJsonViewTest.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonJsonViewTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonJsonViewTest.java index 276db9261c..61fa2919ac 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonJsonViewTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonJsonViewTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; @@ -7,10 +7,10 @@ import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.jsonview.Item; -import org.baeldung.jackson.jsonview.MyBeanSerializerModifier; -import org.baeldung.jackson.jsonview.User; -import org.baeldung.jackson.jsonview.Views; +import com.baeldung.jackson.jsonview.Item; +import com.baeldung.jackson.jsonview.User; +import com.baeldung.jackson.jsonview.MyBeanSerializerModifier; +import com.baeldung.jackson.jsonview.Views; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java similarity index 87% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java index d64834078a..78c6316aa6 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationEnumsUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; @@ -6,12 +6,12 @@ import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnum; -import org.baeldung.jackson.dtos.withEnum.MyDtoWithEnumCustom; -import org.baeldung.jackson.dtos.withEnum.TypeEnum; -import org.baeldung.jackson.dtos.withEnum.TypeEnumSimple; -import org.baeldung.jackson.dtos.withEnum.TypeEnumWithCustomSerializer; -import org.baeldung.jackson.dtos.withEnum.TypeEnumWithValue; +import com.baeldung.jackson.dtos.withEnum.MyDtoWithEnum; +import com.baeldung.jackson.dtos.withEnum.TypeEnum; +import com.baeldung.jackson.dtos.withEnum.TypeEnumSimple; +import com.baeldung.jackson.dtos.withEnum.TypeEnumWithValue; +import com.baeldung.jackson.dtos.withEnum.MyDtoWithEnumCustom; +import com.baeldung.jackson.dtos.withEnum.TypeEnumWithCustomSerializer; import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java similarity index 94% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java index 64614fb854..4c01ec9333 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationIgnoreUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; @@ -8,14 +8,15 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import org.baeldung.jackson.dtos.MyDto; -import org.baeldung.jackson.dtos.MyDtoIncludeNonDefault; -import org.baeldung.jackson.dtos.MyDtoWithFilter; -import org.baeldung.jackson.dtos.MyMixInForString; -import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreField; -import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreFieldByName; -import org.baeldung.jackson.dtos.ignore.MyDtoIgnoreNull; -import org.baeldung.jackson.serialization.MyDtoNullKeySerializer; +import com.baeldung.jackson.dtos.MyDtoIncludeNonDefault; +import com.baeldung.jackson.dtos.MyDtoWithFilter; +import com.baeldung.jackson.dtos.ignore.MyDtoIgnoreNull; +import com.baeldung.jackson.dtos.MyDto; +import com.baeldung.jackson.dtos.MyMixInForString; +import com.baeldung.jackson.dtos.ignore.MyDtoIgnoreField; +import com.baeldung.jackson.dtos.ignore.MyDtoIgnoreFieldByName; +import com.baeldung.jackson.serialization.MyDtoNullKeySerializer; +import org.junit.Ignore; import org.junit.Test; import com.fasterxml.jackson.annotation.JsonInclude.Include; @@ -84,10 +85,11 @@ public class JacksonSerializationIgnoreUnitTest { System.out.println(dtoAsString); } + @Ignore("Jackson 2.7.1-1 seems to have changed the API for this case") @Test public final void givenFieldTypeIsIgnored_whenDtoIsSerialized_thenCorrect() throws JsonParseException, IOException { final ObjectMapper mapper = new ObjectMapper(); - mapper.addMixInAnnotations(String.class, MyMixInForString.class); + mapper.addMixIn(String.class, MyMixInForString.class); final MyDto dtoObject = new MyDto(); dtoObject.setBooleanValue(true); diff --git a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationUnitTest.java similarity index 92% rename from jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationUnitTest.java index 4a34f168c7..563dda9eb6 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/JacksonSerializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonSerializationUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.not; @@ -8,14 +8,14 @@ import static org.junit.Assert.assertThat; import java.io.IOException; import java.util.List; -import org.baeldung.jackson.dtos.Item; -import org.baeldung.jackson.dtos.ItemWithSerializer; -import org.baeldung.jackson.dtos.MyDto; -import org.baeldung.jackson.dtos.MyDtoFieldNameChanged; -import org.baeldung.jackson.dtos.MyDtoNoAccessors; -import org.baeldung.jackson.dtos.MyDtoNoAccessorsAndFieldVisibility; -import org.baeldung.jackson.dtos.User; -import org.baeldung.jackson.serialization.ItemSerializer; +import com.baeldung.jackson.dtos.MyDtoFieldNameChanged; +import com.baeldung.jackson.dtos.User; +import com.baeldung.jackson.dtos.Item; +import com.baeldung.jackson.dtos.ItemWithSerializer; +import com.baeldung.jackson.dtos.MyDto; +import com.baeldung.jackson.dtos.MyDtoNoAccessors; +import com.baeldung.jackson.dtos.MyDtoNoAccessorsAndFieldVisibility; +import com.baeldung.jackson.serialization.ItemSerializer; import org.junit.Test; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; diff --git a/jackson/src/test/java/org/baeldung/jackson/test/UnitTestSuite.java b/jackson/src/test/java/com/baeldung/jackson/test/UnitTestSuite.java similarity index 78% rename from jackson/src/test/java/org/baeldung/jackson/test/UnitTestSuite.java rename to jackson/src/test/java/com/baeldung/jackson/test/UnitTestSuite.java index 3bc5715e2a..d47b6e217a 100644 --- a/jackson/src/test/java/org/baeldung/jackson/test/UnitTestSuite.java +++ b/jackson/src/test/java/com/baeldung/jackson/test/UnitTestSuite.java @@ -1,7 +1,7 @@ -package org.baeldung.jackson.test; +package com.baeldung.jackson.test; -import org.baeldung.jackson.sandbox.JacksonPrettyPrintUnitTest; -import org.baeldung.jackson.sandbox.SandboxTest; +import com.baeldung.jackson.sandbox.JacksonPrettyPrintUnitTest; +import com.baeldung.jackson.sandbox.SandboxTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; diff --git a/jackson/src/test/java/org/baeldung/jackson/try1/IEntity.java b/jackson/src/test/java/com/baeldung/jackson/try1/IEntity.java similarity index 59% rename from jackson/src/test/java/org/baeldung/jackson/try1/IEntity.java rename to jackson/src/test/java/com/baeldung/jackson/try1/IEntity.java index ce4c83729a..27e0a71c9d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/try1/IEntity.java +++ b/jackson/src/test/java/com/baeldung/jackson/try1/IEntity.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.try1; +package com.baeldung.jackson.try1; public interface IEntity { public int getId(); diff --git a/jackson/src/test/java/org/baeldung/jackson/try1/JacksonDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/try1/JacksonDeserializationUnitTest.java similarity index 89% rename from jackson/src/test/java/org/baeldung/jackson/try1/JacksonDeserializationUnitTest.java rename to jackson/src/test/java/com/baeldung/jackson/try1/JacksonDeserializationUnitTest.java index 673577cf6f..9fc195a8aa 100644 --- a/jackson/src/test/java/org/baeldung/jackson/try1/JacksonDeserializationUnitTest.java +++ b/jackson/src/test/java/com/baeldung/jackson/try1/JacksonDeserializationUnitTest.java @@ -1,11 +1,11 @@ -package org.baeldung.jackson.try1; +package com.baeldung.jackson.try1; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; import java.io.IOException; -import org.baeldung.jackson.dtos.ItemWithSerializer; +import com.baeldung.jackson.dtos.ItemWithSerializer; import org.junit.Test; import com.fasterxml.jackson.core.JsonParseException; diff --git a/jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequest.java b/jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequest.java similarity index 96% rename from jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequest.java rename to jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequest.java index 171f4c1e14..7ef8864a63 100644 --- a/jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequest.java +++ b/jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequest.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.try1; +package com.baeldung.jackson.try1; import java.io.Serializable; diff --git a/jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequestDeserializer.java b/jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequestDeserializer.java similarity index 97% rename from jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequestDeserializer.java rename to jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequestDeserializer.java index 6110e8b0e0..849607586d 100644 --- a/jackson/src/test/java/org/baeldung/jackson/try1/RestLoaderRequestDeserializer.java +++ b/jackson/src/test/java/com/baeldung/jackson/try1/RestLoaderRequestDeserializer.java @@ -1,4 +1,4 @@ -package org.baeldung.jackson.try1; +package com.baeldung.jackson.try1; import java.io.IOException; diff --git a/javaxval/bin/pom.xml b/javaxval/bin/pom.xml index 592f3c3431..7606f0d072 100644 --- a/javaxval/bin/pom.xml +++ b/javaxval/bin/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.baeldung + com.baeldung javaxval 0.1-SNAPSHOT diff --git a/javaxval/pom.xml b/javaxval/pom.xml index 592f3c3431..493119d92e 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -1,51 +1,47 @@ - - 4.0.0 - org.baeldung - javaxval - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + javaxval + 0.1-SNAPSHOT + - + + junit + junit + 4.12 + + + javax.validation + validation-api + 1.1.0.Final + - - junit - junit - 4.12 - + + org.hibernate + hibernate-validator + 5.2.1.Final + - - javax.validation - validation-api - 1.1.0.Final - + + org.hibernate + hibernate-validator-annotation-processor + 5.2.1.Final + - - org.hibernate - hibernate-validator - 5.2.1.Final - + + javax.el + javax.el-api + 2.2.4 + - - org.hibernate - hibernate-validator-annotation-processor - 5.2.1.Final - - - - javax.el - javax.el-api - 2.2.4 - - - - org.glassfish.web - javax.el - 2.2.4 - - - + + org.glassfish.web + javax.el + 2.2.4 + + \ No newline at end of file diff --git a/sandbox/.classpath b/jpa-storedprocedure/.classpath similarity index 95% rename from sandbox/.classpath rename to jpa-storedprocedure/.classpath index 8ebf6d9c31..fae1a2b37d 100644 --- a/sandbox/.classpath +++ b/jpa-storedprocedure/.classpath @@ -6,31 +6,31 @@ - - - - - - + + + + + + + + + + + - - - - - diff --git a/sandbox/.project b/jpa-storedprocedure/.project similarity index 84% rename from sandbox/.project rename to jpa-storedprocedure/.project index f039cd270e..b5ac58ebd1 100644 --- a/sandbox/.project +++ b/jpa-storedprocedure/.project @@ -1,22 +1,17 @@ - sandbox + jpa-storedprocedure - - org.eclipse.jdt.core.javabuilder - - - org.eclipse.wst.common.project.facet.core.builder - org.eclipse.wst.validation.validationbuilder + org.eclipse.jdt.core.javabuilder @@ -25,10 +20,13 @@ + + org.eclipse.wst.validation.validationbuilder + + + - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature org.eclipse.wst.common.project.facet.core.nature diff --git a/jpa-storedprocedure/pom.xml b/jpa-storedprocedure/pom.xml new file mode 100644 index 0000000000..bbe00d6897 --- /dev/null +++ b/jpa-storedprocedure/pom.xml @@ -0,0 +1,117 @@ + + + 4.0.0 + + com.baeldung + jpa-storedprocedure + 1.0 + jar + + + 7.0 + 11.2.0.4 + 5.1.0.Final + + + + JpaStoredProcedure + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + maven-assembly-plugin + + + + jar-with-dependencies + + + + + org.apache.maven.plugins + maven-install-plugin + 2.3.1 + + + install-oracle-jdbc + + install-file + + clean + + com.oracle + ojdbc6 + ${oracle.version} + jar + true + true + ${project.basedir}/src/lib/ojdbc6.jar + + + + + + + + + + + + + javax + javaee-api + ${jee.version} + provided + + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + + + com.oracle + ojdbc6 + ${oracle.version} + + + + + org.postgresql + postgresql + 9.4.1208 + + + + + + mysql + mysql-connector-java + 5.1.38 + + + + + + junit + junit + 4.4 + + + + commons-io + commons-io + 2.4 + + + + + \ No newline at end of file diff --git a/jpa-storedprocedure/src/lib/ojdbc6.jar b/jpa-storedprocedure/src/lib/ojdbc6.jar new file mode 100644 index 0000000000..767eba7f8f Binary files /dev/null and b/jpa-storedprocedure/src/lib/ojdbc6.jar differ diff --git a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java new file mode 100644 index 0000000000..ea6c38dd8e --- /dev/null +++ b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/Car.java @@ -0,0 +1,60 @@ +package com.baeldung.jpa.model; + +import javax.persistence.*; + +/** + * Created by Giuseppe Bueti on 22/02/2016. + */ + +@Entity +@Table(name = "CAR") +@NamedStoredProcedureQueries({ + @NamedStoredProcedureQuery(name = "findByModelProcedure", procedureName = "FIND_CAR_BY_MODEL", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), + @StoredProcedureParameter(name = "p_model", type = String.class, mode = ParameterMode.IN) }), + @NamedStoredProcedureQuery(name = "findByYearProcedure", procedureName = "FIND_CAR_BY_YEAR", resultClasses = { Car.class }, parameters = { @StoredProcedureParameter(name = "data", type = Car.class, mode = ParameterMode.REF_CURSOR), + @StoredProcedureParameter(name = "p_year", type = Integer.class, mode = ParameterMode.IN) }) }) +public class Car { + + private long id; + private String model; + private Integer year; + + public Car(String model, Integer year) { + this.model = model; + this.year = year; + } + + public Car() { + } + + @Id + @SequenceGenerator(name = "CarIdSequence", sequenceName = "SEQ_CAR_ID", allocationSize = 1) + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CarIdSequence") + // @GeneratedValue(strategy = GenerationType.IDENTITY) -- for MySQL + @Column(name = "ID", unique = true, nullable = false, scale = 0) + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + @Column(name = "MODEL") + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + @Column(name = "YEAR") + public Integer getYear() { + return year; + } + + public void setYear(Integer year) { + this.year = year; + } +} diff --git a/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java new file mode 100644 index 0000000000..326886842d --- /dev/null +++ b/jpa-storedprocedure/src/main/java/com/baeldung/jpa/model/QueryParameter.java @@ -0,0 +1,27 @@ +package com.baeldung.jpa.model; + +import java.util.HashMap; +import java.util.Map; + +public class QueryParameter { + + private Map parameters = null; + + private QueryParameter(String name, Object value) { + this.parameters = new HashMap<>(); + this.parameters.put(name, value); + } + + public static QueryParameter with(String name, Object value) { + return new QueryParameter(name, value); + } + + public QueryParameter and(String name, Object value) { + this.parameters.put(name, value); + return this; + } + + public Map parameters() { + return this.parameters; + } +} \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml b/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..3cb81fc9c1 --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,30 @@ + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.model.Car + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql b/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql new file mode 100644 index 0000000000..0ef84fb7eb --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql @@ -0,0 +1,8 @@ +DELIMITER $$ +CREATE DEFINER=`root`@`localhost` PROCEDURE `FIND_CAR_BY_YEAR`(in p_year int) +begin +SELECT ID, MODEL, YEAR + FROM CAR + WHERE YEAR = p_year; +end$$ +DELIMITER ; diff --git a/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql b/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql new file mode 100644 index 0000000000..f9230aad42 --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/config/database/FindCarByYearProcedureOracle.sql @@ -0,0 +1,7 @@ +create or replace PROCEDURE FIND_CAR_BY_YEAR ( p_year IN NUMBER, data OUT SYS_REFCURSOR ) AS + BEGIN + OPEN data FOR + SELECT ID, MODEL, YEAR + FROM CAR + WHERE YEAR = p_year; + END FIND_CAR_BY_YEAR; \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/config/database/create_database.sql b/jpa-storedprocedure/src/main/resources/config/database/create_database.sql new file mode 100644 index 0000000000..d84007b74d --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/config/database/create_database.sql @@ -0,0 +1,34 @@ +CREATE TABLESPACE JPA DATAFILE 'C:\oraclexe\app\oracle\oradata\XE\JPA.DBF' SIZE 100M AUTOEXTEND ON MAXSIZE 2048M; + +--DROP USER JPA CASCADE; +CREATE USER JPA IDENTIFIED BY JPA DEFAULT TABLESPACE JPA; +ALTER USER JPA QUOTA UNLIMITED ON "JPA" ACCOUNT UNLOCK; + +GRANT CREATE SESSION TO "JPA"; +GRANT ALTER SESSION TO "JPA"; +GRANT CREATE TABLE TO "JPA"; +GRANT CREATE TRIGGER TO "JPA"; +GRANT CREATE VIEW TO "JPA"; +GRANT CREATE DIMENSION TO "JPA"; +GRANT CREATE CLUSTER TO "JPA"; +GRANT CREATE INDEXTYPE TO "JPA"; +GRANT CREATE ROLE TO "JPA"; +GRANT CREATE SEQUENCE TO "JPA"; +GRANT CREATE TYPE TO "JPA"; +GRANT CREATE MATERIALIZED VIEW TO "JPA"; +GRANT CREATE PROCEDURE TO "JPA"; +GRANT CREATE SYNONYM TO "JPA"; + +CREATE SEQUENCE SEQ_CAR_ID INCREMENT BY 1 START WITH 1 MAXVALUE 999999999999999 MINVALUE 1; + +CREATE TABLE CAR +( + ID NUMBER NOT NULL, + MODEL VARCHAR2(50) NOT NULL, + YEAR NUMBER(4) NOT NULL +); + +ALTER TABLE CAR ADD CONSTRAINT CAR_PK PRIMARY KEY ( ID ); + +commit; + diff --git a/jpa-storedprocedure/src/main/resources/config/database/create_table_mysql.sql b/jpa-storedprocedure/src/main/resources/config/database/create_table_mysql.sql new file mode 100644 index 0000000000..4a4feebdea --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/config/database/create_table_mysql.sql @@ -0,0 +1,6 @@ +CREATE TABLE `car` ( + `ID` int(10) NOT NULL AUTO_INCREMENT, + `MODEL` varchar(50) NOT NULL, + `YEAR` int(4) NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql b/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql new file mode 100644 index 0000000000..4879ffc79e --- /dev/null +++ b/jpa-storedprocedure/src/main/resources/config/database/insert_cars.sql @@ -0,0 +1,5 @@ +INSERT INTO CAR (ID, MODEL, YEAR) VALUES ('123456', 'Camaro', '2012'); +INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('12112', 'Fiat Panda', '2000'); +INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('111000', 'Fiat Punto', '2007'); +INSERT INTO "JPA"."CAR" (ID, MODEL, YEAR) VALUES ('3382', 'Citroen C3', '2009'); +commit; \ No newline at end of file diff --git a/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java new file mode 100644 index 0000000000..9d66c9f15c --- /dev/null +++ b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java @@ -0,0 +1,81 @@ +package com.baeldung.jpa.storedprocedure; + +import com.baeldung.jpa.model.Car; +import org.junit.*; + +import javax.persistence.*; + +/** + * Created by Giuseppe Bueti on 23/02/2016. + */ +public class StoredProcedureTest { + + private static EntityManagerFactory factory = null; + private static EntityManager entityManager = null; + + @BeforeClass + public static void init() { + factory = Persistence.createEntityManagerFactory("jpa-db"); + entityManager = factory.createEntityManager(); + } + + @Before + public void setup() { + } + + @Test + public void createCarTest() { + EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + Car car = new Car("Fiat Punto", 2015); + entityManager.persist(car); + transaction.commit(); + } catch (Exception e) { + System.out.println(e.getCause()); + if (transaction.isActive()) { + transaction.rollback(); + } + } + } + + @Test + public void findCarsByYear() { + final StoredProcedureQuery findByYearProcedure = entityManager.createNamedStoredProcedureQuery("findByYearProcedure"); + StoredProcedureQuery storedProcedure = findByYearProcedure.setParameter("p_year", 2015); + storedProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); + } + + @Test + public void findCarsByModel() { + final StoredProcedureQuery findByModelProcedure = entityManager.createNamedStoredProcedureQuery("findByModelProcedure"); + StoredProcedureQuery storedProcedure = findByModelProcedure.setParameter("p_model", "Camaro"); + storedProcedure.getResultList().forEach(c -> Assert.assertEquals("Camaro", ((Car) c).getModel())); + } + + @Test + public void findCarsByYearNoNamedStored() { + StoredProcedureQuery findByYearProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class).registerStoredProcedureParameter("data", Void.class, ParameterMode.REF_CURSOR) + .registerStoredProcedureParameter("p_year", Integer.class, ParameterMode.IN).setParameter("p_year", 2015); + + findByYearProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); + } + + @Test + @Ignore + public void findCarsByYearMySql() { + StoredProcedureQuery storedProcedure = entityManager.createStoredProcedureQuery("FIND_CAR_BY_YEAR", Car.class).registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN).setParameter(1, 2015); + storedProcedure.getResultList().forEach(c -> Assert.assertEquals(new Integer(2015), ((Car) c).getYear())); + } + + @AfterClass + public static void destroy() { + + if (entityManager != null) { + entityManager.close(); + } + if (factory != null) { + factory.close(); + } + } +} diff --git a/jpa-storedprocedure/src/test/resources/persistence.xml b/jpa-storedprocedure/src/test/resources/persistence.xml new file mode 100644 index 0000000000..d118a264d3 --- /dev/null +++ b/jpa-storedprocedure/src/test/resources/persistence.xml @@ -0,0 +1,31 @@ + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.model.Car + + + + + + + + + + + + + + diff --git a/json-path/pom.xml b/json-path/pom.xml index ca37447a50..c03385cf1d 100644 --- a/json-path/pom.xml +++ b/json-path/pom.xml @@ -14,13 +14,6 @@ ${json-path.version} - - - joda-time - joda-time - ${joda-time.version} - - junit @@ -44,13 +37,24 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + 2.1.0 - - 2.9.2 - 4.12 diff --git a/json-path/src/main/resources/intro_service.json b/json-path/src/main/resources/intro_service.json new file mode 100644 index 0000000000..448492463a --- /dev/null +++ b/json-path/src/main/resources/intro_service.json @@ -0,0 +1,61 @@ +[ + { + "id": 1, + "title": "Casino Royale", + "director": "Martin Campbell", + "starring": + [ + "Daniel Craig", + "Eva Green" + ], + + "desc": "Twenty-first James Bond movie", + "release date": 1163466000000, + "box office": 594275385 + }, + + { + "id": 2, + "title": "Quantum of Solace", + "director": "Marc Forster", + "starring": + [ + "Daniel Craig", + "Olga Kurylenko" + ], + + "desc": "Twenty-second James Bond movie", + "release date": 1225242000000, + "box office": 591692078 + }, + + { + "id": 3, + "title": "Skyfall", + "director": "Sam Mendes", + "starring": + [ + "Daniel Craig", + "Naomie Harris" + ], + + "desc": "Twenty-third James Bond movie", + "release date": 1350954000000, + "box office": 1110526981 + }, + + { + "id": 4, + "title": "Spectre", + "director": "Sam Mendes", + "starring": + [ + "Daniel Craig", + "Lea Seydoux" + ], + + "desc": "Twenty-fourth James Bond movie", + "release date": 1445821200000, + "box office": 879376275 + } +] \ No newline at end of file diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java deleted file mode 100644 index 9f616e1a32..0000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ChangingPasswordTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import static org.junit.Assert.*; - -import org.junit.Test; - -import java.io.InputStream; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -import org.joda.time.DateTime; -import org.joda.time.Years; - -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; - -public class ChangingPasswordTest { - - enum Result { - SUCCESS, FAILURE - } - - InputStream jsonValueInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json"); - String jsonDataSourceString = new Scanner(jsonValueInputStream, "UTF-8").useDelimiter("\\Z").next(); - - @Test - public void givenUseCase_whenChangingPasswordOfNonExistentUser_thenFail() { - String failedRequestBody = "{\"username\":\"jayway\", \"new_password\":\"JsonPath\"}"; - Result result = changingPasswordHelper(failedRequestBody); - - assertEquals(Result.FAILURE, result); - } - - @Test - public void givenUseCase_whenChangingToUnusedPassword_thenSucceed() { - String successfulRequestBody = "{\"username\":\"oracle\", \"new_password\":\"Java_SE_9\"}"; - Result result = changingPasswordHelper(successfulRequestBody); - - assertEquals(Result.SUCCESS, result); - } - - @Test - public void givenUseCase_whenChangingToRecentlyUsedPassword_thenFail() { - String failedRequestBody = "{\"username\":\"oracle\", \"new_password\":\"Java_SE_7\"}"; - Result result = changingPasswordHelper(failedRequestBody); - - assertEquals(Result.FAILURE, result); - } - - @Test - public void givenUseCase_whenChangingToLongTimeAgoPassword_thenSucceed() { - String successfulRequestBody = "{\"username\":\"sun\", \"new_password\":\"J2SE_5.0\"}"; - Result result = changingPasswordHelper(successfulRequestBody); - - assertEquals(Result.SUCCESS, result); - } - - private Result changingPasswordHelper(String requestBody) { - DocumentContext requestContext = JsonPath.parse(requestBody); - String extractedUsername = requestContext.read("$['username']"); - String extractedPassword = requestContext.read("$['new_password']"); - - DocumentContext jsonContext = JsonPath.parse(jsonDataSourceString); - List dataSourceUsername = jsonContext.read("$[?(@.username == '" + extractedUsername + "')]"); - if (dataSourceUsername.size() == 0) - return Result.FAILURE; - - Configuration pathConfiguration = Configuration.builder().options(Option.AS_PATH_LIST).build(); - List pathToCurrentUser = JsonPath.using(pathConfiguration).parse(jsonDataSourceString).read("$[?(@.username == '" + extractedUsername + "')]"); - List passwordCreatedTimeList = jsonContext.read(pathToCurrentUser.get(0) + "['password']['old'][?(@.value == '" + extractedPassword + "')]['created']"); - if (passwordCreatedTimeList.size() == 0) - return Result.SUCCESS; - - Long[] passwordCreatedTimeArray = (passwordCreatedTimeList.toArray(new Long[passwordCreatedTimeList.size()])); - Arrays.sort(passwordCreatedTimeArray); - DateTime oldDate = new DateTime(passwordCreatedTimeArray[passwordCreatedTimeArray.length - 1]); - if (Years.yearsBetween(oldDate, new DateTime()).getYears() <= 10) - return Result.FAILURE; - - return Result.SUCCESS; - } -} diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java deleted file mode 100644 index 9f0be349c9..0000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/LoggingInTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import static org.junit.Assert.*; - -import org.junit.Test; - -import java.io.InputStream; -import java.util.List; -import java.util.Scanner; - -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; - -public class LoggingInTest { - - enum Result { - SUCCESS, FAILURE - } - - InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json"); - String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); - - @Test - public void givenUseCase_whenLoggingInWithCorrectUserData_thenSucceed() { - String correctRequestBody = "{\"username\":\"sun\", \"password\":\"Java_SE_6\"}"; - Result result = loggingInHelper(correctRequestBody); - - assertEquals(Result.SUCCESS, result); - } - - @Test - public void givenUseCase_whenLoggingInWithIncorrectUserData_thenFail() { - String incorrectRequestBody = "{\"username\":\"oracle\", \"password\":\"Java_SE_9\"}"; - Result result = loggingInHelper(incorrectRequestBody); - - assertEquals(Result.FAILURE, result); - } - - private Result loggingInHelper(String requestBody) { - DocumentContext requestContext = JsonPath.parse(requestBody); - String extractedUsername = requestContext.read("$['username']"); - String extractedPassword = requestContext.read("$['password']"); - List list = JsonPath.parse(jsonDataSourceString).read("$[?(@.username == '" + extractedUsername + "' && @.password.current.value == '" + extractedPassword + "')]"); - - if (list.size() == 0) - return Result.FAILURE; - return Result.SUCCESS; - } - -} diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java deleted file mode 100644 index 04bb04528a..0000000000 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/RegisteringAccountTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.baeldung.jsonpath.introduction; - -import static org.junit.Assert.*; - -import org.junit.Test; - -import java.io.InputStream; -import java.util.List; -import java.util.Scanner; - -import com.jayway.jsonpath.JsonPath; - -public class RegisteringAccountTest { - - enum Result { - SUCCESS, FAILURE - } - - InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_user.json"); - String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); - - @Test - public void givenUseCase_whenRegisteringUnusedAccount_thenSucceed() { - String unusedRequestBody = "{\"username\":\"jayway\", \"password\":\"JsonPath\"}"; - Result result = registeringNewAccountHelper(unusedRequestBody); - - assertEquals(Result.SUCCESS, result); - } - - @Test - public void givenUseCase_whenRegisteringUsedAccount_thenFail() { - String usedRequestBody = "{\"username\":\"oracle\", \"password\":\"Java_SE_9\"}"; - Result result = registeringNewAccountHelper(usedRequestBody); - - assertEquals(Result.FAILURE, result); - } - - private Result registeringNewAccountHelper(String requestBody) { - List userDataSource = JsonPath.parse(jsonDataSourceString).read("$[*]['username']"); - String extractedUsername = JsonPath.parse(requestBody).read("$['username']"); - - if (userDataSource.toString().contains(extractedUsername)) - return Result.FAILURE; - return Result.SUCCESS; - } -} diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java new file mode 100644 index 0000000000..868acac8d0 --- /dev/null +++ b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java @@ -0,0 +1,91 @@ +package com.baeldung.jsonpath.introduction; + +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.hamcrest.CoreMatchers.containsString; + +import org.junit.Test; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Scanner; + +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; + +public class ServiceTest { + InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_service.json"); + String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); + + @Test + public void givenId_whenRequestingRecordData_thenSucceed() { + Object dataObject = JsonPath.parse(jsonString).read("$[?(@.id == 2)]"); + String dataString = dataObject.toString(); + + assertThat(dataString, containsString("2")); + assertThat(dataString, containsString("Quantum of Solace")); + assertThat(dataString, containsString("Twenty-second James Bond movie")); + } + + @Test + public void givenStarring_whenRequestingMovieTitle_thenSucceed() { + List> dataList = JsonPath.parse(jsonString).read("$[?('Eva Green' in @['starring'])]"); + String title = (String) dataList.get(0).get("title"); + + assertEquals("Casino Royale", title); + } + + @Test + public void givenCompleteStructure_whenCalculatingTotalRevenue_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + int length = context.read("$.length()"); + long revenue = 0; + for (int i = 0; i < length; i++) { + revenue += context.read("$[" + i + "]['box office']", Long.class); + } + + assertEquals(594275385L + 591692078L + 1110526981L + 879376275L, revenue); + } + + @Test + public void givenStructure_whenRequestingHighestRevenueMovieTitle_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + List revenueList = context.read("$[*]['box office']"); + Integer[] revenueArray = revenueList.toArray(new Integer[0]); + Arrays.sort(revenueArray); + + int highestRevenue = revenueArray[revenueArray.length - 1]; + Configuration pathConfiguration = Configuration.builder().options(Option.AS_PATH_LIST).build(); + List pathList = JsonPath.using(pathConfiguration).parse(jsonString).read("$[?(@['box office'] == " + highestRevenue + ")]"); + + Map dataRecord = context.read(pathList.get(0)); + String title = dataRecord.get("title"); + + assertEquals("Skyfall", title); + } + + @Test + public void givenDirector_whenRequestingLatestMovieTitle_thenSucceed() { + DocumentContext context = JsonPath.parse(jsonString); + List> dataList = context.read("$[?(@.director == 'Sam Mendes')]"); + + List dateList = new ArrayList<>(); + for (Map item : dataList) { + Object date = item.get("release date"); + dateList.add(date); + } + Long[] dateArray = dateList.toArray(new Long[0]); + Arrays.sort(dateArray); + + long latestTime = dateArray[dateArray.length - 1]; + List> finalDataList = context.read("$[?(@['director'] == 'Sam Mendes' && @['release date'] == " + latestTime + ")]"); + String title = (String) finalDataList.get(0).get("title"); + + assertEquals("Spectre", title); + } +} \ No newline at end of file diff --git a/mockito/pom.xml b/mockito/pom.xml index a73eea7647..95b7b46d44 100644 --- a/mockito/pom.xml +++ b/mockito/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung mockito 0.1-SNAPSHOT @@ -87,13 +87,9 @@ - - 4.1.5.RELEASE - 3.2.5.RELEASE - - 4.3.10.Final - 5.1.35 + 4.3.11.Final + 5.1.38 1.7.13 @@ -114,14 +110,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/mockito/src/main/webapp/WEB-INF/api-servlet.xml b/mockito/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4c74be8912..0000000000 --- a/mockito/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/mockito/src/main/webapp/WEB-INF/web.xml b/mockito/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/mockito/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5dad868501..6f63269248 100644 --- a/pom.xml +++ b/pom.xml @@ -1,116 +1,70 @@ - - - 4.0.0 - org.baeldung - spring-security-login-and-registration - spring-security-login-and-registration - war - 1.0.0-BUILD-SNAPSHOT + + 4.0.0 + com.baeldung + parent-modules + 1.0.0-SNAPSHOT - - org.springframework.boot - spring-boot-starter-parent - 1.1.4.RELEASE - + parent-modules + pom - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.security - spring-security-config - runtime - - - - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - + + apache-fop + core-java + core-java-8 + gson + + guava + guava18 + guava19 + handling-spring-static-resources + httpclient + jackson + javaxval + json-path + mockito + + querydsl + + rest-testing + resteasy - - org.slf4j - jcl-over-slf4j - - + spring-all + spring-apache-camel + spring-batch + spring-boot + spring-data-cassandra + spring-data-elasticsearch + spring-data-mongodb + spring-data-redis + spring-exceptions + spring-freemarker + spring-hibernate3 + spring-hibernate4 + spring-jpa + spring-katharsis + spring-mockito + spring-mvc-java + spring-mvc-no-xml + spring-mvc-xml + spring-openid + spring-quartz + spring-rest - - org.slf4j - log4j-over-slf4j - + spring-security-basic-auth + spring-security-mvc-custom + spring-security-mvc-digest-auth + spring-security-mvc-ldap + spring-security-mvc-login + spring-security-mvc-persisted-remember-me + spring-security-mvc-session + spring-security-rest + spring-security-rest-basic-auth + spring-security-rest-custom + spring-security-rest-digest-auth + spring-security-rest-full + spring-thymeleaf + spring-zuul - - - javax.inject - javax.inject - ${javax.inject.version} - - - - - javax.servlet - javax.servlet-api - - - - javax.servlet.jsp - javax.servlet.jsp-api - ${javax.servlet.jsp-api.version} - - - - javax.servlet - jstl - - - - - org.springframework.security - spring-security-taglibs - - - - - junit - junit - test - - - - spring-security-login-and-registration - - - src/main/resources - true - - - - - 1.7 - 3.1.1.RELEASE - 3.2.4.RELEASE - 1.6.10 - - - 1.7.6 - 1.1.1 - - - 2.3.2-b01 - - - 1 - + diff --git a/querydsl/.classpath b/querydsl/.classpath new file mode 100644 index 0000000000..534b5e52fa --- /dev/null +++ b/querydsl/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/querydsl/.project b/querydsl/.project new file mode 100644 index 0000000000..729f89c323 --- /dev/null +++ b/querydsl/.project @@ -0,0 +1,34 @@ + + + querydsl + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/querydsl/pom.xml b/querydsl/pom.xml index 4efb5dcb8b..cf50144d3f 100644 --- a/querydsl/pom.xml +++ b/querydsl/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.baeldung + com.baeldung querydsl 0.1-SNAPSHOT jar @@ -17,7 +17,7 @@ 1.6 4.10 3.1.0.RELEASE - 4.1.1.Final + 4.3.11.Final 2.5.0 1.5.10 @@ -184,4 +184,5 @@ + \ No newline at end of file diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDao.java b/querydsl/src/main/java/org/baeldung/dao/PersonDao.java index cc193de44b..17be05bff8 100644 --- a/querydsl/src/main/java/org/baeldung/dao/PersonDao.java +++ b/querydsl/src/main/java/org/baeldung/dao/PersonDao.java @@ -2,11 +2,22 @@ package org.baeldung.dao; import org.baeldung.entity.Person; +import javax.persistence.Tuple; import java.util.List; +import java.util.Map; public interface PersonDao { public Person save(Person person); public List findPersonsByFirstnameQueryDSL(String firstname); + + public List findPersonsByFirstnameAndSurnameQueryDSL(String firstname, String surname); + + public List findPersonsByFirstnameInDescendingOrderQueryDSL(String firstname); + + public int findMaxAge(); + + public Map findMaxAgeByName(); + } \ No newline at end of file diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java b/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java index 82ee4c16cd..209ff699af 100644 --- a/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java +++ b/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java @@ -1,13 +1,18 @@ package org.baeldung.dao; +import com.mysema.query.group.GroupBy; import com.mysema.query.jpa.impl.JPAQuery; +import com.mysema.query.jpa.impl.JPAQueryFactory; import org.baeldung.entity.Person; import org.baeldung.entity.QPerson; import org.springframework.stereotype.Repository; +import javax.inject.Provider; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import javax.persistence.Tuple; import java.util.List; +import java.util.Map; @Repository public class PersonDaoImpl implements PersonDao { @@ -20,6 +25,7 @@ public class PersonDaoImpl implements PersonDao { return person; } + @Override public List findPersonsByFirstnameQueryDSL(String firstname) { JPAQuery query = new JPAQuery(em); QPerson person = QPerson.person; @@ -27,4 +33,38 @@ public class PersonDaoImpl implements PersonDao { return query.from(person).where(person.firstname.eq(firstname)).list(person); } + @Override + public List findPersonsByFirstnameAndSurnameQueryDSL(String firstname, String surname) { + JPAQuery query = new JPAQuery(em); + QPerson person = QPerson.person; + + return query.from(person).where(person.firstname.eq(firstname).and( + person.surname.eq(surname))).list(person); + } + + @Override + public List findPersonsByFirstnameInDescendingOrderQueryDSL(String firstname) { + JPAQuery query = new JPAQuery(em); + QPerson person = QPerson.person; + + return query.from(person).where(person.firstname.eq(firstname)).orderBy( + person.surname.desc()).list(person); + } + + @Override + public int findMaxAge() { + JPAQuery query = new JPAQuery(em); + QPerson person = QPerson.person; + + return query.from(person).list(person.age.max()).get(0); + } + + @Override + public Map findMaxAgeByName() { + JPAQuery query = new JPAQuery(em); + QPerson person = QPerson.person; + + return query.from(person).transform(GroupBy.groupBy(person.firstname).as(GroupBy.max(person.age))); + } + } \ No newline at end of file diff --git a/querydsl/src/main/java/org/baeldung/entity/Person.java b/querydsl/src/main/java/org/baeldung/entity/Person.java index d9b0a5a97d..056b2eb79c 100644 --- a/querydsl/src/main/java/org/baeldung/entity/Person.java +++ b/querydsl/src/main/java/org/baeldung/entity/Person.java @@ -15,6 +15,9 @@ public class Person { @Column private String surname; + @Column + private int age; + Person() { } @@ -23,6 +26,11 @@ public class Person { this.surname = surname; } + public Person(String firstname, String surname, int age) { + this(firstname, surname); + this.age = age; + } + public Long getId() { return id; } @@ -47,4 +55,11 @@ public class Person { this.surname = surname; } + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } } \ No newline at end of file diff --git a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java b/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java index 29d4dd98e9..da3a95b7f8 100644 --- a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java +++ b/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java @@ -10,6 +10,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.annotation.Transactional; +import java.util.Map; + @ContextConfiguration("/test-context.xml") @RunWith(SpringJUnit4ClassRunner.class) @@ -30,4 +32,48 @@ public class PersonDaoTest { Person personFromDb = personDao.findPersonsByFirstnameQueryDSL("Kent").get(0); Assert.assertEquals(person.getId(), personFromDb.getId()); } + + @Test + public void testMultipleFilter() { + personDao.save(new Person("Erich", "Gamma")); + Person person = personDao.save(new Person("Ralph", "Beck")); + Person person2 = personDao.save(new Person("Ralph", "Johnson")); + + Person personFromDb = personDao.findPersonsByFirstnameAndSurnameQueryDSL("Ralph", "Johnson").get(0); + Assert.assertNotSame(person.getId(), personFromDb.getId()); + Assert.assertEquals(person2.getId(), personFromDb.getId()); + } + + @Test + public void testOrdering() { + Person person = personDao.save(new Person("Kent", "Gamma")); + personDao.save(new Person("Ralph", "Johnson")); + Person person2 = personDao.save(new Person("Kent", "Zivago")); + + Person personFromDb = personDao.findPersonsByFirstnameInDescendingOrderQueryDSL("Kent").get(0); + Assert.assertNotSame(person.getId(), personFromDb.getId()); + Assert.assertEquals(person2.getId(), personFromDb.getId()); + } + + @Test + public void testMaxAge() { + personDao.save(new Person("Kent", "Gamma", 20)); + personDao.save(new Person("Ralph", "Johnson", 35)); + personDao.save(new Person("Kent", "Zivago", 30)); + + int maxAge = personDao.findMaxAge(); + Assert.assertTrue(maxAge == 35); + } + + @Test + public void testMaxAgeByName() { + personDao.save(new Person("Kent", "Gamma", 20)); + personDao.save(new Person("Ralph", "Johnson", 35)); + personDao.save(new Person("Kent", "Zivago", 30)); + + Map maxAge = personDao.findMaxAgeByName(); + Assert.assertTrue(maxAge.size() == 2); + Assert.assertSame(35, maxAge.get("Ralph")); + Assert.assertSame(30, maxAge.get("Kent")); + } } \ No newline at end of file diff --git a/raml/annotations/README.md b/raml/annotations/README.md new file mode 100644 index 0000000000..4142b33353 --- /dev/null +++ b/raml/annotations/README.md @@ -0,0 +1,7 @@ +========= + +## Define Custom RAML + + +### Relevant Articles: +- [Define Custom RAML Properties Using Annotations](http://www.baeldung.com/raml-custom-properties-with-annotations) diff --git a/raml/modularization/README.md b/raml/modularization/README.md new file mode 100644 index 0000000000..de0e047ea6 --- /dev/null +++ b/raml/modularization/README.md @@ -0,0 +1,6 @@ +========= + +## Modular RESTful API Modeling Language + +### Relevant Articles: +- [Modular RAML Using Includes, Libraries, Overlays and Extensions](http://www.baeldung.com/modular-raml-includes-overlays-libraries-extensions) diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index b8fdc50a01..e159af0b77 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung rest-testing 0.1-SNAPSHOT @@ -66,7 +66,7 @@ org.slf4j jcl-over-slf4j ${org.slf4j.version} - + runtime org.slf4j @@ -137,11 +137,8 @@ - - 4.1.5.RELEASE - - 2.5.5 + 2.7.2 1.7.13 @@ -162,14 +159,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.14 + 1.4.18 diff --git a/rest-testing/src/main/webapp/WEB-INF/api-servlet.xml b/rest-testing/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index 4c74be8912..0000000000 --- a/rest-testing/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/rest-testing/src/main/webapp/WEB-INF/web.xml b/rest-testing/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/rest-testing/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/resteasy/.classpath b/resteasy/.classpath new file mode 100644 index 0000000000..3c88c332e3 --- /dev/null +++ b/resteasy/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-security-oauth/spring-security-oauth-resource/.project b/resteasy/.project similarity index 82% rename from spring-security-oauth/spring-security-oauth-resource/.project rename to resteasy/.project index c3a285960b..7303d59739 100644 --- a/spring-security-oauth/spring-security-oauth-resource/.project +++ b/resteasy/.project @@ -1,6 +1,6 @@ - spring-security-oauth-resource + resteasy-tutorial @@ -20,11 +20,6 @@ - - org.springframework.ide.eclipse.core.springbuilder - - - org.eclipse.wst.validation.validationbuilder @@ -39,7 +34,6 @@ org.eclipse.jem.workbench.JavaEMFNature org.eclipse.wst.common.modulecore.ModuleCoreNature - org.springframework.ide.eclipse.core.springnature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature org.eclipse.wst.common.project.facet.core.nature diff --git a/resteasy/README.md b/resteasy/README.md new file mode 100644 index 0000000000..722f1dfe93 --- /dev/null +++ b/resteasy/README.md @@ -0,0 +1,8 @@ +========= + +## A Guide to RESTEasy + + +### Relevant Articles: +- [A Guide to RESTEasy](http://www.baeldung.com/resteasy-tutorial) +- [RESTEasy Client API](http://www.baeldung.com/resteasy-client-tutorial) diff --git a/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch b/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch deleted file mode 100644 index 627021fb96..0000000000 --- a/sandbox/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/sandbox/.gitignore b/sandbox/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/sandbox/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/sandbox/.settings/.jsdtscope b/sandbox/.settings/.jsdtscope deleted file mode 100644 index 7b3f0c8b9f..0000000000 --- a/sandbox/.settings/.jsdtscope +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/sandbox/.settings/org.eclipse.jdt.core.prefs b/sandbox/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b126d6476b..0000000000 --- a/sandbox/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,95 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=error -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=error -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/sandbox/.settings/org.eclipse.jdt.ui.prefs b/sandbox/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 471e9b0d81..0000000000 --- a/sandbox/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,55 +0,0 @@ -#Sat Jan 21 23:04:06 EET 2012 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=true -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=true -sp_cleanup.correct_indentation=true -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=true -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=false -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=false -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=true -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=true -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=true -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/sandbox/.settings/org.eclipse.m2e.core.prefs b/sandbox/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1cb..0000000000 --- a/sandbox/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/sandbox/.settings/org.eclipse.m2e.wtp.prefs b/sandbox/.settings/org.eclipse.m2e.wtp.prefs deleted file mode 100644 index ef86089622..0000000000 --- a/sandbox/.settings/org.eclipse.m2e.wtp.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.m2e.wtp.enabledProjectSpecificPrefs=false diff --git a/sandbox/.settings/org.eclipse.wst.common.component b/sandbox/.settings/org.eclipse.wst.common.component deleted file mode 100644 index e98377cb0f..0000000000 --- a/sandbox/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml b/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index f4ef8aa0a5..0000000000 --- a/sandbox/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a480..0000000000 --- a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name b/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6ec..0000000000 --- a/sandbox/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/sandbox/.settings/org.eclipse.wst.validation.prefs b/sandbox/.settings/org.eclipse.wst.validation.prefs deleted file mode 100644 index cacf5451ae..0000000000 --- a/sandbox/.settings/org.eclipse.wst.validation.prefs +++ /dev/null @@ -1,14 +0,0 @@ -DELEGATES_PREFERENCE=delegateValidatorList -USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; -USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; -USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300 -eclipse.preferences.version=1 -override=true -suspend=false -vals/org.eclipse.jst.jsf.ui.JSFAppConfigValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.JSPBatchValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.TLDValidator/global=FF01 -vals/org.eclipse.wst.dtd.core.dtdDTDValidator/global=FF01 -vals/org.eclipse.wst.jsdt.web.core.JsBatchValidator/global=TF02 -vf.version=3 diff --git a/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs b/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs deleted file mode 100644 index 9cfcabe16f..0000000000 --- a/sandbox/.settings/org.eclipse.wst.ws.service.policy.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.wst.ws.service.policy.projectEnabled=false diff --git a/sandbox/.springBeans b/sandbox/.springBeans deleted file mode 100644 index a79097f40d..0000000000 --- a/sandbox/.springBeans +++ /dev/null @@ -1,14 +0,0 @@ - - - 1 - - - - - - - src/main/webapp/WEB-INF/api-servlet.xml - - - - diff --git a/sandbox/README.md b/sandbox/README.md deleted file mode 100644 index 772681ad57..0000000000 --- a/sandbox/README.md +++ /dev/null @@ -1,9 +0,0 @@ -========= - -## Core Java Cookbooks and Examples - -### Relevant Articles: -- [Immutable ArrayList in Java](http://www.baeldung.com/java-immutable-list) -- [Java - Reading a Large File Efficiently](http://www.baeldung.com/java-read-lines-large-file) -- [Java InputStream to String](http://www.baeldung.com/convert-input-stream-to-string) - diff --git a/sandbox/pom.xml b/sandbox/pom.xml deleted file mode 100644 index 95b2df2cb3..0000000000 --- a/sandbox/pom.xml +++ /dev/null @@ -1,176 +0,0 @@ - - 4.0.0 - org.baeldung - sandbox - 0.1-SNAPSHOT - - sandbox - - - - - - - com.google.guava - guava - ${guava.version} - - - - org.apache.commons - commons-collections4 - 4.0 - - - - commons-io - commons-io - 2.4 - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - - junit - junit - ${junit.version} - test - - - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - org.mockito - mockito-core - ${mockito.version} - test - - - - - - core-java - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - - - - - - 4.0.3.RELEASE - 3.2.5.RELEASE - - - 4.3.10.Final - 5.1.35 - - - 2.5.5 - - - 1.7.13 - 1.1.3 - - - 5.1.3.Final - - - 16.0.1 - 3.4 - - - 1.3 - 4.12 - 1.10.19 - - 4.4.1 - 4.5 - - 2.4.1 - - - 3.3 - 2.6 - 2.18.1 - 2.7 - 1.4.14 - - - - \ No newline at end of file diff --git a/sandbox/src/main/resources/logback.xml b/sandbox/src/main/resources/logback.xml deleted file mode 100644 index 62d0ea5037..0000000000 --- a/sandbox/src/main/resources/logback.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - \ No newline at end of file diff --git a/sandbox/src/main/webapp/WEB-INF/api-servlet.xml b/sandbox/src/main/webapp/WEB-INF/api-servlet.xml deleted file mode 100644 index a675fc6d95..0000000000 --- a/sandbox/src/main/webapp/WEB-INF/api-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/sandbox/src/main/webapp/WEB-INF/web.xml b/sandbox/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 935beae648..0000000000 --- a/sandbox/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - Spring MVC Application - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - api - org.springframework.web.servlet.DispatcherServlet - 1 - - - api - / - - - - - - - \ No newline at end of file diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java deleted file mode 100644 index 8bd957c51a..0000000000 --- a/sandbox/src/test/java/org/baeldung/codility/CodilityTest1.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.baeldung.codility; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Random; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class CodilityTest1 { - - @Before - public final void before() { - // - } - - // tests - - @Test - public final void whenSolutionIsCalculated1_thenCorrect() { - final int[] A = new int[] { 1, 4, 3, 3, 1, 2 }; - final int solution = solution(A); - Assert.assertEquals(4, solution); - } - - @Test - public final void whenSolutionIsCalculated2_thenCorrect() { - final int[] A = new int[] { 6, 4, 4, 6 }; - final int solution = solution(A); - Assert.assertEquals(-1, solution); - } - - @Test - public final void whenSolutionIsCalculated3_thenCorrect() { - final int[] A = new int[100000]; - final Random random = new Random(); - for (final int index : A) { - A[index] = random.nextInt(); - } - - final long start = System.currentTimeMillis(); - final int solution = solution(A); - final long end = System.currentTimeMillis(); - System.out.println("Time: " + (end - start)); - System.out.println(solution); - } - - // - - final int solution(final int elements[]) { - final Map collector = new LinkedHashMap(); - Integer currentValue = null; - for (final int element : elements) { - currentValue = collector.get(element); - if (currentValue == null) { - collector.put(element, 1); - } else if (currentValue >= 1) { - collector.put(element, ++currentValue); - } - } - - for (final Map.Entry entry : collector.entrySet()) { - if (entry.getValue() == 1) { - return entry.getKey(); - } - } - - return -1; - } - -} diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java deleted file mode 100644 index d92e9001f9..0000000000 --- a/sandbox/src/test/java/org/baeldung/codility/CodilityTest2.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.baeldung.codility; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.junit.Assert; -import org.junit.Test; - -public class CodilityTest2 { - - // tests - - @Test - public final void whenSolutionIsCalculated1_thenCorrect() { - final int solution = solution(955); - Assert.assertEquals(4, solution); - } - - @Test - public final void whenSolutionIsCalculated2_thenCorrect() { - final int solution = solution(102); - Assert.assertEquals(-1, solution); - } - - @Test - public final void whenSolutionIsCalculated3_thenCorrect() { - final int solution = solution(2); - Assert.assertEquals(-1, solution); - } - - @Test - public final void whenSolutionIsCalculated4_thenCorrect() { - final int solution = solution2("codilitycodilityco"); - Assert.assertEquals(8, solution); - } - - // - - public final int solution(final int decimal) { - final String binaryString = Integer.toBinaryString(decimal); - int lastPeriod = -1; - for (int period = 1; period < (binaryString.length() / 2 + 1); period++) { - final Matcher m = Pattern.compile("(\\S{" + period + ",})(?=.*?\\1)").matcher(binaryString); - final boolean found = m.find(); - if (found && m.groupCount() > 0) { - lastPeriod = period; - } - if (!found) { - break; - } - } - - return lastPeriod; - } - - public final int solution2(final String binaryString) { - int lastPeriod = -1; - for (int period = 1; period < (binaryString.length() / 2 + 1); period++) { - final Matcher m = Pattern.compile("(\\S{" + period + ",})(?=.*?\\1)").matcher(binaryString); - final boolean found = m.find(); - if (found && m.groupCount() > 0) { - lastPeriod = period; - } - if (!found) { - break; - } - } - - return lastPeriod; - } - -} diff --git a/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java b/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java deleted file mode 100644 index a7067be7b0..0000000000 --- a/sandbox/src/test/java/org/baeldung/codility/CodilityTest3.java +++ /dev/null @@ -1,207 +0,0 @@ -package org.baeldung.codility; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; - -public class CodilityTest3 { - - // tests - - @Test - public final void whenSolutionIsCalculated1_thenCorrect() { - final int[] moves = new int[] { 1, 3, 2, 5, 4, 4, 6, 3, 2 }; - final int solution = solution(moves); - Assert.assertEquals(7, solution); - } - - // - - public int solution(final int[] moves) { - final World world = new World(); - int nextMove = 0; - for (final int move : moves) { - switch (nextMove) { - case 0: - if (world.moveNorth(move)) { - nextMove = 1; - break; - } else { - return world.movesCount; - } - case 1: - if (world.moveEast(move)) { - nextMove = 2; - break; - } else { - return world.movesCount; - } - case 2: - if (world.moveSouth(move)) { - nextMove = 3; - break; - } else { - return world.movesCount; - } - case 3: - if (world.moveWest(move)) { - nextMove = 0; - break; - } else { - return world.movesCount; - } - default: - throw new IllegalStateException(); - } - } - - return world.movesCount; - } - -} - -class World { - int movesCount = 1; - int currentX = 0; - int currentY = 0; - Map minXAtY; - Map maxXAtY; - Map minYAtX; - Map maxYAtX; - - public World() { - minXAtY = new HashMap<>(); - maxXAtY = new HashMap<>(); - minYAtX = new HashMap<>(); - maxYAtX = new HashMap<>(); - } - - final boolean moveNorth(final int steps) { - if (isMoveNorthValid(steps)) { - storeMoveNorth(steps); - movesCount++; - return true; - } - return false; - } - - final boolean moveEast(final int steps) { - if (isMoveEastValid(steps)) { - storeMoveEast(steps); - movesCount++; - return true; - } - return false; - } - - final boolean moveSouth(final int steps) { - if (isMoveSouthValid(steps)) { - storeMoveSouth(steps); - movesCount++; - return true; - } - return false; - } - - final boolean moveWest(final int steps) { - if (isMoveWestValid(steps)) { - storeMoveWest(steps); - movesCount++; - return true; - } - return false; - } - - // - - private boolean isMoveNorthValid(final int steps) { - int currentPosition = currentY; - for (int i = 1; i <= steps; i++) { - currentPosition += 1; - if (minXAtY.get(currentPosition) != null && minXAtY.get(currentPosition) > currentX) { - return false; - } - if (maxXAtY.get(currentPosition) != null && maxXAtY.get(currentPosition) < currentX) { - return false; - } - } - return true; - } - - private boolean isMoveEastValid(final int steps) { // - int currentPosition = currentX; - for (int i = 1; i <= steps; i++) { - currentPosition += 1; - if (minYAtX.get(currentPosition) != null && minYAtX.get(currentPosition) < currentY) { - return false; - } - if (maxYAtX.get(currentPosition) != null && maxYAtX.get(currentPosition) > currentY) { - return false; - } - } - return true; - } - - private boolean isMoveSouthValid(final int steps) { - int currentPosition = currentY; - for (int i = 1; i <= steps; i++) { - currentPosition -= 1; - if (minXAtY.get(currentPosition) != null && minXAtY.get(currentPosition) < currentX) { - return false; - } - if (maxXAtY.get(currentPosition) != null && maxXAtY.get(currentPosition) > currentX) { - return false; - } - } - return true; - } - - private boolean isMoveWestValid(final int steps) { - int currentPosition = currentX; - for (int i = 1; i <= steps; i++) { - currentPosition -= 1; - if (minYAtX.get(currentPosition) != null && minYAtX.get(currentPosition) > currentY) { - return false; - } - if (maxYAtX.get(currentPosition) != null && maxYAtX.get(currentPosition) < currentY) { - return false; - } - } - return true; - } - - private void storeMoveNorth(final int steps) { - currentY = currentY + steps; - final Integer currentMaxYAtThisLevel = maxYAtX.get(currentX); - if (currentMaxYAtThisLevel == null || currentMaxYAtThisLevel == null && currentMaxYAtThisLevel < currentY) { - maxYAtX.put(currentX, currentY); - } - } - - private void storeMoveEast(final int steps) { - currentX = currentX + steps; - final Integer currentMaxXAtThisLevel = maxXAtY.get(currentY); - if (currentMaxXAtThisLevel == null || currentMaxXAtThisLevel == null && currentMaxXAtThisLevel < currentX) { - maxXAtY.put(currentY, currentX); - } - } - - private void storeMoveSouth(final int steps) { - currentY = currentY - steps; - final Integer currentMinYAtThisLevel = minYAtX.get(currentX); - if (currentMinYAtThisLevel == null || currentMinYAtThisLevel == null && currentMinYAtThisLevel > currentY) { - minYAtX.put(currentX, currentY); - } - } - - private void storeMoveWest(final int steps) { - currentX = currentX - steps; - final Integer currentMinXAtThisLevel = minXAtY.get(currentY); - if (currentMinXAtThisLevel == null || currentMinXAtThisLevel == null && currentMinXAtThisLevel > currentX) { - minXAtY.put(currentY, currentX); - } - } - -} diff --git a/sandbox/src/test/resources/.gitignore b/sandbox/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/sandbox/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/spring-all/pom.xml b/spring-all/pom.xml index 6ce8ad7196..8ff09e5e17 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-all 0.1-SNAPSHOT @@ -217,14 +217,14 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 3.20.0-GA 1.2 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -245,14 +245,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-oauth/spring-security-oauth-resource/.classpath b/spring-apache-camel/.classpath similarity index 92% rename from spring-security-oauth/spring-security-oauth-resource/.classpath rename to spring-apache-camel/.classpath index 0cad5db2d0..698778fef3 100644 --- a/spring-security-oauth/spring-security-oauth-resource/.classpath +++ b/spring-apache-camel/.classpath @@ -17,7 +17,7 @@ - + @@ -25,7 +25,6 @@ - diff --git a/spring-apache-camel/.project b/spring-apache-camel/.project new file mode 100644 index 0000000000..7725877f6a --- /dev/null +++ b/spring-apache-camel/.project @@ -0,0 +1,29 @@ + + + spring-apache-camel + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/spring-apache-camel/README.md b/spring-apache-camel/README.md index f6ae77b2a5..4015760f7d 100644 --- a/spring-apache-camel/README.md +++ b/spring-apache-camel/README.md @@ -3,7 +3,7 @@ This article will demonstrate how to configure and use Apache Camel with Spring Framework. -

Relevant Article

+

Relevant Articles

  • Apache Camel
  • @@ -25,4 +25,9 @@ To build this application execute following maven command in ApacheCamelFileProc To run this application you can either run our main class App from your IDE or you can execute following maven command: -mvn exec:java -Dexec.mainClass="App" \ No newline at end of file +mvn exec:java -Dexec.mainClass="App" + +

    Relevant Articles on Baeldung

    + diff --git a/spring-batch/pom.xml b/spring-batch/pom.xml index c85aeff6f3..5538dd912f 100644 --- a/spring-batch/pom.xml +++ b/spring-batch/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.baeldung + com.baeldung spring-batch 0.1-SNAPSHOT jar diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 3a116a2974..bedab2391e 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-boot 0.0.1-SNAPSHOT war diff --git a/spring-data-cassandra/pom.xml b/spring-data-cassandra/pom.xml index 7e21859b5d..e5f8779942 100644 --- a/spring-data-cassandra/pom.xml +++ b/spring-data-cassandra/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.baeldung + com.baeldung spring-data-cassandra 0.0.1-SNAPSHOT jar @@ -12,7 +12,7 @@ UTF-8 - 4.2.3.RELEASE + 4.2.5.RELEASE 1.3.2.RELEASE diff --git a/spring-data-elasticsearch/README.md b/spring-data-elasticsearch/README.md index 0dae92e0e7..74d9e4f642 100644 --- a/spring-data-elasticsearch/README.md +++ b/spring-data-elasticsearch/README.md @@ -1,4 +1,5 @@ ## Spring Data Elasticsearch +- [Introduction to Spring Data Elasticsearch](http://www.baeldung.com/spring-data-elasticsearch-tutorial) ### Build the Project with Tests Running ``` diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 7ac6dd0fcf..27fb521dbc 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.baeldung + com.baeldung spring-data-elasticsearch 0.0.1-SNAPSHOT jar @@ -11,8 +11,10 @@ UTF-8 - 1.3.2.RELEASE - 4.2.2.RELEASE + + 1.3.2.RELEASE + 4.2.5.RELEASE + 4.11 1.7.12 1.1.3 diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 558af930b3..102344a3fa 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.baeldung + com.baeldung spring-data-mongodb 0.0.1-SNAPSHOT @@ -118,13 +118,13 @@ UTF-8 - 4.2.4.RELEASE + 4.2.5.RELEASE 1.7.1.RELEASE 1.3 4.11 - 2.4.1 + 2.9.0 3.6.6 1.1.3 diff --git a/spring-data-redis/.classpath b/spring-data-redis/.classpath new file mode 100644 index 0000000000..9ae7bca0fc --- /dev/null +++ b/spring-data-redis/.classpath @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-redis/.project b/spring-data-redis/.project new file mode 100644 index 0000000000..06547e2b9c --- /dev/null +++ b/spring-data-redis/.project @@ -0,0 +1,29 @@ + + + sprint-data-redis + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/spring-data-redis/README.md b/spring-data-redis/README.md index b9b2e5d93d..89eae99f05 100644 --- a/spring-data-redis/README.md +++ b/spring-data-redis/README.md @@ -1,7 +1,7 @@ ## Spring Data Redis ### Relevant Articles: -- [Introduction to Spring Data Redis] +- [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial) ### Build the Project with Tests Running ``` diff --git a/spring-data-redis/pom.xml b/spring-data-redis/pom.xml index 98da69934c..56c83adcf7 100644 --- a/spring-data-redis/pom.xml +++ b/spring-data-redis/pom.xml @@ -1,76 +1,78 @@ - - 4.0.0 + + 4.0.0 - org.baeldung - sprint-data-redis - 0.0.1-SNAPSHOT - jar + com.baeldung + sprint-data-redis + 0.0.1-SNAPSHOT + jar - - UTF-8 - 4.2.2.RELEASE - 1.6.2.RELEASE - 0.8.0 - + + UTF-8 + + 4.2.5.RELEASE + + 1.6.2.RELEASE + 0.8.0 + - - - org.springframework.data - spring-data-redis - ${spring-data-redis} - + + + org.springframework.data + spring-data-redis + ${spring-data-redis} + - - cglib - cglib-nodep - 2.2 - + + cglib + cglib-nodep + 2.2 + - - log4j - log4j - 1.2.16 - + + log4j + log4j + 1.2.16 + - - redis.clients - jedis - 2.5.1 - jar - + + redis.clients + jedis + 2.5.1 + jar + - - org.springframework - spring-core - ${spring.version} - + + org.springframework + spring-core + ${spring.version} + - - org.springframework - spring-context - ${spring.version} - + + org.springframework + spring-context + ${spring.version} + - - junit - junit - 4.12 - test - + + junit + junit + 4.12 + test + - - org.springframework - spring-test - ${spring.version} - test - + + org.springframework + spring-test + ${spring.version} + test + - - com.lordofthejars - nosqlunit-redis - ${nosqlunit.version} - + + com.lordofthejars + nosqlunit-redis + ${nosqlunit.version} + - + + diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml index 324b7475b3..554bb0c170 100644 --- a/spring-exceptions/pom.xml +++ b/spring-exceptions/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-exceptions 0.1-SNAPSHOT @@ -203,14 +203,14 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 3.20.0-GA 1.2 4.3.11.Final - 5.1.37 + 5.1.38 7.0.42 @@ -232,15 +232,15 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 1.8.9 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-freemarker/.classpath b/spring-freemarker/.classpath new file mode 100644 index 0000000000..5c3ac53820 --- /dev/null +++ b/spring-freemarker/.classpath @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-security-oauth/spring-security-oauth-server/.project b/spring-freemarker/.project similarity index 96% rename from spring-security-oauth/spring-security-oauth-server/.project rename to spring-freemarker/.project index a66e7f1009..1d63e30744 100644 --- a/spring-security-oauth/spring-security-oauth-server/.project +++ b/spring-freemarker/.project @@ -1,6 +1,6 @@ - spring-security-oauth-server + spring4-freemarker-example @@ -21,12 +21,12 @@ - org.springframework.ide.eclipse.core.springbuilder + org.eclipse.wst.validation.validationbuilder - org.eclipse.wst.validation.validationbuilder + org.springframework.ide.eclipse.core.springbuilder @@ -37,9 +37,9 @@ + org.springframework.ide.eclipse.core.springnature org.eclipse.jem.workbench.JavaEMFNature org.eclipse.wst.common.modulecore.ModuleCoreNature - org.springframework.ide.eclipse.core.springnature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature org.eclipse.wst.common.project.facet.core.nature diff --git a/spring-hibernate3/pom.xml b/spring-hibernate3/pom.xml index d88358168f..59053be596 100644 --- a/spring-hibernate3/pom.xml +++ b/spring-hibernate3/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-hibernate3 0.1-SNAPSHOT @@ -162,13 +162,13 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 3.20.0-GA 3.6.10.Final - 5.1.37 + 5.1.38 7.0.47 @@ -190,13 +190,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 - 2.18.1 + 3.5.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-hibernate4/pom.xml b/spring-hibernate4/pom.xml index 652636b7cc..3652674614 100644 --- a/spring-hibernate4/pom.xml +++ b/spring-hibernate4/pom.xml @@ -213,15 +213,15 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 1.9.2.RELEASE 3.20.0-GA 4.3.11.Final ${hibernate.version} - 5.1.37 + 5.1.38 8.0.30 1.1 2.2.4 @@ -245,13 +245,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 - 2.18.1 + 3.5.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 2e8f818776..25dd960435 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.baeldung + com.baeldung spring-jpa 0.1-SNAPSHOT @@ -179,13 +179,12 @@ - 4.2.4.RELEASE - 4.0.2.RELEASE + 4.2.5.RELEASE 3.20.0-GA 4.3.11.Final - 5.1.37 + 5.1.38 1.8.2.RELEASE @@ -207,13 +206,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 - 2.18.1 + 3.5.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-oauth/spring-security-oauth-server/.classpath b/spring-mockito/.classpath similarity index 93% rename from spring-security-oauth/spring-security-oauth-server/.classpath rename to spring-mockito/.classpath index 0cad5db2d0..6d7587a819 100644 --- a/spring-security-oauth/spring-security-oauth-server/.classpath +++ b/spring-mockito/.classpath @@ -25,7 +25,6 @@ - diff --git a/mockito-mocks-spring-beans/.gitignore b/spring-mockito/.gitignore similarity index 100% rename from mockito-mocks-spring-beans/.gitignore rename to spring-mockito/.gitignore diff --git a/spring-mockito/.project b/spring-mockito/.project new file mode 100644 index 0000000000..5f0e9cacbc --- /dev/null +++ b/spring-mockito/.project @@ -0,0 +1,35 @@ + + + spring-mockito + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/mockito-mocks-spring-beans/README.md b/spring-mockito/README.md similarity index 100% rename from mockito-mocks-spring-beans/README.md rename to spring-mockito/README.md diff --git a/mockito-mocks-spring-beans/pom.xml b/spring-mockito/pom.xml similarity index 80% rename from mockito-mocks-spring-beans/pom.xml rename to spring-mockito/pom.xml index 64dc7d83c9..3dcca7aab7 100644 --- a/mockito-mocks-spring-beans/pom.xml +++ b/spring-mockito/pom.xml @@ -1,38 +1,30 @@ - + 4.0.0 com.baeldung - mockito-mocks-spring-beans + spring-mockito 0.0.1-SNAPSHOT jar - mocks + spring-mockito Injecting Mockito Mocks into Spring Beans org.springframework.boot spring-boot-starter-parent - 1.3.1.RELEASE + 1.3.3.RELEASE - - UTF-8 - 1.8 - - org.springframework.boot spring-boot-starter - 1.3.1.RELEASE org.springframework.boot spring-boot-starter-test - 1.3.1.RELEASE test @@ -51,4 +43,9 @@ + + UTF-8 + 1.8 + + diff --git a/mockito-mocks-spring-beans/src/main/java/com/baeldung/MocksApplication.java b/spring-mockito/src/main/java/com/baeldung/MocksApplication.java similarity index 100% rename from mockito-mocks-spring-beans/src/main/java/com/baeldung/MocksApplication.java rename to spring-mockito/src/main/java/com/baeldung/MocksApplication.java diff --git a/mockito-mocks-spring-beans/src/main/java/com/baeldung/NameService.java b/spring-mockito/src/main/java/com/baeldung/NameService.java similarity index 100% rename from mockito-mocks-spring-beans/src/main/java/com/baeldung/NameService.java rename to spring-mockito/src/main/java/com/baeldung/NameService.java diff --git a/mockito-mocks-spring-beans/src/main/java/com/baeldung/UserService.java b/spring-mockito/src/main/java/com/baeldung/UserService.java similarity index 100% rename from mockito-mocks-spring-beans/src/main/java/com/baeldung/UserService.java rename to spring-mockito/src/main/java/com/baeldung/UserService.java diff --git a/mockito-mocks-spring-beans/src/main/resources/application.properties b/spring-mockito/src/main/resources/application.properties similarity index 100% rename from mockito-mocks-spring-beans/src/main/resources/application.properties rename to spring-mockito/src/main/resources/application.properties diff --git a/mockito-mocks-spring-beans/src/test/java/com/baeldung/NameServiceTestConfiguration.java b/spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java similarity index 100% rename from mockito-mocks-spring-beans/src/test/java/com/baeldung/NameServiceTestConfiguration.java rename to spring-mockito/src/test/java/com/baeldung/NameServiceTestConfiguration.java diff --git a/mockito-mocks-spring-beans/src/test/java/com/baeldung/UserServiceTest.java b/spring-mockito/src/test/java/com/baeldung/UserServiceTest.java similarity index 100% rename from mockito-mocks-spring-beans/src/test/java/com/baeldung/UserServiceTest.java rename to spring-mockito/src/test/java/com/baeldung/UserServiceTest.java diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index d9a578cb8c..694a21d5d2 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-mvc-java 0.1-SNAPSHOT spring-mvc-java @@ -172,12 +172,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 2.1.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 1.1.3 @@ -192,13 +192,14 @@ 1.10.19 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.17 + 1.4.18 + 1.8.7 diff --git a/spring-mvc-no-xml/pom.xml b/spring-mvc-no-xml/pom.xml index da71a699db..202aee7295 100644 --- a/spring-mvc-no-xml/pom.xml +++ b/spring-mvc-no-xml/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung 0.1-SNAPSHOT spring-mvc-no-xml @@ -144,7 +144,7 @@ - 4.2.4.RELEASE + 4.2.5.RELEASE 1.7.13 @@ -158,14 +158,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index 896d744e99..fc7deaad61 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung 0.1-SNAPSHOT spring-mvc-xml @@ -146,7 +146,7 @@ - 4.2.4.RELEASE + 4.2.5.RELEASE 1.7.13 @@ -160,14 +160,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfig.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java similarity index 93% rename from spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfig.java rename to spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java index c4d819caa5..b5238b04d5 100644 --- a/spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfig.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package com.baeldung.spring; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; diff --git a/spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfigJava.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java similarity index 97% rename from spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfigJava.java rename to spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java index d2b57da818..06b2c0e461 100644 --- a/spring-mvc-xml/src/main/java/org/baeldung/spring/ClientWebConfigJava.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package com.baeldung.spring; import org.springframework.context.annotation.Bean; import org.springframework.web.servlet.ViewResolver; diff --git a/spring-mvc-xml/src/main/java/org/baeldung/spring/controller/EmployeeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java similarity index 93% rename from spring-mvc-xml/src/main/java/org/baeldung/spring/controller/EmployeeController.java rename to spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java index 1dbe230adc..baffe7b503 100644 --- a/spring-mvc-xml/src/main/java/org/baeldung/spring/controller/EmployeeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.controller; +package com.baeldung.spring.controller; import javax.validation.Valid; -import org.baeldung.spring.form.Employee; +import com.baeldung.spring.form.Employee; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java new file mode 100644 index 0000000000..39dabf86ed --- /dev/null +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java @@ -0,0 +1,84 @@ +package com.baeldung.spring.controller; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import com.baeldung.spring.form.Person; +import com.baeldung.spring.validator.PersonValidator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class PersonController { + + @Autowired + PersonValidator validator; + + @RequestMapping(value = "/person", method = RequestMethod.GET) + public ModelAndView showForm(final Model model) { + + initData(model); + return new ModelAndView("personForm", "person", new Person()); + } + + @RequestMapping(value = "/addPerson", method = RequestMethod.POST) + public String submit(@Valid @ModelAttribute("person") final Person person, final BindingResult result, + final ModelMap modelMap, final Model model) { + + validator.validate(person, result); + + if (result.hasErrors()) { + + initData(model); + return "personForm"; + } + + modelMap.addAttribute("person", person); + + return "personView"; + } + + private void initData(final Model model) { + + final List favouriteLanguageItem = new ArrayList(); + favouriteLanguageItem.add("Java"); + favouriteLanguageItem.add("C++"); + favouriteLanguageItem.add("Perl"); + model.addAttribute("favouriteLanguageItem", favouriteLanguageItem); + + final List jobItem = new ArrayList(); + jobItem.add("Full time"); + jobItem.add("Part time"); + model.addAttribute("jobItem", jobItem); + + final Map countryItems = new LinkedHashMap(); + countryItems.put("US", "United Stated"); + countryItems.put("IT", "Italy"); + countryItems.put("UK", "United Kingdom"); + countryItems.put("FR", "Grance"); + model.addAttribute("countryItems", countryItems); + + final List fruit = new ArrayList(); + fruit.add("Banana"); + fruit.add("Mango"); + fruit.add("Apple"); + model.addAttribute("fruit", fruit); + + final List books = new ArrayList(); + books.add("The Great Gatsby"); + books.add("Nineteen Eighty-Four"); + books.add("The Lord of the Rings"); + model.addAttribute("books", books); + } +} diff --git a/spring-mvc-xml/src/main/java/org/baeldung/spring/form/Employee.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java similarity index 95% rename from spring-mvc-xml/src/main/java/org/baeldung/spring/form/Employee.java rename to spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java index 70132b9665..f41496212f 100644 --- a/spring-mvc-xml/src/main/java/org/baeldung/spring/form/Employee.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Employee.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.form; +package com.baeldung.spring.form; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java new file mode 100644 index 0000000000..88e4f9ff4c --- /dev/null +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java @@ -0,0 +1,152 @@ +package com.baeldung.spring.form; + +import java.util.List; + +import org.hibernate.validator.constraints.NotEmpty; +import org.springframework.web.multipart.MultipartFile; + +public class Person { + + private long id; + + private String name; + private String email; + private String dateOfBirth; + + @NotEmpty + private String password; + private String sex; + private String country; + private String book; + private String job; + private boolean receiveNewsletter; + private String[] hobbies; + private List favouriteLanguage; + private List fruit; + private String notes; + private MultipartFile file; + + public Person() { + super(); + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(final String email) { + this.email = email; + } + + public String getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(final String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } + + public String getSex() { + return sex; + } + + public void setSex(final String sex) { + this.sex = sex; + } + + public String getCountry() { + return country; + } + + public void setCountry(final String country) { + this.country = country; + } + + public String getJob() { + return job; + } + + public void setJob(final String job) { + this.job = job; + } + + public boolean isReceiveNewsletter() { + return receiveNewsletter; + } + + public void setReceiveNewsletter(final boolean receiveNewsletter) { + this.receiveNewsletter = receiveNewsletter; + } + + public String[] getHobbies() { + return hobbies; + } + + public void setHobbies(final String[] hobbies) { + this.hobbies = hobbies; + } + + public List getFavouriteLanguage() { + return favouriteLanguage; + } + + public void setFavouriteLanguage(final List favouriteLanguage) { + this.favouriteLanguage = favouriteLanguage; + } + + public String getNotes() { + return notes; + } + + public void setNotes(final String notes) { + this.notes = notes; + } + + public List getFruit() { + return fruit; + } + + public void setFruit(final List fruit) { + this.fruit = fruit; + } + + public String getBook() { + return book; + } + + public void setBook(final String book) { + this.book = book; + } + + public MultipartFile getFile() { + return file; + } + + public void setFile(final MultipartFile file) { + this.file = file; + } +} diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java new file mode 100644 index 0000000000..3a271f6545 --- /dev/null +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java @@ -0,0 +1,22 @@ +package com.baeldung.spring.validator; + +import com.baeldung.spring.form.Person; +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.ValidationUtils; +import org.springframework.validation.Validator; + +@Component +public class PersonValidator implements Validator { + + @Override + public boolean supports(final Class calzz) { + return Person.class.isAssignableFrom(calzz); + } + + @Override + public void validate(final Object obj, final Errors errors) { + + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name"); + } +} \ No newline at end of file diff --git a/spring-mvc-xml/src/main/resources/messages.properties b/spring-mvc-xml/src/main/resources/messages.properties new file mode 100644 index 0000000000..2a3cccf76c --- /dev/null +++ b/spring-mvc-xml/src/main/resources/messages.properties @@ -0,0 +1,2 @@ +required.name = Name is required! +NotEmpty.person.password = Password is required! \ No newline at end of file diff --git a/spring-mvc-xml/src/main/resources/webMvcConfig.xml b/spring-mvc-xml/src/main/resources/webMvcConfig.xml index a7aa252c08..0947eec368 100644 --- a/spring-mvc-xml/src/main/resources/webMvcConfig.xml +++ b/spring-mvc-xml/src/main/resources/webMvcConfig.xml @@ -11,7 +11,9 @@ > - + + + @@ -19,4 +21,8 @@ + + + + \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp new file mode 100644 index 0000000000..1d14658f93 --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp @@ -0,0 +1,120 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> + + + + Form Example - Register a Person + + + + + + +

    Welcome, Enter the Person Details

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name
    E-mail
    Date of birth
    Password
    Sex + Male:
    + Female: +
    Job + +
    Country + +
    Book + + + + +
    Fruit + +
    Receive newsletter
    Hobbies + Bird watching: + Astronomy: + Snowboarding: +
    Favourite languages + +
    Notes
    + +
    + + + + \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/view/personView.jsp b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personView.jsp new file mode 100644 index 0000000000..8e874fbd02 --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personView.jsp @@ -0,0 +1,66 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + Spring MVC Form Handling + + + +

    Submitted Person Information

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Id :${person.id}
    Name :${person.name}
    Date of birth :${person.dateOfBirth}
    Password :${person.password}
    Sex :${person.sex}
    Job :${person.job}
    Country :${person.country}
    Fruit :[]
    Book :${person.book}
    Receive Newsletter :${person.receiveNewsletter}
    Hobbies :[]
    Favourite Languages :[]
    Notes :${person.notes}
    + + + \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml index 5275efdf24..29608a17ef 100644 --- a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml @@ -16,7 +16,7 @@ contextConfigLocation - org.baeldung.spring + com.baeldung.spring diff --git a/spring-openid/README.md b/spring-openid/README.md new file mode 100644 index 0000000000..c5989217f4 --- /dev/null +++ b/spring-openid/README.md @@ -0,0 +1,17 @@ +========= + +## OpenID Connect with Spring Security + + +### Build the Project +``` +mvn clean install +``` + + +### Obtain Google App - Client ID, Secret +- You need to get client id and client secret from [Google Developer Console](https://console.developers.google.com/project/_/apiui/credential?pli=1) +- Make sure to add OAuth2 credentials by selecting Add credentials > OAuth 2.0 client ID +- Make sure you set redirect URI to http://localhost:8081/google-login + +- Once you have your client id and secret, make sure you add them to the `application.properties` of the project diff --git a/spring-openid/pom.xml b/spring-openid/pom.xml index 641fe93a09..39cf3e9d4e 100644 --- a/spring-openid/pom.xml +++ b/spring-openid/pom.xml @@ -1,68 +1,66 @@ - - 4.0.0 + + 4.0.0 - org.baeldung - spring-openid - 0.0.1-SNAPSHOT - war + com.baeldung + spring-openid + 0.0.1-SNAPSHOT + war - spring-openid - Spring OpenID sample project + spring-openid + Spring OpenID sample project - - org.springframework.boot - spring-boot-starter-parent - 1.3.2.RELEASE - + + org.springframework.boot + spring-boot-starter-parent + 1.3.3.RELEASE + - + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.security.oauth spring-security-oauth2 - - org.springframework.security - spring-security-jwt - + + org.springframework.security + spring-security-jwt + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - UTF-8 1.8 + diff --git a/spring-openid/src/main/resources/application.properties b/spring-openid/src/main/resources/application.properties deleted file mode 100644 index fa567a164c..0000000000 --- a/spring-openid/src/main/resources/application.properties +++ /dev/null @@ -1,6 +0,0 @@ -server.port=8081 -google.clientId=497324626536-d6fphsh1qpl2o6j2j66nukajrfqc0rtq.apps.googleusercontent.com -google.clientSecret=vtueZycMsrRjjCjnY6JzbEZT -google.accessTokenUri=https://www.googleapis.com/oauth2/v3/token -google.userAuthorizationUri=https://accounts.google.com/o/oauth2/auth -google.redirectUri=http://localhost:8081/google-login \ No newline at end of file diff --git a/spring-openid/src/main/resources/application.properties.sample.properties b/spring-openid/src/main/resources/application.properties.sample.properties new file mode 100644 index 0000000000..3b4f7716f0 --- /dev/null +++ b/spring-openid/src/main/resources/application.properties.sample.properties @@ -0,0 +1,6 @@ +server.port=8081 +google.clientId=TODO +google.clientSecret=TODO +google.accessTokenUri=https://www.googleapis.com/oauth2/v3/token +google.userAuthorizationUri=https://accounts.google.com/o/oauth2/auth +google.redirectUri=http://localhost:8081/google-login \ No newline at end of file diff --git a/spring-security-login-and-registration/.classpath b/spring-quartz/.classpath similarity index 93% rename from spring-security-login-and-registration/.classpath rename to spring-quartz/.classpath index 26981b6dd7..6d7587a819 100644 --- a/spring-security-login-and-registration/.classpath +++ b/spring-quartz/.classpath @@ -17,13 +17,12 @@
    - + - - + diff --git a/spring-quartz/.project b/spring-quartz/.project new file mode 100644 index 0000000000..6adc420837 --- /dev/null +++ b/spring-quartz/.project @@ -0,0 +1,35 @@ + + + spring-quartz + + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + + diff --git a/spring-quartz/pom.xml b/spring-quartz/pom.xml index ce286f3d1f..709cfb9e3d 100644 --- a/spring-quartz/pom.xml +++ b/spring-quartz/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.baeldung + com.baeldung spring-quartz spring-quartz 0.0.1-SNAPSHOT diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 54ac868b95..767f90a6a6 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-rest 0.1-SNAPSHOT spring-rest @@ -226,15 +226,15 @@ - 4.0.3.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 - 2.5.5 + 2.7.2 5.2.2.Final @@ -251,17 +251,17 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 1.7.13 1.1.3 - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.15 + 2.19.1 + 1.4.18 diff --git a/spring-security-basic-auth/pom.xml b/spring-security-basic-auth/pom.xml index 1e15cd5b53..009f5584bb 100644 --- a/spring-security-basic-auth/pom.xml +++ b/spring-security-basic-auth/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-basic-auth 0.1-SNAPSHOT @@ -225,12 +225,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -253,14 +253,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-login-and-registration/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch b/spring-security-login-and-registration/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch deleted file mode 100644 index 627021fb96..0000000000 --- a/spring-security-login-and-registration/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/spring-security-login-and-registration/.project b/spring-security-login-and-registration/.project deleted file mode 100644 index 4a27f224a4..0000000000 --- a/spring-security-login-and-registration/.project +++ /dev/null @@ -1,55 +0,0 @@ - - - spring-security-login-and-registration - - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - org.eclipse.wst.validation.validationbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature - org.hibernate.eclipse.console.hibernateNature - org.jboss.tools.jst.web.kb.kbnature - - diff --git a/spring-security-login-and-registration/.springBeans b/spring-security-login-and-registration/.springBeans deleted file mode 100644 index 8096aa036b..0000000000 --- a/spring-security-login-and-registration/.springBeans +++ /dev/null @@ -1,15 +0,0 @@ - - - 1 - - - - - - - - - - - - diff --git a/spring-security-login-and-registration/README.md b/spring-security-login-and-registration/README.md deleted file mode 100644 index 07fb21bfff..0000000000 --- a/spring-security-login-and-registration/README.md +++ /dev/null @@ -1,37 +0,0 @@ -========= - -## Login and Registration Example Project with Spring Security - - -### Relevant Articles: -- [Spring Security Registration Tutorial](http://www.baeldung.com/spring-security-registration) -- [The Registration Process With Spring Security](http://www.baeldung.com/registration-with-spring-mvc-and-spring-security) -- [Registration – Activate a New Account by Email](http://www.baeldung.com/registration-verify-user-by-email) -- [Registration with Spring Security – Password Encoding](http://www.baeldung.com/spring-security-registration-password-encoding-bcrypt) -- [Spring Security – Roles and Privileges](http://www.baeldung.com/role-and-privilege-for-spring-security-registration) -- [Prevent Brute Force Authentication Attempts with Spring Security](http://www.baeldung.com/spring-security-block-brute-force-authentication-attempts) -- [Spring Security – Reset Your Password](http://www.baeldung.com/spring-security-registration-i-forgot-my-password) -- [Spring Security Registration – Resend Verification Email](http://www.baeldung.com/spring-security-registration-verification-email) -- [The Registration API becomes RESTful](http://www.baeldung.com/registration-restful-api) -- [Registration – Password Strength and Rules](http://www.baeldung.com/registration-password-strength-and-rules) -- [Updating your Password](http://www.baeldung.com/updating-your-password/) - -### Build the Project -``` -mvn clean install -``` - - -### Set up MySQL -``` -mysql -u root -p -> CREATE USER 'tutorialuser'@'localhost' IDENTIFIED BY 'tutorialmy5ql'; -> GRANT ALL PRIVILEGES ON *.* TO 'tutorialuser'@'localhost'; -> FLUSH PRIVILEGES; -``` - - -### Set up Email - -You need to configure the email by renaming file "email.properties.sample" to "email.properties" and provide your own username and password. -You also need to use your own host, you can use Amazon or Google for example. diff --git a/spring-security-login-and-registration/pom.xml b/spring-security-login-and-registration/pom.xml deleted file mode 100644 index bcbe9371e2..0000000000 --- a/spring-security-login-and-registration/pom.xml +++ /dev/null @@ -1,354 +0,0 @@ - - - 4.0.0 - - org.baeldung - spring-security-login-and-registration - 1.0.1-SNAPSHOT - - spring-security-login-and-registration - war - - - - - - - - - org.springframework.security - spring-security-web - ${org.springframework.security.version} - - - org.springframework.security - spring-security-config - ${org.springframework.security.version} - - - org.springframework.security - spring-security-taglibs - ${org.springframework.security.version} - - - - - - org.springframework - spring-core - ${org.springframework.version} - - - commons-logging - commons-logging - - - - - org.springframework - spring-context - ${org.springframework.version} - - - org.springframework - spring-context-support - ${org.springframework.version} - - - org.springframework - spring-jdbc - ${org.springframework.version} - - - org.springframework - spring-beans - ${org.springframework.version} - - - org.springframework - spring-aop - ${org.springframework.version} - - - org.springframework - spring-tx - ${org.springframework.version} - - - org.springframework - spring-expression - ${org.springframework.version} - - - - org.springframework - spring-web - ${org.springframework.version} - - - org.springframework - spring-webmvc - ${org.springframework.version} - - - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} - provided - - - - javax.servlet - jstl - ${jstl.version} - runtime - - - - - org.springframework - spring-test - ${org.springframework.version} - test - - - - - org.passay - passay - ${passay.version} - - - - - org.springframework.data - spring-data-jpa - ${spring-data-jpa.version} - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - - - - - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - - - mysql - mysql-connector-java - ${mysql-connector-java.version} - - - commons-dbcp - commons-dbcp - ${commons-dbcp.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - javax.mail - mail - ${javax.mail.version} - - - com.google.guava - guava - ${guava.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - junit - junit - ${junit.version} - test - - - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - com.jayway.restassured - rest-assured - ${rest-assured.version} - test - - - commons-logging - commons-logging - - - - - - javax.el - el-api - 2.2 - - - - - spring-security-login-and-registration - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*IntegrationTest.java - **/*LiveTest.java - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - - - - - - - 1.8 - - - 4.2.4.RELEASE - 4.0.3.RELEASE - - - 4.3.11.Final - 5.2.2.Final - 5.1.37 - 1.9.2.RELEASE - - - - 1.7.13 - 1.1.3 - - - 2.3.2-b01 - 3.0.1 - 1.2 - - - 1 - - - 1.8.2.RELEASE - - - 19.0 - - 1.3 - 4.12 - 1.0 - 2.4.0 - 1.4.7 - 2.6.4 - 1.4 - - - 1.4.17 - 3.3 - 2.6 - 2.18.1 - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PasswordResetTokenRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PasswordResetTokenRepository.java deleted file mode 100644 index a1c22998de..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PasswordResetTokenRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.PasswordResetToken; -import org.baeldung.persistence.model.User; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface PasswordResetTokenRepository extends JpaRepository { - - PasswordResetToken findByToken(String token); - - PasswordResetToken findByUser(User user); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PrivilegeRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PrivilegeRepository.java deleted file mode 100644 index f728e171df..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/PrivilegeRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.Privilege; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface PrivilegeRepository extends JpaRepository { - - Privilege findByName(String name); - - @Override - void delete(Privilege privilege); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/RoleRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/RoleRepository.java deleted file mode 100644 index 3d6ba16d0f..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/RoleRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.Role; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface RoleRepository extends JpaRepository { - - Role findByName(String name); - - @Override - void delete(Role role); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java deleted file mode 100644 index 680b6973fa..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/UserRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.User; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { - User findByEmail(String email); - - @Override - void delete(User user); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java deleted file mode 100644 index d40a843e88..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface VerificationTokenRepository extends JpaRepository { - - VerificationToken findByToken(String token); - - VerificationToken findByUser(User user); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java deleted file mode 100644 index fdf5473764..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/PasswordResetToken.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Calendar; -import java.util.Date; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; - -@Entity -public class PasswordResetToken { - - private static final int EXPIRATION = 60 * 24; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String token; - - @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER) - @JoinColumn(nullable = false, name = "user_id") - private User user; - - private Date expiryDate; - - public PasswordResetToken() { - super(); - } - - public PasswordResetToken(final String token) { - super(); - - this.token = token; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - public PasswordResetToken(final String token, final User user) { - super(); - - this.token = token; - this.user = user; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - // - - public String getToken() { - return token; - } - - public void setToken(final String token) { - this.token = token; - } - - public User getUser() { - return user; - } - - public void setUser(final User user) { - this.user = user; - } - - public Date getExpiryDate() { - return expiryDate; - } - - public void setExpiryDate(final Date expiryDate) { - this.expiryDate = expiryDate; - } - - private Date calculateExpiryDate(final int expiryTimeInMinutes) { - final Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(new Date().getTime()); - cal.add(Calendar.MINUTE, expiryTimeInMinutes); - return new Date(cal.getTime().getTime()); - } - - public void updateToken(final String token) { - this.token = token; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((expiryDate == null) ? 0 : expiryDate.hashCode()); - result = prime * result + ((token == null) ? 0 : token.hashCode()); - result = prime * result + ((user == null) ? 0 : user.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final PasswordResetToken other = (PasswordResetToken) obj; - if (expiryDate == null) { - if (other.expiryDate != null) { - return false; - } - } else if (!expiryDate.equals(other.expiryDate)) { - return false; - } - if (token == null) { - if (other.token != null) { - return false; - } - } else if (!token.equals(other.token)) { - return false; - } - if (user == null) { - if (other.user != null) { - return false; - } - } else if (!user.equals(other.user)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Token [String=").append(token).append("]").append("[Expires").append(expiryDate).append("]"); - return builder.toString(); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Privilege.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Privilege.java deleted file mode 100644 index 1331b1985d..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Privilege.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Collection; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.ManyToMany; - -@Entity -public class Privilege { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String name; - - @ManyToMany(mappedBy = "privileges") - private Collection roles; - - public Privilege() { - super(); - } - - public Privilege(final String name) { - super(); - this.name = name; - } - - // - - public Long getId() { - return id; - } - - public void setId(final Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public Collection getRoles() { - return roles; - } - - public void setRoles(final Collection roles) { - this.roles = roles; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Privilege privilege = (Privilege) obj; - if (!privilege.equals(privilege.name)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Privilege [name=").append(name).append("]").append("[id=").append(id).append("]"); - return builder.toString(); - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Role.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Role.java deleted file mode 100644 index 86680252d2..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/Role.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Collection; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; - -@Entity -public class Role { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - @ManyToMany(mappedBy = "roles") - private Collection users; - - @ManyToMany - @JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id") , inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id") ) - private Collection privileges; - - private String name; - - public Role() { - super(); - } - - public Role(final String name) { - super(); - this.name = name; - } - - // - - public Long getId() { - return id; - } - - public void setId(final Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public Collection getUsers() { - return users; - } - - public void setUsers(final Collection users) { - this.users = users; - } - - public Collection getPrivileges() { - return privileges; - } - - public void setPrivileges(final Collection privileges) { - this.privileges = privileges; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Role role = (Role) obj; - if (!role.equals(role.name)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Role [name=").append(name).append("]").append("[id=").append(id).append("]"); - return builder.toString(); - } -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java deleted file mode 100644 index 9640ba079b..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Collection; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToMany; - -@Entity -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String firstName; - - private String lastName; - - private String email; - - @Column(length = 60) - private String password; - - private boolean enabled; - - private boolean tokenExpired; - - // - - @ManyToMany - @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") , inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id") ) - private Collection roles; - - public User() { - super(); - this.enabled = false; - this.tokenExpired = false; - } - - public Long getId() { - return id; - } - - public void setId(final Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(final String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(final String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(final String username) { - this.email = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(final String password) { - this.password = password; - } - - public Collection getRoles() { - return roles; - } - - public void setRoles(final Collection roles) { - this.roles = roles; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - public boolean isTokenExpired() { - return tokenExpired; - } - - public void setTokenExpired(final boolean expired) { - this.tokenExpired = expired; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((email == null) ? 0 : email.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final User user = (User) obj; - if (!email.equals(user.email)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]"); - return builder.toString(); - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java deleted file mode 100644 index a8eb49f672..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/VerificationToken.java +++ /dev/null @@ -1,141 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Calendar; -import java.util.Date; - -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; - -@Entity -public class VerificationToken { - - private static final int EXPIRATION = 60 * 24; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String token; - - @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER) - @JoinColumn(nullable = false, name = "user_id") - private User user; - - private Date expiryDate; - - public VerificationToken() { - super(); - } - - public VerificationToken(final String token) { - super(); - - this.token = token; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - public VerificationToken(final String token, final User user) { - super(); - - this.token = token; - this.user = user; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - public String getToken() { - return token; - } - - public void setToken(final String token) { - this.token = token; - } - - public User getUser() { - return user; - } - - public void setUser(final User user) { - this.user = user; - } - - public Date getExpiryDate() { - return expiryDate; - } - - public void setExpiryDate(final Date expiryDate) { - this.expiryDate = expiryDate; - } - - private Date calculateExpiryDate(final int expiryTimeInMinutes) { - final Calendar cal = Calendar.getInstance(); - cal.setTimeInMillis(new Date().getTime()); - cal.add(Calendar.MINUTE, expiryTimeInMinutes); - return new Date(cal.getTime().getTime()); - } - - public void updateToken(final String token) { - this.token = token; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((expiryDate == null) ? 0 : expiryDate.hashCode()); - result = prime * result + ((token == null) ? 0 : token.hashCode()); - result = prime * result + ((user == null) ? 0 : user.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final VerificationToken other = (VerificationToken) obj; - if (expiryDate == null) { - if (other.expiryDate != null) { - return false; - } - } else if (!expiryDate.equals(other.expiryDate)) { - return false; - } - if (token == null) { - if (other.token != null) { - return false; - } - } else if (!token.equals(other.token)) { - return false; - } - if (user == null) { - if (other.user != null) { - return false; - } - } else if (!user.equals(other.user)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Token [String=").append(token).append("]").append("[Expires").append(expiryDate).append("]"); - return builder.toString(); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java deleted file mode 100644 index 9fa97395fa..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/IUserService.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.baeldung.persistence.service; - -import org.baeldung.persistence.model.PasswordResetToken; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.validation.EmailExistsException; - -public interface IUserService { - - User registerNewUserAccount(UserDto accountDto) throws EmailExistsException; - - User getUser(String verificationToken); - - void saveRegisteredUser(User user); - - void deleteUser(User user); - - void createVerificationTokenForUser(User user, String token); - - VerificationToken getVerificationToken(String VerificationToken); - - VerificationToken generateNewVerificationToken(String token); - - void createPasswordResetTokenForUser(User user, String token); - - User findUserByEmail(String email); - - PasswordResetToken getPasswordResetToken(String token); - - User getUserByPasswordResetToken(String token); - - User getUserByID(long id); - - void changeUserPassword(User user, String password); - - boolean checkIfValidOldPassword(User user, String password); - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java deleted file mode 100644 index 627aac81c4..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserDto.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.baeldung.persistence.service; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -import org.baeldung.validation.PasswordMatches; -import org.baeldung.validation.ValidEmail; -import org.baeldung.validation.ValidPassword; - -@PasswordMatches -public class UserDto { - @NotNull - @Size(min = 1) - private String firstName; - - @NotNull - @Size(min = 1) - private String lastName; - - @ValidPassword - private String password; - - @NotNull - @Size(min = 1) - private String matchingPassword; - - @ValidEmail - @NotNull - @Size(min = 1) - private String email; - - public String getEmail() { - return email; - } - - public void setEmail(final String email) { - this.email = email; - } - - private Integer role; - - public Integer getRole() { - return role; - } - - public void setRole(final Integer role) { - this.role = role; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(final String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(final String lastName) { - this.lastName = lastName; - } - - public String getPassword() { - return password; - } - - public void setPassword(final String password) { - this.password = password; - } - - public String getMatchingPassword() { - return matchingPassword; - } - - public void setMatchingPassword(final String matchingPassword) { - this.matchingPassword = matchingPassword; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[email").append(email).append("]").append("[password").append(password).append("]"); - return builder.toString(); - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java deleted file mode 100644 index fafe52953f..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.baeldung.persistence.service; - -import java.util.Arrays; -import java.util.UUID; - -import javax.transaction.Transactional; - -import org.baeldung.persistence.dao.PasswordResetTokenRepository; -import org.baeldung.persistence.dao.RoleRepository; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.dao.VerificationTokenRepository; -import org.baeldung.persistence.model.PasswordResetToken; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.validation.EmailExistsException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; - -@Service -@Transactional -public class UserService implements IUserService { - @Autowired - private UserRepository repository; - - @Autowired - private VerificationTokenRepository tokenRepository; - - @Autowired - private PasswordResetTokenRepository passwordTokenRepository; - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - private RoleRepository roleRepository; - - // API - - @Override - public User registerNewUserAccount(final UserDto accountDto) throws EmailExistsException { - if (emailExist(accountDto.getEmail())) { - throw new EmailExistsException("There is an account with that email adress: " + accountDto.getEmail()); - } - final User user = new User(); - - user.setFirstName(accountDto.getFirstName()); - user.setLastName(accountDto.getLastName()); - user.setPassword(passwordEncoder.encode(accountDto.getPassword())); - user.setEmail(accountDto.getEmail()); - - user.setRoles(Arrays.asList(roleRepository.findByName("ROLE_USER"))); - return repository.save(user); - } - - @Override - public User getUser(final String verificationToken) { - final User user = tokenRepository.findByToken(verificationToken).getUser(); - return user; - } - - @Override - public VerificationToken getVerificationToken(final String VerificationToken) { - return tokenRepository.findByToken(VerificationToken); - } - - @Override - public void saveRegisteredUser(final User user) { - repository.save(user); - } - - @Override - public void deleteUser(final User user) { - repository.delete(user); - } - - @Override - public void createVerificationTokenForUser(final User user, final String token) { - final VerificationToken myToken = new VerificationToken(token, user); - tokenRepository.save(myToken); - } - - @Override - public VerificationToken generateNewVerificationToken(final String existingVerificationToken) { - VerificationToken vToken = tokenRepository.findByToken(existingVerificationToken); - vToken.updateToken(UUID.randomUUID().toString()); - vToken = tokenRepository.save(vToken); - return vToken; - } - - @Override - public void createPasswordResetTokenForUser(final User user, final String token) { - final PasswordResetToken myToken = new PasswordResetToken(token, user); - passwordTokenRepository.save(myToken); - } - - @Override - public User findUserByEmail(final String email) { - return repository.findByEmail(email); - } - - @Override - public PasswordResetToken getPasswordResetToken(final String token) { - return passwordTokenRepository.findByToken(token); - } - - @Override - public User getUserByPasswordResetToken(final String token) { - return passwordTokenRepository.findByToken(token).getUser(); - } - - @Override - public User getUserByID(final long id) { - return repository.findOne(id); - } - - @Override - public void changeUserPassword(final User user, final String password) { - user.setPassword(passwordEncoder.encode(password)); - repository.save(user); - } - - @Override - public boolean checkIfValidOldPassword(final User user, final String oldPassword) { - return passwordEncoder.matches(oldPassword, user.getPassword()); - } - - private boolean emailExist(final String email) { - final User user = repository.findByEmail(email); - if (user != null) { - return true; - } - return false; - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/registration/OnRegistrationCompleteEvent.java b/spring-security-login-and-registration/src/main/java/org/baeldung/registration/OnRegistrationCompleteEvent.java deleted file mode 100644 index 75433f1286..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/registration/OnRegistrationCompleteEvent.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.baeldung.registration; - -import java.util.Locale; - -import org.baeldung.persistence.model.User; -import org.springframework.context.ApplicationEvent; - -@SuppressWarnings("serial") -public class OnRegistrationCompleteEvent extends ApplicationEvent { - - private final String appUrl; - private final Locale locale; - private final User user; - - public OnRegistrationCompleteEvent(final User user, final Locale locale, final String appUrl) { - super(user); - this.user = user; - this.locale = locale; - this.appUrl = appUrl; - } - - // - - public String getAppUrl() { - return appUrl; - } - - public Locale getLocale() { - return locale; - } - - public User getUser() { - return user; - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/registration/listener/RegistrationListener.java b/spring-security-login-and-registration/src/main/java/org/baeldung/registration/listener/RegistrationListener.java deleted file mode 100644 index 0a3689f670..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/registration/listener/RegistrationListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.baeldung.registration.listener; - -import java.util.UUID; - -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.service.IUserService; -import org.baeldung.registration.OnRegistrationCompleteEvent; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.context.MessageSource; -import org.springframework.core.env.Environment; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.stereotype.Component; - -@Component -public class RegistrationListener implements ApplicationListener { - @Autowired - private IUserService service; - - @Autowired - private MessageSource messages; - - @Autowired - private JavaMailSender mailSender; - - @Autowired - private Environment env; - - // API - - @Override - public void onApplicationEvent(final OnRegistrationCompleteEvent event) { - this.confirmRegistration(event); - } - - private void confirmRegistration(final OnRegistrationCompleteEvent event) { - final User user = event.getUser(); - final String token = UUID.randomUUID().toString(); - service.createVerificationTokenForUser(user, token); - - final SimpleMailMessage email = constructEmailMessage(event, user, token); - mailSender.send(email); - } - - // - - private final SimpleMailMessage constructEmailMessage(final OnRegistrationCompleteEvent event, final User user, final String token) { - final String recipientAddress = user.getEmail(); - final String subject = "Registration Confirmation"; - final String confirmationUrl = event.getAppUrl() + "/regitrationConfirm.html?token=" + token; - final String message = messages.getMessage("message.regSucc", null, event.getLocale()); - final SimpleMailMessage email = new SimpleMailMessage(); - email.setTo(recipientAddress); - email.setSubject(subject); - email.setText(message + " \r\n" + confirmationUrl); - email.setFrom(env.getProperty("support.email")); - return email; - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationFailureListener.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationFailureListener.java deleted file mode 100644 index aad26eebb7..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationFailureListener.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.security; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.security.authentication.event.AuthenticationFailureBadCredentialsEvent; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; - -@Component -public class AuthenticationFailureListener implements ApplicationListener { - - @Autowired - private LoginAttemptService loginAttemptService; - - @Override - public void onApplicationEvent(final AuthenticationFailureBadCredentialsEvent e) { - final WebAuthenticationDetails auth = (WebAuthenticationDetails) e.getAuthentication().getDetails(); - if (auth != null) { - loginAttemptService.loginFailed(auth.getRemoteAddress()); - } - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationSuccessEventListener.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationSuccessEventListener.java deleted file mode 100644 index bd4c69faa8..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/AuthenticationSuccessEventListener.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.security; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.security.authentication.event.AuthenticationSuccessEvent; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Component; - -@Component -public class AuthenticationSuccessEventListener implements ApplicationListener { - - @Autowired - private LoginAttemptService loginAttemptService; - - @Override - public void onApplicationEvent(final AuthenticationSuccessEvent e) { - final WebAuthenticationDetails auth = (WebAuthenticationDetails) e.getAuthentication().getDetails(); - if (auth != null) { - loginAttemptService.loginSucceeded(auth.getRemoteAddress()); - } - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/CustomAuthenticationFailureHandler.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/CustomAuthenticationFailureHandler.java deleted file mode 100644 index 94440f8a89..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/CustomAuthenticationFailureHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.baeldung.security; - -import java.io.IOException; -import java.util.Locale; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.MessageSource; -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.WebAttributes; -import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.LocaleResolver; - -@Component("authenticationFailureHandler") -public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { - - @Autowired - private MessageSource messages; - - @Autowired - private LocaleResolver localeResolver; - - @Override - public void onAuthenticationFailure(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException exception) throws IOException, ServletException { - setDefaultFailureUrl("/login.html?error=true"); - - super.onAuthenticationFailure(request, response, exception); - - final Locale locale = localeResolver.resolveLocale(request); - - String errorMessage = messages.getMessage("message.badCredentials", null, locale); - - if (exception.getMessage().equalsIgnoreCase("User is disabled")) { - errorMessage = messages.getMessage("auth.message.disabled", null, locale); - } else if (exception.getMessage().equalsIgnoreCase("User account has expired")) { - errorMessage = messages.getMessage("auth.message.expired", null, locale); - } else if (exception.getMessage().equalsIgnoreCase("blocked")) { - errorMessage = messages.getMessage("auth.message.blocked", null, locale); - } - - request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, errorMessage); - } -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/LoginAttemptService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/LoginAttemptService.java deleted file mode 100644 index 26eeee53f2..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/LoginAttemptService.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.baeldung.security; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - -import org.springframework.stereotype.Service; - -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; - -@Service -public class LoginAttemptService { - - private final int MAX_ATTEMPT = 10; - private LoadingCache attemptsCache; - - public LoginAttemptService() { - super(); - attemptsCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.DAYS).build(new CacheLoader() { - @Override - public Integer load(final String key) { - return 0; - } - }); - } - - // - - public void loginSucceeded(final String key) { - attemptsCache.invalidate(key); - } - - public void loginFailed(final String key) { - int attempts = 0; - try { - attempts = attemptsCache.get(key); - } catch (final ExecutionException e) { - attempts = 0; - } - attempts++; - attemptsCache.put(key, attempts); - } - - public boolean isBlocked(final String key) { - try { - return attemptsCache.get(key) >= MAX_ATTEMPT; - } catch (final ExecutionException e) { - return false; - } - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java deleted file mode 100644 index 37703d9a09..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.baeldung.security; - -import java.io.IOException; -import java.util.Collection; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.web.DefaultRedirectStrategy; -import org.springframework.security.web.RedirectStrategy; -import org.springframework.security.web.WebAttributes; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; -import org.springframework.stereotype.Component; - -@Component("myAuthenticationSuccessHandler") -public class MySimpleUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler { - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); - - @Override - public void onAuthenticationSuccess(final HttpServletRequest request, final HttpServletResponse response, final Authentication authentication) throws IOException { - handle(request, response, authentication); - final HttpSession session = request.getSession(false); - if (session != null) { - session.setMaxInactiveInterval(30 * 60); - } - clearAuthenticationAttributes(request); - } - - protected void handle(final HttpServletRequest request, final HttpServletResponse response, final Authentication authentication) throws IOException { - final String targetUrl = determineTargetUrl(authentication); - - if (response.isCommitted()) { - logger.debug("Response has already been committed. Unable to redirect to " + targetUrl); - return; - } - - redirectStrategy.sendRedirect(request, response, targetUrl); - } - - protected String determineTargetUrl(final Authentication authentication) { - boolean isUser = false; - boolean isAdmin = false; - final Collection authorities = authentication.getAuthorities(); - for (final GrantedAuthority grantedAuthority : authorities) { - if (grantedAuthority.getAuthority().equals("READ_PRIVILEGE")) { - isUser = true; - } else if (grantedAuthority.getAuthority().equals("WRITE_PRIVILEGE")) { - isAdmin = true; - isUser = false; - break; - } - } - if (isUser) { - return "/homepage.html?user=" + authentication.getName(); - } else if (isAdmin) { - return "/console.html"; - } else { - throw new IllegalStateException(); - } - } - - protected void clearAuthenticationAttributes(final HttpServletRequest request) { - final HttpSession session = request.getSession(false); - if (session == null) { - return; - } - session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); - } - - public void setRedirectStrategy(final RedirectStrategy redirectStrategy) { - this.redirectStrategy = redirectStrategy; - } - - protected RedirectStrategy getRedirectStrategy() { - return redirectStrategy; - } -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java deleted file mode 100644 index d4b77878be..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.baeldung.security; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; - -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.model.Privilege; -import org.baeldung.persistence.model.Role; -import org.baeldung.persistence.model.User; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service("userDetailsService") -@Transactional -public class MyUserDetailsService implements UserDetailsService { - - @Autowired - private UserRepository userRepository; - - @Autowired - private LoginAttemptService loginAttemptService; - - @Autowired - private HttpServletRequest request; - - public MyUserDetailsService() { - super(); - } - - // API - - @Override - public UserDetails loadUserByUsername(final String email) throws UsernameNotFoundException { - final String ip = getClientIP(); - if (loginAttemptService.isBlocked(ip)) { - throw new RuntimeException("blocked"); - } - - try { - final User user = userRepository.findByEmail(email); - if (user == null) { - throw new UsernameNotFoundException("No user found with username: " + email); - } - - return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), user.isEnabled(), true, true, true, getAuthorities(user.getRoles())); - } catch (final Exception e) { - throw new RuntimeException(e); - } - } - - // UTIL - - public final Collection getAuthorities(final Collection roles) { - return getGrantedAuthorities(getPrivileges(roles)); - } - - private final List getPrivileges(final Collection roles) { - final List privileges = new ArrayList(); - final List collection = new ArrayList(); - for (final Role role : roles) { - collection.addAll(role.getPrivileges()); - } - for (final Privilege item : collection) { - privileges.add(item.getName()); - } - return privileges; - } - - private final List getGrantedAuthorities(final List privileges) { - final List authorities = new ArrayList(); - for (final String privilege : privileges) { - authorities.add(new SimpleGrantedAuthority(privilege)); - } - return authorities; - } - - private String getClientIP() { - final String xfHeader = request.getHeader("X-Forwarded-For"); - if (xfHeader == null) { - return request.getRemoteAddr(); - } - return xfHeader.split(",")[0]; - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java deleted file mode 100644 index cba2b25285..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/AppConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.baeldung.spring; - -import java.util.Properties; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.core.env.Environment; -import org.springframework.mail.javamail.JavaMailSenderImpl; - -@Configuration -@ComponentScan(basePackages = { "org.baeldung.registration" }) -@PropertySource("classpath:email.properties") -public class AppConfig { - - @Autowired - private Environment env; - - // beans - - @Bean - public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Bean - public JavaMailSenderImpl javaMailSenderImpl() { - final JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl(); - mailSenderImpl.setHost(env.getProperty("smtp.host")); - mailSenderImpl.setPort(env.getProperty("smtp.port", Integer.class)); - mailSenderImpl.setProtocol(env.getProperty("smtp.protocol")); - mailSenderImpl.setUsername(env.getProperty("smtp.username")); - mailSenderImpl.setPassword(env.getProperty("smtp.password")); - final Properties javaMailProps = new Properties(); - javaMailProps.put("mail.smtp.auth", true); - javaMailProps.put("mail.smtp.starttls.enable", true); - mailSenderImpl.setJavaMailProperties(javaMailProps); - return mailSenderImpl; - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java deleted file mode 100644 index 1234cde0d0..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/MvcConfig.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.baeldung.spring; - -import java.util.Locale; - -import org.baeldung.validation.EmailValidator; -import org.baeldung.validation.PasswordMatchesValidator; -import org.springframework.context.MessageSource; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.ViewResolver; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.i18n.CookieLocaleResolver; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; -import org.springframework.web.servlet.view.InternalResourceViewResolver; -import org.springframework.web.servlet.view.JstlView; - -@Configuration -@ComponentScan(basePackages = { "org.baeldung.web" }) -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/login"); - registry.addViewController("/registration.html"); - registry.addViewController("/logout.html"); - registry.addViewController("/homepage.html"); - registry.addViewController("/expiredAccount.html"); - registry.addViewController("/badUser.html"); - registry.addViewController("/emailError.html"); - registry.addViewController("/home.html"); - registry.addViewController("/invalidSession.html"); - registry.addViewController("/console.html"); - registry.addViewController("/admin.html"); - registry.addViewController("/successRegister.html"); - registry.addViewController("/forgetPassword.html"); - registry.addViewController("/updatePassword.html"); - registry.addViewController("/changePassword.html"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/", "/resources/"); - } - - @Override - public void addInterceptors(final InterceptorRegistry registry) { - final LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("lang"); - registry.addInterceptor(localeChangeInterceptor); - } - - // beans - - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver bean = new InternalResourceViewResolver(); - bean.setViewClass(JstlView.class); - bean.setPrefix("/WEB-INF/view/"); - bean.setSuffix(".jsp"); - return bean; - } - - @Bean - public LocaleResolver localeResolver() { - final CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver(); - cookieLocaleResolver.setDefaultLocale(Locale.ENGLISH); - return cookieLocaleResolver; - } - - @Bean - public MessageSource messageSource() { - final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("classpath:messages"); - messageSource.setUseCodeAsDefaultMessage(true); - messageSource.setDefaultEncoding("UTF-8"); - messageSource.setCacheSeconds(0); - return messageSource; - } - - @Bean - public EmailValidator usernameValidator() { - return new EmailValidator(); - } - - @Bean - public PasswordMatchesValidator passwordMatchesValidator() { - return new PasswordMatchesValidator(); - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java deleted file mode 100644 index cb00353fe8..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.baeldung.spring; - -import java.util.Properties; - -import javax.sql.DataSource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@EnableTransactionManagement -@PropertySource({ "classpath:persistence.properties" }) -@ComponentScan({ "org.baeldung.persistence" }) -@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") -public class PersistenceJPAConfig { - - @Autowired - private Environment env; - - public PersistenceJPAConfig() { - super(); - } - - // - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { - final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); - final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - em.setJpaVendorAdapter(vendorAdapter); - em.setJpaProperties(additionalProperties()); - return em; - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); - dataSource.setUrl(env.getProperty("jdbc.url")); - dataSource.setUsername(env.getProperty("jdbc.user")); - dataSource.setPassword(env.getProperty("jdbc.pass")); - return dataSource; - } - - @Bean - public JpaTransactionManager transactionManager() { - final JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); - return transactionManager; - } - - @Bean - public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { - return new PersistenceExceptionTranslationPostProcessor(); - } - - final Properties additionalProperties() { - final Properties hibernateProperties = new Properties(); - hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); - hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); - return hibernateProperties; - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SecSecurityConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SecSecurityConfig.java deleted file mode 100644 index 9ae8f6e78b..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SecSecurityConfig.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.baeldung.spring; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.web.authentication.AuthenticationFailureHandler; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; - -@Configuration -@ComponentScan(basePackages = { "org.baeldung.security" }) -// @ImportResource({ "classpath:webSecurityConfig.xml" }) -@EnableWebSecurity -public class SecSecurityConfig extends WebSecurityConfigurerAdapter { - - @Autowired - private UserDetailsService userDetailsService; - - @Autowired - private AuthenticationSuccessHandler myAuthenticationSuccessHandler; - - @Autowired - private AuthenticationFailureHandler authenticationFailureHandler; - - public SecSecurityConfig() { - super(); - } - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - auth.authenticationProvider(authProvider()); - } - - @Override - public void configure(final WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http - .csrf().disable() - .authorizeRequests() - .antMatchers("/login*","/login*", "/logout*", "/signin/**", "/signup/**", - "/user/registration*", "/regitrationConfirm*", "/expiredAccount*", "/registration*", - "/badUser*", "/user/resendRegistrationToken*" ,"/forgetPassword*", "/user/resetPassword*", - "/user/changePassword*", "/emailError*", "/resources/**","/old/user/registration*","/successRegister*").permitAll() - .antMatchers("/invalidSession*").anonymous() - .anyRequest().authenticated() - .and() - .formLogin() - .loginPage("/login") - .defaultSuccessUrl("/homepage.html") - .failureUrl("/login?error=true") - .successHandler(myAuthenticationSuccessHandler) - .failureHandler(authenticationFailureHandler) - .permitAll() - .and() - .sessionManagement() - .invalidSessionUrl("/invalidSession.html") - .sessionFixation().none() - .and() - .logout() - .invalidateHttpSession(false) - .logoutSuccessUrl("/logout.html?logSucc=true") - .deleteCookies("JSESSIONID") - .permitAll(); - // @formatter:on - } - - // beans - - @Bean - public DaoAuthenticationProvider authProvider() { - final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); - authProvider.setUserDetailsService(userDetailsService); - authProvider.setPasswordEncoder(encoder()); - return authProvider; - } - - @Bean - public PasswordEncoder encoder() { - return new BCryptPasswordEncoder(11); - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SetupDataLoader.java b/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SetupDataLoader.java deleted file mode 100644 index 9f785b3239..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/spring/SetupDataLoader.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.baeldung.spring; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.baeldung.persistence.dao.PrivilegeRepository; -import org.baeldung.persistence.dao.RoleRepository; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.model.Privilege; -import org.baeldung.persistence.model.Role; -import org.baeldung.persistence.model.User; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -@Component -public class SetupDataLoader implements ApplicationListener { - - private boolean alreadySetup = false; - - @Autowired - private UserRepository userRepository; - - @Autowired - private RoleRepository roleRepository; - - @Autowired - private PrivilegeRepository privilegeRepository; - - @Autowired - private PasswordEncoder passwordEncoder; - - // API - - @Override - @Transactional - public void onApplicationEvent(final ContextRefreshedEvent event) { - if (alreadySetup) { - return; - } - - // == create initial privileges - final Privilege readPrivilege = createPrivilegeIfNotFound("READ_PRIVILEGE"); - final Privilege writePrivilege = createPrivilegeIfNotFound("WRITE_PRIVILEGE"); - - // == create initial roles - final List adminPrivileges = Arrays.asList(readPrivilege, writePrivilege); - createRoleIfNotFound("ROLE_ADMIN", adminPrivileges); - createRoleIfNotFound("ROLE_USER", Arrays.asList(readPrivilege)); - - final Role adminRole = roleRepository.findByName("ROLE_ADMIN"); - final User user = new User(); - user.setFirstName("Test"); - user.setLastName("Test"); - user.setPassword(passwordEncoder.encode("test")); - user.setEmail("test@test.com"); - user.setRoles(Arrays.asList(adminRole)); - user.setEnabled(true); - userRepository.save(user); - - alreadySetup = true; - } - - @Transactional - private final Privilege createPrivilegeIfNotFound(final String name) { - Privilege privilege = privilegeRepository.findByName(name); - if (privilege == null) { - privilege = new Privilege(name); - privilegeRepository.save(privilege); - } - return privilege; - } - - @Transactional - private final Role createRoleIfNotFound(final String name, final Collection privileges) { - Role role = roleRepository.findByName(name); - if (role == null) { - role = new Role(name); - role.setPrivileges(privileges); - roleRepository.save(role); - } - return role; - } - -} \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/test/TestConfig.java b/spring-security-login-and-registration/src/main/java/org/baeldung/test/TestConfig.java deleted file mode 100644 index 97b2c20632..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/test/TestConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung.test; - -import org.baeldung.spring.PersistenceJPAConfig; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; - -@ComponentScan({ "org.baeldung.persistence.dao" }) -public class TestConfig extends PersistenceJPAConfig { - - @Bean - public PasswordEncoder encoder() { - return new BCryptPasswordEncoder(11); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailExistsException.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailExistsException.java deleted file mode 100644 index 554dfe7cbc..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailExistsException.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.baeldung.validation; - -@SuppressWarnings("serial") -public class EmailExistsException extends Throwable { - - public EmailExistsException(final String message) { - super(message); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailValidator.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailValidator.java deleted file mode 100644 index ee2801eba0..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/EmailValidator.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.baeldung.validation; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - -public class EmailValidator implements ConstraintValidator { - private Pattern pattern; - private Matcher matcher; - private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - - @Override - public void initialize(final ValidEmail constraintAnnotation) { - } - - @Override - public boolean isValid(final String username, final ConstraintValidatorContext context) { - return (validateEmail(username)); - } - - private boolean validateEmail(final String email) { - pattern = Pattern.compile(EMAIL_PATTERN); - matcher = pattern.matcher(email); - return matcher.matches(); - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordConstraintValidator.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordConstraintValidator.java deleted file mode 100644 index 80d06a0f69..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordConstraintValidator.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.baeldung.validation; - -import java.util.Arrays; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - -import org.passay.DigitCharacterRule; -import org.passay.LengthRule; -import org.passay.PasswordData; -import org.passay.PasswordValidator; -import org.passay.RuleResult; -import org.passay.SpecialCharacterRule; -import org.passay.UppercaseCharacterRule; -import org.passay.WhitespaceRule; - -import com.google.common.base.Joiner; - -public class PasswordConstraintValidator implements ConstraintValidator { - - @Override - public void initialize(final ValidPassword arg0) { - - } - - @Override - public boolean isValid(final String password, final ConstraintValidatorContext context) { - final PasswordValidator validator = new PasswordValidator(Arrays.asList(new LengthRule(8, 30), new UppercaseCharacterRule(1), new DigitCharacterRule(1), new SpecialCharacterRule(1), new WhitespaceRule())); - final RuleResult result = validator.validate(new PasswordData(password)); - if (result.isValid()) { - return true; - } - context.disableDefaultConstraintViolation(); - context.buildConstraintViolationWithTemplate(Joiner.on("\n").join(validator.getMessages(result))).addConstraintViolation(); - return false; - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatches.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatches.java deleted file mode 100644 index fcc7e228a7..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatches.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.baeldung.validation; - -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.validation.Constraint; -import javax.validation.Payload; - -@Target({ TYPE, ANNOTATION_TYPE }) -@Retention(RUNTIME) -@Constraint(validatedBy = PasswordMatchesValidator.class) -@Documented -public @interface PasswordMatches { - - String message() default "Passwords don't match"; - - Class[] groups() default {}; - - Class[] payload() default {}; - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatchesValidator.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatchesValidator.java deleted file mode 100644 index a103b91e90..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/PasswordMatchesValidator.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.validation; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - -import org.baeldung.persistence.service.UserDto; - -public class PasswordMatchesValidator implements ConstraintValidator { - - @Override - public void initialize(final PasswordMatches constraintAnnotation) { - // - } - - @Override - public boolean isValid(final Object obj, final ConstraintValidatorContext context) { - final UserDto user = (UserDto) obj; - return user.getPassword().equals(user.getMatchingPassword()); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/UserValidator.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/UserValidator.java deleted file mode 100644 index 76348bee7e..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/UserValidator.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.validation; - -import org.baeldung.persistence.service.UserDto; -import org.springframework.validation.Errors; -import org.springframework.validation.ValidationUtils; -import org.springframework.validation.Validator; - -public class UserValidator implements Validator { - - @Override - public boolean supports(final Class clazz) { - return UserDto.class.isAssignableFrom(clazz); - } - - @Override - public void validate(final Object obj, final Errors errors) { - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "message.firstName", "Firstname is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "message.lastName", "LastName is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "message.password", "LastName is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "message.username", "UserName is required."); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidEmail.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidEmail.java deleted file mode 100644 index a520a45b0c..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidEmail.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.baeldung.validation; - -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.validation.Constraint; -import javax.validation.Payload; - -@Target({ TYPE, FIELD, ANNOTATION_TYPE }) -@Retention(RUNTIME) -@Constraint(validatedBy = EmailValidator.class) -@Documented -public @interface ValidEmail { - - String message() default "Invalid Email"; - - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidPassword.java b/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidPassword.java deleted file mode 100644 index 37b217213a..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/validation/ValidPassword.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.baeldung.validation; - -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import javax.validation.Constraint; -import javax.validation.Payload; - -@Documented -@Constraint(validatedBy = PasswordConstraintValidator.class) -@Target({ TYPE, FIELD, ANNOTATION_TYPE }) -@Retention(RUNTIME) -public @interface ValidPassword { - - String message() default "Invalid Password"; - - Class[] groups() default {}; - - Class[] payload() default {}; - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/OldRegistrationController.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/OldRegistrationController.java deleted file mode 100644 index dc14ad70a1..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/OldRegistrationController.java +++ /dev/null @@ -1,237 +0,0 @@ -package org.baeldung.web.controller; - -import java.util.Calendar; -import java.util.Locale; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -import org.baeldung.persistence.model.PasswordResetToken; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.persistence.service.IUserService; -import org.baeldung.persistence.service.UserDto; -import org.baeldung.registration.OnRegistrationCompleteEvent; -import org.baeldung.validation.EmailExistsException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.MessageSource; -import org.springframework.core.env.Environment; -import org.springframework.mail.MailAuthenticationException; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.servlet.ModelAndView; - -@Controller -@RequestMapping(value = "/old") -public class OldRegistrationController { - private final Logger LOGGER = LoggerFactory.getLogger(getClass()); - - @Autowired - private IUserService userService; - - @Autowired - private MessageSource messages; - - @Autowired - private JavaMailSender mailSender; - - @Autowired - private ApplicationEventPublisher eventPublisher; - - @Autowired - private UserDetailsService userDetailsService; - - @Autowired - private Environment env; - - public OldRegistrationController() { - super(); - } - - // API - - @RequestMapping(value = "/user/registration", method = RequestMethod.GET) - public String showRegistrationForm(final HttpServletRequest request, final Model model) { - LOGGER.debug("Rendering registration page."); - final UserDto accountDto = new UserDto(); - model.addAttribute("user", accountDto); - return "registration"; - } - - @RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET) - public String confirmRegistration(final HttpServletRequest request, final Model model, @RequestParam("token") final String token) { - final Locale locale = request.getLocale(); - - final VerificationToken verificationToken = userService.getVerificationToken(token); - if (verificationToken == null) { - final String message = messages.getMessage("auth.message.invalidToken", null, locale); - model.addAttribute("message", message); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - final User user = verificationToken.getUser(); - final Calendar cal = Calendar.getInstance(); - if ((verificationToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); - model.addAttribute("expired", true); - model.addAttribute("token", token); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - user.setEnabled(true); - userService.saveRegisteredUser(user); - model.addAttribute("message", messages.getMessage("message.accountVerified", null, locale)); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - @RequestMapping(value = "/user/registration", method = RequestMethod.POST) - public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid final UserDto userDto, final HttpServletRequest request, final Errors errors) { - LOGGER.debug("Registering user account with information: {}", userDto); - - final User registered = createUserAccount(userDto); - if (registered == null) { - // result.rejectValue("email", "message.regError"); - return new ModelAndView("registration", "user", userDto); - } - try { - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); - } catch (final Exception ex) { - LOGGER.warn("Unable to register user", ex); - return new ModelAndView("emailError", "user", userDto); - } - return new ModelAndView("successRegister", "user", userDto); - } - - @RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET) - public String resendRegistrationToken(final HttpServletRequest request, final Model model, @RequestParam("token") final String existingToken) { - final Locale locale = request.getLocale(); - final VerificationToken newToken = userService.generateNewVerificationToken(existingToken); - final User user = userService.getUser(newToken.getToken()); - try { - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - final SimpleMailMessage email = constructResetVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); - mailSender.send(email); - } catch (final MailAuthenticationException e) { - LOGGER.debug("MailAuthenticationException", e); - return "redirect:/emailError.html?lang=" + locale.getLanguage(); - } catch (final Exception e) { - LOGGER.debug(e.getLocalizedMessage(), e); - model.addAttribute("message", e.getLocalizedMessage()); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - model.addAttribute("message", messages.getMessage("message.resendToken", null, locale)); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - @RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST) - public String resetPassword(final HttpServletRequest request, final Model model, @RequestParam("email") final String userEmail) { - final User user = userService.findUserByEmail(userEmail); - if (user == null) { - model.addAttribute("message", messages.getMessage("message.userNotFound", null, request.getLocale())); - return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); - } - - final String token = UUID.randomUUID().toString(); - userService.createPasswordResetTokenForUser(user, token); - try { - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user); - mailSender.send(email); - } catch (final MailAuthenticationException e) { - LOGGER.debug("MailAuthenticationException", e); - return "redirect:/emailError.html?lang=" + request.getLocale().getLanguage(); - } catch (final Exception e) { - LOGGER.debug(e.getLocalizedMessage(), e); - model.addAttribute("message", e.getLocalizedMessage()); - return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); - } - model.addAttribute("message", messages.getMessage("message.resetPasswordEmail", null, request.getLocale())); - return "redirect:/login.html?lang=" + request.getLocale().getLanguage(); - } - - @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) - public String changePassword(final HttpServletRequest request, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) { - final Locale locale = request.getLocale(); - - final PasswordResetToken passToken = userService.getPasswordResetToken(token); - final User user = passToken.getUser(); - if (passToken == null || user.getId() != id) { - final String message = messages.getMessage("auth.message.invalidToken", null, locale); - model.addAttribute("message", message); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - final Calendar cal = Calendar.getInstance(); - if ((passToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - final Authentication auth = new UsernamePasswordAuthenticationToken(user, null, userDetailsService.loadUserByUsername(user.getEmail()).getAuthorities()); - SecurityContextHolder.getContext().setAuthentication(auth); - - return "redirect:/updatePassword.html?lang=" + locale.getLanguage(); - } - - @RequestMapping(value = "/user/savePassword", method = RequestMethod.POST) - @PreAuthorize("hasRole('READ_PRIVILEGE')") - public String savePassword(final HttpServletRequest request, final Model model, @RequestParam("password") final String password) { - final Locale locale = request.getLocale(); - - final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - userService.changeUserPassword(user, password); - model.addAttribute("message", messages.getMessage("message.resetPasswordSuc", null, locale)); - return "redirect:/login.html?lang=" + locale; - } - - // NON-API - - private final SimpleMailMessage constructResetVerificationTokenEmail(final String contextPath, final Locale locale, final VerificationToken newToken, final User user) { - final String confirmationUrl = contextPath + "/old/regitrationConfirm.html?token=" + newToken.getToken(); - final String message = messages.getMessage("message.resendToken", null, locale); - final SimpleMailMessage email = new SimpleMailMessage(); - email.setSubject("Resend Registration Token"); - email.setText(message + " \r\n" + confirmationUrl); - email.setTo(user.getEmail()); - email.setFrom(env.getProperty("support.email")); - return email; - } - - private final SimpleMailMessage constructResetTokenEmail(final String contextPath, final Locale locale, final String token, final User user) { - final String url = contextPath + "/old/user/changePassword?id=" + user.getId() + "&token=" + token; - final String message = messages.getMessage("message.resetPassword", null, locale); - final SimpleMailMessage email = new SimpleMailMessage(); - email.setTo(user.getEmail()); - email.setSubject("Reset Password"); - email.setText(message + " \r\n" + url); - email.setFrom(env.getProperty("support.email")); - return email; - } - - private User createUserAccount(final UserDto accountDto) { - User registered = null; - try { - registered = userService.registerNewUserAccount(accountDto); - } catch (final EmailExistsException e) { - return null; - } - return registered; - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java deleted file mode 100644 index ca13d7f21e..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/controller/RegistrationController.java +++ /dev/null @@ -1,218 +0,0 @@ -package org.baeldung.web.controller; - -import java.util.Calendar; -import java.util.Locale; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.validation.Valid; - -import org.baeldung.persistence.model.PasswordResetToken; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.persistence.service.IUserService; -import org.baeldung.persistence.service.UserDto; -import org.baeldung.registration.OnRegistrationCompleteEvent; -import org.baeldung.validation.EmailExistsException; -import org.baeldung.web.error.InvalidOldPasswordException; -import org.baeldung.web.error.UserAlreadyExistException; -import org.baeldung.web.error.UserNotFoundException; -import org.baeldung.web.util.GenericResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.MessageSource; -import org.springframework.core.env.Environment; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -public class RegistrationController { - private final Logger LOGGER = LoggerFactory.getLogger(getClass()); - - @Autowired - private IUserService userService; - - @Autowired - private MessageSource messages; - - @Autowired - private JavaMailSender mailSender; - - @Autowired - private ApplicationEventPublisher eventPublisher; - - @Autowired - private UserDetailsService userDetailsService; - - @Autowired - private Environment env; - - public RegistrationController() { - super(); - } - - // Registration - - @RequestMapping(value = "/user/registration", method = RequestMethod.POST) - @ResponseBody - public GenericResponse registerUserAccount(@Valid final UserDto accountDto, final HttpServletRequest request) { - LOGGER.debug("Registering user account with information: {}", accountDto); - - final User registered = createUserAccount(accountDto); - if (registered == null) { - throw new UserAlreadyExistException(); - } - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); - - return new GenericResponse("success"); - } - - @RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET) - public String confirmRegistration(final Locale locale, final Model model, @RequestParam("token") final String token) { - final VerificationToken verificationToken = userService.getVerificationToken(token); - if (verificationToken == null) { - final String message = messages.getMessage("auth.message.invalidToken", null, locale); - model.addAttribute("message", message); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - final User user = verificationToken.getUser(); - final Calendar cal = Calendar.getInstance(); - if ((verificationToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); - model.addAttribute("expired", true); - model.addAttribute("token", token); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - user.setEnabled(true); - userService.saveRegisteredUser(user); - model.addAttribute("message", messages.getMessage("message.accountVerified", null, locale)); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - // user activation - verification - - @RequestMapping(value = "/user/resendRegistrationToken", method = RequestMethod.GET) - @ResponseBody - public GenericResponse resendRegistrationToken(final HttpServletRequest request, @RequestParam("token") final String existingToken) { - final VerificationToken newToken = userService.generateNewVerificationToken(existingToken); - final User user = userService.getUser(newToken.getToken()); - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - final SimpleMailMessage email = constructResendVerificationTokenEmail(appUrl, request.getLocale(), newToken, user); - mailSender.send(email); - - return new GenericResponse(messages.getMessage("message.resendToken", null, request.getLocale())); - } - - // Reset password - - @RequestMapping(value = "/user/resetPassword", method = RequestMethod.POST) - @ResponseBody - public GenericResponse resetPassword(final HttpServletRequest request, @RequestParam("email") final String userEmail) { - final User user = userService.findUserByEmail(userEmail); - if (user == null) { - throw new UserNotFoundException(); - } - - final String token = UUID.randomUUID().toString(); - userService.createPasswordResetTokenForUser(user, token); - final String appUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); - final SimpleMailMessage email = constructResetTokenEmail(appUrl, request.getLocale(), token, user); - mailSender.send(email); - return new GenericResponse(messages.getMessage("message.resetPasswordEmail", null, request.getLocale())); - } - - @RequestMapping(value = "/user/changePassword", method = RequestMethod.GET) - public String showChangePasswordPage(final Locale locale, final Model model, @RequestParam("id") final long id, @RequestParam("token") final String token) { - final PasswordResetToken passToken = userService.getPasswordResetToken(token); - final User user = passToken.getUser(); - if (passToken == null || user.getId() != id) { - final String message = messages.getMessage("auth.message.invalidToken", null, locale); - model.addAttribute("message", message); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - final Calendar cal = Calendar.getInstance(); - if ((passToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - final Authentication auth = new UsernamePasswordAuthenticationToken(user, null, userDetailsService.loadUserByUsername(user.getEmail()).getAuthorities()); - SecurityContextHolder.getContext().setAuthentication(auth); - - return "redirect:/updatePassword.html?lang=" + locale.getLanguage(); - } - - @RequestMapping(value = "/user/savePassword", method = RequestMethod.POST) - @PreAuthorize("hasRole('READ_PRIVILEGE')") - @ResponseBody - public GenericResponse savePassword(final Locale locale, @RequestParam("password") final String password) { - final User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - userService.changeUserPassword(user, password); - return new GenericResponse(messages.getMessage("message.resetPasswordSuc", null, locale)); - } - - // change user password - - @RequestMapping(value = "/user/updatePassword", method = RequestMethod.POST) - @PreAuthorize("hasRole('READ_PRIVILEGE')") - @ResponseBody - public GenericResponse changeUserPassword(final Locale locale, @RequestParam("password") final String password, @RequestParam("oldpassword") final String oldPassword) { - final User user = userService.findUserByEmail(SecurityContextHolder.getContext().getAuthentication().getName()); - if (!userService.checkIfValidOldPassword(user, oldPassword)) { - throw new InvalidOldPasswordException(); - } - userService.changeUserPassword(user, password); - return new GenericResponse(messages.getMessage("message.updatePasswordSuc", null, locale)); - } - - // NON-API - - private final SimpleMailMessage constructResendVerificationTokenEmail(final String contextPath, final Locale locale, final VerificationToken newToken, final User user) { - final String confirmationUrl = contextPath + "/regitrationConfirm.html?token=" + newToken.getToken(); - final String message = messages.getMessage("message.resendToken", null, locale); - final SimpleMailMessage email = new SimpleMailMessage(); - email.setSubject("Resend Registration Token"); - email.setText(message + " \r\n" + confirmationUrl); - email.setTo(user.getEmail()); - email.setFrom(env.getProperty("support.email")); - return email; - } - - private final SimpleMailMessage constructResetTokenEmail(final String contextPath, final Locale locale, final String token, final User user) { - final String url = contextPath + "/user/changePassword?id=" + user.getId() + "&token=" + token; - final String message = messages.getMessage("message.resetPassword", null, locale); - final SimpleMailMessage email = new SimpleMailMessage(); - email.setTo(user.getEmail()); - email.setSubject("Reset Password"); - email.setText(message + " \r\n" + url); - email.setFrom(env.getProperty("support.email")); - return email; - } - - private User createUserAccount(final UserDto accountDto) { - User registered = null; - try { - registered = userService.registerNewUserAccount(accountDto); - } catch (final EmailExistsException e) { - return null; - } - return registered; - } -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/InvalidOldPasswordException.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/InvalidOldPasswordException.java deleted file mode 100644 index 74b4e04c1a..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/InvalidOldPasswordException.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.web.error; - -public final class InvalidOldPasswordException extends RuntimeException { - - private static final long serialVersionUID = 5861310537366287163L; - - public InvalidOldPasswordException() { - super(); - } - - public InvalidOldPasswordException(final String message, final Throwable cause) { - super(message, cause); - } - - public InvalidOldPasswordException(final String message) { - super(message); - } - - public InvalidOldPasswordException(final Throwable cause) { - super(cause); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java deleted file mode 100644 index c74cf25c2b..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/RestResponseEntityExceptionHandler.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.baeldung.web.error; - -import org.baeldung.web.util.GenericResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.MessageSource; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.mail.MailAuthenticationException; -import org.springframework.validation.BindException; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; - -@ControllerAdvice -public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { - - @Autowired - private MessageSource messages; - - public RestResponseEntityExceptionHandler() { - super(); - } - - // API - - // 400 - @Override - protected ResponseEntity handleBindException(final BindException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) { - logger.error("400 Status Code", ex); - final BindingResult result = ex.getBindingResult(); - final GenericResponse bodyOfResponse = new GenericResponse(result.getFieldErrors(), result.getGlobalErrors()); - return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request); - } - - @Override - protected ResponseEntity handleMethodArgumentNotValid(final MethodArgumentNotValidException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request) { - logger.error("400 Status Code", ex); - final BindingResult result = ex.getBindingResult(); - final GenericResponse bodyOfResponse = new GenericResponse(result.getFieldErrors(), result.getGlobalErrors()); - return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request); - } - - @ExceptionHandler({ InvalidOldPasswordException.class }) - public ResponseEntity handleInvalidOldPassword(final RuntimeException ex, final WebRequest request) { - logger.error("400 Status Code", ex); - final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.invalidOldPassword", null, request.getLocale()), "InvalidOldEmail"); - return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.BAD_REQUEST, request); - } - - // 404 - @ExceptionHandler({ UserNotFoundException.class }) - public ResponseEntity handleUserNotFound(final RuntimeException ex, final WebRequest request) { - logger.error("404 Status Code", ex); - final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.userNotFound", null, request.getLocale()), "UserNotFound"); - return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.NOT_FOUND, request); - } - - // 409 - @ExceptionHandler({ UserAlreadyExistException.class }) - public ResponseEntity handleUserAlreadyExist(final RuntimeException ex, final WebRequest request) { - logger.error("409 Status Code", ex); - final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.regError", null, request.getLocale()), "UserAlreadyExist"); - return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.CONFLICT, request); - } - - // 500 - @ExceptionHandler({ MailAuthenticationException.class }) - public ResponseEntity handleMail(final RuntimeException ex, final WebRequest request) { - logger.error("500 Status Code", ex); - final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.email.config.error", null, request.getLocale()), "MailError"); - return new ResponseEntity(bodyOfResponse, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR); - } - - @ExceptionHandler({ Exception.class }) - public ResponseEntity handleInternal(final RuntimeException ex, final WebRequest request) { - logger.error("500 Status Code", ex); - final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("message.error", null, request.getLocale()), "InternalError"); - return new ResponseEntity(bodyOfResponse, new HttpHeaders(), HttpStatus.INTERNAL_SERVER_ERROR); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserAlreadyExistException.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserAlreadyExistException.java deleted file mode 100644 index d9c112c3f5..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserAlreadyExistException.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.web.error; - -public final class UserAlreadyExistException extends RuntimeException { - - private static final long serialVersionUID = 5861310537366287163L; - - public UserAlreadyExistException() { - super(); - } - - public UserAlreadyExistException(final String message, final Throwable cause) { - super(message, cause); - } - - public UserAlreadyExistException(final String message) { - super(message); - } - - public UserAlreadyExistException(final Throwable cause) { - super(cause); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserNotFoundException.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserNotFoundException.java deleted file mode 100644 index 4f45e0f978..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/error/UserNotFoundException.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.web.error; - -public final class UserNotFoundException extends RuntimeException { - - private static final long serialVersionUID = 5861310537366287163L; - - public UserNotFoundException() { - super(); - } - - public UserNotFoundException(final String message, final Throwable cause) { - super(message, cause); - } - - public UserNotFoundException(final String message) { - super(message); - } - - public UserNotFoundException(final Throwable cause) { - super(cause); - } - -} diff --git a/spring-security-login-and-registration/src/main/java/org/baeldung/web/util/GenericResponse.java b/spring-security-login-and-registration/src/main/java/org/baeldung/web/util/GenericResponse.java deleted file mode 100644 index 076c481580..0000000000 --- a/spring-security-login-and-registration/src/main/java/org/baeldung/web/util/GenericResponse.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.baeldung.web.util; - -import java.util.List; - -import org.springframework.validation.FieldError; -import org.springframework.validation.ObjectError; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -public class GenericResponse { - private String message; - private String error; - - public GenericResponse(final String message) { - super(); - this.message = message; - } - - public GenericResponse(final String message, final String error) { - super(); - this.message = message; - this.error = error; - } - - public GenericResponse(final List fieldErrors, final List globalErrors) { - super(); - final ObjectMapper mapper = new ObjectMapper(); - try { - this.message = mapper.writeValueAsString(fieldErrors); - this.error = mapper.writeValueAsString(globalErrors); - } catch (final JsonProcessingException e) { - this.message = ""; - this.error = ""; - } - } - - public String getMessage() { - return message; - } - - public void setMessage(final String message) { - this.message = message; - } - - public String getError() { - return error; - } - - public void setError(final String error) { - this.error = error; - } - -} diff --git a/spring-security-login-and-registration/src/main/resources/.gitignore b/spring-security-login-and-registration/src/main/resources/.gitignore deleted file mode 100644 index ec4a72ea93..0000000000 --- a/spring-security-login-and-registration/src/main/resources/.gitignore +++ /dev/null @@ -1 +0,0 @@ -email.properties \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/email.properties.sample b/spring-security-login-and-registration/src/main/resources/email.properties.sample deleted file mode 100644 index 8e8207d7ab..0000000000 --- a/spring-security-login-and-registration/src/main/resources/email.properties.sample +++ /dev/null @@ -1,7 +0,0 @@ -################### JavaMail Configuration ########################## -smtp.host=email-smtp.us-east-1.amazonaws.com -smtp.port=465 -smtp.protocol=smtps -smtp.username=AKIAJIKXZAQFFJDXI4VQ -smtp.password= -support.email=eugen@baeldung.com diff --git a/spring-security-login-and-registration/src/main/resources/logback.xml b/spring-security-login-and-registration/src/main/resources/logback.xml deleted file mode 100644 index 1146dade63..0000000000 --- a/spring-security-login-and-registration/src/main/resources/logback.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/messages_en.properties b/spring-security-login-and-registration/src/main/resources/messages_en.properties deleted file mode 100644 index c522f1305f..0000000000 --- a/spring-security-login-and-registration/src/main/resources/messages_en.properties +++ /dev/null @@ -1,79 +0,0 @@ -message.username=Username required -message.password=Password required -message.unauth=Unauthorized Access !! -message.badCredentials=Invalid Username or Password -message.sessionExpired=Session Timed Out -message.logoutError=Sorry, error logging out -message.logoutSucc=You logged out successfully -message.regSucc=You registered successfully. We will send you a confirmation message to your email account. -message.regError=An account for that username/email already exists. Please enter a different username. -message.lastName=Last name is required -message.firstName=First name required -message.badEmail=Invalid email address -message.email.config.error=Error in java mail configuration -token.message=Your token is: -auth.message.disabled=Your account is disabled please check your mail and click on the confirmation link -auth.message.expired=Your registration token has expired. Please register again. -auth.message.invalidUser=This username is invalid, or does not exist. -auth.message.invalidToken=Invalid account confirmation token. -label.user.email=Email: -label.user.firstName=First name: -label.user.lastName=Last name: -label.user.password=Password: -label.user.confirmPass=Confirm password -label.form.submit=Submit -label.form.title=Registration Form -label.form.loginLink=Back to login -label.login=Login here -label.form.loginTitle=Login -label.form.loginEmail=Email -label.form.loginPass=Password -label.form.loginEnglish=English -label.form.loginSpanish=Spanish -label.form.loginSignUp=Sign up -label.pages.logout=Logout -label.pages.admin=Administrator -label.pages.home.title=Home -label.pages.home.message=Welcome Home -label.pages.admin.message=Welcome Admin -label.pages.user.message=Welcome User -label.successRegister.title=Registration Success -label.badUser.title=Invalid Link -ValidEmail.user.email=Invalid email address! -UniqueUsername.user.username=An account with that username/email already exists -NotNull.user.firstName=First name required -NotEmpty.user.firstName=First name required -NotNull.user.lastName=Last name required -NotEmpty.user.lastName=Last name required -NotNull.user.username=Username(Email) required -NotEmpty.user.username=Username(Email) required -NotNull.user.password=Password required -NotEmpty.user.password=Password required -NotNull.user.matchingPassword=Required -NotEmpty.user.matchingPassword=Required -PasswordMatches.user:Password does not match! -Email.user.email=Invalid Username (Email) -label.form.resendRegistrationToken=Re-send Token -message.resendToken=We will send an email with a new registration token to your email account -message.forgetPassword=Forget Password -message.resetPassword=Reset Password -message.updatePassword=Update Password -message.userNotFound=User Not Found -auth.message.blocked=This ip is blocked for 24 hours -message.accountVerified=Your account verified successfully -message.resetPasswordSuc=Password reset successfully -message.resetYourPassword=Reset your password -message.resetPasswordEmail=You should receive an Password Reset Email shortly -message.error=Error Occurred -message.updatePasswordSuc=Password updated successfully -message.changePassword=Change Password -message.invalidOldPassword=Invalid Old Password -label.user.newPassword=New Password -label.user.oldPassword=Old Password -error.wordLength=Your password is too short -error.wordNotEmail=Do not use your email as your password -error.wordSequences=Your password contains sequences -error.wordLowercase=Use lower case characters -error.wordUppercase=Use upper case characters -error.wordOneNumber=Use numbers -error.wordOneSpecialChar=Use special characters \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties b/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties deleted file mode 100644 index 58ed951891..0000000000 --- a/spring-security-login-and-registration/src/main/resources/messages_es_ES.properties +++ /dev/null @@ -1,79 +0,0 @@ -message.username=Por favor ingrese el nombre de usuario -message.password=Por favor ingrese una clave -message.unauth=Acceso denegado !! -message.badCredentials=Usuario o clave invalida -message.sessionExpired=La sesion expiro -message.logoutError=Lo sentimos, hubo problemas al salir -message.logoutSucc=Salida con exito -message.regSucc=Se registro correctamente. Le enviaremos un mensaje de confirmacion a su direccion de email. -message.regError=Ya existe una cuenta con ese nombre de usuario. Ingrese un nombre de usuario diferente. -message.lastName=Por favor ingrese su apellido -message.firstName=Por favor ingrese su nombre -message.badEmail=Direccion de correo no es valida -message.email.config.error=Error en configuracion de java mail -token.message=Su token es: -auth.message.disabled=Su cuenta no esta habilitada. Hemos enviado a su correo un link para habilitar su cuenta. -auth.message.expired=Su ficha de registro ha caducado, por favor registrese de nuevo. -auth.message.invalidUser=Este nombre de usuario es invalido o no existe. -auth.message.invalidToken=Codigo de confirmacion incorrecto. -label.user.email=Correo Electronico: -label.user.firstName=Nombre: -label.user.lastName=Apellido: -label.user.password=Contrasenia: -label.user.confirmPass=Confirme la contrasenia -label.form.submit=Enviar -label.form.title=Formulario de Registro -label.login=Autehtifiquese aqui -label.form.loginTitle=Ingreso -label.form.loginLink=Regrese a autentificacion -label.form.loginEmail=Correo Electronico -label.form.loginPass=Contrasenia -label.form.loginEnglish=Ingles -label.form.loginSpanish=Espaniol -label.form.loginSignUp=Registrese -label.pages.logout=Salir -label.pages.admin=Administrador -label.pages.home.title=Inicio -label.pages.home.message=Bienveni@ a Casa -label.pages.admin.message=Bienvenid@ Admin -label.pages.user.message=Bienvenid@ Usuari@ -label.successRegister.title=Registro Exitoso -label.badUser.title=Enlace Invalido -ValidEmail.user.email=Cuenta correo invlida! -UniqueUsername.user.username=Ya existe una cuenta con ese nombre de usuario -NotNull.user.firstName=Por favor ingrese su nombre -NotEmpty.user.firstName=Por favor ingrese su nombre -NotNull.user.lastName=Por favor ingrese su apellido -NotEmpty.user.lastName=Por favor ingrese su apellido -NotNull.user.username=Por favor ingrese su cuenta de email -NotEmpty.user.username=Por favor ingrese su cuenta de email -NotNull.user.password=Por favor ingrese su clave -NotEmpty.user.password=Por favor ingrese su contraseña -NotNull.user.matchingPassword=Campo obligatirio -NotEmpty.user.matchingPassword=Campo obligatrio -PasswordMatches.user:Las claves no coinciden! -Email.user.email=Email no es valido -label.form.resendRegistrationToken=Reenviar mensaje de emergencia -message.resendToken=Te enviaremos un correo electrónico con un nuevo token de registro en su cuenta de correo electrónico -message.forgetPassword=Olvide la contraseña -message.resetPassword=Restablecer contraseña -message.updatePassword=Actualizar contraseña -message.userNotFound=Usuario no encontrado -auth.message.blocked=Esta IP se bloquea durante 24 horas -message.accountVerified=Su cuenta verificada con éxito -message.resetPasswordSuc=Contraseña reajusta correctamente -message.resetYourPassword=Restablecer su contraseña -message.resetPasswordEmail=Te enviaremos un correo electrónico para restablecer su contraseña -message.error=Se produjo un error -message.updatePasswordSuc=Contraseña actualizado correctamente -message.changePassword=Cambiar La Contraseña -message.invalidOldPassword=Inválida contraseña antigua -label.user.newPassword=Nueva Contraseña -label.user.oldPassword=Contraseña Anterior -error.wordLength=Tu contraseña es demasiado corta -error.wordNotEmail=No utilice su dirección de correo electrónico como contraseña -error.wordSequences=Su contraseña contiene secuencias -error.wordLowercase=Utilice caracteres en minúsculas -error.wordUppercase=Utilice mayúsculas -error.wordOneNumber=Utilice números -error.wordOneSpecialChar=Utilice los caracteres especiales \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/persistence.properties b/spring-security-login-and-registration/src/main/resources/persistence.properties deleted file mode 100644 index 06b2528f64..0000000000 --- a/spring-security-login-and-registration/src/main/resources/persistence.properties +++ /dev/null @@ -1,10 +0,0 @@ -################### DataSource Configuration ########################## -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/registration_02?createDatabaseIfNotExist=true -jdbc.user=tutorialuser -jdbc.pass=tutorialmy5ql -init-db=false -################### Hibernate Configuration ########################## -hibernate.dialect=org.hibernate.dialect.MySQLDialect -hibernate.show_sql=false -hibernate.hbm2ddl.auto=create-drop diff --git a/spring-security-login-and-registration/src/main/resources/webSecurityConfig-basic.xml b/spring-security-login-and-registration/src/main/resources/webSecurityConfig-basic.xml deleted file mode 100644 index bf85a09b62..0000000000 --- a/spring-security-login-and-registration/src/main/resources/webSecurityConfig-basic.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml b/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml deleted file mode 100644 index 4e67a1200f..0000000000 --- a/spring-security-login-and-registration/src/main/resources/webSecurityConfig.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/META-INF/MANIFEST.MF b/spring-security-login-and-registration/src/main/webapp/META-INF/MANIFEST.MF deleted file mode 100644 index 5e9495128c..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/mvc-servlet.xml b/spring-security-login-and-registration/src/main/webapp/WEB-INF/mvc-servlet.xml deleted file mode 100644 index 99e19b0558..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/mvc-servlet.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp deleted file mode 100644 index ad0a8231ad..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/admin.jsp +++ /dev/null @@ -1,34 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - - -<spring:message code="label.pages.home.title"></spring:message> - - - - -
    - - - - -

    - -

    -
    -
    - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp deleted file mode 100644 index c2ad64ec6a..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/badUser.jsp +++ /dev/null @@ -1,54 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - <spring:message -code="label.badUser.title"></spring:message> - - -
    -

    - ${param.message} -

    -
    -"> - - -
    -

    ${label.form.resendRegistrationToken}

    - - - - -
    -
    - - diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/changePassword.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/changePassword.jsp deleted file mode 100644 index 88836e96f5..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/changePassword.jsp +++ /dev/null @@ -1,70 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ page session="false"%> - - - - -<spring:message code="message.changePassword"></spring:message> - - - -
    -
    - -

    -
    -
    - - - - -

    - - - -

    - - - - -

    - -
    - -
    -
    - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/console.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/console.jsp deleted file mode 100644 index e06cdd39f0..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/console.jsp +++ /dev/null @@ -1,42 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - - - - - -
    - -
    -${param.message} -
    -
    -

    This is the landing page for the admin

    - - This text is only visible to a user -
    -
    - - This text is only visible to an admin -
    -
    - "> - - "> -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp deleted file mode 100644 index ed25d1f2cd..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/emailError.jsp +++ /dev/null @@ -1,17 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - -<spring:message code="label.pages.home.title"></spring:message> - - -
    -

    - -

    - -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp deleted file mode 100644 index e829daaa61..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/expiredAccount.jsp +++ /dev/null @@ -1,24 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - <spring:message code="label.pages.home.title"></spring:message> - - -
    -

    - -

    -
    -"> -
    - - diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/forgetPassword.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/forgetPassword.jsp deleted file mode 100644 index cff325846d..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/forgetPassword.jsp +++ /dev/null @@ -1,55 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@ page session="false"%> - - - - -<spring:message code="message.resetPassword"></spring:message> - - -
    -

    -
    -
    - - - -
    - -
    -"> -

    -"> - -
    - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/home.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/home.jsp deleted file mode 100644 index 027f583d61..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/home.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ page session="true"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - - -<spring:message code="label.pages.home.title"></spring:message> - - - -
    -

    - -

    -
    - - - - diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp deleted file mode 100644 index af931ac66f..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/homepage.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ page session="true"%> - - - -<spring:message code="label.pages.home.title"></spring:message> - - - - -
    - - - -
    -
    - - - -
    -
    - ${param.user} - "> -
    - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/invalidSession.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/invalidSession.jsp deleted file mode 100644 index 50891a216f..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/invalidSession.jsp +++ /dev/null @@ -1,18 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - -<spring:message code="label.pages.home.title"></spring:message> - - -
    -

    - -

    - "> -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp deleted file mode 100644 index a71fe9dc3a..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/login.jsp +++ /dev/null @@ -1,88 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - - - -<spring:message code="label.pages.home.title"></spring:message> - - - - - -
    -${param.message} -
    -
    - - - -
    -${SPRING_SECURITY_LAST_EXCEPTION} -
    -
    - -
    -
    -

    - -

    - - | -

    - -
    - - - - -

    - - - -

    - /> - -
    -
    Current Locale : ${pageContext.response.locale}

    - "> -

    - "> -
    -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/logout.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/logout.jsp deleted file mode 100644 index 95602d58a8..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/logout.jsp +++ /dev/null @@ -1,31 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - - - -

    - -

    -
    - -<spring:message code="label.pages.home.title"></spring:message> - - - -
    - - -

    - -

    -
    - "> -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/registration.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/registration.jsp deleted file mode 100644 index cf64291be6..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/registration.jsp +++ /dev/null @@ -1,139 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ page session="false"%> - - - - - - - -<spring:message code="label.form.title"></spring:message> - - -
    -
    -

    - -

    -
    -
    -
    - - - - -
    -
    - - - - -
    -
    - - - - -
    -
    - - - -
    -
    - - - -
    -
    - -
    -
    - "> -
    -
    - - - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp deleted file mode 100644 index 08d3f4ab70..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - - - -<spring:message code="label.pages.home.title"></spring:message> - - -
    -

    - "> -
    - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/successRegister.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/successRegister.jsp deleted file mode 100644 index ea6e031fb9..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/successRegister.jsp +++ /dev/null @@ -1,25 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - - -<spring:message code="label.pages.home.title"></spring:message> - - -
    -

    - -

    - "> -
    - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/updatePassword.jsp b/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/updatePassword.jsp deleted file mode 100644 index 859c0a9be4..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/view/updatePassword.jsp +++ /dev/null @@ -1,60 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@ page session="false"%> - - - - -<spring:message code="message.updatePassword"></spring:message> - - - -
    -
    -

    -
    -
    - - - - -

    - - - - -

    - -
    - -
    -
    - - - -
    - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/WEB-INF/web.xml b/spring-security-login-and-registration/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 9ef57810f8..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - contextClass - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - contextConfigLocation - org.baeldung.spring - - - - org.springframework.web.context.ContextLoaderListener - - - - org.springframework.web.context.request.RequestContextListener - - - - mvc - org.springframework.web.servlet.DispatcherServlet - 1 - - - mvc - / - - - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - - - springSecurityFilterChain - /* - - - localizationFilter - org.springframework.web.filter.RequestContextFilter - - - localizationFilter - /* - - - \ No newline at end of file diff --git a/spring-security-login-and-registration/src/main/webapp/resources/bootstrap.css b/spring-security-login-and-registration/src/main/webapp/resources/bootstrap.css deleted file mode 100644 index a5b7ccc211..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/resources/bootstrap.css +++ /dev/null @@ -1,6167 +0,0 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover, -a.muted:focus { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover, -a.text-success:focus { - color: #356635; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - padding-right: 5px; - padding-left: 5px; - *zoom: 1; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 30px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - font-size: 0; - white-space: nowrap; - vertical-align: middle; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success > td { - background-color: #dff0d8; -} - -.table tbody tr.error > td { - background-color: #f2dede; -} - -.table tbody tr.warning > td { - background-color: #fcf8e3; -} - -.table tbody tr.info > td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - width: 16px; - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #cccccc; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - 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(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - 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(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - 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(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - 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(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - 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(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - 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(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - 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(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - 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(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - content: ""; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - content: ""; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-title:empty { - display: none; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} - -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} - -.carousel-indicators .active { - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -} diff --git a/spring-security-login-and-registration/src/main/webapp/resources/pwstrength.js b/spring-security-login-and-registration/src/main/webapp/resources/pwstrength.js deleted file mode 100644 index 0a08b4d065..0000000000 --- a/spring-security-login-and-registration/src/main/webapp/resources/pwstrength.js +++ /dev/null @@ -1,4 +0,0 @@ -/* pwstrength-bootstrap 2015-02-07 - GPLv3 & MIT License */ - -!function(a){var b={};try{if(!a&&module&&module.exports){var a=require("jquery"),c=require("jsdom").jsdom;a=a(c().parentWindow)}}catch(d){}!function(a,b){"use strict";var c={};b.forbiddenSequences=["0123456789","abcdefghijklmnopqrstuvwxyz","qwertyuiop","asdfghjkl","zxcvbnm","!@#$%^&*()_+"],c.wordNotEmail=function(a,b,c){return b.match(/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i)?c:0},c.wordLength=function(a,b,c){var d=b.length,e=Math.pow(d,a.rules.raisePower);return d2&&(a.each(b.forbiddenSequences,function(b,c){var e=[c,c.split("").reverse().join("")];a.each(e,function(a,b){for(f=0;f-1&&(g=!0)})}),g)?e:0},c.wordLowercase=function(a,b,c){return b.match(/[a-z]/)&&c},c.wordUppercase=function(a,b,c){return b.match(/[A-Z]/)&&c},c.wordOneNumber=function(a,b,c){return b.match(/\d+/)&&c},c.wordThreeNumbers=function(a,b,c){return b.match(/(.*[0-9].*[0-9].*[0-9])/)&&c},c.wordOneSpecialChar=function(a,b,c){return b.match(/[!,@,#,$,%,\^,&,*,?,_,~]/)&&c},c.wordTwoSpecialChar=function(a,b,c){return b.match(/(.*[!,@,#,$,%,\^,&,*,?,_,~].*[!,@,#,$,%,\^,&,*,?,_,~])/)&&c},c.wordUpperLowerCombo=function(a,b,c){return b.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&c},c.wordLetterNumberCombo=function(a,b,c){return b.match(/([a-zA-Z])/)&&b.match(/([0-9])/)&&c},c.wordLetterNumberCharCombo=function(a,b,c){return b.match(/([a-zA-Z0-9].*[!,@,#,$,%,\^,&,*,?,_,~])|([!,@,#,$,%,\^,&,*,?,_,~].*[a-zA-Z0-9])/)&&c},b.validation=c,b.executeRules=function(c,d){var e=0;return a.each(c.rules.activated,function(f,g){if(g){var h,i,j=c.rules.scores[f],k=b.validation[f];a.isFunction(k)||(k=c.rules.extra[f]),a.isFunction(k)&&(h=k(c,d,j),h&&(e+=h),(0>h||!a.isNumeric(h)&&!h)&&(i=c.ui.spanError(c,f),i.length>0&&c.instances.errors.push(i)))}}),e}}(a,b);try{module&&module.exports&&(module.exports=b)}catch(d){}var e={};e.common={},e.common.minChar=6,e.common.usernameField="#username",e.common.userInputs=[],e.common.onLoad=void 0,e.common.onKeyUp=void 0,e.common.zxcvbn=!1,e.common.zxcvbnTerms=[],e.common.debug=!1,e.rules={},e.rules.extra={},e.rules.scores={wordNotEmail:-100,wordLength:-50,wordSimilarToUsername:-100,wordSequences:-50,wordTwoCharacterClasses:2,wordRepetitions:-25,wordLowercase:1,wordUppercase:3,wordOneNumber:3,wordThreeNumbers:5,wordOneSpecialChar:3,wordTwoSpecialChar:5,wordUpperLowerCombo:2,wordLetterNumberCombo:2,wordLetterNumberCharCombo:2},e.rules.activated={wordNotEmail:!0,wordLength:!0,wordSimilarToUsername:!0,wordSequences:!0,wordTwoCharacterClasses:!1,wordRepetitions:!1,wordLowercase:!0,wordUppercase:!0,wordOneNumber:!0,wordThreeNumbers:!0,wordOneSpecialChar:!0,wordTwoSpecialChar:!0,wordUpperLowerCombo:!0,wordLetterNumberCombo:!0,wordLetterNumberCharCombo:!0},e.rules.raisePower=1.4,e.ui={},e.ui.bootstrap2=!1,e.ui.showProgressBar=!0,e.ui.showPopover=!1,e.ui.showStatus=!1,e.ui.spanError=function(a,b){"use strict";var c=a.ui.errorMessages[b];return c?''+c+"":""},e.ui.popoverError=function(b){"use strict";var c="
    Errors:
      ";return a.each(b,function(a,b){c+="
    • "+b+"
    • "}),c+="
    "},e.ui.errorMessages={wordLength:"Your password is too short",wordNotEmail:"Do not use your email as your password",wordSimilarToUsername:"Your password cannot contain your username",wordTwoCharacterClasses:"Use different character classes",wordRepetitions:"Too many repetitions",wordSequences:"Your password contains sequences"},e.ui.verdicts=["Weak","Normal","Medium","Strong","Very Strong"],e.ui.showVerdicts=!0,e.ui.showVerdictsInsideProgressBar=!1,e.ui.useVerdictCssClass=!1,e.ui.showErrors=!1,e.ui.container=void 0,e.ui.viewports={progress:void 0,verdict:void 0,errors:void 0},e.ui.scores=[14,26,38,50];var f={};!function(a,b){"use strict";var c=["danger","warning","success"],d=["error","warning","success"];b.getContainer=function(b,c){var d;return d=a(b.ui.container),d&&1===d.length||(d=c.parent()),d},b.findElement=function(a,b,c){return b?a.find(b).find(c):a.find(c)},b.getUIElements=function(a,c){var d,e;return a.instances.viewports?a.instances.viewports:(d=b.getContainer(a,c),e={},e.$progressbar=b.findElement(d,a.ui.viewports.progress,"div.progress"),a.ui.showVerdictsInsideProgressBar&&(e.$verdict=e.$progressbar.find("span.password-verdict")),a.ui.showPopover||(a.ui.showVerdictsInsideProgressBar||(e.$verdict=b.findElement(d,a.ui.viewports.verdict,"span.password-verdict")),e.$errors=b.findElement(d,a.ui.viewports.errors,"ul.error-list")),a.instances.viewports=e,e)},b.initProgressBar=function(c,d){var e=b.getContainer(c,d),f="
    ",c.ui.showVerdictsInsideProgressBar&&(f+=""),f+="
    ",c.ui.viewports.progress?e.find(c.ui.viewports.progress).append(f):a(f).insertAfter(d)},b.initHelper=function(c,d,e,f){var g=b.getContainer(c,d);f?g.find(f).append(e):a(e).insertAfter(d)},b.initVerdict=function(a,c){b.initHelper(a,c,"",a.ui.viewports.verdict)},b.initErrorList=function(a,c){b.initHelper(a,c,"
      ",a.ui.viewports.errors)},b.initPopover=function(a,b){b.popover("destroy"),b.popover({html:!0,placement:"bottom",trigger:"manual",content:" "})},b.initUI=function(a,c){a.ui.showPopover?b.initPopover(a,c):(a.ui.showErrors&&b.initErrorList(a,c),a.ui.showVerdicts&&!a.ui.showVerdictsInsideProgressBar&&b.initVerdict(a,c)),a.ui.showProgressBar&&b.initProgressBar(a,c)},b.possibleProgressBarClasses=["danger","warning","success"],b.updateProgressBar=function(d,e,f,g){var h=b.getUIElements(d,e).$progressbar,i=h.find(".progress-bar"),j="progress-";d.ui.bootstrap2&&(i=h.find(".bar"),j=""),a.each(b.possibleProgressBarClasses,function(a,b){i.removeClass(j+"bar-"+b)}),i.addClass(j+"bar-"+c[f]),i.css("width",g+"%")},b.updateVerdict=function(a,d,e,f){var g=b.getUIElements(a,d).$verdict;g.removeClass(c.join(" ")),e>-1&&g.addClass(c[e]),g.html(f)},b.updateErrors=function(c,d){var e=b.getUIElements(c,d).$errors,f="";a.each(c.instances.errors,function(a,b){f+="
    • "+b+"
    • "}),e.html(f)},b.updatePopover=function(a,b,c){var d=b.data("bs.popover"),e="",f=!0;return a.ui.showVerdicts&&!a.ui.showVerdictsInsideProgressBar&&c.length>0&&(e="
      "+c+"
      ",f=!1),a.ui.showErrors&&(a.instances.errors.length>0&&(f=!1),e+=a.ui.popoverError(a.instances.errors)),f?void b.popover("hide"):(a.ui.bootstrap2&&(d=b.data("popover")),void(d.$arrow&&d.$arrow.parents("body").length>0?b.find("+ .popover .popover-content").html(e):(d.options.content=e,b.popover("show"))))},b.updateFieldStatus=function(b,c,e){var f=b.ui.bootstrap2?".control-group":".form-group",g=c.parents(f).first();a.each(d,function(a,c){b.ui.bootstrap2||(c="has-"+c),g.removeClass(c)}),e=d[e],b.ui.bootstrap2||(e="has-"+e),g.addClass(e)},b.percentage=function(a,b){var c=Math.floor(100*a/b);return c=0>c?1:c,c=c>100?100:c},b.getVerdictAndCssClass=function(a,b){var c,d,e;return 0>=b?(c=0,e=-1,d=a.ui.verdicts[0]):b params = new HashMap(); - params.put("oldpassword", "test"); - params.put("password", "newtest"); - - final Response response = request.with().params(params).post(URL); - - assertEquals(200, response.statusCode()); - assertTrue(response.body().asString().contains("Password updated successfully")); - } - - @Test - public void givenWrongOldPassword_whenChangingPassword_thenBadRequest() { - final RequestSpecification request = RestAssured.given().auth().form("test@test.com", "test", formConfig); - - final Map params = new HashMap(); - params.put("oldpassword", "abc"); - params.put("password", "newtest"); - - final Response response = request.with().params(params).post(URL); - - assertEquals(400, response.statusCode()); - assertTrue(response.body().asString().contains("Invalid Old Password")); - } - - @Test - public void givenNotAuthenticatedUser_whenChangingPassword_thenRedirect() { - final Map params = new HashMap(); - params.put("oldpassword", "abc"); - params.put("password", "xyz"); - - final Response response = RestAssured.with().params(params).post(URL); - - assertEquals(302, response.statusCode()); - assertFalse(response.body().asString().contains("Password updated successfully")); - } - -} diff --git a/spring-security-login-and-registration/src/test/java/org/baeldung/test/SpringSecurityRolesIntegrationTest.java b/spring-security-login-and-registration/src/test/java/org/baeldung/test/SpringSecurityRolesIntegrationTest.java deleted file mode 100644 index 978497fabd..0000000000 --- a/spring-security-login-and-registration/src/test/java/org/baeldung/test/SpringSecurityRolesIntegrationTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.baeldung.test; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -import java.util.ArrayList; -import java.util.Arrays; - -import org.baeldung.persistence.dao.PrivilegeRepository; -import org.baeldung.persistence.dao.RoleRepository; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.model.Privilege; -import org.baeldung.persistence.model.Role; -import org.baeldung.persistence.model.User; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; -import org.springframework.test.context.transaction.TransactionConfiguration; -import org.springframework.transaction.annotation.Transactional; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -@Transactional -@TransactionConfiguration -public class SpringSecurityRolesIntegrationTest { - - @Autowired - private UserRepository userRepository; - - @Autowired - private RoleRepository roleRepository; - - @Autowired - private PrivilegeRepository privilegeRepository; - - @Autowired - private PasswordEncoder passwordEncoder; - - private User user; - private Role role; - private Privilege privilege; - - // tests - - @Test - public void testDeleteUser() { - role = new Role("TEST_ROLE"); - roleRepository.save(role); - - user = new User(); - user.setFirstName("John"); - user.setLastName("Doe"); - user.setPassword(passwordEncoder.encode("123")); - user.setEmail("john@doe.com"); - user.setRoles(Arrays.asList(role)); - user.setEnabled(true); - userRepository.save(user); - - assertNotNull(userRepository.findByEmail(user.getEmail())); - assertNotNull(roleRepository.findByName(role.getName())); - user.setRoles(null); - userRepository.delete(user); - - assertNull(userRepository.findByEmail(user.getEmail())); - assertNotNull(roleRepository.findByName(role.getName())); - } - - @Test - public void testDeleteRole() { - privilege = new Privilege("TEST_PRIVILEGE"); - privilegeRepository.save(privilege); - - role = new Role("TEST_ROLE"); - role.setPrivileges(Arrays.asList(privilege)); - roleRepository.save(role); - - user = new User(); - user.setFirstName("John"); - user.setLastName("Doe"); - user.setPassword(passwordEncoder.encode("123")); - user.setEmail("john@doe.com"); - user.setRoles(Arrays.asList(role)); - user.setEnabled(true); - userRepository.save(user); - - assertNotNull(privilegeRepository.findByName(privilege.getName())); - assertNotNull(userRepository.findByEmail(user.getEmail())); - assertNotNull(roleRepository.findByName(role.getName())); - - user.setRoles(new ArrayList()); - role.setPrivileges(new ArrayList()); - roleRepository.delete(role); - - assertNull(roleRepository.findByName(role.getName())); - assertNotNull(privilegeRepository.findByName(privilege.getName())); - assertNotNull(userRepository.findByEmail(user.getEmail())); - } - - @Test - public void testDeletePrivilege() { - privilege = new Privilege("TEST_PRIVILEGE"); - privilegeRepository.save(privilege); - - role = new Role("TEST_ROLE"); - role.setPrivileges(Arrays.asList(privilege)); - roleRepository.save(role); - - assertNotNull(roleRepository.findByName(role.getName())); - assertNotNull(privilegeRepository.findByName(privilege.getName())); - - role.setPrivileges(new ArrayList()); - privilegeRepository.delete(privilege); - - assertNull(privilegeRepository.findByName(privilege.getName())); - assertNotNull(roleRepository.findByName(role.getName())); - } -} diff --git a/spring-security-mvc-custom/pom.xml b/spring-security-mvc-custom/pom.xml index b5f71847f5..ca9b3423cc 100644 --- a/spring-security-mvc-custom/pom.xml +++ b/spring-security-mvc-custom/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-custom 0.1-SNAPSHOT @@ -230,12 +230,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -258,14 +258,14 @@ 4.5 4.4.1 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-mvc-digest-auth/pom.xml b/spring-security-mvc-digest-auth/pom.xml index dc2c4d80a5..c292eb6b54 100644 --- a/spring-security-mvc-digest-auth/pom.xml +++ b/spring-security-mvc-digest-auth/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-digest-auth 0.1-SNAPSHOT @@ -225,12 +225,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -253,14 +253,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-mvc-ldap/pom.xml b/spring-security-mvc-ldap/pom.xml index 317c8dfb73..b001a86955 100644 --- a/spring-security-mvc-ldap/pom.xml +++ b/spring-security-mvc-ldap/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-ldap 0.1-SNAPSHOT @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.2.RELEASE + 1.3.3.RELEASE diff --git a/spring-security-mvc-login/pom.xml b/spring-security-mvc-login/pom.xml index ee6b37743b..943eeaa197 100644 --- a/spring-security-mvc-login/pom.xml +++ b/spring-security-mvc-login/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-login 0.1-SNAPSHOT @@ -222,12 +222,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -250,14 +250,14 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-mvc-persisted-remember-me/pom.xml b/spring-security-mvc-persisted-remember-me/pom.xml index 1691f10f43..3f1d78f8ea 100644 --- a/spring-security-mvc-persisted-remember-me/pom.xml +++ b/spring-security-mvc-persisted-remember-me/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-persisted-remember-me 0.1-SNAPSHOT @@ -260,12 +260,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.4.190 9.1-901.jdbc4 @@ -291,14 +291,14 @@ 4.5 4.4.1 - 2.4.1 + 2.9.0 - 3.3 - 2.5 - 2.18.1 + 3.5.1 + 2.6 + 2.19.1 2.7 - 1.4.11 + 1.4.18 diff --git a/spring-security-mvc-session/pom.xml b/spring-security-mvc-session/pom.xml index fd90be6cc8..e330825bf2 100644 --- a/spring-security-mvc-session/pom.xml +++ b/spring-security-mvc-session/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-mvc-session 0.1-SNAPSHOT @@ -230,12 +230,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -259,14 +259,14 @@ 4.5 4.4.1 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 + 2.19.1 2.7 - 1.4.15 + 1.4.18 diff --git a/spring-security-oauth/.project b/spring-security-oauth/.project deleted file mode 100644 index fe6e295165..0000000000 --- a/spring-security-oauth/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - spring-security-oauth - - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.m2e.core.maven2Nature - - diff --git a/spring-security-oauth/README.md b/spring-security-oauth/README.md deleted file mode 100644 index 6baa0a1824..0000000000 --- a/spring-security-oauth/README.md +++ /dev/null @@ -1,17 +0,0 @@ -## Spring Security OAuth - -### Relevant Articles: -- [Spring REST API + OAuth2 + AngularJS](http://www.baeldung.com/rest-api-spring-oauth2-angularjs) - -### Build the Project -``` -mvn clean install -``` - -### Notes -- Make sure to run the project on port 8081 -- Run 4 sub-modules simultaneously - - spring-security-oauth-server - - spring-security-oauth-resource - - spring-security-oauth-ui-implicit - - spring-security-oauth-ui-password diff --git a/spring-security-oauth/pom.xml b/spring-security-oauth/pom.xml deleted file mode 100644 index 7bb7aa86c8..0000000000 --- a/spring-security-oauth/pom.xml +++ /dev/null @@ -1,104 +0,0 @@ - - 4.0.0 - org.baeldung - spring-security-oauth - 1.0.0-SNAPSHOT - - spring-security-oauth - pom - - - org.springframework.boot - spring-boot-starter-parent - 1.3.1.RELEASE - - - - spring-security-oauth-server - spring-security-oauth-resource - spring-security-oauth-ui-implicit - spring-security-oauth-ui-password - - - - spring-security-oauth - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - false - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - true - - **/*IntegrationTest.java - **/*LiveTest.java - - - - - - - - - - - - - - - 4.2.2.RELEASE - 4.0.3.RELEASE - 2.0.7.RELEASE - - - - 2.5.1 - - - 1.7.12 - 1.1.3 - - - 18.0 - 3.3.2 - - - 1.3 - 4.11 - 1.10.19 - - 4.4 - 4.4 - - 2.4.0 - - - 3.3 - 2.6 - 2.19 - 1.4.16 - - - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/pom.xml b/spring-security-oauth/spring-security-oauth-resource/pom.xml deleted file mode 100644 index 84a5027cb5..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ - - 4.0.0 - spring-security-oauth-resource - spring-security-oauth-resource - war - - - org.baeldung - spring-security-oauth - 1.0.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework - spring-jdbc - - - - mysql - mysql-connector-java - runtime - - - - org.springframework.security.oauth - spring-security-oauth2 - ${oauth.version} - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - - - spring-security-oauth-resource - - - src/main/resources - true - - - - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/MethodSecurityConfig.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/MethodSecurityConfig.java deleted file mode 100644 index c0a7f86207..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/MethodSecurityConfig.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration; -import org.springframework.security.oauth2.provider.expression.OAuth2MethodSecurityExpressionHandler; - -@Configuration -@EnableGlobalMethodSecurity(prePostEnabled = true) -public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { - @Override - protected MethodSecurityExpressionHandler createExpressionHandler() { - return new OAuth2MethodSecurityExpressionHandler(); - } -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/OAuth2ResourceServerConfig.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/OAuth2ResourceServerConfig.java deleted file mode 100644 index 7809278ad8..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/OAuth2ResourceServerConfig.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.baeldung.config; - -import javax.sql.DataSource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpMethod; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer; -import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter; -import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore; - -@Configuration -@PropertySource({ "classpath:persistence.properties" }) -@EnableResourceServer -public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter { - @Autowired - private Environment env; - - @Override - public void configure(HttpSecurity http) throws Exception { - // @formatter:off - http - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) - .and() - .requestMatchers().antMatchers("/foos/**","/bars/**") - .and() - .authorizeRequests() - .antMatchers(HttpMethod.GET,"/foos/**").access("#oauth2.hasScope('foo') and #oauth2.hasScope('read')") - .antMatchers(HttpMethod.POST,"/foos/**").access("#oauth2.hasScope('foo') and #oauth2.hasScope('write')") - .antMatchers(HttpMethod.GET,"/bars/**").access("#oauth2.hasScope('bar') and #oauth2.hasScope('read')") - .antMatchers(HttpMethod.POST,"/bars/**").access("#oauth2.hasScope('bar') and #oauth2.hasScope('write') and hasRole('ROLE_ADMIN')") - ; - // @formatter:on - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); - dataSource.setUrl(env.getProperty("jdbc.url")); - dataSource.setUsername(env.getProperty("jdbc.user")); - dataSource.setPassword(env.getProperty("jdbc.pass")); - return dataSource; - } - - @Bean - public TokenStore tokenStore() { - return new JdbcTokenStore(dataSource()); - } - -} diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java deleted file mode 100644 index 1e35eff551..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; - -@SpringBootApplication -public class ResourceServerApplication extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(ResourceServerApplication.class, args); - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerWebConfig.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerWebConfig.java deleted file mode 100644 index 81b2d242ac..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/config/ResourceServerWebConfig.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -@ComponentScan({ "org.baeldung.web.controller" }) -public class ResourceServerWebConfig extends WebMvcConfigurerAdapter { - // -} diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/BarController.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/BarController.java deleted file mode 100644 index 72163ff9ff..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/BarController.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.baeldung.web.controller; - -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import static org.apache.commons.lang3.RandomStringUtils.randomNumeric; - -import org.baeldung.web.dto.Bar; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -public class BarController { - - public BarController() { - super(); - } - - // API - read - // @PreAuthorize("#oauth2.hasScope('bar') and #oauth2.hasScope('read')") - @RequestMapping(method = RequestMethod.GET, value = "/bars/{id}") - @ResponseBody - public Bar findById(@PathVariable final long id) { - return new Bar(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); - } - - // API - write - // @PreAuthorize("#oauth2.hasScope('bar') and #oauth2.hasScope('write') and hasRole('ROLE_ADMIN')") - @RequestMapping(method = RequestMethod.POST, value = "/bars") - @ResponseStatus(HttpStatus.CREATED) - @ResponseBody - public Bar create(@RequestBody final Bar bar) { - bar.setId(Long.parseLong(randomNumeric(2))); - return bar; - } - -} diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/FooController.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/FooController.java deleted file mode 100644 index d9ef1baa31..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/controller/FooController.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.baeldung.web.controller; - -import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import static org.apache.commons.lang3.RandomStringUtils.randomNumeric; - -import org.baeldung.web.dto.Foo; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -public class FooController { - - public FooController() { - super(); - } - - // API - read - // @PreAuthorize("#oauth2.hasScope('foo') and #oauth2.hasScope('read')") - @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}") - @ResponseBody - public Foo findById(@PathVariable final long id) { - return new Foo(Long.parseLong(randomNumeric(2)), randomAlphabetic(4)); - } - - // API - write - // @PreAuthorize("#oauth2.hasScope('foo') and #oauth2.hasScope('write')") - @RequestMapping(method = RequestMethod.POST, value = "/foos") - @ResponseStatus(HttpStatus.CREATED) - @ResponseBody - public Foo create(@RequestBody final Foo foo) { - foo.setId(Long.parseLong(randomNumeric(2))); - return foo; - } - -} diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Bar.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Bar.java deleted file mode 100644 index adbb2aa2ad..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Bar.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.baeldung.web.dto; - -public class Bar { - private long id; - private String name; - - public Bar() { - super(); - } - - public Bar(final long id, final String name) { - super(); - - this.id = id; - this.name = name; - } - - // - - public long getId() { - return id; - } - - public void setId(final long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Foo.java b/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Foo.java deleted file mode 100644 index 9d26618e7f..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/java/org/baeldung/web/dto/Foo.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.baeldung.web.dto; - -public class Foo { - private long id; - private String name; - - public Foo() { - super(); - } - - public Foo(final long id, final String name) { - super(); - - this.id = id; - this.name = name; - } - - // - - public long getId() { - return id; - } - - public void setId(final long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/resources/application.properties b/spring-security-oauth/spring-security-oauth-resource/src/main/resources/application.properties deleted file mode 100644 index 62a10d1751..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.contextPath=/spring-security-oauth-resource -server.port=8081 \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-resource/src/main/resources/persistence.properties b/spring-security-oauth/spring-security-oauth-resource/src/main/resources/persistence.properties deleted file mode 100644 index b975b10e9f..0000000000 --- a/spring-security-oauth/spring-security-oauth-resource/src/main/resources/persistence.properties +++ /dev/null @@ -1,6 +0,0 @@ -################### DataSource Configuration ########################## -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/oauth2?createDatabaseIfNotExist=true -jdbc.user=tutorialuser -jdbc.pass=tutorialmy5ql - diff --git a/spring-security-oauth/spring-security-oauth-server/.springBeans b/spring-security-oauth/spring-security-oauth-server/.springBeans deleted file mode 100644 index 18656ebe2e..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/.springBeans +++ /dev/null @@ -1,16 +0,0 @@ - - - 1 - - - - - - - java:org.baeldung.config.AuthorizationServerApplication - - - - - - diff --git a/spring-security-oauth/spring-security-oauth-server/pom.xml b/spring-security-oauth/spring-security-oauth-server/pom.xml deleted file mode 100644 index ebbaa993f1..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - 4.0.0 - spring-security-oauth-server - - spring-security-oauth-server - war - - - org.baeldung - spring-security-oauth - 1.0.0-SNAPSHOT - - - - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework - spring-jdbc - - - - mysql - mysql-connector-java - runtime - - - - - - - org.springframework.security.oauth - spring-security-oauth2 - ${oauth.version} - - - - - - - spring-security-oauth-server - - - src/main/resources - true - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/AuthorizationServerApplication.java b/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/AuthorizationServerApplication.java deleted file mode 100644 index 73b8fc1976..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/AuthorizationServerApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; - -@SpringBootApplication -public class AuthorizationServerApplication extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(AuthorizationServerApplication.class, args); - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/OAuth2AuthorizationServerConfig.java b/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/OAuth2AuthorizationServerConfig.java deleted file mode 100644 index c7c90d177a..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/OAuth2AuthorizationServerConfig.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.baeldung.config; - -import javax.sql.DataSource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.core.io.Resource; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.jdbc.datasource.init.DataSourceInitializer; -import org.springframework.jdbc.datasource.init.DatabasePopulator; -import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer; -import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter; -import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer; -import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer; -import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer; -import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore; - -@Configuration -@PropertySource({ "classpath:persistence.properties" }) -@EnableAuthorizationServer -public class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { - - @Autowired - private Environment env; - - @Autowired - @Qualifier("authenticationManagerBean") - private AuthenticationManager authenticationManager; - - @Value("classpath:schema.sql") - private Resource schemaScript; - - @Override - public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { - oauthServer.tokenKeyAccess("permitAll()").checkTokenAccess("isAuthenticated()"); - } - - @Override - public void configure(ClientDetailsServiceConfigurer clients) throws Exception { - // @formatter:off - clients.jdbc(dataSource()) - .withClient("sampleClientId") - .authorizedGrantTypes("implicit") - .scopes("read","write","foo","bar") - .autoApprove(false) - .and() - .withClient("fooClientIdPassword") - .secret("secret") - .authorizedGrantTypes("password","authorization_code", "refresh_token") - .scopes("foo","read","write") - .and() - .withClient("barClientIdPassword") - .secret("secret") - .authorizedGrantTypes("password","authorization_code", "refresh_token") - .scopes("bar","read","write") - ; - - // @formatter:on - } - - @Override - public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { - endpoints.tokenStore(tokenStore()).authenticationManager(authenticationManager); - } - - @Bean - public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { - final DataSourceInitializer initializer = new DataSourceInitializer(); - initializer.setDataSource(dataSource); - initializer.setDatabasePopulator(databasePopulator()); - return initializer; - } - - private DatabasePopulator databasePopulator() { - final ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); - populator.addScript(schemaScript); - return populator; - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); - dataSource.setUrl(env.getProperty("jdbc.url")); - dataSource.setUsername(env.getProperty("jdbc.user")); - dataSource.setPassword(env.getProperty("jdbc.pass")); - return dataSource; - } - - @Bean - public TokenStore tokenStore() { - return new JdbcTokenStore(dataSource()); - } -} diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/WebSecurityConfig.java b/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/WebSecurityConfig.java deleted file mode 100644 index f8218a0c03..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/java/org/baeldung/config/WebSecurityConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -public class WebSecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication().withUser("john").password("123").roles("USER").and().withUser("tom").password("111").roles("ADMIN"); - } - - @Override - @Bean - public AuthenticationManager authenticationManagerBean() throws Exception { - return super.authenticationManagerBean(); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } - -} diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/resources/application.properties b/spring-security-oauth/spring-security-oauth-server/src/main/resources/application.properties deleted file mode 100644 index e33e7dabf6..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.contextPath=/spring-security-oauth-server -server.port=8081 \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/resources/persistence.properties b/spring-security-oauth/spring-security-oauth-server/src/main/resources/persistence.properties deleted file mode 100644 index b975b10e9f..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/resources/persistence.properties +++ /dev/null @@ -1,6 +0,0 @@ -################### DataSource Configuration ########################## -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/oauth2?createDatabaseIfNotExist=true -jdbc.user=tutorialuser -jdbc.pass=tutorialmy5ql - diff --git a/spring-security-oauth/spring-security-oauth-server/src/main/resources/schema.sql b/spring-security-oauth/spring-security-oauth-server/src/main/resources/schema.sql deleted file mode 100644 index 9c0b504a42..0000000000 --- a/spring-security-oauth/spring-security-oauth-server/src/main/resources/schema.sql +++ /dev/null @@ -1,71 +0,0 @@ -drop table if exists oauth_client_details; -create table oauth_client_details ( - client_id VARCHAR(255) PRIMARY KEY, - resource_ids VARCHAR(255), - client_secret VARCHAR(255), - scope VARCHAR(255), - authorized_grant_types VARCHAR(255), - web_server_redirect_uri VARCHAR(255), - authorities VARCHAR(255), - access_token_validity INTEGER, - refresh_token_validity INTEGER, - additional_information VARCHAR(4096), - autoapprove VARCHAR(255) -); - -drop table if exists oauth_client_token; -create table oauth_client_token ( - token_id VARCHAR(255), - token LONG VARBINARY, - authentication_id VARCHAR(255) PRIMARY KEY, - user_name VARCHAR(255), - client_id VARCHAR(255) -); - -drop table if exists oauth_access_token; -create table oauth_access_token ( - token_id VARCHAR(255), - token LONG VARBINARY, - authentication_id VARCHAR(255) PRIMARY KEY, - user_name VARCHAR(255), - client_id VARCHAR(255), - authentication LONG VARBINARY, - refresh_token VARCHAR(255) -); - -drop table if exists oauth_refresh_token; -create table oauth_refresh_token ( - token_id VARCHAR(255), - token LONG VARBINARY, - authentication LONG VARBINARY -); - -drop table if exists oauth_code; -create table oauth_code ( - code VARCHAR(255), authentication LONG VARBINARY -); - -drop table if exists oauth_approvals; -create table oauth_approvals ( - userId VARCHAR(255), - clientId VARCHAR(255), - scope VARCHAR(255), - status VARCHAR(10), - expiresAt TIMESTAMP, - lastModifiedAt TIMESTAMP -); - -drop table if exists ClientDetails; -create table ClientDetails ( - appId VARCHAR(255) PRIMARY KEY, - resourceIds VARCHAR(255), - appSecret VARCHAR(255), - scope VARCHAR(255), - grantTypes VARCHAR(255), - redirectUrl VARCHAR(255), - authorities VARCHAR(255), - access_token_validity INTEGER, - refresh_token_validity INTEGER, - additionalInformation VARCHAR(4096), - autoApproveScopes VARCHAR(255) -); diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/.project b/spring-security-oauth/spring-security-oauth-ui-implicit/.project deleted file mode 100644 index b96a26c60d..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/.project +++ /dev/null @@ -1,53 +0,0 @@ - - - spring-security-oauth-ui-implicit - - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator (1).launch - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - org.eclipse.wst.validation.validationbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature - - diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/pom.xml b/spring-security-oauth/spring-security-oauth-ui-implicit/pom.xml deleted file mode 100644 index aaa2900d48..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - 4.0.0 - spring-security-oauth-ui-implicit - - spring-security-oauth-ui-implicit - war - - - org.baeldung - spring-security-oauth - 1.0.0-SNAPSHOT - - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - - spring-security-oauth-ui-implicit - - - src/main/resources - true - - - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiApplication.java b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiApplication.java deleted file mode 100644 index 8f491516aa..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; - -@SpringBootApplication -public class UiApplication extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(UiApplication.class, args); - } -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiWebConfig.java b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiWebConfig.java deleted file mode 100644 index 71197ce5d2..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/java/org/baeldung/config/UiWebConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class UiWebConfig extends WebMvcConfigurerAdapter { - - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/oauthTemp"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/application.properties b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/application.properties deleted file mode 100644 index 33de0adb88..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.contextPath=/spring-security-oauth-ui-implicit -server.port=8081 \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/oauth-ng.js b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/oauth-ng.js deleted file mode 100644 index 333070b935..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/oauth-ng.js +++ /dev/null @@ -1,539 +0,0 @@ -/* oauth-ng - v0.4.2 - 2015-08-27 */ - -'use strict'; - -// App libraries -angular.module('oauth', [ - 'oauth.directive', // login directive - 'oauth.accessToken', // access token service - 'oauth.endpoint', // oauth endpoint service - 'oauth.profile', // profile model - 'oauth.storage', // storage - 'oauth.interceptor', // bearer token interceptor - 'oauth.configuration' // token appender -]) - .config(['$locationProvider','$httpProvider', - function($locationProvider, $httpProvider) { - $httpProvider.interceptors.push('ExpiredInterceptor'); - }]); - -'use strict'; - -var accessTokenService = angular.module('oauth.accessToken', []); - -accessTokenService.factory('AccessToken', ['Storage', '$rootScope', '$location', '$interval', function(Storage, $rootScope, $location, $interval){ - - var service = { - token: null - }, - oAuth2HashTokens = [ //per http://tools.ietf.org/html/rfc6749#section-4.2.2 - 'access_token', 'token_type', 'expires_in', 'scope', 'state', - 'error','error_description' - ]; - - /** - * Returns the access token. - */ - service.get = function(){ - return this.token; - }; - - /** - * Sets and returns the access token. It tries (in order) the following strategies: - * - takes the token from the fragment URI - * - takes the token from the sessionStorage - */ - service.set = function(){ - this.setTokenFromString($location.hash()); - - //If hash is present in URL always use it, cuz its coming from oAuth2 provider redirect - if(null === service.token){ - setTokenFromSession(); - } - - return this.token; - }; - - /** - * Delete the access token and remove the session. - * @returns {null} - */ - service.destroy = function(){ - Storage.delete('token'); - this.token = null; - return this.token; - }; - - /** - * Tells if the access token is expired. - */ - service.expired = function(){ - return (this.token && this.token.expires_at && new Date(this.token.expires_at) < new Date()); - }; - - /** - * Get the access token from a string and save it - * @param hash - */ - service.setTokenFromString = function(hash){ - var params = getTokenFromString(hash); - - if(params){ - removeFragment(); - setToken(params); - setExpiresAt(); - // We have to save it again to make sure expires_at is set - // and the expiry event is set up properly - setToken(this.token); - $rootScope.$broadcast('oauth:login', service.token); - } - }; - - /* * * * * * * * * * - * PRIVATE METHODS * - * * * * * * * * * */ - - /** - * Set the access token from the sessionStorage. - */ - var setTokenFromSession = function(){ - var params = Storage.get('token'); - if (params) { - setToken(params); - } - }; - - /** - * Set the access token. - * - * @param params - * @returns {*|{}} - */ - var setToken = function(params){ - service.token = service.token || {}; // init the token - angular.extend(service.token, params); // set the access token params - setTokenInSession(); // save the token into the session - setExpiresAtEvent(); // event to fire when the token expires - - return service.token; - }; - - /** - * Parse the fragment URI and return an object - * @param hash - * @returns {{}} - */ - var getTokenFromString = function(hash){ - var params = {}, - regex = /([^&=]+)=([^&]*)/g, - m; - - while ((m = regex.exec(hash)) !== null) { - params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); - } - - if(params.access_token || params.error){ - return params; - } - }; - - /** - * Save the access token into the session - */ - var setTokenInSession = function(){ - Storage.set('token', service.token); - }; - - /** - * Set the access token expiration date (useful for refresh logics) - */ - var setExpiresAt = function(){ - if (!service.token) { - return; - } - if(typeof(service.token.expires_in) !== 'undefined' && service.token.expires_in !== null) { - var expires_at = new Date(); - expires_at.setSeconds(expires_at.getSeconds() + parseInt(service.token.expires_in)-60); // 60 seconds less to secure browser and response latency - service.token.expires_at = expires_at; - } - else { - service.token.expires_at = null; - } - }; - - - /** - * Set the timeout at which the expired event is fired - */ - var setExpiresAtEvent = function(){ - // Don't bother if there's no expires token - if (typeof(service.token.expires_at) === 'undefined' || service.token.expires_at === null) { - return; - } - var time = (new Date(service.token.expires_at))-(new Date()); - if(time && time > 0){ - $interval(function(){ - $rootScope.$broadcast('oauth:expired', service.token); - }, time, 1); - } - }; - - /** - * Remove the oAuth2 pieces from the hash fragment - */ - var removeFragment = function(){ - var curHash = $location.hash(); - angular.forEach(oAuth2HashTokens,function(hashKey){ - var re = new RegExp('&'+hashKey+'(=[^&]*)?|^'+hashKey+'(=[^&]*)?&?'); - curHash = curHash.replace(re,''); - }); - - $location.hash(curHash); - }; - - return service; - -}]); - -'use strict'; - -var endpointClient = angular.module('oauth.endpoint', []); - -endpointClient.factory('Endpoint', function() { - - var service = {}; - - /* - * Defines the authorization URL - */ - - service.set = function(configuration) { - this.config = configuration; - return this.get(); - }; - - /* - * Returns the authorization URL - */ - - service.get = function( overrides ) { - var params = angular.extend( {}, service.config, overrides); - var oAuthScope = (params.scope) ? encodeURIComponent(params.scope) : '', - state = (params.state) ? encodeURIComponent(params.state) : '', - authPathHasQuery = (params.authorizePath.indexOf('?') === -1) ? false : true, - appendChar = (authPathHasQuery) ? '&' : '?', //if authorizePath has ? already append OAuth2 params - responseType = (params.responseType) ? encodeURIComponent(params.responseType) : ''; - - var url = params.site + - params.authorizePath + - appendChar + 'response_type=' + responseType + '&' + - 'client_id=' + encodeURIComponent(params.clientId) + '&' + - 'redirect_uri=' + encodeURIComponent(params.redirectUri) + '&' + - 'scope=' + oAuthScope + '&' + - 'state=' + state; - - if( params.nonce ) { - url = url + '&nonce=' + params.nonce; - } - return url; - }; - - /* - * Redirects the app to the authorization URL - */ - - service.redirect = function( overrides ) { - var targetLocation = this.get( overrides ); - window.location.replace(targetLocation); - }; - - return service; -}); - -'use strict'; - -var profileClient = angular.module('oauth.profile', []); - -profileClient.factory('Profile', ['$http', 'AccessToken', '$rootScope', function($http, AccessToken, $rootScope) { - var service = {}; - var profile; - - service.find = function(uri) { - var promise = $http.get(uri, { headers: headers() }); - promise.success(function(response) { - profile = response; - $rootScope.$broadcast('oauth:profile', profile); - }); - return promise; - }; - - service.get = function() { - return profile; - }; - - service.set = function(resource) { - profile = resource; - return profile; - }; - - var headers = function() { - return { Authorization: 'Bearer ' + AccessToken.get().access_token }; - }; - - return service; -}]); - -'use strict'; - -var storageService = angular.module('oauth.storage', ['ngStorage']); - -storageService.factory('Storage', ['$rootScope', '$sessionStorage', '$localStorage', function($rootScope, $sessionStorage, $localStorage){ - - var service = { - storage: $sessionStorage // By default - }; - - /** - * Deletes the item from storage, - * Returns the item's previous value - */ - service.delete = function (name) { - var stored = this.get(name); - delete this.storage[name]; - return stored; - }; - - /** - * Returns the item from storage - */ - service.get = function (name) { - return this.storage[name]; - }; - - /** - * Sets the item in storage to the value specified - * Returns the item's value - */ - service.set = function (name, value) { - this.storage[name] = value; - return this.get(name); - }; - - /** - * Change the storage service being used - */ - service.use = function (storage) { - if (storage === 'sessionStorage') { - this.storage = $sessionStorage; - } else if (storage === 'localStorage') { - this.storage = $localStorage; - } - }; - - return service; -}]); -'use strict'; - -var oauthConfigurationService = angular.module('oauth.configuration', []); - -oauthConfigurationService.provider('OAuthConfiguration', function() { - var _config = {}; - - this.init = function(config, httpProvider) { - _config.protectedResources = config.protectedResources || []; - httpProvider.interceptors.push('AuthInterceptor'); - }; - - this.$get = function() { - return { - getConfig: function() { - return _config; - } - }; - }; -}) -.factory('AuthInterceptor', function($q, $rootScope, OAuthConfiguration, AccessToken) { - return { - 'request': function(config) { - OAuthConfiguration.getConfig().protectedResources.forEach(function(resource) { - // If the url is one of the protected resources, we want to see if there's a token and then - // add the token if it exists. - if (config.url.indexOf(resource) > -1) { - var token = AccessToken.get(); - if (token) { - config.headers.Authorization = 'Bearer ' + token.access_token; - } - } - }); - - return config; - } - }; -}); -'use strict'; - -var interceptorService = angular.module('oauth.interceptor', []); - -interceptorService.factory('ExpiredInterceptor', ['Storage', '$rootScope', function (Storage, $rootScope) { - - var service = {}; - - service.request = function(config) { - var token = Storage.get('token'); - - if (token && expired(token)) { - $rootScope.$broadcast('oauth:expired', token); - } - - return config; - }; - - var expired = function(token) { - return (token && token.expires_at && new Date(token.expires_at) < new Date()); - }; - - return service; -}]); - -'use strict'; - -var directives = angular.module('oauth.directive', []); - -directives.directive('oauth', [ - 'AccessToken', - 'Endpoint', - 'Profile', - 'Storage', - '$location', - '$rootScope', - '$compile', - '$http', - '$templateCache', - function(AccessToken, Endpoint, Profile, Storage, $location, $rootScope, $compile, $http, $templateCache) { - - var definition = { - restrict: 'AE', - replace: true, - scope: { - site: '@', // (required) set the oauth server host (e.g. http://oauth.example.com) - clientId: '@', // (required) client id - redirectUri: '@', // (required) client redirect uri - responseType: '@', // (optional) response type, defaults to token (use 'token' for implicit flow and 'code' for authorization code flow - scope: '@', // (optional) scope - profileUri: '@', // (optional) user profile uri (e.g http://example.com/me) - template: '@', // (optional) template to render (e.g bower_components/oauth-ng/dist/views/templates/default.html) - text: '@', // (optional) login text - authorizePath: '@', // (optional) authorization url - state: '@', // (optional) An arbitrary unique string created by your app to guard against Cross-site Request Forgery - storage: '@' // (optional) Store token in 'sessionStorage' or 'localStorage', defaults to 'sessionStorage' - } - }; - - definition.link = function postLink(scope, element) { - scope.show = 'none'; - - scope.$watch('clientId', function() { - init(); - }); - - var init = function() { - initAttributes(); // sets defaults - Storage.use(scope.storage);// set storage - compile(); // compiles the desired layout - Endpoint.set(scope); // sets the oauth authorization url - AccessToken.set(scope); // sets the access token object (if existing, from fragment or session) - initProfile(scope); // gets the profile resource (if existing the access token) - initView(); // sets the view (logged in or out) - }; - - var initAttributes = function() { - scope.authorizePath = scope.authorizePath || '/oauth/authorize'; - scope.tokenPath = scope.tokenPath || '/oauth/token'; - scope.template = scope.template || 'bower_components/oauth-ng/dist/views/templates/default.html'; - scope.responseType = scope.responseType || 'token'; - scope.text = scope.text || 'Sign In'; - scope.state = scope.state || undefined; - scope.scope = scope.scope || undefined; - scope.storage = scope.storage || 'sessionStorage'; - }; - - var compile = function() { - $http.get(scope.template, { cache: $templateCache }).success(function(html) { - element.html(html); - $compile(element.contents())(scope); - }); - }; - - var initProfile = function(scope) { - var token = AccessToken.get(); - - if (token && token.access_token && scope.profileUri) { - Profile.find(scope.profileUri).success(function(response) { - scope.profile = response; - }); - } - }; - - var initView = function() { - var token = AccessToken.get(); - - if (!token) { - return loggedOut(); // without access token it's logged out - } - if (token.access_token) { - return authorized(); // if there is the access token we are done - } - if (token.error) { - return denied(); // if the request has been denied we fire the denied event - } - }; - - scope.login = function() { - Endpoint.redirect(); - }; - - scope.logout = function() { - AccessToken.destroy(scope); - $rootScope.$broadcast('oauth:logout'); - loggedOut(); - }; - - scope.$on('oauth:expired', function() { - AccessToken.destroy(scope); - scope.show = 'logged-out'; - }); - - // user is authorized - var authorized = function() { - $rootScope.$broadcast('oauth:authorized', AccessToken.get()); - scope.show = 'logged-in'; - }; - - // set the oauth directive to the logged-out status - var loggedOut = function() { - $rootScope.$broadcast('oauth:loggedOut'); - scope.show = 'logged-out'; - }; - - // set the oauth directive to the denied status - var denied = function() { - scope.show = 'denied'; - $rootScope.$broadcast('oauth:denied'); - }; - - // Updates the template at runtime - scope.$on('oauth:template:update', function(event, template) { - scope.template = template; - compile(scope); - }); - - // Hack to update the directive content on logout - // TODO think to a cleaner solution - scope.$on('$routeChangeSuccess', function () { - init(); - }); - }; - - return definition; - } -]); diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/header.html b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/header.html deleted file mode 100644 index aa891bc289..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/header.html +++ /dev/null @@ -1,101 +0,0 @@ -
      - - - - - - - - - - - - - - -
      \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/index.html b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/index.html deleted file mode 100755 index 2996af04f0..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/index.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - -Spring Security OAuth - - - - -
      - -
      -
      {{message}}
      -

      Foo Details

      -
      -
      - - -
      - -
      - - -
      - - -
      - -
      -
      -
      -
      -
      -

      Bar Details

      -
      -
      - - -
      - -
      - - -
      - - -
      - - -
      - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/oauthTemp.html b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/oauthTemp.html deleted file mode 100644 index 1efc1eed3c..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/resources/templates/oauthTemp.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/webapp/resources/oauth-ng.js b/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/webapp/resources/oauth-ng.js deleted file mode 100644 index 333070b935..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/src/main/webapp/resources/oauth-ng.js +++ /dev/null @@ -1,539 +0,0 @@ -/* oauth-ng - v0.4.2 - 2015-08-27 */ - -'use strict'; - -// App libraries -angular.module('oauth', [ - 'oauth.directive', // login directive - 'oauth.accessToken', // access token service - 'oauth.endpoint', // oauth endpoint service - 'oauth.profile', // profile model - 'oauth.storage', // storage - 'oauth.interceptor', // bearer token interceptor - 'oauth.configuration' // token appender -]) - .config(['$locationProvider','$httpProvider', - function($locationProvider, $httpProvider) { - $httpProvider.interceptors.push('ExpiredInterceptor'); - }]); - -'use strict'; - -var accessTokenService = angular.module('oauth.accessToken', []); - -accessTokenService.factory('AccessToken', ['Storage', '$rootScope', '$location', '$interval', function(Storage, $rootScope, $location, $interval){ - - var service = { - token: null - }, - oAuth2HashTokens = [ //per http://tools.ietf.org/html/rfc6749#section-4.2.2 - 'access_token', 'token_type', 'expires_in', 'scope', 'state', - 'error','error_description' - ]; - - /** - * Returns the access token. - */ - service.get = function(){ - return this.token; - }; - - /** - * Sets and returns the access token. It tries (in order) the following strategies: - * - takes the token from the fragment URI - * - takes the token from the sessionStorage - */ - service.set = function(){ - this.setTokenFromString($location.hash()); - - //If hash is present in URL always use it, cuz its coming from oAuth2 provider redirect - if(null === service.token){ - setTokenFromSession(); - } - - return this.token; - }; - - /** - * Delete the access token and remove the session. - * @returns {null} - */ - service.destroy = function(){ - Storage.delete('token'); - this.token = null; - return this.token; - }; - - /** - * Tells if the access token is expired. - */ - service.expired = function(){ - return (this.token && this.token.expires_at && new Date(this.token.expires_at) < new Date()); - }; - - /** - * Get the access token from a string and save it - * @param hash - */ - service.setTokenFromString = function(hash){ - var params = getTokenFromString(hash); - - if(params){ - removeFragment(); - setToken(params); - setExpiresAt(); - // We have to save it again to make sure expires_at is set - // and the expiry event is set up properly - setToken(this.token); - $rootScope.$broadcast('oauth:login', service.token); - } - }; - - /* * * * * * * * * * - * PRIVATE METHODS * - * * * * * * * * * */ - - /** - * Set the access token from the sessionStorage. - */ - var setTokenFromSession = function(){ - var params = Storage.get('token'); - if (params) { - setToken(params); - } - }; - - /** - * Set the access token. - * - * @param params - * @returns {*|{}} - */ - var setToken = function(params){ - service.token = service.token || {}; // init the token - angular.extend(service.token, params); // set the access token params - setTokenInSession(); // save the token into the session - setExpiresAtEvent(); // event to fire when the token expires - - return service.token; - }; - - /** - * Parse the fragment URI and return an object - * @param hash - * @returns {{}} - */ - var getTokenFromString = function(hash){ - var params = {}, - regex = /([^&=]+)=([^&]*)/g, - m; - - while ((m = regex.exec(hash)) !== null) { - params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]); - } - - if(params.access_token || params.error){ - return params; - } - }; - - /** - * Save the access token into the session - */ - var setTokenInSession = function(){ - Storage.set('token', service.token); - }; - - /** - * Set the access token expiration date (useful for refresh logics) - */ - var setExpiresAt = function(){ - if (!service.token) { - return; - } - if(typeof(service.token.expires_in) !== 'undefined' && service.token.expires_in !== null) { - var expires_at = new Date(); - expires_at.setSeconds(expires_at.getSeconds() + parseInt(service.token.expires_in)-60); // 60 seconds less to secure browser and response latency - service.token.expires_at = expires_at; - } - else { - service.token.expires_at = null; - } - }; - - - /** - * Set the timeout at which the expired event is fired - */ - var setExpiresAtEvent = function(){ - // Don't bother if there's no expires token - if (typeof(service.token.expires_at) === 'undefined' || service.token.expires_at === null) { - return; - } - var time = (new Date(service.token.expires_at))-(new Date()); - if(time && time > 0){ - $interval(function(){ - $rootScope.$broadcast('oauth:expired', service.token); - }, time, 1); - } - }; - - /** - * Remove the oAuth2 pieces from the hash fragment - */ - var removeFragment = function(){ - var curHash = $location.hash(); - angular.forEach(oAuth2HashTokens,function(hashKey){ - var re = new RegExp('&'+hashKey+'(=[^&]*)?|^'+hashKey+'(=[^&]*)?&?'); - curHash = curHash.replace(re,''); - }); - - $location.hash(curHash); - }; - - return service; - -}]); - -'use strict'; - -var endpointClient = angular.module('oauth.endpoint', []); - -endpointClient.factory('Endpoint', function() { - - var service = {}; - - /* - * Defines the authorization URL - */ - - service.set = function(configuration) { - this.config = configuration; - return this.get(); - }; - - /* - * Returns the authorization URL - */ - - service.get = function( overrides ) { - var params = angular.extend( {}, service.config, overrides); - var oAuthScope = (params.scope) ? encodeURIComponent(params.scope) : '', - state = (params.state) ? encodeURIComponent(params.state) : '', - authPathHasQuery = (params.authorizePath.indexOf('?') === -1) ? false : true, - appendChar = (authPathHasQuery) ? '&' : '?', //if authorizePath has ? already append OAuth2 params - responseType = (params.responseType) ? encodeURIComponent(params.responseType) : ''; - - var url = params.site + - params.authorizePath + - appendChar + 'response_type=' + responseType + '&' + - 'client_id=' + encodeURIComponent(params.clientId) + '&' + - 'redirect_uri=' + encodeURIComponent(params.redirectUri) + '&' + - 'scope=' + oAuthScope + '&' + - 'state=' + state; - - if( params.nonce ) { - url = url + '&nonce=' + params.nonce; - } - return url; - }; - - /* - * Redirects the app to the authorization URL - */ - - service.redirect = function( overrides ) { - var targetLocation = this.get( overrides ); - window.location.replace(targetLocation); - }; - - return service; -}); - -'use strict'; - -var profileClient = angular.module('oauth.profile', []); - -profileClient.factory('Profile', ['$http', 'AccessToken', '$rootScope', function($http, AccessToken, $rootScope) { - var service = {}; - var profile; - - service.find = function(uri) { - var promise = $http.get(uri, { headers: headers() }); - promise.success(function(response) { - profile = response; - $rootScope.$broadcast('oauth:profile', profile); - }); - return promise; - }; - - service.get = function() { - return profile; - }; - - service.set = function(resource) { - profile = resource; - return profile; - }; - - var headers = function() { - return { Authorization: 'Bearer ' + AccessToken.get().access_token }; - }; - - return service; -}]); - -'use strict'; - -var storageService = angular.module('oauth.storage', ['ngStorage']); - -storageService.factory('Storage', ['$rootScope', '$sessionStorage', '$localStorage', function($rootScope, $sessionStorage, $localStorage){ - - var service = { - storage: $sessionStorage // By default - }; - - /** - * Deletes the item from storage, - * Returns the item's previous value - */ - service.delete = function (name) { - var stored = this.get(name); - delete this.storage[name]; - return stored; - }; - - /** - * Returns the item from storage - */ - service.get = function (name) { - return this.storage[name]; - }; - - /** - * Sets the item in storage to the value specified - * Returns the item's value - */ - service.set = function (name, value) { - this.storage[name] = value; - return this.get(name); - }; - - /** - * Change the storage service being used - */ - service.use = function (storage) { - if (storage === 'sessionStorage') { - this.storage = $sessionStorage; - } else if (storage === 'localStorage') { - this.storage = $localStorage; - } - }; - - return service; -}]); -'use strict'; - -var oauthConfigurationService = angular.module('oauth.configuration', []); - -oauthConfigurationService.provider('OAuthConfiguration', function() { - var _config = {}; - - this.init = function(config, httpProvider) { - _config.protectedResources = config.protectedResources || []; - httpProvider.interceptors.push('AuthInterceptor'); - }; - - this.$get = function() { - return { - getConfig: function() { - return _config; - } - }; - }; -}) -.factory('AuthInterceptor', function($q, $rootScope, OAuthConfiguration, AccessToken) { - return { - 'request': function(config) { - OAuthConfiguration.getConfig().protectedResources.forEach(function(resource) { - // If the url is one of the protected resources, we want to see if there's a token and then - // add the token if it exists. - if (config.url.indexOf(resource) > -1) { - var token = AccessToken.get(); - if (token) { - config.headers.Authorization = 'Bearer ' + token.access_token; - } - } - }); - - return config; - } - }; -}); -'use strict'; - -var interceptorService = angular.module('oauth.interceptor', []); - -interceptorService.factory('ExpiredInterceptor', ['Storage', '$rootScope', function (Storage, $rootScope) { - - var service = {}; - - service.request = function(config) { - var token = Storage.get('token'); - - if (token && expired(token)) { - $rootScope.$broadcast('oauth:expired', token); - } - - return config; - }; - - var expired = function(token) { - return (token && token.expires_at && new Date(token.expires_at) < new Date()); - }; - - return service; -}]); - -'use strict'; - -var directives = angular.module('oauth.directive', []); - -directives.directive('oauth', [ - 'AccessToken', - 'Endpoint', - 'Profile', - 'Storage', - '$location', - '$rootScope', - '$compile', - '$http', - '$templateCache', - function(AccessToken, Endpoint, Profile, Storage, $location, $rootScope, $compile, $http, $templateCache) { - - var definition = { - restrict: 'AE', - replace: true, - scope: { - site: '@', // (required) set the oauth server host (e.g. http://oauth.example.com) - clientId: '@', // (required) client id - redirectUri: '@', // (required) client redirect uri - responseType: '@', // (optional) response type, defaults to token (use 'token' for implicit flow and 'code' for authorization code flow - scope: '@', // (optional) scope - profileUri: '@', // (optional) user profile uri (e.g http://example.com/me) - template: '@', // (optional) template to render (e.g bower_components/oauth-ng/dist/views/templates/default.html) - text: '@', // (optional) login text - authorizePath: '@', // (optional) authorization url - state: '@', // (optional) An arbitrary unique string created by your app to guard against Cross-site Request Forgery - storage: '@' // (optional) Store token in 'sessionStorage' or 'localStorage', defaults to 'sessionStorage' - } - }; - - definition.link = function postLink(scope, element) { - scope.show = 'none'; - - scope.$watch('clientId', function() { - init(); - }); - - var init = function() { - initAttributes(); // sets defaults - Storage.use(scope.storage);// set storage - compile(); // compiles the desired layout - Endpoint.set(scope); // sets the oauth authorization url - AccessToken.set(scope); // sets the access token object (if existing, from fragment or session) - initProfile(scope); // gets the profile resource (if existing the access token) - initView(); // sets the view (logged in or out) - }; - - var initAttributes = function() { - scope.authorizePath = scope.authorizePath || '/oauth/authorize'; - scope.tokenPath = scope.tokenPath || '/oauth/token'; - scope.template = scope.template || 'bower_components/oauth-ng/dist/views/templates/default.html'; - scope.responseType = scope.responseType || 'token'; - scope.text = scope.text || 'Sign In'; - scope.state = scope.state || undefined; - scope.scope = scope.scope || undefined; - scope.storage = scope.storage || 'sessionStorage'; - }; - - var compile = function() { - $http.get(scope.template, { cache: $templateCache }).success(function(html) { - element.html(html); - $compile(element.contents())(scope); - }); - }; - - var initProfile = function(scope) { - var token = AccessToken.get(); - - if (token && token.access_token && scope.profileUri) { - Profile.find(scope.profileUri).success(function(response) { - scope.profile = response; - }); - } - }; - - var initView = function() { - var token = AccessToken.get(); - - if (!token) { - return loggedOut(); // without access token it's logged out - } - if (token.access_token) { - return authorized(); // if there is the access token we are done - } - if (token.error) { - return denied(); // if the request has been denied we fire the denied event - } - }; - - scope.login = function() { - Endpoint.redirect(); - }; - - scope.logout = function() { - AccessToken.destroy(scope); - $rootScope.$broadcast('oauth:logout'); - loggedOut(); - }; - - scope.$on('oauth:expired', function() { - AccessToken.destroy(scope); - scope.show = 'logged-out'; - }); - - // user is authorized - var authorized = function() { - $rootScope.$broadcast('oauth:authorized', AccessToken.get()); - scope.show = 'logged-in'; - }; - - // set the oauth directive to the logged-out status - var loggedOut = function() { - $rootScope.$broadcast('oauth:loggedOut'); - scope.show = 'logged-out'; - }; - - // set the oauth directive to the denied status - var denied = function() { - scope.show = 'denied'; - $rootScope.$broadcast('oauth:denied'); - }; - - // Updates the template at runtime - scope.$on('oauth:template:update', function(event, template) { - scope.template = template; - compile(scope); - }); - - // Hack to update the directive content on logout - // TODO think to a cleaner solution - scope.$on('$routeChangeSuccess', function () { - init(); - }); - }; - - return definition; - } -]); diff --git a/spring-security-oauth/spring-security-oauth-ui-password/.classpath b/spring-security-oauth/spring-security-oauth-ui-password/.classpath deleted file mode 100644 index 0cad5db2d0..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spring-security-oauth/spring-security-oauth-ui-password/pom.xml b/spring-security-oauth/spring-security-oauth-ui-password/pom.xml deleted file mode 100644 index 4a42081f78..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - 4.0.0 - spring-security-oauth-ui-password - - spring-security-oauth-ui-password - war - - - org.baeldung - spring-security-oauth - 1.0.0-SNAPSHOT - - - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - - - - org.springframework - spring-test - test - - - - junit - junit - test - - - - org.hamcrest - hamcrest-core - test - - - org.hamcrest - hamcrest-library - test - - - - com.jayway.restassured - rest-assured - ${rest-assured.version} - test - - - commons-logging - commons-logging - - - - - - - - spring-security-oauth-ui-password - - - src/main/resources - true - - - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiApplication.java b/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiApplication.java deleted file mode 100644 index 8f491516aa..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; - -@SpringBootApplication -public class UiApplication extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(UiApplication.class, args); - } -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiWebConfig.java b/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiWebConfig.java deleted file mode 100644 index 0732182354..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/java/org/baeldung/config/UiWebConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class UiWebConfig extends WebMvcConfigurerAdapter { - - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - registry.addViewController("/login"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } - -} \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/application.properties b/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/application.properties deleted file mode 100644 index e76a587680..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.contextPath=/spring-security-oauth-ui-password -server.port=8081 \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/header.html b/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/header.html deleted file mode 100644 index cafba4eb65..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/header.html +++ /dev/null @@ -1,73 +0,0 @@ -
      - - - - - - - - - - - -
      \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/index.html b/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/index.html deleted file mode 100755 index e2458c2940..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - -Spring Security OAuth - - - - -
      - -
      -

      Foo Details

      -
      - - {{foo.id}} -
      - -
      - -{{foo.name}} -
      - - - -
      - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/login.html b/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/login.html deleted file mode 100755 index 4d105cec6c..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/resources/templates/login.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - -Spring Security OAuth - - - - -
      - -
      - -

      Login

      -
      -
      - - -
      - -
      - - -
      - -
      -Login -
      - -
      - -
      - - \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/main/webapp/resources/angular-utf8-base64.min.js b/spring-security-oauth/spring-security-oauth-ui-password/src/main/webapp/resources/angular-utf8-base64.min.js deleted file mode 100644 index 24af57d020..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/main/webapp/resources/angular-utf8-base64.min.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";angular.module("ab-base64",[]).constant("base64",function(){var a={alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",lookup:null,ie:/MSIE /.test(navigator.userAgent),ieo:/MSIE [67]/.test(navigator.userAgent),encode:function(b){var c,d,e,f,g=a.toUtf8(b),h=-1,i=g.length,j=[,,,];if(a.ie){for(c=[];++h>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c.push(a.alphabet.charAt(j[0]),a.alphabet.charAt(j[1]),a.alphabet.charAt(j[2]),a.alphabet.charAt(j[3]));return c.join("")}for(c="";++h>2,j[1]=(3&d)<<4|e>>4,isNaN(e)?j[2]=j[3]=64:(f=g[++h],j[2]=(15&e)<<2|f>>6,j[3]=isNaN(f)?64:63&f),c+=a.alphabet[j[0]]+a.alphabet[j[1]]+a.alphabet[j[2]]+a.alphabet[j[3]];return c},decode:function(b){if(b=b.replace(/\s/g,""),b.length%4)throw new Error("InvalidLengthError: decode failed: The string to be decoded is not the correct length for a base64 encoded string.");if(/[^A-Za-z0-9+\/=\s]/g.test(b))throw new Error("InvalidCharacterError: decode failed: The string contains characters invalid in a base64 encoded string.");var c,d=a.fromUtf8(b),e=0,f=d.length;if(a.ieo){for(c=[];f>e;)c.push(d[e]<128?String.fromCharCode(d[e++]):d[e]>191&&d[e]<224?String.fromCharCode((31&d[e++])<<6|63&d[e++]):String.fromCharCode((15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]));return c.join("")}for(c="";f>e;)c+=String.fromCharCode(d[e]<128?d[e++]:d[e]>191&&d[e]<224?(31&d[e++])<<6|63&d[e++]:(15&d[e++])<<12|(63&d[e++])<<6|63&d[e++]);return c},toUtf8:function(a){var b,c=-1,d=a.length,e=[];if(/^[\x00-\x7f]*$/.test(a))for(;++cb?e.push(b):2048>b?e.push(b>>6|192,63&b|128):e.push(b>>12|224,b>>6&63|128,63&b|128);return e},fromUtf8:function(b){var c,d=-1,e=[],f=[,,,];if(!a.lookup){for(c=a.alphabet.length,a.lookup={};++d>4),f[2]=a.lookup[b.charAt(++d)],64!==f[2])&&(e.push((15&f[1])<<4|f[2]>>2),f[3]=a.lookup[b.charAt(++d)],64!==f[3]);)e.push((3&f[2])<<6|f[3]);return e}},b={decode:function(b){b=b.replace(/-/g,"+").replace(/_/g,"/");var c=b.length%4;if(c){if(1===c)throw new Error("InvalidLengthError: Input base64url string is the wrong length to determine padding");b+=new Array(5-c).join("=")}return a.decode(b)},encode:function(b){var c=a.encode(b);return c.replace(/\+/g,"-").replace(/\//g,"_").split("=",1)[0]}};return{decode:a.decode,encode:a.encode,urldecode:b.decode,urlencode:b.encode}}()); \ No newline at end of file diff --git a/spring-security-oauth/spring-security-oauth-ui-password/src/test/java/org/baeldung/live/AuthorizationLiveTest.java b/spring-security-oauth/spring-security-oauth-ui-password/src/test/java/org/baeldung/live/AuthorizationLiveTest.java deleted file mode 100644 index e5e9d8428f..0000000000 --- a/spring-security-oauth/spring-security-oauth-ui-password/src/test/java/org/baeldung/live/AuthorizationLiveTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.baeldung.live; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.Test; -import org.springframework.http.MediaType; - -import com.jayway.restassured.RestAssured; -import com.jayway.restassured.response.Response; - -public class AuthorizationLiveTest { - - private String obtainAccessToken(String clientId, String username, String password) { - final Map params = new HashMap(); - params.put("grant_type", "password"); - params.put("client_id", clientId); - params.put("username", username); - params.put("password", password); - final Response response = RestAssured.given().auth().preemptive().basic(clientId, "secret").and().with().params(params).when().post("http://localhost:8081/spring-security-oauth-server/oauth/token"); - return response.jsonPath().getString("access_token"); - } - - @Test - public void givenUser_whenUseFooClient_thenOkForFooResourceOnly() { - final String accessToken = obtainAccessToken("fooClientIdPassword", "john", "123"); - - final Response fooResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/foos/1"); - assertEquals(200, fooResponse.getStatusCode()); - assertNotNull(fooResponse.jsonPath().get("name")); - - final Response barResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/bars/1"); - assertEquals(403, barResponse.getStatusCode()); - } - - @Test - public void givenUser_whenUseBarClient_thenOkForBarResourceReadOnly() { - final String accessToken = obtainAccessToken("barClientIdPassword", "john", "123"); - - final Response fooResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/foos/1"); - assertEquals(403, fooResponse.getStatusCode()); - - final Response barReadResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/bars/1"); - assertEquals(200, barReadResponse.getStatusCode()); - assertNotNull(barReadResponse.jsonPath().get("name")); - - final Response barWritResponse = RestAssured.given().contentType(MediaType.APPLICATION_JSON_VALUE).header("Authorization", "Bearer " + accessToken).body("{\"id\":1,\"name\":\"MyBar\"}").post("http://localhost:8081/spring-security-oauth-resource/bars"); - assertEquals(403, barWritResponse.getStatusCode()); - } - - @Test - public void givenAdmin_whenUseBarClient_thenOkForBarResourceReadWrite() { - final String accessToken = obtainAccessToken("barClientIdPassword", "tom", "111"); - - final Response fooResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/foos/1"); - assertEquals(403, fooResponse.getStatusCode()); - - final Response barResponse = RestAssured.given().header("Authorization", "Bearer " + accessToken).get("http://localhost:8081/spring-security-oauth-resource/bars/1"); - assertEquals(200, barResponse.getStatusCode()); - assertNotNull(barResponse.jsonPath().get("name")); - - final Response barWritResponse = RestAssured.given().contentType(MediaType.APPLICATION_JSON_VALUE).header("Authorization", "Bearer " + accessToken).body("{\"id\":1,\"name\":\"MyBar\"}").post("http://localhost:8081/spring-security-oauth-resource/bars"); - assertEquals(201, barWritResponse.getStatusCode()); - assertEquals("MyBar", barWritResponse.jsonPath().get("name")); - } - -} diff --git a/spring-security-rest-basic-auth/pom.xml b/spring-security-rest-basic-auth/pom.xml index 767edb7778..854bbb70be 100644 --- a/spring-security-rest-basic-auth/pom.xml +++ b/spring-security-rest-basic-auth/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-rest-basic-auth 0.2-SNAPSHOT @@ -287,12 +287,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 4.4.4 @@ -317,13 +317,13 @@ 4.12 1.10.19 - 2.8.0 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.19 - 1.4.17 + 2.19.1 + 1.4.18 diff --git a/spring-security-rest-custom/pom.xml b/spring-security-rest-custom/pom.xml index df936353d9..071fa14b71 100644 --- a/spring-security-rest-custom/pom.xml +++ b/spring-security-rest-custom/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-rest-custom 0.1-SNAPSHOT @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.2.RELEASE + 1.3.3.RELEASE @@ -254,12 +254,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -280,13 +280,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.15 + 2.19.1 + 1.4.18 diff --git a/spring-security-rest-digest-auth/.classpath b/spring-security-rest-digest-auth/.classpath index 5778c9435e..fa5dbd4c0e 100644 --- a/spring-security-rest-digest-auth/.classpath +++ b/spring-security-rest-digest-auth/.classpath @@ -25,7 +25,6 @@ - diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index 88e760458b..406c52e7e1 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-rest-digest-auth 0.1-SNAPSHOT @@ -274,12 +274,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 4.4.4 @@ -290,7 +290,7 @@ 1.1.3 - 2.5.5 + 2.7.2 5.2.2.Final @@ -306,13 +306,13 @@ 4.12 1.10.19 - 2.8.0 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.19 - 1.4.17 + 2.19.1 + 1.4.18 diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index 270774ee13..bc415d0455 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-rest-full 0.1-SNAPSHOT @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.2.RELEASE + 1.3.3.RELEASE @@ -427,19 +427,19 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.8.2.RELEASE 2.0.0 3.6.2 - 2.5.5 + 2.7.2 1.4.01 @@ -462,13 +462,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.15 + 2.19.1 + 1.4.18 1.1.3 diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java b/spring-security-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java index fec03d1ddb..89e3a22d45 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/metric/ActuatorMetricService.java @@ -17,13 +17,13 @@ public class ActuatorMetricService implements IActuatorMetricService { @Autowired private MetricReaderPublicMetrics publicMetrics; - private final List> statusMetric; + private final List> statusMetricsByMinute; private final List statusList; private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); public ActuatorMetricService() { super(); - statusMetric = new ArrayList>(); + statusMetricsByMinute = new ArrayList>(); statusList = new ArrayList(); } @@ -31,7 +31,7 @@ public class ActuatorMetricService implements IActuatorMetricService { public Object[][] getGraphData() { final Date current = new Date(); final int colCount = statusList.size() + 1; - final int rowCount = statusMetric.size() + 1; + final int rowCount = statusMetricsByMinute.size() + 1; final Object[][] result = new Object[rowCount][colCount]; result[0][0] = "Time"; int j = 1; @@ -41,19 +41,23 @@ public class ActuatorMetricService implements IActuatorMetricService { j++; } - List temp; - List last = new ArrayList(); for (int i = 1; i < rowCount; i++) { - temp = statusMetric.get(i - 1); result[i][0] = dateFormat.format(new Date(current.getTime() - (60000 * (rowCount - i)))); - for (j = 1; j <= temp.size(); j++) { - result[i][j] = temp.get(j - 1) - (last.size() >= j ? last.get(j - 1) : 0); + } + + List minuteOfStatuses; + List last = new ArrayList(); + + for (int i = 1; i < rowCount; i++) { + minuteOfStatuses = statusMetricsByMinute.get(i - 1); + for (j = 1; j <= minuteOfStatuses.size(); j++) { + result[i][j] = minuteOfStatuses.get(j - 1) - (last.size() >= j ? last.get(j - 1) : 0); } while (j < colCount) { result[i][j] = 0; j++; } - last = temp; + last = minuteOfStatuses; } return result; } @@ -62,16 +66,16 @@ public class ActuatorMetricService implements IActuatorMetricService { @Scheduled(fixedDelay = 60000) private void exportMetrics() { - final ArrayList statusCount = initializeCounterList(statusList.size()); + final ArrayList lastMinuteStatuses = initializeStatuses(statusList.size()); for (final Metric counterMetric : publicMetrics.metrics()) { - updateStatusCount(counterMetric, statusCount); + updateMetrics(counterMetric, lastMinuteStatuses); } - statusMetric.add(statusCount); + statusMetricsByMinute.add(lastMinuteStatuses); } - private ArrayList initializeCounterList(final int size) { + private ArrayList initializeStatuses(final int size) { final ArrayList counterList = new ArrayList(); for (int i = 0; i < size; i++) { counterList.add(0); @@ -79,22 +83,26 @@ public class ActuatorMetricService implements IActuatorMetricService { return counterList; } - private void updateStatusCount(final Metric counterMetric, final ArrayList statusCount) { + private void updateMetrics(final Metric counterMetric, final ArrayList statusCount) { String status = ""; int index = -1; int oldCount = 0; if (counterMetric.getName().contains("counter.status.")) { status = counterMetric.getName().substring(15, 18); // example 404, 200 - if (!statusList.contains(status)) { - statusList.add(status); - statusCount.add(0); - } + appendStatusIfNotExist(status, statusCount); index = statusList.indexOf(status); oldCount = statusCount.get(index) == null ? 0 : statusCount.get(index); statusCount.set(index, counterMetric.getValue().intValue() + oldCount); } } + private void appendStatusIfNotExist(final String status, final ArrayList statusCount) { + if (!statusList.contains(status)) { + statusList.add(status); + statusCount.add(0); + } + } + // } \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java b/spring-security-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java index 7df7e199b4..852a9fae99 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/metric/CustomActuatorMetricService.java @@ -21,14 +21,14 @@ public class CustomActuatorMetricService implements ICustomActuatorMetricService @Autowired private CounterService counter; - private final List> statusMetric; + private final List> statusMetricsByMinute; private final List statusList; private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); public CustomActuatorMetricService() { super(); repo = new InMemoryMetricRepository(); - statusMetric = new ArrayList>(); + statusMetricsByMinute = new ArrayList>(); statusList = new ArrayList(); } @@ -46,7 +46,7 @@ public class CustomActuatorMetricService implements ICustomActuatorMetricService public Object[][] getGraphData() { final Date current = new Date(); final int colCount = statusList.size() + 1; - final int rowCount = statusMetric.size() + 1; + final int rowCount = statusMetricsByMinute.size() + 1; final Object[][] result = new Object[rowCount][colCount]; result[0][0] = "Time"; @@ -56,12 +56,15 @@ public class CustomActuatorMetricService implements ICustomActuatorMetricService j++; } - List temp; for (int i = 1; i < rowCount; i++) { - temp = statusMetric.get(i - 1); result[i][0] = dateFormat.format(new Date(current.getTime() - (60000 * (rowCount - i)))); - for (j = 1; j <= temp.size(); j++) { - result[i][j] = temp.get(j - 1); + } + + List minuteOfStatuses; + for (int i = 1; i < rowCount; i++) { + minuteOfStatuses = statusMetricsByMinute.get(i - 1); + for (j = 1; j <= minuteOfStatuses.size(); j++) { + result[i][j] = minuteOfStatuses.get(j - 1); } while (j < colCount) { result[i][j] = 0; @@ -87,6 +90,6 @@ public class CustomActuatorMetricService implements ICustomActuatorMetricService } } - statusMetric.add(statusCount); + statusMetricsByMinute.add(statusCount); } } \ No newline at end of file diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 265da0bbcd..48791a83c1 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-security-rest 0.1-SNAPSHOT @@ -283,12 +283,12 @@ - 4.2.4.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE 4.3.11.Final - 5.1.37 + 5.1.38 1.7.13 @@ -310,7 +310,7 @@ 1.3 4.12 1.10.19 - 2.4.1 + 2.9.0 2.2.2 @@ -319,13 +319,13 @@ 4.4.1 4.5 - 2.4.1 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.15 + 2.19.1 + 1.4.18 diff --git a/spring-security-oauth/spring-security-oauth-ui-implicit/.classpath b/spring-thymeleaf/.classpath similarity index 98% rename from spring-security-oauth/spring-security-oauth-ui-implicit/.classpath rename to spring-thymeleaf/.classpath index 0cad5db2d0..c0f4868f56 100644 --- a/spring-security-oauth/spring-security-oauth-ui-implicit/.classpath +++ b/spring-thymeleaf/.classpath @@ -17,7 +17,7 @@ - + diff --git a/spring-security-oauth/spring-security-oauth-ui-password/.project b/spring-thymeleaf/.project similarity index 79% rename from spring-security-oauth/spring-security-oauth-ui-password/.project rename to spring-thymeleaf/.project index 58d50a3f3a..7f02bebd0d 100644 --- a/spring-security-oauth/spring-security-oauth-ui-password/.project +++ b/spring-thymeleaf/.project @@ -1,15 +1,10 @@ - spring-security-oauth-ui-password + spring-thymeleaf - - org.eclipse.wst.jsdt.core.javascriptValidator - - - org.eclipse.jdt.core.javabuilder @@ -21,12 +16,12 @@ - org.springframework.ide.eclipse.core.springbuilder + org.eclipse.wst.validation.validationbuilder - org.eclipse.wst.validation.validationbuilder + org.springframework.ide.eclipse.core.springbuilder @@ -37,12 +32,10 @@ - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature org.springframework.ide.eclipse.core.springnature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature + org.eclipse.wst.common.modulecore.ModuleCoreNature diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 16e6849f93..51e26fdfdd 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -18,12 +18,14 @@ 1.1.0.Final 5.1.2.Final + - 3.3 + 3.5.1 2.6 - 2.18.1 - 1.4.15 + 2.19.1 + 1.4.18 + diff --git a/spring-zuul/pom.xml b/spring-zuul/pom.xml index 6ad1d0be34..75ff467527 100644 --- a/spring-zuul/pom.xml +++ b/spring-zuul/pom.xml @@ -1,6 +1,6 @@ 4.0.0 - org.baeldung + com.baeldung spring-zuul 1.0.0-SNAPSHOT @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.1.RELEASE + 1.3.3.RELEASE @@ -65,19 +65,19 @@ - 4.2.2.RELEASE - 4.0.3.RELEASE + 4.2.5.RELEASE + 4.0.4.RELEASE - 2.5.1 + 2.7.2 1.7.12 1.1.3 - 18.0 + 19.0 3.3.2 @@ -88,13 +88,13 @@ 4.4 4.4 - 2.4.0 + 2.9.0 - 3.3 + 3.5.1 2.6 - 2.19 - 1.4.16 + 2.19.1 + 1.4.18 diff --git a/spring-zuul/spring-zuul-foos-resource/pom.xml b/spring-zuul/spring-zuul-foos-resource/pom.xml index 6d5e0e52cf..56ca1959ca 100644 --- a/spring-zuul/spring-zuul-foos-resource/pom.xml +++ b/spring-zuul/spring-zuul-foos-resource/pom.xml @@ -6,7 +6,7 @@ war - org.baeldung + com.baeldung spring-zuul 1.0.0-SNAPSHOT diff --git a/spring-zuul/spring-zuul-ui/.project b/spring-zuul/spring-zuul-ui/.project index ec0f2cde81..d87aec6bec 100644 --- a/spring-zuul/spring-zuul-ui/.project +++ b/spring-zuul/spring-zuul-ui/.project @@ -20,11 +20,6 @@ - - org.eclipse.m2e.core.maven2Builder - - - org.springframework.ide.eclipse.core.springbuilder @@ -35,6 +30,11 @@ + + org.eclipse.m2e.core.maven2Builder + + + org.eclipse.jem.workbench.JavaEMFNature diff --git a/spring-zuul/spring-zuul-ui/pom.xml b/spring-zuul/spring-zuul-ui/pom.xml index 65a025f849..9eaf4b7c45 100644 --- a/spring-zuul/spring-zuul-ui/pom.xml +++ b/spring-zuul/spring-zuul-ui/pom.xml @@ -6,7 +6,7 @@ war - org.baeldung + com.baeldung spring-zuul 1.0.0-SNAPSHOT diff --git a/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java b/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java deleted file mode 100644 index 9094099ecc..0000000000 --- a/src/main/java/org/baeldung/event/OnRegistrationCompleteEvent.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.baeldung.event; - -import java.util.Locale; - -import org.baeldung.persistence.model.User; -import org.springframework.context.ApplicationEvent; - -@SuppressWarnings("serial") -public class OnRegistrationCompleteEvent extends ApplicationEvent { - - private final String appUrl; - private final Locale locale; - private final User user; - - public OnRegistrationCompleteEvent(User user, Locale locale, String appUrl) { - super(user); - this.user = user; - this.locale = locale; - this.appUrl = appUrl; - } - - public String getAppUrl() { - return appUrl; - } - - public Locale getLocale() { - return locale; - } - - public User getUser() { - return user; - } -} diff --git a/src/main/java/org/baeldung/event/listener/RegistrationListener.java b/src/main/java/org/baeldung/event/listener/RegistrationListener.java deleted file mode 100644 index 5c848c7433..0000000000 --- a/src/main/java/org/baeldung/event/listener/RegistrationListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.baeldung.event.listener; - -import java.util.UUID; - -import org.baeldung.event.OnRegistrationCompleteEvent; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.service.IUserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationListener; -import org.springframework.context.MessageSource; -import org.springframework.mail.SimpleMailMessage; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.stereotype.Component; - -@Component -public class RegistrationListener implements ApplicationListener { - @Autowired - private IUserService service; - - @Autowired - private MessageSource messages; - - @Autowired - private JavaMailSender mailSender; - - @Override - public void onApplicationEvent(OnRegistrationCompleteEvent event) { - this.confirmRegistration(event); - } - - private void confirmRegistration(OnRegistrationCompleteEvent event) { - User user = event.getUser(); - String token = UUID.randomUUID().toString(); - service.createVerificationTokenForUser(user, token); - - String recipientAddress = user.getEmail(); - String subject = "Registration Confirmation"; - String confirmationUrl = event.getAppUrl() + "/regitrationConfirm.html?token=" + token; - String message = messages.getMessage("message.regSucc", null, event.getLocale()); - SimpleMailMessage email = new SimpleMailMessage(); - email.setTo(recipientAddress); - email.setSubject(subject); - email.setText(message + " \r\n" + "http://localhost:8080" + confirmationUrl); - mailSender.send(email); - } -} diff --git a/src/main/java/org/baeldung/hashing/HashGenerator.java b/src/main/java/org/baeldung/hashing/HashGenerator.java deleted file mode 100644 index bf9620a052..0000000000 --- a/src/main/java/org/baeldung/hashing/HashGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.baeldung.hashing; - -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; - -public class HashGenerator { - - public String getHashedPassword(String password) { - BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - String hashedPassword = passwordEncoder.encode(password); - return hashedPassword; - } -} diff --git a/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/src/main/java/org/baeldung/persistence/dao/UserRepository.java deleted file mode 100644 index 12f07d8692..0000000000 --- a/src/main/java/org/baeldung/persistence/dao/UserRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.baeldung.persistence.model.User; - -public interface UserRepository extends JpaRepository { - public User findByEmail(String email); - - public void delete(User user); - -} diff --git a/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java b/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java deleted file mode 100644 index f9fc850d41..0000000000 --- a/src/main/java/org/baeldung/persistence/dao/VerificationTokenRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.springframework.data.jpa.repository.JpaRepository; - -public interface VerificationTokenRepository extends JpaRepository { - - public VerificationToken findByToken(String token); - - public VerificationToken findByUser(User user); -} diff --git a/src/main/java/org/baeldung/persistence/model/Role.java b/src/main/java/org/baeldung/persistence/model/Role.java deleted file mode 100644 index b6d495a266..0000000000 --- a/src/main/java/org/baeldung/persistence/model/Role.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.CascadeType; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.Table; - -@Entity -@Table -public class Role { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL) - @JoinColumn(name = "user_id") - private User user; - - private Integer role; - - public Role() { - super(); - } - - public Role(Integer role) { - super(); - this.role = role; - } - - public Role(Integer role, User user) { - super(); - this.role = role; - this.user = user; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public Integer getRole() { - return role; - } - - public void setRole(Integer role) { - this.role = role; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((role == null) ? 0 : role.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Role role = (Role) obj; - if (!role.equals(role.role)) - return false; - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Role [role=").append(role).append("]").append("[id=").append(id).append("]"); - return builder.toString(); - } -} \ No newline at end of file diff --git a/src/main/java/org/baeldung/persistence/model/User.java b/src/main/java/org/baeldung/persistence/model/User.java deleted file mode 100644 index d2d56cec53..0000000000 --- a/src/main/java/org/baeldung/persistence/model/User.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.CascadeType; -//ERASE -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.OneToOne; - -@Entity -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String firstName; - - private String lastName; - - private String email; - - private String password; - - private boolean enabled; - - // ERASE - @Column(name = "token_expired") - private boolean tokenExpired; - - @OneToOne(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL) - private Role role; - - public User() { - super(); - this.enabled = false; - this.tokenExpired = false; - } - - // - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String username) { - this.email = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public Role getRole() { - return role; - } - - public void setRole(Role role) { - this.role = role; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public boolean isTokenExpired() { - return tokenExpired; - } - - public void setTokenExpired(boolean expired) { - this.tokenExpired = expired; - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((email == null) ? 0 : email.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final User user = (User) obj; - if (!email.equals(user.email)) - return false; - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[username").append(email).append("]"); - return builder.toString(); - } - -} \ No newline at end of file diff --git a/src/main/java/org/baeldung/persistence/model/VerificationToken.java b/src/main/java/org/baeldung/persistence/model/VerificationToken.java deleted file mode 100644 index d7556fdf5b..0000000000 --- a/src/main/java/org/baeldung/persistence/model/VerificationToken.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.baeldung.persistence.model; - -import java.util.Calendar; -import java.sql.Date; -import java.sql.Timestamp; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; - -@Entity -public class VerificationToken { - - private static final int EXPIRATION = 60 * 24; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private String token; - - @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER) - @JoinColumn(nullable = false, name = "user_id") - private User user; - - @Column(name = "expiry_date") - private Date expiryDate; - - public VerificationToken() { - super(); - } - - public VerificationToken(String token) { - super(); - - this.token = token; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - public VerificationToken(String token, User user) { - super(); - - this.token = token; - this.user = user; - this.expiryDate = calculateExpiryDate(EXPIRATION); - } - - // - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public Date getExpiryDate() { - return expiryDate; - } - - public void setExpiryDate(Date expiryDate) { - this.expiryDate = expiryDate; - } - - private Date calculateExpiryDate(int expiryTimeInMinutes) { - Calendar cal = Calendar.getInstance(); - cal.setTime(new Timestamp(cal.getTime().getTime())); - cal.add(Calendar.MINUTE, expiryTimeInMinutes); - return new Date(cal.getTime().getTime()); - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((expiryDate == null) ? 0 : expiryDate.hashCode()); - result = prime * result + ((token == null) ? 0 : token.hashCode()); - result = prime * result + ((user == null) ? 0 : user.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - VerificationToken other = (VerificationToken) obj; - if (expiryDate == null) { - if (other.expiryDate != null) - return false; - } else if (!expiryDate.equals(other.expiryDate)) - return false; - if (token == null) { - if (other.token != null) - return false; - } else if (!token.equals(other.token)) - return false; - if (user == null) { - if (other.user != null) - return false; - } else if (!user.equals(other.user)) - return false; - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Token [String=").append(token).append("]").append("[Expires").append(expiryDate).append("]"); - return builder.toString(); - } - -} diff --git a/src/main/java/org/baeldung/persistence/service/IUserService.java b/src/main/java/org/baeldung/persistence/service/IUserService.java deleted file mode 100644 index bc1c9bc9a3..0000000000 --- a/src/main/java/org/baeldung/persistence/service/IUserService.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.persistence.service; - -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.validation.service.EmailExistsException; - -public interface IUserService { - - User registerNewUserAccount(UserDto accountDto) throws EmailExistsException; - - User getUser(String verificationToken); - - void saveRegisteredUser(User user); - - void deleteUser(User user); - - void createVerificationTokenForUser(User user, String token); - - VerificationToken getVerificationToken(String VerificationToken); - -} diff --git a/src/main/java/org/baeldung/persistence/service/UserDto.java b/src/main/java/org/baeldung/persistence/service/UserDto.java deleted file mode 100644 index 29a59be2fc..0000000000 --- a/src/main/java/org/baeldung/persistence/service/UserDto.java +++ /dev/null @@ -1,88 +0,0 @@ -package org.baeldung.persistence.service; - -import javax.validation.constraints.NotNull; - -import org.baeldung.validation.service.PasswordMatches; -import org.baeldung.validation.service.ValidEmail; -import org.hibernate.validator.constraints.NotEmpty; - -@PasswordMatches -public class UserDto { - @NotNull - @NotEmpty - private String firstName; - - @NotNull - @NotEmpty - private String lastName; - - @NotNull - @NotEmpty - private String password; - - @NotNull - @NotEmpty - private String matchingPassword; - - @ValidEmail - @NotNull - @NotEmpty - private String email; - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - private Integer role; - - public Integer getRole() { - return role; - } - - public void setRole(Integer role) { - this.role = role; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getMatchingPassword() { - return matchingPassword; - } - - public void setMatchingPassword(String matchingPassword) { - this.matchingPassword = matchingPassword; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("User [firstName=").append(firstName).append("]").append("[lastName=").append(lastName).append("]").append("[email").append(email).append("]").append("[password").append(password).append("]"); - return builder.toString(); - } -} diff --git a/src/main/java/org/baeldung/persistence/service/UserService.java b/src/main/java/org/baeldung/persistence/service/UserService.java deleted file mode 100644 index a0b8ed4a4b..0000000000 --- a/src/main/java/org/baeldung/persistence/service/UserService.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.baeldung.persistence.service; - -import javax.transaction.Transactional; - -import org.baeldung.hashing.HashGenerator; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.dao.VerificationTokenRepository; -import org.baeldung.persistence.model.Role; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.validation.service.EmailExistsException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -@Transactional -public class UserService implements IUserService { - @Autowired - private UserRepository repository; - - @Autowired - private VerificationTokenRepository tokenRepository; - - @Autowired - private HashGenerator hashGenerator; - - @Override - public User registerNewUserAccount(UserDto accountDto) throws EmailExistsException { - if (emailExist(accountDto.getEmail())) { - throw new EmailExistsException("There is an account with that email adress: " + accountDto.getEmail()); - } - User user = new User(); - user.setFirstName(accountDto.getFirstName()); - user.setLastName(accountDto.getLastName()); - String hashedPassword = hashGenerator.getHashedPassword(accountDto.getPassword()); - user.setPassword(hashedPassword); - user.setEmail(accountDto.getEmail()); - user.setRole(new Role(Integer.valueOf(1), user)); - return repository.save(user); - } - - @Override - public User getUser(String verificationToken) { - User user = tokenRepository.findByToken(verificationToken).getUser(); - return user; - } - - @Override - public VerificationToken getVerificationToken(String VerificationToken) { - return tokenRepository.findByToken(VerificationToken); - } - - @Override - public void saveRegisteredUser(User user) { - repository.save(user); - } - - @Override - public void deleteUser(User user) { - repository.delete(user); - } - - @Override - public void createVerificationTokenForUser(User user, String token) { - VerificationToken myToken = new VerificationToken(token, user); - tokenRepository.save(myToken); - } - - private boolean emailExist(String email) { - User user = repository.findByEmail(email); - if (user != null) { - return true; - } - return false; - } - -} diff --git a/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java b/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java deleted file mode 100644 index a4cdc708d9..0000000000 --- a/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.baeldung.security; - -import java.io.IOException; -import java.util.Collection; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.web.DefaultRedirectStrategy; -import org.springframework.security.web.RedirectStrategy; -import org.springframework.security.web.WebAttributes; -import org.springframework.security.web.authentication.AuthenticationSuccessHandler; - -public class MySimpleUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler { - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); - - public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { - handle(request, response, authentication); - HttpSession session = request.getSession(false); - if (session != null) { - session.setMaxInactiveInterval(30); - } - clearAuthenticationAttributes(request); - } - - protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { - String targetUrl = determineTargetUrl(authentication); - - if (response.isCommitted()) { - logger.debug("Response has already been committed. Unable to redirect to " + targetUrl); - return; - } - - redirectStrategy.sendRedirect(request, response, targetUrl); - } - - protected String determineTargetUrl(Authentication authentication) { - boolean isUser = false; - boolean isAdmin = false; - Collection authorities = authentication.getAuthorities(); - for (GrantedAuthority grantedAuthority : authorities) { - if (grantedAuthority.getAuthority().equals("ROLE_USER")) { - isUser = true; - break; - } else if (grantedAuthority.getAuthority().equals("ROLE_ADMIN")) { - isAdmin = true; - break; - } - } - if (isUser) { - return "/homepage.html?user=" + authentication.getName(); - } else if (isAdmin) { - return "/console.html"; - } else { - throw new IllegalStateException(); - } - } - - protected void clearAuthenticationAttributes(HttpServletRequest request) { - HttpSession session = request.getSession(false); - if (session == null) { - return; - } - session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); - } - - public void setRedirectStrategy(RedirectStrategy redirectStrategy) { - this.redirectStrategy = redirectStrategy; - } - - protected RedirectStrategy getRedirectStrategy() { - return redirectStrategy; - } -} \ No newline at end of file diff --git a/src/main/java/org/baeldung/security/MyUserDetailsService.java b/src/main/java/org/baeldung/security/MyUserDetailsService.java deleted file mode 100644 index a103504055..0000000000 --- a/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.baeldung.security; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.baeldung.persistence.dao.UserRepository; -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.service.IUserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.MessageSource; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class MyUserDetailsService implements UserDetailsService { - - @Autowired - private UserRepository userRepository; - @Autowired - private IUserService service; - @Autowired - private MessageSource messages; - - public MyUserDetailsService() { - - } - - public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { - boolean enabled = true; - boolean accountNonExpired = true; - boolean credentialsNonExpired = true; - boolean accountNonLocked = true; - try { - User user = userRepository.findByEmail(email); - if (user == null) { - return new org.springframework.security.core.userdetails.User(" ", " ", enabled, true, true, true, getAuthorities(new Integer(1))); - } - - return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), user.isEnabled(), accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole().getRole())); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private Collection getAuthorities(Integer role) { - List authList = getGrantedAuthorities(getRoles(role)); - return authList; - } - - public List getRoles(Integer role) { - List roles = new ArrayList(); - if (role.intValue() == 2) { - roles.add("ROLE_ADMIN"); - } else if (role.intValue() == 1) { - roles.add("ROLE_USER"); - } - return roles; - } - - private static List getGrantedAuthorities(List roles) { - List authorities = new ArrayList(); - for (String role : roles) { - authorities.add(new SimpleGrantedAuthority(role)); - } - return authorities; - } -} diff --git a/src/main/java/org/baeldung/spring/AppConfig.java b/src/main/java/org/baeldung/spring/AppConfig.java deleted file mode 100644 index 4708c53a14..0000000000 --- a/src/main/java/org/baeldung/spring/AppConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.baeldung.spring; - -import java.util.Properties; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.PropertySource; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.core.env.Environment; -import org.springframework.mail.javamail.JavaMailSenderImpl; - -@Configuration -@ComponentScan(basePackages = { "org.baeldung.event.service", "org.baeldung.event", "org.baeldung.persistence.service", "org.baeldung.persistence.dao" }) -@Import({ MvcConfig.class, PersistenceJPAConfig.class, SecSecurityConfig.class }) -@PropertySource("classpath:application.properties") -public class AppConfig { - @Autowired - private Environment env; - - @Bean - public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Bean - public JavaMailSenderImpl javaMailSenderImpl() { - JavaMailSenderImpl mailSenderImpl = new JavaMailSenderImpl(); - mailSenderImpl.setHost(env.getProperty("smtp.host")); - mailSenderImpl.setPort(env.getProperty("smtp.port", Integer.class)); - mailSenderImpl.setProtocol(env.getProperty("smtp.protocol")); - mailSenderImpl.setUsername(env.getProperty("smtp.username")); - mailSenderImpl.setPassword(env.getProperty("smtp.password")); - Properties javaMailProps = new Properties(); - javaMailProps.put("mail.smtp.auth", true); - javaMailProps.put("mail.smtp.starttls.enable", true); - mailSenderImpl.setJavaMailProperties(javaMailProps); - return mailSenderImpl; - } - -} \ No newline at end of file diff --git a/src/main/java/org/baeldung/spring/MvcConfig.java b/src/main/java/org/baeldung/spring/MvcConfig.java deleted file mode 100644 index 3294ac2788..0000000000 --- a/src/main/java/org/baeldung/spring/MvcConfig.java +++ /dev/null @@ -1,111 +0,0 @@ -package org.baeldung.spring; - -import java.util.Locale; - -import org.baeldung.hashing.HashGenerator; -import org.baeldung.validation.service.EmailValidator; -import org.baeldung.validation.service.PasswordMatchesValidator; -import org.springframework.context.MessageSource; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; -import org.springframework.web.servlet.LocaleResolver; -import org.springframework.web.servlet.ViewResolver; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.i18n.CookieLocaleResolver; -import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; -import org.springframework.web.servlet.view.InternalResourceViewResolver; -import org.springframework.web.servlet.view.JstlView; - -@Configuration -@ComponentScan(basePackages = { "org.baeldung.web.controller", "org.baeldung.persistence.service", "org.baeldung.persistence.dao" }) -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // API - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/login.html"); - registry.addViewController("/logout.html"); - registry.addViewController("/homepage.html"); - registry.addViewController("/expiredAccount.html"); - registry.addViewController("/regitrationConfirm.html"); - registry.addViewController("/badUser.html"); - registry.addViewController("/emailError.html"); - registry.addViewController("/home.html"); - registry.addViewController("/invalidSession.html"); - registry.addViewController("/console.html"); - registry.addViewController("/admin.html"); - registry.addViewController("/registration.html"); - registry.addViewController("/successRegister.html"); - } - - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver bean = new InternalResourceViewResolver(); - bean.setViewClass(JstlView.class); - bean.setPrefix("/WEB-INF/view/"); - bean.setSuffix(".jsp"); - return bean; - } - - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/", "/resources/"); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); - localeChangeInterceptor.setParamName("lang"); - registry.addInterceptor(localeChangeInterceptor); - } - - @Bean - public LocaleResolver localeResolver() { - CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver(); - cookieLocaleResolver.setDefaultLocale(Locale.ENGLISH); - return cookieLocaleResolver; - } - - @Bean - public MessageSource messageSource() { - ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); - messageSource.setBasename("classpath:messages"); - messageSource.setUseCodeAsDefaultMessage(true); - messageSource.setDefaultEncoding("UTF-8"); - messageSource.setCacheSeconds(0); - return messageSource; - } - - @Bean - public EmailValidator usernameValidator() { - EmailValidator userNameValidator = new EmailValidator(); - return userNameValidator; - } - - @Bean - public PasswordMatchesValidator passwordMatchesValidator() { - PasswordMatchesValidator passwordMatchesValidator = new PasswordMatchesValidator(); - return passwordMatchesValidator; - } - - // DIC 7 - @Bean - public HashGenerator hashGenerator() { - HashGenerator hashGenerator = new HashGenerator(); - return hashGenerator; - } - -} \ No newline at end of file diff --git a/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java b/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java deleted file mode 100644 index 0baac30ec1..0000000000 --- a/src/main/java/org/baeldung/spring/PersistenceJPAConfig.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.baeldung.spring; - -import java.util.Properties; -import javax.sql.DataSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@EnableTransactionManagement -@PropertySource({ "classpath:application.properties" }) -@ComponentScan({ "org.baeldung.persistence.model" }) -@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") -public class PersistenceJPAConfig { - - @Autowired - private Environment env; - - public PersistenceJPAConfig() { - super(); - } - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { - final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); - final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - em.setJpaVendorAdapter(vendorAdapter); - em.setJpaProperties(additionalProperties()); - return em; - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); - dataSource.setUrl(env.getProperty("jdbc.url")); - dataSource.setUsername(env.getProperty("jdbc.user")); - dataSource.setPassword(env.getProperty("jdbc.pass")); - return dataSource; - } - - @Bean - public JpaTransactionManager transactionManager() { - JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); - return transactionManager; - } - - @Bean - public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { - return new PersistenceExceptionTranslationPostProcessor(); - } - - final Properties additionalProperties() { - final Properties hibernateProperties = new Properties(); - hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); - hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); - return hibernateProperties; - } - -} diff --git a/src/main/java/org/baeldung/spring/SecSecurityConfig.java b/src/main/java/org/baeldung/spring/SecSecurityConfig.java deleted file mode 100644 index 4da114c78b..0000000000 --- a/src/main/java/org/baeldung/spring/SecSecurityConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.spring; - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.ImportResource; - -@Configuration -@ImportResource({ "classpath:webSecurityConfig.xml" }) -public class SecSecurityConfig { - - public SecSecurityConfig() { - super(); - } - -} diff --git a/src/main/java/org/baeldung/validation/service/EmailExistsException.java b/src/main/java/org/baeldung/validation/service/EmailExistsException.java deleted file mode 100644 index 7b60bb9f08..0000000000 --- a/src/main/java/org/baeldung/validation/service/EmailExistsException.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.baeldung.validation.service; - -@SuppressWarnings("serial") -public class EmailExistsException extends Throwable { - - public EmailExistsException(String message) { - super(message); - } -} diff --git a/src/main/java/org/baeldung/validation/service/EmailValidator.java b/src/main/java/org/baeldung/validation/service/EmailValidator.java deleted file mode 100644 index 1ff8c4251f..0000000000 --- a/src/main/java/org/baeldung/validation/service/EmailValidator.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.baeldung.validation.service; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - -public class EmailValidator implements ConstraintValidator { - private Pattern pattern; - private Matcher matcher; - private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; - - @Override - public void initialize(ValidEmail constraintAnnotation) { - } - - @Override - public boolean isValid(String username, ConstraintValidatorContext context) { - return (validateEmail(username)); - } - - private boolean validateEmail(String email) { - pattern = Pattern.compile(EMAIL_PATTERN); - matcher = pattern.matcher(email); - return matcher.matches(); - } -} diff --git a/src/main/java/org/baeldung/validation/service/PasswordMatches.java b/src/main/java/org/baeldung/validation/service/PasswordMatches.java deleted file mode 100644 index 63cfb297f0..0000000000 --- a/src/main/java/org/baeldung/validation/service/PasswordMatches.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.baeldung.validation.service; - -import javax.validation.Constraint; -import javax.validation.Payload; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target({ TYPE, ANNOTATION_TYPE }) -@Retention(RUNTIME) -@Constraint(validatedBy = PasswordMatchesValidator.class) -@Documented -public @interface PasswordMatches { - - String message() default "Passwords don't match"; - - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/src/main/java/org/baeldung/validation/service/PasswordMatchesValidator.java b/src/main/java/org/baeldung/validation/service/PasswordMatchesValidator.java deleted file mode 100644 index 99f569957b..0000000000 --- a/src/main/java/org/baeldung/validation/service/PasswordMatchesValidator.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.baeldung.validation.service; - -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - -import org.baeldung.persistence.service.UserDto; - -public class PasswordMatchesValidator implements ConstraintValidator { - - @Override - public void initialize(PasswordMatches constraintAnnotation) { - } - - @Override - public boolean isValid(Object obj, ConstraintValidatorContext context) { - UserDto user = (UserDto) obj; - return user.getPassword().equals(user.getMatchingPassword()); - } -} diff --git a/src/main/java/org/baeldung/validation/service/UserValidator.java b/src/main/java/org/baeldung/validation/service/UserValidator.java deleted file mode 100644 index 45de9e3a94..0000000000 --- a/src/main/java/org/baeldung/validation/service/UserValidator.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.validation.service; - -import org.baeldung.persistence.service.UserDto; -import org.springframework.validation.Errors; -import org.springframework.validation.ValidationUtils; -import org.springframework.validation.Validator; - -public class UserValidator implements Validator { - - @Override - public boolean supports(Class clazz) { - return UserDto.class.isAssignableFrom(clazz); - } - - @Override - public void validate(Object obj, Errors errors) { - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "message.firstName", "Firstname is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "lastName", "message.lastName", "LastName is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "message.password", "LastName is required."); - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "message.username", "UserName is required."); - } - -} diff --git a/src/main/java/org/baeldung/validation/service/ValidEmail.java b/src/main/java/org/baeldung/validation/service/ValidEmail.java deleted file mode 100644 index df852351c3..0000000000 --- a/src/main/java/org/baeldung/validation/service/ValidEmail.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.baeldung.validation.service; - -import javax.validation.Constraint; -import javax.validation.Payload; -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -@Target({ TYPE, FIELD, ANNOTATION_TYPE }) -@Retention(RUNTIME) -@Constraint(validatedBy = EmailValidator.class) -@Documented -public @interface ValidEmail { - - String message() default "Invalid Email"; - - Class[] groups() default {}; - - Class[] payload() default {}; -} diff --git a/src/main/java/org/baeldung/web/controller/RegistrationController.java b/src/main/java/org/baeldung/web/controller/RegistrationController.java deleted file mode 100644 index 69709c9190..0000000000 --- a/src/main/java/org/baeldung/web/controller/RegistrationController.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.baeldung.web.controller; - -import java.util.Calendar; -import java.util.Locale; - -import javax.validation.Valid; - -import org.baeldung.persistence.model.User; -import org.baeldung.persistence.model.VerificationToken; -import org.baeldung.persistence.service.UserDto; -import org.baeldung.persistence.service.IUserService; -import org.baeldung.event.OnRegistrationCompleteEvent; -import org.baeldung.validation.service.EmailExistsException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.MessageSource; -import org.springframework.mail.javamail.JavaMailSender; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.validation.BindingResult; -import org.springframework.validation.Errors; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.servlet.ModelAndView; - -@Controller -public class RegistrationController { - - private final Logger LOGGER = LoggerFactory.getLogger(getClass()); - - @Autowired - private IUserService service; - - @Autowired - private MessageSource messages; - - @Autowired - private JavaMailSender mailSender; - - @Autowired - private ApplicationEventPublisher eventPublisher; - - public RegistrationController() { - - } - - @RequestMapping(value = "/user/registration", method = RequestMethod.GET) - public String showRegistrationForm(WebRequest request, Model model) { - LOGGER.debug("Rendering registration page."); - UserDto accountDto = new UserDto(); - model.addAttribute("user", accountDto); - return "registration"; - } - - @RequestMapping(value = "/regitrationConfirm", method = RequestMethod.GET) - public String confirmRegistration(WebRequest request, Model model, @RequestParam("token") String token) { - Locale locale = request.getLocale(); - - VerificationToken verificationToken = service.getVerificationToken(token); - if (verificationToken == null) { - String message = messages.getMessage("auth.message.invalidToken", null, locale); - model.addAttribute("message", message); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - User user = verificationToken.getUser(); - Calendar cal = Calendar.getInstance(); - if ((verificationToken.getExpiryDate().getTime() - cal.getTime().getTime()) <= 0) { - model.addAttribute("message", messages.getMessage("auth.message.expired", null, locale)); - return "redirect:/badUser.html?lang=" + locale.getLanguage(); - } - - user.setEnabled(true); - service.saveRegisteredUser(user); - return "redirect:/login.html?lang=" + locale.getLanguage(); - } - - @RequestMapping(value = "/user/registration", method = RequestMethod.POST) - public ModelAndView registerUserAccount(@ModelAttribute("user") @Valid UserDto accountDto, BindingResult result, WebRequest request, Errors errors) { - LOGGER.debug("Registering user account with information: {}", accountDto); - if (result.hasErrors()) { - return new ModelAndView("registration", "user", accountDto); - } - - User registered = createUserAccount(accountDto); - if (registered == null) { - result.rejectValue("email", "message.regError"); - } - try { - String appUrl = request.getContextPath(); - eventPublisher.publishEvent(new OnRegistrationCompleteEvent(registered, request.getLocale(), appUrl)); - } catch (Exception me) { - return new ModelAndView("emailError", "user", accountDto); - } - return new ModelAndView("successRegister", "user", accountDto); - } - - private User createUserAccount(UserDto accountDto) { - User registered = null; - try { - registered = service.registerNewUserAccount(accountDto); - } catch (EmailExistsException e) { - return null; - } - return registered; - } -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index b4b219646e..0000000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,17 +0,0 @@ -################### DataSource Configuration ########################## -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/AUTHDATA -jdbc.user=root -###jdbc.pass=admin### -init-db=false -################### Hibernate Configuration ########################## -hibernate.dialect=org.hibernate.dialect.MySQLDialect -hibernate.show_sql=true -hibernate.hbm2ddl.auto=validate -################### JavaMail Configuration ########################## -smtp.host=smtp.gmail.com -smtp.port=465 -smtp.protocol=smtps -smtp.username=egmp777@gmail.com -smtp.password=biiikupozvjvistz -support.email=egmp777@gmail.com diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index 1146dade63..0000000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties deleted file mode 100644 index 1a66bbc0f4..0000000000 --- a/src/main/resources/messages_en.properties +++ /dev/null @@ -1,55 +0,0 @@ -message.username=Username required -message.password=Password required -message.unauth=Unauthorized Access !! -message.badCredentials=Invalid Username or Password -message.sessionExpired=Session Timed Out -message.logoutError=Sorry, error logging out -message.logoutSucc=You logged out successfully -message.regSucc=You registered successfully. We will send you a confirmation message to your email account. -message.regError=An account for that username/email already exists. Please enter a different username. -message.lastName=Last name is required -message.firstName=First name required -message.badEmail=Invalid email address -message.email.config.error=Error in java mail configuration -token.message=Your token is: -auth.message.disabled=Your account is disabled please check your mail and click on the confirmation link -auth.message.expired=Your registration token has expired. Please register again. -auth.message.invalidUser=This username is invalid, or does not exist. -auth.message.invalidToken=Invalid account confirmation token. -label.user.email=Email: -label.user.firstName=First name: -label.user.lastName=Last name: -label.user.password=Password: -label.user.confirmPass=Confirm password -label.form.submit=Submit -label.form.title=Registration Form -label.form.loginLink=Back to login -label.login=Login here -label.form.loginTitle=Login -label.form.loginEmail=Email -label.form.loginPass=Password -label.form.loginEnglish=English -label.form.loginSpanish=Spanish -label.form.loginSignUp=Sign up -label.pages.logout=Logout -label.pages.admin=Administrator -label.pages.home.title=Home -label.pages.home.message=Welcome Home -label.pages.admin.message=Welcome Admin -label.pages.user.message=Welcome User -label.successRegister.title=Registration Success -label.badUser.title=Invalid Link -ValidEmail.user.email=Invalid email address! -UniqueUsername.user.username=An account with that username/email already exists -NotNull.user.firstName=First name required -NotEmpty.user.firstName=First name required -NotNull.user.lastName=Last name required -NotEmpty.user.lastName=Last name required -NotNull.user.username=Username(Email) required -NotEmpty.user.username=Username(Email) required -NotNull.user.password=Password required -NotEmpty.user.password=Password required -NotNull.user.matchingPassword=Required -NotEmpty.user.matchingPassword=Required -PasswordMatches.user:Password does not match! -Email.user.email=Invalid Username (Email) \ No newline at end of file diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties deleted file mode 100644 index a22263b9ba..0000000000 --- a/src/main/resources/messages_es_ES.properties +++ /dev/null @@ -1,55 +0,0 @@ -message.username=Por favor ingrese el nombre de usuario -message.password=Por favor ingrese una clave -message.unauth=Acceso denegado !! -message.badCredentials=Usuario o clave invalida -message.sessionExpired=La sesion expiro -message.logoutError=Lo sentimos, hubo problemas al salir -message.logoutSucc=Salida con exito -message.regSucc=Se registro correctamente. Le enviaremos un mensaje de confirmacion a su direccion de email. -message.regError=Ya existe una cuenta con ese nombre de usuario. Ingrese un nombre de usuario diferente. -message.lastName=Por favor ingrese su apellido -message.firstName=Por favor ingrese su nombre -message.badEmail=Direccion de correo no es valida -message.email.config.error=Error en configuracion de java mail -token.message=Su token es: -auth.message.disabled=Su cuenta no esta habilitada. Hemos enviado a su correo un link para habilitar su cuenta. -auth.message.expired=Su ficha de registro ha caducado, por favor registrese de nuevo. -auth.message.invalidUser=Este nombre de usuario es invalido o no existe. -auth.message.invalidToken=Codigo de confirmacion incorrecto. -label.user.email=Correo Electronico: -label.user.firstName=Nombre: -label.user.lastName=Apellido: -label.user.password=Contrasenia: -label.user.confirmPass=Confirme la contrasenia -label.form.submit=Enviar -label.form.title=Formulario de Registro -label.login=Autehtifiquese aqui -label.form.loginTitle=Ingreso -label.form.loginLink=Regrese a autentificacion -label.form.loginEmail=Correo Electronico -label.form.loginPass=Contrasenia -label.form.loginEnglish=Ingles -label.form.loginSpanish=Espaniol -label.form.loginSignUp=Registrese -label.pages.logout=Salir -label.pages.admin=Administrador -label.pages.home.title=Inicio -label.pages.home.message=Bienveni@ a Casa -label.pages.admin.message=Bienvenid@ Admin -label.pages.user.message=Bienvenid@ Usuari@ -label.successRegister.title=Registro Exitoso -label.badUser.title=Enlace Invalido -ValidEmail.user.email=Cuenta correo invlida! -UniqueUsername.user.username=Ya existe una cuenta con ese nombre de usuario -NotNull.user.firstName=Por favor ingrese su nombre -NotEmpty.user.firstName=Por favor ingrese su nombre -NotNull.user.lastName=Por favor ingrese su apellido -NotEmpty.user.lastName=Por favor ingrese su apellido -NotNull.user.username=Por favor ingrese su cuenta de email -NotEmpty.user.username=Por favor ingrese su cuenta de email -NotNull.user.password=Por favor ingrese su clave -NotEmpty.user.password=Por favor ingrese su contraseña -NotNull.user.matchingPassword=Campo obligatirio -NotEmpty.user.matchingPassword=Campo obligatrio -PasswordMatches.user:Las claves no coinciden! -Email.user.email=Email no es valido diff --git a/src/main/resources/webSecurityConfig.xml b/src/main/resources/webSecurityConfig.xml deleted file mode 100644 index 0a05c24026..0000000000 --- a/src/main/resources/webSecurityConfig.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/META-INF/MANIFEST.MF b/src/main/webapp/META-INF/MANIFEST.MF deleted file mode 100644 index 5e9495128c..0000000000 --- a/src/main/webapp/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - diff --git a/src/main/webapp/WEB-INF/mvc-servlet.xml b/src/main/webapp/WEB-INF/mvc-servlet.xml deleted file mode 100644 index 94bd63e068..0000000000 --- a/src/main/webapp/WEB-INF/mvc-servlet.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/admin.jsp b/src/main/webapp/WEB-INF/view/admin.jsp deleted file mode 100644 index 7456f2ebae..0000000000 --- a/src/main/webapp/WEB-INF/view/admin.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - -
      -
      - - - - -

      - -

      -
      - "> "> -
      -
      - - diff --git a/src/main/webapp/WEB-INF/view/badUser.jsp b/src/main/webapp/WEB-INF/view/badUser.jsp deleted file mode 100644 index 348caac58a..0000000000 --- a/src/main/webapp/WEB-INF/view/badUser.jsp +++ /dev/null @@ -1,24 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - -" rel="stylesheet"> - <spring:message -code="label.badUser.title"></spring:message> - - -

      -
      - ${param.message} -

      -
      -"> - - - diff --git a/src/main/webapp/WEB-INF/view/console.jsp b/src/main/webapp/WEB-INF/view/console.jsp deleted file mode 100644 index da04eac57d..0000000000 --- a/src/main/webapp/WEB-INF/view/console.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - -" rel="stylesheet"> - - -
      -
      -

      This is the landing page for the admin

      - - This text is only visible to a user -
      -
      - - This text is only visible to an admin -
      -
      - "> "> -
      -
      - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/emailError.jsp b/src/main/webapp/WEB-INF/view/emailError.jsp deleted file mode 100644 index ca94dbdfb0..0000000000 --- a/src/main/webapp/WEB-INF/view/emailError.jsp +++ /dev/null @@ -1,19 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - -
      -
      -

      - -

      - -
      -
      - - - diff --git a/src/main/webapp/WEB-INF/view/expiredAccount.jsp b/src/main/webapp/WEB-INF/view/expiredAccount.jsp deleted file mode 100644 index a8f732c312..0000000000 --- a/src/main/webapp/WEB-INF/view/expiredAccount.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - -" rel="stylesheet"> - <spring:message code="label.pages.home.title"></spring:message> - - -

      - -

      -
      -"> - - - diff --git a/src/main/webapp/WEB-INF/view/home.jsp b/src/main/webapp/WEB-INF/view/home.jsp deleted file mode 100644 index 68819f09f4..0000000000 --- a/src/main/webapp/WEB-INF/view/home.jsp +++ /dev/null @@ -1,22 +0,0 @@ -<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -<%@ page session="true"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - -
      -
      -

      - -

      - "> -
      -
      - - - diff --git a/src/main/webapp/WEB-INF/view/homepage.jsp b/src/main/webapp/WEB-INF/view/homepage.jsp deleted file mode 100644 index 2d2942b44e..0000000000 --- a/src/main/webapp/WEB-INF/view/homepage.jsp +++ /dev/null @@ -1,35 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ page session="true"%> - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - - -
      - -
      - - -
      -
      - - - -
      -
      - ${param.user} - "> "> "> -
      -
      - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/invalidSession.jsp b/src/main/webapp/WEB-INF/view/invalidSession.jsp deleted file mode 100644 index 4e62083a52..0000000000 --- a/src/main/webapp/WEB-INF/view/invalidSession.jsp +++ /dev/null @@ -1,20 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - -
      -
      -

      - -

      - "> -
      -
      - - - diff --git a/src/main/webapp/WEB-INF/view/login.jsp b/src/main/webapp/WEB-INF/view/login.jsp deleted file mode 100644 index 7ffa78c777..0000000000 --- a/src/main/webapp/WEB-INF/view/login.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - -
      - -
      -
      - -
      - -
      -
      - -
      - - -
      -
      -
      -
      - - - -" rel="stylesheet"> -<spring:message code="label.pages.home.title"></spring:message> - - - -
      -
      -

      - -

      - - | -
      - - - - - - - - - - - - -
      />
      - -
      -
      Current Locale : ${pageContext.response.locale}
      "> -
      -
      - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/logout.jsp b/src/main/webapp/WEB-INF/view/logout.jsp deleted file mode 100644 index b83c558577..0000000000 --- a/src/main/webapp/WEB-INF/view/logout.jsp +++ /dev/null @@ -1,32 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> - - - -" rel="stylesheet"> - -
      - -
      -
      - -<spring:message code="label.pages.home.title"></spring:message> - - - -
      -
      - -
      - -
      -
      - "> -
      -
      - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/registration.jsp b/src/main/webapp/WEB-INF/view/registration.jsp deleted file mode 100644 index 0d6781a5db..0000000000 --- a/src/main/webapp/WEB-INF/view/registration.jsp +++ /dev/null @@ -1,64 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@ page session="false"%> - - -" rel="stylesheet"> - -<spring:message code="label.form.title"></spring:message> - - -
      -
      -

      - -

      - -
      - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
      "> -
      -
      - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp b/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp deleted file mode 100644 index cdbeea5169..0000000000 --- a/src/main/webapp/WEB-INF/view/regitrationConfirm.jsp +++ /dev/null @@ -1,22 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - - -" rel="stylesheet"> - -<spring:message code="label.pages.home.title"></spring:message> - - - - - "> - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/view/successRegister.jsp b/src/main/webapp/WEB-INF/view/successRegister.jsp deleted file mode 100644 index d6ae764618..0000000000 --- a/src/main/webapp/WEB-INF/view/successRegister.jsp +++ /dev/null @@ -1,27 +0,0 @@ -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="sec" - uri="http://www.springframework.org/security/tags"%> -<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> - -<%@ page session="true"%> - - - - -" rel="stylesheet"> - -<spring:message code="label.pages.home.title"></spring:message> - - -
      -
      -
      - -
      - "> -
      -
      - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 26ac5be1e0..0000000000 --- a/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.spring - - - - org.springframework.web.context.ContextLoaderListener - - - - mvc - org.springframework.web.servlet.DispatcherServlet - 1 - - - mvc - / - - - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - - - springSecurityFilterChain - /* - - - localizationFilter - org.springframework.web.filter.RequestContextFilter - - - localizationFilter - /* - - - \ No newline at end of file diff --git a/src/main/webapp/resources/bootstrap.css b/src/main/webapp/resources/bootstrap.css deleted file mode 100644 index a5b7ccc211..0000000000 --- a/src/main/webapp/resources/bootstrap.css +++ /dev/null @@ -1,6167 +0,0 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2013 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover, -a.muted:focus { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover, -a.text-success:focus { - color: #356635; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - padding-right: 5px; - padding-left: 5px; - *zoom: 1; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 30px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - font-size: 0; - white-space: nowrap; - vertical-align: middle; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success > td { - background-color: #dff0d8; -} - -.table tbody tr.error > td { - background-color: #f2dede; -} - -.table tbody tr.warning > td { - background-color: #fcf8e3; -} - -.table tbody tr.info > td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - width: 16px; - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #cccccc; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - 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(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - 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(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - 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(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - 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(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - 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(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - 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(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - 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(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - 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(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - content: ""; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - content: ""; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-title:empty { - display: none; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} - -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} - -.carousel-indicators .active { - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -}