diff --git a/algorithms-genetic/pom.xml b/algorithms-genetic/pom.xml index 1c9224aff2..00c9b88dfe 100644 --- a/algorithms-genetic/pom.xml +++ b/algorithms-genetic/pom.xml @@ -50,4 +50,4 @@ 1.11 - + \ No newline at end of file diff --git a/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/RouteFinder.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/RouteFinder.java index 35458093c5..f8b66fec88 100644 --- a/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/RouteFinder.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/RouteFinder.java @@ -8,6 +8,9 @@ import java.util.PriorityQueue; import java.util.Queue; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class RouteFinder { private final Graph graph; private final Scorer nextNodeScorer; @@ -28,11 +31,11 @@ public class RouteFinder { openSet.add(start); while (!openSet.isEmpty()) { - System.out.println("Open Set contains: " + openSet.stream().map(RouteNode::getCurrent).collect(Collectors.toSet())); + log.debug("Open Set contains: " + openSet.stream().map(RouteNode::getCurrent).collect(Collectors.toSet())); RouteNode next = openSet.poll(); - System.out.println("Looking at node: " + next); + log.debug("Looking at node: " + next); if (next.getCurrent().equals(to)) { - System.out.println("Found our destination!"); + log.debug("Found our destination!"); List route = new ArrayList<>(); RouteNode current = next; @@ -41,7 +44,7 @@ public class RouteFinder { current = allNodes.get(current.getPrevious()); } while (current != null); - System.out.println("Route: " + route); + log.debug("Route: " + route); return route; } @@ -55,7 +58,7 @@ public class RouteFinder { nextNode.setRouteScore(newScore); nextNode.setEstimatedScore(newScore + targetScorer.computeCost(connection, to)); openSet.add(nextNode); - System.out.println("Found a better route to node: " + nextNode); + log.debug("Found a better route to node: " + nextNode); } }); } diff --git a/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/underground/RouteFinderIntegrationTest.java b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/underground/RouteFinderIntegrationTest.java index 1e4ad56d94..aba7f149da 100644 --- a/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/underground/RouteFinderIntegrationTest.java +++ b/algorithms-miscellaneous-2/src/test/java/com/baeldung/algorithms/astar/underground/RouteFinderIntegrationTest.java @@ -1,5 +1,7 @@ package com.baeldung.algorithms.astar.underground; +import static org.assertj.core.api.Assertions.assertThat; + import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -10,9 +12,13 @@ import java.util.stream.Stream; import com.baeldung.algorithms.astar.Graph; import com.baeldung.algorithms.astar.RouteFinder; + +import lombok.extern.slf4j.Slf4j; + import org.junit.Before; import org.junit.Test; +@Slf4j public class RouteFinderIntegrationTest { private Graph underground; @@ -637,7 +643,8 @@ public class RouteFinderIntegrationTest { @Test public void findRoute() { List route = routeFinder.findRoute(underground.getNode("74"), underground.getNode("7")); + assertThat(route).size().isPositive(); - System.out.println(route.stream().map(Station::getName).collect(Collectors.toList())); + route.stream().map(Station::getName).collect(Collectors.toList()).forEach(station -> log.debug(station)); } } diff --git a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/prim/PrimUnitTest.java b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/prim/PrimUnitTest.java index 41e53fc9f2..fac3b3a81f 100644 --- a/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/prim/PrimUnitTest.java +++ b/algorithms-miscellaneous-5/src/test/java/com/baeldung/algorithms/prim/PrimUnitTest.java @@ -1,10 +1,10 @@ package com.baeldung.algorithms.prim; +import org.junit.Test; + import java.util.ArrayList; import java.util.List; -import org.junit.Test; - public class PrimUnitTest { @Test diff --git a/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java b/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java index d2cc723cf9..4623dbb7a4 100644 --- a/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java +++ b/algorithms-searching/src/main/java/com/baeldung/algorithms/dfs/Graph.java @@ -29,11 +29,13 @@ public class Graph { stack.push(start); while (!stack.isEmpty()) { int current = stack.pop(); - isVisited[current] = true; - visit(current); - for (int dest : adjVertices.get(current)) { - if (!isVisited[dest]) - stack.push(dest); + if(!isVisited[current]){ + isVisited[current] = true; + visit(current); + for (int dest : adjVertices.get(current)) { + if (!isVisited[dest]) + stack.push(dest); + } } } } diff --git a/algorithms-searching/src/main/java/com/baeldung/algorithms/suffixtree/SuffixTree.java b/algorithms-searching/src/main/java/com/baeldung/algorithms/suffixtree/SuffixTree.java index eb58c2bfab..b6b29ede78 100644 --- a/algorithms-searching/src/main/java/com/baeldung/algorithms/suffixtree/SuffixTree.java +++ b/algorithms-searching/src/main/java/com/baeldung/algorithms/suffixtree/SuffixTree.java @@ -8,7 +8,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SuffixTree { + private static final Logger LOGGER = LoggerFactory.getLogger(SuffixTree.class); + private static final String WORD_TERMINATION = "$"; private static final int POSITION_UNDEFINED = -1; private Node root; @@ -23,7 +25,7 @@ public class SuffixTree { } public List searchText(String pattern) { - LOGGER.info("Searching for pattern \"{}\"", pattern); + LOGGER.debug("Searching for pattern \"{}\"", pattern); List result = new ArrayList<>(); List nodes = getAllNodesInTraversePath(pattern, root, false); @@ -41,11 +43,11 @@ public class SuffixTree { } private void addSuffix(String suffix, int position) { - LOGGER.info(">>>>>>>>>>>> Adding new suffix {}", suffix); + LOGGER.debug(">>>>>>>>>>>> Adding new suffix {}", suffix); List nodes = getAllNodesInTraversePath(suffix, root, true); if (nodes.size() == 0) { addChildNode(root, suffix, position); - LOGGER.info("{}", printTree()); + LOGGER.debug("{}", printTree()); } else { Node lastNode = nodes.remove(nodes.size() - 1); String newText = suffix; @@ -58,7 +60,7 @@ public class SuffixTree { newText = newText.substring(existingSuffixUptoLastNode.length()); } extendNode(lastNode, newText, position); - LOGGER.info("{}", printTree()); + LOGGER.debug("{}", printTree()); } } diff --git a/algorithms-searching/src/test/java/com/baeldung/algorithms/dfs/GraphUnitTest.java b/algorithms-searching/src/test/java/com/baeldung/algorithms/dfs/GraphUnitTest.java index 715bb55fcb..7af25a85ca 100644 --- a/algorithms-searching/src/test/java/com/baeldung/algorithms/dfs/GraphUnitTest.java +++ b/algorithms-searching/src/test/java/com/baeldung/algorithms/dfs/GraphUnitTest.java @@ -2,7 +2,6 @@ package com.baeldung.algorithms.dfs; import java.util.List; -import com.baeldung.algorithms.dfs.Graph; import org.junit.Test; public class GraphUnitTest { diff --git a/algorithms-searching/src/test/java/com/baeldung/algorithms/quadtree/QuadTreeSearchUnitTest.java b/algorithms-searching/src/test/java/com/baeldung/algorithms/quadtree/QuadTreeSearchUnitTest.java index 0b58ae9f14..faf06ced31 100644 --- a/algorithms-searching/src/test/java/com/baeldung/algorithms/quadtree/QuadTreeSearchUnitTest.java +++ b/algorithms-searching/src/test/java/com/baeldung/algorithms/quadtree/QuadTreeSearchUnitTest.java @@ -10,7 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class QuadTreeSearchUnitTest { - + private static final Logger LOGGER = LoggerFactory.getLogger(QuadTreeSearchUnitTest.class); private static QuadTree quadTree; @@ -20,41 +20,41 @@ public class QuadTreeSearchUnitTest { Region area = new Region(0, 0, 400, 400); quadTree = new QuadTree(area); - float[][] points = new float[][] { { 21, 25 }, { 55, 53 }, { 70, 318 }, { 98, 302 }, + float[][] points = new float[][] { { 21, 25 }, { 55, 53 }, { 70, 318 }, { 98, 302 }, { 49, 229 }, { 135, 229 }, { 224, 292 }, { 206, 321 }, { 197, 258 }, { 245, 238 } }; for (int i = 0; i < points.length; i++) { Point point = new Point(points[i][0], points[i][1]); quadTree.addPoint(point); } - LOGGER.info("\n" + quadTree.printTree("")); - LOGGER.info("=============================================="); + LOGGER.debug("\n" + quadTree.printTree("")); + LOGGER.debug("=============================================="); } @Test public void givenQuadTree_whenSearchingForRange_thenReturn1MatchingItem() { Region searchArea = new Region(200, 200, 250, 250); List result = quadTree.search(searchArea, null, ""); - LOGGER.info(result.toString()); - LOGGER.info(quadTree.printSearchTraversePath()); - + LOGGER.debug(result.toString()); + LOGGER.debug(quadTree.printSearchTraversePath()); + Assert.assertEquals(1, result.size()); - Assert.assertArrayEquals(new float[] { 245, 238 }, + Assert.assertArrayEquals(new float[] { 245, 238 }, new float[]{result.get(0).getX(), result.get(0).getY() }, 0); } - + @Test public void givenQuadTree_whenSearchingForRange_thenReturn2MatchingItems() { Region searchArea = new Region(0, 0, 100, 100); List result = quadTree.search(searchArea, null, ""); - LOGGER.info(result.toString()); - LOGGER.info(quadTree.printSearchTraversePath()); - + LOGGER.debug(result.toString()); + LOGGER.debug(quadTree.printSearchTraversePath()); + Assert.assertEquals(2, result.size()); - Assert.assertArrayEquals(new float[] { 21, 25 }, + Assert.assertArrayEquals(new float[] { 21, 25 }, new float[]{result.get(0).getX(), result.get(0).getY() }, 0); - Assert.assertArrayEquals(new float[] { 55, 53 }, + Assert.assertArrayEquals(new float[] { 55, 53 }, new float[]{result.get(1).getX(), result.get(1).getY() }, 0); - + } } diff --git a/apache-kafka/README.md b/apache-kafka/README.md index 5e724f95b6..8a1d748482 100644 --- a/apache-kafka/README.md +++ b/apache-kafka/README.md @@ -3,7 +3,7 @@ This module contains articles about Apache Kafka. ### Relevant articles -- [Kafka Streams vs Kafka Consumer](https://www.baeldung.com/java-kafka-streams-vs-kafka-consumer) +- [Kafka Streams vs. Kafka Consumer](https://www.baeldung.com/java-kafka-streams-vs-kafka-consumer) - [Kafka Topic Creation Using Java](https://www.baeldung.com/kafka-topic-creation) - [Using Kafka MockConsumer](https://www.baeldung.com/kafka-mockconsumer) - [Using Kafka MockProducer](https://www.baeldung.com/kafka-mockproducer) @@ -12,7 +12,8 @@ This module contains articles about Apache Kafka. - [Kafka Connect Example with MQTT and MongoDB](https://www.baeldung.com/kafka-connect-mqtt-mongodb) - [Building a Data Pipeline with Flink and Kafka](https://www.baeldung.com/kafka-flink-data-pipeline) - [Exactly Once Processing in Kafka with Java](https://www.baeldung.com/kafka-exactly-once) +- [Custom Serializers in Apache Kafka](https://www.baeldung.com/kafka-custom-serializer) ##### Building the project -You can build the project from the command line using: *mvn clean install*, or in an IDE. \ No newline at end of file +You can build the project from the command line using: *mvn clean install*, or in an IDE. diff --git a/apache-kafka/pom.xml b/apache-kafka/pom.xml index cda91ed92f..8003743f95 100644 --- a/apache-kafka/pom.xml +++ b/apache-kafka/pom.xml @@ -161,6 +161,12 @@ spark-cassandra-connector-java_2.11 ${com.datastax.spark.spark-cassandra-connector-java.version} + + org.projectlombok + lombok + ${lombok.version} + provided + @@ -175,6 +181,7 @@ 0.8.1-spark3.0-s_2.12 2.5.2 1.6.0-M1 + 1.18.20 \ No newline at end of file diff --git a/apache-kafka/src/main/java/com/baeldung/kafka/dto/MessageDto.java b/apache-kafka/src/main/java/com/baeldung/kafka/dto/MessageDto.java new file mode 100644 index 0000000000..7f9e206358 --- /dev/null +++ b/apache-kafka/src/main/java/com/baeldung/kafka/dto/MessageDto.java @@ -0,0 +1,15 @@ +package com.baeldung.kafka.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MessageDto { + private String message; + private String version; +} diff --git a/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomDeserializer.java b/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomDeserializer.java new file mode 100644 index 0000000000..ee6e79dcd1 --- /dev/null +++ b/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomDeserializer.java @@ -0,0 +1,35 @@ +package com.baeldung.kafka.serdes; + +import com.baeldung.kafka.dto.MessageDto; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.kafka.common.errors.SerializationException; +import org.apache.kafka.common.serialization.Deserializer; + +import java.util.Map; + +public class CustomDeserializer implements Deserializer { + + private ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void configure(Map configs, boolean isKey) { + } + + @Override + public MessageDto deserialize(String topic, byte[] data) { + try { + if (data == null){ + System.out.println("Null received at deserializing"); + return null; + } + System.out.println("Deserializing..."); + return objectMapper.readValue(new String(data, "UTF-8"), MessageDto.class); + } catch (Exception e) { + throw new SerializationException("Error when deserializing byte[] to MessageDto"); + } + } + + @Override + public void close() { + } +} diff --git a/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomSerializer.java b/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomSerializer.java new file mode 100644 index 0000000000..a414ad8e23 --- /dev/null +++ b/apache-kafka/src/main/java/com/baeldung/kafka/serdes/CustomSerializer.java @@ -0,0 +1,34 @@ +package com.baeldung.kafka.serdes; + +import com.baeldung.kafka.dto.MessageDto; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.kafka.common.errors.SerializationException; +import org.apache.kafka.common.serialization.Serializer; + +import java.util.Map; + +public class CustomSerializer implements Serializer { + private final ObjectMapper objectMapper = new ObjectMapper(); + + @Override + public void configure(Map configs, boolean isKey) { + } + + @Override + public byte[] serialize(String topic, MessageDto data) { + try { + if (data == null){ + System.out.println("Null received at serializing"); + return null; + } + System.out.println("Serializing..."); + return objectMapper.writeValueAsBytes(data); + } catch (Exception e) { + throw new SerializationException("Error when serializing MessageDto to byte[]"); + } + } + + @Override + public void close() { + } +} diff --git a/apache-kafka/src/test/java/com/baeldung/kafka/serdes/KafkaSerDesLiveTest.java b/apache-kafka/src/test/java/com/baeldung/kafka/serdes/KafkaSerDesLiveTest.java new file mode 100644 index 0000000000..67fff12f5e --- /dev/null +++ b/apache-kafka/src/test/java/com/baeldung/kafka/serdes/KafkaSerDesLiveTest.java @@ -0,0 +1,92 @@ +package com.baeldung.kafka.serdes; + +import com.baeldung.kafka.dto.MessageDto; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Test; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.utility.DockerImageName; + +import java.time.Duration; +import java.util.Arrays; +import java.util.Properties; +import java.util.concurrent.atomic.AtomicReference; + +import static org.junit.Assert.assertEquals; + +public class KafkaSerDesLiveTest { + private static final String CONSUMER_APP_ID = "consumer_id"; + private static final String CONSUMER_GROUP_ID = "group_id"; + + @ClassRule + public static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.4.3")); + private final String TOPIC = "mytopic"; + + private static KafkaConsumer createKafkaConsumer() { + + Properties props = new Properties(); + props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers()); + props.put(ConsumerConfig.CLIENT_ID_CONFIG, CONSUMER_APP_ID); + props.put(ConsumerConfig.GROUP_ID_CONFIG, CONSUMER_GROUP_ID); + props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); + props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); + props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "com.baeldung.kafka.serdes.CustomDeserializer"); + + return new KafkaConsumer<>(props); + + } + + private static KafkaProducer createKafkaProducer() { + + Properties props = new Properties(); + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers()); + props.put(ProducerConfig.CLIENT_ID_CONFIG, CONSUMER_APP_ID); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer"); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "com.baeldung.kafka.serdes.CustomSerializer"); + + return new KafkaProducer(props); + + } + + @Before + public void setUp() { + } + + @Test + public void givenKafkaClientShouldSerializeAndDeserialize() throws InterruptedException { + + MessageDto msgProd = MessageDto.builder().message("test").version("1.0").build(); + + KafkaProducer producer = createKafkaProducer(); + producer.send(new ProducerRecord(TOPIC, "1", msgProd)); + System.out.println("Message sent " + msgProd); + producer.close(); + + Thread.sleep(2000); + + AtomicReference msgCons = new AtomicReference<>(); + + KafkaConsumer consumer = createKafkaConsumer(); + consumer.subscribe(Arrays.asList(TOPIC)); + + ConsumerRecords records = consumer.poll(Duration.ofSeconds(1)); + records.forEach(record -> { + msgCons.set(record.value()); + System.out.println("Message received " + record.value()); + }); + + consumer.close(); + + assertEquals(msgProd, msgCons.get()); + + } + +} + + diff --git a/apache-libraries/pom.xml b/apache-libraries/pom.xml index ded10b939f..b4cf11b07d 100644 --- a/apache-libraries/pom.xml +++ b/apache-libraries/pom.xml @@ -133,6 +133,11 @@ jackson-databind ${jackson.version} + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + com.jayway.awaitility awaitility @@ -196,7 +201,6 @@ 1.8 1.8 1.8.2 - 1.7.25 2.19.0 3.9.0 1.1.2 diff --git a/apache-libraries/src/main/resources/log4j2.xml b/apache-libraries/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..d1ea5173fa --- /dev/null +++ b/apache-libraries/src/main/resources/log4j2.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apache-libraries/src/main/resources/models/en-lemmatizer.dict b/apache-libraries/src/main/resources/models/en-lemmatizer.dict new file mode 100644 index 0000000000..7f17fe829f --- /dev/null +++ b/apache-libraries/src/main/resources/models/en-lemmatizer.dict @@ -0,0 +1,3181 @@ +a DT a +a-horizon NN a-horizon +a-okay JJ a-okay +a-one JJ a-one +a-year JJ a-year +a.k.a. RB a.k.a. +contents NNS content +contents VBZ content +hairnets NNS hairnet +hairpiece NN hairpiece +hairpieces NNS hairpiece +hairpin NN hairpin +hairpins NNS hairpin +hairs NNS hair +hairsbreadth NN hairsbreadth +hairsbreadths NNS hairsbreadth +hairsplitter NN hairsplitter +hairsplitters NNS hairsplitter +hairsplitting JJ hairsplitting +hairsplitting NN hairsplitting +hairsplittings NNS hairsplitting +hairspray NN hairspray +hairsprays NNS hairspray +hairspring NN hairspring +hairsprings NNS hairspring +hairstreak NN hairstreak +hairstreaks NNS hairstreak +hairstyle NN hairstyle +hairstyles NNS hairstyle +hairstyling NN hairstyling +hairstylings NNS hairstyling +hairstylist NN hairstylist +hairstylists NNS hairstylist +hairtail NN hairtail +hairtonic NN hairtonic +hairtrigger NNS hair-trigger +hairweaver NN hairweaver +hairweavers NNS hairweaver +hairweaving NN hairweaving +hairweavings NNS hairweaving +hairwork NN hairwork +hairworks NNS hairwork +hairworm NN hairworm +hairworms NNS hairworm +hairy JJ hairy +hairy-faced JJ hairy-faced +haith NN haith +haiths NNS haith +haj NN haj +hajes NNS haj +hajes NNS hajis +haji NN haji +hajis NN hajis +hajis NNS haji +hajj NN hajj +hajjes NNS hajj +hajjes NNS hajjis +hajji NN hajji +hajjis NN hajjis +hajjis NNS hajji +haka NN haka +hakam NN hakam +hakams NNS hakam +hakas NNS haka +hake NN hake +hake NNS hake +hakea NN hakea +hakeem NN hakeem +hakeems NNS hakeem +hakes NNS hake +hakim NN hakim +hakims NNS hakim +hakka NN hakka +haku NN haku +hakus NNS haku +halacha NN halacha +halachas NNS halacha +halachic JJ halachic +halachist NN halachist +halachists NNS halachist +halakah NN halakah +halakahs NNS halakah +halakha NN halakha +halakhah NN halakhah +halakhahs NNS halakhah +halakhas NNS halakha +halakhist NN halakhist +halakhists NNS halakhist +halakist NN halakist +halakists NNS halakist +halal JJ halal +halal NN halal +halala NN halala +halalah NN halalah +halalahs NNS halalah +halalas NNS halala +halalling NN halalling +halalling NNS halalling +halals NNS halal +halation NNN halation +halations NNS halation +halavah NN halavah +halavahs NNS halavah +halazone NN halazone +halazones NNS halazone +halberd NN halberd +halberdier NN halberdier +halberdiers NNS halberdier +halberds NNS halberd +halbert NN halbert +halberts NNS halbert +halchidhoma NN halchidhoma +halcyon JJ halcyon +halcyon NN halcyon +haldea NN haldea +hale JJ hale +hale VB hale +hale VBP hale +haled VBD hale +haled VBN hale +haleness NN haleness +halenesses NNS haleness +halenia NN halenia +haler NN haler +haler JJR hale +halers NNS haler +hales VBZ hale +halesia NN halesia +halest JJS hale +half DT half +half NN half +half PDT half +half-American JJ half-American +half-Americanized JJ half-Americanized +half-Anglicized JJ half-Anglicized +half-Aristotelian JJ half-Aristotelian +half-Asian JJ half-Asian +half-Asiatic JJ half-Asiatic +half-Christian JJ half-Christian +half-Confederate JJ half-Confederate +half-Creole JJ half-Creole +half-Dacron JJ half-Dacron +half-Elizabethan JJ half-Elizabethan +half-English JJ half-English +half-French JJ half-French +half-German JJ half-German +half-Greek JJ half-Greek +half-Hessian JJ half-Hessian +half-Irish JJ half-Irish +half-Italian JJ half-Italian +half-Latinized JJ half-Latinized +half-Mexican JJ half-Mexican +half-Mohammedan JJ half-Mohammedan +half-Moslem JJ half-Moslem +half-Muhammadan JJ half-Muhammadan +half-Muslim JJ half-Muslim +half-Russian JJ half-Russian +half-Scottish JJ half-Scottish +half-Semitic JJ half-Semitic +half-Shakespearean JJ half-Shakespearean +half-Spanish JJ half-Spanish +half-a-crown NN half-a-crown +half-a-dollar NN half-a-dollar +half-abandoned JJ half-abandoned +half-accustomed JJ half-accustomed +half-acquainted JJ half-acquainted +half-acquiescent JJ half-acquiescent +half-acquiescently RB half-acquiescently +half-acre NN half-acre +half-addressed JJ half-addressed +half-admiring JJ half-admiring +half-admiringly RB half-admiringly +half-admitted JJ half-admitted +half-admittedly RB half-admittedly +half-adream JJ half-adream +half-affianced JJ half-affianced +half-afloat JJ half-afloat +half-afraid JJ half-afraid +half-agreed JJ half-agreed +half-alike JJ half-alike +half-alive JJ half-alive +half-altered JJ half-altered +half-and-half JJ half-and-half +half-and-half NN half-and-half +half-angrily RB half-angrily +half-angry JJ half-angry +half-annoyed JJ half-annoyed +half-annoying JJ half-annoying +half-annoyingly RB half-annoyingly +half-armed JJ half-armed +half-ashamed JJ half-ashamed +half-ashamedly RB half-ashamedly +half-asleep JJ half-asleep +half-assed JJ half-assed +half-awake JJ half-awake +harns NNS harn +haroseth NN haroseth +harp NN harp +harp VB harp +harp VBP harp +harped VBD harp +harped VBN harp +harper NN harper +harpers NNS harper +harpia NN harpia +harpies NNS harpy +harpin NN harpin +harping NNN harping +harping VBG harp +harpings NNS harping +harpins NNS harpin +harpist NN harpist +harpists NNS harpist +harpless JJ harpless +harplike JJ harplike +harpoon NN harpoon +harpoon VB harpoon +harpoon VBP harpoon +harpooned VBD harpoon +harpooned VBN harpoon +harpooneer NN harpooneer +harpooneers NNS harpooneer +harpooner NN harpooner +harpooners NNS harpooner +harpooning VBG harpoon +harpoonlike JJ harpoonlike +harpoons NNS harpoon +harpoons VBZ harpoon +harps NNS harp +harps VBZ harp +harpsichord NN harpsichord +harpsichordist NN harpsichordist +harpsichordists NNS harpsichordist +harpsichords NNS harpsichord +harpulla NN harpulla +harpullia NN harpullia +harpwise RB harpwise +harpy NN harpy +harpylike JJ harpylike +harquebus NN harquebus +harquebuses NNS harquebus +harquebusier NN harquebusier +harquebusiers NNS harquebusier +harridan NN harridan +harridans NNS harridan +harried VBD harry +harried VBN harry +harrier NN harrier +harriers NNS harrier +harries VBZ harry +harrisia NN harrisia +harrow NN harrow +harrow VB harrow +harrow VBP harrow +harrowed VBD harrow +harrowed VBN harrow +harrower NN harrower +harrowers NNS harrower +harrowing JJ harrowing +harrowing VBG harrow +harrowingly RB harrowingly +harrowment NN harrowment +harrows NNS harrow +harrows VBZ harrow +harry VB harry +harry VBP harry +harrying VBG harry +harsh JJ harsh +harshen VB harshen +harshen VBP harshen +harshened VBD harshen +harshened VBN harshen +harshening VBG harshen +harshens VBZ harshen +harsher JJR harsh +harshest JJS harsh +harshly RB harshly +harshness NN harshness +harshnesses NNS harshness +harslet NN harslet +harslets NNS harslet +hart NN hart +hart NNS hart +hartal NN hartal +hartals NNS hartal +hartebeest NN hartebeest +hartebeests NNS hartebeest +harts NNS hart +hartshorn NN hartshorn +hartshorns NNS hartshorn +harum-scarumness NN harum-scarumness +haruspex NN haruspex +haruspical JJ haruspical +haruspication NNN haruspication +haruspications NNS haruspication +haruspices NNS haruspex +haruspicies NNS haruspicy +haruspicy NNN haruspicy +harvest NN harvest +harvest VB harvest +harvest VBP harvest +harvest-lice NN harvest-lice +harvestabilities NNS harvestability +harvestability NNN harvestability +harvestable JJ harvestable +harvested VBD harvest +harvested VBN harvest +harvester NN harvester +harvesters NNS harvester +harvestfish NN harvestfish +harvestfish NNS harvestfish +harvesting NNN harvesting +harvesting VBG harvest +harvestless JJ harvestless +harvestman NN harvestman +harvestmen NNS harvestman +harvests NNS harvest +harvests VBZ harvest +harvesttime NN harvesttime +harvesttimes NNS harvesttime +has VBZ have +has-been NN has-been +has-beens NNS has-been +hasenpfeffer NN hasenpfeffer +hasenpfeffers NNS hasenpfeffer +hash NN hash +hash VB hash +hash VBP hash +hash-slinger NN hash-slinger +hashed VBD hash +hashed VBN hash +hasheesh NN hasheesh +hasheeshes NNS hasheesh +hasher NN hasher +hashes NNS hash +hashes VBZ hash +hashhead NN hashhead +hashheads NNS hashhead +hashing NNN hashing +hashing VBG hash +hashish NN hashish +hashishes NNS hashish +hashmark NN hashmark +hask JJ hask +hask NN hask +haslet NN haslet +haslets NNS haslet +haslock NN haslock +hasn MD have +hasn VBZ have +hasp NN hasp +hasps NNS hasp +hassar NN hassar +hassars NNS hassar +hassel NN hassel +hassels NNS hassel +hassenpfeffer NN hassenpfeffer +hassium NN hassium +hassiums NNS hassium +hassle NNN hassle +hassle VB hassle +hassle VBP hassle +hassled VBD hassle +hassled VBN hassle +hasslefree JJ hasslefree +hassles NNS hassle +hassles VBZ hassle +hassling VBG hassle +hassock NN hassock +hassocks NNS hassock +hast VBZ have +hastate JJ hastate +hastately RB hastately +haste NNN haste +haste VB haste +haste VBP haste +hasted VBD haste +hasted VBN haste +hasteful JJ hasteful +hastefully RB hastefully +hasteless JJ hasteless +hastelessness NN hastelessness +hasten VB hasten +hasten VBP hasten +hastened VBD hasten +hastened VBN hasten +hastener NN hastener +hasteners NNS hastener +hastening JJ hastening +hastening VBG hasten +hastens VBZ hasten +hastes NNS haste +hastes VBZ haste +hastier JJR hasty +hastiest JJS hasty +hastily RB hastily +hastiness NN hastiness +hastinesses NNS hastiness +hasting NNN hasting +hasting VBG haste +hastings NNS hasting +hasty JJ hasty +hat NN hat +hat VB hat +hat VBP hat +hatable JJ hatable +hatband NN hatband +hatbands NNS hatband +hatbox NN hatbox +hatboxes NNS hatbox +hatbrush NN hatbrush +hatbrushes NNS hatbrush +hatch NN hatch +hatch VB hatch +hatch VBP hatch +hatchabilities NNS hatchability +hatchability NNN hatchability +hatchable JJ hatchable +hatchback NN hatchback +hatchbacks NNS hatchback +hatcheck JJ hatcheck +hatcheck NN hatcheck +hatchecks NNS hatcheck +hatched JJ hatched +hatched VBD hatch +hatched VBN hatch +hatchel VB hatchel +hatchel VBP hatchel +hatcheled VBD hatchel +hatcheled VBN hatchel +hatcheling VBG hatchel +hatchelled VBD hatchel +hatchelled VBN hatchel +hatchelling NNN hatchelling +hatchelling NNS hatchelling +hatchelling VBG hatchel +hatchels VBZ hatchel +hatcher NN hatcher +hatcheries NNS hatchery +hatchers NNS hatcher +hatchery NN hatchery +hatches NNS hatch +hatches VBZ hatch +hatchet NN hatchet +hatchetfaced JJ hatchetfaced +hatchetfish NN hatchetfish +hatchetlike JJ hatchetlike +hatchetman NN hatchetman +hatchetmen NNS hatchetman +hatchets NNS hatchet +hatchettite NN hatchettite +hatching JJ hatching +hatching NN hatching +hatching VBG hatch +hatchings NNS hatching +hatchling NN hatchling +hatchling NNS hatchling +hatchment NN hatchment +hatchments NNS hatchment +hatchway NN hatchway +hatchways NNS hatchway +hate NN hate +hate VB hate +hate VBP hate +hateable JJ hateable +hated VBD hate +hated VBN hate +hateful JJ hateful +hatefully RB hatefully +hatefulness NN hatefulness +hatefulnesses NNS hatefulness +hateless JJ hateless +hatemonger NN hatemonger +hatemongering NN hatemongering +hatemongers NNS hatemonger +hater NN hater +haters NNS hater +hates NNS hate +hates VBZ hate +hatful NN hatful +hatfuls NNS hatful +hath VBZ have +hathpace NN hathpace +hating VBG hate +hatiora NN hatiora +hatless JJ hatless +hatlessness NN hatlessness +hatlike JJ hatlike +hatmaker NN hatmaker +hatmakers NNS hatmaker +hatpin NN hatpin +hatpins NNS hatpin +hatrack NN hatrack +hatracks NNS hatrack +hatred NNN hatred +hatreds NNS hatred +hats NNS hat +hats VBZ hat +hatstand NN hatstand +hatstands NNS hatstand +hatted VBD hat +hatted VBN hat +hatter NN hatter +hatteria NN hatteria +hatterias NNS hatteria +hatters NNS hatter +hatting NNN hatting +hatting VBG hat +hattings NNS hatting +hattock NN hattock +hattocks NNS hattock +haubergeon NN haubergeon +haubergeons NNS haubergeon +hauberk NN hauberk +hauberks NNS hauberk +haud NN haud +hauds NNS haud +hauerite NN hauerite +haugh NN haugh +haughs NNS haugh +haughtier JJR haughty +haughtiest JJS haughty +haughtily RB haughtily +haughtiness NN haughtiness +haughtinesses NNS haughtiness +haughty JJ haughty +haul NN haul +haul VB haul +haul VBP haul +haulage NN haulage +haulages NNS haulage +haulback NN haulback +hauld NN hauld +haulds NNS hauld +hauled VBD haul +hauled VBN haul +hauler NN hauler +haulers NNS hauler +haulier NN haulier +hauliers NNS haulier +hauling NNN hauling +hauling VBG haul +haulm NN haulm +haulmier JJR haulmy +haulmiest JJS haulmy +haulms NNS haulm +haulmy JJ haulmy +hauls NNS haul +hauls VBZ haul +haulyard NN haulyard +haulyards NNS haulyard +haunch NN haunch +haunched JJ haunched +haunches NNS haunch +haunchless JJ haunchless +haunt NN haunt +haunt VB haunt +haunt VBP haunt +haunted JJ haunted +haunted VBD haunt +haunted VBN haunt +haunter NN haunter +haunters NNS haunter +haunting JJ haunting +haunting NNN haunting +haunting VBG haunt +hauntingly RB hauntingly +hauntings NNS haunting +haunts NNS haunt +haunts VBZ haunt +hauriant JJ hauriant +hausen NN hausen +hausens NNS hausen +hausfrau NN hausfrau +hausfraus NNS hausfrau +hausmannite NN hausmannite +haussa NN haussa +haust NN haust +haustella NNS haustellum +haustellate JJ haustellate +haustellum NN haustellum +haustoria NNS haustorium +haustorial JJ haustorial +haustorium NN haustorium +hautbois NN hautbois +hautboy NN hautboy +hautboyist NN hautboyist +hautboys NNS hautboy +haute-piece NN haute-piece +hauteur NN hauteur +hauteurs NNS hauteur +hav NN hav +havarti NN havarti +havartis NNS havarti +havasupai NN havasupai +havdalah NN havdalah +havdalahs NNS havdalah +have NN have +have VB have +have VBP have +have-not NN have-not +have-nots NNS have-not +havelock NN havelock +havelocks NNS havelock +haven NN haven +haven MD have +haven VBP have +havenless JJ havenless +havens NNS haven +havenward RB havenward +haveour NN haveour +haveours NNS haveour +haverel NN haverel +haverels NNS haverel +havering NN havering +haverings NNS havering +havers UH havers +haversack NN haversack +haversacks NNS haversack +haversine NN haversine +haversines NNS haversine +haves NNS have +havildar NN havildar +havildars NNS havildar +having NNN having +having VBG have +havings NNS having +havior NN havior +haviors NNS havior +haviour NN haviour +haviours NNS haviour +havoc NN havoc +havocker NN havocker +havockers NNS havocker +havocs NNS havoc +haw NN haw +haw UH haw +haw VB haw +haw VBP haw +haw-haw NN haw-haw +haw-haw UH haw-haw +hawala NN hawala +hawbuck NN hawbuck +hawbuck NNS hawbuck +hawbucks NNS hawbuck +hawed VBD haw +hawed VBN haw +hawfinch NN hawfinch +hawfinches NNS hawfinch +hawing VBG haw +hawk NN hawk +hawk VB hawk +hawk VBP hawk +hawk-eyed JJ hawk-eyed +hawkbell NN hawkbell +hawkbells NNS hawkbell +hawkbill NN hawkbill +hawkbills NNS hawkbill +hawkbit NN hawkbit +hawkbits NNS hawkbit +hawked VBD hawk +hawked VBN hawk +hawker NN hawker +hawkers NNS hawker +hawkey NN hawkey +hawkeys NNS hawkey +hawkie NN hawkie +hawkies NNS hawkie +hawkies NNS hawky +hawking NNN hawking +hawking VBG hawk +hawkings NNS hawking +hawkish JJ hawkish +hawkishness NN hawkishness +hawkishnesses NNS hawkishness +hawklike JJ hawklike +hawkmoth NN hawkmoth +illmanneredness NN illmanneredness +illnature NN illnature +illness NNN illness +illnesses NNS illness +lactary JJ lactary +macroscale NN macroscale +mugginess NN mugginess +mugginesses NNS mugginess +mugging NNN mugging +mugging VBG mug +nabe NN nabe +nabes NNS nabe +nabes NNS nabis +nabis NN nabis +nabk NN nabk +nabks NNS nabk +nabla NN nabla +nablas NNS nabla +nabob NN nabob +naboberies NNS nabobery +nabobery NN nabobery +nabobess NN nabobess +nabobesses NNS nabobess +nabobical JJ nabobical +nabobically RB nabobically +nabobish JJ nabobish +nabobishly RB nabobishly +nabobism NNN nabobism +nabobisms NNS nabobism +nabobs NNS nabob +nabobship NN nabobship +naboom NN naboom +nabs NN nabs +nabs VBZ nab +nabses NNS nabs +nabu NN nabu +nabumetone NN nabumetone +nacarat NN nacarat +nacarats NNS nacarat +nacelle NN nacelle +nacelles NNS nacelle +nach NN nach +nache NN nache +naches NNS nache +naches NNS nach +nacho NN nacho +nachos NNS nacho +nacimiento NN nacimiento +nacket NN nacket +nackets NNS nacket +nacre NN nacre +nacred JJ nacred +nacreous JJ nacreous +nacres NNS nacre +nada NN nada +nadas NNS nada +nadir NN nadir +nadiral JJ nadiral +nadirs NNS nadir +nadolol NN nadolol +nae JJ nae +naemorhedus NN naemorhedus +naething NN naething +naethings NNS naething +naeve NN naeve +naeves NNS naeve +naevi NNS naevus +naevoid JJ naevoid +naevus NN naevus +nafcillin NN nafcillin +naffness NN naffness +nag NN nag +nag VB nag +nag VBP nag +naga NN naga +nagami NN nagami +nagana NN nagana +naganas NNS nagana +nagas NNS naga +nageia NN nageia +nagged VBD nag +nagged VBN nag +nagger NN nagger +naggers NNS nagger +naggier JJR naggy +naggiest JJS naggy +nagging JJ nagging +nagging VBG nag +naggingly RB naggingly +naggingness NN naggingness +naggish JJ naggish +naggy JJ naggy +nagi NN nagi +nagor NN nagor +nagors NNS nagor +nags NNS nag +nags VBZ nag +nagual NN nagual +nahal NN nahal +nahals NNS nahal +naiad NN naiad +naiadaceae NN naiadaceae +naiadales NN naiadales +naiades NNS naiad +naiads NNS naiad +naiant JJ naiant +naias NN naias +naif JJ naif +naif NN naif +naifs NNS naif +naik NN naik +naiki NN naiki +naiks NNS naik +nail NN nail +nail VB nail +nail VBP nail +nail-biting NNN nail-biting +nail-sick JJ nail-sick +nailbitingly RB nailbitingly +nailbrush NN nailbrush +nailbrushes NNS nailbrush +nailed VBD nail +nailed VBN nail +nailer NN nailer +naileries NNS nailery +nailers NNS nailer +nailery NN nailery +nailfile NN nailfile +nailfold NN nailfold +nailfolds NNS nailfold +nailhead NN nailhead +nailheads NNS nailhead +nailing NNN nailing +nailing VBG nail +nailings NNS nailing +nailless JJ nailless +naillike JJ naillike +nailrod NN nailrod +nails NNS nail +nails VBZ nail +nailset NN nailset +nailsets NNS nailset +nailsickness NN nailsickness +nainsook NN nainsook +nainsooks NNS nainsook +naira NN naira +nairas NNS naira +naiskos NN naiskos +naissant JJ naissant +naive JJ naive +naive NN naive +naively RB naively +naiveness NN naiveness +naivenesses NNS naiveness +naiver JJR naive +naives NNS naive +naives NNS naif +naivest JJS naive +naivete NN naivete +naivetes NNS naivete +naiveties NNS naivety +naivetivet NN naivetivet +naivety NN naivety +naja NN naja +najadaceae NN najadaceae +najas NN najas +naked JJ naked +nakeder JJR naked +nakedest JJS naked +nakedly RB nakedly +nakedness NN nakedness +nakednesses NNS nakedness +nakedwood NN nakedwood +naker NN naker +nakers NNS naker +nala NN nala +nalas NNS nala +naled NN naled +naleds NNS naled +nalfon NN nalfon +nalidixic JJ nalidixic +nallah NN nallah +nallahs NNS nallah +nalorphine NN nalorphine +nalorphines NNS nalorphine +naloxone NN naloxone +naloxones NNS naloxone +naltrexone NN naltrexone +naltrexones NNS naltrexone +namability NNN namability +namaskar NN namaskar +namaskars NNS namaskar +namaste NN namaste +namastes NNS namaste +namaycush NN namaycush +namby-pambiness NN namby-pambiness +namby-pamby JJ namby-pamby +namby-pamby NN namby-pamby +namby-pambyish JJ namby-pambyish +namby-pambyism NNN namby-pambyism +name NN name +name VB name +name VBP name +name-caller NN name-caller +name-calling NNN name-calling +name-dropper NN name-dropper +name-dropping NN name-dropping +nameability NNN nameability +nameable JJ nameable +named VBD name +named VBN name +namedrop VB namedrop +namedrop VBP namedrop +namedropped VBD namedrop +namedropped VBN namedrop +namedropper NN namedropper +namedroppers NNS namedropper +namedropping NN namedropping +namedropping VBG namedrop +namedroppings NNS namedropping +namedrops VBZ namedrop +nameko NN nameko +nameless JJ nameless +namelessly RB namelessly +namelessness NN namelessness +namelessnesses NNS namelessness +namely RB namely +nameplate NN nameplate +nameplates NNS nameplate +namer NN namer +namers NNS namer +names NNS name +names VBZ name +namesake NN namesake +namesakes NNS namesake +nametag NN nametag +nametags NNS nametag +nametape NN nametape +nametapes NNS nametape +namibian JJ namibian +naming NNN naming +naming VBG name +namings NNS naming +namma NN namma +nammad NN nammad +namtaru NN namtaru +nan NN nan +nana NN nana +nanako NN nanako +nanas NNS nana +nance NN nance +nancere NN nancere +nances NNS nance +nancies NNS nancy +nancy NN nancy +nancys NNS nancy +nandin NN nandin +nandina NN nandina +nandinas NNS nandina +nandine NN nandine +nandines NNS nandine +nandins NNS nandin +nandoo NN nandoo +nandoos NNS nandoo +nandrolone NN nandrolone +nandu NN nandu +nanism NNN nanism +nanisms NNS nanism +nanjing NN nanjing +nankeen NN nankeen +nankeens NNS nankeen +nankin NN nankin +nankins NNS nankin +nanna NN nanna +nannas NNS nanna +nannies NNS nanny +nannofossil NN nannofossil +nannofossils NNS nannofossil +nannoplankton NN nannoplankton +nannoplanktons NNS nannoplankton +nanny NN nanny +nanny-goat NN nanny-goat +nannyberry NN nannyberry +nannygai NN nannygai +nannygais NNS nannygai +nanobot NN nanobot +nanobots NNS nanobot +nanocephalic JJ nanocephalic +nanocephaly NN nanocephaly +nanocurie NN nanocurie +nanoelectronic JJ nanoelectronic +nanofossil NN nanofossil +nanofossils NNS nanofossil +nanogram NN nanogram +nanograms NNS nanogram +nanoid JJ nanoid +nanometer NN nanometer +nanometers NNS nanometer +nanometre NN nanometre +nanometres NNS nanometre +nanomia NN nanomia +nanoplankton NN nanoplankton +nanoplanktons NNS nanoplankton +nanosecond NN nanosecond +nanoseconds NNS nanosecond +nanotechnologies NNS nanotechnology +nanotechnology NNN nanotechnology +nanotesla NN nanotesla +nanoteslas NNS nanotesla +nanowatt NN nanowatt +nanowatts NNS nanowatt +nans NNS nan +nantua NN nantua +naos NN naos +naoses NNS naos +naovely RB naovely +nap NNN nap +nap VB nap +nap VBP nap +napa NN napa +napaea NN napaea +napalm NN napalm +napalm VB napalm +napalm VBP napalm +napalmed VBD napalm +napalmed VBN napalm +napalming VBG napalm +napalms NNS napalm +napalms VBZ napalm +napas NNS napa +nape NN nape +napea NN napea +naperies NNS napery +napery NN napery +napes NNS nape +naphtha NN naphtha +naphthalene NN naphthalene +naphthalenes NNS naphthalene +naphthalic JJ naphthalic +naphthalin NN naphthalin +naphthaline NN naphthaline +naphthalines NNS naphthaline +naphthalins NNS naphthalin +naphthas NNS naphtha +naphthene NN naphthene +naphthenes NNS naphthene +naphthenic JJ naphthenic +naphthol NN naphthol +naphthols NNS naphthol +naphthoquinone NN naphthoquinone +naphthous JJ naphthous +naphthyl NN naphthyl +naphthylamine NN naphthylamine +naphthylamines NNS naphthylamine +naphthyls NNS naphthyl +naphtol NN naphtol +naphtols NNS naphtol +napiform JJ napiform +napkin NN napkin +napkins NNS napkin +napless JJ napless +naplessness NN naplessness +napoleon NN napoleon +napoleons NNS napoleon +nappa NN nappa +nappas NNS nappa +nappe NN nappe +napped VBD nap +napped VBN nap +napper NN napper +nappers NNS napper +nappie JJ nappie +nappie NN nappie +nappier JJR nappie +nappier JJR nappy +nappies NNS nappie +nappies NNS nappy +nappiest JJS nappie +nappiest JJS nappy +nappiness NN nappiness +nappinesses NNS nappiness +napping VBG nap +nappy JJ nappy +nappy NN nappy +naprapath NN naprapath +naprapathies NNS naprapathy +naprapathy NN naprapathy +naprosyn NN naprosyn +naproxen NN naproxen +naproxens NNS naproxen +naps NNS nap +naps VBZ nap +naptime NN naptime +naptimes NNS naptime +napu NN napu +naranjilla NN naranjilla +narc NN narc +narcein NN narcein +narceine NN narceine +narceines NNS narceine +narceins NNS narcein +narcism NNN narcism +narcisms NNS narcism +narcissi NNS narcissus +narcissism NN narcissism +narcissisms NNS narcissism +narcissist NN narcissist +narcissistic JJ narcissistic +narcissistically RB narcissistically +narcissists NNS narcissist +narcissus NN narcissus +narcissus NNS narcissus +narcissuses NNS narcissus +narcist NN narcist +narcistic JJ narcistic +narcists NNS narcist +narco NN narco +narcoanalyses NNS narcoanalysis +narcoanalysis NN narcoanalysis +narcolepsies NNS narcolepsy +narcolepsy NN narcolepsy +narcoleptic JJ narcoleptic +narcoleptic NN narcoleptic +narcoleptics NNS narcoleptic +narcoma NN narcoma +narcomania NN narcomania +narcomaniac NN narcomaniac +narcomaniacal JJ narcomaniacal +narcomas NNS narcoma +narcomatous JJ narcomatous +narcos NN narcos +narcos NNS narco +narcose JJ narcose +narcose NN narcose +narcoses NNS narcose +narcoses NNS narcos +narcoses NNS narcosis +narcosis NN narcosis +narcosyntheses NNS narcosynthesis +narcosynthesis NN narcosynthesis +narcotic JJ narcotic +narcotic NN narcotic +narcotically RB narcotically +narcoticalness NN narcoticalness +narcoticness NN narcoticness +narcotics NNS narcotic +narcotisation NNN narcotisation +narcotise VB narcotise +narcotise VBP narcotise +narcotised VBD narcotise +narcotised VBN narcotise +narcotises VBZ narcotise +narcotising VBG narcotise +narcotism NNN narcotism +narcotisms NNS narcotism +narcotist NN narcotist +narcotists NNS narcotist +narcotization NN narcotization +narcotizations NNS narcotization +narcotize VB narcotize +narcotize VBP narcotize +narcotized JJ narcotized +narcotized VBD narcotize +narcotized VBN narcotize +narcotizes VBZ narcotize +narcotizing JJ narcotizing +narcotizing VBG narcotize +narcs NNS narc +nard NN nard +nardine JJ nardine +nardo NN nardo +nardoo NN nardoo +nardoos NNS nardoo +nards NNS nard +nare NN nare +nares NNS nare +nares NNS naris +narghile NN narghile +narghiles NNS narghile +nargile NN nargile +nargileh NN nargileh +nargilehs NNS nargileh +nargiles NNS nargile +narial JJ narial +naricorn NN naricorn +naricorns NNS naricorn +naris NN naris +nark NN nark +nark VB nark +nark VBP nark +narked VBD nark +narked VBN nark +narkier JJR narky +narkiest JJS narky +narking VBG nark +narks NNS nark +narks VBZ nark +narky JJ narky +narras NN narras +narrases NNS narras +narratable JJ narratable +narrate VB narrate +narrate VBP narrate +narrated VBD narrate +narrated VBN narrate +narrater NN narrater +narraters NNS narrater +narrates VBZ narrate +narrating VBG narrate +narration NNN narration +narrations NNS narration +narrative JJ narrative +narrative NNN narrative +narratively RB narratively +narratives NNS narrative +narratologies NNS narratology +narratologist NN narratologist +narratologists NNS narratologist +narratology NNN narratology +narrator NN narrator +narrators NNS narrator +narrow JJ narrow +narrow NN narrow +narrow VB narrow +narrow VBP narrow +narrow-fisted JJ narrow-fisted +narrow-gage JJ narrow-gage +narrow-gauge JJ narrow-gauge +narrow-gauged JJ narrow-gauged +narrow-minded JJ narrow-minded +narrow-mindedly RB narrow-mindedly +narrow-mindedness NN narrow-mindedness +narrowboat NN narrowboat +narrowcasting NN narrowcasting +narrowcastings NNS narrowcasting +narrowed JJ narrowed +narrowed VBD narrow +narrowed VBN narrow +narrower JJR narrow +narrowest JJS narrow +narrowing JJ narrowing +narrowing NNN narrowing +narrowing VBG narrow +narrowings NNS narrowing +narrowly RB narrowly +narrowminded JJ narrow-minded +narrowmindedness NNS narrow-mindedness +narrowness NN narrowness +narrownesses NNS narrowness +narrows NNS narrow +narrows VBZ narrow +narthecal JJ narthecal +narthecium NN narthecium +narthex NN narthex +narthexes NNS narthex +nartjie NN nartjie +nartjies NNS nartjie +narwal NN narwal +narwals NNS narwal +narwhal NN narwhal +narwhale NN narwhale +narwhales NNS narwhale +narwhals NNS narwhal +nary DT nary +nary JJ nary +nasal JJ nasal +nasal NN nasal +nasale VB nasale +nasale VBP nasale +nasalis NN nasalis +nasalisation NNN nasalisation +nasalisations NNS nasalisation +nasalise VB nasalise +nasalise VBP nasalise +nasalised VBD nasalise +nasalised VBN nasalise +nasalises VBZ nasalise +nasalising VBG nasalise +nasalism NNN nasalism +nasalisms NNS nasalism +nasalities NNS nasality +nasality NN nasality +nasalization NN nasalization +nasalizations NNS nasalization +nasalize VB nasalize +nasalize VBP nasalize +nasalized VBD nasalize +nasalized VBN nasalize +nasalizes VBZ nasalize +nasalizing VBG nasalize +nasally RB nasally +nasals NNS nasal +nasard NN nasard +nasards NNS nasard +nascence NN nascence +nascences NNS nascence +nascencies NNS nascency +nascency NN nascency +nascent JJ nascent +nasdaq NN nasdaq +naseberries NNS naseberry +naseberry NN naseberry +nashgab NN nashgab +nashgabs NNS nashgab +nasial JJ nasial +nasion NN nasion +nasions NNS nasion +nasofrontal JJ nasofrontal +nasogastric JJ nasogastric +nasolacrimal JJ nasolacrimal +nasological JJ nasological +nasologist NN nasologist +nasology NNN nasology +nasopalatine JJ nasopalatine +nasopharyngeal JJ nasopharyngeal +nasopharynx NN nasopharynx +nasopharynxes NNS nasopharynx +nasotracheal JJ nasotracheal +nastier JJR nasty +nasties NNS nasty +nastiest JJS nasty +nastily RB nastily +nastiness NN nastiness +nastinesses NNS nastiness +nasturtium NN nasturtium +nasturtiums NNS nasturtium +nasty JJ nasty +nasty NN nasty +nasua NN nasua +nasute NN nasute +nasuteness NN nasuteness +nasutes NNS nasute +nat NN nat +natal JJ natal +natalities NNS natality +natality NNN natality +natant JJ natant +natantia NN natantia +natation NNN natation +natational JJ natational +natations NNS natation +natator NN natator +natatorial JJ natatorial +natatorium NN natatorium +natatoriums NNS natatorium +natatory JJ natatory +natch JJ natch +natch NN natch +natch RB natch +natches NNS natch +naticidae NN naticidae +nation NN nation +nation-state NNN nation-state +national JJ national +national NN national +nationalisation NN nationalisation +nationalisations NNS nationalisation +nationalise VB nationalise +nationalise VBP nationalise +nationalised VBD nationalise +nationalised VBN nationalise +nationaliser NN nationaliser +nationalises VBZ nationalise +nationalising VBG nationalise +nationalism NN nationalism +nationalisms NNS nationalism +nationalist JJ nationalist +nationalist NN nationalist +nationalistic JJ nationalistic +nationalistically RB nationalistically +nationalists NNS nationalist +nationalities NNS nationality +nationality NNN nationality +nationalization NNN nationalization +nationalizations NNS nationalization +nationalize VB nationalize +nationalize VBP nationalize +nationalized VBD nationalize +nationalized VBN nationalize +nationalizer NN nationalizer +nationalizers NNS nationalizer +nationalizes VBZ nationalize +nationalizing VBG nationalize +nationally RB nationally +nationals NNS national +nationhood NN nationhood +nationhoods NNS nationhood +nationless JJ nationless +nations NNS nation +nationstate NNS nation-state +nationstates NNS nation-state +nationwide JJ nationwide +nationwide RB nationwide +native JJ native +native NN native +native-born JJ native-born +nativeborn JJ native-born +natively RB natively +nativeness NN nativeness +nativenesses NNS nativeness +natives NNS native +nativism NNN nativism +nativisms NNS nativism +nativist JJ nativist +nativist NN nativist +nativistic JJ nativistic +nativists NNS nativist +nativities NNS nativity +nativity NN nativity +natl NN natl +natrium NN natrium +natriums NNS natrium +natriureses NNS natriuresis +natriuresis NN natriuresis +natriuretic NN natriuretic +natriuretics NNS natriuretic +natrix NN natrix +natrolite NN natrolite +natrolites NNS natrolite +natron NN natron +natrons NNS natron +nats NNS nat +natter NN natter +natter VB natter +natter VBP natter +nattered VBD natter +nattered VBN natter +natterer NN natterer +natterers NNS natterer +nattering VBG natter +natterjack NN natterjack +natterjacks NNS natterjack +natters NNS natter +natters VBZ natter +nattier JJR natty +nattiest JJS natty +nattily RB nattily +nattiness NN nattiness +nattinesses NNS nattiness +natty JJ natty +natural JJ natural +natural NN natural +natural-born JJ natural-born +naturalisation NNN naturalisation +naturalisations NNS naturalization +naturalise VB naturalise +naturalise VBP naturalise +naturalised VBD naturalise +naturalised VBN naturalise +naturaliser NN naturaliser +naturalises VBZ naturalise +naturalising VBG naturalise +naturalism NN naturalism +naturalisms NNS naturalism +naturalist NN naturalist +naturalistic JJ naturalistic +naturalistically RB naturalistically +naturalists NNS naturalist +naturalization NN naturalization +naturalizations NNS naturalization +naturalize VB naturalize +naturalize VBP naturalize +naturalized VBD naturalize +naturalized VBN naturalize +naturalizer NN naturalizer +naturalizers NNS naturalizer +naturalizes VBZ naturalize +naturalizing VBG naturalize +naturally RB naturally +naturalness NN naturalness +naturalnesses NNS naturalness +naturals NNS natural +nature NNN nature +naturedly RB naturedly +naturelike JJ naturelike +natures NNS nature +naturism NNN naturism +naturisms NNS naturism +naturist NN naturist +naturistic JJ naturistic +naturists NNS naturist +naturopath NN naturopath +naturopathic JJ naturopathic +naturopathies NNS naturopathy +naturopaths NNS naturopath +naturopathy NN naturopathy +nauch NN nauch +nauclea NN nauclea +naucrates NN naucrates +naught NN naught +naughtier JJR naughty +naughties NNS naughty +naughtiest JJS naughty +naughtily RB naughtily +naughtiness NN naughtiness +naughtinesses NNS naughtiness +naughts NNS naught +naughty JJ naughty +naughty NN naughty +naumachia NN naumachia +naumachias NNS naumachia +naumachies NNS naumachy +naumachy NN naumachy +naunt NN naunt +naunts NNS naunt +naupathia NN naupathia +nauplial JJ nauplial +naupliform JJ naupliform +nauplii NNS nauplius +nauplioid JJ nauplioid +nauplius NN nauplius +nauran NN nauran +nausea NN nausea +nauseant NN nauseant +nauseants NNS nauseant +nauseas NNS nausea +nauseate VB nauseate +nauseate VBP nauseate +nauseated JJ nauseated +nauseated VBD nauseate +nauseated VBN nauseate +nauseates VBZ nauseate +nauseating JJ nauseating +nauseating VBG nauseate +nauseatingly RB nauseatingly +nauseatingness NN nauseatingness +nauseation NNN nauseation +nauseations NNS nauseation +nauseous JJ nauseous +nauseously RB nauseously +nauseousness NN nauseousness +nauseousnesses NNS nauseousness +naut NN naut +nautch NN nautch +nautches NNS nautch +nautic NN nautic +nautical JJ nautical +nauticality NNN nauticality +nautically RB nautically +nautics NNS nautic +nautili NNS nautilus +nautilidae NN nautilidae +nautiloid JJ nautiloid +nautiloid NN nautiloid +nautiloids NNS nautiloid +nautilus NN nautilus +nautiluses NNS nautilus +nav NN nav +navaid NN navaid +navaids NNS navaid +navajo NN navajo +naval JJ naval +navally RB navally +navar NN navar +navarch NN navarch +navarchies NNS navarchy +navarchs NNS navarch +navarchy NN navarchy +navarin NN navarin +navarins NNS navarin +navars NNS navar +nave NN nave +navel NN navel +navels NNS navel +navelwort NN navelwort +navelworts NNS navelwort +naves NNS nave +navette NN navette +navettes NNS navette +navew NN navew +navews NNS navew +navicert NN navicert +navicerts NNS navicert +navicula NN navicula +navicular JJ navicular +navicular NN navicular +naviculars NNS navicular +naviculas NNS navicula +navies NNS navy +navig NN navig +navigabilities NNS navigability +navigability NN navigability +navigable JJ navigable +navigableness NN navigableness +navigablenesses NNS navigableness +navigably RB navigably +navigate VB navigate +navigate VBP navigate +navigated VBD navigate +navigated VBN navigate +navigates VBZ navigate +navigating VBG navigate +navigation NN navigation +navigational JJ navigational +navigationally RB navigationally +navigations NNS navigation +navigator NN navigator +navigators NNS navigator +navvies NNS navvy +navvy NN navvy +navy JJ navy +navy NN navy +nawab NN nawab +nawabs NNS nawab +nawabship NN nawabship +nay JJ nay +nay NN nay +nays NNS nay +naysayer NN naysayer +naysayers NNS naysayer +naysaying NN naysaying +naze NN naze +nazes NNS naze +nazes NNS nazis +nazi NN nazi +nazification NNN nazification +nazifications NNS nazification +naziism NNN naziism +nazir NN nazir +nazirs NNS nazir +nazis NN nazis +nazis NNS nazi +nazism NNN nazism +naïvely RB naïvely +naïveness NNN naïveness +ne NN ne +neafe NN neafe +neafes NNS neafe +neaffe NN neaffe +neaffes NNS neaffe +neandertal JJ neandertal +neanderthal NN neanderthal +neanderthaler NN neanderthaler +neanderthalers NNS neanderthaler +neanderthalian JJ neanderthalian +neanderthals NNS neanderthal +neap JJ neap +neap NN neap +neaped JJ neaped +neaps NNS neap +neaptide NN neaptide +neaptides NNS neaptide +near IN near +near JJ near +near VB near +near VBP near +near-blind JJ near-blind +near-normal JJ near-normal +near-point NNN near-point +near-sighted JJ near-sighted +near-sightedly RB near-sightedly +near-sightedness NNN near-sightedness +nearby JJ nearby +nearby RB nearby +neared VBD near +neared VBN near +nearer JJR near +nearest IN nearest +nearest JJS near +nearing VBG near +nearlier JJR nearly +nearliest JJS nearly +nearly JJ nearly +nearly RB nearly +nearness NN nearness +nearnesses NNS nearness +nears VBZ near +nearside NN nearside +nearsides NNS nearside +nearsighted JJ nearsighted +nearsightedness NN nearsightedness +nearsightednesses NNS nearsightedness +neat JJ neat +neat NN neat +neaten VB neaten +neaten VBP neaten +neatened VBD neaten +neatened VBN neaten +neatening VBG neaten +neatens VBZ neaten +neater JJR neat +neatest JJS neat +neath IN neath +neatherd NN neatherd +neatherds NNS neatherd +neatly RB neatly +neatness NN neatness +neatnesses NNS neatness +neb NN neb +nebbich NN nebbich +nebbiches NNS nebbich +nebbish NN nebbish +nebbishe NN nebbishe +nebbisher NN nebbisher +nebbishers NNS nebbisher +nebbishes NNS nebbishe +nebbishes NNS nebbish +nebbuk NN nebbuk +nebbuks NNS nebbuk +nebeck NN nebeck +nebecks NNS nebeck +nebek NN nebek +nebeks NNS nebek +nebel NN nebel +nebels NNS nebel +nebenkern NN nebenkern +nebenkerns NNS nebenkern +nebish NN nebish +nebishes NNS nebish +nebraskan NN nebraskan +nebris NN nebris +nebrises NNS nebris +nebs NNS neb +nebuchadnezzar NN nebuchadnezzar +nebuchadnezzars NNS nebuchadnezzar +nebula NN nebula +nebulae NNS nebula +nebular JJ nebular +nebulas NNS nebula +nebulated JJ nebulated +nebule JJ nebule +nebule NN nebule +nebules NNS nebule +nebulisation NNN nebulisation +nebuliser NN nebuliser +nebulisers NNS nebuliser +nebulization NNN nebulization +nebulizations NNS nebulization +nebulizer NN nebulizer +nebulizers NNS nebulizer +nebulose JJ nebulose +nebulosities NNS nebulosity +nebulosity NNN nebulosity +nebulosus JJ nebulosus +nebulous JJ nebulous +nebulously RB nebulously +nebulousness NN nebulousness +nebulousnesses NNS nebulousness +nebuly RB nebuly +necessarian JJ necessarian +necessarian NN necessarian +necessarianism NNN necessarianism +necessarians NNS necessarian +necessaries NNS necessary +necessarily RB necessarily +necessariness NN necessariness +necessary JJ necessary +necessary NN necessary +necessitarian NN necessitarian +necessitarianism NNN necessitarianism +necessitarianisms NNS necessitarianism +necessitarians NNS necessitarian +necessitate VB necessitate +necessitate VBP necessitate +necessitated VBD necessitate +necessitated VBN necessitate +necessitates VBZ necessitate +necessitating VBG necessitate +necessitation NNN necessitation +necessitations NNS necessitation +necessitative JJ necessitative +necessities NNS necessity +necessitous JJ necessitous +necessitously RB necessitously +necessitousness NN necessitousness +necessitousnesses NNS necessitousness +necessitude NN necessitude +necessity NNN necessity +neck NN neck +neck VB neck +neck VBP neck +neckband NN neckband +neckbands NNS neckband +neckcloth NN neckcloth +neckcloths NNS neckcloth +necked JJ necked +necked VBD neck +necked VBN neck +necker NN necker +neckerchief NN neckerchief +neckerchiefs NNS neckerchief +neckerchieves NNS neckerchief +neckers NNS necker +necking NN necking +necking VBG neck +neckings NNS necking +necklace NN necklace +necklace VB necklace +necklace VBP necklace +necklaced VBD necklace +necklaced VBN necklace +necklaces NNS necklace +necklaces VBZ necklace +necklacing VBG necklace +neckless JJ neckless +necklet NN necklet +necklets NNS necklet +necklike JJ necklike +neckline NN neckline +necklines NNS neckline +neckpiece NN neckpiece +neckpieces NNS neckpiece +necks NNS neck +necks VBZ neck +necktie NN necktie +necktieless JJ necktieless +neckties NNS necktie +neckwear NN neckwear +neckweed NN neckweed +neckweeds NNS neckweed +necremia NN necremia +necro NN necro +necrobacillosis NN necrobacillosis +necrobioses NNS necrobiosis +necrobiosis NN necrobiosis +necrographer NN necrographer +necrographers NNS necrographer +necrolatries NNS necrolatry +necrolatry NN necrolatry +necrologic JJ necrologic +necrological JJ necrological +necrologically RB necrologically +necrologies NNS necrology +necrologist NN necrologist +necrologists NNS necrologist +necrology NN necrology +necrolysis NN necrolysis +necromancer NN necromancer +necromancers NNS necromancer +necromancies NNS necromancy +necromancy NN necromancy +necromania NN necromania +necromantic JJ necromantic +necromantical JJ necromantical +necromantically RB necromantically +necromimesis NN necromimesis +necrophagia NN necrophagia +necrophagias NNS necrophagia +necrophagy NN necrophagy +necrophile NN necrophile +necrophiles NNS necrophile +necrophilia NN necrophilia +necrophiliac JJ necrophiliac +necrophiliac NN necrophiliac +necrophiliacs NNS necrophiliac +necrophilias NNS necrophilia +necrophilic JJ necrophilic +necrophilic NN necrophilic +necrophilism NNN necrophilism +necrophilisms NNS necrophilism +necrophobia NN necrophobia +necrophobias NNS necrophobia +necrophobic JJ necrophobic +necropoleis NNS necropolis +necropoles NNS necropolis +necropoli NN necropoli +necropoli NNS necropolis +necropolis NN necropolis +necropolis NNS necropoli +necropolises NNS necropolis +necropolitan JJ necropolitan +necropsies NNS necropsy +necropsy NN necropsy +necroscopies NNS necroscopy +necroscopy NN necroscopy +necrose VB necrose +necrose VBP necrose +necrosed VBD necrose +necrosed VBN necrose +necroses VBZ necrose +necroses NNS necrosis +necrosing VBG necrose +necrosis NN necrosis +necrotic JJ necrotic +necrotomic JJ necrotomic +necrotomies NNS necrotomy +necrotomist NN necrotomist +necrotomy NN necrotomy +nectar NN nectar +nectareous JJ nectareous +nectareously RB nectareously +nectareousness NN nectareousness +nectaries NNS nectary +nectariferous JJ nectariferous +nectarine NN nectarine +nectarines NNS nectarine +nectarous JJ nectarous +nectars NNS nectar +nectary NN nectary +nectocalyces NNS nectocalyx +nectocalyx NN nectocalyx +necturus NN necturus +ned NN ned +neddies NNS neddy +neddy NN neddy +neds NNS ned +nee JJ nee +need MD need +need NNN need +need VB need +need VBP need +needed JJ needed +needed VBD need +needed VBN need +needer NN needer +needers NNS needer +needfire NN needfire +needful JJ needful +needful NN needful +needfully RB needfully +needfulness NN needfulness +needfulnesses NNS needfulness +needfuls NNS needful +needier JJR needy +neediest JJS needy +needily RB needily +neediness NN neediness +needinesses NNS neediness +needing VBG need +needle NN needle +needle VB needle +needle VBP needle +needle-shaped JJ needle-shaped +needlebush NN needlebush +needlecord NN needlecord +needlecords NNS needlecord +needlecraft NN needlecraft +needlecrafts NNS needlecraft +needled VBD needle +needled VBN needle +needlefish NN needlefish +needlefish NNS needlefish +needleful NN needleful +needlefuls NNS needleful +needleless JJ needleless +needlelike JJ needlelike +needlepoint NN needlepoint +needlepoints NNS needlepoint +needler NN needler +needlers NNS needler +needles NNS needle +needles VBZ needle +needless JJ needless +needlessly RB needlessly +needlessness NN needlessness +needlessnesses NNS needlessness +needlewoman NN needlewoman +needlewomen NNS needlewoman +needlewood NN needlewood +needlework NN needlework +needleworker NN needleworker +needleworkers NNS needleworker +needleworks NNS needlework +needling NNN needling +needling NNS needling +needling VBG needle +needn MD need +needs RB needs +needs NNS need +needs VBZ need +needy JJ needy +neem NN neem +neems NNS neem +neencephalon NN neencephalon +neep NN neep +neeps NNS neep +nef NN nef +nefarious JJ nefarious +nefariously RB nefariously +nefariousness NN nefariousness +nefariousnesses NNS nefariousness +nefs NNS nef +neg NN neg +negaprion NN negaprion +negate VB negate +negate VBP negate +negated VBD negate +negated VBN negate +negatedness NN negatedness +negater NN negater +negaters NNS negater +negates VBZ negate +negating NNN negating +negating VBG negate +negation NNN negation +negational JJ negational +negationist NN negationist +negationists NNS negationist +negations NNS negation +negative JJ negative +negative NNN negative +negative VB negative +negative VBG negative +negative VBP negative +negative-raising NNN negative-raising +negatived VBD negative +negatived VBN negative +negatively RB negatively +negativeness NN negativeness +negativenesses NNS negativeness +negatives NNS negative +negatives VBZ negative +negativing VBG negative +negativism NN negativism +negativisms NNS negativism +negativist NN negativist +negativists NNS negativist +negativities NNS negativity +negativity NN negativity +negaton NN negaton +negatons NNS negaton +negator NN negator +negators NNS negator +negatron NN negatron +negatrons NNS negatron +neglect NN neglect +neglect VB neglect +neglect VBP neglect +neglected JJ neglected +neglected VBD neglect +neglected VBN neglect +neglectedly RB neglectedly +neglectedness NN neglectedness +neglecter NN neglecter +neglecters NNS neglecter +neglectful JJ neglectful +neglectfully RB neglectfully +neglectfulness NN neglectfulness +neglectfulnesses NNS neglectfulness +neglecting VBG neglect +neglectingly RB neglectingly +neglection NNN neglection +neglections NNS neglection +neglector NN neglector +neglectors NNS neglector +neglects NNS neglect +neglects VBZ neglect +neglige NN neglige +negligee NNN negligee +negligees NNS negligee +negligence NN negligence +negligences NNS negligence +negligent JJ negligent +negligently RB negligently +negliges NNS neglige +negligibilities NNS negligibility +negligibility NNN negligibility +negligible JJ negligible +negligibleness NN negligibleness +negligiblenesses NNS negligibleness +negligibly RB negligibly +negociant NN negociant +negociants NNS negociant +negociate VB negociate +negociate VBP negociate +negotiabilities NNS negotiability +negotiability NN negotiability +negotiable JJ negotiable +negotiable NN negotiable +negotiables NNS negotiable +negotiant NN negotiant +negotiants NNS negotiant +negotiate VB negotiate +negotiate VBP negotiate +negotiated VBD negotiate +negotiated VBN negotiate +negotiates VBZ negotiate +negotiating VBG negotiate +negotiation NNN negotiation +negotiations NNS negotiation +negotiator NN negotiator +negotiators NNS negotiator +negotiatress NN negotiatress +negotiatresses NNS negotiatress +negotiatrix NN negotiatrix +negotiatrixes NNS negotiatrix +negritude NN negritude +negritudes NNS negritude +negro JJ negro +negroid JJ negroid +negroid NN negroid +negroids NNS negroid +negroism NNN negroism +negroisms NNS negroism +negroni NN negroni +negronis NNS negroni +negrophil NN negrophil +negrophile NN negrophile +negrophiles NNS negrophile +negrophilism NNN negrophilism +negrophilisms NNS negrophilism +negrophilist NN negrophilist +negrophilists NNS negrophilist +negrophils NNS negrophil +negrophobe NN negrophobe +negrophobes NNS negrophobe +negrophobia NN negrophobia +negrophobias NNS negrophobia +negs NNS neg +negus NN negus +neguses NNS negus +neif NN neif +neifs NNS neif +neigh NN neigh +neigh VB neigh +neigh VBP neigh +neighbor JJ neighbor +neighbor NN neighbor +neighbor VB neighbor +neighbor VBP neighbor +neighbored VBD neighbor +neighbored VBN neighbor +neighborhood NNN neighborhood +neighborhoods NNS neighborhood +neighboring JJ neighboring +neighboring VBG neighbor +neighborless JJ neighborless +neighborliness NN neighborliness +neighborlinesses NNS neighborliness +neighborly RB neighborly +neighbors NNS neighbor +neighbors VBZ neighbor +neighbour JJ neighbour +neighbour NN neighbour +neighbour VB neighbour +neighbour VBP neighbour +neighboured VBD neighbour +neighboured VBN neighbour +neighbourhood NN neighbourhood +neighbourhoods NNS neighbourhood +neighbouring JJ neighbouring +neighbouring VBG neighbour +neighbourless JJ neighbourless +neighbourliness NN neighbourliness +neighbourly RB neighbourly +neighbours NNS neighbour +neighbours VBZ neighbour +neighed VBD neigh +neighed VBN neigh +neighing VBG neigh +neighs NNS neigh +neighs VBZ neigh +neisseria NN neisseria +neither CC neither +neither DT neither +neive NN neive +neives NNS neive +neives NNS neif +nek NN nek +nekton NN nekton +nektonic JJ nektonic +nektons NNS nekton +nellie NN nellie +nellies NNS nellie +nellies NNS nelly +nelly NN nelly +nelson NN nelson +nelsons NNS nelson +nelumbian JJ nelumbian +nelumbium NN nelumbium +nelumbiums NNS nelumbium +nelumbo NN nelumbo +nelumbonaceae NN nelumbonaceae +nelumbos NNS nelumbo +nema NN nema +nemas NNS nema +nemathecial JJ nemathecial +nemathecium NN nemathecium +nemathelminth NN nemathelminth +nemathelminths NNS nemathelminth +nematic JJ nematic +nematicide NN nematicide +nematicides NNS nematicide +nematocera NN nematocera +nematocide NN nematocide +nematocides NNS nematocide +nematocyst NN nematocyst +nematocystic JJ nematocystic +nematocysts NNS nematocyst +nematode NN nematode +nematodes NNS nematode +nematological JJ nematological +nematologies NNS nematology +nematologist NN nematologist +nematologists NNS nematologist +nematology NNN nematology +nemertean JJ nemertean +nemertean NN nemertean +nemerteans NNS nemertean +nemertina NN nemertina +nemertine NN nemertine +nemertines NNS nemertine +nemeses NNS nemesis +nemesia NN nemesia +nemesias NNS nemesia +nemesis NN nemesis +nemo NN nemo +nemophila NN nemophila +nemophilas NNS nemophila +nemoricole JJ nemoricole +nene NN nene +nenes NNS nene +nenets NN nenets +nentsi NN nentsi +nentsy NN nentsy +nenuphar NN nenuphar +nenuphars NNS nenuphar +neo JJ neo +neo-Plastic JJ neo-Plastic +neo-classicist NN neo-classicist +neo-orthodoxy NN neo-orthodoxy +neoanthropic JJ neoanthropic +neoarsphenamine NN neoarsphenamine +neoarsphenamines NNS neoarsphenamine +neoblast NN neoblast +neoblasts NNS neoblast +neoceratodus NN neoceratodus +neoclassic JJ neoclassic +neoclassic NN neoclassic +neoclassical JJ neoclassical +neoclassicism NN neoclassicism +neoclassicisms NNS neoclassicism +neoclassicist JJ neoclassicist +neoclassicist NN neoclassicist +neoclassicistic JJ neoclassicistic +neoclassicists NNS neoclassicist +neocolonial JJ neocolonial +neocolonialism NN neocolonialism +neocolonialisms NNS neocolonialism +neocolonialist NN neocolonialist +neocolonialists NNS neocolonialist +neocon NN neocon +neocons NNS neocon +neoconservatism NNN neoconservatism +neoconservatisms NNS neoconservatism +neoconservative NN neoconservative +neoconservatives NNS neoconservative +neocortex NN neocortex +neocortexes NNS neocortex +neocortical JJ neocortical +neocortices NNS neocortex +neodymium NN neodymium +neodymiums NNS neodymium +neoencephalon NN neoencephalon +neoexpressionism NNN neoexpressionism +neofascism NNN neofascism +neofascisms NNS neofascism +neofascist NN neofascist +neofascists NNS neofascist +neofiber NN neofiber +neoformation NNN neoformation +neoformative JJ neoformative +neogeneses NNS neogenesis +neogenesis NN neogenesis +neogrammarian NN neogrammarian +neogrammarians NNS neogrammarian +neohygrophorus NN neohygrophorus +neoimperialism NNN neoimperialism +neoimpressionism NNN neoimpressionism +neoimpressionisms NNS neoimpressionism +neoimpressionist NN neoimpressionist +neoimpressionists NNS neoimpressionist +neolentinus NN neolentinus +neoliberal JJ neoliberal +neoliberal NN neoliberal +neoliberalism NNN neoliberalism +neoliberalisms NNS neoliberalism +neoliberals NNS neoliberal +neolith NN neolith +neoliths NNS neolith +neologian NN neologian +neologians NNS neologian +neologic JJ neologic +neological JJ neological +neologically RB neologically +neologies NNS neology +neologism NNN neologism +neologisms NNS neologism +neologist NN neologist +neologistic JJ neologistic +neologistical JJ neologistical +neologists NNS neologist +neology NNN neology +neomorph NN neomorph +neomorphs NNS neomorph +neomycin NN neomycin +neomycins NNS neomycin +neomys NN neomys +neon NN neon +neonatal JJ neonatal +neonatally RB neonatally +neonate NN neonate +neonates NNS neonate +neonatologies NNS neonatology +neonatologist NN neonatologist +neonatologists NNS neonatologist +neonatology NNN neonatology +neonomian NN neonomian +neonomians NNS neonomian +neons NNS neon +neoorthodox JJ neoorthodox +neoorthodoxies NNS neoorthodoxy +neoorthodoxy NN neoorthodoxy +neopagan NN neopagan +neopagans NNS neopagan +neopallium NN neopallium +neophile NN neophile +neophiles NNS neophile +neophilia NN neophilia +neophiliac NN neophiliac +neophiliacs NNS neophiliac +neophilias NNS neophilia +neophron NN neophron +neophyte NN neophyte +neophytes NNS neophyte +neophytic JJ neophytic +neophytism NNN neophytism +neoplasia NN neoplasia +neoplasias NNS neoplasia +neoplasm NN neoplasm +neoplasms NNS neoplasm +neoplasticism NNN neoplasticism +neoplasticisms NNS neoplasticism +neoplasticist NN neoplasticist +neoplasticists NNS neoplasticist +neoplasties NNS neoplasty +neoplasty NNN neoplasty +neoplatonist NN neoplatonist +neoplatonists NNS neoplatonist +neopolitan NN neopolitan +neoprene NN neoprene +neoprenes NNS neoprene +neorealism NNN neorealism +neorealisms NNS neorealism +neorealist NN neorealist +neorealists NNS neorealist +neoromantic JJ neoromantic +neoromanticism NNN neoromanticism +neostigmine NN neostigmine +neostigmines NNS neostigmine +neotenies NNS neoteny +neotenous JJ neotenous +neoteny NN neoteny +neoteric JJ neoteric +neoteric NN neoteric +neoterics NNS neoteric +neoterism NNN neoterism +neoterist NN neoterist +neoterists NNS neoterist +neoterminal JJ neoterminal +neotoma NN neotoma +neotraditional JJ neotraditional +neotropical JJ neotropical +neotype NN neotype +neotypes NNS neotype +neourthodox JJ neourthodox +neovascularisation NNN neovascularisation +neoytterbium NN neoytterbium +nep NN nep +nepa NN nepa +nepenthaceae NN nepenthaceae +nepenthe NN nepenthe +nepenthean JJ nepenthean +nepenthes NNS nepenthe +neper NN neper +nepers NNS neper +nepeta NN nepeta +nephalist NN nephalist +nephalists NNS nephalist +nepheline NN nepheline +nephelines NNS nepheline +nephelinite NN nephelinite +nephelinites NNS nephelinite +nephelinitic JJ nephelinitic +nephelite NN nephelite +nephelites NNS nephelite +nephelium NN nephelium +nephelometer NN nephelometer +nephelometers NNS nephelometer +nephelometries NNS nephelometry +nephelometry NN nephelometry +nephew NN nephew +nephews NNS nephew +nephogram NN nephogram +nephograms NNS nephogram +nephograph NN nephograph +nephographs NNS nephograph +nephological JJ nephological +nephologies NNS nephology +nephologist NN nephologist +nephologists NNS nephologist +nephology NNN nephology +nephoscope NN nephoscope +nephoscopes NNS nephoscope +nephralgia NN nephralgia +nephralgias NNS nephralgia +nephralgic JJ nephralgic +nephrectomies NNS nephrectomy +nephrectomy NN nephrectomy +nephric JJ nephric +nephridial JJ nephridial +nephridium NN nephridium +nephridiums NNS nephridium +nephrism NNN nephrism +nephrisms NNS nephrism +nephrite NN nephrite +nephrites NNS nephrite +nephritic JJ nephritic +nephritides NNS nephritis +nephritis NN nephritis +nephritises NNS nephritis +nephrocalcinosis NN nephrocalcinosis +nephrocele NN nephrocele +nephrogenous JJ nephrogenous +nephrolepis NN nephrolepis +nephrolith NN nephrolith +nephrolithiasis NN nephrolithiasis +nephrolithic JJ nephrolithic +nephrolithotomy NN nephrolithotomy +nephrologies NNS nephrology +nephrologist NN nephrologist +nephrologists NNS nephrologist +nephrology NNN nephrology +nephron NN nephron +nephrons NNS nephron +nephropathic JJ nephropathic +nephropathies NNS nephropathy +nephropathy NN nephropathy +nephrops NN nephrops +nephropsidae NN nephropsidae +nephroses NNS nephrosis +nephrosis NN nephrosis +nephrostome NN nephrostome +nephrostomes NNS nephrostome +nephrostomial JJ nephrostomial +nephrostomous JJ nephrostomous +nephrotic JJ nephrotic +nephrotic NN nephrotic +nephrotics NNS nephrotic +nephrotome NN nephrotome +nephrotomies NNS nephrotomy +nephrotomise NN nephrotomise +nephrotomy NN nephrotomy +nephrotoxic JJ nephrotoxic +nephrotoxicities NNS nephrotoxicity +nephrotoxicity NN nephrotoxicity +nephthys NN nephthys +nephthytis NN nephthytis +nepidae NN nepidae +nepit NN nepit +nepits NNS nepit +nepman NN nepman +nepotic JJ nepotic +nepotism NN nepotism +nepotisms NNS nepotism +nepotist NN nepotist +nepotistic JJ nepotistic +nepotistical JJ nepotistical +nepotists NNS nepotist +neps NNS nep +neptunium NN neptunium +neptuniums NNS neptunium +neral NN neral +nerals NNS neral +nerd NN nerd +nerdier JJR nerdy +nerdiest JJS nerdy +nerdiness NN nerdiness +nerds NNS nerd +nerdy JJ nerdy +nereid NN nereid +nereides NNS nereid +nereids NNS nereid +nereis NN nereis +nereises NNS nereis +nergal NN nergal +nerine NN nerine +nerines NNS nerine +nerita NN nerita +neritic JJ neritic +neritid NN neritid +neritidae NN neritidae +neritina NN neritina +nerium NN nerium +nerk NN nerk +nerka NN nerka +nerkas NNS nerka +nerks NNS nerk +nerodia NN nerodia +nerol NN nerol +neroli NN neroli +nerolis NNS neroli +nerols NNS nerol +nerthus NN nerthus +nerts UH nerts +nervate JJ nervate +nervation NNN nervation +nervations NNS nervation +nervature NN nervature +nervatures NNS nervature +nerve NNN nerve +nerve VB nerve +nerve VBP nerve +nerve-racking JJ nerve-racking +nerve-wracking JJ nerve-wracking +nerved VBD nerve +nerved VBN nerve +nerveless JJ nerveless +nervelessly RB nervelessly +nervelessness NN nervelessness +nervelessnesses NNS nervelessness +nervelet NN nervelet +nervelets NNS nervelet +nerver NN nerver +nerveroot NN nerveroot +nervers NNS nerver +nerves NNS nerve +nerves VBZ nerve +nervi NN nervi +nervier JJR nervy +nerviest JJS nervy +nervily RB nervily +nervine JJ nervine +nervine NN nervine +nervines NN nervines +nervines NNS nervine +nerviness NN nerviness +nervinesses NNS nerviness +nervinesses NNS nervines +nerving NNN nerving +nerving VBG nerve +nervings NNS nerving +nervosities NNS nervosity +nervosity NNN nervosity +nervous JJ nervous +nervously RB nervously +nervousness NN nervousness +nervousnesses NNS nervousness +nervule NN nervule +nervules NNS nervule +nervuration NNN nervuration +nervurations NNS nervuration +nervure NN nervure +nervures NNS nervure +nervus NN nervus +nervy JJ nervy +nescience NN nescience +nesciences NNS nescience +nescient JJ nescient +nescient NN nescient +nescients NNS nescient +nesh JJ nesh +nesokia NN nesokia +nesosilicate NN nesosilicate +ness NN ness +nesses NNS ness +nest NN nest +nest VB nest +nest VBP nest +nestable JJ nestable +nested VBD nest +nested VBN nest +nester NN nester +nesters NNS nester +nesting VBG nest +nestle NN nestle +nestle VB nestle +nestle VBP nestle +nestled JJ nestled +nestled VBD nestle +nestled VBN nestle +nestler NN nestler +nestlers NNS nestler +nestles NNS nestle +nestles VBZ nestle +nestlike JJ nestlike +nestling NNN nestling +nestling NNS nestling +nestling VBG nestle +nestlings NNS nestling +nestor NN nestor +nestors NNS nestor +nests NNS nest +nests VBZ nest +nesty JJ nesty +net JJ net +net NNN net +net VB net +net VBP net +netback NN netback +netbacks NNS netback +netball NN netball +nete NN nete +netes NNS nete +netful NN netful +netfuls NNS netful +nether JJ nether +nethermost DT nethermost +netherstock NN netherstock +netherstocks NNS netherstock +netherward JJ netherward +netherward NN netherward +netherwards NNS netherward +netherworld NN netherworld +netherworlds NNS netherworld +netiquette NN netiquette +netiquettes NNS netiquette +netizen NN netizen +netizens NNS netizen +netkeeper NN netkeeper +netless JJ netless +netlike JJ netlike +netmail VB netmail +netmail VBP netmail +netman NN netman +netminder NN netminder +netminders NNS netminder +netop NN netop +netops NNS netop +nets NNS net +nets VBZ net +netscape NN netscape +netsuke NN netsuke +netsukes NNS netsuke +nett JJ nett +nettable JJ nettable +netted VBD net +netted VBN net +netter NN netter +netter JJR nett +netter JJR net +netters NNS netter +nettier JJR netty +nettiest JJS netty +netting NN netting +netting VBG net +nettings NNS netting +nettle NN nettle +nettle VB nettle +nettle VBP nettle +nettled VBD nettle +nettled VBN nettle +nettlefish NN nettlefish +nettlefish NNS nettlefish +nettlelike JJ nettlelike +nettler NN nettler +nettlers NNS nettler +nettles NNS nettle +nettles VBZ nettle +nettlesome JJ nettlesome +nettlier JJR nettly +nettliest JJS nettly +nettling NNN nettling +nettling NNS nettling +nettling VBG nettle +nettly RB nettly +netty JJ netty +network NN network +network VB network +network VBP network +networkable JJ networkable +networked VBD network +networked VBN network +networker NN networker +networkers NNS networker +networking NN networking +networking VBG network +networkings NNS networking +networklike JJ networklike +networks NNS network +networks VBZ network +networkwide JJ networkwide +neuk NN neuk +neuks NNS neuk +neum NN neum +neumatic JJ neumatic +neume NN neume +neumes NNS neume +neumic JJ neumic +neums NNS neum +neural JJ neural +neuralgia NN neuralgia +neuralgias NNS neuralgia +neuralgic JJ neuralgic +neuralgy NN neuralgy +neurally RB neurally +neuraminidase NN neuraminidase +neuraminidases NNS neuraminidase +neurasthenia NN neurasthenia +neurasthenias NNS neurasthenia +neurasthenic JJ neurasthenic +neurasthenic NN neurasthenic +neurasthenically RB neurasthenically +neurasthenics NNS neurasthenic +neuration NNN neuration +neurations NNS neuration +neuraxitis NN neuraxitis +neuraxon NN neuraxon +neuraxons NNS neuraxon +neurectomies NNS neurectomy +neurectomy NN neurectomy +neurilemma NN neurilemma +neurilemmal JJ neurilemmal +neurilemmas NNS neurilemma +neurilemmatic JJ neurilemmatic +neurine NN neurine +neurines NNS neurine +neurite NN neurite +neuritic JJ neuritic +neuritic NN neuritic +neuritics NNS neuritic +neuritides NNS neuritis +neuritis NN neuritis +neuritises NNS neuritis +neuroanatomic JJ neuroanatomic +neuroanatomical JJ neuroanatomical +neuroanatomies NNS neuroanatomy +neuroanatomist NN neuroanatomist +neuroanatomists NNS neuroanatomist +neuroanatomy NN neuroanatomy +neurobehavioural JJ neurobehavioural +neurobiological JJ neurobiological +neurobiologies NNS neurobiology +neurobiologist NN neurobiologist +neurobiologists NNS neurobiologist +neurobiology NNN neurobiology +neuroblast NN neuroblast +neuroblastic JJ neuroblastic +neuroblastoma NN neuroblastoma +neuroblastomas NNS neuroblastoma +neuroblasts NNS neuroblast +neurocelian JJ neurocelian +neurochemical NN neurochemical +neurochemicals NNS neurochemical +neurochemist NN neurochemist +neurochemistries NNS neurochemistry +neurochemistry NN neurochemistry +neurochemists NNS neurochemist +neurochip NN neurochip +neurochips NNS neurochip +neurocoele NN neurocoele +neurocoelian JJ neurocoelian +neurocomputer NN neurocomputer +neurocomputers NNS neurocomputer +neurodegeneration NNN neurodegeneration +neurodegenerative JJ neurodegenerative +neurodevelopment NN neurodevelopment +neurodevelopmental JJ neurodevelopmental +neuroembryological NN neuroembryological +neuroembryology NNN neuroembryology +neuroendocrine JJ neuroendocrine +neuroendocrinologies NNS neuroendocrinology +neuroendocrinologist NN neuroendocrinologist +neuroendocrinologists NNS neuroendocrinologist +neuroendocrinology NNN neuroendocrinology +neurofibril NN neurofibril +neurofibrils NNS neurofibril +neurofibroma NN neurofibroma +neurofibromas NNS neurofibroma +neurofibromatoses NNS neurofibromatosis +neurofibromatosis NN neurofibromatosis +neurogeneses NNS neurogenesis +neurogenesis NN neurogenesis +neurogenetic NN neurogenetic +neurogenetics NNS neurogenetic +neurogenic JJ neurogenic +neuroglia NN neuroglia +neurogliac JJ neurogliac +neurogliacyte NN neurogliacyte +neuroglial JJ neuroglial +neurogliar JJ neurogliar +neuroglias NNS neuroglia +neuroglic JJ neuroglic +neuroglycopenic JJ neuroglycopenic +neurogram NN neurogram +neurogrammic JJ neurogrammic +neurograms NNS neurogram +neurohormone NN neurohormone +neurohormones NNS neurohormone +neurohumor NN neurohumor +neurohumoral JJ neurohumoral +neurohumors NNS neurohumor +neurohypophyses NNS neurohypophysis +neurohypophysis NN neurohypophysis +neurohypophysises NNS neurohypophysis +neurolemma NN neurolemma +neurolemmas NNS neurolemma +neuroleptic NN neuroleptic +neuroleptics NNS neuroleptic +neurolinguist NN neurolinguist +neurolinguistic NN neurolinguistic +neurolinguistics NNS neurolinguistic +neurolinguists NNS neurolinguist +neurologic JJ neurologic +neurological JJ neurological +neurologically RB neurologically +neurologies NNS neurology +neurologist NN neurologist +neurologists NNS neurologist +neurology NN neurology +neurolytic JJ neurolytic +neuroma NN neuroma +neuromas NNS neuroma +neuromast NN neuromast +neuromastic JJ neuromastic +neuromasts NNS neuromast +neuromatous JJ neuromatous +neuromotor JJ neuromotor +neuromuscular JJ neuromuscular +neuron JJ neuron +neuron NN neuron +neuronal JJ neuronal +neurone NN neurone +neurones NNS neurone +neuronic JJ neuronic +neurons NNS neuron +neuropath NN neuropath +neuropathic JJ neuropathic +neuropathically RB neuropathically +neuropathies NNS neuropathy +neuropathist NN neuropathist +neuropathists NNS neuropathist +neuropathological JJ neuropathological +neuropathologically RB neuropathologically +neuropathologies NNS neuropathology +neuropathologist NN neuropathologist +neuropathologists NNS neuropathologist +neuropathology NNN neuropathology +neuropaths NNS neuropath +neuropathy NN neuropathy +neuropeptide NN neuropeptide +neuropeptides NNS neuropeptide +neuropharmacological JJ neuropharmacological +neuropharmacologies NNS neuropharmacology +neuropharmacologist NN neuropharmacologist +neuropharmacologists NNS neuropharmacologist +neuropharmacology NNN neuropharmacology +neurophysiologic JJ neurophysiologic +neurophysiological JJ neurophysiological +neurophysiologically RB neurophysiologically +neurophysiologies NNS neurophysiology +neurophysiologist NN neurophysiologist +neurophysiologists NNS neurophysiologist +neurophysiology NNN neurophysiology +neuroplasm NN neuroplasm +neuroplasmatic JJ neuroplasmatic +neuroplasmic JJ neuroplasmic +neuroprotective JJ neuroprotective +neuropsychiatric JJ neuropsychiatric +neuropsychiatries NNS neuropsychiatry +neuropsychiatrist NN neuropsychiatrist +neuropsychiatrists NNS neuropsychiatrist +neuropsychiatry NN neuropsychiatry +neuropsychological JJ neuropsychological +neuropsychologies NNS neuropsychology +neuropsychologist NN neuropsychologist +neuropsychologists NNS neuropsychologist +neuropsychology NNN neuropsychology +neuropsychopharmacology NNN neuropsychopharmacology +neuroptera NN neuroptera +neuropteran NN neuropteran +neuropterans NNS neuropteran +neuropterist NN neuropterist +neuropterists NNS neuropterist +neuropteron NN neuropteron +neuropterous JJ neuropterous +neuroradiological JJ neuroradiological +neuroradiologies NNS neuroradiology +neuroradiologist NN neuroradiologist +neuroradiologists NNS neuroradiologist +neuroradiology NNN neuroradiology +neurosarcoma NN neurosarcoma +neuroscience NN neuroscience +neurosciences NNS neuroscience +neuroscientific JJ neuroscientific +neuroscientist NN neuroscientist +neuroscientists NNS neuroscientist +neurosecretion NNN neurosecretion +neurosecretions NNS neurosecretion +neuroses NNS neurosis +neurosis NN neurosis +neurospora NN neurospora +neurosporas NNS neurospora +neurosurgeon NN neurosurgeon +neurosurgeons NNS neurosurgeon +neurosurgeries NNS neurosurgery +neurosurgery NN neurosurgery +neurosurgical JJ neurosurgical +neurosyphilis NN neurosyphilis +neurotic JJ neurotic +neurotic NN neurotic +neurotically RB neurotically +neuroticism NNN neuroticism +neuroticisms NNS neuroticism +neurotics NNS neurotic +neurotomies NNS neurotomy +neurotomy NN neurotomy +neurotoxic JJ neurotoxic +neurotoxicities NNS neurotoxicity +neurotoxicity NN neurotoxicity +neurotoxicology NNN neurotoxicology +neurotoxin NN neurotoxin +neurotoxins NNS neurotoxin +neurotransmission NN neurotransmission +neurotransmissions NNS neurotransmission +neurotransmitter NN neurotransmitter +neurotransmitters NNS neurotransmitter +neurotrichus NN neurotrichus +neurotrophic JJ neurotrophic +neurotrophy NN neurotrophy +neurotropic JJ neurotropic +neurotropism NNN neurotropism +neurotropisms NNS neurotropism +neurovascular JJ neurovascular +neurula NN neurula +neurulas NNS neurula +neurulation NNN neurulation +neurulations NNS neurulation +neustic JJ neustic +neuston NN neuston +neustonic JJ neustonic +neustons NNS neuston +neut NN neut +neuter JJ neuter +neuter NNN neuter +neuter VB neuter +neuter VBG neuter +neuter VBP neuter +neutered JJ neutered +neutered VBD neuter +neutered VBN neuter +neutering NNN neutering +neutering VBG neuter +neuters NNS neuter +neuters VBZ neuter +neutral JJ neutral +neutral NN neutral +neutralisation NNN neutralisation +neutralise NN neutralise +neutralise VB neutralise +neutralise VBP neutralise +neutralised VBD neutralise +neutralised VBN neutralise +neutraliser NN neutraliser +neutralisers NNS neutraliser +neutralises VBZ neutralise +neutralising VBG neutralise +neutralism NN neutralism +neutralisms NNS neutralism +neutralist NN neutralist +neutralists NNS neutralist +neutralities NNS neutrality +neutrality NN neutrality +neutralization NN neutralization +neutralizations NNS neutralization +neutralize VB neutralize +neutralize VBP neutralize +neutralized VBD neutralize +neutralized VBN neutralize +neutralizer NN neutralizer +neutralizers NNS neutralizer +neutralizes VBZ neutralize +neutralizing VBG neutralize +neutrally RB neutrally +neutralness NN neutralness +neutralnesses NNS neutralness +neutrals NNS neutral +neutretto NN neutretto +neutrettos NNS neutretto +neutrino NN neutrino +neutrinoless JJ neutrinoless +neutrinos NNS neutrino +neutron NN neutron +neutrons NNS neutron +neutropenia NN neutropenia +neutropenic JJ neutropenic +neutrophil JJ neutrophil +neutrophil NN neutrophil +neutrophile NN neutrophile +neutrophiles NNS neutrophile +neutrophilic JJ neutrophilic +neutrophils NNS neutrophil +neutrosphere NN neutrosphere +nevadan NN nevadan +neve NN neve +nevelling NN nevelling +nevelling NNS nevelling +never RB never +never UH never +never-ending JJ never-ending +never-never JJ never-never +never-never NN never-never +never-say-die JJ never-say-die +nevermind NN nevermind +neverminds NNS nevermind +nevermore RB nevermore +nevertheless CC nevertheless +nevertheless RB nevertheless +neves NNS neve +neves NNS nef +nevi NNS nevus +nevirapine NN nevirapine +nevoid JJ nevoid +nevus NN nevus +new JJ new +new-car JJ new-car +new-fashioned JJ new-fashioned +new-made JJ new-made +new-model JJ new-model +new-mown JJ new-mown +new-rich JJ new-rich +new-rich NN new-rich +new-sprung JJ new-sprung +newari NN newari +newbie NN newbie +newbies NNS newbie +newborn JJ newborn +newborn NN newborn +newborns NNS newborn +newcomer NN newcomer +newcomers NNS newcomer +newel NN newel +newels NNS newel +newer JJR new +newest JJS new +newfangled JJ newfangled +newfangledly RB newfangledly +newfangledness NN newfangledness +newfanglednesses NNS newfangledness +newfound JJ newfound +newground NN newground +newie NN newie +newies NNS newie +newish JJ newish +newline NN newline +newlines NNS newline +newly RB newly +newlywed NN newlywed +newlyweds NNS newlywed +newmarket NN newmarket +newmarkets NNS newmarket +newmusic JJ newmusic +newness NN newness +newnesses NNS newness +news NN news +newsagent NN newsagent +newsagents NNS newsagent +newsbeat NN newsbeat +newsbeats NNS newsbeat +newsboard NN newsboard +newsboy NN newsboy +newsboys NNS newsboy +newsbreak NN newsbreak +newsbreaks NNS newsbreak +newscast NN newscast +newscaster NN newscaster +newscasters NNS newscaster +newscasting NN newscasting +newscastings NNS newscasting +newscasts NNS newscast +newsdealer NN newsdealer +newsdealers NNS newsdealer +newsdesk NN newsdesk +newsdesks NNS newsdesk +newses NNS news +newsflash NN newsflash +newsflashes NNS newsflash +newsgathering NN newsgathering +newsgatherings NNS newsgathering +newsgirl NN newsgirl +newsgirls NNS newsgirl +newsgroup NN newsgroup +newsgroups NNS newsgroup +newshawk NN newshawk +newshawks NNS newshawk +newshen NN newshen +newshound NN newshound +newshounds NNS newshound +newsie JJ newsie +newsie NN newsie +newsier JJR newsie +newsier JJR newsy +newsies NNS newsie +newsiest JJS newsie +newsiest JJS newsy +newsiness NN newsiness +newsinesses NNS newsiness +newsless JJ newsless +newslessness NN newslessness +newsletter NN newsletter +newsletters NNS newsletter +newsmagazine NN newsmagazine +newsmagazines NNS newsmagazine +newsmaker NN newsmaker +newsmakers NNS newsmaker +newsman NN newsman +newsmen NNS newsman +newsmonger NN newsmonger +newsmongers NNS newsmonger +newspaper NNN newspaper +newspaperdom NN newspaperdom +newspapering NN newspapering +newspaperings NNS newspapering +newspaperish JJ newspaperish +newspaperman NN newspaperman +newspapermen NNS newspaperman +newspapers NNS newspaper +newspaperwoman NN newspaperwoman +newspaperwomen NNS newspaperwoman +newspeak NN newspeak +newspeaks NNS newspeak +newspeople NNS newsperson +newsperson NN newsperson +newspersons NNS newsperson +newsprint NN newsprint +newsprints NNS newsprint +newsreader NN newsreader +newsreaders NNS newsreader +newsreel NNN newsreel +newsreels NNS newsreel +newsroom NN newsroom +newsrooms NNS newsroom +newssheet NN newssheet +newssheets NNS newssheet +newsstand NN newsstand +newsstands NNS newsstand +newsvendor NN newsvendor +sissonne NN sissonne +sissoo NN sissoo +sissoos NNS sissoo +sissu NN sissu +sissy JJ sissy +sissy NN sissy +sissyish JJ sissyish +sissyness NN sissyness +sissynesses NNS sissyness +sister JJ sister +sister NN sister +sister-in-law NN sister-in-law +sisterhood NN sisterhood +sisterhoods NNS sisterhood +sisterless JJ sisterless +sisterlike JJ sisterlike +sisterliness NN sisterliness +sisterlinesses NNS sisterliness +sisterly RB sisterly +sisters NNS sister +sisters-in-law NNS sister-in-law +sistership NN sistership +sistroid JJ sistroid +sistrum NN sistrum +sistrums NNS sistrum +sistrurus NN sistrurus +sisyridae NN sisyridae +sisyrinchium NN sisyrinchium +sit VB sit +sit VBP sit +sit-down NNN sit-down +sit-up NN sit-up +sit-upon NN sit-upon +sitar NN sitar +sitarist NN sitarist +sitarists NNS sitarist +sitars NNS sitar +sitatunga NN sitatunga +sitatungas NNS sitatunga +sitcom NN sitcom +sitcoms NNS sitcom +sitdown NN sitdown +sitdowns NNS sitdown +site NN site +site VB site +site VBP site +site-specific JJ site-specific +sited VBD site +sited VBN site +sitella NN sitella +sitellas NNS sitella +sites NNS site +sites VBZ site +sitewide JJ sitewide +sitfast NN sitfast +sitfasts NNS sitfast +sith CC sith +sith RB sith +sithe NN sithe +sithen NN sithen +sithens NNS sithen +sithes NNS sithe +siting VBG site +sitologies NNS sitology +sitology NNN sitology +sitomania NN sitomania +sitomanias NNS sitomania +sitophylus NN sitophylus +sitosterol NN sitosterol +sitosterols NNS sitosterol +sitotroga NN sitotroga +sitrep NN sitrep +sitreps NNS sitrep +sits VBZ sit +sitta NN sitta +sitter NN sitter +sitters NNS sitter \ No newline at end of file diff --git a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java index f2558635dc..77287066ac 100644 --- a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java +++ b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java @@ -10,7 +10,6 @@ import com.baeldung.apache.beam.intro.WordCount; public class WordCountUnitTest { @Test - // @Ignore public void givenInputFile_whenWordCountRuns_thenJobFinishWithoutError() { boolean jobDone = WordCount.wordCount("src/test/resources/wordcount.txt", "target/output"); assertTrue(jobDone); diff --git a/apache-spark/src/main/resources/log4j.properties b/apache-spark/src/main/resources/log4j.properties new file mode 100644 index 0000000000..07a2943655 --- /dev/null +++ b/apache-spark/src/main/resources/log4j.properties @@ -0,0 +1,42 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Set everything to be logged to the console +log4j.rootCategory=WARN, console +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.target=System.err +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n + +# Set the default spark-shell log level to WARN. When running the spark-shell, the +# log level for this class is used to overwrite the root logger's log level, so that +# the user can have different defaults for the shell and regular Spark apps. +log4j.logger.org.apache.spark.repl.Main=WARN + +# Settings to quiet third party logs that are too verbose +log4j.logger.org.spark_project.jetty=WARN +log4j.logger.org.spark_project.jetty.util.component.AbstractLifeCycle=ERROR +log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO +log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO + +# SPARK-9183: Settings to avoid annoying messages when looking up nonexistent UDFs in SparkSQL with Hive support +log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL +log4j.logger.org.apache.hadoop.hive.ql.exec.FunctionRegistry=ERROR + +# Parquet related logging +log4j.logger.org.apache.parquet.CorruptStatistics=ERROR +log4j.logger.parquet.CorruptStatistics=ERROR diff --git a/apache-tapestry/pom.xml b/apache-tapestry/pom.xml index 13ae49b0ba..7a4c2b53b5 100644 --- a/apache-tapestry/pom.xml +++ b/apache-tapestry/pom.xml @@ -32,7 +32,6 @@ - @@ -110,8 +109,6 @@ - - jboss diff --git a/apache-thrift/pom.xml b/apache-thrift/pom.xml index 9562ae7dfe..d2623f92e7 100644 --- a/apache-thrift/pom.xml +++ b/apache-thrift/pom.xml @@ -29,7 +29,7 @@ org.slf4j slf4j-simple - ${org.slf4j.slf4j-simple.version} + ${org.slf4j.version} test @@ -61,7 +61,6 @@ 0.10.0 0.1.11 - 1.7.12 3.0.0 diff --git a/aws-reactive/pom.xml b/aws-reactive/pom.xml index ea1e0c44a4..923e1361ab 100644 --- a/aws-reactive/pom.xml +++ b/aws-reactive/pom.xml @@ -93,5 +93,5 @@ 2.2.1.RELEASE 2.10.27 - + \ No newline at end of file diff --git a/aws/README.md b/aws/README.md index fcb9735878..9006c2d190 100644 --- a/aws/README.md +++ b/aws/README.md @@ -6,7 +6,7 @@ This module contains articles about Amazon Web Services (AWS) - [AWS Lambda Using DynamoDB With Java](https://www.baeldung.com/aws-lambda-dynamodb-java) - [AWS S3 with Java](https://www.baeldung.com/aws-s3-java) -- [AWS Lambda With Java](https://www.baeldung.com/java-aws-lambda) +- [A Basic AWS Lambda Example With Java](https://www.baeldung.com/java-aws-lambda) - [Managing EC2 Instances in Java](https://www.baeldung.com/ec2-java) - [Multipart Uploads in Amazon S3 with Java](https://www.baeldung.com/aws-s3-multipart-upload) - [Integration Testing with a Local DynamoDB Instance](https://www.baeldung.com/dynamodb-local-integration-tests) diff --git a/axon/src/main/java/com/baeldung/axon/OrderApplicationConfiguration.java b/axon/src/main/java/com/baeldung/axon/OrderApplicationConfiguration.java new file mode 100644 index 0000000000..8b743144b4 --- /dev/null +++ b/axon/src/main/java/com/baeldung/axon/OrderApplicationConfiguration.java @@ -0,0 +1,18 @@ +package com.baeldung.axon; + +import org.axonframework.eventsourcing.EventCountSnapshotTriggerDefinition; +import org.axonframework.eventsourcing.SnapshotTriggerDefinition; +import org.axonframework.eventsourcing.Snapshotter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OrderApplicationConfiguration { + + @Bean + public SnapshotTriggerDefinition orderAggregateSnapshotTriggerDefinition(Snapshotter snapshotter, + @Value("${axon.aggregate.order.snapshot-threshold:250}") int threshold) { + return new EventCountSnapshotTriggerDefinition(snapshotter, threshold); + } +} diff --git a/axon/src/main/java/com/baeldung/axon/commandmodel/order/OrderAggregate.java b/axon/src/main/java/com/baeldung/axon/commandmodel/order/OrderAggregate.java index 97342bdb3a..1065e9d22b 100644 --- a/axon/src/main/java/com/baeldung/axon/commandmodel/order/OrderAggregate.java +++ b/axon/src/main/java/com/baeldung/axon/commandmodel/order/OrderAggregate.java @@ -23,7 +23,7 @@ import java.util.Map; import static org.axonframework.modelling.command.AggregateLifecycle.apply; -@Aggregate +@Aggregate(snapshotTriggerDefinition = "orderAggregateSnapshotTriggerDefinition") public class OrderAggregate { @AggregateIdentifier diff --git a/core-groovy-2/pom.xml b/core-groovy-2/pom.xml index f8ef654293..89df666333 100644 --- a/core-groovy-2/pom.xml +++ b/core-groovy-2/pom.xml @@ -166,7 +166,6 @@ 2.4.0 1.1-groovy-2.4 1.1.3 - 1.2.3 2.5.7 3.1.0 3.8.0 diff --git a/core-java-modules/core-java-11-2/README.md b/core-java-modules/core-java-11-2/README.md index ca9a306b82..93920864cc 100644 --- a/core-java-modules/core-java-11-2/README.md +++ b/core-java-modules/core-java-11-2/README.md @@ -8,3 +8,4 @@ This module contains articles about Java 11 core features - [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors) - [New Features in Java 11](https://www.baeldung.com/java-11-new-features) - [Getting the Java Version at Runtime](https://www.baeldung.com/get-java-version-runtime) +- [Invoking a SOAP Web Service in Java](https://www.baeldung.com/java-soap-web-service) diff --git a/core-java-modules/core-java-12/README.md b/core-java-modules/core-java-12/README.md index b509be876c..4ad7bae21c 100644 --- a/core-java-modules/core-java-12/README.md +++ b/core-java-modules/core-java-12/README.md @@ -2,3 +2,4 @@ - [String API Updates in Java 12](https://www.baeldung.com/java12-string-api) - [New Features in Java 12](https://www.baeldung.com/java-12-new-features) +- [Compare the Content of Two Files in Java](https://www.baeldung.com/java-compare-files) diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml index ce7ec72aeb..931fce820b 100644 --- a/core-java-modules/core-java-12/pom.xml +++ b/core-java-modules/core-java-12/pom.xml @@ -1,60 +1,60 @@ - 4.0.0 - core-java-12 - 0.1.0-SNAPSHOT - core-java-12 - jar - http://maven.apache.org + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-12 + 0.1.0-SNAPSHOT + core-java-12 + jar + http://maven.apache.org - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + - - - org.assertj - assertj-core - ${assertj.version} - test - - - commons-io - commons-io - 2.11.0 - - + + + org.assertj + assertj-core + ${assertj.version} + test + + + commons-io + commons-io + 2.11.0 + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source.version} - ${maven.compiler.target.version} - --enable-preview - - - - maven-surefire-plugin - - --enable-preview - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source.version} + ${maven.compiler.target.version} + --enable-preview + + + + maven-surefire-plugin + + --enable-preview + + + + - - 12 - 12 - 3.6.1 - + + 12 + 12 + 3.6.1 + \ No newline at end of file diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml index f3382f6577..a03332d8bc 100644 --- a/core-java-modules/core-java-14/pom.xml +++ b/core-java-modules/core-java-14/pom.xml @@ -14,7 +14,7 @@ 1.0.0-SNAPSHOT ../../ - + org.assertj @@ -35,7 +35,7 @@ test - + diff --git a/core-java-modules/core-java-16/README.md b/core-java-modules/core-java-16/README.md index 760513189f..b2740d194c 100644 --- a/core-java-modules/core-java-16/README.md +++ b/core-java-modules/core-java-16/README.md @@ -1,3 +1,7 @@ ### Relevant articles: - [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection) +- [Guide to mapMulti in Stream API](https://www.baeldung.com/java-mapmulti) +- [Collecting Stream Elements into a List in Java](https://www.baeldung.com/java-stream-to-list-collecting) +- [New Features in Java 16](https://www.baeldung.com/java-16-new-features) +- [Guide to Java 8 groupingBy Collector](https://www.baeldung.com/java-groupingby-collector) diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml index a8a84511db..5d10325f03 100644 --- a/core-java-modules/core-java-16/pom.xml +++ b/core-java-modules/core-java-16/pom.xml @@ -1,53 +1,86 @@ - 4.0.0 - core-java-16 - 0.1.0-SNAPSHOT - core-java-16 - jar - http://maven.apache.org + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-16 + 0.1.0-SNAPSHOT + core-java-16 + jar + http://maven.apache.org - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../ - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + - + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.apache.commons + commons-lang3 + 3.12.0 + - org.assertj - assertj-core - ${assertj.version} + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} test - org.apache.commons - commons-lang3 - 3.12.0 + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test - + - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.release} + --enable-preview + ${maven.compiler.source.version} + ${maven.compiler.target.version} + + org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} + maven-surefire-plugin + ${surefire.plugin.version} - ${maven.compiler.source.version} - ${maven.compiler.target.version} + --enable-preview + 1 + + + org.apache.maven.surefire + surefire-api + ${surefire.plugin.version} + + - - + + - - 16 - 16 - 3.6.1 - + + 16 + 16 + 16 + 3.8.1 + 3.0.0-M5 + 3.17.2 + \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/HelloWorld.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/HelloWorld.java new file mode 100644 index 0000000000..7d72c4b71c --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/HelloWorld.java @@ -0,0 +1,7 @@ +package com.baeldung.features; + +interface HelloWorld { + default String hello() { + return "world"; + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/OuterClass.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/OuterClass.java new file mode 100644 index 0000000000..6e08674bff --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/OuterClass.java @@ -0,0 +1,9 @@ +package com.baeldung.features; + +import com.baeldung.features.record.Book; + +public class OuterClass { + class InnerClass { + Book book = new Book("Title", "author", "isbn"); + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/VectorExample.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/VectorExample.java new file mode 100644 index 0000000000..1f25290270 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/VectorExample.java @@ -0,0 +1,23 @@ +package com.baeldung.features; + +import jdk.incubator.vector.IntVector; + +public class VectorExample { + public int[] scalarComputation(int[] a, int[] b) { + var c = new int[a.length]; + for (int i = 0; i < a.length; i++) { + c[i] = a[i] * b[i]; + } + return c; + } + + public int[] vectorComputation(int[] a, int[] b) { + var c = new int[a.length]; + + var vectorA = IntVector.fromArray(IntVector.SPECIES_128, a, 0); + var vectorB = IntVector.fromArray(IntVector.SPECIES_128, b, 0); + var vectorC = vectorA.mul(vectorB); + vectorC.intoArray(c, 0); + return c; + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/model/Book.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/model/Book.java new file mode 100644 index 0000000000..c532e41649 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/model/Book.java @@ -0,0 +1,44 @@ +package com.baeldung.features.model; + +import java.util.Objects; + +public final class Book { + private final String title; + private final String author; + private final String isbn; + + public Book(String title, String author, String isbn) { + this.title = title; + this.author = author; + this.isbn = isbn; + } + + public String getTitle() { + return title; + } + + public String getAuthor() { + return author; + } + + public String getIsbn() { + return isbn; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Book book = (Book) o; + return Objects.equals(title, book.title) && Objects.equals(author, book.author) && Objects.equals(isbn, book.isbn); + } + + @Override + public int hashCode() { + return Objects.hash(title, author, isbn); + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/record/Book.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/record/Book.java new file mode 100644 index 0000000000..3bddf143be --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/record/Book.java @@ -0,0 +1,4 @@ +package com.baeldung.features.record; + +public record Book(String title, String author, String isbn) { +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/JungleAnimal.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/JungleAnimal.java new file mode 100644 index 0000000000..1853f8449c --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/JungleAnimal.java @@ -0,0 +1,4 @@ +package com.baeldung.features.sealed; + +public sealed interface JungleAnimal permits Monkey, Snake { +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Monkey.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Monkey.java new file mode 100644 index 0000000000..aeddfdddda --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Monkey.java @@ -0,0 +1,4 @@ +package com.baeldung.features.sealed; + +public final class Monkey implements JungleAnimal { +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Sealed.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Sealed.java new file mode 100644 index 0000000000..1ee4ff6e57 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Sealed.java @@ -0,0 +1,13 @@ +package com.baeldung.features.sealed; + +public class Sealed { + public static void main(String... args) { + JungleAnimal j = new Monkey(); + + if (j instanceof Monkey m) { + // do logic + } else if (j instanceof Snake s) { + // do logic + } + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Snake.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Snake.java new file mode 100644 index 0000000000..c35575f5e0 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/features/sealed/Snake.java @@ -0,0 +1,4 @@ +package com.baeldung.features.sealed; + +public non-sealed class Snake implements JungleAnimal { +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java index adaa1044ff..960a75a58e 100644 --- a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/groupingby/BlogPost.java @@ -1,5 +1,8 @@ package com.baeldung.java_16_features.groupingby; +import java.util.IntSummaryStatistics; + + public class BlogPost { private String title; @@ -7,7 +10,9 @@ public class BlogPost { private BlogPostType type; private int likes; record AuthPostTypesLikes(String author, BlogPostType type, int likes) {}; - + record PostcountTitlesLikesStats(long postCount, String titles, IntSummaryStatistics likesStats){}; + record TitlesBoundedSumOfLikes(String titles, int boundedSumOfLikes) {}; + public BlogPost(String title, String author, BlogPostType type, int likes) { this.title = title; this.author = author; diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Album.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Album.java new file mode 100644 index 0000000000..fa7ec02307 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Album.java @@ -0,0 +1,49 @@ +package com.baeldung.java_16_features.mapmulti; + +import java.util.List; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +public class Album { + + private String albumName; + private int albumCost; + private List artists; + + Album(String name, int albumCost, List artists) { + this.albumName = name; + this.artists = artists; + this.albumCost = albumCost; + } + + public void artistAlbumPairsToMajorLabels(Consumer> consumer) { + + for (Artist artist : artists) { + if (artist.isAssociatedMajorLabels()) { + String concatLabels = artist.getMajorLabels() + .stream() + .collect(Collectors.joining(",")); + consumer.accept(new ImmutablePair<>(artist.getName() + ":" + albumName, concatLabels)); + } + } + } + + public String getAlbumName() { + return albumName; + } + + public int getAlbumCost() { + return albumCost; + } + + List getArtists() { + return artists; + } + + public String toString() { + return albumName; + } +} diff --git a/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Artist.java b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Artist.java new file mode 100644 index 0000000000..b3b9b7aa10 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/com/baeldung/java_16_features/mapmulti/Artist.java @@ -0,0 +1,50 @@ +package com.baeldung.java_16_features.mapmulti; + +import java.util.List; +import java.util.Objects; + +public class Artist { + + private final String name; + private boolean associatedMajorLabels; + private List majorLabels; + + Artist(String name, boolean associatedMajorLabels, List majorLabels) { + this.name = name; + this.associatedMajorLabels = associatedMajorLabels; + this.majorLabels = majorLabels; + } + + public String getName() { + return name; + } + + public boolean isAssociatedMajorLabels() { + return associatedMajorLabels; + } + + public List getMajorLabels() { + return majorLabels; + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Artist other = (Artist) obj; + return Objects.equals(name, other.name); + } + + public String toString() { + return name; + } +} diff --git a/core-java-modules/core-java-16/src/main/java/module-info.java b/core-java-modules/core-java-16/src/main/java/module-info.java new file mode 100644 index 0000000000..ee983a6832 --- /dev/null +++ b/core-java-modules/core-java-16/src/main/java/module-info.java @@ -0,0 +1,4 @@ +module core.java { + requires jdk.incubator.vector; + requires org.apache.commons.lang3; +} \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/features/DayPeriodSupportUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/DayPeriodSupportUnitTest.java new file mode 100644 index 0000000000..6ae6232f00 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/DayPeriodSupportUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.features; + +import org.junit.jupiter.api.Test; + +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +import static org.assertj.core.api.Assertions.assertThat; + +public class DayPeriodSupportUnitTest { + + @Test + public void givenASpecificTime_whenFormattingUsingTheBSymbol_thenExpectVerbosePeriodOfDay() { + LocalTime date = LocalTime.parse("15:25:08.690791"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h B"); + assertThat(date.format(formatter)).isEqualTo("3 in the afternoon"); + + formatter = DateTimeFormatter.ofPattern("h BBBB"); + assertThat(date.format(formatter)).isEqualTo("3 in the afternoon"); + + formatter = DateTimeFormatter.ofPattern("h BBBBB"); + assertThat(date.format(formatter)).isEqualTo("3 in the afternoon"); + } +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/features/HelloWorldUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/HelloWorldUnitTest.java new file mode 100644 index 0000000000..d421f13dd1 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/HelloWorldUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.features; + + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +import static java.lang.ClassLoader.getSystemClassLoader; +import static org.assertj.core.api.Assertions.assertThat; + +class HelloWorldUnitTest { + + @Test + public void givenAnInterfaceWithDefaulMethod_whenCreatingProxyInstance_thenCanInvokeDefaultMethod() throws Exception { + Object proxy = Proxy.newProxyInstance(getSystemClassLoader(), new Class>[] { HelloWorld.class }, + (prox, method, args) -> { + if (method.isDefault()) { + return InvocationHandler.invokeDefault(prox, method, args); + } + return method.invoke(prox, args); + } + ); + Method method = proxy.getClass().getMethod("hello"); + assertThat(method.invoke(proxy)).isEqualTo("world"); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/features/InstanceOfPatternMatchingUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/InstanceOfPatternMatchingUnitTest.java new file mode 100644 index 0000000000..7243957332 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/InstanceOfPatternMatchingUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.features; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class InstanceOfPatternMatchingUnitTest { + + @Test + void givenTheNewPatternMatchingAbility_whenComparingAgainstTheTradiationalApproach_thenBothVariablesAreEqual() { + Object obj = "TEST"; + + if (obj instanceof String a) { + String b = (String) obj; + assertThat(a).isEqualTo(b); + } + } +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/features/StreamToListUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/StreamToListUnitTest.java new file mode 100644 index 0000000000..00d090a240 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/StreamToListUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.features; + +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class StreamToListUnitTest { + + @Test + void givenAStream_whenCreatingANewListFromStream_thenCollectorsOrInbuiltFunctionAreEquivalent() { + List integersAsString = Arrays.asList("1", "2", "3"); + List ints = integersAsString.stream().map(Integer::parseInt).collect(Collectors.toList()); + List intsEquivalent = integersAsString.stream().map(Integer::parseInt).toList(); + assertThat(ints).isEqualTo(intsEquivalent); + } +} diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/features/VectorExampleUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/VectorExampleUnitTest.java new file mode 100644 index 0000000000..981f106ec7 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/features/VectorExampleUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.features; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class VectorExampleUnitTest { + + @Test + void givenAScalarComputation_whenCalculatingUsingVectorAPI_thenResultIsSameAsPreviousMethodOfComputation() { + VectorExample objectUnderTest = new VectorExample(); + + int[] a = {1, 2, 3, 4}; + int[] b = {5, 6, 7, 8}; + + int[] result = objectUnderTest.scalarComputation(a, b); + int[] result2 = objectUnderTest.vectorComputation(a, b); + + assertArrayEquals(result, result2); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java index 0e926246ff..0dea142658 100644 --- a/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/groupingby/JavaGroupingByCollectorUnitTest.java @@ -5,6 +5,8 @@ import static java.util.stream.Collectors.averagingInt; import static java.util.stream.Collectors.counting; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.groupingByConcurrent; +import static java.util.stream.Collectors.collectingAndThen; +import static java.util.stream.Collectors.toMap; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.mapping; import static java.util.stream.Collectors.maxBy; @@ -13,6 +15,7 @@ import static java.util.stream.Collectors.summingInt; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.offset; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -201,9 +204,9 @@ public class JavaGroupingByCollectorUnitTest { @Test public void givenAListOfPosts_whenGroupedByComplexMapPairKeyType_thenGetAMapBetweenPairAndList() { - + Map, List> postsPerTypeAndAuthor = posts.stream() - .collect(groupingBy(post -> new ImmutablePair<>(post.getType(), post.getAuthor()))); + .collect(groupingBy(post -> new ImmutablePair<>(post.getType(), post.getAuthor()))); List result = postsPerTypeAndAuthor.get(new ImmutablePair<>(BlogPostType.GUIDE, "Author 1")); @@ -218,7 +221,7 @@ public class JavaGroupingByCollectorUnitTest { @Test public void givenAListOfPosts_whenGroupedByComplexMapKeyType_thenGetAMapBetweenTupleAndList() { - + Map> postsPerTypeAndAuthor = posts.stream() .collect(groupingBy(post -> new Tuple(post.getType(), post.getAuthor()))); @@ -232,12 +235,12 @@ public class JavaGroupingByCollectorUnitTest { assertThat(blogPost.getType()).isEqualTo(BlogPostType.GUIDE); assertThat(blogPost.getAuthor()).isEqualTo("Author 1"); } - + @Test public void givenAListOfPosts_whenGroupedByRecord_thenGetAMapBetweenRecordAndList() { - + Map> postsPerTypeAndAuthor = posts.stream() - .collect(groupingBy(post -> new BlogPost.AuthPostTypesLikes(post.getAuthor(), post.getType(), post.getLikes()))); + .collect(groupingBy(post -> new BlogPost.AuthPostTypesLikes(post.getAuthor(), post.getType(), post.getLikes()))); List result = postsPerTypeAndAuthor.get(new BlogPost.AuthPostTypesLikes("Author 1", BlogPostType.GUIDE, 20)); @@ -250,5 +253,50 @@ public class JavaGroupingByCollectorUnitTest { assertThat(blogPost.getAuthor()).isEqualTo("Author 1"); assertThat(blogPost.getLikes()).isEqualTo(20); } - + + @Test + public void givenListOfPosts_whenGroupedByAuthor_thenGetAMapUsingCollectingAndThen() { + + Map postsPerAuthor = posts.stream() + .collect(groupingBy(BlogPost::getAuthor, collectingAndThen(toList(), list -> { + long count = list.stream() + .map(BlogPost::getTitle) + .collect(counting()); + String titles = list.stream() + .map(BlogPost::getTitle) + .collect(joining(" : ")); + IntSummaryStatistics summary = list.stream() + .collect(summarizingInt(BlogPost::getLikes)); + return new BlogPost.PostcountTitlesLikesStats(count, titles, summary); + }))); + + BlogPost.PostcountTitlesLikesStats result = postsPerAuthor.get("Author 1"); + assertThat(result.postCount()).isEqualTo(3L); + assertThat(result.titles()).isEqualTo("News item 1 : Programming guide : Tech review 2"); + assertThat(result.likesStats().getMax()).isEqualTo(20); + assertThat(result.likesStats().getMin()).isEqualTo(15); + assertThat(result.likesStats().getAverage()).isEqualTo(16.666d, offset(0.001d)); + } + + @Test + public void givenListOfPosts_whenGroupedByAuthor_thenGetAMapUsingToMap() { + + int maxValLikes = 17; + Map postsPerAuthor = posts.stream() + .collect(toMap(BlogPost::getAuthor, post -> { + int likes = (post.getLikes() > maxValLikes) ? maxValLikes : post.getLikes(); + return new BlogPost.TitlesBoundedSumOfLikes(post.getTitle(), likes); + }, (u1, u2) -> { + int likes = (u2.boundedSumOfLikes() > maxValLikes) ? maxValLikes : u2.boundedSumOfLikes(); + return new BlogPost.TitlesBoundedSumOfLikes(u1.titles() + .toUpperCase() + " : " + + u2.titles() + .toUpperCase(), + u1.boundedSumOfLikes() + likes); + })); + + BlogPost.TitlesBoundedSumOfLikes result = postsPerAuthor.get("Author 1"); + assertThat(result.titles()).isEqualTo("NEWS ITEM 1 : PROGRAMMING GUIDE : TECH REVIEW 2"); + assertThat(result.boundedSumOfLikes()).isEqualTo(47); + } } diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/mapmulti/JavaStreamMapMultiUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/mapmulti/JavaStreamMapMultiUnitTest.java new file mode 100644 index 0000000000..0ab1a95ed0 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/java_16_features/mapmulti/JavaStreamMapMultiUnitTest.java @@ -0,0 +1,134 @@ +package com.baeldung.java_16_features.mapmulti; + +import static java.util.stream.Collectors.toList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.offset; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.jupiter.api.Test; + +public class JavaStreamMapMultiUnitTest { + + private static final List albums = Arrays.asList(new Album("album1", 10, Arrays.asList(new Artist("bob", true, Arrays.asList("label1", "label3")), new Artist("tom", true, Arrays.asList("label2", "label3")))), + new Album("album2", 20, Arrays.asList(new Artist("bill", true, Arrays.asList("label2", "label3")), new Artist("tom", true, Arrays.asList("label2", "label4"))))); + + @Test + public void givenAListOfintegers_whenMapMulti_thenGetListOfOfEvenDoublesPlusPercentage() { + + List integers = Arrays.asList(1, 2, 3, 4, 5); + double percentage = .01; + List evenDoubles = integers.stream() + . mapMulti((integer, consumer) -> { + if (integer % 2 == 0) { + consumer.accept((double) integer * (1 + percentage)); + } + }) + .collect(toList()); + + assertThat(evenDoubles).containsAll(Arrays.asList(2.02D, 4.04D)); + } + + @Test + public void givenAListOfintegers_whenFilterMap_thenGetListOfOfEvenDoublesPlusPercentage() { + + List integers = Arrays.asList(1, 2, 3, 4, 5); + double percentage = .01; + List evenDoubles = integers.stream() + .filter(integer -> integer % 2 == 0) + . map(integer -> ((double) integer * (1 + percentage))) + .collect(toList()); + + assertThat(evenDoubles).containsAll(Arrays.asList(2.02D, 4.04D)); + } + + @Test + public void givenAListOfintegers_whenMapMultiToDouble_thenGetSumOfEvenNumbersAfterApplyPercentage() { + + List integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7); + double percentage = .01; + double sum = integers.stream() + .mapMultiToDouble((integer, consumer) -> { + if (integer % 2 == 0) { + consumer.accept(integer * (1 + percentage)); + } + }) + .sum(); + + assertThat(sum).isEqualTo(12.12, offset(0.001d)); + } + + @Test + public void givenAListOfAlbums_whenFlatMap_thenGetListOfArtistAlbumPairs() { + + List> artistAlbum = albums.stream() + .flatMap(album -> album.getArtists() + .stream() + .map(artist -> new ImmutablePair(artist.getName(), album.getAlbumName()))) + .collect(toList()); + + assertThat(artistAlbum).contains(new ImmutablePair("bob", "album1"), new ImmutablePair("tom", "album1"), new ImmutablePair("bill", "album2"), new ImmutablePair("tom", "album2")); + } + + @Test + public void givenAListOfAlbums_whenMapMulti_thenGetListOfPairsOfArtistAlbum() { + + List> artistAlbum = albums.stream() + .> mapMulti((album, consumer) -> { + for (Artist artist : album.getArtists()) { + consumer.accept(new ImmutablePair(artist.getName(), album.getAlbumName())); + } + }) + .collect(toList()); + + assertThat(artistAlbum).contains(new ImmutablePair("bob", "album1"), new ImmutablePair("tom", "album1"), + new ImmutablePair("bill", "album2"), new ImmutablePair("tom", "album2")); + } + + @Test + public void givenAListOfAlbums_whenFlatMap_thenGetListOfArtistAlbumjPairsBelowGivenCost() { + + int upperCost = 9; + List> artistAlbum = albums.stream() + .flatMap(album -> album.getArtists() + .stream() + .filter(artist -> upperCost > album.getAlbumCost()) + .map(artist -> new ImmutablePair(artist.getName(), album.getAlbumName()))) + .collect(toList()); + + assertTrue(artistAlbum.isEmpty()); + } + + @Test + public void givenAListOfAlbums_whenMapMulti_thenGetListOfArtistAlbumPairsBelowGivenCost() { + + int upperCost = 9; + List> artistAlbum = albums.stream() + .> mapMulti((album, consumer) -> { + if (album.getAlbumCost() < upperCost) { + for (Artist artist : album.getArtists()) { + consumer.accept(new ImmutablePair(artist.getName(), album.getAlbumName())); + } + } + }) + .collect(toList()); + + assertTrue(artistAlbum.isEmpty()); + } + + @Test + public void givenAListOfAlbums_whenMapMulti_thenGetPairsOfArtistMajorLabelsUsingMethodReference() { + + List> artistLabels = albums.stream() + .mapMulti(Album::artistAlbumPairsToMajorLabels) + .collect(toList()); + + assertThat(artistLabels).contains(new ImmutablePair("bob:album1", "label1,label3"), new ImmutablePair("tom:album1", "label2,label3"), + new ImmutablePair("bill:album2", "label2,label3"), new ImmutablePair("tom:album2", "label2,label4")); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java b/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java new file mode 100644 index 0000000000..e1330bb4f7 --- /dev/null +++ b/core-java-modules/core-java-16/src/test/java/com/baeldung/streams/StreamToListComparisonWithCollectorsToListUnitTest.java @@ -0,0 +1,128 @@ +package com.baeldung.streams; + +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class StreamToListComparisonWithCollectorsToListUnitTest { + + @Test + public void whenAddingtoCollectToList_thenSuccess() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertDoesNotThrow(() -> { + result.add("test"); + }); + } + + @Test + public void whenSortingtoCollectToList_thenSuccess() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertDoesNotThrow(() -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenAddingCollectUnmodifiableToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.add("test"); + }); + } + + @Test + public void whenSortingCollectUnmodifiableToList_thenSortException() { + + List result = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenAddingStreamToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .toList(); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.add("test"); + }); + } + + @Test + public void whenSortingStreamToList_thenException() { + + List result = Stream.of(Locale.getISOCountries()) + .toList(); + + Assertions.assertThrows(UnsupportedOperationException.class, () -> { + result.sort(String::compareToIgnoreCase); + }); + } + + @Test + public void whenComparingStreamToList_withCollectToList_thenEqual() { + + List streamToList = Stream.of(Locale.getISOCountries()) + .toList(); + List collectToList = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toList()); + + Assertions.assertEquals(streamToList, collectToList); + } + + @Test + public void whenComparingStreamToList_withUnmodifiedCollectToList_thenEqual() { + + List streamToList = Stream.of(Locale.getISOCountries()) + .toList(); + List collectToUnmodifiableList = Stream.of(Locale.getISOCountries()) + .collect(Collectors.toUnmodifiableList()); + + Assertions.assertEquals(streamToList, collectToUnmodifiableList); + } + + @Test + public void whenNullCollectorsToList_thenSuccess() { + + Assertions.assertDoesNotThrow(() -> { + Stream.of(null, null) + .collect(Collectors.toList()); + }); + } + + @Test + public void whenNullCollectorsUnmodifiableToList_thenException() { + + Assertions.assertThrows(NullPointerException.class, () -> { + Stream.of(null, null) + .collect(Collectors.toUnmodifiableList()); + }); + } + + @Test + public void whenNullStreamToList_thenSuccess() { + + Assertions.assertDoesNotThrow(() -> { + Stream.of(null, null) + .toList(); + }); + } + +} diff --git a/core-java-modules/core-java-8-2/pom.xml b/core-java-modules/core-java-8-2/pom.xml index e1a861a63c..f3e60f8d5f 100644 --- a/core-java-modules/core-java-8-2/pom.xml +++ b/core-java-modules/core-java-8-2/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-8-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8-datetime-2/pom.xml b/core-java-modules/core-java-8-datetime-2/pom.xml index 9972122544..a5a0417374 100644 --- a/core-java-modules/core-java-8-datetime-2/pom.xml +++ b/core-java-modules/core-java-8-datetime-2/pom.xml @@ -7,7 +7,7 @@ ${project.parent.version} core-java-8-datetime-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml index 48b2d062b0..a79d5d089b 100644 --- a/core-java-modules/core-java-8-datetime/pom.xml +++ b/core-java-modules/core-java-8-datetime/pom.xml @@ -7,7 +7,7 @@ ${project.parent.version} core-java-8-datetime jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8/README.md b/core-java-modules/core-java-8/README.md index 72bdafe5fa..ff4ceaf6db 100644 --- a/core-java-modules/core-java-8/README.md +++ b/core-java-modules/core-java-8/README.md @@ -4,7 +4,6 @@ This module contains articles about Java 8 core features ### Relevant Articles: - [New Features in Java 8](https://www.baeldung.com/java-8-new-features) -- [Guide to Java 8 groupingBy Collector](https://www.baeldung.com/java-groupingby-collector) - [Strategy Design Pattern in Java 8](https://www.baeldung.com/java-strategy-pattern) - [Guide to Java 8 Comparator.comparing()](https://www.baeldung.com/java-8-comparator-comparing) - [Guide to the Java 8 forEach](https://www.baeldung.com/foreach-java) diff --git a/core-java-modules/core-java-8/pom.xml b/core-java-modules/core-java-8/pom.xml index 13b2fbcf89..a7a2a1a0f8 100644 --- a/core-java-modules/core-java-8/pom.xml +++ b/core-java-modules/core-java-8/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-8 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPost.java b/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPost.java deleted file mode 100644 index afc05e356a..0000000000 --- a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPost.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.java_8_features.groupingby; - -public class BlogPost { - private String title; - private String author; - private BlogPostType type; - private int likes; - - public BlogPost(String title, String author, BlogPostType type, int likes) { - this.title = title; - this.author = author; - this.type = type; - this.likes = likes; - } - - public String getTitle() { - return title; - } - - public String getAuthor() { - return author; - } - - public BlogPostType getType() { - return type; - } - - public int getLikes() { - return likes; - } - - @Override - public String toString() { - return "BlogPost{" + "title='" + title + '\'' + ", type=" + type + ", likes=" + likes + '}'; - } -} diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPostType.java b/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPostType.java deleted file mode 100644 index 2029784e91..0000000000 --- a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/BlogPostType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.java_8_features.groupingby; - -public enum BlogPostType { - NEWS, REVIEW, GUIDE -} diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java b/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java deleted file mode 100644 index 82a84bb2d6..0000000000 --- a/core-java-modules/core-java-8/src/main/java/com/baeldung/java_8_features/groupingby/Tuple.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.java_8_features.groupingby; - -import java.util.Objects; - -public class Tuple { - private final BlogPostType type; - private final String author; - - public Tuple(BlogPostType type, String author) { - this.type = type; - this.author = author; - } - - public BlogPostType getType() { - return type; - } - - public String getAuthor() { - return author; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - Tuple tuple = (Tuple) o; - return type == tuple.type && author.equals(tuple.author); - } - - @Override - public int hashCode() { - return Objects.hash(type, author); - } - - @Override - public String toString() { - return "Tuple{" + "type=" + type + ", author='" + author + '\'' + '}'; - } -} diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java b/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java deleted file mode 100644 index 1da705294e..0000000000 --- a/core-java-modules/core-java-8/src/test/java/com/baeldung/java_8_features/groupingby/Java8GroupingByCollectorUnitTest.java +++ /dev/null @@ -1,215 +0,0 @@ -package com.baeldung.java_8_features.groupingby; - -import static java.util.Comparator.comparingInt; -import static java.util.stream.Collectors.averagingInt; -import static java.util.stream.Collectors.counting; -import static java.util.stream.Collectors.groupingBy; -import static java.util.stream.Collectors.groupingByConcurrent; -import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.mapping; -import static java.util.stream.Collectors.maxBy; -import static java.util.stream.Collectors.summarizingInt; -import static java.util.stream.Collectors.summingInt; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toSet; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; -import java.util.EnumMap; -import java.util.IntSummaryStatistics; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ConcurrentMap; - -import org.junit.Test; - -public class Java8GroupingByCollectorUnitTest { - - private static final List posts = Arrays.asList(new BlogPost("News item 1", "Author 1", BlogPostType.NEWS, 15), new BlogPost("Tech review 1", "Author 2", BlogPostType.REVIEW, 5), - new BlogPost("Programming guide", "Author 1", BlogPostType.GUIDE, 20), new BlogPost("News item 2", "Author 2", BlogPostType.NEWS, 35), new BlogPost("Tech review 2", "Author 1", BlogPostType.REVIEW, 15)); - - @Test - public void givenAListOfPosts_whenGroupedByType_thenGetAMapBetweenTypeAndPosts() { - Map> postsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType)); - - assertEquals(2, postsPerType.get(BlogPostType.NEWS) - .size()); - assertEquals(1, postsPerType.get(BlogPostType.GUIDE) - .size()); - assertEquals(2, postsPerType.get(BlogPostType.REVIEW) - .size()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndTheirTitlesAreJoinedInAString_thenGetAMapBetweenTypeAndCsvTitles() { - Map postsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, mapping(BlogPost::getTitle, joining(", ", "Post titles: [", "]")))); - - assertEquals("Post titles: [News item 1, News item 2]", postsPerType.get(BlogPostType.NEWS)); - assertEquals("Post titles: [Programming guide]", postsPerType.get(BlogPostType.GUIDE)); - assertEquals("Post titles: [Tech review 1, Tech review 2]", postsPerType.get(BlogPostType.REVIEW)); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndSumTheLikes_thenGetAMapBetweenTypeAndPostLikes() { - Map likesPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, summingInt(BlogPost::getLikes))); - - assertEquals(50, likesPerType.get(BlogPostType.NEWS) - .intValue()); - assertEquals(20, likesPerType.get(BlogPostType.REVIEW) - .intValue()); - assertEquals(20, likesPerType.get(BlogPostType.GUIDE) - .intValue()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeInAnEnumMap_thenGetAnEnumMapBetweenTypeAndPosts() { - EnumMap> postsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, () -> new EnumMap<>(BlogPostType.class), toList())); - - assertEquals(2, postsPerType.get(BlogPostType.NEWS) - .size()); - assertEquals(1, postsPerType.get(BlogPostType.GUIDE) - .size()); - assertEquals(2, postsPerType.get(BlogPostType.REVIEW) - .size()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeInSets_thenGetAMapBetweenTypesAndSetsOfPosts() { - Map> postsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, toSet())); - - assertEquals(2, postsPerType.get(BlogPostType.NEWS) - .size()); - assertEquals(1, postsPerType.get(BlogPostType.GUIDE) - .size()); - assertEquals(2, postsPerType.get(BlogPostType.REVIEW) - .size()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeConcurrently_thenGetAMapBetweenTypeAndPosts() { - ConcurrentMap> postsPerType = posts.parallelStream() - .collect(groupingByConcurrent(BlogPost::getType)); - - assertEquals(2, postsPerType.get(BlogPostType.NEWS) - .size()); - assertEquals(1, postsPerType.get(BlogPostType.GUIDE) - .size()); - assertEquals(2, postsPerType.get(BlogPostType.REVIEW) - .size()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndAveragingLikes_thenGetAMapBetweenTypeAndAverageNumberOfLikes() { - Map averageLikesPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, averagingInt(BlogPost::getLikes))); - - assertEquals(25, averageLikesPerType.get(BlogPostType.NEWS) - .intValue()); - assertEquals(20, averageLikesPerType.get(BlogPostType.GUIDE) - .intValue()); - assertEquals(10, averageLikesPerType.get(BlogPostType.REVIEW) - .intValue()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndCounted_thenGetAMapBetweenTypeAndNumberOfPosts() { - Map numberOfPostsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, counting())); - - assertEquals(2, numberOfPostsPerType.get(BlogPostType.NEWS) - .intValue()); - assertEquals(1, numberOfPostsPerType.get(BlogPostType.GUIDE) - .intValue()); - assertEquals(2, numberOfPostsPerType.get(BlogPostType.REVIEW) - .intValue()); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndMaxingLikes_thenGetAMapBetweenTypeAndMaximumNumberOfLikes() { - Map> maxLikesPerPostType = posts.stream() - .collect(groupingBy(BlogPost::getType, maxBy(comparingInt(BlogPost::getLikes)))); - - assertTrue(maxLikesPerPostType.get(BlogPostType.NEWS) - .isPresent()); - assertEquals(35, maxLikesPerPostType.get(BlogPostType.NEWS) - .get() - .getLikes()); - - assertTrue(maxLikesPerPostType.get(BlogPostType.GUIDE) - .isPresent()); - assertEquals(20, maxLikesPerPostType.get(BlogPostType.GUIDE) - .get() - .getLikes()); - - assertTrue(maxLikesPerPostType.get(BlogPostType.REVIEW) - .isPresent()); - assertEquals(15, maxLikesPerPostType.get(BlogPostType.REVIEW) - .get() - .getLikes()); - } - - @Test - public void givenAListOfPosts_whenGroupedByAuthorAndThenByType_thenGetAMapBetweenAuthorAndMapsBetweenTypeAndBlogPosts() { - Map>> map = posts.stream() - .collect(groupingBy(BlogPost::getAuthor, groupingBy(BlogPost::getType))); - - assertEquals(1, map.get("Author 1") - .get(BlogPostType.NEWS) - .size()); - assertEquals(1, map.get("Author 1") - .get(BlogPostType.GUIDE) - .size()); - assertEquals(1, map.get("Author 1") - .get(BlogPostType.REVIEW) - .size()); - - assertEquals(1, map.get("Author 2") - .get(BlogPostType.NEWS) - .size()); - assertEquals(1, map.get("Author 2") - .get(BlogPostType.REVIEW) - .size()); - assertNull(map.get("Author 2") - .get(BlogPostType.GUIDE)); - } - - @Test - public void givenAListOfPosts_whenGroupedByTypeAndSummarizingLikes_thenGetAMapBetweenTypeAndSummary() { - Map likeStatisticsPerType = posts.stream() - .collect(groupingBy(BlogPost::getType, summarizingInt(BlogPost::getLikes))); - - IntSummaryStatistics newsLikeStatistics = likeStatisticsPerType.get(BlogPostType.NEWS); - - assertEquals(2, newsLikeStatistics.getCount()); - assertEquals(50, newsLikeStatistics.getSum()); - assertEquals(25.0, newsLikeStatistics.getAverage(), 0.001); - assertEquals(35, newsLikeStatistics.getMax()); - assertEquals(15, newsLikeStatistics.getMin()); - } - - @Test - public void givenAListOfPosts_whenGroupedByComplexMapKeyType_thenGetAMapBetweenTupleAndList() { - Map> postsPerTypeAndAuthor = posts.stream() - .collect(groupingBy(post -> new Tuple(post.getType(), post.getAuthor()))); - - List result = postsPerTypeAndAuthor.get(new Tuple(BlogPostType.GUIDE, "Author 1")); - - assertThat(result.size()).isEqualTo(1); - - BlogPost blogPost = result.get(0); - - assertThat(blogPost.getTitle()).isEqualTo("Programming guide"); - assertThat(blogPost.getType()).isEqualTo(BlogPostType.GUIDE); - assertThat(blogPost.getAuthor()).isEqualTo("Author 1"); - } -} diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml index 2f174002bb..00480a28e1 100644 --- a/core-java-modules/core-java-9-new-features/pom.xml +++ b/core-java-modules/core-java-9-new-features/pom.xml @@ -39,7 +39,7 @@ test - + incubator-features @@ -131,7 +131,7 @@ - + core-java-9-new-features diff --git a/core-java-modules/core-java-arrays-operations-advanced/README.md b/core-java-modules/core-java-arrays-operations-advanced/README.md index 0e003b5cd9..f0d3d1fd93 100644 --- a/core-java-modules/core-java-arrays-operations-advanced/README.md +++ b/core-java-modules/core-java-arrays-operations-advanced/README.md @@ -10,3 +10,4 @@ This module contains articles about advanced operations on arrays in Java. They - [Intersection Between two Integer Arrays](https://www.baeldung.com/java-array-intersection) - [Comparing Arrays in Java](https://www.baeldung.com/java-comparing-arrays) - [Concatenate Two Arrays in Java](https://www.baeldung.com/java-concatenate-arrays) +- [Performance of System.arraycopy() vs. Arrays.copyOf()](https://www.baeldung.com/java-system-arraycopy-arrays-copyof-performance) diff --git a/core-java-modules/core-java-arrays-operations-advanced/pom.xml b/core-java-modules/core-java-arrays-operations-advanced/pom.xml index 5663a7d1ca..065f1930e2 100644 --- a/core-java-modules/core-java-arrays-operations-advanced/pom.xml +++ b/core-java-modules/core-java-arrays-operations-advanced/pom.xml @@ -26,10 +26,50 @@ ${assertj-core.version} test + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + 3.10.0 + 1.33 + + + + maven-assembly-plugin + + + jar-with-dependencies + + + + com.baeldung.copyarraymethodsperformance.BenchmarkRunner + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java new file mode 100644 index 0000000000..0adbcc1986 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/BenchmarkRunner.java @@ -0,0 +1,11 @@ +package com.baeldung.copyarraymethodsperformance; + +public class BenchmarkRunner { + + public static void main(String[] args) throws Exception { + + org.openjdk.jmh.Main.main(args); + + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java new file mode 100644 index 0000000000..6a492bf0d1 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/ObjectsCopyBenchmark.java @@ -0,0 +1,42 @@ +package com.baeldung.copyarraymethodsperformance; + +import org.openjdk.jmh.annotations.*; + +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 10) +@Fork(1) +@Measurement(iterations = 100) +public class ObjectsCopyBenchmark { + + @Param({ "10", "1000000" }) + public int SIZE; + Integer[] src; + + @Setup + public void setup() { + Random r = new Random(); + src = new Integer[SIZE]; + + for (int i = 0; i < SIZE; i++) { + src[i] = r.nextInt(); + } + } + + @Benchmark + public Integer[] systemArrayCopyBenchmark() { + Integer[] target = new Integer[SIZE]; + System.arraycopy(src, 0, target, 0, SIZE); + return target; + } + + @Benchmark + public Integer[] arraysCopyOfBenchmark() { + return Arrays.copyOf(src, SIZE); + } +} diff --git a/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java new file mode 100644 index 0000000000..767e91a350 --- /dev/null +++ b/core-java-modules/core-java-arrays-operations-advanced/src/main/java/com/baeldung/copyarraymethodsperformance/PrimitivesCopyBenchmark.java @@ -0,0 +1,43 @@ +package com.baeldung.copyarraymethodsperformance; + +import org.openjdk.jmh.annotations.*; + +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 10) +@Fork(1) +@Measurement(iterations = 100) +public class PrimitivesCopyBenchmark { + + @Param({ "10", "1000000" }) + public int SIZE; + + int[] src; + + @Setup + public void setup() { + Random r = new Random(); + src = new int[SIZE]; + + for (int i = 0; i < SIZE; i++) { + src[i] = r.nextInt(); + } + } + + @Benchmark + public int[] systemArrayCopyBenchmark() { + int[] target = new int[SIZE]; + System.arraycopy(src, 0, target, 0, SIZE); + return target; + } + + @Benchmark + public int[] arraysCopyOfBenchmark() { + return Arrays.copyOf(src, SIZE); + } +} diff --git a/core-java-modules/core-java-arrays-sorting/pom.xml b/core-java-modules/core-java-arrays-sorting/pom.xml index d30e2bfabc..8c55204347 100644 --- a/core-java-modules/core-java-arrays-sorting/pom.xml +++ b/core-java-modules/core-java-arrays-sorting/pom.xml @@ -78,4 +78,5 @@ 28.2-jre 3.10.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-char/pom.xml b/core-java-modules/core-java-char/pom.xml index ef356d9542..23156b5a22 100644 --- a/core-java-modules/core-java-char/pom.xml +++ b/core-java-modules/core-java-char/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-char jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-2/pom.xml b/core-java-modules/core-java-collections-2/pom.xml index 421ba9abac..ad76990af3 100644 --- a/core-java-modules/core-java-collections-2/pom.xml +++ b/core-java-modules/core-java-collections-2/pom.xml @@ -6,7 +6,7 @@ core-java-collections-2 core-java-collections-2 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-3/pom.xml b/core-java-modules/core-java-collections-3/pom.xml index c7b1284d5c..40f1867738 100644 --- a/core-java-modules/core-java-collections-3/pom.xml +++ b/core-java-modules/core-java-collections-3/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-collections-3 jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml index 7eb8222211..9dc26cd5d5 100644 --- a/core-java-modules/core-java-collections-4/pom.xml +++ b/core-java-modules/core-java-collections-4/pom.xml @@ -1,31 +1,31 @@ - 4.0.0 - core-java-collections-4 - 0.1.0-SNAPSHOT - core-java-collections-4 - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-collections-4 + 0.1.0-SNAPSHOT + core-java-collections-4 + jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../pom.xml - + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../pom.xml + - - - org.assertj - assertj-core - ${assertj.version} - test - - + + + org.assertj + assertj-core + ${assertj.version} + test + + - - 3.19.0 - + + 3.19.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-collections-maps-3/README.md b/core-java-modules/core-java-collections-maps-3/README.md index 530a9310c2..68df2b9556 100644 --- a/core-java-modules/core-java-collections-maps-3/README.md +++ b/core-java-modules/core-java-collections-maps-3/README.md @@ -8,5 +8,5 @@ This module contains articles about Map data structures in Java. - [The Map.computeIfAbsent() Method](https://www.baeldung.com/java-map-computeifabsent) - [Collections.synchronizedMap vs. ConcurrentHashMap](https://www.baeldung.com/java-synchronizedmap-vs-concurrenthashmap) - [Java HashMap Load Factor](https://www.baeldung.com/java-hashmap-load-factor) -- [Converting java.util.Properties to HashMap](https://www.baeldung.com/java-convert-properties-to-hashmap) +- [Converting Java Properties to HashMap](https://www.baeldung.com/java-convert-properties-to-hashmap) - More articles: [[<-- prev]](/core-java-modules/core-java-collections-maps-2) diff --git a/core-java-modules/core-java-collections-maps-4/README.md b/core-java-modules/core-java-collections-maps-4/README.md new file mode 100644 index 0000000000..4449d3859b --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/README.md @@ -0,0 +1,6 @@ +## Java Collections Cookbooks and Examples + +This module contains articles about Map data structures in Java. + +### Relevant Articles: +- [Using a Custom Class as a Key in a Java HashMap](https://www.baeldung.com/custom-key-hashmap) diff --git a/core-java-modules/core-java-collections-maps-4/pom.xml b/core-java-modules/core-java-collections-maps-4/pom.xml new file mode 100644 index 0000000000..1835e3ceac --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + core-java-collections-maps-4 + 0.1.0-SNAPSHOT + core-java-collections-maps-4 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../pom.xml + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + !performance + + + + + + + diff --git a/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateKey.java b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateKey.java new file mode 100644 index 0000000000..34ae3d7952 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateKey.java @@ -0,0 +1,39 @@ +package com.baeldung.maps; + +import java.util.Objects; + +public class CoordinateKey { + + private final int x; + private final int y; + private final int hashCode; + + public CoordinateKey(int x, int y) { + this.x = x; + this.y = y; + this.hashCode = Objects.hash(x, y); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + CoordinateKey that = (CoordinateKey) o; + return x == that.x && y == that.y; + } + + @Override + public int hashCode() { + return this.hashCode; + } +} diff --git a/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateMutableKey.java b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateMutableKey.java new file mode 100644 index 0000000000..08b329de3d --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateMutableKey.java @@ -0,0 +1,45 @@ +package com.baeldung.maps; + +import java.util.Objects; + +public class CoordinateMutableKey { + + private int x; + private int y; + + public CoordinateMutableKey(int x, int y) { + this.x = x; + this.y = y; + } + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + CoordinateMutableKey that = (CoordinateMutableKey) o; + return x == that.x && y == that.y; + } + + @Override + public int hashCode() { + return Objects.hash(x, y); + } +} diff --git a/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateSlowKey.java b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateSlowKey.java new file mode 100644 index 0000000000..9fe54bd9ea --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/src/main/java/com/baeldung/maps/CoordinateSlowKey.java @@ -0,0 +1,13 @@ +package com.baeldung.maps; + +public class CoordinateSlowKey extends CoordinateKey { + + public CoordinateSlowKey(int x, int y) { + super(x, y); + } + + @Override + public int hashCode() { + return 1; + } +} diff --git a/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateKeyUnitTest.java b/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateKeyUnitTest.java new file mode 100644 index 0000000000..8ee68c4a3d --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateKeyUnitTest.java @@ -0,0 +1,80 @@ +package com.baeldung.maps; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class CoordinateKeyUnitTest { + + private Map pixels = new HashMap<>(); + + @Test + void testOptimalKey() { + // setup + CoordinateKey coord = new CoordinateKey(1, 2); + pixels.put(coord, Color.CYAN); + // read out color correctly + assertEquals(Color.CYAN, pixels.get(coord)); + } + + @Test + void testSlowKey() { + // setup + CoordinateKey coord = new CoordinateSlowKey(1, 2); + pixels.put(coord, Color.CYAN); + // read out color correctly + assertEquals(Color.CYAN, pixels.get(coord)); + } + + // Performance Test Parameters - change here + private static final int MAX_X = 100; + private static final int MAX_Y = 100; + private static final int COUNT_OF_QUERIES = 1000; + private static final int QUERY_X = 1; + private static final int QUERY_Y = 1; + + @Tag("performance") + @Test + void testKeyPerformance() { + // generate some sample keys and values + for (int x = 0; x < MAX_X; x++) { + for (int y = 0; y < MAX_Y; y++) { + pixels.put(new CoordinateKey(x, y), new Color(x % 255, y % 255, (x + y) % 255)); + } + } + // read out multiple times and measure time + CoordinateKey coord = new CoordinateKey(QUERY_X, QUERY_Y); + long t1 = System.currentTimeMillis(); + for (int i = 0; i < COUNT_OF_QUERIES; i++) { + assertNotNull(pixels.get(coord)); + } + long t2 = System.currentTimeMillis(); + System.out.printf("Optimal key performance: %d ms%n", t2 - t1); + } + + @Tag("performance") + @Test + void testSlowKeyPerformance() { + // generate some sample keys and values + for (int x = 0; x < MAX_X; x++) { + for (int y = 0; y < MAX_Y; y++) { + pixels.put(new CoordinateSlowKey(x, y), new Color(x % 255, y % 255, (x + y) % 255)); + } + } + // read out multiple times and measure time + CoordinateKey coord = new CoordinateSlowKey(QUERY_X, QUERY_Y); + long t1 = System.currentTimeMillis(); + for (int i = 0; i < COUNT_OF_QUERIES; i++) { + assertNotNull(pixels.get(coord)); + } + long t2 = System.currentTimeMillis(); + System.out.printf("Slow key performance: %d ms%n", t2 - t1); + } + +} diff --git a/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateMutableKeyUnitTest.java b/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateMutableKeyUnitTest.java new file mode 100644 index 0000000000..54a61be230 --- /dev/null +++ b/core-java-modules/core-java-collections-maps-4/src/test/java/com/baeldung/maps/CoordinateMutableKeyUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.maps; + +import org.junit.jupiter.api.Test; + +import java.awt.*; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class CoordinateMutableKeyUnitTest { + + @Test + void testKeyMutable() { + // setup + Map pixels = new HashMap<>(); + CoordinateMutableKey coord = new CoordinateMutableKey(1, 2); + pixels.put(coord, Color.CYAN); + // read out color correctly + assertEquals(Color.CYAN, pixels.get(coord)); + // change key's hashcode should result in null value + coord.setX(10); + assertNull(pixels.get(coord)); + } + +} diff --git a/core-java-modules/core-java-collections-maps/pom.xml b/core-java-modules/core-java-collections-maps/pom.xml index 68e5c736cd..855f40c304 100644 --- a/core-java-modules/core-java-collections-maps/pom.xml +++ b/core-java-modules/core-java-collections-maps/pom.xml @@ -33,5 +33,5 @@ 4.1 3.6.1 - - + + \ No newline at end of file diff --git a/core-java-modules/core-java-collections/pom.xml b/core-java-modules/core-java-collections/pom.xml index 81bcdc74aa..38513c889a 100644 --- a/core-java-modules/core-java-collections/pom.xml +++ b/core-java-modules/core-java-collections/pom.xml @@ -7,7 +7,7 @@ 0.1.0-SNAPSHOT core-java-collections jar - + com.baeldung.core-java-modules core-java-modules diff --git a/core-java-modules/core-java-console/README.md b/core-java-modules/core-java-console/README.md index 0a31727588..9236e9cf99 100644 --- a/core-java-modules/core-java-console/README.md +++ b/core-java-modules/core-java-console/README.md @@ -3,6 +3,6 @@ ### Relevant Articles: - [Read and Write User Input in Java](http://www.baeldung.com/java-console-input-output) -- [Formatting with printf() in Java](https://www.baeldung.com/java-printstream-printf) +- [Formatting Output with printf() in Java](https://www.baeldung.com/java-printstream-printf) - [ASCII Art in Java](http://www.baeldung.com/ascii-art-in-java) - [System.console() vs. System.out](https://www.baeldung.com/java-system-console-vs-system-out) diff --git a/core-java-modules/core-java-date-operations-1/pom.xml b/core-java-modules/core-java-date-operations-1/pom.xml index 955cd910e9..7b7c68d1b6 100644 --- a/core-java-modules/core-java-date-operations-1/pom.xml +++ b/core-java-modules/core-java-date-operations-1/pom.xml @@ -26,7 +26,6 @@ commons-lang3 ${commons-lang3.version} - org.assertj assertj-core diff --git a/core-java-modules/core-java-datetime-string/README.md b/core-java-modules/core-java-datetime-string/README.md index cf00bdeb1f..aac123a884 100644 --- a/core-java-modules/core-java-datetime-string/README.md +++ b/core-java-modules/core-java-datetime-string/README.md @@ -11,3 +11,4 @@ This module contains articles about parsing and formatting Java date and time ob - [Display All Time Zones With GMT And UTC in Java](http://www.baeldung.com/java-time-zones) - [Convert between String and Timestamp](https://www.baeldung.com/java-string-to-timestamp) - [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) +- [Format a Milliseconds Duration to HH:MM:SS](https://www.baeldung.com/java-ms-to-hhmmss) diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml index dc0c5fd8b1..f50eb2ae5e 100644 --- a/core-java-modules/core-java-datetime-string/pom.xml +++ b/core-java-modules/core-java-datetime-string/pom.xml @@ -75,7 +75,7 @@ 1.6 - 2.10 + 2.10.10 3.6.1 1.9 diff --git a/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/formatduration/FormatDurationUnitTest.java b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/formatduration/FormatDurationUnitTest.java new file mode 100644 index 0000000000..1612edd30b --- /dev/null +++ b/core-java-modules/core-java-datetime-string/src/test/java/com/baeldung/formatduration/FormatDurationUnitTest.java @@ -0,0 +1,54 @@ +package com.baeldung.formatduration; + +import org.apache.commons.lang3.time.DurationFormatUtils; +import org.joda.time.Period; +import org.junit.Test; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; + +public class FormatDurationUnitTest { + + + @Test + public void givenInterval_WhenFormatInterval_formatDuration() { + long HH = TimeUnit.MILLISECONDS.toHours(38114000); + long MM = TimeUnit.MILLISECONDS.toMinutes(38114000) % 60; + long SS = TimeUnit.MILLISECONDS.toSeconds(38114000) % 60; + String timeInHHMMSS = String.format("%02d:%02d:%02d", HH, MM, SS); + + assertThat(timeInHHMMSS).isEqualTo("10:35:14"); + } + + @Test + public void givenInterval_WhenFormatUsingDuration_formatDuration() { + Duration duration = Duration.ofMillis(38114000); + long seconds = duration.getSeconds(); + long HH = seconds / 3600; + long MM = (seconds % 3600) / 60; + long SS = seconds % 60; + String timeInHHMMSS = String.format("%02d:%02d:%02d", HH, MM, SS); + assertThat(timeInHHMMSS).isEqualTo("10:35:14"); + } + + + @Test + public void givenInterval_WhenFormatDurationUsingApacheCommons_formatDuration() { + assertThat(DurationFormatUtils.formatDuration(38114000, "HH:mm:ss")) + .isEqualTo("10:35:14"); + } + + @Test + public void givenInterval_WhenFormatDurationUsingJodaTime_formatDuration() { + org.joda.time.Duration duration = new org.joda.time.Duration(38114000); + Period period = duration.toPeriod(); + long HH = period.getHours(); + long MM = period.getMinutes(); + long SS = period.getSeconds(); + + String timeInHHMMSS = String.format("%02d:%02d:%02d", HH, MM, SS); + assertThat(timeInHHMMSS).isEqualTo("10:35:14"); + } +} diff --git a/core-java-modules/core-java-exceptions-3/pom.xml b/core-java-modules/core-java-exceptions-3/pom.xml index 6e35845c6a..c4c3c00b56 100644 --- a/core-java-modules/core-java-exceptions-3/pom.xml +++ b/core-java-modules/core-java-exceptions-3/pom.xml @@ -36,4 +36,5 @@ 3.10.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-io-conversions/README.md b/core-java-modules/core-java-io-conversions/README.md index 1f12c87241..52f5222040 100644 --- a/core-java-modules/core-java-io-conversions/README.md +++ b/core-java-modules/core-java-io-conversions/README.md @@ -13,4 +13,5 @@ This module contains articles about core Java input/output(IO) conversions. - [Java – Write a Reader to File](https://www.baeldung.com/java-write-reader-to-file) - [Java – Reader to Byte Array](https://www.baeldung.com/java-convert-reader-to-byte-array) - [Java – Reader to InputStream](https://www.baeldung.com/java-convert-reader-to-inputstream) +- [Java String to InputStream](https://www.baeldung.com/convert-string-to-input-stream) - More articles: [[next -->]](/core-java-modules/core-java-io-conversions-2) diff --git a/core-java-modules/core-java-io/src/main/resources/logback.xml b/core-java-modules/core-java-io/src/main/resources/logback.xml index 56af2d397e..617917dca2 100644 --- a/core-java-modules/core-java-io/src/main/resources/logback.xml +++ b/core-java-modules/core-java-io/src/main/resources/logback.xml @@ -9,6 +9,7 @@ + diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml index b638f81b0c..ae2333d721 100644 --- a/core-java-modules/core-java-jar/pom.xml +++ b/core-java-modules/core-java-jar/pom.xml @@ -76,6 +76,7 @@ org.apache.maven.plugins maven-dependency-plugin + ${maven-dependency-plugin.version} copy-dependencies @@ -106,6 +107,7 @@ org.apache.maven.plugins maven-assembly-plugin + ${maven-assembly-plugin.version} package @@ -383,6 +385,8 @@ 3.0.2 1.4.4 3.1.1 + 3.3.0 + 3.2.0 2.0.3.RELEASE 1.8 1.8 diff --git a/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/isinstancevsisassignablefrom/IsInstanceIsAssignableFromUnitTest.java b/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/isinstancevsisassignablefrom/IsInstanceIsAssignableFromUnitTest.java index e0ad264797..3e4ee0a1bb 100644 --- a/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/isinstancevsisassignablefrom/IsInstanceIsAssignableFromUnitTest.java +++ b/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/isinstancevsisassignablefrom/IsInstanceIsAssignableFromUnitTest.java @@ -6,57 +6,80 @@ import static org.junit.Assert.assertTrue; import org.junit.Test; public class IsInstanceIsAssignableFromUnitTest { - + @Test - public void whenUsingIsInstanceProperly_desiredResultsHappen() { + public void whenUsingInstanceOfProperly_thenDesiredResultsHappen() { + Shape shape = new Triangle(); + Triangle triangle = new Triangle(); + IsoscelesTriangle isoscelesTriangle = new IsoscelesTriangle(); + Shape nonspecificShape = null; + + assertTrue(shape instanceof Shape); + assertTrue(triangle instanceof Shape); + assertTrue(isoscelesTriangle instanceof Shape); + assertFalse(nonspecificShape instanceof Shape); + + assertTrue(shape instanceof Triangle); + assertTrue(triangle instanceof Triangle); + assertTrue(isoscelesTriangle instanceof Triangle); + assertFalse(nonspecificShape instanceof Triangle); + + assertFalse(shape instanceof IsoscelesTriangle); + assertFalse(triangle instanceof IsoscelesTriangle); + assertTrue(isoscelesTriangle instanceof IsoscelesTriangle); + assertFalse(nonspecificShape instanceof IsoscelesTriangle); + } + + @Test + public void whenUsingIsInstanceProperly_thenDesiredResultsHappen() { Shape shape = new Triangle(); Triangle triangle = new Triangle(); IsoscelesTriangle isoscelesTriangle = new IsoscelesTriangle(); Triangle isoscelesTriangle2 = new IsoscelesTriangle(); Shape nonspecificShape = null; - + assertTrue(Shape.class.isInstance(shape)); assertTrue(Shape.class.isInstance(triangle)); assertTrue(Shape.class.isInstance(isoscelesTriangle)); assertTrue(Shape.class.isInstance(isoscelesTriangle2)); assertFalse(Shape.class.isInstance(nonspecificShape)); - + assertTrue(Triangle.class.isInstance(shape)); assertTrue(Triangle.class.isInstance(triangle)); assertTrue(Triangle.class.isInstance(isoscelesTriangle)); assertTrue(Triangle.class.isInstance(isoscelesTriangle2)); - + assertFalse(IsoscelesTriangle.class.isInstance(shape)); assertFalse(IsoscelesTriangle.class.isInstance(triangle)); assertTrue(IsoscelesTriangle.class.isInstance(isoscelesTriangle)); - assertTrue(IsoscelesTriangle.class.isInstance(isoscelesTriangle2)); + assertTrue(IsoscelesTriangle.class.isInstance(isoscelesTriangle2)); } - + @Test - public void whenUsingIsAssignableFromProperly_desiredResultsHappen() { + public void whenUsingIsAssignableFromProperly_thenDesiredResultsHappen() { Shape shape = new Triangle(); Triangle triangle = new Triangle(); IsoscelesTriangle isoscelesTriangle = new IsoscelesTriangle(); Triangle isoscelesTriangle2 = new IsoscelesTriangle(); - + assertFalse(shape.getClass().isAssignableFrom(Shape.class)); assertTrue(shape.getClass().isAssignableFrom(shape.getClass())); assertTrue(shape.getClass().isAssignableFrom(triangle.getClass())); assertTrue(shape.getClass().isAssignableFrom(isoscelesTriangle.getClass())); assertTrue(shape.getClass().isAssignableFrom(isoscelesTriangle2.getClass())); - + assertFalse(triangle.getClass().isAssignableFrom(Shape.class)); assertTrue(triangle.getClass().isAssignableFrom(shape.getClass())); assertTrue(triangle.getClass().isAssignableFrom(triangle.getClass())); assertTrue(triangle.getClass().isAssignableFrom(isoscelesTriangle.getClass())); assertTrue(triangle.getClass().isAssignableFrom(isoscelesTriangle2.getClass())); - + assertFalse(isoscelesTriangle.getClass().isAssignableFrom(Shape.class)); assertFalse(isoscelesTriangle.getClass().isAssignableFrom(shape.getClass())); assertFalse(isoscelesTriangle.getClass().isAssignableFrom(triangle.getClass())); assertTrue(isoscelesTriangle.getClass().isAssignableFrom(isoscelesTriangle.getClass())); assertTrue(isoscelesTriangle.getClass().isAssignableFrom(isoscelesTriangle2.getClass())); - + assertFalse(isoscelesTriangle2.getClass().isAssignableFrom(Shape.class)); assertFalse(isoscelesTriangle2.getClass().isAssignableFrom(shape.getClass())); assertFalse(isoscelesTriangle2.getClass().isAssignableFrom(triangle.getClass())); @@ -64,4 +87,31 @@ public class IsInstanceIsAssignableFromUnitTest { assertTrue(isoscelesTriangle2.getClass().isAssignableFrom(isoscelesTriangle2.getClass())); } + @Test(expected = NullPointerException.class) + public void whenUsingNull_thenDesiredResultsHappen() { + assertFalse(null instanceof Shape); + assertFalse(Shape.class.isInstance(null)); + assertFalse(Shape.class.isAssignableFrom(null)); // NullPointerException + } + + @Test + public void whenUsingPrimitiveType_thenDesiredResultsHappen() { + //assertFalse(10 instanceof int); // illegal + assertFalse(int.class.isInstance(10)); + assertTrue(Integer.class.isInstance(10)); + assertTrue(int.class.isAssignableFrom(int.class)); + assertFalse(float.class.isAssignableFrom(int.class)); + } + + @Test + public void whenUsingClassInstanceVariable_thenDesiredResultsHappen() { + Shape shape = new Triangle(); + Triangle triangle = new Triangle(); + Class> clazz = shape.getClass(); + + //assertFalse(triangle instanceof clazz); // illegal + assertTrue(clazz.isInstance(triangle)); + assertTrue(clazz.isAssignableFrom(triangle.getClass())); + } + } diff --git a/core-java-modules/core-java-lang-4/README.md b/core-java-modules/core-java-lang-4/README.md index 562be950c0..4546a00fe6 100644 --- a/core-java-modules/core-java-lang-4/README.md +++ b/core-java-modules/core-java-lang-4/README.md @@ -8,3 +8,4 @@ This module contains articles about core features in the Java language - [Java Objects.hash() vs Objects.hashCode()](https://www.baeldung.com/java-objects-hash-vs-objects-hashcode) - [Referencing a Method in Javadoc Comments](https://www.baeldung.com/java-method-in-javadoc) - [Tiered Compilation in JVM](https://www.baeldung.com/jvm-tiered-compilation) +- [Fixing the “Declared package does not match the expected package” Error](https://www.baeldung.com/java-declared-expected-package-error) diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java new file mode 100644 index 0000000000..83ed76bab0 --- /dev/null +++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/Book.java @@ -0,0 +1,21 @@ +// The next line is commented out to avoid the code to fail the build. +// package com.baeldung; + +/** +* If the below package declaration is commented out and the above incorrect package +* declaration is uncommented, then the problem will replicate. +*/ +package com.baeldung.bookstore; + +public class Book { + + private String title; + private String author; + private long isbn; + + public Book(String title, String author, long isbn) { + this.title = title; + this.author = author; + this.isbn = isbn; + } +} diff --git a/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java new file mode 100644 index 0000000000..9abd654589 --- /dev/null +++ b/core-java-modules/core-java-lang-4/src/main/java/com/baeldung/bookstore/LibraryAdmin.java @@ -0,0 +1,14 @@ +package com.baeldung.bookstore; + +import java.util.Random; + +public class LibraryAdmin { + + public Book createBook(String title, String author) { + + final long isbn = new Random().nextLong(); + + return new Book(title, author, isbn); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-lang-oop-types/pom.xml b/core-java-modules/core-java-lang-oop-types/pom.xml index b770caf970..a5b492f5ca 100644 --- a/core-java-modules/core-java-lang-oop-types/pom.xml +++ b/core-java-modules/core-java-lang-oop-types/pom.xml @@ -25,6 +25,7 @@ ${commons-codec.version} + 1.15 diff --git a/core-java-modules/core-java-networking-3/README.md b/core-java-modules/core-java-networking-3/README.md index 2e76ab5d51..0dc9ad9f70 100644 --- a/core-java-modules/core-java-networking-3/README.md +++ b/core-java-modules/core-java-networking-3/README.md @@ -8,4 +8,5 @@ This module contains articles about networking in Java - [Downloading Email Attachments in Java](https://www.baeldung.com/java-download-email-attachments) - [Connection Timeout vs. Read Timeout for Java Sockets](https://www.baeldung.com/java-socket-connection-read-timeout) - [Find Whether an IP Address Is in the Specified Range or Not in Java](https://www.baeldung.com/java-check-ip-address-range) +- [Find the IP Address of a Client Connected to a Server](https://www.baeldung.com/java-client-get-ip-address) - [[<-- Prev]](/core-java-modules/core-java-networking-2) diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationClient.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationClient.java new file mode 100644 index 0000000000..498046904d --- /dev/null +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationClient.java @@ -0,0 +1,39 @@ +package com.baeldung.clientaddress; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; + +public class ApplicationClient { + + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + + public void connect(String ip, int port) throws IOException { + clientSocket = new Socket(ip, port); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } + + public void sendGreetings(String msg) throws IOException { + out.println(msg); + String reply = in.readLine(); + System.out.println("Reply received from the server :: " + reply); + } + + public void disconnect() throws IOException { + in.close(); + out.close(); + clientSocket.close(); + } + + public static void main(String[] args) throws IOException { + ApplicationClient client = new ApplicationClient(); + client.connect(args[0], Integer.parseInt(args[1])); // IP address and port number of the server + client.sendGreetings(args[2]); // greetings message + client.disconnect(); + } +} diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationServer.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationServer.java new file mode 100644 index 0000000000..ded4482b9a --- /dev/null +++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/clientaddress/ApplicationServer.java @@ -0,0 +1,51 @@ +package com.baeldung.clientaddress; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.net.Socket; + +public class ApplicationServer { + + private ServerSocket serverSocket; + private Socket connectedSocket; + private PrintWriter out; + private BufferedReader in; + + public void startServer(int port) throws IOException { + serverSocket = new ServerSocket(port); + connectedSocket = serverSocket.accept(); + + InetSocketAddress socketAddress = (InetSocketAddress) connectedSocket.getRemoteSocketAddress(); + String clientIpAddress = socketAddress.getAddress() + .getHostAddress(); + System.out.println("IP address of the connected client :: " + clientIpAddress); + + out = new PrintWriter(connectedSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(connectedSocket.getInputStream())); + String msg = in.readLine(); + System.out.println("Message received from the client :: " + msg); + out.println("Hello Client !!"); + + closeIO(); + stopServer(); + } + + private void closeIO() throws IOException { + in.close(); + out.close(); + } + + private void stopServer() throws IOException { + connectedSocket.close(); + serverSocket.close(); + } + + public static void main(String[] args) throws IOException { + ApplicationServer server = new ApplicationServer(); + server.startServer(5000); + } +} diff --git a/core-java-modules/core-java-os/README.md b/core-java-modules/core-java-os/README.md index 10e04a8ba6..6d477de70a 100644 --- a/core-java-modules/core-java-os/README.md +++ b/core-java-modules/core-java-os/README.md @@ -13,5 +13,6 @@ This module contains articles about working with the operating system (OS) in Ja - [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java) - [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) - [Taking Screenshots Using Java](https://www.baeldung.com/java-taking-screenshots) +- [Java Sound API – Capturing Microphone](https://www.baeldung.com/java-sound-api-capture-mic) This module uses Java 9, so make sure to have the JDK 9 installed to run it. diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml index 5f00b709e3..572000a714 100644 --- a/core-java-modules/core-java-os/pom.xml +++ b/core-java-modules/core-java-os/pom.xml @@ -1,93 +1,100 @@ - 4.0.0 - core-java-os - 0.1.0-SNAPSHOT - core-java-os - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-os + 0.1.0-SNAPSHOT + core-java-os + jar - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - ../ - + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + ../ + - - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - - - commons-io - commons-io - ${commons-io.version} - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - log4j - log4j - ${log4j.version} - - - - org.assertj - assertj-core - ${assertj.version} - test - - - org.unix4j - unix4j-command - ${unix4j.version} - - - com.googlecode.grep4j - grep4j - ${grep4j.version} - - + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter-engine.version} + test + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + commons-io + commons-io + ${commons-io.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + log4j + log4j + ${log4j.version} + + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.unix4j + unix4j-command + ${unix4j.version} + + + com.googlecode.grep4j + grep4j + ${grep4j.version} + + - - core-java-os - - - src/main/resources - true - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - - - + + core-java-os + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + - - - 4.1 - 4.01 - - 3.6.1 - 1.8.9 - 1.9 - 1.9 - 25.1-jre - 0.4 - 1.8.7 - + + + 4.1 + 4.01 + + 3.6.1 + 1.8.9 + 1.9 + 1.9 + 25.1-jre + 0.4 + 1.8.7 + 5.7.2 + \ No newline at end of file diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/App.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/App.java new file mode 100644 index 0000000000..afd7687528 --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/App.java @@ -0,0 +1,34 @@ +package com.baeldung.example.soundapi; + +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFormat; + +public class App { + public static void main(String[] args) throws Exception { + + AudioFormat format = buildAudioFormatInstance(); + + SoundRecorder soundRecorder = new SoundRecorder(); + soundRecorder.build(format); + + System.out.println("Start recording ...."); + soundRecorder.start(); + Thread.sleep(20000); + soundRecorder.stop(); + + WaveDataUtil wd = new WaveDataUtil(); + Thread.sleep(3000); + wd.saveToFile("/SoundClip", AudioFileFormat.Type.WAVE, soundRecorder.getAudioInputStream()); + } + + public static AudioFormat buildAudioFormatInstance() { + ApplicationProperties aConstants = new ApplicationProperties(); + AudioFormat.Encoding encoding = aConstants.ENCODING; + float rate = aConstants.RATE; + int channels = aConstants.CHANNELS; + int sampleSize = aConstants.SAMPLE_SIZE; + boolean bigEndian = aConstants.BIG_ENDIAN; + + return new AudioFormat(encoding, rate, sampleSize, channels, (sampleSize / 8) * channels, rate, bigEndian); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/ApplicationProperties.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/ApplicationProperties.java new file mode 100644 index 0000000000..985229b969 --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/ApplicationProperties.java @@ -0,0 +1,10 @@ +package com.baeldung.example.soundapi; +import javax.sound.sampled.AudioFormat; + +public class ApplicationProperties { + public final AudioFormat.Encoding ENCODING = AudioFormat.Encoding.PCM_SIGNED; + public final float RATE = 44100.0f; + public final int CHANNELS = 1; + public final int SAMPLE_SIZE = 16; + public final boolean BIG_ENDIAN = true; +} \ No newline at end of file diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/SoundRecorder.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/SoundRecorder.java new file mode 100644 index 0000000000..cae91ee74f --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/SoundRecorder.java @@ -0,0 +1,123 @@ +package com.baeldung.example.soundapi; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.TargetDataLine; + +public class SoundRecorder implements Runnable { + private AudioInputStream audioInputStream; + private AudioFormat format; + public Thread thread; + private double duration; + + public SoundRecorder() { + super(); + } + + public SoundRecorder(AudioFormat format) { + this.format = format; + } + + public SoundRecorder build(AudioFormat format) { + this.format = format; + return this; + } + + public void start() { + thread = new Thread(this); + thread.setName("Capture Microphone"); + thread.start(); + } + + public void stop() { + thread = null; + } + + @Override + public void run() { + duration = 0; + + try (final ByteArrayOutputStream out = new ByteArrayOutputStream(); final TargetDataLine line = getTargetDataLineForRecord();) { + + int frameSizeInBytes = format.getFrameSize(); + int bufferLengthInFrames = line.getBufferSize() / 8; + final int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes; + buildByteOutputStream(out, line, frameSizeInBytes, bufferLengthInBytes); + this.audioInputStream = new AudioInputStream(line); + setAudioInputStream(convertToAudioIStream(out, frameSizeInBytes)); + audioInputStream.reset(); + } catch (IOException ex) { + ex.printStackTrace(); + } catch (Exception ex) { + ex.printStackTrace(); + return; + } + } + + public void buildByteOutputStream(final ByteArrayOutputStream out, final TargetDataLine line, int frameSizeInBytes, final int bufferLengthInBytes) throws IOException { + final byte[] data = new byte[bufferLengthInBytes]; + int numBytesRead; + + line.start(); + while (thread != null) { + if ((numBytesRead = line.read(data, 0, bufferLengthInBytes)) == -1) { + break; + } + out.write(data, 0, numBytesRead); + } + } + + private void setAudioInputStream(AudioInputStream aStream) { + this.audioInputStream = aStream; + } + + public AudioInputStream convertToAudioIStream(final ByteArrayOutputStream out, int frameSizeInBytes) { + byte audioBytes[] = out.toByteArray(); + ByteArrayInputStream bais = new ByteArrayInputStream(audioBytes); + AudioInputStream audioStream = new AudioInputStream(bais, format, audioBytes.length / frameSizeInBytes); + long milliseconds = (long) ((audioInputStream.getFrameLength() * 1000) / format.getFrameRate()); + duration = milliseconds / 1000.0; + System.out.println("Recorded duration in seconds:" + duration); + return audioStream; + } + + public TargetDataLine getTargetDataLineForRecord() { + TargetDataLine line; + DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); + if (!AudioSystem.isLineSupported(info)) { + return null; + } + try { + line = (TargetDataLine) AudioSystem.getLine(info); + line.open(format, line.getBufferSize()); + } catch (final Exception ex) { + return null; + } + return line; + } + + public AudioInputStream getAudioInputStream() { + return audioInputStream; + } + + public AudioFormat getFormat() { + return format; + } + + public void setFormat(AudioFormat format) { + this.format = format; + } + + public Thread getThread() { + return thread; + } + + public double getDuration() { + return duration; + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/WaveDataUtil.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/WaveDataUtil.java new file mode 100644 index 0000000000..7d63e66fdd --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/example/soundapi/WaveDataUtil.java @@ -0,0 +1,34 @@ +package com.baeldung.example.soundapi; + +import java.io.File; + +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; + +public class WaveDataUtil { + public boolean saveToFile(String name, AudioFileFormat.Type fileType, AudioInputStream audioInputStream) { + System.out.println("Saving..."); + if (null == name || null == fileType || audioInputStream == null) { + return false; + } + File myFile = new File(name + "." + fileType.getExtension()); + try { + audioInputStream.reset(); + } catch (Exception e) { + return false; + } + int i = 0; + while (myFile.exists()) { + String temp = "" + i + myFile.getName(); + myFile = new File(temp); + } + try { + AudioSystem.write(audioInputStream, fileType, myFile); + } catch (Exception ex) { + return false; + } + System.out.println("Saved " + myFile.getAbsolutePath()); + return true; + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java b/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java new file mode 100644 index 0000000000..cb3c183062 --- /dev/null +++ b/core-java-modules/core-java-os/src/main/java/com/baeldung/java9/process/ProcessAPIEnhancements.java @@ -0,0 +1,101 @@ +package com.baeldung.java9.process; + +import java.io.IOException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProcessAPIEnhancements { + + static Logger log = LoggerFactory.getLogger(ProcessAPIEnhancements.class); + + public static void main(String[] args) throws IOException, InterruptedException, ExecutionException { + infoOfCurrentProcess(); + infoOfLiveProcesses(); + infoOfSpawnProcess(); + infoOfExitCallback(); + infoOfChildProcess(); + } + + private static void infoOfCurrentProcess() { + ProcessHandle processHandle = ProcessHandle.current(); + ProcessHandle.Info processInfo = processHandle.info(); + + log.info("PID: " + processHandle.pid()); + log.info("Arguments: " + processInfo.arguments()); + log.info("Command: " + processInfo.command()); + log.info("Instant: " + processInfo.startInstant()); + log.info("Total CPU duration: " + processInfo.totalCpuDuration()); + log.info("User: " + processInfo.user()); + } + + private static void infoOfSpawnProcess() throws IOException { + + String javaCmd = ProcessUtils.getJavaCmd().getAbsolutePath(); + ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version"); + Process process = processBuilder.inheritIO().start(); + ProcessHandle processHandle = process.toHandle(); + ProcessHandle.Info processInfo = processHandle.info(); + + log.info("PID: " + processHandle.pid()); + log.info("Arguments: " + processInfo.arguments()); + log.info("Command: " + processInfo.command()); + log.info("Instant: " + processInfo.startInstant()); + log.info("Total CPU duration: " + processInfo.totalCpuDuration()); + log.info("User: " + processInfo.user()); + } + + private static void infoOfLiveProcesses() { + Stream liveProcesses = ProcessHandle.allProcesses(); + liveProcesses.filter(ProcessHandle::isAlive) + .forEach(ph -> { + log.info("PID: " + ph.pid()); + log.info("Instance: " + ph.info().startInstant()); + log.info("User: " + ph.info().user()); + }); + } + + private static void infoOfChildProcess() throws IOException { + int childProcessCount = 5; + for (int i = 0; i < childProcessCount; i++) { + String javaCmd = ProcessUtils.getJavaCmd() + .getAbsolutePath(); + ProcessBuilder processBuilder + = new ProcessBuilder(javaCmd, "-version"); + processBuilder.inheritIO().start(); + } + + Stream children = ProcessHandle.current() + .children(); + children.filter(ProcessHandle::isAlive) + .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() + .command())); + Stream descendants = ProcessHandle.current() + .descendants(); + descendants.filter(ProcessHandle::isAlive) + .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() + .command())); + } + + private static void infoOfExitCallback() throws IOException, InterruptedException, ExecutionException { + String javaCmd = ProcessUtils.getJavaCmd() + .getAbsolutePath(); + ProcessBuilder processBuilder + = new ProcessBuilder(javaCmd, "-version"); + Process process = processBuilder.inheritIO() + .start(); + ProcessHandle processHandle = process.toHandle(); + + log.info("PID: {} has started", processHandle.pid()); + CompletableFuture onProcessExit = processHandle.onExit(); + onProcessExit.get(); + log.info("Alive: " + processHandle.isAlive()); + onProcessExit.thenAccept(ph -> { + log.info("PID: {} has stopped", ph.pid()); + }); + } + +} diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/example/soundapi/AppUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/example/soundapi/AppUnitTest.java new file mode 100644 index 0000000000..38f21320e3 --- /dev/null +++ b/core-java-modules/core-java-os/src/test/java/com/baeldung/example/soundapi/AppUnitTest.java @@ -0,0 +1,75 @@ +package com.baeldung.example.soundapi; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Assertions; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; +import java.io.ByteArrayOutputStream; + +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.TargetDataLine; + +public class AppUnitTest { + + AudioFormat af = App.buildAudioFormatInstance(); + SoundRecorder soundRecorder = new SoundRecorder(); + + @Test + public void Given_SoundRecorderObject_When_Run_Then_ThrowsNoException() { + + soundRecorder.build(af); + try { + soundRecorder.start(); + Thread.sleep(20000); + soundRecorder.stop(); + } catch (InterruptedException ex) { + fail("Exception: " + ex); + } + + } + + @Test + public void Given_AudioFormatObject_When_NotNull_Then_ReturnsTargetDataLine() { + soundRecorder.setFormat(af); + Assertions.assertDoesNotThrow(() -> soundRecorder.getTargetDataLineForRecord()); + } + + @Test + public void Given_TargetLineDataObject_When_Run_Then_GeneratesOutputStream() { + + soundRecorder.setFormat(af); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + TargetDataLine tLine = soundRecorder.getTargetDataLineForRecord(); + + int frameSizeInBytes = af.getFrameSize(); + int bufferLengthInFrames = tLine.getBufferSize() / 8; + final int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes; + + Assertions.assertDoesNotThrow( + () -> soundRecorder.buildByteOutputStream(out, tLine, frameSizeInBytes, bufferLengthInBytes)); + } + + @Test + public void Given_AudioInputStream_When_NotNull_Then_SaveToWavFile() { + soundRecorder.setFormat(af); + soundRecorder.build(af); + try { + soundRecorder.start(); + Thread.sleep(20000); + soundRecorder.stop(); + WaveDataUtil wd = new WaveDataUtil(); + Thread.sleep(3000); + boolean saveFile = wd.saveToFile("/SoundClip", AudioFileFormat.Type.WAVE, + soundRecorder.getAudioInputStream()); + + assertEquals(saveFile, true); + + } catch (InterruptedException ex) { + fail("Exception: " + ex); + } + + } + +} diff --git a/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java b/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java deleted file mode 100644 index c81f060150..0000000000 --- a/core-java-modules/core-java-os/src/test/java/com/baeldung/java9/process/ProcessAPIEnhancementsUnitTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.baeldung.java9.process; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Stream; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Created by sanaulla on 2/23/2017. - */ - -public class ProcessAPIEnhancementsUnitTest { - - Logger log = LoggerFactory.getLogger(ProcessAPIEnhancementsUnitTest.class); - - // @Test - // OS / Java version dependent - public void givenCurrentProcess_whenInvokeGetInfo_thenSuccess() throws IOException { - ProcessHandle processHandle = ProcessHandle.current(); - ProcessHandle.Info processInfo = processHandle.info(); - assertNotNull(processHandle.pid()); - assertEquals(true, processInfo.arguments() - .isPresent()); - assertEquals(true, processInfo.command() - .isPresent()); - assertTrue(processInfo.command() - .get() - .contains("java")); - - assertEquals(true, processInfo.startInstant() - .isPresent()); - assertEquals(true, processInfo.totalCpuDuration() - .isPresent()); - assertEquals(true, processInfo.user() - .isPresent()); - } - - // @Test - // OS / Java version dependent - public void givenSpawnProcess_whenInvokeGetInfo_thenSuccess() throws IOException { - - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder = new ProcessBuilder(javaCmd, "-version"); - Process process = processBuilder.inheritIO() - .start(); - ProcessHandle processHandle = process.toHandle(); - ProcessHandle.Info processInfo = processHandle.info(); - assertNotNull(processHandle.pid()); - assertEquals(true, processInfo.arguments() - .isPresent()); - assertEquals(true, processInfo.command() - .isPresent()); - assertTrue(processInfo.command() - .get() - .contains("java")); - assertEquals(true, processInfo.startInstant() - .isPresent()); - assertEquals(false, processInfo.totalCpuDuration() - .isPresent()); - assertEquals(true, processInfo.user() - .isPresent()); - } - - // @Test - // OS / Java version dependent - public void givenLiveProcesses_whenInvokeGetInfo_thenSuccess() { - Stream liveProcesses = ProcessHandle.allProcesses(); - liveProcesses.filter(ProcessHandle::isAlive) - .forEach(ph -> { - assertNotNull(ph.pid()); - assertEquals(true, ph.info() - .startInstant() - .isPresent()); - assertEquals(true, ph.info() - .user() - .isPresent()); - }); - } - - // @Test - // OS / Java version dependent - public void givenProcess_whenGetChildProcess_thenSuccess() throws IOException { - int childProcessCount = 5; - for (int i = 0; i < childProcessCount; i++) { - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder - = new ProcessBuilder(javaCmd, "-version"); - processBuilder.inheritIO().start(); - } - - Stream children = ProcessHandle.current() - .children(); - children.filter(ProcessHandle::isAlive) - .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() - .command())); - Stream descendants = ProcessHandle.current() - .descendants(); - descendants.filter(ProcessHandle::isAlive) - .forEach(ph -> log.info("PID: {}, Cmd: {}", ph.pid(), ph.info() - .command())); - } - - // @Test - // OS / Java version dependent - public void givenProcess_whenAddExitCallback_thenSuccess() throws Exception { - String javaCmd = ProcessUtils.getJavaCmd() - .getAbsolutePath(); - ProcessBuilder processBuilder - = new ProcessBuilder(javaCmd, "-version"); - Process process = processBuilder.inheritIO() - .start(); - ProcessHandle processHandle = process.toHandle(); - - log.info("PID: {} has started", processHandle.pid()); - CompletableFuture onProcessExit = processHandle.onExit(); - onProcessExit.get(); - assertEquals(false, processHandle.isAlive()); - onProcessExit.thenAccept(ph -> { - log.info("PID: {} has stopped", ph.pid()); - }); - } - -} diff --git a/core-java-modules/core-java-security-3/README.md b/core-java-modules/core-java-security-3/README.md index 970faaac88..a37719964b 100644 --- a/core-java-modules/core-java-security-3/README.md +++ b/core-java-modules/core-java-security-3/README.md @@ -5,4 +5,5 @@ This module contains articles about core Java Security ### Relevant Articles: - [Secret Key and String Conversion in Java](https://www.baeldung.com/java-secret-key-to-string) +- [Enabling Unlimited Strength Cryptography in Java](https://www.baeldung.com/jce-enable-unlimited-strength) - More articles: [[<-- prev]](/core-java-modules/core-java-security-2) diff --git a/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java new file mode 100644 index 0000000000..5d5c30dc34 --- /dev/null +++ b/core-java-modules/core-java-security-3/src/test/java/com/baeldung/cryptography/CryptographyStrengthUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.cryptography; + +import org.junit.Test; + +import java.security.NoSuchAlgorithmException; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CryptographyStrengthUnitTest { + private static final int UNLIMITED_KEY_SIZE = 2147483647; + + @Test + public void whenDefaultCheck_thenUnlimitedReturned() throws NoSuchAlgorithmException { + int maxKeySize = javax.crypto.Cipher.getMaxAllowedKeyLength("AES"); + assertThat(maxKeySize).isEqualTo(UNLIMITED_KEY_SIZE); + } +} diff --git a/core-java-modules/core-java-string-algorithms-3/pom.xml b/core-java-modules/core-java-string-algorithms-3/pom.xml index c8243258c1..6d1c0b0e48 100644 --- a/core-java-modules/core-java-string-algorithms-3/pom.xml +++ b/core-java-modules/core-java-string-algorithms-3/pom.xml @@ -32,6 +32,11 @@ junit-jupiter test + + commons-validator + commons-validator + ${validator.version} + @@ -59,6 +64,7 @@ 3.6.1 28.1-jre + 1.7 - \ No newline at end of file + diff --git a/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java b/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java new file mode 100644 index 0000000000..f80c87ea01 --- /dev/null +++ b/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java @@ -0,0 +1,12 @@ +package com.baeldung.emailvalidation; + +import java.util.regex.Pattern; + +public class EmailValidation { + + public static boolean patternMatches(String emailAddress, String regexPattern) { + return Pattern.compile(regexPattern) + .matcher(emailAddress) + .matches(); + } +} diff --git a/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java b/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java new file mode 100644 index 0000000000..e6bee0ce63 --- /dev/null +++ b/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java @@ -0,0 +1,79 @@ +package com.baeldung.emailvalidation; + +import static org.junit.Assert.assertTrue; +import org.apache.commons.validator.routines.EmailValidator; +import org.junit.Test; + +public class EmailValidationUnitTest { + + private String emailAddress; + private String regexPattern; + + @Test + public void testUsingEmailValidator() { + emailAddress = "username@domain.com"; + assertTrue(EmailValidator.getInstance() + .isValid(emailAddress)); + } + + @Test + public void testUsingSimpleRegex() { + emailAddress = "username@domain.com"; + regexPattern = "^(.+)@(\\S+)$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testUsingStrictRegex() { + emailAddress = "username@domain.com"; + regexPattern = "^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@" + + "[^-][A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testUsingUnicodeRegex() { + emailAddress = "用户名@领域.电脑"; + regexPattern = "^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@" + + "[^-][\\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testUsingRFC5322Regex() { + emailAddress = "username@domain.com"; + regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testRestrictDots() { + emailAddress = "username@domain.com"; + regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@" + + "[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testOwaspValidation() { + emailAddress = "username@domain.com"; + regexPattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testTopLevelDomain() { + emailAddress = "username@domain.com"; + regexPattern = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*" + + "@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } + + @Test + public void testGmailSpecialCase() { + emailAddress = "username+something@domain.com"; + regexPattern = "^(?=.{1,64}@)[A-Za-z0-9\\+_-]+(\\.[A-Za-z0-9\\+_-]+)*@" + + "[^-][A-Za-z0-9\\+-]+(\\.[A-Za-z0-9\\+-]+)*(\\.[A-Za-z]{2,})$"; + assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern)); + } +} diff --git a/core-java-modules/core-java-string-operations-3/README.md b/core-java-modules/core-java-string-operations-3/README.md index ff6ac51fab..f4cde6104f 100644 --- a/core-java-modules/core-java-string-operations-3/README.md +++ b/core-java-modules/core-java-string-operations-3/README.md @@ -5,3 +5,4 @@ - [Split Java String by Newline](https://www.baeldung.com/java-string-split-by-newline) - [Split a String in Java and Keep the Delimiters](https://www.baeldung.com/java-split-string-keep-delimiters) - [Validate String as Filename in Java](https://www.baeldung.com/java-validate-filename) +- [Count Spaces in a Java String](https://www.baeldung.com/java-string-count-spaces) diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml index b73851f90c..642ade5ab3 100644 --- a/core-java-modules/core-java-string-operations-3/pom.xml +++ b/core-java-modules/core-java-string-operations-3/pom.xml @@ -16,6 +16,16 @@ + + org.springframework + spring-core + ${spring-core.version} + + + org.apache.commons + commons-lang3 + ${apache-commons-lang3.version} + org.assertj assertj-core @@ -68,10 +78,12 @@ 11 11 3.6.1 + 5.3.9 + 3.12.0 3.6.3 6.1.1 2.11.1 3.1.0 - \ No newline at end of file + diff --git a/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/countspaces/CountSpacesInStringUnitTest.java b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/countspaces/CountSpacesInStringUnitTest.java new file mode 100644 index 0000000000..0432b7dd24 --- /dev/null +++ b/core-java-modules/core-java-string-operations-3/src/test/java/com/baeldung/countspaces/CountSpacesInStringUnitTest.java @@ -0,0 +1,65 @@ +package com.baeldung.countspaces; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.Test; + +class CountSpacesInStringUnitTest { + private static final String INPUT_STRING = " This string has nine spaces and a Tab:' '"; + private static final int EXPECTED_COUNT = 9; + + @Test + void givenString_whenCountSpaceByLooping_thenReturnsExpectedCount() { + int spaceCount = 0; + for (char c : INPUT_STRING.toCharArray()) { + if (c == ' ') { + spaceCount++; + } + } + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceByJava8StreamFilter_thenReturnsExpectedCount() { + long spaceCount = INPUT_STRING.chars().filter(c -> c == (int) ' ').count(); + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceByRegexMatcher_thenReturnsExpectedCount() { + Pattern pattern = Pattern.compile(" "); + Matcher matcher = pattern.matcher(INPUT_STRING); + int spaceCount = 0; + while (matcher.find()) { + spaceCount++; + } + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceByReplaceAll_thenReturnsExpectedCount() { + int spaceCount = INPUT_STRING.replaceAll("[^ ]", "").length(); + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceBySplit_thenReturnsExpectedCount() { + int spaceCount = INPUT_STRING.split(" ").length - 1; + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceUsingApacheCommons_thenReturnsExpectedCount() { + int spaceCount = StringUtils.countMatches(INPUT_STRING, " "); + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } + + @Test + void givenString_whenCountSpaceUsingSpring_thenReturnsExpectedCount() { + int spaceCount = org.springframework.util.StringUtils.countOccurrencesOf(INPUT_STRING, " "); + assertThat(spaceCount).isEqualTo(EXPECTED_COUNT); + } +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 13dd20b5da..5291c8c3ca 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -38,6 +38,7 @@ core-java-collections-maps core-java-collections-maps-2 core-java-collections-maps-3 + core-java-collections-maps-4 core-java-concurrency-2 core-java-concurrency-advanced core-java-concurrency-advanced-2 @@ -137,4 +138,5 @@ 2.22.2 5.6.2 - \ No newline at end of file + + diff --git a/deeplearning4j/pom.xml b/deeplearning4j/pom.xml index f1f9b9fa7b..c63e67d573 100644 --- a/deeplearning4j/pom.xml +++ b/deeplearning4j/pom.xml @@ -39,12 +39,12 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.slf4j slf4j-log4j12 - ${slf4j.version} + ${org.slf4j.version} @@ -62,7 +62,6 @@ 0.9.1 4.3.5 - 1.7.5 \ No newline at end of file diff --git a/docker/README.md b/docker/README.md index f1b4181e64..ab3ddd35b7 100644 --- a/docker/README.md +++ b/docker/README.md @@ -1,6 +1,6 @@ ## Relevant Articles: -- [Introduction to Docker Compose](https://www.baeldung.com/docker-compose) +- [Introduction to Docker Compose](https://www.baeldung.com/ops/docker-compose) - [Reusing Docker Layers with Spring Boot](https://www.baeldung.com/docker-layers-spring-boot) - [Running Spring Boot with PostgreSQL in Docker Compose](https://www.baeldung.com/spring-boot-postgresql-docker) - [How To Configure Java Heap Size Inside a Docker Container](https://www.baeldung.com/ops/docker-jvm-heap-size) diff --git a/drools/src/main/resources/logback.xml b/drools/src/main/resources/logback.xml index 7d900d8ea8..b928039804 100644 --- a/drools/src/main/resources/logback.xml +++ b/drools/src/main/resources/logback.xml @@ -6,7 +6,8 @@ - + + diff --git a/ethereum/pom.xml b/ethereum/pom.xml index 4283714b98..b9a3870702 100644 --- a/ethereum/pom.xml +++ b/ethereum/pom.xml @@ -99,7 +99,7 @@ org.slf4j jcl-over-slf4j - ${slf4j.version} + ${org.slf4j.version} ch.qos.logback @@ -204,8 +204,6 @@ 1.5.6.RELEASE 2.21.0 2.4.0 - 1.2.3 - 1.7.25 2.0.4.RELEASE 3.1 diff --git a/gradle/gradle-jacoco/README.md b/gradle/gradle-jacoco/README.md new file mode 100644 index 0000000000..0da51cc539 --- /dev/null +++ b/gradle/gradle-jacoco/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Exclusions from Jacoco Report](https://www.baeldung.com/jacoco-report-exclude) diff --git a/grpc/pom.xml b/grpc/pom.xml index 915777f3bd..77ec9be464 100644 --- a/grpc/pom.xml +++ b/grpc/pom.xml @@ -1,81 +1,82 @@ - 4.0.0 - grpc - 0.0.1-SNAPSHOT - grpc - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + grpc + 0.0.1-SNAPSHOT + grpc + jar - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - io.grpc - grpc-netty - ${io.grpc.version} - - - io.grpc - grpc-protobuf - ${io.grpc.version} - - - io.grpc - grpc-stub - ${io.grpc.version} - - - junit - junit - ${junit.version} - test - - - - - - - kr.motd.maven - os-maven-plugin - ${os-maven-plugin.version} - - - - - org.xolstice.maven.plugins - protobuf-maven-plugin - ${protobuf-maven-plugin.version} - - - com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier} - - grpc-java - - io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier} - - - - - - compile - compile-custom - - - - - - - - - 1.16.1 - 1.6.1 - 0.6.1 - + + + io.grpc + grpc-netty-shaded + runtime + ${io.grpc.version} + + + io.grpc + grpc-protobuf + ${io.grpc.version} + + + io.grpc + grpc-stub + ${io.grpc.version} + + + junit + junit + ${junit.version} + test + + + javax.annotation + javax.annotation-api + 1.2 + + + + + + kr.motd.maven + os-maven-plugin + ${os-maven-plugin.version} + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + ${protobuf-maven-plugin.version} + + com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier} + grpc-java + io.grpc:protoc-gen-grpc-java:${io.grpc.version}:exe:${os.detected.classifier} + + + + + compile + compile-custom + + + + + + + + 1.40.1 + 3.17.2 + 1.6.2 + 0.6.1 + \ No newline at end of file diff --git a/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java b/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java new file mode 100644 index 0000000000..1850c975a2 --- /dev/null +++ b/grpc/src/main/java/com/baeldung/grpc/streaming/StockClient.java @@ -0,0 +1,183 @@ +package com.baeldung.grpc.streaming; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.baeldung.grpc.streaming.StockQuoteProviderGrpc.StockQuoteProviderBlockingStub; +import com.baeldung.grpc.streaming.StockQuoteProviderGrpc.StockQuoteProviderStub; + +import io.grpc.Channel; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; +import io.grpc.stub.StreamObserver; + +public class StockClient { + private static final Logger logger = Logger.getLogger(StockClient.class.getName()); + + private final StockQuoteProviderBlockingStub blockingStub; + private final StockQuoteProviderStub nonBlockingStub; + private List stocks; + + public StockClient(Channel channel) { + + blockingStub = StockQuoteProviderGrpc.newBlockingStub(channel); + nonBlockingStub = StockQuoteProviderGrpc.newStub(channel); + initializeStocks(); + } + + public void serverSideStreamingListOfStockPrices() { + + logInfo("######START EXAMPLE######: ServerSideStreaming - list of Stock prices from a given stock"); + Stock request = Stock.newBuilder() + .setTickerSymbol("AU") + .setCompanyName("Austich") + .setDescription("server streaming example") + .build(); + Iterator stockQuotes; + try { + logInfo("REQUEST - ticker symbol {0}", request.getTickerSymbol()); + stockQuotes = blockingStub.serverSideStreamingGetListStockQuotes(request); + for (int i = 1; stockQuotes.hasNext(); i++) { + StockQuote stockQuote = stockQuotes.next(); + logInfo("RESPONSE - Price #" + i + ": {0}", stockQuote.getPrice()); + } + } catch (StatusRuntimeException e) { + logInfo("RPC failed: {0}", e.getStatus()); + } + } + + public void clientSideStreamingGetStatisticsOfStocks() throws InterruptedException { + + logInfo("######START EXAMPLE######: ClientSideStreaming - getStatisticsOfStocks from a list of stocks"); + final CountDownLatch finishLatch = new CountDownLatch(1); + StreamObserver responseObserver = new StreamObserver() { + @Override + public void onNext(StockQuote summary) { + logInfo("RESPONSE, got stock statistics - Average Price: {0}, description: {1}", summary.getPrice(), summary.getDescription()); + } + + @Override + public void onCompleted() { + logInfo("Finished clientSideStreamingGetStatisticsOfStocks"); + finishLatch.countDown(); + } + + @Override + public void onError(Throwable t) { + logWarning("Stock Statistics Failed: {0}", Status.fromThrowable(t)); + finishLatch.countDown(); + } + }; + + StreamObserver requestObserver = nonBlockingStub.clientSideStreamingGetStatisticsOfStocks(responseObserver); + try { + + for (Stock stock : stocks) { + logInfo("REQUEST: {0}, {1}", stock.getTickerSymbol(), stock.getCompanyName()); + requestObserver.onNext(stock); + if (finishLatch.getCount() == 0) { + return; + } + } + } catch (RuntimeException e) { + requestObserver.onError(e); + throw e; + } + requestObserver.onCompleted(); + if (!finishLatch.await(1, TimeUnit.MINUTES)) { + logWarning("clientSideStreamingGetStatisticsOfStocks can not finish within 1 minutes"); + } + } + + public void bidirectionalStreamingGetListsStockQuotes() throws InterruptedException{ + + logInfo("#######START EXAMPLE#######: BidirectionalStreaming - getListsStockQuotes from list of stocks"); + final CountDownLatch finishLatch = new CountDownLatch(1); + StreamObserver responseObserver = new StreamObserver() { + @Override + public void onNext(StockQuote stockQuote) { + logInfo("RESPONSE price#{0} : {1}, description:{2}", stockQuote.getOfferNumber(), stockQuote.getPrice(), stockQuote.getDescription()); + } + + @Override + public void onCompleted() { + logInfo("Finished bidirectionalStreamingGetListsStockQuotes"); + finishLatch.countDown(); + } + + @Override + public void onError(Throwable t) { + logWarning("bidirectionalStreamingGetListsStockQuotes Failed: {0}", Status.fromThrowable(t)); + finishLatch.countDown(); + } + }; + StreamObserver requestObserver = nonBlockingStub.bidirectionalStreamingGetListsStockQuotes(responseObserver); + try { + for (Stock stock : stocks) { + logInfo("REQUEST: {0}, {1}", stock.getTickerSymbol(), stock.getCompanyName()); + requestObserver.onNext(stock); + Thread.sleep(200); + if (finishLatch.getCount() == 0) { + return; + } + } + } catch (RuntimeException e) { + requestObserver.onError(e); + throw e; + } + requestObserver.onCompleted(); + + if (!finishLatch.await(1, TimeUnit.MINUTES)) { + logWarning("bidirectionalStreamingGetListsStockQuotes can not finish within 1 minute"); + } + + } + + public static void main(String[] args) throws InterruptedException { + String target = "localhost:8980"; + if (args.length > 0) { + target = args[0]; + } + + ManagedChannel channel = ManagedChannelBuilder.forTarget(target) + .usePlaintext() + .build(); + try { + StockClient client = new StockClient(channel); + + client.serverSideStreamingListOfStockPrices(); + + client.clientSideStreamingGetStatisticsOfStocks(); + + client.bidirectionalStreamingGetListsStockQuotes(); + + } finally { + channel.shutdownNow() + .awaitTermination(5, TimeUnit.SECONDS); + } + } + + private void initializeStocks() { + + this.stocks = Arrays.asList(Stock.newBuilder().setTickerSymbol("AU").setCompanyName("Auburn Corp").setDescription("Aptitude Intel").build() + , Stock.newBuilder().setTickerSymbol("BAS").setCompanyName("Bassel Corp").setDescription("Business Intel").build() + , Stock.newBuilder().setTickerSymbol("COR").setCompanyName("Corvine Corp").setDescription("Corporate Intel").build() + , Stock.newBuilder().setTickerSymbol("DIA").setCompanyName("Dialogic Corp").setDescription("Development Intel").build() + , Stock.newBuilder().setTickerSymbol("EUS").setCompanyName("Euskaltel Corp").setDescription("English Intel").build()); + } + + private void logInfo(String msg, Object... params) { + logger.log(Level.INFO, msg, params); + } + + private void logWarning(String msg, Object... params) { + logger.log(Level.WARNING, msg, params); + } +} diff --git a/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java b/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java new file mode 100644 index 0000000000..f4dc6c39ac --- /dev/null +++ b/grpc/src/main/java/com/baeldung/grpc/streaming/StockServer.java @@ -0,0 +1,147 @@ +package com.baeldung.grpc.streaming; + +import java.io.IOException; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import io.grpc.Server; +import io.grpc.ServerBuilder; +import io.grpc.stub.StreamObserver; + +public class StockServer { + + private static final Logger logger = Logger.getLogger(StockServer.class.getName()); + private final int port; + private final Server server; + + public StockServer(int port) throws IOException { + this.port = port; + server = ServerBuilder.forPort(port) + .addService(new StockService()) + .build(); + } + + public void start() throws IOException { + server.start(); + logger.info("Server started, listening on " + port); + Runtime.getRuntime() + .addShutdownHook(new Thread() { + @Override + public void run() { + System.err.println("shutting down server"); + try { + StockServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + System.err.println("server shutted down"); + } + }); + } + + public void stop() throws InterruptedException { + if (server != null) { + server.shutdown() + .awaitTermination(30, TimeUnit.SECONDS); + } + } + + public static void main(String[] args) throws Exception { + StockServer stockServer = new StockServer(8980); + stockServer.start(); + if (stockServer.server != null) { + stockServer.server.awaitTermination(); + } + } + + private static class StockService extends StockQuoteProviderGrpc.StockQuoteProviderImplBase { + + StockService() { + } + + @Override + public void serverSideStreamingGetListStockQuotes(Stock request, StreamObserver responseObserver) { + + for (int i = 1; i <= 5; i++) { + + StockQuote stockQuote = StockQuote.newBuilder() + .setPrice(fetchStockPriceBid(request)) + .setOfferNumber(i) + .setDescription("Price for stock:" + request.getTickerSymbol()) + .build(); + responseObserver.onNext(stockQuote); + } + responseObserver.onCompleted(); + } + + @Override + public StreamObserver clientSideStreamingGetStatisticsOfStocks(final StreamObserver responseObserver) { + return new StreamObserver() { + int count; + double price = 0.0; + StringBuffer sb = new StringBuffer(); + + @Override + public void onNext(Stock stock) { + count++; + price = +fetchStockPriceBid(stock); + sb.append(":") + .append(stock.getTickerSymbol()); + } + + @Override + public void onCompleted() { + responseObserver.onNext(StockQuote.newBuilder() + .setPrice(price / count) + .setDescription("Statistics-" + sb.toString()) + .build()); + responseObserver.onCompleted(); + } + + @Override + public void onError(Throwable t) { + logger.log(Level.WARNING, "error:{0}", t.getMessage()); + } + }; + } + + @Override + public StreamObserver bidirectionalStreamingGetListsStockQuotes(final StreamObserver responseObserver) { + return new StreamObserver() { + @Override + public void onNext(Stock request) { + + for (int i = 1; i <= 5; i++) { + + StockQuote stockQuote = StockQuote.newBuilder() + .setPrice(fetchStockPriceBid(request)) + .setOfferNumber(i) + .setDescription("Price for stock:" + request.getTickerSymbol()) + .build(); + responseObserver.onNext(stockQuote); + } + } + + @Override + public void onCompleted() { + responseObserver.onCompleted(); + } + + @Override + public void onError(Throwable t) { + logger.log(Level.WARNING, "error:{0}", t.getMessage()); + } + }; + } + } + + private static double fetchStockPriceBid(Stock stock) { + + return stock.getTickerSymbol() + .length() + + ThreadLocalRandom.current() + .nextDouble(-0.1d, 0.1d); + } +} \ No newline at end of file diff --git a/grpc/src/main/proto/stock_quote.proto b/grpc/src/main/proto/stock_quote.proto new file mode 100644 index 0000000000..66891a5008 --- /dev/null +++ b/grpc/src/main/proto/stock_quote.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package stockquote; + +option java_multiple_files = true; +option java_package = "com.baeldung.grpc.streaming"; +option java_outer_classname = "StockQuoteProto"; +option objc_class_prefix = "RTG"; + +//basic setup ... + +service StockQuoteProvider { + + rpc serverSideStreamingGetListStockQuotes(Stock) returns (stream StockQuote) {} + + rpc clientSideStreamingGetStatisticsOfStocks(stream Stock) returns (StockQuote) {} + + rpc bidirectionalStreamingGetListsStockQuotes(stream Stock) returns (stream StockQuote) {} +} + +message Stock { + string ticker_symbol = 1; + string company_name = 2; + string description = 3; +} + +message StockQuote { + double price = 1; + int32 offer_number = 2; + string description = 3; +} diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml index 799fcb106a..a498c8b4f8 100644 --- a/jackson-modules/jackson-conversions-2/pom.xml +++ b/jackson-modules/jackson-conversions-2/pom.xml @@ -24,7 +24,7 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 - ${jackson-datatype.version} + ${jackson.version} @@ -52,7 +52,6 @@ 3.11.0 - 2.9.8 \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java index b5b81fa4a3..8d6bc9ad6a 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/SubTypeHandlingUnitTest.java @@ -1,14 +1,22 @@ package com.baeldung.jackson.inheritance; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.junit.Test; -import java.util.List; -import java.util.ArrayList; -import java.io.IOException; - +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Car; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Fleet; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Truck; +import com.baeldung.jackson.inheritance.SubTypeConstructorStructure.Vehicle; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; public class SubTypeHandlingUnitTest { @Test @@ -23,21 +31,30 @@ public class SubTypeHandlingUnitTest { } @Test - public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { + public void givenSubType_whenNotUsingNoArgsConstructors_thenSucceed() throws IOException { ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() + .allowIfSubType("com.baeldung.jackson.inheritance") + .allowIfSubType("java.util.ArrayList") + .build(); + mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL); + + Car car = new Car("Mercedes-Benz", "S500", 5, 250.0); + Truck truck = new Truck("Isuzu", "NQR", 7500.0); - 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<>(); + List vehicles = new ArrayList<>(); vehicles.add(car); vehicles.add(truck); - SubTypeConstructorStructure.Fleet serializedFleet = new SubTypeConstructorStructure.Fleet(); + Fleet serializedFleet = new Fleet(); serializedFleet.setVehicles(vehicles); String jsonDataString = mapper.writeValueAsString(serializedFleet); - mapper.readValue(jsonDataString, SubTypeConstructorStructure.Fleet.class); + mapper.readValue(jsonDataString, Fleet.class); + + Fleet deserializedFleet = mapper.readValue(jsonDataString, Fleet.class); + + assertThat(deserializedFleet.getVehicles().get(0), instanceOf(Car.class)); + assertThat(deserializedFleet.getVehicles().get(1), instanceOf(Truck.class)); } } \ No newline at end of file diff --git a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java index 02297b9ee8..ca057edadc 100644 --- a/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java +++ b/jackson-modules/jackson/src/test/java/com/baeldung/jackson/inheritance/TypeInfoInclusionUnitTest.java @@ -10,12 +10,18 @@ import java.util.ArrayList; import java.io.IOException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; public class TypeInfoInclusionUnitTest { @Test public void givenTypeInfo_whenAnnotatingGlobally_thenTypesAreCorrectlyRecovered() throws IOException { ObjectMapper mapper = new ObjectMapper(); - mapper.enableDefaultTyping(); + PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder() + .allowIfSubType("com.baeldung.jackson.inheritance") + .allowIfSubType("java.util.ArrayList") + .build(); + mapper.activateDefaultTyping(ptv, ObjectMapper.DefaultTyping.NON_FINAL); TypeInfoStructure.Car car = new TypeInfoStructure.Car("Mercedes-Benz", "S500", 5, 250.0); TypeInfoStructure.Truck truck = new TypeInfoStructure.Truck("Isuzu", "NQR", 7500.0); diff --git a/java-lite/pom.xml b/java-lite/pom.xml index c422e9a421..092063a110 100644 --- a/java-lite/pom.xml +++ b/java-lite/pom.xml @@ -21,13 +21,11 @@ activeweb ${activeweb.version} - mysql mysql-connector-java ${mysql.connector.java.version} - com.sun tools @@ -35,14 +33,12 @@ system ${java.home}/../lib/tools.jar - org.javalite activeweb-testing ${activeweb-testing.version} test - @@ -73,7 +69,6 @@ - org.javalite activejdbc-instrumentation diff --git a/javafx/README.md b/javafx/README.md index 80c4f49026..8ef06eb012 100644 --- a/javafx/README.md +++ b/javafx/README.md @@ -3,5 +3,6 @@ This module contains articles about JavaFX. ### Relevant Articles: --[Introduction to JavaFX](https://www.baeldung.com/javafx) +- [Introduction to JavaFX](https://www.baeldung.com/javafx) +- [Display Custom Items in JavaFX ListView](https://www.baeldung.com/javafx-listview-display-custom-items) diff --git a/javafx/src/main/java/com/baeldung/listview/ExampleController.java b/javafx/src/main/java/com/baeldung/listview/ExampleController.java new file mode 100644 index 0000000000..c02fa68d2e --- /dev/null +++ b/javafx/src/main/java/com/baeldung/listview/ExampleController.java @@ -0,0 +1,38 @@ +package com.baeldung.listview; + +import com.baeldung.listview.cellfactory.CheckboxCellFactory; +import com.baeldung.listview.cellfactory.PersonCellFactory; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.ListView; + +import java.net.URL; +import java.util.ResourceBundle; + +public class ExampleController implements Initializable { + @FXML + private ListView listView; + + @Override + public void initialize(URL location, ResourceBundle resources) { + ObservableList wordsList = FXCollections.observableArrayList(); + wordsList.add(new Person("Isaac", "Newton")); + wordsList.add(new Person("Albert", "Einstein")); + wordsList.add(new Person("Ludwig", "Boltzmann")); + listView.setItems(wordsList); + } + + public void defaultButtonClick() { + listView.setCellFactory(null); + } + + public void cellFactoryButtonClick() { + listView.setCellFactory(new PersonCellFactory()); + } + + public void checkboxCellFactoryButtonClick() { + listView.setCellFactory(new CheckboxCellFactory()); + } +} diff --git a/javafx/src/main/java/com/baeldung/listview/Main.java b/javafx/src/main/java/com/baeldung/listview/Main.java new file mode 100644 index 0000000000..a067971758 --- /dev/null +++ b/javafx/src/main/java/com/baeldung/listview/Main.java @@ -0,0 +1,28 @@ +package com.baeldung.javafx.listview; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +import java.net.URL; + +public class Main extends Application { + + public static void main(String args[]) { + launch(args); + } + + @Override + public void start(Stage primaryStage) throws Exception { + FXMLLoader loader = new FXMLLoader(); + URL xmlUrl = getClass().getResource("/example.fxml"); + loader.setLocation(xmlUrl); + Parent root = loader.load(); + + primaryStage.setTitle("List View Demo"); + primaryStage.setScene(new Scene(root)); + primaryStage.show(); + } +} diff --git a/javafx/src/main/java/com/baeldung/listview/Person.java b/javafx/src/main/java/com/baeldung/listview/Person.java new file mode 100644 index 0000000000..cdc0ab2dc8 --- /dev/null +++ b/javafx/src/main/java/com/baeldung/listview/Person.java @@ -0,0 +1,25 @@ +package com.baeldung.listview; + +public class Person { + + private final String firstName; + private final String lastName; + + public Person(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + @Override + public String toString() { + return firstName + " " + lastName; + } +} diff --git a/javafx/src/main/java/com/baeldung/listview/cellfactory/CheckboxCellFactory.java b/javafx/src/main/java/com/baeldung/listview/cellfactory/CheckboxCellFactory.java new file mode 100644 index 0000000000..522afcb76e --- /dev/null +++ b/javafx/src/main/java/com/baeldung/listview/cellfactory/CheckboxCellFactory.java @@ -0,0 +1,29 @@ +package com.baeldung.listview.cellfactory; + +import com.baeldung.listview.Person; +import javafx.scene.control.CheckBox; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.util.Callback; + +public class CheckboxCellFactory implements Callback, ListCell> { + @Override + public ListCell call(ListView param) { + return new ListCell(){ + @Override + public void updateItem(Person person, boolean empty) { + super.updateItem(person, empty); + if (empty) { + setText(null); + setGraphic(null); + } else if (person != null) { + setText(null); + setGraphic(new CheckBox(person.getFirstName() + " " + person.getLastName())); + } else { + setText("null"); + setGraphic(null); + } + } + }; + } +} diff --git a/javafx/src/main/java/com/baeldung/listview/cellfactory/PersonCellFactory.java b/javafx/src/main/java/com/baeldung/listview/cellfactory/PersonCellFactory.java new file mode 100644 index 0000000000..57866b9ead --- /dev/null +++ b/javafx/src/main/java/com/baeldung/listview/cellfactory/PersonCellFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.listview.cellfactory; + +import com.baeldung.listview.Person; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.util.Callback; + +public class PersonCellFactory implements Callback, ListCell> { + @Override + public ListCell call(ListView param) { + return new ListCell(){ + @Override + public void updateItem(Person person, boolean empty) { + super.updateItem(person, empty); + if (empty || person == null) { + setText(null); + } else { + setText(person.getFirstName() + " " + person.getLastName()); + } + } + }; + } +} diff --git a/javafx/src/main/resources/example.fxml b/javafx/src/main/resources/example.fxml new file mode 100644 index 0000000000..c68df076d0 --- /dev/null +++ b/javafx/src/main/resources/example.fxml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/javaxval/pom.xml b/javaxval/pom.xml index d684e9dfe2..f0093e0aa4 100644 --- a/javaxval/pom.xml +++ b/javaxval/pom.xml @@ -48,4 +48,5 @@ 5.0.2.RELEASE 3.11.1 + \ No newline at end of file diff --git a/jee-7/src/main/resources/logback.xml b/jee-7/src/main/resources/logback.xml index 7d900d8ea8..5c1b7ec771 100644 --- a/jee-7/src/main/resources/logback.xml +++ b/jee-7/src/main/resources/logback.xml @@ -7,6 +7,8 @@ + + diff --git a/jersey/pom.xml b/jersey/pom.xml index 9f57179065..c8a7de66ae 100644 --- a/jersey/pom.xml +++ b/jersey/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 jersey 0.0.1-SNAPSHOT diff --git a/jersey/src/main/java/com/baeldung/jersey/server/config/HelloDynamicBinding.java b/jersey/src/main/java/com/baeldung/jersey/server/config/HelloDynamicBinding.java index e56cdec140..19c407f80d 100644 --- a/jersey/src/main/java/com/baeldung/jersey/server/config/HelloDynamicBinding.java +++ b/jersey/src/main/java/com/baeldung/jersey/server/config/HelloDynamicBinding.java @@ -5,20 +5,14 @@ import javax.ws.rs.container.ResourceInfo; import javax.ws.rs.core.FeatureContext; import javax.ws.rs.ext.Provider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.baeldung.jersey.server.Greetings; import com.baeldung.jersey.server.filter.ResponseServerFilter; @Provider public class HelloDynamicBinding implements DynamicFeature { - private static final Logger LOG = LoggerFactory.getLogger(HelloDynamicBinding.class); - @Override public void configure(ResourceInfo resourceInfo, FeatureContext context) { - LOG.info("Hello dynamic binding"); if (Greetings.class.equals(resourceInfo.getResourceClass()) && resourceInfo.getResourceMethod() .getName() diff --git a/jhipster/jhipster-microservice/car-app/pom.xml b/jhipster/jhipster-microservice/car-app/pom.xml index 477192438f..f345688939 100644 --- a/jhipster/jhipster-microservice/car-app/pom.xml +++ b/jhipster/jhipster-microservice/car-app/pom.xml @@ -17,7 +17,6 @@ - 1.0.0 -Djava.security.egd=file:/dev/./urandom -Xmx256m 3.6.2 2.0.0 @@ -31,6 +30,7 @@ 1.0.0 1.1.0 0.7.0 + 1.0.0 3.6 2.0.0 3.6.2 @@ -59,14 +59,14 @@ S3437,UndocumentedApi,BoldAndItalicTagsCheck - src/main/webapp/app/**/*.* Web:BoldAndItalicTagsCheck src/main/java/**/* squid:S3437 - src/main/java/**/* squid:UndocumentedApi @@ -349,7 +349,6 @@ org.springframework.boot spring-boot-starter-test - test org.springframework.boot @@ -365,11 +364,6 @@ - - org.springframework.boot - spring-boot-test - test - org.springframework.cloud @@ -427,7 +421,7 @@ spring-boot:run - org.eclipse.m2e @@ -580,14 +574,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -768,8 +754,8 @@ - cc diff --git a/jhipster/jhipster-microservice/car-app/src/test/resources/config/application.yml b/jhipster/jhipster-microservice/car-app/src/test/resources/config/application.yml index a9e3b02b64..396c338feb 100644 --- a/jhipster/jhipster-microservice/car-app/src/test/resources/config/application.yml +++ b/jhipster/jhipster-microservice/car-app/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: carapp:${spring.application.instance_id:${random.value}} spring: + main: + banner-mode: "off" application: name: carapp jackson: @@ -37,7 +39,7 @@ spring: database-platform: io.github.jhipster.domain.util.FixedH2Dialect database: H2 open-in-view: false - show-sql: true + show-sql: false hibernate: ddl-auto: none naming: diff --git a/jhipster/jhipster-microservice/car-app/src/test/resources/logback-test.xml b/jhipster/jhipster-microservice/car-app/src/test/resources/logback-test.xml index aace473c4c..3128e99c50 100644 --- a/jhipster/jhipster-microservice/car-app/src/test/resources/logback-test.xml +++ b/jhipster/jhipster-microservice/car-app/src/test/resources/logback-test.xml @@ -3,7 +3,7 @@ - + diff --git a/jhipster/jhipster-microservice/dealer-app/pom.xml b/jhipster/jhipster-microservice/dealer-app/pom.xml index 59df7d3b69..056bd60f33 100644 --- a/jhipster/jhipster-microservice/dealer-app/pom.xml +++ b/jhipster/jhipster-microservice/dealer-app/pom.xml @@ -29,6 +29,7 @@ 1.0.0 1.1.0 0.7.0 + 1.0.0 3.6 2.0.0 3.6.2 @@ -57,14 +58,14 @@ S3437,UndocumentedApi,BoldAndItalicTagsCheck - src/main/webapp/app/**/*.* Web:BoldAndItalicTagsCheck src/main/java/**/* squid:S3437 - src/main/java/**/* squid:UndocumentedApi @@ -90,7 +91,6 @@ 1.4.10.Final 1.1.0.Final v0.21.3 - 1.0.0 @@ -345,6 +345,10 @@ org.springframework.boot spring-boot-starter-security + + org.springframework.boot + spring-boot-starter-test + org.springframework.boot spring-boot-starter-thymeleaf @@ -359,11 +363,6 @@ - - org.springframework.boot - spring-boot-test - test - org.springframework.cloud @@ -421,7 +420,7 @@ spring-boot:run - org.eclipse.m2e @@ -574,14 +573,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -762,8 +753,8 @@ - cc diff --git a/jhipster/jhipster-microservice/dealer-app/src/test/resources/config/application.yml b/jhipster/jhipster-microservice/dealer-app/src/test/resources/config/application.yml index 8959533002..8f3f070471 100644 --- a/jhipster/jhipster-microservice/dealer-app/src/test/resources/config/application.yml +++ b/jhipster/jhipster-microservice/dealer-app/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: dealerapp:${spring.application.instance_id:${random.value}} spring: + main: + banner-mode: "off" application: name: dealerapp jackson: @@ -37,7 +39,7 @@ spring: database-platform: io.github.jhipster.domain.util.FixedH2Dialect database: H2 open-in-view: false - show-sql: true + show-sql: false hibernate: ddl-auto: none naming: diff --git a/jhipster/jhipster-microservice/dealer-app/src/test/resources/logback-test.xml b/jhipster/jhipster-microservice/dealer-app/src/test/resources/logback-test.xml index 83efcf9b13..06505a9f05 100644 --- a/jhipster/jhipster-microservice/dealer-app/src/test/resources/logback-test.xml +++ b/jhipster/jhipster-microservice/dealer-app/src/test/resources/logback-test.xml @@ -3,7 +3,7 @@ - + diff --git a/jhipster/jhipster-microservice/gateway-app/pom.xml b/jhipster/jhipster-microservice/gateway-app/pom.xml index a50c2bbdd1..b90f22f009 100644 --- a/jhipster/jhipster-microservice/gateway-app/pom.xml +++ b/jhipster/jhipster-microservice/gateway-app/pom.xml @@ -32,6 +32,7 @@ 1.0.0 1.1.0 0.7.0 + 1.0.0 3.6 2.0.0 3.6.2 @@ -61,14 +62,14 @@ S3437,UndocumentedApi,BoldAndItalicTagsCheck - src/main/webapp/app/**/*.* Web:BoldAndItalicTagsCheck src/main/java/**/* squid:S3437 - src/main/java/**/* squid:UndocumentedApi @@ -94,7 +95,6 @@ 1.4.10.Final 1.1.0.Final v0.21.3 - 1.0.0 @@ -383,6 +383,10 @@ spring-boot-starter-test test + + org.springframework.boot + spring-boot-starter-test + org.springframework.boot spring-boot-starter-thymeleaf @@ -397,11 +401,6 @@ - - org.springframework.boot - spring-boot-test - test - org.springframework.cloud spring-cloud-starter @@ -463,7 +462,7 @@ spring-boot:run - org.eclipse.m2e @@ -632,14 +631,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -878,8 +869,8 @@ - cc diff --git a/jhipster/jhipster-microservice/gateway-app/src/test/java/com/gateway/web/rest/LogsResourceIntegrationTest.java b/jhipster/jhipster-microservice/gateway-app/src/test/java/com/gateway/web/rest/LogsResourceIntegrationTest.java index 3b4511b534..0494c46330 100644 --- a/jhipster/jhipster-microservice/gateway-app/src/test/java/com/gateway/web/rest/LogsResourceIntegrationTest.java +++ b/jhipster/jhipster-microservice/gateway-app/src/test/java/com/gateway/web/rest/LogsResourceIntegrationTest.java @@ -49,7 +49,7 @@ public class LogsResourceIntegrationTest { public void changeLogs()throws Exception { LoggerVM logger = new LoggerVM(); logger.setLevel("INFO"); - logger.setName("ROOT"); + logger.setName("some.test.logger"); restLogsMockMvc.perform(put("/management/logs") .contentType(TestUtil.APPLICATION_JSON_UTF8) diff --git a/jhipster/jhipster-microservice/gateway-app/src/test/resources/config/application.yml b/jhipster/jhipster-microservice/gateway-app/src/test/resources/config/application.yml index 45436533f8..6013842549 100644 --- a/jhipster/jhipster-microservice/gateway-app/src/test/resources/config/application.yml +++ b/jhipster/jhipster-microservice/gateway-app/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: gateway:${spring.application.instance_id:${random.value}} spring: + main: + banner-mode: "off" application: name: gateway autoconfigure: @@ -39,7 +41,7 @@ spring: database-platform: io.github.jhipster.domain.util.FixedH2Dialect database: H2 open-in-view: false - show-sql: true + show-sql: false hibernate: ddl-auto: none naming: diff --git a/jhipster/jhipster-microservice/gateway-app/src/test/resources/logback-test.xml b/jhipster/jhipster-microservice/gateway-app/src/test/resources/logback-test.xml index fc92ca6a19..c4273aa563 100644 --- a/jhipster/jhipster-microservice/gateway-app/src/test/resources/logback-test.xml +++ b/jhipster/jhipster-microservice/gateway-app/src/test/resources/logback-test.xml @@ -3,7 +3,7 @@ - + diff --git a/jhipster/jhipster-microservice/pom.xml b/jhipster/jhipster-microservice/pom.xml index 051d5f70b7..3d2d682d8e 100644 --- a/jhipster/jhipster-microservice/pom.xml +++ b/jhipster/jhipster-microservice/pom.xml @@ -11,7 +11,7 @@ com.baeldung.jhipster 1.0.0-SNAPSHOT - + car-app dealer-app diff --git a/jhipster/jhipster-monolithic/pom.xml b/jhipster/jhipster-monolithic/pom.xml index 97f2b85b2f..28cfc16859 100644 --- a/jhipster/jhipster-monolithic/pom.xml +++ b/jhipster/jhipster-monolithic/pom.xml @@ -277,8 +277,7 @@ org.springframework.boot - spring-boot-test - test + spring-boot-starter-test @@ -297,7 +296,7 @@ spring-boot:run - org.eclipse.m2e @@ -751,8 +750,8 @@ - cc @@ -931,14 +930,14 @@ S3437,UndocumentedApi,BoldAndItalicTagsCheck - src/main/webapp/app/**/*.* Web:BoldAndItalicTagsCheck src/main/java/**/* squid:S3437 - src/main/java/**/* squid:UndocumentedApi diff --git a/jhipster/jhipster-monolithic/src/test/java/com/baeldung/web/rest/LogsResourceIntegrationTest.java b/jhipster/jhipster-monolithic/src/test/java/com/baeldung/web/rest/LogsResourceIntegrationTest.java index 2f852f9fd8..abe8f47b4e 100644 --- a/jhipster/jhipster-monolithic/src/test/java/com/baeldung/web/rest/LogsResourceIntegrationTest.java +++ b/jhipster/jhipster-monolithic/src/test/java/com/baeldung/web/rest/LogsResourceIntegrationTest.java @@ -49,7 +49,7 @@ public class LogsResourceIntegrationTest { public void changeLogs()throws Exception { LoggerVM logger = new LoggerVM(); logger.setLevel("INFO"); - logger.setName("ROOT"); + logger.setName("some.test.logger"); restLogsMockMvc.perform(put("/management/logs") .contentType(TestUtil.APPLICATION_JSON_UTF8) diff --git a/jhipster/jhipster-monolithic/src/test/resources/config/application.yml b/jhipster/jhipster-monolithic/src/test/resources/config/application.yml index a7939c838c..aae6231ac8 100644 --- a/jhipster/jhipster-monolithic/src/test/resources/config/application.yml +++ b/jhipster/jhipster-monolithic/src/test/resources/config/application.yml @@ -15,6 +15,8 @@ spring: + main: + banner-mode: "off" application: name: baeldung jackson: @@ -31,7 +33,7 @@ spring: database-platform: io.github.jhipster.domain.util.FixedH2Dialect database: H2 open-in-view: false - show-sql: true + show-sql: false hibernate: ddl-auto: none naming: diff --git a/jhipster/jhipster-monolithic/src/test/resources/logback-test.xml b/jhipster/jhipster-monolithic/src/test/resources/logback-test.xml index c0acd00401..3e15e9e87f 100644 --- a/jhipster/jhipster-monolithic/src/test/resources/logback-test.xml +++ b/jhipster/jhipster-monolithic/src/test/resources/logback-test.xml @@ -3,7 +3,7 @@ - + diff --git a/jhipster/jhipster-uaa/gateway/pom.xml b/jhipster/jhipster-uaa/gateway/pom.xml index 53422bfa44..bc3c9bdef2 100644 --- a/jhipster/jhipster-uaa/gateway/pom.xml +++ b/jhipster/jhipster-uaa/gateway/pom.xml @@ -1,6 +1,13 @@ 4.0.0 + + + jhipster-uaa + com.baeldung.jhipster + 1.0.0-SNAPSHOT + + com.baeldung.jhipster.gateway gateway 0.0.1-SNAPSHOT @@ -415,15 +422,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -1010,7 +1008,7 @@ - + 1.0.0 0.24.0 @@ -1090,5 +1088,5 @@ ${project.basedir}/src/test/ - + diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerUnitTest.java similarity index 99% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerUnitTest.java index c1f6062c51..0a630fa82f 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/config/WebConfigurerUnitTest.java @@ -40,7 +40,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * * @see WebConfigurer */ -public class WebConfigurerTest { +public class WebConfigurerUnitTest { private WebConfigurer webConfigurer; diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterUnitTest.java similarity index 98% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterUnitTest.java index 893c446922..78eb150cd6 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/gateway/responserewriting/SwaggerBasePathRewritingFilterUnitTest.java @@ -18,7 +18,7 @@ import static springfox.documentation.swagger2.web.Swagger2Controller.DEFAULT_UR /** * Tests SwaggerBasePathRewritingFilter class. */ -public class SwaggerBasePathRewritingFilterTest { +public class SwaggerBasePathRewritingFilterUnitTest { private SwaggerBasePathRewritingFilter filter = new SwaggerBasePathRewritingFilter(); diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionUnitTest.java similarity index 99% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionUnitTest.java index 1b2a22dd90..809f7408da 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieCollectionUnitTest.java @@ -16,7 +16,7 @@ import java.util.List; * * @see CookieCollection */ -public class CookieCollectionTest { +public class CookieCollectionUnitTest { public static final String COOKIE_NAME = "chocolate"; public static final String COOKIE_VALUE = "yummy"; public static final String BROWNIE_NAME = "brownie"; diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorUnitTest.java similarity index 71% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorUnitTest.java index af7dec99c4..0b1acc5f61 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/CookieTokenExtractorUnitTest.java @@ -12,7 +12,7 @@ import org.springframework.security.oauth2.common.OAuth2AccessToken; * Test whether the CookieTokenExtractor can properly extract access tokens from * Cookies and Headers. */ -public class CookieTokenExtractorTest { +public class CookieTokenExtractorUnitTest { private CookieTokenExtractor cookieTokenExtractor; @Before @@ -22,24 +22,24 @@ public class CookieTokenExtractorTest { @Test public void testExtractTokenCookie() { - MockHttpServletRequest request = OAuth2AuthenticationServiceTest.createMockHttpServletRequest(); + MockHttpServletRequest request = OAuth2AuthenticationServiceUnitTest.createMockHttpServletRequest(); Authentication authentication = cookieTokenExtractor.extract(request); - Assert.assertEquals(OAuth2AuthenticationServiceTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); + Assert.assertEquals(OAuth2AuthenticationServiceUnitTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); } @Test public void testExtractTokenHeader() { MockHttpServletRequest request = new MockHttpServletRequest(HttpMethod.GET.name(), "http://www.test.com"); - request.addHeader("Authorization", OAuth2AccessToken.BEARER_TYPE + " " + OAuth2AuthenticationServiceTest.ACCESS_TOKEN_VALUE); + request.addHeader("Authorization", OAuth2AccessToken.BEARER_TYPE + " " + OAuth2AuthenticationServiceUnitTest.ACCESS_TOKEN_VALUE); Authentication authentication = cookieTokenExtractor.extract(request); - Assert.assertEquals(OAuth2AuthenticationServiceTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); + Assert.assertEquals(OAuth2AuthenticationServiceUnitTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); } @Test public void testExtractTokenParam() { MockHttpServletRequest request = new MockHttpServletRequest(HttpMethod.GET.name(), "http://www.test.com"); - request.addParameter(OAuth2AccessToken.ACCESS_TOKEN, OAuth2AuthenticationServiceTest.ACCESS_TOKEN_VALUE); + request.addParameter(OAuth2AccessToken.ACCESS_TOKEN, OAuth2AuthenticationServiceUnitTest.ACCESS_TOKEN_VALUE); Authentication authentication = cookieTokenExtractor.extract(request); - Assert.assertEquals(OAuth2AuthenticationServiceTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); + Assert.assertEquals(OAuth2AuthenticationServiceUnitTest.ACCESS_TOKEN_VALUE, authentication.getPrincipal().toString()); } } diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceUnitTest.java similarity index 99% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceUnitTest.java index 4902b5306e..ac60e0a1d5 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2AuthenticationServiceUnitTest.java @@ -39,7 +39,7 @@ import static org.mockito.Mockito.when; * @see OAuth2AuthenticationService */ @RunWith(MockitoJUnitRunner.class) -public class OAuth2AuthenticationServiceTest { +public class OAuth2AuthenticationServiceUnitTest { public static final String CLIENT_AUTHORIZATION = "Basic d2ViX2FwcDpjaGFuZ2VpdA=="; public static final String ACCESS_TOKEN_VALUE = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQyNzI4NDQsInVzZXJfbmFtZSI6InVzZXIiLCJhdXRob3JpdGllcyI6WyJST0xFX1VTRVIiXSwianRpIjoiNzc1ZTJkYWUtYWYzZi00YTdhLWExOTktNzNiZTU1MmIxZDVkIiwiY2xpZW50X2lkIjoid2ViX2FwcCIsInNjb3BlIjpbIm9wZW5pZCJdfQ.gEK0YcX2IpkpxnkxXXHQ4I0xzTjcy7edqb89ukYE0LPe7xUcZVwkkCJF_nBxsGJh2jtA6NzNLfY5zuL6nP7uoAq3fmvsyrcyR2qPk8JuuNzGtSkICx3kPDRjAT4ST8SZdeh7XCbPVbySJ7ZmPlRWHyedzLA1wXN0NUf8yZYS4ELdUwVBYIXSjkNoKqfWm88cwuNr0g0teypjPtjDqCnXFt1pibwdfIXn479Y1neNAdvSpHcI4Ost-c7APCNxW2gqX-0BItZQearxRgKDdBQ7CGPAIky7dA0gPuKUpp_VCoqowKCXqkE9yKtRQGIISewtj2UkDRZePmzmYrUBXRzfYw"; public static final String REFRESH_TOKEN_VALUE = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX25hbWUiOiJ1c2VyIiwic2NvcGUiOlsib3BlbmlkIl0sImF0aSI6Ijc3NWUyZGFlLWFmM2YtNGE3YS1hMTk5LTczYmU1NTJiMWQ1ZCIsImV4cCI6MTQ5Njg2NDc0MywiYXV0aG9yaXRpZXMiOlsiUk9MRV9VU0VSIl0sImp0aSI6IjhmYjI2YTllLTdjYzQtNDFlMi1hNzBjLTk4MDc0N2U2YWFiOSIsImNsaWVudF9pZCI6IndlYl9hcHAifQ.q1-Df9_AFO6TJNiLKV2YwTjRbnd7qcXv52skXYnog5siHYRoR6cPtm6TNQ04iDAoIHljTSTNnD6DS3bHk41mV55gsSVxGReL8VCb_R8ZmhVL4-5yr90sfms0wFp6lgD2bPmZ-TXiS2Oe9wcbNWagy5RsEplZ-sbXu3tjmDao4FN35ojPsXmUs84XnNQH3Y_-PY9GjZG0JEfLQIvE0J5BkXS18Z015GKyA6GBIoLhAGBQQYyG9m10ld_a9fD5SmCyCF72Jad_pfP1u8Z_WyvO-wrlBvm2x-zBthreVrXU5mOb9795wJEP-xaw3dXYGjht_grcW4vKUFtj61JgZk98CQ"; diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperUnitTest.java similarity index 98% rename from jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperTest.java rename to jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperUnitTest.java index d36a67bf66..b95d79e065 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/security/oauth2/OAuth2CookieHelperUnitTest.java @@ -12,7 +12,7 @@ import org.springframework.test.util.ReflectionTestUtils; * * @see OAuth2CookieHelper */ -public class OAuth2CookieHelperTest { +public class OAuth2CookieHelperUnitTest { public static final String GET_COOKIE_DOMAIN_METHOD = "getCookieDomain"; private OAuth2Properties oAuth2Properties; private OAuth2CookieHelper cookieHelper; diff --git a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/web/rest/LogsResourceIntTest.java b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/web/rest/LogsResourceIntTest.java index 2e52eabbca..1962babb1b 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/web/rest/LogsResourceIntTest.java +++ b/jhipster/jhipster-uaa/gateway/src/test/java/com/baeldung/jhipster/gateway/web/rest/LogsResourceIntTest.java @@ -51,7 +51,7 @@ public class LogsResourceIntTest { public void changeLogs() throws Exception { LoggerVM logger = new LoggerVM(); logger.setLevel("INFO"); - logger.setName("ROOT"); + logger.setName("some.test.logger"); restLogsMockMvc.perform(put("/management/logs") .contentType(TestUtil.APPLICATION_JSON_UTF8) diff --git a/jhipster/jhipster-uaa/gateway/src/test/resources/config/application.yml b/jhipster/jhipster-uaa/gateway/src/test/resources/config/application.yml index a8aaef6e43..445d0f9903 100644 --- a/jhipster/jhipster-uaa/gateway/src/test/resources/config/application.yml +++ b/jhipster/jhipster-uaa/gateway/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: gateway:${spring.application.instance-id:${random.value}} spring: + main: + banner-mode: "off" application: name: gateway cache: @@ -93,7 +95,7 @@ jhipster: authentication: jwt: # This token must be encoded using Base64 (you can type `echo 'secret-key'|base64` on your command line) - base64-secret: + base64-secret: # Token is valid 24 hours token-validity-in-seconds: 86400 metrics: # DropWizard Metrics configuration, used by MetricsConfiguration diff --git a/jhipster/jhipster-uaa/quotes/pom.xml b/jhipster/jhipster-uaa/quotes/pom.xml index 2d61a2a820..7e4252b309 100644 --- a/jhipster/jhipster-uaa/quotes/pom.xml +++ b/jhipster/jhipster-uaa/quotes/pom.xml @@ -1,6 +1,13 @@ 4.0.0 + + + jhipster-uaa + com.baeldung.jhipster + 1.0.0-SNAPSHOT + + com.baeldung.jhipster.quotes quotes 0.0.1-SNAPSHOT @@ -399,15 +406,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -832,7 +830,7 @@ - + 3.0.0 @@ -909,5 +907,5 @@ 0.24.0 - + diff --git a/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerTest.java b/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerUnitTest.java similarity index 99% rename from jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerTest.java rename to jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerUnitTest.java index 5a80d9befb..661ebd683e 100644 --- a/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerTest.java +++ b/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/config/WebConfigurerUnitTest.java @@ -38,7 +38,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * * @see WebConfigurer */ -public class WebConfigurerTest { +public class WebConfigurerUnitTest { private WebConfigurer webConfigurer; diff --git a/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/web/rest/LogsResourceIntTest.java b/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/web/rest/LogsResourceIntTest.java index 56cda7d3d5..335a7c4792 100644 --- a/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/web/rest/LogsResourceIntTest.java +++ b/jhipster/jhipster-uaa/quotes/src/test/java/com/baeldung/jhipster/quotes/web/rest/LogsResourceIntTest.java @@ -51,7 +51,7 @@ public class LogsResourceIntTest { public void changeLogs() throws Exception { LoggerVM logger = new LoggerVM(); logger.setLevel("INFO"); - logger.setName("ROOT"); + logger.setName("some.test.logger"); restLogsMockMvc.perform(put("/management/logs") .contentType(TestUtil.APPLICATION_JSON_UTF8) diff --git a/jhipster/jhipster-uaa/quotes/src/test/resources/config/application.yml b/jhipster/jhipster-uaa/quotes/src/test/resources/config/application.yml index 337bdbde1c..9c9429429a 100644 --- a/jhipster/jhipster-uaa/quotes/src/test/resources/config/application.yml +++ b/jhipster/jhipster-uaa/quotes/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: quotes:${spring.application.instance-id:${random.value}} spring: + main: + banner-mode: "off" application: name: quotes cache: diff --git a/jhipster/jhipster-uaa/uaa/pom.xml b/jhipster/jhipster-uaa/uaa/pom.xml index cabbf1de33..ec4dc1b484 100644 --- a/jhipster/jhipster-uaa/uaa/pom.xml +++ b/jhipster/jhipster-uaa/uaa/pom.xml @@ -1,6 +1,12 @@ 4.0.0 + + jhipster-uaa + com.baeldung.jhipster + 1.0.0-SNAPSHOT + + com.baeldung.jhipster.uaa uaa 0.0.1-SNAPSHOT @@ -399,15 +405,6 @@ - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - alphabetical - - org.jacoco jacoco-maven-plugin @@ -832,7 +829,7 @@ - + 1.0.0 0.24.0 @@ -911,5 +908,5 @@ - + diff --git a/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerTest.java b/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerUnitTest.java similarity index 99% rename from jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerTest.java rename to jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerUnitTest.java index 0d5b60c163..fb82201b41 100644 --- a/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerTest.java +++ b/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/config/WebConfigurerUnitTest.java @@ -38,7 +38,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. * * @see WebConfigurer */ -public class WebConfigurerTest { +public class WebConfigurerUnitTest { private WebConfigurer webConfigurer; diff --git a/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/web/rest/LogsResourceIntTest.java b/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/web/rest/LogsResourceIntTest.java index 18ab835be7..7966947217 100644 --- a/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/web/rest/LogsResourceIntTest.java +++ b/jhipster/jhipster-uaa/uaa/src/test/java/com/baeldung/jhipster/uaa/web/rest/LogsResourceIntTest.java @@ -51,7 +51,7 @@ public class LogsResourceIntTest { public void changeLogs() throws Exception { LoggerVM logger = new LoggerVM(); logger.setLevel("INFO"); - logger.setName("ROOT"); + logger.setName("some.test.logger"); restLogsMockMvc.perform(put("/management/logs") .contentType(TestUtil.APPLICATION_JSON_UTF8) diff --git a/jhipster/jhipster-uaa/uaa/src/test/resources/config/application.yml b/jhipster/jhipster-uaa/uaa/src/test/resources/config/application.yml index d5389ee223..fc27146486 100644 --- a/jhipster/jhipster-uaa/uaa/src/test/resources/config/application.yml +++ b/jhipster/jhipster-uaa/uaa/src/test/resources/config/application.yml @@ -21,6 +21,8 @@ eureka: instanceId: uaa:${spring.application.instance-id:${random.value}} spring: + main: + banner-mode: "off" application: name: uaa cache: diff --git a/jhipster/pom.xml b/jhipster/pom.xml index 1703e82e0e..8954ef0703 100644 --- a/jhipster/pom.xml +++ b/jhipster/pom.xml @@ -9,7 +9,7 @@ pom - parent-boot-1 com.baeldung @@ -17,11 +17,39 @@ ../parent-boot-1 + + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + + + com.vaadin.external.google + android-json + + + org.json + json + + + test + + + + org.hibernate hibernate-java8 + + + net.bytebuddy + byte-buddy + ${byte-buddy.version} + test + @@ -29,5 +57,5 @@ jhipster-microservice jhipster-uaa - + diff --git a/jmeter/README.md b/jmeter/README.md index 53aca8d34b..6fdc79a2ce 100644 --- a/jmeter/README.md +++ b/jmeter/README.md @@ -51,5 +51,5 @@ Enjoy it :) ### Relevant Articles: - [Intro to Performance Testing using JMeter](https://www.baeldung.com/jmeter) -- [Configure Jenkins to Run and Show JMeter Tests](https://www.baeldung.com/jenkins-and-jmeter) +- [Configure Jenkins to Run and Show JMeter Tests](https://www.baeldung.com/ops/jenkins-and-jmeter) - [Write Extracted Data to a File Using JMeter](https://www.baeldung.com/jmeter-write-to-file) diff --git a/json-2/README.md b/json-2/README.md index 64ca7e6449..aebc42c472 100644 --- a/json-2/README.md +++ b/json-2/README.md @@ -7,3 +7,4 @@ This module contains articles about JSON. - [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) - [Introduction to Moshi Json](https://www.baeldung.com/java-json-moshi) - [Hypermedia Serialization With JSON-LD](https://www.baeldung.com/json-linked-data) +- [Generate a Java Class From JSON](https://www.baeldung.com/java-generate-class-from-json) diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java index 65eecd0d38..1b18463856 100644 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java +++ b/json-2/src/main/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversion.java @@ -17,7 +17,22 @@ import com.sun.codemodel.JCodeModel; public class JsonToJavaClassConversion { - public Object convertJsonToJavaClass(URL inputJson, File outputJavaClassDirectory, String packageName, String className) throws IOException { + public static void main(String[] args) { + String packageName = "com.baeldung.jsontojavaclass.pojo"; + String basePath = "src/main/resources"; + File inputJson = new File(basePath + File.separator + "input.json"); + File outputPojoDirectory = new File(basePath + File.separator + "convertedPojo"); + outputPojoDirectory.mkdirs(); + try { + new JsonToJavaClassConversion().convertJsonToJavaClass(inputJson.toURI().toURL(), outputPojoDirectory, packageName, inputJson.getName().replace(".json", "")); + } catch (IOException e) { + System.out.println("Encountered issue while converting to pojo: " + e.getMessage()); + e.printStackTrace(); + } + } + + + public void convertJsonToJavaClass(URL inputJsonUrl, File outputJavaClassDirectory, String packageName, String javaClassName) throws IOException { JCodeModel jcodeModel = new JCodeModel(); GenerationConfig config = new DefaultGenerationConfig() { @@ -33,10 +48,9 @@ public class JsonToJavaClassConversion { }; SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator()); - mapper.generate(jcodeModel, className, packageName, inputJson); + mapper.generate(jcodeModel, javaClassName, packageName, inputJsonUrl); jcodeModel.build(outputJavaClassDirectory); - return mapper; } } diff --git a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java index 4c8a719de0..38ebb8a0f8 100644 --- a/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java +++ b/json-2/src/main/java/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -5,9 +5,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.annotation.Generated; - import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -16,7 +14,14 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @JsonInclude(JsonInclude.Include.NON_NULL) -@JsonPropertyOrder({ "name", "area", "author", "id", "salary", "topics" }) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) @Generated("jsonschema2pojo") public class SamplePojo { @@ -143,40 +148,37 @@ public class SamplePojo { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append(SamplePojo.class.getName()) - .append('@') - .append(Integer.toHexString(System.identityHashCode(this))) - .append('['); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); sb.append("name"); sb.append('='); - sb.append(((this.name == null) ? "" : this.name)); + sb.append(((this.name == null)?"":this.name)); sb.append(','); sb.append("area"); sb.append('='); - sb.append(((this.area == null) ? "" : this.area)); + sb.append(((this.area == null)?"":this.area)); sb.append(','); sb.append("author"); sb.append('='); - sb.append(((this.author == null) ? "" : this.author)); + sb.append(((this.author == null)?"":this.author)); sb.append(','); sb.append("id"); sb.append('='); - sb.append(((this.id == null) ? "" : this.id)); + sb.append(((this.id == null)?"":this.id)); sb.append(','); sb.append("salary"); sb.append('='); - sb.append(((this.salary == null) ? "" : this.salary)); + sb.append(((this.salary == null)?"":this.salary)); sb.append(','); sb.append("topics"); sb.append('='); - sb.append(((this.topics == null) ? "" : this.topics)); + sb.append(((this.topics == null)?"":this.topics)); sb.append(','); sb.append("additionalProperties"); sb.append('='); - sb.append(((this.additionalProperties == null) ? "" : this.additionalProperties)); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); sb.append(','); - if (sb.charAt((sb.length() - 1)) == ',') { - sb.setCharAt((sb.length() - 1), ']'); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); } else { sb.append(']'); } @@ -186,13 +188,13 @@ public class SamplePojo { @Override public int hashCode() { int result = 1; - result = ((result * 31) + ((this.area == null) ? 0 : this.area.hashCode())); - result = ((result * 31) + ((this.author == null) ? 0 : this.author.hashCode())); - result = ((result * 31) + ((this.topics == null) ? 0 : this.topics.hashCode())); - result = ((result * 31) + ((this.name == null) ? 0 : this.name.hashCode())); - result = ((result * 31) + ((this.id == null) ? 0 : this.id.hashCode())); - result = ((result * 31) + ((this.additionalProperties == null) ? 0 : this.additionalProperties.hashCode())); - result = ((result * 31) + ((this.salary == null) ? 0 : this.salary.hashCode())); + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); return result; } @@ -205,10 +207,7 @@ public class SamplePojo { return false; } SamplePojo rhs = ((SamplePojo) other); - return ((((((((this.area == rhs.area) || ((this.area != null) && this.area.equals(rhs.area))) && ((this.author == rhs.author) || ((this.author != null) && this.author.equals(rhs.author)))) - && ((this.topics == rhs.topics) || ((this.topics != null) && this.topics.equals(rhs.topics)))) && ((this.name == rhs.name) || ((this.name != null) && this.name.equals(rhs.name)))) - && ((this.id == rhs.id) || ((this.id != null) && this.id.equals(rhs.id)))) && ((this.additionalProperties == rhs.additionalProperties) || ((this.additionalProperties != null) && this.additionalProperties.equals(rhs.additionalProperties)))) - && ((this.salary == rhs.salary) || ((this.salary != null) && this.salary.equals(rhs.salary)))); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); } } diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java new file mode 100644 index 0000000000..e3d901edf4 --- /dev/null +++ b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Address.java @@ -0,0 +1,119 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "city", + "country" +}) +@Generated("jsonschema2pojo") +public class Address { + + @JsonProperty("city") + private String city; + @JsonProperty("country") + private String country; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("city") + public String getCity() { + return city; + } + + @JsonProperty("city") + public void setCity(String city) { + this.city = city; + } + + public Address withCity(String city) { + this.city = city; + return this; + } + + @JsonProperty("country") + public String getCountry() { + return country; + } + + @JsonProperty("country") + public void setCountry(String country) { + this.country = country; + } + + public Address withCountry(String country) { + this.country = country; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Address withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Address.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("city"); + sb.append('='); + sb.append(((this.city == null)?"":this.city)); + sb.append(','); + sb.append("country"); + sb.append('='); + sb.append(((this.country == null)?"":this.country)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.country == null)? 0 :this.country.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.city == null)? 0 :this.city.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Address) == false) { + return false; + } + Address rhs = ((Address) other); + return ((((this.country == rhs.country)||((this.country!= null)&&this.country.equals(rhs.country)))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.city == rhs.city)||((this.city!= null)&&this.city.equals(rhs.city)))); + } + +} diff --git a/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java new file mode 100644 index 0000000000..19bee8db4d --- /dev/null +++ b/json-2/src/main/resources/convertedPojo/com/baeldung/jsontojavaclass/pojo/Input.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "topics", + "address" +}) +@Generated("jsonschema2pojo") +public class Input { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonProperty("address") + private Address address; + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public Input withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public Input withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public Input withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public Input withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public Input withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonProperty("address") + public Address getAddress() { + return address; + } + + @JsonProperty("address") + public void setAddress(Address address) { + this.address = address; + } + + public Input withAddress(Address address) { + this.address = address; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public Input withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(Input.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("address"); + sb.append('='); + sb.append(((this.address == null)?"":this.address)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.address == null)? 0 :this.address.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Input) == false) { + return false; + } + Input rhs = ((Input) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.address == rhs.address)||((this.address!= null)&&this.address.equals(rhs.address))))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties)))); + } + +} diff --git a/json-2/src/main/resources/input.json b/json-2/src/main/resources/input.json new file mode 100644 index 0000000000..22706ede53 --- /dev/null +++ b/json-2/src/main/resources/input.json @@ -0,0 +1,16 @@ +{ + "name": "Baeldung", + "area": "tech blogs", + "author": "Eugen", + "id": 32134, + "topics": [ + "java", + "kotlin", + "cs", + "linux" + ], + "address": { + "city": "Bucharest", + "country": "Romania" + } +} \ No newline at end of file diff --git a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java b/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java index 8dbfb14b45..f8000fa6fb 100644 --- a/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java +++ b/json-2/src/test/java/com/baeldung/jsontojavaclass/JsonToJavaClassConversionUnitTest.java @@ -3,6 +3,7 @@ package com.baeldung.jsontojavaclass; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; +import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -21,17 +22,16 @@ class JsonToJavaClassConversionUnitTest { File inputJson = new File(jsonPath + "sample_input.json"); // create the local directory for generating the Java Class file - String outputPath = "src/main/java/"; + String outputPath = "src/test/resources/"; File outputJavaClassDirectory = new File(outputPath); - outputJavaClassDirectory.mkdirs(); - String className = "SamplePojo"; + String javaClassName = "SamplePojo"; - Object object = jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() - .toURL(), outputJavaClassDirectory, packageName, className); - System.out.println(object); + jsonToJavaConversion.convertJsonToJavaClass(inputJson.toURI() + .toURL(), outputJavaClassDirectory, packageName, javaClassName); - Assertions.assertNotNull(object); + File outputJavaClassPath = new File(outputPath + packageName.replace(".", "/")); + Assertions.assertTrue(Arrays.stream(outputJavaClassPath.listFiles()).peek(System.out::println).anyMatch(file -> (javaClassName+".java").equalsIgnoreCase(file.getName()))); } diff --git a/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java b/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java new file mode 100644 index 0000000000..38ebb8a0f8 --- /dev/null +++ b/json-2/src/test/resources/com/baeldung/jsontojavaclass/pojo/SamplePojo.java @@ -0,0 +1,213 @@ + +package com.baeldung.jsontojavaclass.pojo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.annotation.Generated; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "name", + "area", + "author", + "id", + "salary", + "topics" +}) +@Generated("jsonschema2pojo") +public class SamplePojo { + + @JsonProperty("name") + private String name; + @JsonProperty("area") + private String area; + @JsonProperty("author") + private String author; + @JsonProperty("id") + private Integer id; + @JsonProperty("salary") + private Integer salary; + @JsonProperty("topics") + private List topics = new ArrayList(); + @JsonIgnore + private Map additionalProperties = new HashMap(); + + @JsonProperty("name") + public String getName() { + return name; + } + + @JsonProperty("name") + public void setName(String name) { + this.name = name; + } + + public SamplePojo withName(String name) { + this.name = name; + return this; + } + + @JsonProperty("area") + public String getArea() { + return area; + } + + @JsonProperty("area") + public void setArea(String area) { + this.area = area; + } + + public SamplePojo withArea(String area) { + this.area = area; + return this; + } + + @JsonProperty("author") + public String getAuthor() { + return author; + } + + @JsonProperty("author") + public void setAuthor(String author) { + this.author = author; + } + + public SamplePojo withAuthor(String author) { + this.author = author; + return this; + } + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + public SamplePojo withId(Integer id) { + this.id = id; + return this; + } + + @JsonProperty("salary") + public Integer getSalary() { + return salary; + } + + @JsonProperty("salary") + public void setSalary(Integer salary) { + this.salary = salary; + } + + public SamplePojo withSalary(Integer salary) { + this.salary = salary; + return this; + } + + @JsonProperty("topics") + public List getTopics() { + return topics; + } + + @JsonProperty("topics") + public void setTopics(List topics) { + this.topics = topics; + } + + public SamplePojo withTopics(List topics) { + this.topics = topics; + return this; + } + + @JsonAnyGetter + public Map getAdditionalProperties() { + return this.additionalProperties; + } + + @JsonAnySetter + public void setAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + } + + public SamplePojo withAdditionalProperty(String name, Object value) { + this.additionalProperties.put(name, value); + return this; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(SamplePojo.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('['); + sb.append("name"); + sb.append('='); + sb.append(((this.name == null)?"":this.name)); + sb.append(','); + sb.append("area"); + sb.append('='); + sb.append(((this.area == null)?"":this.area)); + sb.append(','); + sb.append("author"); + sb.append('='); + sb.append(((this.author == null)?"":this.author)); + sb.append(','); + sb.append("id"); + sb.append('='); + sb.append(((this.id == null)?"":this.id)); + sb.append(','); + sb.append("salary"); + sb.append('='); + sb.append(((this.salary == null)?"":this.salary)); + sb.append(','); + sb.append("topics"); + sb.append('='); + sb.append(((this.topics == null)?"":this.topics)); + sb.append(','); + sb.append("additionalProperties"); + sb.append('='); + sb.append(((this.additionalProperties == null)?"":this.additionalProperties)); + sb.append(','); + if (sb.charAt((sb.length()- 1)) == ',') { + sb.setCharAt((sb.length()- 1), ']'); + } else { + sb.append(']'); + } + return sb.toString(); + } + + @Override + public int hashCode() { + int result = 1; + result = ((result* 31)+((this.area == null)? 0 :this.area.hashCode())); + result = ((result* 31)+((this.author == null)? 0 :this.author.hashCode())); + result = ((result* 31)+((this.topics == null)? 0 :this.topics.hashCode())); + result = ((result* 31)+((this.name == null)? 0 :this.name.hashCode())); + result = ((result* 31)+((this.id == null)? 0 :this.id.hashCode())); + result = ((result* 31)+((this.additionalProperties == null)? 0 :this.additionalProperties.hashCode())); + result = ((result* 31)+((this.salary == null)? 0 :this.salary.hashCode())); + return result; + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof SamplePojo) == false) { + return false; + } + SamplePojo rhs = ((SamplePojo) other); + return ((((((((this.area == rhs.area)||((this.area!= null)&&this.area.equals(rhs.area)))&&((this.author == rhs.author)||((this.author!= null)&&this.author.equals(rhs.author))))&&((this.topics == rhs.topics)||((this.topics!= null)&&this.topics.equals(rhs.topics))))&&((this.name == rhs.name)||((this.name!= null)&&this.name.equals(rhs.name))))&&((this.id == rhs.id)||((this.id!= null)&&this.id.equals(rhs.id))))&&((this.additionalProperties == rhs.additionalProperties)||((this.additionalProperties!= null)&&this.additionalProperties.equals(rhs.additionalProperties))))&&((this.salary == rhs.salary)||((this.salary!= null)&&this.salary.equals(rhs.salary)))); + } + +} diff --git a/jta/pom.xml b/jta/pom.xml index 1937f55a20..e9f9364646 100644 --- a/jta/pom.xml +++ b/jta/pom.xml @@ -29,7 +29,6 @@ org.springframework.boot spring-boot-starter - org.hsqldb hsqldb diff --git a/ksqldb/README.md b/ksqldb/README.md new file mode 100644 index 0000000000..53ae7e35b2 --- /dev/null +++ b/ksqldb/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Introduction to ksqlDB](https://www.baeldung.com/ksqldb) diff --git a/ksqldb/pom.xml b/ksqldb/pom.xml index 13867b16e3..970e8c3788 100644 --- a/ksqldb/pom.xml +++ b/ksqldb/pom.xml @@ -28,34 +28,29 @@ ksqldb-api-client ${ksqldb.version} - org.projectlombok lombok ${lombok.version} - org.awaitility awaitility ${awaitility.version} test - org.assertj assertj-core ${assertj.version} test - org.testcontainers testcontainers ${testcontainers.version} test - org.testcontainers junit-jupiter @@ -71,4 +66,4 @@ 1.15.3 - + \ No newline at end of file diff --git a/kubernetes/k8s-admission-controller/README.md b/kubernetes/k8s-admission-controller/README.md index c446ab403d..9c824d76b3 100644 --- a/kubernetes/k8s-admission-controller/README.md +++ b/kubernetes/k8s-admission-controller/README.md @@ -1,3 +1,4 @@ ## Relevant Articles: - [Creating a Kubertes Admission Controller in Java](https://www.baeldung.com/java-kubernetes-admission-controller) +- [Access Control Models](https://www.baeldung.com/java-access-control-models) diff --git a/kubernetes/k8s-intro/README.md b/kubernetes/k8s-intro/README.md index 8c11f4d53e..bce7784aa1 100644 --- a/kubernetes/k8s-intro/README.md +++ b/kubernetes/k8s-intro/README.md @@ -18,3 +18,4 @@ If you get a valid response, then you're good to go. - [Using Watch with the Kubernetes API](https://www.baeldung.com/java-kubernetes-watch) - [Using Namespaces and Selectors With the Kubernetes Java API](https://www.baeldung.com/java-kubernetes-namespaces-selectors) - [Creating, Updating and Deleting Resources with the Java Kubernetes API](https://www.baeldung.com/java-kubernetes-api-crud) +- [A Quick Intro to the Kubernetes Java Client](https://www.baeldung.com/kubernetes-java-client) diff --git a/kubernetes/k8s-intro/pom.xml b/kubernetes/k8s-intro/pom.xml index 5da137ebb6..61722cb2c8 100644 --- a/kubernetes/k8s-intro/pom.xml +++ b/kubernetes/k8s-intro/pom.xml @@ -17,7 +17,6 @@ client-java 11.0.0 - ch.qos.logback logback-classic diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index d2ed06af6a..4b33df9a1d 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -111,9 +111,9 @@ - mulesoft - Mulesoft Repository - https://repository.mulesoft.org/nexus/content/repositories/public/ + bedatadriven + BeDataDriven repository + https://nexus.bedatadriven.com/content/groups/public/ @@ -144,7 +144,7 @@ 1.15 3.6 3.6.2 - RELEASE + 3.5-beta72 3.0 1.8.1 4.4 diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index cce2e57d22..75b2cc962d 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -104,12 +104,12 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.slf4j slf4j-log4j12 - ${slf4j.version} + ${org.slf4j.version} com.univocity @@ -161,7 +161,6 @@ 4.0.0 1.1.0 3.6.2 - 1.7.25 3.0.0 2.8.4 29.0-jre diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml index 717ee802db..c5ad08448f 100644 --- a/libraries-data/pom.xml +++ b/libraries-data/pom.xml @@ -108,7 +108,7 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} org.apache.storm @@ -173,7 +173,6 @@ 3.8.4 0.15.0 2.2.0 - 1.7.25 1.6.0.1 diff --git a/libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java b/libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java index 7a497c4a83..15a16e22da 100644 --- a/libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java +++ b/libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java @@ -22,8 +22,6 @@ public class JMapperRelationalIntegrationTest { UserDto1 result1 = relationalMapper.oneToMany(UserDto1.class, user); UserDto2 result2= relationalMapper.oneToMany(UserDto2.class, user); - System.out.println(result1); - System.out.println(result2); assertEquals(user.getId(), result1.getId()); assertEquals(user.getEmail(), result1.getUsername()); assertEquals(user.getId(), result2.getId()); @@ -40,8 +38,6 @@ public class JMapperRelationalIntegrationTest { UserDto1 result1 = relationalMapper.oneToMany(UserDto1.class, user); UserDto2 result2 = relationalMapper.oneToMany(UserDto2.class, user); - System.out.println(result1); - System.out.println(result2); assertEquals(user.getId(), result1.getId()); assertEquals(user.getEmail(), result1.getUsername()); assertEquals(user.getId(), result2.getId()); @@ -64,8 +60,6 @@ public class JMapperRelationalIntegrationTest { UserDto1 result1 = relationalMapper.oneToMany(UserDto1.class, user); UserDto2 result2 = relationalMapper.oneToMany(UserDto2.class, user); - System.out.println(result1); - System.out.println(result2); assertEquals(user.getId(), result1.getId()); assertEquals(user.getEmail(), result1.getUsername()); assertEquals(user.getId(), result2.getId()); diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java index cc39bc9dd2..a7ecd7946e 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java @@ -1,22 +1,23 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; import java.util.Arrays; public class CreateSplitZipFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); - int splitLength = 1024 * 1024 * 10; //10MB + int splitLength = 1024 * 1024 * 10; // 10MB zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength); zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java index 10e7ddd339..924d80a921 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java @@ -1,12 +1,14 @@ package com.baeldung.java.io.zip4j; +import java.io.IOException; + import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; public class ExtractAllFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.extractAll("/destination_directory"); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java index 4cf466d02b..ad79557a37 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java @@ -1,12 +1,14 @@ package com.baeldung.java.io.zip4j; +import java.io.IOException; + import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; public class ExtractSingleFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.extractFile("aFile.txt", "/destination_directory"); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java index 4d89e8665f..ed25494083 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java @@ -1,19 +1,20 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; public class ZipFolder { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.addFolder(new File("/users/folder_to_add"), zipParameters); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java index dcb860ef92..081d207294 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java @@ -1,27 +1,34 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; import java.util.Arrays; import java.util.List; public class ZipMultiFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setEncryptionMethod(EncryptionMethod.AES); - List filesToAdd = Arrays.asList( - new File("aFile.txt"), - new File("bFile.txt") - ); + File firstFile = new File("aFile.txt"); + File secondFile = new File("bFile.txt"); + if (!firstFile.exists()) { + firstFile.createNewFile(); + } + if (!secondFile.exists()) { + secondFile.createNewFile(); + } + + List filesToAdd = Arrays.asList(firstFile, secondFile); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); zipFile.addFiles(filesToAdd, zipParameters); + zipFile.close(); } } diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java index a5f600df47..d0947afa2e 100644 --- a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java @@ -1,21 +1,27 @@ package com.baeldung.java.io.zip4j; import net.lingala.zip4j.ZipFile; -import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.model.enums.CompressionLevel; import net.lingala.zip4j.model.enums.EncryptionMethod; import java.io.File; +import java.io.IOException; public class ZipSingleFile { - public static void main(String[] args) throws ZipException { + public static void main(String[] args) throws IOException { ZipParameters zipParameters = new ZipParameters(); zipParameters.setEncryptFiles(true); zipParameters.setCompressionLevel(CompressionLevel.HIGHER); zipParameters.setEncryptionMethod(EncryptionMethod.AES); ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); - zipFile.addFile(new File("aFile.txt")); + + File fileToAdd = new File("aFile.txt"); + if (!fileToAdd.exists()) { + fileToAdd.createNewFile(); + } + zipFile.addFile(fileToAdd); + zipFile.close(); } } diff --git a/libraries-security/pom.xml b/libraries-security/pom.xml index 0031b7bc06..46e12eb655 100644 --- a/libraries-security/pom.xml +++ b/libraries-security/pom.xml @@ -78,6 +78,29 @@ sshd-core ${apache-mina.version} + + org.xacml4j + xacml-core + ${xacml4j.version} + + + org.slf4j + slf4j-log4j12 + + + + + org.xacml4j + xacml-test + ${xacml4j.version} + test + + + org.slf4j + slf4j-log4j12 + + + @@ -90,6 +113,7 @@ 0.1.55 2.5.1 2.4.0.RELEASE + 1.4.0 \ No newline at end of file diff --git a/libraries-security/src/main/java/com/baeldung/scribejava/ScribejavaApplication.java b/libraries-security/src/main/java/com/baeldung/scribejava/ScribejavaApplication.java index bb86c497b0..5b18567b2d 100644 --- a/libraries-security/src/main/java/com/baeldung/scribejava/ScribejavaApplication.java +++ b/libraries-security/src/main/java/com/baeldung/scribejava/ScribejavaApplication.java @@ -2,9 +2,11 @@ package com.baeldung.scribejava; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication +@ServletComponentScan public class ScribejavaApplication { public static void main(String[] args) { diff --git a/libraries-security/src/main/java/com/baeldung/scribejava/controller/RBACController.java b/libraries-security/src/main/java/com/baeldung/scribejava/controller/RBACController.java new file mode 100644 index 0000000000..785f6228e8 --- /dev/null +++ b/libraries-security/src/main/java/com/baeldung/scribejava/controller/RBACController.java @@ -0,0 +1,27 @@ +package com.baeldung.scribejava.controller; + +import java.io.IOException; + +import javax.annotation.security.DeclareRoles; +import javax.annotation.security.RolesAllowed; +import javax.servlet.ServletException; +import javax.servlet.annotation.HttpConstraint; +import javax.servlet.annotation.ServletSecurity; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(name="rbac", urlPatterns = {"/protected"}) +@DeclareRoles("USER") +@ServletSecurity( + @HttpConstraint(rolesAllowed = "USER") +) +public class RBACController extends HttpServlet { + + private static final long serialVersionUID = 1L; + + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.getWriter().println("Hello, USER"); + } +} diff --git a/libraries-security/src/test/java/com/baeldung/xacml4j/NightlyWithdrawalPolicyUnitTest.java b/libraries-security/src/test/java/com/baeldung/xacml4j/NightlyWithdrawalPolicyUnitTest.java new file mode 100644 index 0000000000..013c78370f --- /dev/null +++ b/libraries-security/src/test/java/com/baeldung/xacml4j/NightlyWithdrawalPolicyUnitTest.java @@ -0,0 +1,233 @@ +package com.baeldung.xacml4j; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; +import org.xacml4j.v20.Xacml20TestUtility; +import org.xacml4j.v30.Attribute; +import org.xacml4j.v30.Categories; +import org.xacml4j.v30.Category; +import org.xacml4j.v30.CompositeDecisionRule; +import org.xacml4j.v30.Decision; +import org.xacml4j.v30.Entity; +import org.xacml4j.v30.RequestContext; +import org.xacml4j.v30.ResponseContext; +import org.xacml4j.v30.Result; +import org.xacml4j.v30.XacmlPolicyTestSupport; +import org.xacml4j.v30.pdp.PolicyDecisionPoint; +import org.xacml4j.v30.pdp.PolicyDecisionPointBuilder; +import org.xacml4j.v30.spi.combine.DecisionCombiningAlgorithmProviderBuilder; +import org.xacml4j.v30.spi.function.FunctionProviderBuilder; +import org.xacml4j.v30.spi.pip.PolicyInformationPointBuilder; +import org.xacml4j.v30.spi.repository.InMemoryPolicyRepository; +import org.xacml4j.v30.spi.repository.PolicyRepository; +import org.xacml4j.v30.types.DoubleExp; +import org.xacml4j.v30.types.StringExp; +import org.xacml4j.v30.types.TimeExp; + +public class NightlyWithdrawalPolicyUnitTest extends XacmlPolicyTestSupport { + + private static final String POLICY_SET = "xacml4j/NightlyWithdrawalsPolicy.xml"; + + @Test + public void testWhenNightlyWithdrawalOver500_thenFail() throws Exception { + + PolicyDecisionPoint pdp = buildPDP(POLICY_SET); + + // Action category + Attribute actionAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:action:action-id") + .value(StringExp.of("withdrawal")) + .build(); + Entity actionEntity = Entity.builder() + .attribute(actionAttribute) + .build(); + Category actionCategory = Category.builder(Categories.ACTION) + .entity(actionEntity) + .build(); + + // Environment Category + Attribute timeAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:environment:current-time") + .includeInResult(false) + .value(TimeExp.of("21:00:00")) + .build(); + Entity timeEntity = Entity.builder() + .attribute(timeAttribute) + .build(); + + Category environmentCategory = Category.builder(Categories.ENVIRONMENT) + .entity(timeEntity) + .build(); + + // ATM category + Attribute amountAttribute = Attribute.builder("urn:baeldung:atm:withdrawal:amount") + .value(DoubleExp.of("1200.00")) + .build(); + Entity atmEntity = Entity.builder() + .attribute(amountAttribute) + .build(); + + Category atmCategory = Category.builder(Categories.parse("urn:baeldung:atm:withdrawal")) + .entity(atmEntity) + .build(); + + RequestContext request = RequestContext.builder() + .attributes(actionCategory, environmentCategory, atmCategory) + .build(); + + ResponseContext response = pdp.decide(request); + assertNotNull(response); + assertTrue("Shoud have at least one result", response.getResults() != null && !response.getResults() + .isEmpty()); + + Result result = response.getResults() + .iterator() + .next(); + assertTrue("Evaluation should succeed", result.getStatus() + .isSuccess()); + assertEquals("Should DENY withdrawal", Decision.DENY, result.getDecision()); + + } + + @Test + public void testWhenNightlyWithdrawalUnder500_thenSuccess() throws Exception { + + PolicyDecisionPoint pdp = buildPDP(POLICY_SET); + + // Action category + Attribute actionAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:action:action-id") + .includeInResult(false) + .value(StringExp.of("withdrawal")) + .build(); + Entity actionEntity = Entity.builder() + .attribute(actionAttribute) + .build(); + Category actionCategory = Category.builder(Categories.ACTION) + .entity(actionEntity) + .build(); + + // Environment Category + Attribute timeAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:environment:current-time") + .includeInResult(false) + .value(TimeExp.of("21:00:00")) + .build(); + Entity timeEntity = Entity.builder() + .attribute(timeAttribute) + .build(); + Category environmentCategory = Category.builder(Categories.ENVIRONMENT) + .entity(timeEntity) + .build(); + + // ATM category + Attribute amountAttribute = Attribute.builder("urn:baeldung:atm:withdrawal:amount") + .value(DoubleExp.of("499.00")) + .build(); + Entity atmEntity = Entity.builder() + .attribute(amountAttribute) + .build(); + Category atmCategory = Category.builder(Categories.parse("urn:baeldung:atm:withdrawal")) + .entity(atmEntity) + .build(); + + RequestContext request = RequestContext.builder() + .attributes(actionCategory, environmentCategory, atmCategory) + .build(); + + ResponseContext response = pdp.decide(request); + assertNotNull(response); + assertTrue("Shoud have at least one result", + response.getResults() != null && !response.getResults().isEmpty()); + + Result result = response.getResults().iterator().next(); + assertTrue("Evaluation should succeed", result.getStatus().isSuccess()); + assertEquals("Should PERMIT withdrawal", Decision.PERMIT, result.getDecision()); + + } + + @Test + public void testWhenBusinessHoursWithdrawalOver500_thenSuccess() throws Exception { + + PolicyDecisionPoint pdp = buildPDP(POLICY_SET); + + // Action category + Attribute actionAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:action:action-id") + .includeInResult(false) + .value(StringExp.of("withdrawal")) + .build(); + Entity actionEntity = Entity.builder() + .attribute(actionAttribute) + .build(); + Category actionCategory = Category.builder(Categories.ACTION) + .entity(actionEntity) + .build(); + + // Environment Category + Attribute timeAttribute = Attribute.builder("urn:oasis:names:tc:xacml:1.0:environment:current-time") + .includeInResult(false) + .value(TimeExp.of("12:00:00")) + .build(); + Entity timeEntity = Entity.builder() + .attribute(timeAttribute) + .build(); + Category environmentCategory = Category.builder(Categories.ENVIRONMENT) + .entity(timeEntity) + .build(); + + // ATM category + Attribute amountAttribute = Attribute.builder("urn:baeldung:atm:withdrawal:amount") + .value(DoubleExp.of("2000.00")) + .build(); + Entity atmEntity = Entity.builder() + .attribute(amountAttribute) + .build(); + + Category atmCategory = Category.builder(Categories.parse("urn:baeldung:atm:withdrawal")) + .entity(atmEntity) + .build(); + + RequestContext request = RequestContext.builder() + .attributes(actionCategory, environmentCategory, atmCategory) + .build(); + + ResponseContext response = pdp.decide(request); + assertNotNull(response); + assertTrue("Shoud have at least one result", response.getResults() != null && !response.getResults() + .isEmpty()); + + Result result = response.getResults() + .iterator() + .next(); + assertTrue("Evaluation should succeed", result.getStatus().isSuccess()); + assertEquals("Should PERMIT withdrawal", Decision.PERMIT, result.getDecision()); + + } + + private PolicyDecisionPoint buildPDP(String... policyResources) throws Exception { + PolicyRepository repository = new InMemoryPolicyRepository("tes-repository", FunctionProviderBuilder.builder() + .defaultFunctions() + .build(), + DecisionCombiningAlgorithmProviderBuilder.builder() + .withDefaultAlgorithms() + .create()); + + List policies = new ArrayList(policyResources.length); + for (String policyResource : policyResources) { + CompositeDecisionRule policy = repository.importPolicy(Xacml20TestUtility.getClasspathResource(policyResource)); + log.info("Policy: {}", policy); + policies.add(policy); + } + + return PolicyDecisionPointBuilder.builder("testPdp") + .policyRepository(repository) + .pip(PolicyInformationPointBuilder.builder("testPip") + .defaultResolvers() + .build()) + .rootPolicy(policies.get(0)) + .build(); + } + +} diff --git a/libraries-security/src/test/resources/xacml4j/NightlyWithdrawalsPolicy.xml b/libraries-security/src/test/resources/xacml4j/NightlyWithdrawalsPolicy.xml new file mode 100644 index 0000000000..163df47f36 --- /dev/null +++ b/libraries-security/src/test/resources/xacml4j/NightlyWithdrawalsPolicy.xml @@ -0,0 +1,137 @@ + + + + Withdrawal policy example + + + + +Deny withdrawals over $500 between 20:00 and 08:00 + + + + + + withdrawal + + + + + + + + + + + + + 08:00:00 + 20:00:00 + + + + + + + 500.00 + + + + + + +Permit withdrawals under $500 between 20:00 and 08:00 + + + + + + withdrawal + + + + + + + + + + + + + 08:00:00 + 20:00:00 + + + + + + + 500.00 + + + + + + +Permit withdrawals of any value between 08:00 and 20:00 + + + + + + withdrawal + + + + + + + + + + + 08:00:00 + 20:00:00 + + + + + diff --git a/libraries-security/src/test/resources/xacml4j/Request.xml b/libraries-security/src/test/resources/xacml4j/Request.xml new file mode 100644 index 0000000000..105c7ad02f --- /dev/null +++ b/libraries-security/src/test/resources/xacml4j/Request.xml @@ -0,0 +1,30 @@ + + + + + + withdrawal + + + + + 21:00:00 + + + + + 1200 + + + \ No newline at end of file diff --git a/libraries-security/src/test/resources/xacml4j/Response.xml b/libraries-security/src/test/resources/xacml4j/Response.xml new file mode 100644 index 0000000000..f82b16080d --- /dev/null +++ b/libraries-security/src/test/resources/xacml4j/Response.xml @@ -0,0 +1,9 @@ + + + + NotApplicable + + + + + diff --git a/libraries/pom.xml b/libraries/pom.xml index ffb2b09699..59e79f0775 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -40,6 +40,11 @@ javatuples ${javatuples.version} + + org.javassist + javassist + ${javaassist.version} + org.assertj @@ -51,42 +56,6 @@ javers-core ${javers.version} - - net.serenity-bdd - serenity-core - ${serenity.version} - test - - - org.asciidoctor - asciidoctorj - - - - - net.serenity-bdd - serenity-junit - ${serenity.version} - test - - - net.serenity-bdd - serenity-jbehave - ${serenity.jbehave.version} - test - - - net.serenity-bdd - serenity-rest-assured - ${serenity.version} - test - - - net.serenity-bdd - serenity-jira-requirements-provider - ${serenity.jira.version} - test - org.datanucleus @@ -139,30 +108,6 @@ spring-web ${spring.version} - - net.serenity-bdd - serenity-spring - ${serenity.version} - test - - - org.springframework - spring-test - - - - - net.serenity-bdd - serenity-screenplay - ${serenity.version} - test - - - net.serenity-bdd - serenity-screenplay-webdriver - ${serenity.version} - test - org.lucee @@ -253,29 +198,6 @@ - - maven-failsafe-plugin - ${maven-failsafe-plugin.version} - - - chromedriver - - - - - net.serenity-bdd.maven.plugins - serenity-maven-plugin - ${serenity.plugin.version} - - - serenity-reports - post-integration-test - - aggregate - - - - org.datanucleus @@ -380,6 +302,7 @@ 4.3.8.RELEASE 3.0.3 2.3.0 + 3.21.0-GA 0.9.12 3.0.2 3.6 diff --git a/libraries/serenity.properties b/libraries/serenity.properties deleted file mode 100644 index c77df9c0f7..0000000000 --- a/libraries/serenity.properties +++ /dev/null @@ -1,4 +0,0 @@ -jira.url= -jira.project= -jira.username= -jira.password= \ No newline at end of file diff --git a/logging-modules/log4j/README.md b/logging-modules/log4j/README.md index 371d0246ce..a47d0ae89b 100644 --- a/logging-modules/log4j/README.md +++ b/logging-modules/log4j/README.md @@ -3,4 +3,4 @@ - [Introduction to SLF4J](http://www.baeldung.com/slf4j-with-log4j2-logback) - [A Guide to Rolling File Appenders](http://www.baeldung.com/java-logging-rolling-file-appenders) - [Logging Exceptions Using SLF4J](https://www.baeldung.com/slf4j-log-exceptions) -- [Log4j Warning: "No Appenders Could Be Found for Logger"](https://www.baeldung.com/log4j-no-appenders-found) +- [Log4j Warning: “No Appenders Could Be Found for Logger”](https://www.baeldung.com/log4j-no-appenders-found) diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml index 6d32025d94..512dc9e5a3 100644 --- a/logging-modules/logback/pom.xml +++ b/logging-modules/logback/pom.xml @@ -69,7 +69,6 @@ - 1.2.3 0.1.5 3.3.5 1.4.7 diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml index 1e7ce6cbfc..48687a73b9 100644 --- a/mapstruct/pom.xml +++ b/mapstruct/pom.xml @@ -1,7 +1,7 @@ - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 mapstruct 1.0 @@ -90,4 +90,4 @@ 3.16.1 - \ No newline at end of file + \ No newline at end of file diff --git a/maven-modules/host-maven-repo-example/pom.xml b/maven-modules/host-maven-repo-example/pom.xml index 9434e4a3b3..bd58dddeda 100644 --- a/maven-modules/host-maven-repo-example/pom.xml +++ b/maven-modules/host-maven-repo-example/pom.xml @@ -1,28 +1,17 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.maven.plugin host-maven-repo-example 1.0-SNAPSHOT - https://github.com/sgrverma23/host-maven-repo-example.git - - - github - 8 - 8 - - https://github.com/sgrverma23/host-maven-repo-example.git scm:git:git@github.com:sgrverma23/host-maven-repo-example.git scm:git:git@github.com:sgrverma23/host-maven-repo-example.git - - internal.repo @@ -30,6 +19,7 @@ file://${project.build.directory}/mvn-artifact + @@ -95,6 +85,7 @@ + PROJECT-REPO-URL @@ -105,4 +96,11 @@ + + + github + 8 + 8 + + \ No newline at end of file diff --git a/maven-modules/maven-dependency-management/README.md b/maven-modules/maven-dependency-management/README.md new file mode 100644 index 0000000000..0abf99d2d3 --- /dev/null +++ b/maven-modules/maven-dependency-management/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Maven dependencyManagement vs. dependencies Tags](https://www.baeldung.com/maven-dependencymanagement-vs-dependencies-tags) diff --git a/maven-modules/maven-dependency-management/pom.xml b/maven-modules/maven-dependency-management/pom.xml new file mode 100644 index 0000000000..fb2bdfe602 --- /dev/null +++ b/maven-modules/maven-dependency-management/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + com.baeldung + maven-dependency + 1.0.0-SNAPSHOT + pom + + + maven-modules + com.baeldung + 0.0.1-SNAPSHOT + + + + + + + junit + junit + 4.13.2 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + + + + junit + junit + + + org.apache.commons + commons-lang3 + + + \ No newline at end of file diff --git a/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java b/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java new file mode 100644 index 0000000000..ea4451a41b --- /dev/null +++ b/maven-modules/maven-dependency-management/src/main/java/com/baeldung/Main.java @@ -0,0 +1,11 @@ +package com.baeldung; + +import org.apache.commons.lang3.StringUtils; + +public class Main { + + public static void main(String[] args) { + + StringUtils.isBlank(" "); + } +} diff --git a/maven-modules/maven-parent-pom-resolution/README.md b/maven-modules/maven-parent-pom-resolution/README.md new file mode 100644 index 0000000000..b315b2f626 --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Understanding Maven’s “relativePath” Tag for a Parent POM](https://www.baeldung.com/maven-relativepath) diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml new file mode 100644 index 0000000000..e1f411db2f --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module1/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + module1 + pom + + + com.baeldung.maven-parent-pom-resolution + aggregator + 1.0.0-SNAPSHOT + + + + diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml new file mode 100644 index 0000000000..d983f35e3e --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module2/module3/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + module3 + pom + + + com.baeldung.maven-parent-pom-resolution + aggregator + 1.0.0-SNAPSHOT + + + ../../pom.xml + + + diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml new file mode 100644 index 0000000000..48c1ebab9d --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/aggregator/module2/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + module2 + pom + + + com.baeldung.maven-parent-pom-resolution + module1 + 1.0.0-SNAPSHOT + ../module1/pom.xml + + + + + module3 + + + diff --git a/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml b/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml new file mode 100644 index 0000000000..8f6e3453a5 --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/aggregator/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + com.baeldung.maven-parent-pom-resolution + aggregator + pom + + + com.baeldung + maven-parent-pom-resolution + 1.0.0-SNAPSHOT + + + + + module1 + module2 + + + diff --git a/maven-modules/maven-parent-pom-resolution/pom.xml b/maven-modules/maven-parent-pom-resolution/pom.xml new file mode 100644 index 0000000000..e5340032b7 --- /dev/null +++ b/maven-modules/maven-parent-pom-resolution/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + com.baeldung + maven-parent-pom-resolution + 1.0.0-SNAPSHOT + pom + + + aggregator + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.2.0 + + + + + + \ No newline at end of file diff --git a/maven-modules/maven-printing-plugins/pom.xml b/maven-modules/maven-printing-plugins/pom.xml index b68c88dbee..07ddd8d1e8 100644 --- a/maven-modules/maven-printing-plugins/pom.xml +++ b/maven-modules/maven-printing-plugins/pom.xml @@ -53,7 +53,8 @@ Hello, world Embed a line break: ${line.separator} - ArtifactId is ${project.artifactId} + ArtifactId is + ${project.artifactId} INFO /logs/log-echo.txt @@ -76,7 +77,7 @@ log.info('Test message: {}', 'Hello, World!') log.info('Embed a line break {}', System.lineSeparator()) - log.info('ArtifactId is: ${project.artifactId}') + log.info('ArtifactId is: ${project.artifactId}') log.warn('Message only in debug mode') diff --git a/maven-modules/maven-properties/pom.xml b/maven-modules/maven-properties/pom.xml index 2cd92da42f..f4c657c2e4 100644 --- a/maven-modules/maven-properties/pom.xml +++ b/maven-modules/maven-properties/pom.xml @@ -18,7 +18,7 @@ junit junit - 4.13 + ${junit.version} @@ -46,6 +46,7 @@ ${project.name} property-from-pom + 4.13 \ No newline at end of file diff --git a/maven-modules/maven-surefire-plugin/README.md b/maven-modules/maven-surefire-plugin/README.md new file mode 100644 index 0000000000..63cf5ade3b --- /dev/null +++ b/maven-modules/maven-surefire-plugin/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Running a Single Test or Method With Maven](https://www.baeldung.com/maven-run-single-test) diff --git a/maven-modules/maven-surefire-plugin/pom.xml b/maven-modules/maven-surefire-plugin/pom.xml new file mode 100644 index 0000000000..98decc69e1 --- /dev/null +++ b/maven-modules/maven-surefire-plugin/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + maven-surefire-plugin + 0.0.1-SNAPSHOT + maven-surefire-plugin + jar + + + com.baeldung + maven-modules + 0.0.1-SNAPSHOT + + + diff --git a/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheFirstUnitTest.java b/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheFirstUnitTest.java new file mode 100644 index 0000000000..1e7fce885e --- /dev/null +++ b/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheFirstUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.runasingletest; + +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class TheFirstUnitTest { + private static final Logger logger = LoggerFactory.getLogger(TheFirstUnitTest.class); + + @Test + void whenTestCase_thenPass() { + logger.info("Running a dummyTest"); + } +} diff --git a/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheSecondUnitTest.java b/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheSecondUnitTest.java new file mode 100644 index 0000000000..fd05751599 --- /dev/null +++ b/maven-modules/maven-surefire-plugin/src/test/java/com/baeldung/runasingletest/TheSecondUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.runasingletest; + +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class TheSecondUnitTest { + + private static final Logger logger = LoggerFactory.getLogger(TheSecondUnitTest.class); + + @Test + void whenTestCase1_thenPrintTest1_1() { + logger.info("Running When Case1: test1_1"); + } + + @Test + void whenTestCase1_thenPrintTest1_2() { + logger.info("Running When Case1: test1_2"); + } + + @Test + void whenTestCase1_thenPrintTest1_3() { + logger.info("Running When Case1: test1_3"); + } + + @Test + void whenTestCase2_thenPrintTest2_1() { + logger.info("Running When Case2: test2_1"); + } +} diff --git a/maven-modules/pom.xml b/maven-modules/pom.xml index 5b4b567ae6..3f87c60406 100644 --- a/maven-modules/pom.xml +++ b/maven-modules/pom.xml @@ -35,6 +35,9 @@ maven-builder-plugin host-maven-repo-example plugin-management + maven-surefire-plugin + maven-parent-pom-resolution + maven-dependency-management \ No newline at end of file diff --git a/mesos-marathon/README.md b/mesos-marathon/README.md index 8e5b8e4974..6fb3e7782b 100644 --- a/mesos-marathon/README.md +++ b/mesos-marathon/README.md @@ -4,6 +4,6 @@ This module contains articles about Marathon and Mesos. ### Relevant articles -- [Simple Jenkins Pipeline with Marathon and Mesos](https://www.baeldung.com/jenkins-pipeline-with-marathon-mesos) +- [Simple Jenkins Pipeline with Marathon and Mesos](https://www.baeldung.com/ops/jenkins-pipeline-with-marathon-mesos) To run the pipeline, please modify the dockerise.sh file with your own username and password for docker login. diff --git a/micronaut/pom.xml b/micronaut/pom.xml index 196218d856..e9b5a0409f 100644 --- a/micronaut/pom.xml +++ b/micronaut/pom.xml @@ -61,7 +61,7 @@ ch.qos.logback logback-classic - ${lombok.version} + ${logback.version} runtime @@ -145,7 +145,6 @@ 1.0.0.RC2 1.8 1.3.2 - 1.2.3 3.1.6.RELEASE 3.7.0 3.1.0 diff --git a/netflix-modules/genie/README.md b/netflix-modules/genie/README.md index f6e15ba403..81b9d28dc4 100644 --- a/netflix-modules/genie/README.md +++ b/netflix-modules/genie/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [Introduction to Netflix Genie](https://www.baeldung.com/netflix-genie-intro) +- [Introduction to Netflix Genie](https://www.baeldung.com/ops/netflix-genie-intro) diff --git a/oauth2-framework-impl/oauth2-authorization-server/pom.xml b/oauth2-framework-impl/oauth2-authorization-server/pom.xml index f8ced851ba..c206fc2e55 100644 --- a/oauth2-framework-impl/oauth2-authorization-server/pom.xml +++ b/oauth2-framework-impl/oauth2-authorization-server/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-authorization-server oauth2-authorization-server diff --git a/oauth2-framework-impl/oauth2-client/pom.xml b/oauth2-framework-impl/oauth2-client/pom.xml index 814dabc664..715b7e729c 100644 --- a/oauth2-framework-impl/oauth2-client/pom.xml +++ b/oauth2-framework-impl/oauth2-client/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-client oauth2-client diff --git a/oauth2-framework-impl/oauth2-resource-server/pom.xml b/oauth2-framework-impl/oauth2-resource-server/pom.xml index 8f135055a2..d3af2cfd80 100644 --- a/oauth2-framework-impl/oauth2-resource-server/pom.xml +++ b/oauth2-framework-impl/oauth2-resource-server/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 oauth2-resource-server oauth2-resource-server diff --git a/oauth2-framework-impl/pom.xml b/oauth2-framework-impl/pom.xml index 31983b08ad..5cfcb22fab 100644 --- a/oauth2-framework-impl/pom.xml +++ b/oauth2-framework-impl/pom.xml @@ -1,7 +1,7 @@ - + xmlns="http://maven.apache.org/POM/4.0.0"> 4.0.0 com.baeldung.oauth2 oauth2-framework-impl diff --git a/osgi/osgi-intro-sample-client/pom.xml b/osgi/osgi-intro-sample-client/pom.xml index b1b04aef78..7e679dd3a7 100644 --- a/osgi/osgi-intro-sample-client/pom.xml +++ b/osgi/osgi-intro-sample-client/pom.xml @@ -37,9 +37,7 @@ ${project.artifactId} ${project.version} com.baeldung.osgi.sample.client.Client - com.baeldung.osgi.sample.client - diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index accbc2df96..2e520640ec 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -81,7 +81,7 @@ 3.3.0 1.0.22.RELEASE - 2.5.1 + 2.5.4 1.9.1 3.4.0 diff --git a/parent-spring-5/pom.xml b/parent-spring-5/pom.xml index 6bedf9fb67..c4446ddda8 100644 --- a/parent-spring-5/pom.xml +++ b/parent-spring-5/pom.xml @@ -30,7 +30,7 @@ - 5.3.7 + 5.3.9 5.2.3.RELEASE 1.5.10.RELEASE diff --git a/patterns/design-patterns-architectural/README.md b/patterns/design-patterns-architectural/README.md index a8a5a98b88..bb11eea5e1 100644 --- a/patterns/design-patterns-architectural/README.md +++ b/patterns/design-patterns-architectural/README.md @@ -3,3 +3,4 @@ - [The DAO Pattern in Java](https://www.baeldung.com/java-dao-pattern) - [DAO vs Repository Patterns](https://www.baeldung.com/java-dao-vs-repository) - [Difference Between MVC and MVP Patterns](https://www.baeldung.com/mvc-vs-mvp-pattern) +- [The DTO Pattern (Data Transfer Object)](https://www.baeldung.com/java-dto-pattern) diff --git a/patterns/design-patterns-architectural/pom.xml b/patterns/design-patterns-architectural/pom.xml index c917744757..11194a9c92 100644 --- a/patterns/design-patterns-architectural/pom.xml +++ b/patterns/design-patterns-architectural/pom.xml @@ -15,6 +15,21 @@ + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-test + ${spring-boot.version} + + + io.rest-assured + rest-assured + ${rest-assured.version} + org.assertj assertj-core @@ -38,6 +53,8 @@ 3.9.1 5.2.16.Final 6.0.6 + 2.5.3 + 3.3.0 \ No newline at end of file diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/Main.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/Main.java new file mode 100644 index 0000000000..3177c06c46 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/Main.java @@ -0,0 +1,12 @@ +package com.baeldung.dtopattern; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } +} + diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/Mapper.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/Mapper.java new file mode 100644 index 0000000000..3440dad23c --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/Mapper.java @@ -0,0 +1,28 @@ +package com.baeldung.dtopattern.api; + +import com.baeldung.dtopattern.domain.Role; +import com.baeldung.dtopattern.domain.User; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +import static java.util.stream.Collectors.toList; + +@Component +class Mapper { + public UserDTO toDto(User user) { + String name = user.getName(); + List roles = user + .getRoles() + .stream() + .map(Role::getName) + .collect(toList()); + + return new UserDTO(name, roles); + } + + public User toUser(UserCreationDTO userDTO) { + return new User(userDTO.getName(), userDTO.getPassword(), new ArrayList<>()); + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserController.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserController.java new file mode 100644 index 0000000000..2abd483c81 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserController.java @@ -0,0 +1,51 @@ +package com.baeldung.dtopattern.api; + +import com.baeldung.dtopattern.domain.RoleService; +import com.baeldung.dtopattern.domain.User; +import com.baeldung.dtopattern.domain.UserService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static java.util.stream.Collectors.toList; + +@RestController +@RequestMapping("/users") +class UserController { + + private UserService userService; + private RoleService roleService; + private Mapper mapper; + + public UserController(UserService userService, RoleService roleService, Mapper mapper) { + this.userService = userService; + this.roleService = roleService; + this.mapper = mapper; + } + + @GetMapping + @ResponseBody + public List getUsers() { + return userService.getAll() + .stream() + .map(mapper::toDto) + .collect(toList()); + } + + + @PostMapping + @ResponseBody + public UserIdDTO create(@RequestBody UserCreationDTO userDTO) { + User user = mapper.toUser(userDTO); + + userDTO.getRoles() + .stream() + .map(role -> roleService.getOrCreate(role)) + .forEach(user::addRole); + + userService.save(user); + + return new UserIdDTO(user.getId()); + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserCreationDTO.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserCreationDTO.java new file mode 100644 index 0000000000..47786a9f15 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserCreationDTO.java @@ -0,0 +1,36 @@ +package com.baeldung.dtopattern.api; + +import java.util.List; + +public class UserCreationDTO { + + private String name; + private String password; + private List roles; + + UserCreationDTO() {} + + public String getName() { + return name; + } + + public String getPassword() { + return password; + } + + public List getRoles() { + return roles; + } + + void setName(String name) { + this.name = name; + } + + void setPassword(String password) { + this.password = password; + } + + void setRoles(List roles) { + this.roles = roles; + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserDTO.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserDTO.java new file mode 100644 index 0000000000..c00de0077b --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserDTO.java @@ -0,0 +1,22 @@ +package com.baeldung.dtopattern.api; + +import java.util.List; + +public class UserDTO { + private String name; + private List roles; + + public UserDTO(String name, List roles) { + this.name = name; + this.roles = roles; + } + + public String getName() { + return name; + } + + public List getRoles() { + return roles; + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserIdDTO.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserIdDTO.java new file mode 100644 index 0000000000..33bd336a4f --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/api/UserIdDTO.java @@ -0,0 +1,14 @@ +package com.baeldung.dtopattern.api; + +public class UserIdDTO { + + private String id; + + public UserIdDTO(String id) { + this.id = id; + } + + public String getId() { + return id; + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/InMemoryRepository.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/InMemoryRepository.java new file mode 100644 index 0000000000..e138b51328 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/InMemoryRepository.java @@ -0,0 +1,49 @@ +package com.baeldung.dtopattern.domain; + +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +class InMemoryRepository implements UserRepository, RoleRepository { + + private Map users = new LinkedHashMap<>(); + private Map roles = new LinkedHashMap<>(); + + @Override + public List getAll() { + return new ArrayList<>(users.values()); + } + + @Override + public void save(User user) { + user.setId(UUID.randomUUID().toString()); + users.put(user.getId(), user); + } + + @Override + public void save(Role role) { + role.setId(UUID.randomUUID().toString()); + roles.put(role.getId(), role); + } + + @Override + public Role getRoleById(String id) { + return roles.get(id); + } + + @Override + public Role getRoleByName(String name) { + return roles.values() + .stream() + .filter(role -> role.getName().equalsIgnoreCase(name)) + .findFirst() + .orElse(null); + } + + @Override + public void deleteAll() { + users.clear(); + roles.clear(); + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/Role.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/Role.java new file mode 100644 index 0000000000..fa049421f8 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/Role.java @@ -0,0 +1,28 @@ +package com.baeldung.dtopattern.domain; + +import java.util.Objects; + +public class Role { + private String id; + private String name; + + public Role(String name) { + this.name = Objects.requireNonNull(name); + } + + public String getId() { + return id; + } + + void setId(String id) { + this.id = Objects.requireNonNull(id); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = Objects.requireNonNull(name); + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleRepository.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleRepository.java new file mode 100644 index 0000000000..1e4383672b --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleRepository.java @@ -0,0 +1,7 @@ +package com.baeldung.dtopattern.domain; + +public interface RoleRepository { + Role getRoleById(String id); + Role getRoleByName(String name); + void save(Role role); +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleService.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleService.java new file mode 100644 index 0000000000..f1d6b639cb --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/RoleService.java @@ -0,0 +1,32 @@ +package com.baeldung.dtopattern.domain; + +import org.springframework.stereotype.Service; + +import java.util.Objects; + +@Service +public class RoleService { + + private RoleRepository repository; + + public RoleService(RoleRepository repository) { + this.repository = repository; + } + + public Role getOrCreate(String name) { + Role role = repository.getRoleByName(name); + + if (role == null) { + role = new Role(name); + repository.save(role); + } + + return role; + } + + public void save(Role role) { + Objects.requireNonNull(role); + repository.save(role); + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/User.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/User.java new file mode 100644 index 0000000000..fcc7629910 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/User.java @@ -0,0 +1,80 @@ +package com.baeldung.dtopattern.domain; + +import javax.crypto.*; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public class User { + + private static SecretKeySpec KEY = initKey(); + + static SecretKeySpec initKey(){ + try { + SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey(); + return new SecretKeySpec(secretKey.getEncoded(), "AES"); + } catch (NoSuchAlgorithmException ex) { + return null; + } + } + + private String id; + private String name; + private String password; + private List roles; + + public User(String name, String password, List roles) { + this.name = Objects.requireNonNull(name); + this.password = this.encrypt(password); + this.roles = Objects.requireNonNull(roles); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public void addRole(Role role) { + roles.add(role); + } + + public List getRoles() { + return Collections.unmodifiableList(roles); + } + + public String getId() { + return id; + } + + void setId(String id) { + this.id = id; + } + + String encrypt(String password) { + Objects.requireNonNull(password); + try { + Cipher cipher = Cipher.getInstance("AES"); + cipher.init(Cipher.ENCRYPT_MODE, KEY); + final byte[] encryptedBytes = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8)); + return new String(encryptedBytes, StandardCharsets.UTF_8); + } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) { + // do nothing + return ""; + } + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserRepository.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserRepository.java new file mode 100644 index 0000000000..fe62c6c70e --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.dtopattern.domain; + +import java.util.List; + +public interface UserRepository { + List getAll(); + void save(User user); + void deleteAll(); +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserService.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserService.java new file mode 100644 index 0000000000..ec65d61823 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/dtopattern/domain/UserService.java @@ -0,0 +1,25 @@ +package com.baeldung.dtopattern.domain; + +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; + +@Service +public class UserService { + + private UserRepository repository; + + public UserService(UserRepository repository) { + this.repository = repository; + } + + public List getAll() { + return repository.getAll(); + } + + public void save(User user) { + Objects.requireNonNull(user); + repository.save(user); + } +} diff --git a/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/MapperUnitTest.java b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/MapperUnitTest.java new file mode 100644 index 0000000000..97ccad1feb --- /dev/null +++ b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/MapperUnitTest.java @@ -0,0 +1,56 @@ +package com.baeldung.dtopattern.api; + +import com.baeldung.dtopattern.domain.Role; +import com.baeldung.dtopattern.domain.User; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class MapperUnitTest { + + @Test + void toDto_shouldMapFromDomainToDTO() { + String name = "Test"; + String password = "test"; + Role admin = new Role("admin"); + List expectedRoles = Collections.singletonList("admin"); + + List roles = new ArrayList<>(); + roles.add(admin); + + User user = new User(name, password, roles); + Mapper mapper = new Mapper(); + + UserDTO dto = mapper.toDto(user); + + assertEquals(name, dto.getName()); + assertEquals(expectedRoles, dto.getRoles()); + } + + @Test + void toUser_shouldMapFromDTOToDomain() { + String name = "Test"; + String password = "test"; + String role = "admin"; + + UserCreationDTO dto = new UserCreationDTO(); + dto.setName(name); + dto.setPassword(password); + dto.setRoles(Collections.singletonList("admin")); + + User expectedUser = new User(name, password, new ArrayList<>()); + + Mapper mapper = new Mapper(); + + User user = mapper.toUser(dto); + + assertEquals(name, user.getName()); + assertEquals(expectedUser.getPassword(), user.getPassword()); + assertEquals(Collections.emptyList(), user.getRoles()); + } + +} \ No newline at end of file diff --git a/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/UserControllerIntegrationTest.java b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/UserControllerIntegrationTest.java new file mode 100644 index 0000000000..13739f4c83 --- /dev/null +++ b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/api/UserControllerIntegrationTest.java @@ -0,0 +1,80 @@ +package com.baeldung.dtopattern.api; + +import com.baeldung.dtopattern.domain.Role; +import com.baeldung.dtopattern.domain.RoleRepository; +import com.baeldung.dtopattern.domain.User; +import com.baeldung.dtopattern.domain.UserRepository; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.restassured.http.ContentType; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.boot.web.server.LocalServerPort; + +import java.util.Collections; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.*; +import static org.springframework.http.HttpStatus.OK; + +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +class UserControllerIntegrationTest { + + @Autowired + private TestRestTemplate restTemplate; + + @Autowired + private UserRepository userRepository; + + @Autowired + private RoleRepository roleRepository; + + @LocalServerPort + int port; + + @Autowired + private ObjectMapper objectMapper; + + @Test + void create_shouldReturnUseId() throws Exception { + UserCreationDTO request = new UserCreationDTO(); + request.setName("User 1"); + request.setPassword("Test@123456"); + request.setRoles(Collections.singletonList("admin")); + + given() + .contentType(ContentType.JSON) + .body(objectMapper.writeValueAsString(request)) + .when() + .port(port) + .post("/users") + .then() + .statusCode(OK.value()) + .body("id", notNullValue()); + } + + @Test + void getAll_shouldReturnUseDTO() { + + userRepository.deleteAll(); + + String roleName = "admin"; + Role admin = new Role(roleName); + roleRepository.save(admin); + + String name = "User 1"; + User user = new User(name, "Test@123456", Collections.singletonList(admin)); + userRepository.save(user); + + given() + .port(port) + .when() + .get("/users") + .then() + .statusCode(OK.value()) + .body("size()", is(1)) + .body("[0].name", equalTo(name)) + .body("[0].roles", hasItem(roleName)); + } +} diff --git a/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/InMemoryRepositoryUnitTest.java b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/InMemoryRepositoryUnitTest.java new file mode 100644 index 0000000000..8b05e962fa --- /dev/null +++ b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/InMemoryRepositoryUnitTest.java @@ -0,0 +1,83 @@ +package com.baeldung.dtopattern.domain; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class InMemoryRepositoryUnitTest { + + @Test + void getAll_shouldReturnAllUsers() { + + String name = "Test"; + String password = "test123"; + List roles = new ArrayList<>(); + + User user = new User(name, password, roles); + List expectedUsers = Collections.singletonList(user); + + InMemoryRepository repository = new InMemoryRepository(); + repository.save(user); + + List users = repository.getAll(); + + assertEquals(expectedUsers, users); + } + + @Test + void save_whenSavingUser_shouldSetId() { + String name = "Test"; + String password = "test123"; + List roles = new ArrayList<>(); + + User user = new User(name, password, roles); + + InMemoryRepository repository = new InMemoryRepository(); + repository.save(user); + + assertNotNull(user.getId()); + } + + @Test + void save_whenSavingRole_shouldSetId() { + String name = "Test"; + Role role = new Role(name); + + InMemoryRepository repository = new InMemoryRepository(); + repository.save(role); + + assertNotNull(role.getId()); + } + + @Test + void getRoleById_shouldReturnRoleById() { + String name = "Test"; + Role expectedRole = new Role(name); + + InMemoryRepository repository = new InMemoryRepository(); + repository.save(expectedRole); + + Role role = repository.getRoleById(expectedRole.getId()); + + assertEquals(expectedRole, role); + } + + @Test + void getRoleByName_shouldReturnRoleByName() { + String name = "Test"; + Role expectedRole = new Role(name); + + InMemoryRepository repository = new InMemoryRepository(); + repository.save(expectedRole); + + Role role = repository.getRoleByName(name); + + assertEquals(expectedRole, role); + } + +} \ No newline at end of file diff --git a/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/UserUnitTest.java b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/UserUnitTest.java new file mode 100644 index 0000000000..9ee0568a0d --- /dev/null +++ b/patterns/design-patterns-architectural/src/test/java/com/baeldung/dtopattern/domain/UserUnitTest.java @@ -0,0 +1,38 @@ +package com.baeldung.dtopattern.domain; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; + +class UserUnitTest { + + + @Test + void whenUserIsCreated_shouldEncryptPassword() { + User user = new User("Test", "test", new ArrayList<>()); + + assertEquals(user.encrypt("test"), user.getPassword()); + assertNotEquals(user.encrypt("Test"), user.getPassword()); + } + + @Test + void whenUserIsCreated_shouldFailIfNameIsNull() { + assertThrows(NullPointerException.class, () -> + new User(null, "test", new ArrayList<>())); + } + + @Test + void whenUserIsCreated_shouldFailIfPasswordIsNull() { + assertThrows(NullPointerException.class, () -> + new User("Test", null, new ArrayList<>())); + } + + @Test + void whenUserIsCreated_shouldFailIfRolesIsNull() { + assertThrows(NullPointerException.class, () -> + new User("Test", "Test", null)); + } + +} diff --git a/patterns/design-patterns-cloud/pom.xml b/patterns/design-patterns-cloud/pom.xml index 950b6efb94..c3e2fcfc39 100644 --- a/patterns/design-patterns-cloud/pom.xml +++ b/patterns/design-patterns-cloud/pom.xml @@ -8,5 +8,4 @@ 1.0.0-SNAPSHOT design-patterns-cloud pom - \ No newline at end of file diff --git a/patterns/enterprise-patterns/wire-tap/README.md b/patterns/enterprise-patterns/wire-tap/README.md index 95cd1d585f..61d27f5c44 100644 --- a/patterns/enterprise-patterns/wire-tap/README.md +++ b/patterns/enterprise-patterns/wire-tap/README.md @@ -29,7 +29,5 @@ For more details, check out the AmqApplicationUnitTest.class. ### Relevant Articles: -- [Wire tap (Enterprise Integration Pattern)](https://drafts.baeldung.com/?p=103346&preview=true) -- [Intro to Apache camel](https://www.baeldung.com/apache-camel-intro) - [Wire Tap Enterprise Integration Pattern](https://www.baeldung.com/wiretap-pattern) diff --git a/patterns/simplehexagonalexample/pom.xml b/patterns/simplehexagonalexample/pom.xml index b73e81be44..d9b9b36831 100644 --- a/patterns/simplehexagonalexample/pom.xml +++ b/patterns/simplehexagonalexample/pom.xml @@ -1,31 +1,32 @@ - 4.0.0 - 1.0.0-SNAPSHOT - simple-hexagonal-example - simpleHexagonalExample + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + 1.0.0-SNAPSHOT + simple-hexagonal-example + simpleHexagonalExample - - com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../../parent-boot-2 - + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + - - - org.springframework.boot - spring-boot-starter-web - - + + + org.springframework.boot + spring-boot-starter-web + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - \ No newline at end of file diff --git a/pdf/README.md b/pdf/README.md index bed468ad24..dd6931ba78 100644 --- a/pdf/README.md +++ b/pdf/README.md @@ -7,3 +7,4 @@ This module contains articles about PDF files. - [Creating PDF Files in Java](https://www.baeldung.com/java-pdf-creation) - [Generating PDF Files Using Thymeleaf](https://www.baeldung.com/thymeleaf-generate-pdf) - [Java Convert PDF to Base64](https://www.baeldung.com/java-convert-pdf-to-base64) +- [HTML to PDF Using OpenPDF](https://www.baeldung.com/java-html-to-pdf) diff --git a/pdf/pom.xml b/pdf/pom.xml index fb9508156e..6bd1d97402 100644 --- a/pdf/pom.xml +++ b/pdf/pom.xml @@ -71,6 +71,26 @@ flying-saucer-pdf ${flying-saucer-pdf.version} + + org.xhtmlrenderer + flying-saucer-pdf-openpdf + ${flying-saucer-pdf-openpdf.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + com.openhtmltopdf + openhtmltopdf-core + ${open-html-pdf-core.version} + + + com.openhtmltopdf + openhtmltopdf-pdfbox + ${open-html-pdfbox.version} + @@ -93,6 +113,10 @@ 3.15 3.0.11.RELEASE 9.1.20 + 1.0.6 + 1.0.6 + 9.1.22 + 1.14.2 \ No newline at end of file diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java new file mode 100644 index 0000000000..d8256a68f7 --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/CustomElementFactoryImpl.java @@ -0,0 +1,56 @@ +package com.baeldung.pdf.openpdf; + +import java.io.FileInputStream; +import java.io.InputStream; + +import org.apache.commons.io.IOUtils; +import org.w3c.dom.Element; +import org.xhtmlrenderer.extend.FSImage; +import org.xhtmlrenderer.extend.ReplacedElement; +import org.xhtmlrenderer.extend.ReplacedElementFactory; +import org.xhtmlrenderer.extend.UserAgentCallback; +import org.xhtmlrenderer.layout.LayoutContext; +import org.xhtmlrenderer.pdf.ITextFSImage; +import org.xhtmlrenderer.pdf.ITextImageElement; +import org.xhtmlrenderer.render.BlockBox; +import org.xhtmlrenderer.simple.extend.FormSubmissionListener; + +import com.lowagie.text.Image; + +public class CustomElementFactoryImpl implements ReplacedElementFactory { + @Override + public ReplacedElement createReplacedElement(LayoutContext lc, BlockBox box, UserAgentCallback uac, int cssWidth, int cssHeight) { + Element e = box.getElement(); + String nodeName = e.getNodeName(); + if (nodeName.equals("img")) { + String imagePath = e.getAttribute("src"); + try { + InputStream input = new FileInputStream("src/main/resources/" + imagePath); + byte[] bytes = IOUtils.toByteArray(input); + Image image = Image.getInstance(bytes); + FSImage fsImage = new ITextFSImage(image); + if (cssWidth != -1 || cssHeight != -1) { + fsImage.scale(cssWidth, cssHeight); + } else { + fsImage.scale(2000, 1000); + } + return new ITextImageElement(fsImage); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + return null; + } + + @Override + public void reset() { + } + + @Override + public void remove(Element e) { + } + + @Override + public void setFormSubmissionListener(FormSubmissionListener listener) { + } +} \ No newline at end of file diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java new file mode 100644 index 0000000000..927d85a4cb --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingFlyingSaucer.java @@ -0,0 +1,53 @@ +package com.baeldung.pdf.openpdf; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.xhtmlrenderer.layout.SharedContext; +import org.xhtmlrenderer.pdf.ITextRenderer; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +public class Html2PdfUsingFlyingSaucer { + + private static final String HTML_INPUT = "src/main/resources/htmlforopenpdf.html"; + private static final String PDF_OUTPUT = "src/main/resources/html2pdf.pdf"; + + public static void main(String[] args) { + try { + Html2PdfUsingFlyingSaucer htmlToPdf = new Html2PdfUsingFlyingSaucer(); + htmlToPdf.generateHtmlToPdf(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void generateHtmlToPdf() throws Exception { + File inputHTML = new File(HTML_INPUT); + Document inputHtml = createWellFormedHtml(inputHTML); + File outputPdf = new File(PDF_OUTPUT); + xhtmlToPdf(inputHtml, outputPdf); + } + + private Document createWellFormedHtml(File inputHTML) throws IOException { + Document document = Jsoup.parse(inputHTML, "UTF-8"); + document.outputSettings() + .syntax(Document.OutputSettings.Syntax.xml); + return document; + } + + private void xhtmlToPdf(Document xhtml, File outputPdf) throws Exception { + try (OutputStream outputStream = new FileOutputStream(outputPdf)) { + ITextRenderer renderer = new ITextRenderer(); + SharedContext sharedContext = renderer.getSharedContext(); + sharedContext.setPrint(true); + sharedContext.setInteractive(false); + sharedContext.setReplacedElementFactory(new CustomElementFactoryImpl()); + renderer.setDocumentFromString(xhtml.html()); + renderer.layout(); + renderer.createPDF(outputStream); + } + } +} diff --git a/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java new file mode 100644 index 0000000000..bc83da6102 --- /dev/null +++ b/pdf/src/main/java/com/baeldung/pdf/openpdf/Html2PdfUsingOpenHtml.java @@ -0,0 +1,55 @@ +package com.baeldung.pdf.openpdf; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.FileSystems; + +import org.jsoup.Jsoup; +import org.jsoup.helper.W3CDom; +import org.jsoup.nodes.Document; + +import com.openhtmltopdf.pdfboxout.PdfRendererBuilder; + +public class Html2PdfUsingOpenHtml { + + private static final String HTML_INPUT = "src/main/resources/htmlforopenpdf.html"; + private static final String PDF_OUTPUT = "src/main/resources/html2pdf.pdf"; + + public static void main(String[] args) { + try { + Html2PdfUsingOpenHtml htmlToPdf = new Html2PdfUsingOpenHtml(); + htmlToPdf.generateHtmlToPdf(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void generateHtmlToPdf() throws IOException { + File inputHTML = new File(HTML_INPUT); + Document doc = createWellFormedHtml(inputHTML); + xhtmlToPdf(doc, PDF_OUTPUT); + } + + private Document createWellFormedHtml(File inputHTML) throws IOException { + Document document = Jsoup.parse(inputHTML, "UTF-8"); + document.outputSettings() + .syntax(Document.OutputSettings.Syntax.xml); + return document; + } + + private void xhtmlToPdf(Document doc, String outputPdf) throws IOException { + try (OutputStream os = new FileOutputStream(outputPdf)) { + String baseUri = FileSystems.getDefault() + .getPath("src/main/resources/") + .toUri() + .toString(); + PdfRendererBuilder builder = new PdfRendererBuilder(); + builder.withUri(outputPdf); + builder.toStream(os); + builder.withW3cDocument(new W3CDom().fromJsoup(doc), baseUri); + builder.run(); + } + } +} diff --git a/pdf/src/main/resources/html2pdf.pdf b/pdf/src/main/resources/html2pdf.pdf new file mode 100644 index 0000000000..877ff4cacd Binary files /dev/null and b/pdf/src/main/resources/html2pdf.pdf differ diff --git a/pdf/src/main/resources/htmlforopenpdf.html b/pdf/src/main/resources/htmlforopenpdf.html new file mode 100644 index 0000000000..ae39965c87 --- /dev/null +++ b/pdf/src/main/resources/htmlforopenpdf.html @@ -0,0 +1,26 @@ + + + + + + + + Hello Baeldung! + + + + This is the tutorial to convert html to pdf. + + + + \ No newline at end of file diff --git a/pdf/src/main/resources/style.css b/pdf/src/main/resources/style.css new file mode 100644 index 0000000000..381ffadf00 --- /dev/null +++ b/pdf/src/main/resources/style.css @@ -0,0 +1,6 @@ +.myclass{ + font-family: Helvetica, sans-serif; + font-size:25; + font-weight: normal; + color: blue; +} \ No newline at end of file diff --git a/persistence-modules/deltaspike/pom.xml b/persistence-modules/deltaspike/pom.xml index af02ba76c0..1255e5ab27 100644 --- a/persistence-modules/deltaspike/pom.xml +++ b/persistence-modules/deltaspike/pom.xml @@ -16,6 +16,38 @@ 1.0.0-SNAPSHOT + + + + + org.wildfly.bom + jboss-javaee-7.0-with-tools + ${jboss.bom.version} + pom + import + + + org.wildfly.bom + jboss-javaee-7.0-with-hibernate + ${jboss.bom.version} + pom + import + + + org.apache.deltaspike.distribution + distributions-bom + ${deltaspike.version} + pom + import + + + + @@ -245,38 +277,6 @@ - - - - - org.wildfly.bom - jboss-javaee-7.0-with-tools - ${jboss.bom.version} - pom - import - - - org.wildfly.bom - jboss-javaee-7.0-with-hibernate - ${jboss.bom.version} - pom - import - - - org.apache.deltaspike.distribution - distributions-bom - ${deltaspike.version} - pom - import - - - - 3.7.4 1.8.2 diff --git a/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/lazycollection/LazyCollectionIntegrationTest.java b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/lazycollection/LazyCollectionIntegrationTest.java index 97888471a4..dd86820c03 100644 --- a/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/lazycollection/LazyCollectionIntegrationTest.java +++ b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/lazycollection/LazyCollectionIntegrationTest.java @@ -1,7 +1,5 @@ package com.baeldung.hibernate.lazycollection; -import com.baeldung.hibernate.lazycollection.model.Branch; -import com.baeldung.hibernate.lazycollection.model.Employee; import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; @@ -9,15 +7,14 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.dialect.H2Dialect; import org.hibernate.service.ServiceRegistry; - -import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import javax.annotation.PostConstruct; +import com.baeldung.hibernate.lazycollection.model.Branch; +import com.baeldung.hibernate.lazycollection.model.Employee; public class LazyCollectionIntegrationTest { diff --git a/persistence-modules/hibernate-annotations/src/test/resources/log4j.xml b/persistence-modules/hibernate-annotations/src/test/resources/log4j.xml index 2d153af124..7e2895f1e0 100644 --- a/persistence-modules/hibernate-annotations/src/test/resources/log4j.xml +++ b/persistence-modules/hibernate-annotations/src/test/resources/log4j.xml @@ -1,6 +1,5 @@ - - + @@ -10,16 +9,16 @@ - + - + - + - \ No newline at end of file + \ No newline at end of file diff --git a/persistence-modules/hibernate-annotations/src/test/resources/log4j2.xml b/persistence-modules/hibernate-annotations/src/test/resources/log4j2.xml index c5d0f12462..69352715da 100644 --- a/persistence-modules/hibernate-annotations/src/test/resources/log4j2.xml +++ b/persistence-modules/hibernate-annotations/src/test/resources/log4j2.xml @@ -8,9 +8,9 @@ - - - + + + diff --git a/persistence-modules/hibernate-annotations/src/test/resources/logback.xml b/persistence-modules/hibernate-annotations/src/test/resources/logback.xml index 9e591977d7..ed39d69fc2 100644 --- a/persistence-modules/hibernate-annotations/src/test/resources/logback.xml +++ b/persistence-modules/hibernate-annotations/src/test/resources/logback.xml @@ -8,9 +8,9 @@ - - - + + + diff --git a/persistence-modules/hibernate-enterprise/pom.xml b/persistence-modules/hibernate-enterprise/pom.xml index dadfa211be..1d9ebfc156 100644 --- a/persistence-modules/hibernate-enterprise/pom.xml +++ b/persistence-modules/hibernate-enterprise/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 hibernate-enterprise 0.0.1-SNAPSHOT diff --git a/persistence-modules/hibernate-libraries/pom.xml b/persistence-modules/hibernate-libraries/pom.xml index 19537156aa..7d552b262d 100644 --- a/persistence-modules/hibernate-libraries/pom.xml +++ b/persistence-modules/hibernate-libraries/pom.xml @@ -77,7 +77,7 @@ org.slf4j slf4j-api - ${slf4j.version} + ${org.slf4j.version} provided true @@ -174,12 +174,10 @@ 3.27.0-GA 2.3.1 2.0.0 - 1.2.3 3.0.2 3.8.1 3.8.1 8.0.19 - 1.7.30 2.1.3.RELEASE diff --git a/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..00c7274dd4 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,212 @@ + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.queryparams.Employee + true + + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.text.Exam + true + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.defaultvalues.User + true + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.querytypes.UserEntity + true + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.projections.Product + true + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.criteria.Item + true + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.multipletables.multipleentities.MealWithMultipleEntities + com.baeldung.jpa.multipletables.multipleentities.AllergensAsEntity + + com.baeldung.jpa.multipletables.secondarytable.MealAsSingleEntity + + com.baeldung.jpa.multipletables.secondarytable.embeddable.MealWithEmbeddedAllergens + com.baeldung.jpa.multipletables.secondarytable.embeddable.AllergensAsEmbeddable + + true + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.unrelated.entities.Cocktail + com.baeldung.jpa.unrelated.entities.Recipe + com.baeldung.jpa.unrelated.entities.MultipleRecipe + true + + + + + + + + + + + + + + org.eclipse.persistence.jpa.PersistenceProvider + com.baeldung.jpa.generateidvalue.Admin + com.baeldung.jpa.generateidvalue.Article + com.baeldung.jpa.generateidvalue.IdGenerator + com.baeldung.jpa.generateidvalue.Task + com.baeldung.jpa.generateidvalue.User + true + + + + + + + + + + + + + + diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md index c024d7c540..202c97a830 100644 --- a/persistence-modules/java-jpa-3/README.md +++ b/persistence-modules/java-jpa-3/README.md @@ -13,3 +13,5 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id) - [How to Return Multiple Entities In JPA Query](https://www.baeldung.com/jpa-return-multiple-entities) - [Defining Unique Constraints in JPA](https://www.baeldung.com/jpa-unique-constraints) +- [How to Check Field Existence in MongoDB?](https://www.baeldung.com/mongodb-check-field-exists) +- [Connecting to a Specific Schema in JDBC](https://www.baeldung.com/jdbc-connect-to-schema) diff --git a/persistence-modules/java-jpa-3/src/test/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/test/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..9a33f912bf --- /dev/null +++ b/persistence-modules/java-jpa-3/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,152 @@ + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.equality.EqualByJavaDefault + com.baeldung.jpa.equality.EqualById + com.baeldung.jpa.equality.EqualByBusinessKey + true + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.removal.ShipmentInfo + com.baeldung.jpa.removal.LineItem + com.baeldung.jpa.removal.OrderRequest + true + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.index.Student + true + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.multiplebagfetchexception.Album + com.baeldung.jpa.multiplebagfetchexception.Song + com.baeldung.jpa.multiplebagfetchexception.User + com.baeldung.jpa.multiplebagfetchexception.Artist + com.baeldung.jpa.multiplebagfetchexception.Offer + com.baeldung.jpa.multiplebagfetchexception.Playlist + com.baeldung.jpa.multiplebagfetchexception.FavoriteSong + true + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.hibernateunproxy.Payment + com.baeldung.jpa.hibernateunproxy.CreditCardPayment + com.baeldung.jpa.hibernateunproxy.PaymentReceipt + com.baeldung.jpa.hibernateunproxy.WebUser + true + + + + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.IdGeneration.User + true + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.uniqueconstraints.Person + com.baeldung.jpa.uniqueconstraints.Address + true + + + + + + + + + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.returnmultipleentities.Channel + com.baeldung.jpa.returnmultipleentities.Subscription + com.baeldung.jpa.returnmultipleentities.User + com.baeldung.jpa.returnmultipleentities.ReportRepository + true + + + + + + + + + + + + + + diff --git a/spring-kafka/src/test/resources/logback.xml b/persistence-modules/java-jpa-3/src/test/resources/logback.xml similarity index 63% rename from spring-kafka/src/test/resources/logback.xml rename to persistence-modules/java-jpa-3/src/test/resources/logback.xml index 7d900d8ea8..0e1b193434 100644 --- a/spring-kafka/src/test/resources/logback.xml +++ b/persistence-modules/java-jpa-3/src/test/resources/logback.xml @@ -1,12 +1,14 @@ - + - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - + %msg%n - + diff --git a/persistence-modules/java-jpa/README.md b/persistence-modules/java-jpa/README.md index be4c7fb79a..9dd76b13d6 100644 --- a/persistence-modules/java-jpa/README.md +++ b/persistence-modules/java-jpa/README.md @@ -14,4 +14,4 @@ This module contains articles about the Java Persistence API (JPA) in Java. - [Defining JPA Entities](https://www.baeldung.com/jpa-entities) - [JPA @Basic Annotation](https://www.baeldung.com/jpa-basic-annotation) - [Persisting Enums in JPA](https://www.baeldung.com/jpa-persisting-enums-in-jpa) -- More articles: [[next -->]](/java-jpa-2) +- More articles: [[next -->]](/persistence-modules/java-jpa-2) diff --git a/persistence-modules/java-mongodb/pom.xml b/persistence-modules/java-mongodb/pom.xml index 15d904b12c..03229e72bd 100644 --- a/persistence-modules/java-mongodb/pom.xml +++ b/persistence-modules/java-mongodb/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 java-mongodb 1.0-SNAPSHOT @@ -33,7 +33,7 @@ - 3.10.1 + 3.12.1 1.11 1.5.3 diff --git a/persistence-modules/java-mongodb/src/test/java/com/baeldung/existence.field/FieldExistenceLiveTest.java b/persistence-modules/java-mongodb/src/test/java/com/baeldung/existence.field/FieldExistenceLiveTest.java new file mode 100644 index 0000000000..ca37ac6664 --- /dev/null +++ b/persistence-modules/java-mongodb/src/test/java/com/baeldung/existence.field/FieldExistenceLiveTest.java @@ -0,0 +1,50 @@ +package com.baeldung.existence.field; + +import com.mongodb.BasicDBObject; +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Filters; +import org.bson.Document; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class FieldExistenceLiveTest { + private MongoClient mongoClient; + private MongoDatabase db; + private MongoCollection collection; + + @Before + public void setup() { + if (mongoClient == null) { + mongoClient = new MongoClient(); + db = mongoClient.getDatabase("existence"); + collection = db.getCollection("users"); + collection.insertOne(Document.parse("{'name':'Ben','surname': 'Big'}")); + } + } + + @Test + public void givenMongoCollection_whenUsingFilters_thenCheckingForExistingFieldWorks() { + Document nameDoc = collection.find(Filters.exists("name")).first(); + assertNotNull(nameDoc); + assertFalse(nameDoc.isEmpty()); + + nameDoc = collection.find(Filters.exists("non_existing")).first(); + assertNull(nameDoc); + } + + @Test + public void givenMongoCollection_whenUsingStandardDocumentQuery_thenCheckingForExistingFieldWorks() { + Document query = new Document("name", new BasicDBObject("$exists", true)); + Document doc = collection.find(query).first(); + assertNotNull(doc); + assertFalse(doc.isEmpty()); + + query = new Document("non_existing", new BasicDBObject("$exists", true)); + doc = collection.find(query).first(); + assertNull(doc); + } +} diff --git a/persistence-modules/redis/pom.xml b/persistence-modules/redis/pom.xml index 8079d56cbd..d1cb927c20 100644 --- a/persistence-modules/redis/pom.xml +++ b/persistence-modules/redis/pom.xml @@ -1,7 +1,7 @@ - + 4.0.0 redis 0.1-SNAPSHOT diff --git a/persistence-modules/spring-boot-persistence-2/pom.xml b/persistence-modules/spring-boot-persistence-2/pom.xml index b51ab17659..1a02b18e50 100644 --- a/persistence-modules/spring-boot-persistence-2/pom.xml +++ b/persistence-modules/spring-boot-persistence-2/pom.xml @@ -146,7 +146,7 @@ 3.9.1 2.1.8.RELEASE 0.9.5.2 - 19.6.0.0 + 21.1.0.0 \ No newline at end of file diff --git a/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleConfiguration.java b/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleConfiguration.java index 9cf7e27c99..e201c9eb76 100644 --- a/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleConfiguration.java +++ b/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleConfiguration.java @@ -20,7 +20,8 @@ public class OracleConfiguration { dataSource.setUser("books"); dataSource.setPassword("books"); dataSource.setURL("jdbc:oracle:thin:@//localhost:11521/ORCLPDB1"); - dataSource.setFastConnectionFailoverEnabled(true); + // Only with clients prior to v21 + // dataSource.setFastConnectionFailoverEnabled(true); dataSource.setImplicitCachingEnabled(true); // Only with clients prior to v11.2 // dataSource.setConnectionCachingEnabled(true); diff --git a/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleUCPConfiguration.java b/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleUCPConfiguration.java deleted file mode 100644 index b4c1544149..0000000000 --- a/persistence-modules/spring-boot-persistence-2/src/main/java/com/baeldung/spring/oracle/pooling/configuration/OracleUCPConfiguration.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.spring.oracle.pooling.configuration; - -import java.sql.SQLException; - -import javax.sql.DataSource; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -import oracle.ucp.jdbc.PoolDataSource; -import oracle.ucp.jdbc.PoolDataSourceFactory; - -@Configuration -@Profile("oracle-ucp") -public class OracleUCPConfiguration { - - @Bean - public DataSource dataSource() throws SQLException { - PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource(); - dataSource.setUser("books"); - dataSource.setPassword("books"); - dataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource"); - dataSource.setURL("jdbc:oracle:thin:@//localhost:11521/ORCLPDB1"); - - dataSource.setFastConnectionFailoverEnabled(true); - dataSource.setInitialPoolSize(5); - dataSource.setMinPoolSize(5); - dataSource.setMaxPoolSize(10); - return dataSource; - } -} diff --git a/persistence-modules/spring-boot-persistence-2/src/main/resources/application-oracle-pooling-basic.properties b/persistence-modules/spring-boot-persistence-2/src/main/resources/application-oracle-pooling-basic.properties index 9a1c7fc89d..9de2ee476b 100644 --- a/persistence-modules/spring-boot-persistence-2/src/main/resources/application-oracle-pooling-basic.properties +++ b/persistence-modules/spring-boot-persistence-2/src/main/resources/application-oracle-pooling-basic.properties @@ -21,6 +21,15 @@ spring.datasource.hikari.poolName=HikariPoolBooks spring.datasource.tomcat.maxActive=15 spring.datasource.tomcat.minIdle=5 +# UCP settings +#Note: These properties require JDBC version 21.0.0.0 +spring.datasource.ucp.connection-factory-class-name=oracle.jdbc.pool.OracleDataSource +spring.datasource.ucp.sql-for-validate-connection=select * from dual +spring.datasource.ucp.connection-pool-name=UcpPoolBooks +spring.datasource.ucp.initial-pool-size=5 +spring.datasource.ucp.min-pool-size=5 +spring.datasource.ucp.max-pool-size=10 + # JPA settings spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect spring.jpa.hibernate.use-new-id-generator-mappings=false diff --git a/persistence-modules/spring-boot-persistence-2/src/test/java/com/baeldung/spring/oracle/pooling/SpringOraclePoolingApplicationOracleUCPLiveTest.java b/persistence-modules/spring-boot-persistence-2/src/test/java/com/baeldung/spring/oracle/pooling/SpringOraclePoolingApplicationOracleUCPLiveTest.java index 4fb6aa6bae..cf418b2cf4 100644 --- a/persistence-modules/spring-boot-persistence-2/src/test/java/com/baeldung/spring/oracle/pooling/SpringOraclePoolingApplicationOracleUCPLiveTest.java +++ b/persistence-modules/spring-boot-persistence-2/src/test/java/com/baeldung/spring/oracle/pooling/SpringOraclePoolingApplicationOracleUCPLiveTest.java @@ -9,11 +9,13 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = {SpringOraclePoolingApplication.class}) -@ActiveProfiles({"oracle-pooling-basic", "oracle-ucp"}) +@ActiveProfiles({"oracle-pooling-basic"}) +@TestPropertySource(properties = "spring.datasource.type=oracle.ucp.jdbc.UCPDataSource") public class SpringOraclePoolingApplicationOracleUCPLiveTest { @Autowired @@ -21,7 +23,7 @@ public class SpringOraclePoolingApplicationOracleUCPLiveTest { @Test public void givenOracleUCPConfiguration_thenBuildsOraclePoolDataSource() { - assertTrue(dataSource instanceof oracle.ucp.jdbc.PoolDataSource); + assertTrue(dataSource instanceof oracle.ucp.jdbc.UCPDataSource); } } diff --git a/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-off.properties b/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-off.properties index 1055806ecf..ca60ef3ce3 100644 --- a/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-off.properties +++ b/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-off.properties @@ -8,7 +8,7 @@ spring.h2.console.path=/h2-console spring.datasource.data=data-trans.sql logging.level.org.hibernate.SQL=INFO -logging.level.org.hibernate.type=TRACE +logging.level.org.hibernate.type=INFO spring.jpa.properties.hibernate.validator.apply_to_ddl=false spring.jpa.properties.hibernate.enable_lazy_load_no_trans=false spring.jpa.open-in-view=false \ No newline at end of file diff --git a/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-on.properties b/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-on.properties index 77aacf0d77..0469ea0dde 100644 --- a/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-on.properties +++ b/persistence-modules/spring-boot-persistence-h2/src/main/resources/application-lazy-load-no-trans-on.properties @@ -8,7 +8,7 @@ spring.h2.console.path=/h2-console spring.datasource.data=data-trans.sql logging.level.org.hibernate.SQL=INFO -logging.level.org.hibernate.type=TRACE +logging.level.org.hibernate.type=INFO spring.jpa.properties.hibernate.validator.apply_to_ddl=false spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true spring.jpa.open-in-view=false \ No newline at end of file diff --git a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/springbootdatasourceconfig/application/entities/User.java b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/springbootdatasourceconfig/application/entities/User.java index 518a11701f..84a9ae74ff 100644 --- a/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/springbootdatasourceconfig/application/entities/User.java +++ b/persistence-modules/spring-boot-persistence/src/main/java/com/baeldung/springbootdatasourceconfig/application/entities/User.java @@ -13,6 +13,7 @@ public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; + private long status; private String name; private String email; @@ -39,6 +40,14 @@ public class User { this.email = email; } + public void setStatus(long status) { + this.status = status; + } + + public long getStatus() { + return status; + } + @Override public String toString() { return "User{" + "id=" + id + ", name=" + name + ", email=" + email + '}'; diff --git a/persistence-modules/spring-boot-persistence/src/main/resources/schema.sql b/persistence-modules/spring-boot-persistence/src/main/resources/schema.sql index 4cfc8a7927..296d319b33 100644 --- a/persistence-modules/spring-boot-persistence/src/main/resources/schema.sql +++ b/persistence-modules/spring-boot-persistence/src/main/resources/schema.sql @@ -1,5 +1,6 @@ drop table if exists USERS; drop table if exists country; +drop table if exists BOOK; create table USERS( ID int not null AUTO_INCREMENT, @@ -12,4 +13,10 @@ CREATE TABLE country ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(128) NOT NULL, PRIMARY KEY (id) -); \ No newline at end of file +); + +create table BOOK( + ID int not null AUTO_INCREMENT, + NAME varchar(128) not null, + PRIMARY KEY ( ID ) +); diff --git a/persistence-modules/spring-boot-persistence/src/test/resources/application.properties b/persistence-modules/spring-boot-persistence/src/test/resources/application.properties index 3a6470c8dc..07101ca2f5 100644 --- a/persistence-modules/spring-boot-persistence/src/test/resources/application.properties +++ b/persistence-modules/spring-boot-persistence/src/test/resources/application.properties @@ -12,5 +12,5 @@ hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=true hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory -spring.jpa.properties.hibernate.hbm2ddl.import_files=migrated_users.sql, import_books.sql +spring.jpa.properties.hibernate.hbm2ddl.import_files=import_books.sql spring.datasource.data=import_*_users.sql \ No newline at end of file diff --git a/persistence-modules/spring-data-arangodb/pom.xml b/persistence-modules/spring-data-arangodb/pom.xml index 562f06ae40..7303316edb 100644 --- a/persistence-modules/spring-data-arangodb/pom.xml +++ b/persistence-modules/spring-data-arangodb/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-arangodb spring-data-arangodb @@ -18,7 +18,6 @@ org.springframework.boot spring-boot-starter - com.arangodb arangodb-spring-data diff --git a/persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryIntegrationTest.java b/persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryLiveTest.java similarity index 96% rename from persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryIntegrationTest.java rename to persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryLiveTest.java index 1d4258688a..35232766ab 100644 --- a/persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-arangodb/src/test/java/com/baeldung/arangodb/ArticleRepositoryLiveTest.java @@ -16,8 +16,11 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; +/** + * ArangoDB server should be up and running for this test case to run successfully + */ @SpringBootTest -public class ArticleRepositoryIntegrationTest { +public class ArticleRepositoryLiveTest { @Autowired ArticleRepository articleRepository; diff --git a/persistence-modules/spring-data-cassandra-reactive/pom.xml b/persistence-modules/spring-data-cassandra-reactive/pom.xml index 5dd5ab4b69..cddb62186b 100644 --- a/persistence-modules/spring-data-cassandra-reactive/pom.xml +++ b/persistence-modules/spring-data-cassandra-reactive/pom.xml @@ -28,6 +28,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-validation + org.projectlombok lombok @@ -52,8 +56,7 @@ - 2.2.6.RELEASE - 3.11.2.0 + 4.3.1.0 \ No newline at end of file diff --git a/persistence-modules/spring-data-cassandra-reactive/src/main/resources/application.properties b/persistence-modules/spring-data-cassandra-reactive/src/main/resources/application.properties index 7ed2f10131..5acbcdd5a3 100644 --- a/persistence-modules/spring-data-cassandra-reactive/src/main/resources/application.properties +++ b/persistence-modules/spring-data-cassandra-reactive/src/main/resources/application.properties @@ -1,2 +1,3 @@ spring.data.cassandra.keyspace-name=practice -spring.data.cassandra.port=9042 \ No newline at end of file +spring.data.cassandra.port=9042 +spring.data.cassandra.local-datacenter=datacenter1 \ No newline at end of file diff --git a/persistence-modules/spring-data-cassandra-test/pom.xml b/persistence-modules/spring-data-cassandra-test/pom.xml index f2cbc834de..5d9bcc63c2 100644 --- a/persistence-modules/spring-data-cassandra-test/pom.xml +++ b/persistence-modules/spring-data-cassandra-test/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-cassandra-test spring-data-cassandra-test @@ -14,6 +14,50 @@ ../../parent-boot-2 + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-cassandra + ${spring-boot-starter-data-cassandra.version} + + + com.datastax.oss + java-driver-core + ${java-driver-core.version} + + + org.projectlombok + lombok + ${lombok.version} + + + com.datastax.oss + native-protocol + ${native-protocol.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + org.testcontainers + testcontainers + ${testcontainers.version} + test + + + org.testcontainers + cassandra + ${testcontainers.version} + test + + + 2.5.3 1.18.18 @@ -23,55 +67,4 @@ 1.5.0 - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-data-cassandra - ${spring-boot-starter-data-cassandra.version} - - - - com.datastax.oss - java-driver-core - ${java-driver-core.version} - - - - org.projectlombok - lombok - ${lombok.version} - - - - com.datastax.oss - native-protocol - ${native-protocol.version} - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.testcontainers - testcontainers - ${testcontainers.version} - test - - - - org.testcontainers - cassandra - ${testcontainers.version} - test - - - \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-crud/pom.xml b/persistence-modules/spring-data-jpa-crud/pom.xml index 8f9a3cc0e8..139632a42a 100644 --- a/persistence-modules/spring-data-jpa-crud/pom.xml +++ b/persistence-modules/spring-data-jpa-crud/pom.xml @@ -1,8 +1,7 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-data-jpa-crud spring-data-jpa-crud diff --git a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties index 3829f676d3..d7fb13da08 100644 --- a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties +++ b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties @@ -1,7 +1,6 @@ spring.jpa.properties.hibernate.jdbc.batch_size=4 spring.jpa.properties.hibernate.order_inserts=true spring.jpa.properties.hibernate.order_updates=true -spring.jpa.properties.hibernate.generate_statistics=true spring.jpa.database-platform=org.hibernate.dialect.H2Dialect diff --git a/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java index 7ddf36d3f0..f91c966e94 100644 --- a/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java @@ -9,6 +9,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -20,6 +21,7 @@ import com.baeldung.boot.web.controllers.CustomerController; @RunWith(SpringRunner.class) @SpringBootTest(classes=Application.class) @AutoConfigureMockMvc +@ActiveProfiles("stats") public class BatchInsertIntegrationTest { @Autowired @@ -35,6 +37,6 @@ public class BatchInsertIntegrationTest { public void whenInsertingCustomers_thenCustomersAreCreated() throws Exception { this.mockMvc.perform(post("/customers")) .andExpect(status().isOk()); - } - + } + } \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties index 4141f5668e..bc9c9a832c 100644 --- a/persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties +++ b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties @@ -3,4 +3,6 @@ spring.jpa.show-sql=false spring.jpa.properties.hibernate.jdbc.batch_size=5 spring.jpa.properties.hibernate.order_inserts=true spring.jpa.properties.hibernate.order_updates=true -spring.jpa.properties.hibernate.batch_versioned_data=true \ No newline at end of file +spring.jpa.properties.hibernate.batch_versioned_data=true + +spring.jpa.properties.hibernate.generate_statistics=true \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-crud/src/test/resources/application-stats.properties b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-stats.properties new file mode 100644 index 0000000000..97bc170ca0 --- /dev/null +++ b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-stats.properties @@ -0,0 +1,5 @@ +spring.jpa.properties.hibernate.jdbc.batch_size=4 +spring.jpa.properties.hibernate.order_inserts=true +spring.jpa.properties.hibernate.order_updates=true + +spring.jpa.properties.hibernate.generate_statistics=true \ No newline at end of file diff --git a/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java index 22e2c81739..e4bd3dabff 100644 --- a/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java +++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java @@ -3,20 +3,23 @@ package com.baeldung.boot.daos; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.math.BigDecimal; +import java.util.Optional; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; import com.baeldung.Application; import com.baeldung.boot.domain.MerchandiseEntity; @RunWith(SpringRunner.class) -@SpringBootTest(classes=Application.class) +@SpringBootTest(classes = Application.class) public class InventoryRepositoryIntegrationTest { private static final String ORIGINAL_TITLE = "Pair of Pants"; @@ -58,4 +61,28 @@ public class InventoryRepositoryIntegrationTest { assertEquals(BigDecimal.TEN, result.getPrice()); assertEquals(UPDATED_BRAND, result.getBrand()); } + + @Test + @Transactional + public void shouldUpdateExistingEntryInDBWithoutSave() { + MerchandiseEntity pants = new MerchandiseEntity(ORIGINAL_TITLE, BigDecimal.ONE); + pants = repository.save(pants); + + Long originalId = pants.getId(); + + // Update using setters + pants.setTitle(UPDATED_TITLE); + pants.setPrice(BigDecimal.TEN); + pants.setBrand(UPDATED_BRAND); + + Optional resultOp = repository.findById(originalId); + + assertTrue(resultOp.isPresent()); + MerchandiseEntity result = resultOp.get(); + + assertEquals(originalId, result.getId()); + assertEquals(UPDATED_TITLE, result.getTitle()); + assertEquals(BigDecimal.TEN, result.getPrice()); + assertEquals(UPDATED_BRAND, result.getBrand()); + } } diff --git a/persistence-modules/spring-data-mongodb-reactive/pom.xml b/persistence-modules/spring-data-mongodb-reactive/pom.xml index 9fb22b6033..eabcc77352 100644 --- a/persistence-modules/spring-data-mongodb-reactive/pom.xml +++ b/persistence-modules/spring-data-mongodb-reactive/pom.xml @@ -147,10 +147,7 @@ 1.4.200 1.5.23 3.3.1.RELEASE - + 2.2.6.RELEASE diff --git a/podman/README.md b/podman/README.md index 3102036f04..24c5aa2653 100644 --- a/podman/README.md +++ b/podman/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [An Introduction to Podman](https://www.baeldung.com/podman-intro) +- [An Introduction to Podman](https://www.baeldung.com/ops/podman-intro) diff --git a/pom.xml b/pom.xml index 059c6dae25..f5ac14a009 100644 --- a/pom.xml +++ b/pom.xml @@ -1356,6 +1356,7 @@ core-java-modules/core-java-time-measurements core-java-modules/multimodulemavenproject core-java-modules/core-java-strings + quarkus-vs-springboot @@ -1410,7 +1411,7 @@ 1.2 2.3.1 1.2 - 2.11.1 + 2.12.4 1.4 1.2.0 5.2.0 diff --git a/quarkus-vs-springboot/README.md b/quarkus-vs-springboot/README.md new file mode 100644 index 0000000000..35fc8eb5eb --- /dev/null +++ b/quarkus-vs-springboot/README.md @@ -0,0 +1,95 @@ +# Spring Boot vs Quarkus + +To follow this tutorial, you will need the following things: +- GRAALVM (https://www.graalvm.org/) +- VisualVM (https://visualvm.github.io/) +- Maven (Embedded, IDE, or local installation) +- Docker (https://www.docker.com/) +- Jmeter (https://jmeter.apache.org/) + +To create this test, I used some custom features from Jmeter. You can install the Jmeter plugin manager here: +https://loadium.com/blog/how-to-install-use-jmeter-plugin. After that, please install the following plugins: +- https://jmeter-plugins.org/?search=jpgc-casutg + +The test file is `load_test.jmx` in case of any change need. You can open it with the Jmeter GUI. For example, to run the start, you can execute the file `run_test.sh` or run the comment bellow: + +``` +$jmeter_home/bin/jmeter -n -t load_test.jmx -l log.csv -e -o ./report +``` + +Just remember to change the variable `jmeter_home` with the path to the JMeter folder. The path to the data files is relative, so either keep them in the same folder as the test or use Jmeter GUI to change it. + +Open the VisualVM application and select your application to start monitoring before running the test, and of course, start the sample application first. + +## Spring Boot +To build the application, you only need to run the following command in the Spring project root: +``` +./mvnw package -f pom.xml +``` +Or this one in case you want to build the native one: +``` +./mvnw -DskipTests package -Pnative -f pom.xml +``` +In this case, you will need to have the `GRAALVM_HOME` env variable defined. You only need this if you want to build the image locally. Otherwise, you can build it using docker by leveraging the Spring Boot maven plugin. It will pull a docker image of the GraalVM, and with that, it will create the native image of the app. To do that, run: +``` +./mvnw spring-boot:build-image +``` +You can also create a docker image with the JVM version of the app running the script `build_jvm_docker.sh` or: +``` +docker build -f src/main/docker/Dockerfile.jvm -t spring-project:0.1-SNAPSHOT . +``` + +You can execute the script `start_app.sh` or `start_jvm.sh` to run the application locally. In this case, you will need the Postgres DB. You can run it in docker with the command: +``` +docker run -e POSTGRES_PASSWORD=example -p 5432:5432 postgres +``` +You can also run both application and DB from docker, using: +``` +docker-compose -f src/main/docker/spring.yml up +``` +But remember to rebuild the image to switch between native and JVM versions. + +## Quarkus +The process to build and run the Quarkus application is very similar to the Spring Boot one. First, to create the native image, you also need either the GRAALVM installed and the `GRAALVM_HOME` env variable set, or we can use docker to build the native image. + +To build the native version locally, run the command: +``` +./mvnw package -Pnative -f pom.xml +``` +Or this one to build using docker: +``` +./mvnw package -Pnative -Dquarkus.native.container-build=true -f pom.xml +``` +And to the JVM version: +``` +./mvnw package -f pom.xml +``` + +To start the application locally, use either the scripts `start_app.sh` and `start_jvm.sh` with the docker DB: +``` +docker run -e POSTGRES_PASSWORD=example -p 5432:5432 postgres +``` +Or use the script to build the docker image of the application, running: +```bash +./build.sh + +## script content +## ./mvnw quarkus:add-extension -Dextensions=container-image-docker +## ./mvnw package -Dquarkus.container-build=true -f pom.xml && +## docker build -f src/main/docker/Dockerfile.jvm -t quarkus-project:0.1-SNAPSHOT . +``` +To build the docker image of the JVM version, and running the following command to the native version: +```bash +./build.sh native + +## script content +## ./mvnw quarkus:add-extension -Dextensions=container-image-docker +## ./mvnw package -Pnative -Dquarkus.native.container-build=true -f pom.xml && +## docker build -f src/main/docker/Dockerfile.native -t quarkus-project:0.1-SNAPSHOT . +``` +Then, once again, you can also run both application and DB from docker, using: +``` +docker-compose -f src/main/docker/quarkus.yml up +``` + +Now you have all you need to reproduce the tests with your machine. \ No newline at end of file diff --git a/quarkus-vs-springboot/cities.csv b/quarkus-vs-springboot/cities.csv new file mode 100644 index 0000000000..3b7016f3b5 --- /dev/null +++ b/quarkus-vs-springboot/cities.csv @@ -0,0 +1,136 @@ +Holtsville +Adjuntas +Aguada +Aguadilla +Maricao +Anasco +Angeles +Arecibo +Bajadero +Barceloneta +Boqueron +Cabo Rojo +Penuelas +Camuy +Castaner +Rosario +Sabana Grande +Ciales +Utuado +Dorado +Ensenada +Florida +Garrochales +Guanica +Guayanilla +Hatillo +Hormigueros +Isabela +Jayuya +Lajas +Lares +Las Marias +Manati +Moca +Rincon +Quebradillas +Mayaguez +San German +San Sebastian +Morovis +Sabana Hoyos +San Antonio +Vega Alta +Vega Baja +Yauco +Aguas Buenas +Aguirre +Aibonito +Maunabo +Arroyo +Mercedita +Ponce +Naguabo +Naranjito +Orocovis +Palmer +Patillas +Caguas +Canovanas +Ceiba +Cayey +Fajardo +Cidra +Puerto Real +Punta Santiago +Roosevelt Roads +Rio Blanco +Rio Grande +Salinas +San Lorenzo +Santa Isabel +Vieques +Villalba +Yabucoa +Coamo +Las Piedras +Loiza +Luquillo +Culebra +Juncos +Gurabo +Coto Laurel +Comerio +Corozal +Guayama +La Plata +Humacao +Barranquitas +Juana Diaz +St Thomas +Christiansted +St John +Frederiksted +Kingshill +San Juan +Fort Buchanan +Toa Baja +Sabana Seca +Toa Alta +Bayamon +Catano +Guaynabo +Trujillo Alto +Saint Just +Carolina +Agawam +Amherst +Barre +Belchertown +Blandford +Bondsville +Brimfield +Chester +Chesterfield +Chicopee +Cummington +Easthampton +East Longmeadow +East Otis +Feeding Hills +Gilbertville +Goshen +Granby +Granville +Hadley +Hampden +Hardwick +Hatfield +Haydenville +Holyoke +Huntington +Leeds +Leverett +Ludlow +Monson +North Amherst \ No newline at end of file diff --git a/quarkus-vs-springboot/load_test.jmx b/quarkus-vs-springboot/load_test.jmx new file mode 100644 index 0000000000..7da984343b --- /dev/null +++ b/quarkus-vs-springboot/load_test.jmx @@ -0,0 +1,384 @@ + + + + + + false + true + false + + + + + + + + continue + + false + -1 + + 500 + 150 + true + 300 + + true + + + + , + + zip_code_database.csv + true + true + false + shareMode.group + true + zip,type,decommissioned,primary_city,acceptable_cities,unacceptable_cities,state,county,timezone,area_codes,world_region,country,latitude,longitude,irs_estimated_population + + + + true + + + + false + { + "zip":"${zip}", + "type":"${type}", + "city":"${primary_city}", + "state":"${state}", + "county":"${country}", + "timezone":"${timezone}" +} + = + + + + localhost + 8080 + + UTF-8 + zipcode + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Accept + */* + + + Cache-Control + no-cache + + + + + + + false + + saveConfig + + true + true + true + true + true + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + + 25 + 30 + 15 + 255 + + + + 125 + 30 + 15 + 255 + + + + 125 + 60 + 15 + 225 + + + + 225 + 150 + 30 + 120 + + + + + false + -1 + + continue + + + + , + + zip_code_database.csv + true + true + false + shareMode.group + true + zip,type,decommissioned,primary_city,acceptable_cities,unacceptable_cities,state,county,timezone,area_codes,world_region,country,latitude,longitude,irs_estimated_population + + + + + + + localhost + 8080 + + UTF-8 + zipcode/${zip} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Accept + */* + + + Cache-Control + no-cache + + + + + + + false + + saveConfig + + true + true + true + true + true + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + + 25 + 30 + 15 + 255 + + + + 125 + 30 + 15 + 255 + + + + 125 + 60 + 15 + 225 + + + + 225 + 150 + 30 + 120 + + + + + false + -1 + + continue + + + + , + + cities.csv + false + false + true + shareMode.group + false + city + + + + + + + localhost + 8080 + + UTF-8 + zipcode/by_city?city=${city} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Accept + */* + + + Cache-Control + no-cache + + + + + + + false + + saveConfig + + true + true + true + true + true + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + + + diff --git a/quarkus-vs-springboot/pom.xml b/quarkus-vs-springboot/pom.xml new file mode 100644 index 0000000000..cf1cbb5d85 --- /dev/null +++ b/quarkus-vs-springboot/pom.xml @@ -0,0 +1,22 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + + 1.0-SNAPSHOT + quarkus-vs-springboot + quarkus-vs-springboot + pom + 4.0.0 + + + quarkus-project + spring-project + + + \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/build.sh b/quarkus-vs-springboot/quarkus-project/build.sh new file mode 100755 index 0000000000..85761adab0 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +./mvnw quarkus:add-extension -Dextensions=container-image-docker + +if [ "$1" = "native" ]; then + ./mvnw package -Pnative -Dquarkus.native.container-build=true -f $SCRIPTPATH/pom.xml && + docker build -f $SCRIPTPATH/src/main/docker/Dockerfile.native -t quarkus-project:0.1-SNAPSHOT $SCRIPTPATH/. +else + ./mvnw package -Dquarkus.container-build=true -f $SCRIPTPATH/pom.xml && + docker build -f $SCRIPTPATH/src/main/docker/Dockerfile.jvm -t quarkus-project:0.1-SNAPSHOT $SCRIPTPATH/. +fi \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/pom.xml b/quarkus-vs-springboot/quarkus-project/pom.xml new file mode 100644 index 0000000000..c9eae79a88 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/pom.xml @@ -0,0 +1,149 @@ + + + 4.0.0 + + com.baeldung + quarkus-vs-springboot + 1.0-SNAPSHOT + + quarkus-project + 0.1-SNAPSHOT + + 3.8.1 + true + 11 + 11 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 2.2.2.Final + 3.0.0-M4 + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + io.quarkus + quarkus-hibernate-reactive-panache + + + io.quarkus + quarkus-resteasy-reactive + + + io.quarkus + quarkus-resteasy-reactive-jackson + + + io.quarkus + quarkus-reactive-pg-client + + + io.quarkus + quarkus-arc + + + io.quarkus + quarkus-container-image-docker + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + junit + junit + 4.8.2 + test + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + ${maven.compiler.parameters} + + + + maven-surefire-plugin + ${surefire-plugin.version} + + false + + org.jboss.logmanager.LogManager + + + + + + + + native + + + native + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + + + + + + + + + -H:+AllowVMInspection + native + + + + diff --git a/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.jvm b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.jvm new file mode 100644 index 0000000000..e5d6d4d851 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.jvm @@ -0,0 +1,55 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/code-with-quarkus-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5005 +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/code-with-quarkus-jvm +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 + +ARG JAVA_PACKAGE=java-11-openjdk-headless +ARG RUN_JAVA_VERSION=1.3.8 +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' +# Install java and the run-java script +# Also set up permissions for user `1001` +RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \ + && microdnf update \ + && microdnf clean all \ + && mkdir /deployments \ + && chown 1001 /deployments \ + && chmod "g+rwX" /deployments \ + && chown 1001:root /deployments \ + && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ + && chown 1001 /deployments/run-java.sh \ + && chmod 540 /deployments/run-java.sh \ + && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/conf/security/java.security + +# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size. +ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=1001 target/quarkus-app/*.jar /deployments/ +COPY --chown=1001 target/quarkus-app/app/ /deployments/app/ +COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT [ "/deployments/run-java.sh" ] + diff --git a/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.legacy-jar b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 0000000000..da0fe018f6 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,51 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package -Dquarkus.package.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/code-with-quarkus-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5005 +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/code-with-quarkus-legacy-jar +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 + +ARG JAVA_PACKAGE=java-11-openjdk-headless +ARG RUN_JAVA_VERSION=1.3.8 +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' +# Install java and the run-java script +# Also set up permissions for user `1001` +RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \ + && microdnf update \ + && microdnf clean all \ + && mkdir /deployments \ + && chown 1001 /deployments \ + && chmod "g+rwX" /deployments \ + && chown 1001:root /deployments \ + && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ + && chown 1001 /deployments/run-java.sh \ + && chmod 540 /deployments/run-java.sh \ + && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/conf/security/java.security + +# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size. +ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +COPY target/lib/* /deployments/lib/ +COPY target/*-runner.jar /deployments/app.jar + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT [ "/deployments/run-java.sh" ] diff --git a/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native new file mode 100644 index 0000000000..33698500f6 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native @@ -0,0 +1,27 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native-distroless b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native-distroless new file mode 100644 index 0000000000..5fda989696 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/docker/Dockerfile.native-distroless @@ -0,0 +1,23 @@ +#### +# This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/code-with-quarkus . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus +# +### +FROM quay.io/quarkus/quarkus-distroless-image:1.0 +COPY target/*-runner /application + +EXPOSE 8080 +USER nonroot + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/quarkus-vs-springboot/quarkus-project/src/main/docker/quarkus.yml b/quarkus-vs-springboot/quarkus-project/src/main/docker/quarkus.yml new file mode 100644 index 0000000000..00bdcf9292 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/docker/quarkus.yml @@ -0,0 +1,23 @@ +version: '3.1' + +services: + db: + image: postgres + ports: + - '5432:5432' + environment: + POSTGRES_PASSWORD: example + app: + image: quarkus-project:0.1-SNAPSHOT + ports: + - '8080:8080' + environment: + DB_URL: postgresql://db:5432/postgres + links: + - "db" + depends_on: + - "db" +networks: + default: + driver: bridge + diff --git a/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ReactiveGreetingResource.java b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ReactiveGreetingResource.java new file mode 100644 index 0000000000..b885e828c7 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ReactiveGreetingResource.java @@ -0,0 +1,17 @@ +package com.baeldung.quarkus_project; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("/hello") +public class ReactiveGreetingResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello RESTEasy Reactive"; + } + +} \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCode.java b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCode.java new file mode 100644 index 0000000000..6764c510bf --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCode.java @@ -0,0 +1,68 @@ +package com.baeldung.quarkus_project; + +import io.quarkus.hibernate.reactive.panache.PanacheEntityBase; +import io.quarkus.runtime.annotations.RegisterForReflection; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +@RegisterForReflection +public class ZipCode extends PanacheEntityBase { + + @Id + private String zip; + private String type; + private String city; + private String state; + private String county; + private String timezone; + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getCounty() { + return county; + } + + public void setCounty(String county) { + this.county = county; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } +} diff --git a/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeRepo.java b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeRepo.java new file mode 100644 index 0000000000..74f46c33ea --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeRepo.java @@ -0,0 +1,19 @@ +package com.baeldung.quarkus_project; + +import io.quarkus.hibernate.reactive.panache.PanacheRepositoryBase; +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class ZipCodeRepo implements PanacheRepositoryBase { + + public Multi findByCity(String city) { + return find("city = ?1", city).stream(); + } + + public Uni save(ZipCode zipCode) { + return zipCode.persistAndFlush(); + } +} diff --git a/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeResource.java b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeResource.java new file mode 100644 index 0000000000..b4d41fd855 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/java/com/baeldung/quarkus_project/ZipCodeResource.java @@ -0,0 +1,46 @@ +package com.baeldung.quarkus_project; + +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import org.jboss.logging.Logger; + +import javax.transaction.Transactional; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; + +@Path("/zipcode") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class ZipCodeResource { + + private ZipCodeRepo zipRepo; + + public ZipCodeResource(ZipCodeRepo zipRepo) { + this.zipRepo = zipRepo; + } + + @GET + @Path("/{zipcode}") + public Uni findById(@PathParam("zipcode") String zipcode) { + return zipRepo.findById(zipcode); + } + + @GET + @Path("/by_city") + public Multi postZipCode(@QueryParam("city") String city) { + return zipRepo.findByCity(city); + } + + @POST + @Transactional + public Uni create(ZipCode zipCode) { + return zipRepo.findById(zipCode.getZip()) + .onItem() + .ifNull() + .switchTo(createZipCode(zipCode)); + } + + private Uni createZipCode(ZipCode zipCode) { + return Uni.createFrom().deferred(() -> zipRepo.save(zipCode)); + } +} \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/src/main/resources/application.properties b/quarkus-vs-springboot/quarkus-project/src/main/resources/application.properties new file mode 100644 index 0000000000..918a129500 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/main/resources/application.properties @@ -0,0 +1,9 @@ +quarkus.datasource.db-kind=postgresql +quarkus.datasource.username=postgres +quarkus.datasource.password=example + +quarkus.datasource.reactive.url=${DB_URL:postgresql://localhost:5432/postgres} +quarkus.datasource.reactive.max-size=20 + +#quarkus.hibernate-orm.log.sql=true +quarkus.hibernate-orm.database.generation=drop-and-create diff --git a/quarkus-vs-springboot/quarkus-project/src/test/java/com/baeldung/quarkus_project/NativeGreetingResourceIT.java b/quarkus-vs-springboot/quarkus-project/src/test/java/com/baeldung/quarkus_project/NativeGreetingResourceIT.java new file mode 100644 index 0000000000..99b91ea5a8 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/src/test/java/com/baeldung/quarkus_project/NativeGreetingResourceIT.java @@ -0,0 +1,21 @@ +package com.baeldung.quarkus_project; + +import io.quarkus.test.junit.NativeImageTest; +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; + +@NativeImageTest +@QuarkusTest +public class NativeGreetingResourceIT { + + @Test + void testEndpoint() { + given() + .when().get("/hello") + .then() + .statusCode(200); + } + +} \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/start_app.sh b/quarkus-vs-springboot/quarkus-project/start_app.sh new file mode 100755 index 0000000000..ddffe29736 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/start_app.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +$SCRIPTPATH/target/quarkus-project-0.1-SNAPSHOT-runner -XX:+FlightRecorder -XX:StartFlightRecording="filename=$SCRIPTPATH/recording.jfr,name=Profiling quarkus" \ No newline at end of file diff --git a/quarkus-vs-springboot/quarkus-project/start_jvm.sh b/quarkus-vs-springboot/quarkus-project/start_jvm.sh new file mode 100755 index 0000000000..e7a7039154 --- /dev/null +++ b/quarkus-vs-springboot/quarkus-project/start_jvm.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +java -jar $SCRIPTPATH/target/quarkus-app/quarkus-run.jar \ No newline at end of file diff --git a/quarkus-vs-springboot/run_test.sh b/quarkus-vs-springboot/run_test.sh new file mode 100755 index 0000000000..a2d31c8587 --- /dev/null +++ b/quarkus-vs-springboot/run_test.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +$Jmeter_home/bin/jmeter -n -t load_test.jmx -l log.csv -e -o ./report \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/build_jvm_docker.sh b/quarkus-vs-springboot/spring-project/build_jvm_docker.sh new file mode 100755 index 0000000000..c7ee730ec7 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/build_jvm_docker.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +docker build -f $SCRIPTPATH/src/main/docker/Dockerfile.jvm -t spring-project:0.1-SNAPSHOT $SCRIPTPATH/. + diff --git a/quarkus-vs-springboot/spring-project/pom.xml b/quarkus-vs-springboot/spring-project/pom.xml new file mode 100644 index 0000000000..be5cc57765 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/pom.xml @@ -0,0 +1,171 @@ + + + + + org.springframework.boot + spring-boot-starter-parent + 2.5.4 + + + + 4.0.0 + spring-project + com.baeldung + 0.1-SNAPSHOT + + + 11 + + 0.10.3 + + + + + org.springframework.boot + spring-boot-starter-data-r2dbc + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.experimental + spring-native + ${spring-native.version} + + + io.r2dbc + r2dbc-postgresql + runtime + + + org.postgresql + postgresql + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ${repackage.classifier} + + paketobuildpacks/builder:tiny + + true + + + + + + org.springframework.experimental + spring-aot-maven-plugin + ${spring-native.version} + + + test-generate + + test-generate + + + + generate + + generate + + + + + + + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + + native + + exec + 0.9.3 + + + + org.graalvm.buildtools + junit-platform-native + ${native-buildtools.version} + + + + + + org.graalvm.buildtools + native-maven-plugin + ${native-buildtools.version} + + + -H:+AllowVMInspection + + + + + test-native + test + + test + + + + build-native + package + + build + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + -DspringAot=true -agentlib:native-image-agent=access-filter-file=src/test/resources/access-filter.json,config-merge-dir=target/classes/META-INF/native-image + + + + + + + \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/src/main/docker/Dockerfile.jvm b/quarkus-vs-springboot/spring-project/src/main/docker/Dockerfile.jvm new file mode 100644 index 0000000000..ca3f3cca76 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/docker/Dockerfile.jvm @@ -0,0 +1,12 @@ +FROM openjdk:11 + +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' + +COPY --chown=1001 target/spring-project-0.1-SNAPSHOT-exec.jar /spring-app/ + +WORKDIR /spring-app + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT ["java", "-jar", "spring-project-0.1-SNAPSHOT-exec.jar" ] \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/src/main/docker/spring.yml b/quarkus-vs-springboot/spring-project/src/main/docker/spring.yml new file mode 100644 index 0000000000..2214e0a898 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/docker/spring.yml @@ -0,0 +1,22 @@ +version: '3.1' + +services: + db: + image: postgres + ports: + - '5432:5432' + environment: + POSTGRES_PASSWORD: example + app: + image: spring-project:0.1-SNAPSHOT + ports: + - '8080:8080' + environment: + DB_URL: r2dbc:postgresql://db:5432/postgres + links: + - "db" + depends_on: + - "db" +networks: + default: + driver: bridge \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/Startup.java b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/Startup.java new file mode 100644 index 0000000000..48cf7e8ed1 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/Startup.java @@ -0,0 +1,37 @@ +package com.baeldung.spring_project; + +import com.baeldung.spring_project.domain.ZIPRepo; +import io.r2dbc.spi.ConnectionFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.r2dbc.connection.R2dbcTransactionManager; +import org.springframework.r2dbc.connection.init.ConnectionFactoryInitializer; +import org.springframework.r2dbc.connection.init.ResourceDatabasePopulator; +import org.springframework.transaction.ReactiveTransactionManager; + +@SpringBootApplication +public class Startup { + + public static void main(String[] args) { + SpringApplication.run(Startup.class, args).getBean(ZIPRepo.class).findById(""); + } + + @Bean + ConnectionFactoryInitializer initializer(ConnectionFactory connectionFactory) { + + var initializer = new ConnectionFactoryInitializer(); + initializer.setConnectionFactory(connectionFactory); + initializer.setDatabasePopulator(new ResourceDatabasePopulator(new ByteArrayResource(("" + + "DROP TABLE IF EXISTS zipcode;" + + "CREATE TABLE zipcode (zip VARCHAR(100) PRIMARY KEY, type VARCHAR(255) NULL, city VARCHAR(255) NULL, state VARCHAR(255) NULL, county VARCHAR(255) NULL, timezone VARCHAR(255) NULL);") + .getBytes()))); + + return initializer; + } + + @Bean ReactiveTransactionManager transactionManager(ConnectionFactory connectionFactory) { + return new R2dbcTransactionManager(connectionFactory); + } +} diff --git a/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/ZipCodeApi.java b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/ZipCodeApi.java new file mode 100644 index 0000000000..263ce67e21 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/ZipCodeApi.java @@ -0,0 +1,44 @@ +package com.baeldung.spring_project; + +import com.baeldung.spring_project.domain.ZIPRepo; +import com.baeldung.spring_project.domain.ZipCode; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +import java.util.function.Supplier; + +@RestController +@RequestMapping(value = "/zipcode") +public class ZipCodeApi { + + private ZIPRepo zipRepo; + + public ZipCodeApi(ZIPRepo zipRepo) { + this.zipRepo = zipRepo; + } + + @GetMapping("/{zipcode}") + public Mono findById(@PathVariable String zipcode) { + return zipRepo.findById(zipcode); + } + + @GetMapping("/by_city") + public Flux postZipCode(@RequestParam String city) { + return zipRepo.findByCity(city); + } + + @Transactional + @PostMapping + public Mono create(@RequestBody ZipCode zipCode) { + return zipRepo.findById(zipCode.getZip()).switchIfEmpty(Mono.defer(createZipCode(zipCode))); + } + + private Supplier> createZipCode(ZipCode zipCode) { + return () -> { + zipCode.setId(zipCode.getZip()); + return zipRepo.save(zipCode); + }; + } +} diff --git a/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZIPRepo.java b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZIPRepo.java new file mode 100644 index 0000000000..59d3fb4293 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZIPRepo.java @@ -0,0 +1,11 @@ +package com.baeldung.spring_project.domain; + +import org.springframework.data.r2dbc.repository.Query; +import org.springframework.data.repository.reactive.ReactiveCrudRepository; +import reactor.core.publisher.Flux; + +public interface ZIPRepo extends ReactiveCrudRepository { + + @Query("SELECT * FROM zipcode WHERE city = :city") + Flux findByCity(String city); +} diff --git a/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZipCode.java b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZipCode.java new file mode 100644 index 0000000000..b2ef7b17a8 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/java/com/baeldung/spring_project/domain/ZipCode.java @@ -0,0 +1,86 @@ +package com.baeldung.spring_project.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Transient; +import org.springframework.data.domain.Persistable; +import org.springframework.data.relational.core.mapping.Table; + +@Table(value = "zipcode") +public class ZipCode implements Persistable { + + @Id + private String zip; + private String type; + private String city; + private String state; + private String county; + private String timezone; + + @Transient + private boolean persisted; + + public String getZip() { + return zip; + } + + void setZip(String zip) { + this.zip = zip; + this.persisted = true; + } + + public void setId(String zip) { + this.zip = zip; + this.persisted = false; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getCounty() { + return county; + } + + public void setCounty(String county) { + this.county = county; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + @JsonIgnore + @Override public String getId() { + return zip; + } + + @JsonIgnore + @Override public boolean isNew() { + return !persisted; + } +} diff --git a/quarkus-vs-springboot/spring-project/src/main/resources/application.properties b/quarkus-vs-springboot/spring-project/src/main/resources/application.properties new file mode 100644 index 0000000000..adc2f8b0b4 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.r2dbc.url=${DB_URL:'r2dbc:postgresql://localhost:5432/postgres'} +spring.r2dbc.username=postgres +spring.r2dbc.password=example +spring.r2dbc.pool.enabled=true +spring.r2dbc.pool.maxSize=20 \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/src/test/java/com/baeldung/spring_project/StartupIT.java b/quarkus-vs-springboot/spring-project/src/test/java/com/baeldung/spring_project/StartupIT.java new file mode 100644 index 0000000000..7487e5aa7f --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/test/java/com/baeldung/spring_project/StartupIT.java @@ -0,0 +1,13 @@ +package com.baeldung.spring_project; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class StartupIT { + + @Test + void contextLoads() { + } + +} diff --git a/quarkus-vs-springboot/spring-project/src/test/resources/access-filter.json b/quarkus-vs-springboot/spring-project/src/test/resources/access-filter.json new file mode 100644 index 0000000000..9718fed1c6 --- /dev/null +++ b/quarkus-vs-springboot/spring-project/src/test/resources/access-filter.json @@ -0,0 +1,11 @@ +{ "rules": [ + {"excludeClasses": "org.apache.maven.surefire.**"}, + {"excludeClasses": "net.bytebuddy.**"}, + {"excludeClasses": "org.apiguardian.**"}, + {"excludeClasses": "org.junit.**"}, + {"excludeClasses": "org.mockito.**"}, + {"excludeClasses": "org.springframework.test.**"}, + {"excludeClasses": "org.springframework.boot.test.**"}, + {"excludeClasses": "com.example.demo.test.**"} +] +} \ No newline at end of file diff --git a/quarkus-vs-springboot/spring-project/start_app.sh b/quarkus-vs-springboot/spring-project/start_app.sh new file mode 100755 index 0000000000..f596213c4c --- /dev/null +++ b/quarkus-vs-springboot/spring-project/start_app.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +$SCRIPTPATH/target/spring-project -XX:+FlightRecorder -XX:StartFlightRecording="filename=$SCRIPTPATH/recording.jfr,name=Profiling spring" + diff --git a/quarkus-vs-springboot/spring-project/start_jvm.sh b/quarkus-vs-springboot/spring-project/start_jvm.sh new file mode 100755 index 0000000000..f62762fcca --- /dev/null +++ b/quarkus-vs-springboot/spring-project/start_jvm.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" + +java -jar $SCRIPTPATH/target/spring-project-0.1-SNAPSHOT-exec.jar + diff --git a/reactor-core/README.md b/reactor-core/README.md index f7c36f5897..a4ced49096 100644 --- a/reactor-core/README.md +++ b/reactor-core/README.md @@ -11,3 +11,4 @@ This module contains articles about Reactor Core. - [How to Convert Mono> Into Flux](https://www.baeldung.com/java-mono-list-to-flux) - [Project Reactor: map() vs flatMap()](https://www.baeldung.com/java-reactor-map-flatmap) - [What Does Mono.defer() Do?](https://www.baeldung.com/java-mono-defer) +- [Handling Exceptions in Project Reactor](https://www.baeldung.com/reactor-exceptions) diff --git a/reactor-core/pom.xml b/reactor-core/pom.xml index 6bd725b3b5..420b1b028a 100644 --- a/reactor-core/pom.xml +++ b/reactor-core/pom.xml @@ -41,7 +41,7 @@ - 3.3.9.RELEASE + 3.4.9 3.6.1 diff --git a/reactor-core/src/test/java/com/baeldung/reactor/exception/ExceptionUnitTest.java b/reactor-core/src/test/java/com/baeldung/reactor/exception/ExceptionUnitTest.java new file mode 100644 index 0000000000..d1d2b3c4d6 --- /dev/null +++ b/reactor-core/src/test/java/com/baeldung/reactor/exception/ExceptionUnitTest.java @@ -0,0 +1,89 @@ +package com.baeldung.reactor.exception; + +import org.junit.Test; +import org.reactivestreams.Publisher; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.core.publisher.SynchronousSink; +import reactor.test.StepVerifier; + +import java.util.function.BiConsumer; +import java.util.function.Function; + +public class ExceptionUnitTest { + @Test + public void givenInvalidElement_whenPipelineThrowsException_thenErrorIsSentDownstream() { + Function mapper = input -> { + if (input.matches("\\D")) { + throw new NumberFormatException(); + } else { + return Integer.parseInt(input); + } + }; + + Flux inFlux = Flux.just("1", "1.5", "2"); + Flux outFlux = inFlux.map(mapper); + + StepVerifier.create(outFlux) + .expectNext(1) + .expectError(NumberFormatException.class) + .verify(); + } + + @Test + public void givenInvalidElement_whenHandleCallsSinkErrorMethod_thenErrorIsSentDownstream() { + BiConsumer> handler = (input, sink) -> { + if (input.matches("\\D")) { + sink.error(new NumberFormatException()); + } else { + sink.next(Integer.parseInt(input)); + } + }; + + Flux inFlux = Flux.just("1", "1.5", "2"); + Flux outFlux = inFlux.handle(handler); + + StepVerifier.create(outFlux) + .expectNext(1) + .expectError(NumberFormatException.class) + .verify(); + } + + @Test + public void givenInvalidElement_whenFlatMapCallsMonoErrorMethod_thenErrorIsSentDownstream() { + Function> mapper = input -> { + if (input.matches("\\D")) { + return Mono.error(new NumberFormatException()); + } else { + return Mono.just(Integer.parseInt(input)); + } + }; + + Flux inFlux = Flux.just("1", "1.5", "2"); + Flux outFlux = inFlux.flatMap(mapper); + + StepVerifier.create(outFlux) + .expectNext(1) + .expectError(NumberFormatException.class) + .verify(); + } + + @Test + public void givenNullElement_whenPipelineOperatorExecutes_thenNpeIsSentDownstream() { + Function mapper = input -> { + if (input == null) { + return 0; + } else { + return Integer.parseInt(input); + } + }; + + Flux inFlux = Flux.just("1", null, "2"); + Flux outFlux = inFlux.map(mapper); + + StepVerifier.create(outFlux) + .expectNext(1) + .expectError(NullPointerException.class) + .verify(); + } +} diff --git a/restx/pom.xml b/restx/pom.xml index ee25c88047..83dd2afd58 100644 --- a/restx/pom.xml +++ b/restx/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 restx 0.1-SNAPSHOT @@ -99,7 +99,7 @@ ch.qos.logback logback-classic - ${logback-classic.version} + ${logback.version} io.restx @@ -123,10 +123,8 @@ attach-docs - + prepare-package jar @@ -149,7 +147,6 @@ 0.35-rc4 - 1.2.3 - + \ No newline at end of file diff --git a/spf4j/spf4j-aspects-app/pom.xml b/spf4j/spf4j-aspects-app/pom.xml index a44ee805fb..c4940b9c97 100644 --- a/spf4j/spf4j-aspects-app/pom.xml +++ b/spf4j/spf4j-aspects-app/pom.xml @@ -99,7 +99,6 @@ 8.9.0 - 1.7.21 3.8.0 3.1.1 diff --git a/spf4j/spf4j-core-app/pom.xml b/spf4j/spf4j-core-app/pom.xml index 1f9be97854..28c104afe1 100644 --- a/spf4j/spf4j-core-app/pom.xml +++ b/spf4j/spf4j-core-app/pom.xml @@ -105,7 +105,6 @@ 8.9.0 - 1.7.21 3.8.0 3.1.1 diff --git a/spring-5-data-reactive/pom.xml b/spring-5-data-reactive/pom.xml index dffd4be99b..3a9651de39 100644 --- a/spring-5-data-reactive/pom.xml +++ b/spring-5-data-reactive/pom.xml @@ -138,10 +138,7 @@ 1.4.200 1.5.23 3.3.1.RELEASE - + 2.2.6.RELEASE diff --git a/spring-5-reactive-client/README.md b/spring-5-reactive-client/README.md index 154a3cab0b..e485897d27 100644 --- a/spring-5-reactive-client/README.md +++ b/spring-5-reactive-client/README.md @@ -11,3 +11,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Mocking a WebClient in Spring](https://www.baeldung.com/spring-mocking-webclient) - [Spring WebClient Filters](https://www.baeldung.com/spring-webclient-filters) - [Get List of JSON Objects with WebClient](https://www.baeldung.com/spring-webclient-json-list) +- [Upload a File with WebClient](https://www.baeldung.com/spring-webclient-upload-file) diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java new file mode 100644 index 0000000000..08d6ff55ef --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/controller/UploadController.java @@ -0,0 +1,30 @@ +package com.baeldung.reactive.controller; + + +import com.baeldung.reactive.service.ReactiveUploadService; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import reactor.core.publisher.Mono; + + +@RestController +public class UploadController { + final ReactiveUploadService uploadService; + + public UploadController(ReactiveUploadService uploadService) { + this.uploadService = uploadService; + } + + @PostMapping(path = "/upload") + @ResponseBody + public Mono uploadPdf(@RequestParam("file") final MultipartFile multipartFile) { + return uploadService.uploadPdf(multipartFile.getResource()); + } + + @PostMapping(path = "/upload/multipart") + @ResponseBody + public Mono uploadMultipart(@RequestParam("file") final MultipartFile multipartFile) { + return uploadService.uploadMultipart(multipartFile); + } +} diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java new file mode 100644 index 0000000000..cd639ec1f9 --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/exception/ServiceException.java @@ -0,0 +1,8 @@ +package com.baeldung.reactive.exception; + +public class ServiceException extends RuntimeException{ + + public ServiceException(String message) { + super(message); + } +} diff --git a/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java new file mode 100644 index 0000000000..a12d54960a --- /dev/null +++ b/spring-5-reactive-client/src/main/java/com/baeldung/reactive/service/ReactiveUploadService.java @@ -0,0 +1,66 @@ +package com.baeldung.reactive.service; + + +import com.baeldung.reactive.exception.ServiceException; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.client.MultipartBodyBuilder; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.util.UriComponentsBuilder; +import reactor.core.publisher.Mono; + +import java.net.URI; + +@Service +public class ReactiveUploadService { + + private final WebClient webClient; + private static final String EXTERNAL_UPLOAD_URL = "http://localhost:8080/external/upload"; + + public ReactiveUploadService(final WebClient webClient) { + this.webClient = webClient; + } + + + public Mono uploadPdf(final Resource resource) { + + final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); + Mono httpStatusMono = webClient.post() + .uri(url) + .contentType(MediaType.APPLICATION_PDF) + .body(BodyInserters.fromResource(resource)) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } + }); + return httpStatusMono; + } + + + public Mono uploadMultipart(final MultipartFile multipartFile) { + final URI url = UriComponentsBuilder.fromHttpUrl(EXTERNAL_UPLOAD_URL).build().toUri(); + + final MultipartBodyBuilder builder = new MultipartBodyBuilder(); + builder.part("file", multipartFile.getResource()); + + Mono httpStatusMono = webClient.post() + .uri(url) + .contentType(MediaType.MULTIPART_FORM_DATA) + .body(BodyInserters.fromMultipartData(builder.build())) + .exchangeToMono(response -> { + if (response.statusCode().equals(HttpStatus.OK)) { + return response.bodyToMono(HttpStatus.class).thenReturn(response.statusCode()); + } else { + throw new ServiceException("Error uploading file"); + } + }); + return httpStatusMono; + } +} diff --git a/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java new file mode 100644 index 0000000000..40c1e40d92 --- /dev/null +++ b/spring-5-reactive-client/src/test/java/com/baeldung/reactive/service/ReactiveUploadServiceUnitTest.java @@ -0,0 +1,48 @@ +package com.baeldung.reactive.service; + +import org.junit.jupiter.api.Test; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +class ReactiveUploadServiceUnitTest { + + private static final String BASE_URL = "http://localhost:8080/external/upload"; + + final WebClient webClientMock = WebClient.builder().baseUrl(BASE_URL) + .exchangeFunction(clientRequest -> Mono.just(ClientResponse.create(HttpStatus.OK) + .header("content-type", "application/json") + .build())) + .build(); + + private final ReactiveUploadService tested = new ReactiveUploadService(webClientMock); + + @Test + void givenAPdf_whenUploadingWithWebClient_thenOK() { + final Resource file = mock(Resource.class); + + final Mono result = tested.uploadPdf(file); + final HttpStatus status = result.block(); + + assertThat(status).isEqualTo(HttpStatus.OK); + } + + @Test + void givenAMultipartPdf_whenUploadingWithWebClient_thenOK() { + final Resource file = mock(Resource.class); + final MultipartFile multipartFile = mock(MultipartFile.class); + when(multipartFile.getResource()).thenReturn(file); + + final Mono result = tested.uploadMultipart(multipartFile); + final HttpStatus status = result.block(); + + assertThat(status).isEqualTo(HttpStatus.OK); + } +} \ No newline at end of file diff --git a/spring-5-webflux/pom.xml b/spring-5-webflux/pom.xml index ad1a66943c..b37e93ded8 100644 --- a/spring-5-webflux/pom.xml +++ b/spring-5-webflux/pom.xml @@ -65,8 +65,4 @@ - - 2.3.3.RELEASE - - \ No newline at end of file diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java index abfe2e7807..2e2c309240 100644 --- a/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/rsocket/client/ClientConfiguration.java @@ -1,30 +1,29 @@ package com.baeldung.spring.rsocket.client; -import io.rsocket.RSocket; -import io.rsocket.RSocketFactory; -import io.rsocket.frame.decoder.PayloadDecoder; -import io.rsocket.transport.netty.client.TcpClientTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.rsocket.RSocketRequester; -import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.util.MimeTypeUtils; +import reactor.util.retry.Retry; + +import java.time.Duration; @Configuration public class ClientConfiguration { @Bean - public RSocket rSocket() { - return RSocketFactory.connect() - .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) - .frameDecoder(PayloadDecoder.ZERO_COPY) - .transport(TcpClientTransport.create(7000)) - .start() - .block(); - } + public RSocketRequester getRSocketRequester(){ - @Bean - RSocketRequester rSocketRequester(RSocketStrategies rSocketStrategies) { - return RSocketRequester.wrap(rSocket(), MimeTypeUtils.APPLICATION_JSON, MimeTypeUtils.APPLICATION_JSON, rSocketStrategies); + RSocketRequester.Builder builder = RSocketRequester.builder(); + + return builder + .rsocketConnector( + rSocketConnector -> + rSocketConnector.reconnect( + Retry.fixedDelay(2, Duration.ofSeconds(2)) + ) + ) + .dataMimeType(MimeTypeUtils.APPLICATION_JSON) + .tcp("localhost", 7000); } } diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java b/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java index f9de3b4006..2d11a51160 100644 --- a/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/serverconfig/CustomNettyWebServerFactory.java @@ -25,12 +25,9 @@ public class CustomNettyWebServerFactory { @Override public HttpServer apply(HttpServer httpServer) { - EventLoopGroup parentGroup = new NioEventLoopGroup(); - EventLoopGroup childGroup = new NioEventLoopGroup(); - return httpServer - .tcpConfiguration(tcpServer -> tcpServer.bootstrap( - serverBootstrap -> serverBootstrap.group(parentGroup, childGroup).channel(NioServerSocketChannel.class) - )); + EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); + eventLoopGroup.register(new NioServerSocketChannel()); + return httpServer.runOn(eventLoopGroup); } } } diff --git a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java index 40ddc732ac..98d604b178 100644 --- a/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java +++ b/spring-5-webflux/src/test/java/com/baeldung/spring/rsocket/server/MarketDataRSocketControllerLiveTest.java @@ -1,15 +1,8 @@ package com.baeldung.spring.rsocket.server; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.verify; - import com.baeldung.spring.rsocket.model.MarketData; import com.baeldung.spring.rsocket.model.MarketDataRequest; import io.rsocket.RSocket; -import io.rsocket.RSocketFactory; -import io.rsocket.frame.decoder.PayloadDecoder; -import io.rsocket.transport.netty.client.TcpClientTransport; -import java.time.Duration; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -23,6 +16,12 @@ import org.springframework.messaging.rsocket.RSocketStrategies; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.util.MimeTypeUtils; +import reactor.util.retry.Retry; + +import java.time.Duration; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; @RunWith(SpringRunner.class) @SpringBootTest @@ -81,12 +80,16 @@ public class MarketDataRSocketControllerLiveTest { @Bean @Lazy public RSocket rSocket() { - return RSocketFactory.connect() - .mimeType(MimeTypeUtils.APPLICATION_JSON_VALUE, MimeTypeUtils.APPLICATION_JSON_VALUE) - .frameDecoder(PayloadDecoder.ZERO_COPY) - .transport(TcpClientTransport.create(7000)) - .start() - .block(); + + RSocketRequester.Builder builder = RSocketRequester.builder(); + + return builder + .rsocketConnector( + rSocketConnector -> + rSocketConnector.reconnect(Retry.fixedDelay(2, Duration.ofSeconds(2)))) + .dataMimeType(MimeTypeUtils.APPLICATION_JSON) + .tcp("localhost", 7000) + .rsocket(); } @Bean diff --git a/spring-5/README.md b/spring-5/README.md index 2ddd9fa94f..952daa40d2 100644 --- a/spring-5/README.md +++ b/spring-5/README.md @@ -11,5 +11,4 @@ This module contains articles about Spring 5 - [Spring Assert Statements](https://www.baeldung.com/spring-assert) - [Difference between \ vs \](https://www.baeldung.com/spring-contextannotation-contextcomponentscan) - [Finding the Spring Version](https://www.baeldung.com/spring-find-version) -- [Spring 5 Testing with @EnabledIf Annotation](https://www.baeldung.com/spring-5-enabledIf) - [Configuring a Hikari Connection Pool with Spring Boot](https://www.baeldung.com/spring-boot-hikari) diff --git a/spring-aop/README.md b/spring-aop/README.md index 707e0fbf81..b49c2bd457 100644 --- a/spring-aop/README.md +++ b/spring-aop/README.md @@ -13,3 +13,4 @@ This module contains articles about Spring aspect oriented programming (AOP) - [When Does Java Throw UndeclaredThrowableException?](https://www.baeldung.com/java-undeclaredthrowableexception) - [Get Advised Method Info in Spring AOP](https://www.baeldung.com/spring-aop-get-advised-method-info) - [Advise Methods on Annotated Classes With AspectJ](https://www.baeldung.com/aspectj-advise-methods) +- [Joinpoint vs. ProceedingJoinPoint in AspectJ](https://www.baeldung.com/aspectj-joinpoint-proceedingjoinpoint) diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java b/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java new file mode 100644 index 0000000000..5a6b5ce63a --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/ArticleService.java @@ -0,0 +1,32 @@ +package com.baeldung.joinpoint; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.List; + +import static java.util.stream.Collectors.toList; + +@Service +public class ArticleService { + + public List getArticleList() { + return Arrays.asList( + "Article 1", + "Article 2" + ); + } + + public List getArticleList(String startsWithFilter) { + if (StringUtils.isBlank(startsWithFilter)) { + throw new IllegalArgumentException("startsWithFilter can't be blank"); + } + + return getArticleList() + .stream() + .filter(a -> a.startsWith(startsWithFilter)) + .collect(toList()); + } + +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java new file mode 100644 index 0000000000..a1f991e90d --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspect.java @@ -0,0 +1,27 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.logging.Logger; + +@Aspect +@Component +public class JoinPointAfterThrowingAspect { + + private static final java.util.logging.Logger log = Logger.getLogger(JoinPointAfterThrowingAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @AfterThrowing( + pointcut = "articleListPointcut()", + throwing = "e" + ) + public void logExceptions(JoinPoint jp, Exception e) { + log.severe(e.getMessage()); + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java new file mode 100644 index 0000000000..dbf2b2e1e4 --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundCacheAspect.java @@ -0,0 +1,30 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Aspect +@Component +public class JoinPointAroundCacheAspect { + + public final static Map CACHE = new HashMap<>(); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Around("articleListPointcut()") + public Object aroundAdviceCache(ProceedingJoinPoint pjp) throws Throwable { + Object articles = CACHE.get(pjp.getArgs()); + if (articles == null) { + articles = pjp.proceed(pjp.getArgs()); + CACHE.put(pjp.getArgs(), articles); + } + return articles; + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java new file mode 100644 index 0000000000..8d15de150d --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspect.java @@ -0,0 +1,30 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.logging.Logger; + +@Aspect +@Component +public class JoinPointAroundExceptionAspect { + + private static final java.util.logging.Logger log = Logger.getLogger(JoinPointAroundExceptionAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Around("articleListPointcut()") + public Object aroundAdviceException(ProceedingJoinPoint pjp) throws Throwable { + try { + return pjp.proceed(pjp.getArgs()); + } catch (Throwable e) { + log.severe(e.getMessage()); + log.info("Retrying operation"); + return pjp.proceed(pjp.getArgs()); + } + } +} diff --git a/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java new file mode 100644 index 0000000000..4485363ff9 --- /dev/null +++ b/spring-aop/src/main/java/com/baeldung/joinpoint/JoinPointBeforeAspect.java @@ -0,0 +1,32 @@ +package com.baeldung.joinpoint; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.logging.Logger; + +import static java.lang.String.format; + +@Aspect +@Component +public class JoinPointBeforeAspect { + + private static final Logger log = Logger.getLogger(JoinPointBeforeAspect.class.getName()); + + @Pointcut("execution(* com.baeldung.joinpoint.ArticleService.getArticleList(..))") + public void articleListPointcut() { } + + @Before("articleListPointcut()") + public void beforeAdvice(JoinPoint joinPoint) { + log.info( + format("Method %s executed with %s arguments", + joinPoint.getStaticPart().getSignature(), + Arrays.toString(joinPoint.getArgs()) + ) + ); + } +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java new file mode 100644 index 0000000000..a67b843262 --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/ArticleServiceIntegrationTest.java @@ -0,0 +1,39 @@ +package com.baeldung.joinpoint; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; + +import static org.junit.Assert.assertFalse; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +public class ArticleServiceIntegrationTest { + + @Autowired + private ArticleService articleService; + + @Test + public void shouldGetNotEmptyArticleList() { + List articleList = articleService.getArticleList(); + + assertFalse(articleList.isEmpty()); + } + + @Test + public void shouldGetNotEmptyArticleListWithStartsWithFilter() { + List articleList = articleService.getArticleList("Article"); + + assertFalse(articleList.isEmpty()); + } + + @Test(expected = IllegalArgumentException.class) + public void shouldThrowExceptionIfStartsWithFilterIsBlank() { + articleService.getArticleList(" "); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java new file mode 100644 index 0000000000..cdef76ac0d --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAfterThrowingAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAfterThrowingAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointAfterThrowingAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test(expected = IllegalArgumentException.class) + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(" "); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("SEVERE startsWithFilter can't be blank")); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java new file mode 100644 index 0000000000..4bd8f2ad8e --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundCacheAspectIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.joinpoint; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAroundCacheAspectIntegrationTest { + + @Autowired + private ArticleService articleService; + + @Test + public void shouldPopulateCache() { + assertTrue(JoinPointAroundCacheAspect.CACHE.isEmpty()); + + List articles = articleService.getArticleList(); + + assertFalse(JoinPointAroundCacheAspect.CACHE.isEmpty()); + assertEquals(JoinPointAroundCacheAspect.CACHE.size(), 1); + assertEquals(JoinPointAroundCacheAspect.CACHE.values().iterator().next(), articles); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java new file mode 100644 index 0000000000..dbdda30c15 --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointAroundExceptionAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointAroundExceptionAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointAroundExceptionAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test(expected = IllegalArgumentException.class) + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(" "); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("INFO Retrying operation")); + } + +} diff --git a/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java new file mode 100644 index 0000000000..631852d57f --- /dev/null +++ b/spring-aop/src/test/java/com/baeldung/joinpoint/JoinPointBeforeAspectIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.joinpoint; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +@EnableAspectJAutoProxy +public class JoinPointBeforeAspectIntegrationTest { + + private final List messages = new ArrayList<>(); + + @Before + public void setUp() { + Handler logEventHandler = new Handler() { + @Override + public void publish(LogRecord record) { + messages.add(record.getLevel().getName() + " " + record.getMessage()); + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + }; + + Logger logger = Logger.getLogger(JoinPointBeforeAspect.class.getName()); + logger.addHandler(logEventHandler); + } + + @Autowired + private ArticleService articleService; + + @Test + public void shouldLogMethodSignatureBeforeExecution() { + articleService.getArticleList(); + + assertThat(messages, hasSize(1)); + assertTrue(messages.contains("INFO Method List com.baeldung.joinpoint.ArticleService.getArticleList() executed with [] arguments")); + } + +} diff --git a/spring-boot-modules/spring-boot-bootstrap/README.md b/spring-boot-modules/spring-boot-bootstrap/README.md index 146cd04551..02ec52f755 100644 --- a/spring-boot-modules/spring-boot-bootstrap/README.md +++ b/spring-boot-modules/spring-boot-bootstrap/README.md @@ -10,4 +10,4 @@ This module contains articles about bootstrapping Spring Boot applications. - [Deploy a Spring Boot Application to OpenShift](https://www.baeldung.com/spring-boot-deploy-openshift) - [Deploy a Spring Boot Application to AWS Beanstalk](https://www.baeldung.com/spring-boot-deploy-aws-beanstalk) - [Guide to @SpringBootConfiguration in Spring Boot](https://www.baeldung.com/springbootconfiguration-annotation) -- [Implement Health Checks in OpenShift](https://www.baeldung.com/openshift-health-checks) +- [Implement Health Checks in OpenShift](https://www.baeldung.com/ops/openshift-health-checks) diff --git a/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml b/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml index 948482b21b..1c26ec32d3 100644 --- a/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml +++ b/spring-boot-modules/spring-boot-custom-starter/parent-multi-module/application/pom.xml @@ -34,4 +34,5 @@ + \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-environment/pom.xml b/spring-boot-modules/spring-boot-environment/pom.xml index 5327825409..d4b260ee3d 100644 --- a/spring-boot-modules/spring-boot-environment/pom.xml +++ b/spring-boot-modules/spring-boot-environment/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-environment - war spring-boot-environment + war Demo project for Spring Boot diff --git a/spring-boot-modules/spring-boot-exceptions/pom.xml b/spring-boot-modules/spring-boot-exceptions/pom.xml index 9866c418be..cec1bab4ff 100644 --- a/spring-boot-modules/spring-boot-exceptions/pom.xml +++ b/spring-boot-modules/spring-boot-exceptions/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-exceptions - jar spring-boot-exceptions + jar Demo project for working with Spring Boot exceptions diff --git a/spring-boot-modules/spring-boot-flowable/pom.xml b/spring-boot-modules/spring-boot-flowable/pom.xml index fee4d9fdfc..320a684880 100644 --- a/spring-boot-modules/spring-boot-flowable/pom.xml +++ b/spring-boot-modules/spring-boot-flowable/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-flowable - war spring-boot-flowable + war Spring Boot Flowable Module diff --git a/spring-boot-modules/spring-boot-jasypt/pom.xml b/spring-boot-modules/spring-boot-jasypt/pom.xml index 1032500de7..0a37c545ac 100644 --- a/spring-boot-modules/spring-boot-jasypt/pom.xml +++ b/spring-boot-modules/spring-boot-jasypt/pom.xml @@ -5,8 +5,8 @@ 4.0.0 com.example.jasypt spring-boot-jasypt - jar spring-boot-jasypt + jar Demo project for Spring Boot diff --git a/spring-boot-modules/spring-boot-keycloak/pom.xml b/spring-boot-modules/spring-boot-keycloak/pom.xml index 505d486509..b80dbfa191 100644 --- a/spring-boot-modules/spring-boot-keycloak/pom.xml +++ b/spring-boot-modules/spring-boot-keycloak/pom.xml @@ -77,8 +77,6 @@ 13.0.1 - - 2.5.3 \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-mvc-2/pom.xml b/spring-boot-modules/spring-boot-mvc-2/pom.xml index 43e1f12efc..d347b36b3b 100644 --- a/spring-boot-modules/spring-boot-mvc-2/pom.xml +++ b/spring-boot-modules/spring-boot-mvc-2/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-boot-mvc-2 - jar spring-boot-mvc-2 + jar Module For Spring Boot MVC Web Fn diff --git a/spring-boot-modules/spring-boot-mvc-birt/pom.xml b/spring-boot-modules/spring-boot-mvc-birt/pom.xml index 54a5091559..16b07000f8 100644 --- a/spring-boot-modules/spring-boot-mvc-birt/pom.xml +++ b/spring-boot-modules/spring-boot-mvc-birt/pom.xml @@ -5,8 +5,8 @@ 4.0.0 spring-boot-mvc-birt 0.0.1-SNAPSHOT - jar spring-boot-mvc-birt + jar Module For Spring Boot Integration with BIRT + + + + + \ No newline at end of file diff --git a/spring-roo/pom.xml b/spring-roo/pom.xml index 8730ef7a33..d900e131d4 100644 --- a/spring-roo/pom.xml +++ b/spring-roo/pom.xml @@ -2,7 +2,7 @@ - 4.0.0 com.baeldung @@ -627,4 +627,4 @@ 1.2.0 - + \ No newline at end of file diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml index 917360dc3e..e482a67a0e 100644 --- a/spring-security-modules/pom.xml +++ b/spring-security-modules/pom.xml @@ -49,4 +49,4 @@ spring-social-login - + \ No newline at end of file diff --git a/spring-security-modules/spring-5-security-oauth/pom.xml b/spring-security-modules/spring-5-security-oauth/pom.xml index 03e1880431..194ace35b0 100644 --- a/spring-security-modules/spring-5-security-oauth/pom.xml +++ b/spring-security-modules/spring-5-security-oauth/pom.xml @@ -68,6 +68,8 @@ + + 2.5.2 com.baeldung.oauth2.SpringOAuthApplication diff --git a/spring-security-modules/spring-security-saml/src/main/java/com/baeldung/saml/config/SamlSecurityConfig.java b/spring-security-modules/spring-security-saml/src/main/java/com/baeldung/saml/config/SamlSecurityConfig.java index 378db478cf..10e37b346f 100644 --- a/spring-security-modules/spring-security-saml/src/main/java/com/baeldung/saml/config/SamlSecurityConfig.java +++ b/spring-security-modules/spring-security-saml/src/main/java/com/baeldung/saml/config/SamlSecurityConfig.java @@ -5,10 +5,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Timer; import org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider; import org.opensaml.saml2.metadata.provider.MetadataProvider; import org.opensaml.saml2.metadata.provider.MetadataProviderException; +import org.opensaml.saml2.metadata.provider.ResourceBackedMetadataProvider; +import org.opensaml.util.resource.ClasspathResource; import org.opensaml.util.resource.ResourceException; import org.opensaml.xml.parse.StaticBasicParserPool; import org.springframework.beans.factory.annotation.Qualifier; @@ -141,13 +144,19 @@ public class SamlSecurityConfig { @Bean @Qualifier("okta") public ExtendedMetadataDelegate oktaExtendedMetadataProvider() throws MetadataProviderException { - File metadata = null; - try { - metadata = new File("./src/main/resources/saml/metadata/sso.xml"); - } catch (Exception e) { - e.printStackTrace(); - } - FilesystemMetadataProvider provider = new FilesystemMetadataProvider(metadata); + // Use the Spring Security SAML resource mechanism to load + // metadata from the Java classpath. This works from Spring Boot + // self contained JAR file. + org.opensaml.util.resource.Resource resource = null; + + try { + resource = new ClasspathResource("/saml/metadata/sso.xml"); + } catch (ResourceException e) { + e.printStackTrace(); + } + + Timer timer = new Timer("saml-metadata"); + ResourceBackedMetadataProvider provider = new ResourceBackedMetadataProvider(timer,resource); provider.setParserPool(parserPool()); return new ExtendedMetadataDelegate(provider, extendedMetadata()); } diff --git a/spring-security-modules/spring-security-saml/src/main/resources/application.properties b/spring-security-modules/spring-security-saml/src/main/resources/application.properties index f9d6a5df3c..1d93a12737 100644 --- a/spring-security-modules/spring-security-saml/src/main/resources/application.properties +++ b/spring-security-modules/spring-security-saml/src/main/resources/application.properties @@ -1,6 +1,8 @@ saml.keystore.location=classpath:/saml/samlKeystore.jks +# Password for Java keystore and item therein saml.keystore.password= saml.keystore.alias= +# SAML Entity ID extracted from top of SAML metadata file saml.idp= saml.sp=http://localhost:8080/saml/metadata \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-react/pom.xml b/spring-security-modules/spring-security-web-react/pom.xml index 61df563edd..a31fafc5ad 100644 --- a/spring-security-modules/spring-security-web-react/pom.xml +++ b/spring-security-modules/spring-security-web-react/pom.xml @@ -108,41 +108,17 @@ - - + + org.eclipse.jetty jetty-maven-plugin @@ -152,61 +128,17 @@ - - + + diff --git a/spring-security-modules/spring-security-web-sockets/README.md b/spring-security-modules/spring-security-web-sockets/README.md index 76717e2fe6..34e06fa832 100644 --- a/spring-security-modules/spring-security-web-sockets/README.md +++ b/spring-security-modules/spring-security-web-sockets/README.md @@ -10,8 +10,8 @@ This module contains articles about WebSockets with Spring Security ### Running This Project: -To build the project, run the command: mvn clean install. This will build a war file in the target folder that you can deploye on a server like Tomcat. +To build the project, run the command: `mvn clean install`. This will build a war file in the target folder that you can deploy on a server like Tomcat. -Alternatively, run the project from an IDE. +Alternatively, run the project from an IDE, with the maven goal `org.codehaus.cargo:cargo-maven2-plugin:run` To login, use credentials from the data.sql file in src/main/resource, eg: user/password. diff --git a/spring-security-modules/spring-security-web-sockets/pom.xml b/spring-security-modules/spring-security-web-sockets/pom.xml index b1536e88ea..802c894612 100644 --- a/spring-security-modules/spring-security-web-sockets/pom.xml +++ b/spring-security-modules/spring-security-web-sockets/pom.xml @@ -103,7 +103,7 @@ ch.qos.logback logback-classic - ${logback-classic.version} + ${logback.version} @@ -155,11 +155,14 @@ spring-security-web-sockets - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} - /spring-security-mvc-socket + + tomcat9x + embedded + @@ -177,8 +180,8 @@ 5.2.10.Final 1.11.3.RELEASE - 1.2.3 1.5.10.RELEASE + 1.7.6 \ No newline at end of file diff --git a/spring-web-modules/spring-mvc-views/pom.xml b/spring-web-modules/spring-mvc-views/pom.xml index 7e48175ff2..ac2215f983 100644 --- a/spring-web-modules/spring-mvc-views/pom.xml +++ b/spring-web-modules/spring-mvc-views/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-mvc-views - war spring-mvc-views + war com.baeldung diff --git a/spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpIntegrationTest.java b/spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpManualTest.java similarity index 66% rename from spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpIntegrationTest.java rename to spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpManualTest.java index 0aa23842b1..99a76099b2 100644 --- a/spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpIntegrationTest.java +++ b/spring-web-modules/spring-mvc-xml/src/test/java/com/baeldung/geoip/GeoIpManualTest.java @@ -10,13 +10,18 @@ import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.exception.GeoIp2Exception; import com.maxmind.geoip2.model.CityResponse; -public class GeoIpIntegrationTest { +public class GeoIpManualTest { @Test public void givenIP_whenFetchingCity_thenReturnsCityData() throws IOException, GeoIp2Exception { ClassLoader classLoader = getClass().getClassLoader(); - File database = new File(classLoader.getResource("GeoLite2-City.mmdb").getFile()); + /** + * Download the db file as shown in the article https://www.baeldung.com/geolocation-by-ip-with-maxmind, + * then replace the "your-path-to-db-file" string in the test with the file path before running the test + * HINT : Copy the downloaded file at spring-web-modules/spring-mvc-xml/src/test/resources/GeoLite2-City.mmdb + * **/ + File database = new File("your-path-to-db-file"); DatabaseReader dbReader = new DatabaseReader.Builder(database).build(); InetAddress ipAddress = InetAddress.getByName("google.com"); diff --git a/spring-websockets/README.md b/spring-websockets/README.md index 9cc84f0fda..7d69c21b78 100644 --- a/spring-websockets/README.md +++ b/spring-websockets/README.md @@ -6,3 +6,4 @@ This module contains articles about Spring WebSockets. - [Intro to WebSockets with Spring](https://www.baeldung.com/websockets-spring) - [A Quick Example of Spring Websockets’ @SendToUser Annotation](https://www.baeldung.com/spring-websockets-sendtouser) - [Scheduled WebSocket Push with Spring Boot](https://www.baeldung.com/spring-boot-scheduled-websocket) +- [Test WebSocket APIs With Postman](https://www.baeldung.com/postman-websocket-apis) diff --git a/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java new file mode 100644 index 0000000000..5218140d2c --- /dev/null +++ b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketConfig.java @@ -0,0 +1,23 @@ +package com.baeldung.rawwebsocket; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +@Configuration +@EnableWebSocket +public class ServerWebSocketConfig implements WebSocketConfigurer { + + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(webSocketHandler(), "/websocket"); + } + + @Bean + public WebSocketHandler webSocketHandler() { + return new ServerWebSocketHandler(); + } +} diff --git a/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java new file mode 100644 index 0000000000..ed1ac8edc3 --- /dev/null +++ b/spring-websockets/src/main/java/com/baeldung/rawwebsocket/ServerWebSocketHandler.java @@ -0,0 +1,72 @@ +package com.baeldung.rawwebsocket; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.SubProtocolCapable; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.util.HtmlUtils; + +import java.io.IOException; +import java.time.LocalTime; +import java.util.Collections; +import java.util.List; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; + +public class ServerWebSocketHandler extends TextWebSocketHandler implements SubProtocolCapable { + + private static final Logger logger = LoggerFactory.getLogger(ServerWebSocketHandler.class); + + private final Set sessions = new CopyOnWriteArraySet<>(); + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + logger.info("Server connection opened"); + sessions.add(session); + + TextMessage message = new TextMessage("one-time message from server"); + logger.info("Server sends: {}", message); + session.sendMessage(message); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { + logger.info("Server connection closed: {}", status); + sessions.remove(session); + } + + @Scheduled(fixedRate = 10000) + void sendPeriodicMessages() throws IOException { + for (WebSocketSession session : sessions) { + if (session.isOpen()) { + String broadcast = "server periodic message " + LocalTime.now(); + logger.info("Server sends: {}", broadcast); + session.sendMessage(new TextMessage(broadcast)); + } + } + } + + @Override + public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + String request = message.getPayload(); + logger.info("Server received: {}", request); + + String response = String.format("response from server to '%s'", HtmlUtils.htmlEscape(request)); + logger.info("Server sends: {}", response); + session.sendMessage(new TextMessage(response)); + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) { + logger.info("Server transport error: {}", exception.getMessage()); + } + + @Override + public List getSubProtocols() { + return Collections.singletonList("subprotocol.demo.websocket"); + } +} diff --git a/testing-modules/gatling/README.md b/testing-modules/gatling/README.md index 7352479d1b..b99fafce15 100644 --- a/testing-modules/gatling/README.md +++ b/testing-modules/gatling/README.md @@ -1,6 +1,6 @@ ### Relevant Articles: - [Intro to Gatling](http://www.baeldung.com/introduction-to-gatling) -- [Run Gatling Tests From Jenkins](https://www.baeldung.com/jenkins-run-gatling-tests) +- [Run Gatling Tests From Jenkins](https://www.baeldung.com/ops/jenkins-run-gatling-tests) ### Running a simualtion - To run a simulation use "simulation" profile, command - `mvn install -Psimulation -Dgib.enabled=false` diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTest.java new file mode 100644 index 0000000000..0138184cc3 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTest.java @@ -0,0 +1,8 @@ +package com.baeldung.ignore; + +public abstract class BaseUnitTest { + + public void helperMethod() { + + } +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTestHelper.java b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTestHelper.java new file mode 100644 index 0000000000..73ad19ed13 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/BaseUnitTestHelper.java @@ -0,0 +1,8 @@ +package com.baeldung.ignore; + +public class BaseUnitTestHelper { + + public void helperMethod() { + + } +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/ignore/ExtendedBaseUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/ExtendedBaseUnitTest.java new file mode 100644 index 0000000000..3b88ff6ff9 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/ExtendedBaseUnitTest.java @@ -0,0 +1,11 @@ +package com.baeldung.ignore; + +import org.junit.Test; + +public class ExtendedBaseUnitTest extends BaseUnitTest { + + @Test + public void whenDoTest_thenAssert() { + + } +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreClassUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreClassUnitTest.java new file mode 100644 index 0000000000..43ada14e8f --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreClassUnitTest.java @@ -0,0 +1,13 @@ +package com.baeldung.ignore; + +import org.junit.Ignore; +import org.junit.Test; + +@Ignore("Class not ready for tests") +public class IgnoreClassUnitTest { + + @Test + public void whenDoTest_thenAssert() { + + } +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreMethodUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreMethodUnitTest.java new file mode 100644 index 0000000000..c49e95eed9 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/ignore/IgnoreMethodUnitTest.java @@ -0,0 +1,13 @@ +package com.baeldung.ignore; + +import org.junit.Ignore; +import org.junit.Test; + +public class IgnoreMethodUnitTest { + + @Ignore("This test method not ready yet") + @Test + public void whenMethodIsIgnored_thenTestsDoNotRun() { + + } +} diff --git a/testing-modules/junit-5-advanced/README.md b/testing-modules/junit-5-advanced/README.md index 4a31292683..5d70e6f058 100644 --- a/testing-modules/junit-5-advanced/README.md +++ b/testing-modules/junit-5-advanced/README.md @@ -3,3 +3,4 @@ - [JUnit 5 TestWatcher API](https://www.baeldung.com/junit-testwatcher) - [JUnit Custom Display Name Generator API](https://www.baeldung.com/junit-custom-display-name-generator) - [@TestInstance Annotation in JUnit 5](https://www.baeldung.com/junit-testinstance-annotation) +- [Run JUnit Test Cases From the Command Line](https://www.baeldung.com/junit-run-from-command-line) diff --git a/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/FirstUnitTest.java b/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/FirstUnitTest.java new file mode 100644 index 0000000000..307fd22539 --- /dev/null +++ b/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/FirstUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.commandline; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class FirstUnitTest { + + + + @Test + void whenThis_thenThat() { + assertTrue(true); + } + + @Test + void whenSomething_thenSomething() { + assertTrue(true); + } + + @Test + void whenSomethingElse_thenSomethingElse() { + assertTrue(true); + } + +} + diff --git a/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/SecondUnitTest.java b/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/SecondUnitTest.java new file mode 100644 index 0000000000..993e9555b4 --- /dev/null +++ b/testing-modules/junit-5-advanced/src/test/java/com/baeldung/commandline/SecondUnitTest.java @@ -0,0 +1,19 @@ +package com.baeldung.commandline; + + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SecondUnitTest { + + @Test + void whenSomething_thenSomething() { + assertTrue(true); + } + + @Test + void whenSomethingElse_thenSomethingElse() { + assertTrue(true); + } +} diff --git a/testing-modules/junit-5-basics/pom.xml b/testing-modules/junit-5-basics/pom.xml index 0358f0c29a..cf39068ae7 100644 --- a/testing-modules/junit-5-basics/pom.xml +++ b/testing-modules/junit-5-basics/pom.xml @@ -99,7 +99,6 @@ maven-surefire-plugin ${maven-surefire-plugin.version} - **/*IntegrationTest.java diff --git a/testing-modules/junit-5/pom.xml b/testing-modules/junit-5/pom.xml index 125fa77423..4e1a7740ee 100644 --- a/testing-modules/junit-5/pom.xml +++ b/testing-modules/junit-5/pom.xml @@ -38,6 +38,14 @@ ${junit.platform.version} test + + + org.junit.platform + junit-platform-console-standalone + 1.7.0 + test + + org.junit.vintage junit-vintage-engine diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index 3bb351f123..0658094efd 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -12,7 +12,6 @@ parent-boot-2 0.0.1-SNAPSHOT ../../parent-boot-2 - diff --git a/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java index 31c5c69766..95b41e02a5 100644 --- a/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java +++ b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java @@ -19,7 +19,7 @@ public class MemoryAppender extends ListAppender { public boolean contains(String string, Level level) { return this.list.stream() - .anyMatch(event -> event.getMessage().toString().contains(string) + .anyMatch(event -> event.toString().contains(string) && event.getLevel().equals(level)); } @@ -30,13 +30,13 @@ public class MemoryAppender extends ListAppender { public List search(String string) { return this.list.stream() - .filter(event -> event.getMessage().toString().contains(string)) + .filter(event -> event.toString().contains(string)) .collect(Collectors.toList()); } public List search(String string, Level level) { return this.list.stream() - .filter(event -> event.getMessage().toString().contains(string) + .filter(event -> event.toString().contains(string) && event.getLevel().equals(level)) .collect(Collectors.toList()); } diff --git a/vaadin/src/main/webapp/VAADIN/themes/mytheme/styles.css b/vaadin/src/main/webapp/VAADIN/themes/mytheme/styles.css deleted file mode 100644 index 75bf26f498..0000000000 --- a/vaadin/src/main/webapp/VAADIN/themes/mytheme/styles.css +++ /dev/null @@ -1,12986 +0,0 @@ -/** - * Checks if a list contains a certain value. - * - * @param {list} $list - the list to check - * @param {value} $var - the value to search for - * @param {bool} $recursive (false) - should any contained lists be checked for the value - * - * @return {bool} true if the value is found from the list, false otherwise - * - * @group lists - */ - -/** - * Cross-browser opacity. - * - * @param {number} $value - opacity value from 0 to 1 - * @param {bool} $important (false) - should the property value be declared with !important - * - * @group util - */ - -@-webkit-keyframes valo-animate-in-fade { - 0% { - opacity: 0; - } - } - -@-moz-keyframes valo-animate-in-fade { - 0% { - opacity: 0; - } - } - -@keyframes valo-animate-in-fade { - 0% { - opacity: 0; - } - } - -@-webkit-keyframes valo-animate-out-fade { - 100% { - opacity: 0; - } - } - -@-moz-keyframes valo-animate-out-fade { - 100% { - opacity: 0; - } - } - -@keyframes valo-animate-out-fade { - 100% { - opacity: 0; - } - } - -@-webkit-keyframes valo-animate-in-slide-down { - 0% { - -webkit-transform: translateY(-100%); - } - } - -@-moz-keyframes valo-animate-in-slide-down { - 0% { - -moz-transform: translateY(-100%); - } - } - -@keyframes valo-animate-in-slide-down { - 0% { - -webkit-transform: translateY(-100%); - -moz-transform: translateY(-100%); - -ms-transform: translateY(-100%); - -o-transform: translateY(-100%); - transform: translateY(-100%); - } - } - -@-webkit-keyframes valo-animate-in-slide-up { - 0% { - -webkit-transform: translateY(100%); - } - } - -@-moz-keyframes valo-animate-in-slide-up { - 0% { - -moz-transform: translateY(100%); - } - } - -@keyframes valo-animate-in-slide-up { - 0% { - -webkit-transform: translateY(100%); - -moz-transform: translateY(100%); - -ms-transform: translateY(100%); - -o-transform: translateY(100%); - transform: translateY(100%); - } - } - -@-webkit-keyframes valo-animate-in-slide-left { - 0% { - -webkit-transform: translateX(100%); - } - } - -@-moz-keyframes valo-animate-in-slide-left { - 0% { - -moz-transform: translateX(100%); - } - } - -@keyframes valo-animate-in-slide-left { - 0% { - -webkit-transform: translateX(100%); - -moz-transform: translateX(100%); - -ms-transform: translateX(100%); - -o-transform: translateX(100%); - transform: translateX(100%); - } - } - -@-webkit-keyframes valo-animate-in-slide-right { - 0% { - -webkit-transform: translateX(-100%); - } - } - -@-moz-keyframes valo-animate-in-slide-right { - 0% { - -moz-transform: translateX(-100%); - } - } - -@keyframes valo-animate-in-slide-right { - 0% { - -webkit-transform: translateX(-100%); - -moz-transform: translateX(-100%); - -ms-transform: translateX(-100%); - -o-transform: translateX(-100%); - transform: translateX(-100%); - } - } - -@-webkit-keyframes valo-animate-out-slide-down { - 100% { - -webkit-transform: translateY(100%); - } - } - -@-moz-keyframes valo-animate-out-slide-down { - 100% { - -moz-transform: translateY(100%); - } - } - -@keyframes valo-animate-out-slide-down { - 100% { - -webkit-transform: translateY(100%); - -moz-transform: translateY(100%); - -ms-transform: translateY(100%); - -o-transform: translateY(100%); - transform: translateY(100%); - } - } - -@-webkit-keyframes valo-animate-out-slide-up { - 100% { - -webkit-transform: translateY(-100%); - } - } - -@-moz-keyframes valo-animate-out-slide-up { - 100% { - -moz-transform: translateY(-100%); - } - } - -@keyframes valo-animate-out-slide-up { - 100% { - -webkit-transform: translateY(-100%); - -moz-transform: translateY(-100%); - -ms-transform: translateY(-100%); - -o-transform: translateY(-100%); - transform: translateY(-100%); - } - } - -@-webkit-keyframes valo-animate-out-slide-left { - 100% { - -webkit-transform: translateX(-100%); - } - } - -@-moz-keyframes valo-animate-out-slide-left { - 100% { - -moz-transform: translateX(-100%); - } - } - -@keyframes valo-animate-out-slide-left { - 100% { - -webkit-transform: translateX(-100%); - -moz-transform: translateX(-100%); - -ms-transform: translateX(-100%); - -o-transform: translateX(-100%); - transform: translateX(-100%); - } - } - -@-webkit-keyframes valo-animate-out-slide-right { - 100% { - -webkit-transform: translateX(100%); - } - } - -@-moz-keyframes valo-animate-out-slide-right { - 100% { - -moz-transform: translateX(100%); - } - } - -@keyframes valo-animate-out-slide-right { - 100% { - -webkit-transform: translateX(100%); - -moz-transform: translateX(100%); - -ms-transform: translateX(100%); - -o-transform: translateX(100%); - transform: translateX(100%); - } - } - -@-webkit-keyframes valo-overlay-animate-in { - 0% { - -webkit-transform: translatey(-4px); - opacity: 0; - } - } - -@-moz-keyframes valo-overlay-animate-in { - 0% { - -moz-transform: translatey(-4px); - opacity: 0; - } - } - -@keyframes valo-overlay-animate-in { - 0% { - -webkit-transform: translatey(-4px); - -moz-transform: translatey(-4px); - -ms-transform: translatey(-4px); - -o-transform: translatey(-4px); - transform: translatey(-4px); - opacity: 0; - } - } - -@-webkit-keyframes valo-animate-out-slide-down-fade { - 100% { - opacity: 0; - -webkit-transform: translatey(30%); - } - } - -@-moz-keyframes valo-animate-out-slide-down-fade { - 100% { - opacity: 0; - -moz-transform: translatey(30%); - } - } - -@keyframes valo-animate-out-slide-down-fade { - 100% { - opacity: 0; - -webkit-transform: translatey(30%); - -moz-transform: translatey(30%); - -ms-transform: translatey(30%); - -o-transform: translatey(30%); - transform: translatey(30%); - } - } - -/** - * Outputs cross-browser Valo-specific linear gradient background-image declarations. - * - * @group style - * - * @param {color} $color ($v-background-color) - The base color for the gradient color stops - * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient. - * @param {color} $fallback (null) - A fallback color for browser which do not support linear gradients (IE8 and IE9 in particular). If null, the base $color is used instead. - * @param {string} $direction (to bottom) - the direction of the linear gradient. The color stops are by default so that a lighter shade is at the start and a darker shade is at the end. - */ - -/** - * Computes a CSS border property value for the given base color. - * - * @group style - * - * @param {list} $border ($v-border) - CSS border value which can contain any of the color keywords - * @param {color} $color ($v-background-color) - the base color to which the color keywords are applied to - * @param {color} $context (null) - context/surrounding color where the border is expected to appear. The color of the final border is the darker of the two parameters passed to this function. - * @param {number} $strength (1) - adjustment for the border contrast - * - * @return {list} The input $border value with any color keyword replaced with the corresponding actual color - */ - -/** - * Ouput selectors and properties to vertically center elements inside their parent. - * - * @param {string} $to-align (()) - The selector to match the elements which you wish to align vertically. The targeted elements should be inline or inline-block elements. - * @param {string} $align (middle) - The vertical-align value, e.g. top, middle, bottom - * @param {string} $pseudo-element (after) - Which pseudo element to use for the vertical align guide - * - * @group util - */ - -@font-face { - font-family: ThemeIcons; - font-weight: normal; - font-style: normal; - src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot); - src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.svg#ThemeIcons) format("svg"); -} - -.ThemeIcons { - font-family: ThemeIcons; - font-style: normal; - font-weight: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: inline-block; - text-align: center; -} - -@font-face { - font-family: FontAwesome; - font-weight: normal; - font-style: normal; - src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot); - src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.svg#FontAwesome) format("svg"); -} - -.FontAwesome { - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: inline-block; - text-align: center; -} - -@font-face { - font-family: "Open Sans"; - src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot); - src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.ttf) format("truetype"); - font-weight: 300; - font-style: normal; -} - -@font-face { - font-family: "Open Sans"; - src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot); - src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.ttf) format("truetype"); - font-weight: 400; - font-style: normal; -} - -@font-face { - font-family: "Open Sans"; - src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot); - src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.ttf) format("truetype"); - font-weight: 600; - font-style: normal; -} - -@-webkit-keyframes v-rotate-360 { - to { - -webkit-transform: rotate(360deg); - } - } - -@-moz-keyframes v-rotate-360 { - to { - -moz-transform: rotate(360deg); - } - } - -@-o-keyframes v-rotate-360 { - to { - -o-transform: rotate(360deg); - } - } - -@keyframes v-rotate-360 { - to { - transform: rotate(360deg); - } - } - -@-webkit-keyframes v-progress-start { - 0% { - width: 0%; - } - 100% { - width: 50%; - } - } - -@-moz-keyframes v-progress-start { - 0% { - width: 0%; - } - 100% { - width: 50%; - } - } - -@keyframes v-progress-start { - 0% { - width: 0%; - } - 100% { - width: 50%; - } - } - -@-webkit-keyframes v-progress-delay { - 0% { - width: 50%; - } - 100% { - width: 90%; - } - } - -@-moz-keyframes v-progress-delay { - 0% { - width: 50%; - } - 100% { - width: 90%; - } - } - -@keyframes v-progress-delay { - 0% { - width: 50%; - } - 100% { - width: 90%; - } - } - -@-webkit-keyframes v-progress-wait { - 0% { - width: 90%; - height: 4px; - } - 3% { - width: 91%; - height: 7px; - } - 100% { - width: 96%; - height: 7px; - } - } - -@-moz-keyframes v-progress-wait { - 0% { - width: 90%; - height: 4px; - } - 3% { - width: 91%; - height: 7px; - } - 100% { - width: 96%; - height: 7px; - } - } - -@keyframes v-progress-wait { - 0% { - width: 90%; - height: 4px; - } - 3% { - width: 91%; - height: 7px; - } - 100% { - width: 96%; - height: 7px; - } - } - -@-webkit-keyframes v-progress-wait-pulse { - 0% { - opacity: 1; - } - 50% { - opacity: 0.1; - } - 100% { - opacity: 1; - } - } - -@-moz-keyframes v-progress-wait-pulse { - 0% { - opacity: 1; - } - 50% { - opacity: 0.1; - } - 100% { - opacity: 1; - } - } - -@keyframes v-progress-wait-pulse { - 0% { - opacity: 1; - } - 50% { - opacity: 0.1; - } - 100% { - opacity: 1; - } - } - -/** - * Outputs the context menu selectors and styles, which is used by Table and Tree for instance. - * - * @requires {mixin} valo-selection-item-style - * @requires {mixin} valo-selection-item-selected-style - */ - -/** - * The background color for overlay elements. - * - * @type color - * @group overlay - */ - -.v-shadow, .v-shadow-window { - display: none; -} - -.v-ie8 .v-shadow, .v-ie8 .v-shadow-window { - display: block; -} - -.v-ie8 .v-shadow .top, .v-ie8 .v-shadow-window .top { - position: absolute; - top: -6px; - right: 10px; - bottom: 6px; - left: -10px; - background: black; - filter: alpha(opacity=5) progid:DXImageTransform.Microsoft.blur(pixelradius=10, makeShadow=false); -} - -.v-ie8 .v-shadow .top-left, .v-ie8 .v-shadow-window .top-left { - position: absolute; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; - background: black; - filter: alpha(opacity=9) progid:DXImageTransform.Microsoft.blur(pixelradius=0, makeShadow=false); -} - -/** - * The backgound color for tooltips. - * - * @type color - * @group tooltip - */ - -/** - * - * - * @param {string} $primary-stylename (v-absolutelayout) - - * - * @group absolutelayout - */ - -/** - * Outputs the selectors and properties for the Accordion component. - * - * @param {string} $primary-stylename (v-accordion) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * @group accordion - */ - -/** - * Outputs the selectors and properties for the Button component. - * - * @param {string} $primary-stylename (v-button) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group button - */ - -/** - * A list of colors for custom event colors. Can be an empty list of you don't - * need any custom event colors. - * - * @example javascript - * // Java code - * // 'event' is an instance of EditableCalendarEvent - * event.setStyleName("color1"); // 1st color in the list - * event.setStyleName("color2"); // 2nd color in the list - * // etc. - * - * @group calendar - */ - -/** - * Outputs the selectors and properties for the CheckBox component. - * - * @param {string} $primary-stylename (v-checkbox) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group checkbox - */ - -/** - * Outputs the global selectors and properties for the ColorPicker component - styles which are - * considered mandatory for the component to work properly. - * - * @param {string} $primary-stylename (v-colorpicker) - the primary style name for the selectors - * - * @group colorpicker - */ - -/** - * Outputs the selectors and properties for the ComboBox component. - * - * @param {string} $primary-stylename (v-filterselect) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group combobox - */ - -/** - * The amount of spacing between different widgets in a component group. - * If null, a computed value is used ($v-border size * -1, or 1px if $v-border size is 0) - * - * @group csslayout - */ - -/** - * - * - * @param {string} $primary-stylename (v-customcomponent) - - * - * @group customcomponent - */ - -/** - * - * - * @param {string} $primary-stylename (v-customlayout) - - * - * @group customlayout - */ - -/** - * Outputs the selectors and properties for the DateField component. - * - * @param {string} $primary-stylename (v-datefield) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group datefield - */ - -/** - * Outputs the styles and selectors for the DragAndDropWrapper component. - * - * @param {string} $primary-stylename (v-ddwrapper) - the primary style name for the selectors - * - * @group drag-n-drop - */ - -/** - * - * - * @param {string} $primary-stylename (v-form) - - * - * @group form - */ - -/** - * Outputs the selectors and properties for the FormLayout component. - * - * @param {string} $primary-stylename (v-formlayout) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group formlayout - */ - -/** - * - * @group table - */ - -@-webkit-keyframes valo-grid-editor-footer-animate-in { - 0% { - margin-top: -37px; - } - } - -@-moz-keyframes valo-grid-editor-footer-animate-in { - 0% { - margin-top: -37px; - } - } - -@keyframes valo-grid-editor-footer-animate-in { - 0% { - margin-top: -37px; - } - } - -@-webkit-keyframes valo-grid-editor-footer-animate-in-alt { - 0% { - margin-bottom: -38px; - } - 100% { - margin-bottom: -1px; - } - } - -@-moz-keyframes valo-grid-editor-footer-animate-in-alt { - 0% { - margin-bottom: -38px; - } - 100% { - margin-bottom: -1px; - } - } - -@keyframes valo-grid-editor-footer-animate-in-alt { - 0% { - margin-bottom: -38px; - } - 100% { - margin-bottom: -1px; - } - } - -/** - * - * - * @param {string} $primary-stylename (v-gridlayout) - - * - * @group gridlayout - */ - -/** - * The font weight for headers. - * - * @group label - */ - -/** - * - * @group link - */ - -/** - * - * - * @param {string} $primary-stylename (v-loginform) - - * - * @group loginform - */ - -/** - * - * - * @param {string} $primary-stylename (v-menubar) - - * @param {bool} $include-additional-styles - - * - * @group menubar - */ - -/** - * - * - * @param {string} $primary-stylename (v-nativebutton) - - * - * @group nativebutton - */ - -/** - * - * - * @param {string} $primary-stylename (v-select) - - * - * @group nativeselect - */ - -/** - * - * @group notification - */ - -/** - * - * - * @param {string} $primary-stylename (v-select-optiongroup) - - * @param {bool} $include-additional-styles - - * - * @group optiongroup - */ - -/** - * - * - * - * @group orderedlayout - */ - -/** - * - * @group panel - */ - -@-webkit-keyframes v-popupview-animate-in { - 0% { - -webkit-transform: scale(0); - } - } - -@-moz-keyframes v-popupview-animate-in { - 0% { - -moz-transform: scale(0); - } - } - -@keyframes v-popupview-animate-in { - 0% { - -webkit-transform: scale(0); - -moz-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); - } - } - -/** - * - * @group progressbar - */ - -/** - * - * @group richtextarea - */ - -/** - * - * @group slider - */ - -/** - * - * - * @param {string} $primary-stylename (v-splitpanel) - - * @param {bool} $include-additional-styles - - * - * @group splitpanel - */ - -/** - * - * @group table - */ - -/** - * Should the tabsheet content changes be animated. - * - * @group tabsheet - */ - -/** - * The background color for text fields. - * @group textfield - */ - -/** - * Outputs the selectors and properties for the TextArea component. - * - * @param {string} $primary-stylename (v-textarea) - the primary style name for the selectors - * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component - * - * @group textarea - */ - -/** - * - * @group tree - */ - -/** - * - * - * @param {string} $primary-stylename (v-treetable) - - * - * @group treetable - */ - -/** - * - * - * @param {string} $primary-stylename (v-select-twincol) - - * - * @group twin-column-select - */ - -/** - * - * - * @param {string} $primary-stylename (v-upload) - - * - * @group upload - */ - -/** - * - */ - -/** - * @group window - */ - -@-webkit-keyframes valo-modal-window-indication { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - -@-moz-keyframes valo-modal-window-indication { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - -@keyframes valo-modal-window-indication { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } - } - -@-webkit-keyframes valo-animate-out-scale-down-fade { - 100% { - -webkit-transform: scale(0.8); - opacity: 0; - } - } - -@-moz-keyframes valo-animate-out-scale-down-fade { - 100% { - -moz-transform: scale(0.8); - opacity: 0; - } - } - -@keyframes valo-animate-out-scale-down-fade { - 100% { - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); - opacity: 0; - } - } - -/** - * @group valo-menu - */ - -.v-vaadin-version:after { - content: "7.7.10"; -} - -.v-widget { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - vertical-align: top; - text-align: left; - white-space: normal; -} - -.v-generated-body { - overflow: hidden; - margin: 0; - padding: 0; - border: 0; -} - -.v-app { - height: 100%; - -webkit-tap-highlight-color: transparent; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.v-app input[type="text"], .v-app .v-slot > .v-caption, .v-app .v-gridlayout-slot > .v-caption, .v-app .v-has-caption > .v-caption, .v-app .v-formlayout-captioncell > .v-caption, .v-app .v-csslayout > .v-caption { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.v-app input::-ms-clear { - display: none; -} - -.v-ui { - position: relative; -} - -.v-ui.v-ui-embedded { - margin-top: -1px; - border-top: 1px solid transparent; -} - -.v-ui:focus { - outline: none; -} - -.v-overlay-container { - width: 0; - height: 0; -} - -.v-drag-element { - z-index: 60000; - position: absolute !important; - cursor: default; -} - -.v-clip { - overflow: hidden; -} - -.v-scrollable { - overflow: auto; -} - -.v-scrollable > .v-widget { - vertical-align: middle; - overflow: hidden; -} - -.v-ios.v-webkit .v-scrollable { - -webkit-overflow-scrolling: touch; -} - -.v-ios5.v-webkit .v-scrollable { - -webkit-overflow-scrolling: none; -} - -.v-webkit.v-ios .v-browserframe { - -webkit-overflow-scrolling: touch; - overflow: auto; -} - -.v-assistive-device-only { - position: absolute; - top: -2000px; - left: -2000px; - width: 10px; - overflow: hidden; -} - -.v-icon { - cursor: inherit; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.v-icon, .v-errorindicator, .v-required-field-indicator { - display: inline-block; - line-height: inherit; -} - -.v-caption { - display: inline-block; - white-space: nowrap; - line-height: 1.55; -} - -.v-captiontext { - display: inline-block; - line-height: inherit; -} - -div.v-layout.v-horizontal.v-widget { - white-space: nowrap; -} - -.v-layout.v-vertical > .v-expand, .v-layout.v-horizontal > .v-expand { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - height: 100%; -} - -.v-slot, .v-spacing { - display: inline-block; - white-space: nowrap; - vertical-align: top; -} - -.v-vertical > .v-slot:after { - display: inline-block; - clear: both; - width: 0; - height: 0; - overflow: hidden; -} - -.v-vertical > .v-slot, .v-vertical > .v-expand > .v-slot { - display: block; - clear: both; -} - -.v-horizontal > .v-slot, .v-horizontal > .v-expand > .v-slot { - height: 100%; -} - -.v-horizontal > .v-expand > .v-slot { - position: relative; -} - -.v-vertical > .v-spacing, .v-vertical > .v-expand > .v-spacing { - width: 0 !important; - display: block; - clear: both; -} - -.v-horizontal > .v-spacing, .v-horizontal > .v-expand > .v-spacing { - height: 0 !important; -} - -.v-align-middle:before, .v-align-bottom:before, .v-expand > .v-align-middle:before, .v-expand > .v-align-bottom:before { - content: ""; - display: inline-block; - height: 100%; - vertical-align: middle; - width: 0; -} - -.v-align-middle, .v-align-bottom { - white-space: nowrap; -} - -.v-align-middle > .v-widget, .v-align-bottom > .v-widget { - display: inline-block; -} - -.v-align-middle, .v-align-middle > .v-widget { - vertical-align: middle; -} - -.v-align-bottom, .v-align-bottom > .v-widget { - vertical-align: bottom; -} - -.v-align-center { - text-align: center; -} - -.v-align-center > .v-widget { - margin-left: auto; - margin-right: auto; -} - -.v-align-right { - text-align: right; -} - -.v-align-right > .v-widget { - margin-left: auto; -} - -.v-has-caption, .v-has-caption > .v-caption { - display: inline-block; -} - -.v-caption-on-left, .v-caption-on-right { - white-space: nowrap; -} - -.v-caption-on-top > .v-caption, .v-caption-on-bottom > .v-caption { - display: block; -} - -.v-caption-on-left > .v-caption { - padding-right: 0.5em; -} - -.v-caption-on-left > .v-widget, .v-caption-on-right > .v-widget { - display: inline-block; -} - -.v-has-caption.v-has-width > .v-widget { - width: 100% !important; -} - -.v-has-caption.v-has-height > .v-widget { - height: 100% !important; -} - -.v-gridlayout { - position: relative; -} - -.v-gridlayout-slot { - position: absolute; - line-height: 1.55; -} - -.v-gridlayout-spacing-on { - overflow: hidden; -} - -.v-gridlayout-spacing, .v-gridlayout-spacing-off { - padding-left: 0; - padding-top: 0; -} - -.v-gridlayout-spacing-off { - overflow: hidden; -} - -.v-calendar-month-day-scrollable { - overflow-y: scroll; -} - -.v-calendar-week-wrapper { - position: relative; - overflow: hidden; -} - -.v-calendar-current-time { - position: absolute; - left: 0; - width: 100%; - height: 1px; - background: red; - z-index: 2; -} - -.v-calendar-event-resizetop, .v-calendar-event-resizebottom { - position: absolute; - height: 5%; - min-height: 3px; - width: 100%; - z-index: 1; -} - -.v-calendar-event-resizetop { - cursor: row-resize; - top: 0; -} - -.v-calendar-event-resizebottom { - cursor: row-resize; - bottom: 0; -} - -.v-calendar-header-month td:first-child { - padding-left: 20px; -} - -.v-calendar-month-sizedheight .v-calendar-month-day { - height: 100px; -} - -.v-calendar-month-sizedwidth .v-calendar-month-day { - width: 100px; -} - -.v-calendar-header-month-Hsized .v-calendar-header-day { - width: 101px; -} - -.v-calendar-header-month-Hsized td:first-child { - padding-left: 21px; -} - -.v-calendar-header-day-Hsized { - width: 200px; -} - -.v-calendar-week-numbers-Vsized .v-calendar-week-number { - height: 100px; - line-height: 100px; -} - -.v-calendar-week-wrapper-Vsized { - height: 400px; - overflow-x: hidden !important; -} - -.v-calendar-times-Vsized .v-calendar-time { - height: 38px; -} - -.v-calendar-times-Hsized .v-calendar-time { - width: 42px; -} - -.v-calendar-day-times-Vsized .v-datecellslot, .v-calendar-day-times-Vsized .v-datecellslot-even { - height: 18px; -} - -.v-calendar-day-times-Hsized, .v-calendar-day-times-Hsized .v-datecellslot, .v-calendar-day-times-Hsized .v-datecellslot-even { - width: 200px; -} - -.v-colorpicker-popup.v-window { - min-width: 220px !important; -} - -.v-colorpicker-gradient-container { - overflow: visible !important; -} - -.v-colorpicker-gradient-clicklayer { - opacity: 0; - filter: alpha(opacity=0) ; -} - -.rgb-gradient .v-colorpicker-gradient-background { - background: url(../valo/components/img/colorpicker/gradient2.png); -} - -.hsv-gradient .v-colorpicker-gradient-foreground { - background: url(../valo/components/img/colorpicker/gradient.png); -} - -.v-colorpicker-gradient-higherbox:before { - content: ""; - width: 11px; - height: 11px; - border-radius: 7px; - border: 1px solid #fff; - -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3); - box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3); - position: absolute; - bottom: -6px; - left: -6px; -} - -.v-colorpicker-popup .v-slider.v-slider-red:before { - background-color: red; -} - -.v-colorpicker-popup .v-slider.v-slider-green:before { - background-color: green; -} - -.v-colorpicker-popup .v-slider.v-slider-blue:before { - background-color: blue; -} - -.v-colorpicker-popup .v-slider.hue-slider:before { - background: url(../valo/components/img/colorpicker/slider_hue_bg.png); -} - -.v-colorpicker-popup input.v-textfield-dark { - color: #fff; -} - -.v-colorpicker-popup input.v-textfield-light { - color: #000; -} - -.v-colorpicker-grid { - height: 319px; -} - -.v-colorpicker-popup .colorselect td { - line-height: 15px; -} - -.v-table-header table, .v-table-footer table, .v-table-table { - border-spacing: 0; - border-collapse: separate; - margin: 0; - padding: 0; - border: 0; - line-height: 1.55; -} - -.v-table-resizer, .v-table-sort-indicator { - float: right; -} - -.v-table-caption-container-align-center { - text-align: center; -} - -.v-table-caption-container-align-right { - text-align: right; -} - -.v-table-header td, .v-table-footer td, .v-table-cell-content { - padding: 0; -} - -.v-table-sort-indicator { - width: 0; -} - -.v-tabsheet-hidetabs > .v-tabsheet-tabcontainer, .v-tabsheet-spacertd, .v-disabled .v-tabsheet-scroller, .v-tabsheet .v-disabled .v-tabsheet-caption-close { - display: none; -} - -.v-tabsheet { - overflow: visible !important; - position: relative; -} - -.v-tabsheet-tabcontainer table, .v-tabsheet-tabcontainer tbody, .v-tabsheet-tabcontainer tr { - display: inline-block; - border-spacing: 0; - border-collapse: collapse; - vertical-align: top; -} - -.v-tabsheet-tabcontainer td { - display: inline-block; - padding: 0; -} - -.v-tabsheet-tabs { - white-space: nowrap; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.v-tabsheet-content { - position: relative; -} - -.v-tabsheet-content > div > .v-scrollable > .v-margin-top { - padding-top: 12px; -} - -.v-tabsheet-content > div > .v-scrollable > .v-margin-right { - padding-right: 12px; -} - -.v-tabsheet-content > div > .v-scrollable > .v-margin-bottom { - padding-bottom: 12px; -} - -.v-tabsheet-content > div > .v-scrollable > .v-margin-left { - padding-left: 12px; -} - -.v-splitpanel-vertical, .v-splitpanel-horizontal { - overflow: hidden; - white-space: nowrap; -} - -.v-splitpanel-hsplitter { - z-index: 100; - cursor: e-resize; - cursor: col-resize; -} - -.v-splitpanel-vsplitter { - z-index: 100; - cursor: s-resize; - cursor: row-resize; -} - -.v-splitpanel-hsplitter:after, .v-splitpanel-vsplitter:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.v-splitpanel-hsplitter div, .v-splitpanel-vsplitter div { - width: inherit; - height: inherit; - overflow: hidden; - position: relative; -} - -.v-splitpanel-hsplitter div:before, .v-splitpanel-vsplitter div:before { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.v-disabled [class$="splitter"] div { - cursor: default; -} - -.v-disabled [class$="splitter"] div:before { - display: none; -} - -.v-splitpanel-horizontal > div > .v-splitpanel-second-container { - position: static !important; - display: inline-block; - vertical-align: top; -} - -.v-splitpanel-horizontal > div > .v-splitpanel-first-container { - display: inline-block; - vertical-align: top; -} - -.mytheme.v-app, .mytheme.v-app-loading { - font: 300 16px/1.55 "Open Sans", sans-serif; - color: #464646; - background-color: #fafafa; - cursor: default; -} - -.mytheme .v-app-loading { - width: 100%; - height: 100%; - background: #fafafa; -} - -.mytheme .v-app-loading:before { - content: ""; - position: fixed; - z-index: 100; - top: 45%; - left: 50%; - width: 28px; - height: 28px; - padding: 9px; - margin-top: -24px; - margin-left: -24px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%; - border-radius: 4px; -} - -.mytheme .v-loading-indicator { - position: fixed !important; - z-index: 99999; - left: 0; - right: auto; - top: 0; - width: 50%; - opacity: 1; - height: 4px; - background-color: #197de1; - pointer-events: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - -webkit-animation: v-progress-start 1000ms 200ms both; - -moz-animation: v-progress-start 1000ms 200ms both; - animation: v-progress-start 1000ms 200ms both; -} - -.mytheme .v-loading-indicator[style*="none"] { - display: block !important; - width: 100% !important; - opacity: 0; - -webkit-animation: none; - -moz-animation: none; - animation: none; - -webkit-transition: opacity 500ms 300ms, width 300ms; - -moz-transition: opacity 500ms 300ms, width 300ms; - transition: opacity 500ms 300ms, width 300ms; -} - -.mytheme .v-loading-indicator-delay { - width: 90%; - -webkit-animation: v-progress-delay 3.8s forwards; - -moz-animation: v-progress-delay 3.8s forwards; - animation: v-progress-delay 3.8s forwards; -} - -.v-ff .mytheme .v-loading-indicator-delay { - width: 50%; -} - -.mytheme .v-loading-indicator-wait { - width: 96%; - -webkit-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards; - -moz-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards; - animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards; -} - -.v-ff .mytheme .v-loading-indicator-wait { - width: 90%; -} - -.v-ie8 .mytheme .v-loading-indicator, .v-ie8 .mytheme .v-loading-indicator-delay, .v-ie8 .mytheme .v-loading-indicator-wait, .v-ie9 .mytheme .v-loading-indicator, .v-ie9 .mytheme .v-loading-indicator-delay, .v-ie9 .mytheme .v-loading-indicator-wait { - width: 28px !important; - height: 28px; - padding: 9px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%; - border-radius: 4px; - top: 9px; - right: 9px; - left: auto; - filter: alpha(opacity=50); -} - -.v-ie8 .mytheme .v-loading-indicator[style*="none"], .v-ie8 .mytheme .v-loading-indicator-delay[style*="none"], .v-ie8 .mytheme .v-loading-indicator-wait[style*="none"], .v-ie9 .mytheme .v-loading-indicator[style*="none"], .v-ie9 .mytheme .v-loading-indicator-delay[style*="none"], .v-ie9 .mytheme .v-loading-indicator-wait[style*="none"] { - display: none !important; -} - -.v-ie8 .mytheme .v-loading-indicator-wait, .v-ie9 .mytheme .v-loading-indicator-wait { - filter: alpha(opacity=100); -} - -.mytheme .v-scrollable:focus { - outline: none; -} - -.mytheme img.v-icon { - vertical-align: middle; -} - -.mytheme .v-caption { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; -} - -.mytheme .v-caption-on-left .v-caption, .mytheme .v-caption-on-right .v-caption { - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-icon + .v-captiontext, .mytheme .v-icon + span { - margin-left: 7px; -} - -.mytheme .v-icon + .v-captiontext:empty, .mytheme .v-icon + span:empty { - margin-left: 0; -} - -.mytheme .v-errorindicator { - color: #ed473b; - font-weight: 600; - width: 19px; - text-align: center; -} - -.mytheme .v-errorindicator:before { - content: "!"; -} - -.mytheme .v-required-field-indicator { - color: #ed473b; - padding: 0 0.2em; -} - -.mytheme select { - font: inherit; - font-weight: 400; - line-height: inherit; - padding: 5px; - margin: 0; - border-radius: 4px; - border: 1px solid #c5c5c5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - color: #464646; -} - -.mytheme select:focus { - outline: none; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme button { - font: inherit; - font-weight: 400; - line-height: 1.55; -} - -.mytheme a { - cursor: pointer; - color: #197de1; - text-decoration: underline; - font-weight: inherit; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme a:hover { - color: #4396ea; -} - -.mytheme a.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-disabled { - cursor: default !important; -} - -.mytheme .v-drag-element { - background: #fafafa; - color: #464646; - -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - border-radius: 4px; - overflow: hidden; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-tooltip { - background-color: #323232; - background-color: rgba(50, 50, 50, 0.9); - -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - color: white; - padding: 5px 9px; - border-radius: 3px; - max-width: 35em; - overflow: hidden !important; - font-size: 14px; -} - -.mytheme .v-tooltip div[style*="width"] { - width: auto !important; -} - -.mytheme .v-tooltip .v-errormessage { - background-color: white; - background-color: #fff; - color: #ed473b; - margin: -5px -9px; - padding: 5px 9px; - max-height: 10em; - overflow: auto; - font-weight: 400; -} - -.mytheme .v-tooltip .v-errormessage h2:only-child { - font: inherit; - line-height: inherit; -} - -.mytheme .v-tooltip .v-tooltip-text { - max-height: 10em; - overflow: auto; - margin-top: 10px; -} - -.mytheme .v-tooltip .v-errormessage[aria-hidden="true"] + .v-tooltip-text { - margin-top: 0; -} - -.mytheme .v-tooltip h1, .mytheme .v-tooltip h2, .mytheme .v-tooltip h3, .mytheme .v-tooltip h4 { - color: inherit; -} - -.mytheme .v-contextmenu { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - padding: 4px 4px; -} - -.mytheme .v-contextmenu[class*="animate-in"] { - -webkit-animation: valo-overlay-animate-in 120ms; - -moz-animation: valo-overlay-animate-in 120ms; - animation: valo-overlay-animate-in 120ms; -} - -.mytheme .v-contextmenu[class*="animate-out"] { - -webkit-animation: valo-animate-out-fade 120ms; - -moz-animation: valo-animate-out-fade 120ms; - animation: valo-animate-out-fade 120ms; -} - -.mytheme .v-contextmenu table { - border-spacing: 0; -} - -.mytheme .v-contextmenu .gwt-MenuItem { - cursor: pointer; - line-height: 27px; - padding: 0 20px 0 10px; - border-radius: 3px; - font-weight: 400; - white-space: nowrap; - position: relative; - display: block; -} - -.mytheme .v-contextmenu .gwt-MenuItem:active:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: #0957a6; - opacity: 0.15; - filter: alpha(opacity=15.0) ; - pointer-events: none; - border-radius: inherit; -} - -.mytheme .v-contextmenu .gwt-MenuItem .v-icon { - max-height: 27px; - margin-right: 5px; - min-width: 1em; -} - -.mytheme .v-contextmenu .gwt-MenuItem-selected { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-reconnect-dialog { - color: white; - top: 12px; - right: 12px; - max-width: 100%; - border-radius: 0; - -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - padding: 12px 15px; - background-color: #444; - background-color: rgba(68, 68, 68, 0.9); - line-height: 22px; - text-align: center; -} - -.mytheme .v-reconnect-dialog .text { - display: inline-block; - padding-left: 10px; -} - -.mytheme .v-reconnect-dialog .spinner { - height: 24px !important; - width: 24px !important; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 2px solid rgba(25, 125, 225, 0.2); - border-top-color: #197de1; - border-right-color: #197de1; - border-radius: 100%; - -webkit-animation: v-rotate-360 500ms infinite linear; - -moz-animation: v-rotate-360 500ms infinite linear; - animation: v-rotate-360 500ms infinite linear; - pointer-events: none; - display: none; - vertical-align: middle; -} - -.v-ie8 .mytheme .v-reconnect-dialog .spinner, .v-ie9 .mytheme .v-reconnect-dialog .spinner { - border: none; - border-radius: 4px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%; - background-size: 80%; -} - -.v-ie8 .mytheme .v-reconnect-dialog .spinner { - min-width: 30px; - min-height: 30px; -} - -.mytheme .v-reconnect-dialog.active .spinner { - display: inline-block; -} - -.mytheme .v-absolutelayout-wrapper { - position: absolute; -} - -.mytheme .v-absolutelayout-margin, .mytheme .v-absolutelayout-canvas { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-absolutelayout.v-has-height > div, .mytheme .v-absolutelayout.v-has-height .v-absolutelayout-margin { - height: 100%; -} - -.mytheme .v-absolutelayout.v-has-height > div, .mytheme .v-absolutelayout.v-has-width .v-absolutelayout-margin { - width: 100%; -} - -.mytheme .v-margin-top { - padding-top: 37px; -} - -.mytheme .v-margin-right { - padding-right: 37px; -} - -.mytheme .v-margin-bottom { - padding-bottom: 37px; -} - -.mytheme .v-margin-left { - padding-left: 37px; -} - -.mytheme .v-spacing { - width: 12px; - height: 12px; -} - -.mytheme .v-verticallayout-well, .mytheme .v-horizontallayout-well { - background: #f5f5f5; - color: #454545; - -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - border-radius: 4px; - border: 1px solid #c5c5c5; -} - -.mytheme .v-verticallayout-well > div > [class*="-caption"], .mytheme .v-horizontallayout-well > div > [class*="-caption"] { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-verticallayout-well > .v-margin-top, .mytheme .v-horizontallayout-well > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-verticallayout-well > .v-margin-right, .mytheme .v-horizontallayout-well > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-verticallayout-well > .v-margin-bottom, .mytheme .v-horizontallayout-well > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-verticallayout-well > .v-margin-left, .mytheme .v-horizontallayout-well > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-verticallayout-card, .mytheme .v-horizontallayout-card { - background: white; - color: #474747; - border-radius: 4px; - border: 1px solid #d5d5d5; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); -} - -.mytheme .v-verticallayout-card > .v-margin-top, .mytheme .v-horizontallayout-card > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-verticallayout-card > .v-margin-right, .mytheme .v-horizontallayout-card > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-verticallayout-card > .v-margin-bottom, .mytheme .v-horizontallayout-card > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-verticallayout-card > .v-margin-left, .mytheme .v-horizontallayout-card > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-horizontallayout-wrapping { - white-space: normal !important; -} - -.mytheme .v-horizontallayout-wrapping > .v-spacing + .v-slot, .mytheme .v-horizontallayout-wrapping > .v-slot:first-child { - margin-bottom: 12px; -} - -.mytheme .v-horizontallayout-wrapping > .v-slot:first-child:last-child { - margin-bottom: 0; -} - -.mytheme .v-button { - position: relative; - text-align: center; - white-space: nowrap; - outline: none; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-button:before { - content: ""; - display: inline-block; - width: 0; - height: 100%; - vertical-align: middle; -} - -.mytheme .v-button > div { - vertical-align: middle; -} - -.v-sa .mytheme .v-button:before { - height: 110%; -} - -.v-ff .mytheme .v-button:before { - height: 107%; -} - -.v-ie .mytheme .v-button:before { - margin-top: 4px; -} - -.mytheme .v-button:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; -} - -.mytheme .v-button:focus:after { - -webkit-transition: none; - -moz-transition: none; - transition: none; -} - -.mytheme .v-button.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-button.v-disabled:after { - display: none; -} - -.mytheme .v-button:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-button:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-button:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-button-primary { - height: 37px; - padding: 0 16px; - color: #ecf2f8; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #1362b1; - border-top-color: #156ab3; - border-bottom-color: #1156a8; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); - padding: 0 19px; - font-weight: bold; - min-width: 81px; -} - -.mytheme .v-button-primary:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-primary:hover:after { - background-color: rgba(90, 163, 237, 0.1); -} - -.mytheme .v-button-primary:focus:after { - border: inherit; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-button-primary:active:after { - background-color: rgba(2, 62, 122, 0.2); -} - -.v-ie8 .mytheme .v-button-primary { - min-width: 43px; -} - -.mytheme .v-button-friendly { - height: 37px; - padding: 0 16px; - color: #eaf4e9; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #227719; - border-top-color: #257d1a; - border-bottom-color: #1e6b15; - background-color: #2c9720; - background-image: -webkit-linear-gradient(top, #2f9f22 2%, #26881b 98%); - background-image: linear-gradient(to bottom,#2f9f22 2%, #26881b 98%); - -webkit-box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-button-friendly:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-friendly:hover:after { - background-color: rgba(65, 211, 48, 0.1); -} - -.mytheme .v-button-friendly:focus:after { - border: inherit; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-button-friendly:active:after { - background-color: rgba(14, 86, 6, 0.2); -} - -.mytheme .v-button-danger { - height: 37px; - padding: 0 16px; - color: #f9f0ef; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #bb382e; - border-top-color: #bc3c31; - border-bottom-color: #b13028; - background-color: #ed473b; - background-image: -webkit-linear-gradient(top, #ee4c3f 2%, #e13e33 98%); - background-image: linear-gradient(to bottom,#ee4c3f 2%, #e13e33 98%); - -webkit-box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-button-danger:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-danger:hover:after { - background-color: rgba(243, 137, 129, 0.1); -} - -.mytheme .v-button-danger:focus:after { - border: inherit; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-button-danger:active:after { - background-color: rgba(146, 12, 2, 0.2); -} - -.mytheme .v-button-borderless { - border: none; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent; - color: inherit; -} - -.mytheme .v-button-borderless:hover:after { - background: transparent; -} - -.mytheme .v-button-borderless:active { - opacity: 0.7; - filter: alpha(opacity=70) ; -} - -.mytheme .v-button-borderless:active:after { - background: transparent; -} - -.mytheme .v-button-borderless-colored { - border: none; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent; - color: #197de1; -} - -.mytheme .v-button-borderless-colored:hover { - color: #4396ea; -} - -.mytheme .v-button-borderless-colored:hover:after { - background: transparent; -} - -.mytheme .v-button-borderless-colored:active { - opacity: 0.7; - filter: alpha(opacity=70) ; -} - -.mytheme .v-button-borderless-colored:active:after { - background: transparent; -} - -.mytheme .v-button-quiet { - visibility: hidden; -} - -.mytheme .v-button-quiet:focus, .mytheme .v-button-quiet:hover { - visibility: visible; -} - -.mytheme .v-button-quiet [class*="wrap"] { - visibility: visible; -} - -.mytheme .v-button-quiet [class*="caption"] { - display: inline-block; -} - -.mytheme .v-button-link { - border: none; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent; - color: inherit; - cursor: pointer; - color: #197de1; - text-decoration: underline; - font-weight: inherit; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-button-link:hover:after { - background: transparent; -} - -.mytheme .v-button-link:active { - opacity: 0.7; - filter: alpha(opacity=70) ; -} - -.mytheme .v-button-link:active:after { - background: transparent; -} - -.mytheme .v-button-link:hover { - color: #4396ea; -} - -.mytheme .v-button-link.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-button-tiny { - height: 28px; - padding: 0 13px; - - - font-size: 12px; - - border-radius: 4px; -} - -.mytheme .v-button-tiny:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-small { - height: 31px; - padding: 0 14px; - - - font-size: 14px; - - border-radius: 4px; -} - -.mytheme .v-button-small:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-large { - height: 44px; - padding: 0 19px; - - - font-size: 20px; - - border-radius: 4px; -} - -.mytheme .v-button-large:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-huge { - height: 59px; - padding: 0 26px; - - - font-size: 26px; - - border-radius: 4px; -} - -.mytheme .v-button-huge:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-button-icon-align-right [class*="wrap"] { - display: inline-block; -} - -.mytheme .v-button-icon-align-right .v-icon { - float: right; - margin-left: 13px; -} - -.mytheme .v-button-icon-align-right .v-icon + span:not(:empty) { - margin-left: 0; -} - -.mytheme .v-button-icon-align-top { - height: auto; - padding-top: 5px; - padding-bottom: 5px; -} - -.mytheme .v-button-icon-align-top [class*="wrap"] { - display: inline-block; -} - -.mytheme .v-button-icon-align-top .v-icon { - display: block; - margin-left: auto; - margin-right: auto; -} - -.mytheme .v-button-icon-align-top .v-icon + span:not(:empty) { - margin-top: 7px; - margin-left: 0; -} - -.mytheme .v-button-icon-only { - width: 37px; - padding: 0; -} - -.mytheme .v-button-icon-only.v-button-tiny { - width: 28px; -} - -.mytheme .v-button-icon-only.v-button-small { - width: 31px; -} - -.mytheme .v-button-icon-only.v-button-large { - width: 44px; -} - -.mytheme .v-button-icon-only.v-button-huge { - width: 59px; -} - -.mytheme .v-button-icon-only .v-button-caption { - display: none; -} - -.mytheme .v-checkbox { - position: relative; - line-height: 19px; - white-space: nowrap; -} - -.mytheme .v-checkbox.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-checkbox { - padding-left: 25px; -} - -:root .mytheme .v-checkbox label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-checkbox > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-checkbox > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-checkbox > input ~ label:before, :root .mytheme .v-checkbox > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 19px; - height: 19px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 13px; - text-align: center; -} - -:root .mytheme .v-checkbox > input ~ label:before { - height: 18.5px; - padding: 0 9px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 19px; -} - -:root .mytheme .v-checkbox > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-checkbox > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-checkbox > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-checkbox > .v-icon, .mytheme .v-checkbox > label .v-icon { - margin: 0 6px 0 3px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-checkbox.v-disabled > label, .mytheme .v-checkbox.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-checkbox.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-checkbox.v-readonly > label, .mytheme .v-checkbox.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-checkbox.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-checkbox.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-checkbox-small { - position: relative; - line-height: 16px; - white-space: nowrap; - font-size: 14px; -} - -.mytheme .v-checkbox-small.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-checkbox-small { - padding-left: 21px; -} - -:root .mytheme .v-checkbox-small label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-checkbox-small > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-checkbox-small > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-checkbox-small > input ~ label:before, :root .mytheme .v-checkbox-small > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 16px; - height: 16px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 11px; - text-align: center; -} - -:root .mytheme .v-checkbox-small > input ~ label:before { - height: 15.5px; - padding: 0 7px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 16px; -} - -:root .mytheme .v-checkbox-small > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-checkbox-small > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-checkbox-small > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-checkbox-small > .v-icon, .mytheme .v-checkbox-small > label .v-icon { - margin: 0 5px 0 3px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-checkbox-small.v-disabled > label, .mytheme .v-checkbox-small.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-checkbox-small.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox-small.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-checkbox-small.v-readonly > label, .mytheme .v-checkbox-small.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-checkbox-small.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox-small.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-checkbox-small.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-checkbox-large { - position: relative; - line-height: 22px; - white-space: nowrap; - font-size: 20px; -} - -.mytheme .v-checkbox-large.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-checkbox-large { - padding-left: 29px; -} - -:root .mytheme .v-checkbox-large label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-checkbox-large > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-checkbox-large > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-checkbox-large > input ~ label:before, :root .mytheme .v-checkbox-large > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 22px; - height: 22px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 15px; - text-align: center; -} - -:root .mytheme .v-checkbox-large > input ~ label:before { - height: 22px; - padding: 0 10px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 22px; -} - -:root .mytheme .v-checkbox-large > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-checkbox-large > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-checkbox-large > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-checkbox-large > .v-icon, .mytheme .v-checkbox-large > label .v-icon { - margin: 0 7px 0 4px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-checkbox-large.v-disabled > label, .mytheme .v-checkbox-large.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-checkbox-large.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox-large.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-checkbox-large.v-readonly > label, .mytheme .v-checkbox-large.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-checkbox-large.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-checkbox-large.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-checkbox-large.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect { - position: relative; - width: 185px; - height: 37px; - border-radius: 4px; - white-space: nowrap; -} - -.mytheme .v-filterselect [class*="input"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 4px; - padding: 4px 9px; - border: 1px solid #c5c5c5; - background: white; - color: #474747; - -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 100% !important; - height: 100%; - padding-right: 38px; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-filterselect [class*="input"], .v-ie9 .mytheme .v-filterselect [class*="input"] { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-filterselect [class*="input"].v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect [class*="input"]:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-filterselect [class*="input"][class*="prompt"] { - color: #a3a3a3; -} - -.mytheme .v-filterselect .v-icon + [class*="input"] { - padding-left: 37px; -} - -.mytheme .v-filterselect img.v-icon { - max-height: 37px; - margin-left: 9px; -} - -.mytheme .v-filterselect span.v-icon { - color: #474747; - width: 37px; - line-height: 1; - padding-top: 0.12em; -} - -.mytheme .v-filterselect[class*="prompt"] > [class*="input"] { - color: #a3a3a3; -} - -.mytheme .v-filterselect [class$="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - position: absolute; - width: 37px; - top: 1px; - right: 1px; - bottom: 1px; - border-left: 1px solid #e4e4e4; - color: #a3a3a3; - border-radius: 0 3px 3px 0; -} - -.v-ie8 .mytheme .v-filterselect [class$="button"] { - background-color: white; -} - -.mytheme .v-filterselect [class$="button"]:before { - font-family: ThemeIcons; - content: "\f078"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - position: absolute; - width: 37px; - text-align: center; - top: 50%; - line-height: 1; - margin-top: -0.47em; -} - -.mytheme .v-filterselect [class$="button"]:hover:before { - color: #474747; -} - -.mytheme .v-filterselect [class$="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; - background-color: rgba(128, 128, 128, 0.2); -} - -.mytheme .v-filterselect.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect.v-disabled [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect.v-disabled [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect.v-readonly [class*="input"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect.v-readonly [class*="input"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-filterselect.v-readonly [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect.v-readonly [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect .v-icon { - position: absolute; - pointer-events: none; -} - -.mytheme .v-filterselect-error .v-filterselect-input { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-filterselect-error .v-filterselect-button { - color: #ed473b; - border-color: #ed473b; -} - -.mytheme .v-filterselect-suggestpopup { - margin-top: 5px !important; -} - -.mytheme .v-filterselect-suggestpopup[class*="animate-in"] { - -webkit-animation: valo-overlay-animate-in 120ms; - -moz-animation: valo-overlay-animate-in 120ms; - animation: valo-overlay-animate-in 120ms; -} - -.mytheme .v-filterselect-suggestpopup [class$="suggestmenu"] { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - padding: 4px 4px; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - position: relative; - z-index: 1; - display: block; -} - -.mytheme .v-filterselect-suggestpopup table, .mytheme .v-filterselect-suggestpopup tbody, .mytheme .v-filterselect-suggestpopup tr, .mytheme .v-filterselect-suggestpopup td { - display: block; - width: 100%; - overflow-y: hidden; - float: left; - clear: both; -} - -.mytheme .v-filterselect-suggestpopup .gwt-MenuItem { - cursor: pointer; - line-height: 27px; - padding: 0 20px 0 10px; - border-radius: 3px; - font-weight: 400; - white-space: nowrap; - position: relative; - height: 27px; - box-sizing: border-box; - text-overflow: ellipsis; - overflow-x: hidden; -} - -.mytheme .v-filterselect-suggestpopup .gwt-MenuItem:active:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: #0957a6; - opacity: 0.15; - filter: alpha(opacity=15.0) ; - pointer-events: none; - border-radius: inherit; -} - -.mytheme .v-filterselect-suggestpopup .gwt-MenuItem .v-icon { - max-height: 27px; - margin-right: 5px; - min-width: 1em; -} - -.mytheme .v-filterselect-suggestpopup .gwt-MenuItem-selected { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-filterselect-suggestpopup [class$="status"] { - position: absolute; - right: 4px; - background: rgba(212, 212, 212, 0.9); - color: #3b3b3b; - border-radius: 0 0 4px 4px; - height: 23px; - bottom: -23px; - font-size: 12px; - line-height: 23px; - padding: 0 6px; - cursor: default; - pointer-events: none; - -webkit-animation: valo-animate-in-slide-down 200ms 80ms backwards; - -moz-animation: valo-animate-in-slide-down 200ms 80ms backwards; - animation: valo-animate-in-slide-down 200ms 80ms backwards; -} - -.mytheme .v-filterselect-suggestpopup [class$="status"] > * { - color: #3b3b3b; - text-decoration: none; -} - -.mytheme .v-filterselect-suggestpopup div[class*="page"] { - position: absolute; - z-index: 3; - right: 0; - opacity: 0.2; - filter: alpha(opacity=20) ; - cursor: pointer; - -webkit-transition: all 200ms; - -moz-transition: all 200ms; - transition: all 200ms; - width: 25px; - height: 25px; - line-height: 25px; - text-align: center; - font-family: ThemeIcons; - -webkit-transform: scale(0.8); - -moz-transform: scale(0.8); - -ms-transform: scale(0.8); - -o-transform: scale(0.8); - transform: scale(0.8); - color: #464646; -} - -.mytheme .v-filterselect-suggestpopup div[class*="page"]:after { - content: ""; - position: absolute; - display: block; - border-radius: 50%; -} - -.mytheme .v-filterselect-suggestpopup div[class*="page"]:hover { - opacity: 1; - filter: none ; - background: rgba(250, 250, 250, 0.5); -} - -.mytheme .v-filterselect-suggestpopup div[class*="page"]:hover:after { - top: -10px; - bottom: -10px; - left: -20px; - right: -20px; -} - -.mytheme .v-filterselect-suggestpopup div[class*="page"] span { - display: none; -} - -.mytheme .v-filterselect-suggestpopup:hover div[class*="page"] { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - -o-transform: scale(1); - transform: scale(1); -} - -.mytheme .v-filterselect-suggestpopup div[class*="prev"] { - top: 0; - -webkit-transform-origin: 100% 0%; - -moz-transform-origin: 100% 0%; - -ms-transform-origin: 100% 0%; - -o-transform-origin: 100% 0%; - transform-origin: 100% 0%; - border-radius: 0 4px 0 4px; -} - -.mytheme .v-filterselect-suggestpopup div[class*="prev"]:before { - content: "\f0d8"; -} - -.mytheme .v-filterselect-suggestpopup div[class*="next"] { - bottom: 0; - -webkit-transform-origin: 100% 100%; - -moz-transform-origin: 100% 100%; - -ms-transform-origin: 100% 100%; - -o-transform-origin: 100% 100%; - transform-origin: 100% 100%; - border-radius: 4px 0 4px 0; -} - -.mytheme .v-filterselect-suggestpopup div[class*="next"]:before { - content: "\f0d7"; -} - -.mytheme .v-filterselect-suggestpopup div[class*="-off"] { - display: none; -} - -.mytheme .v-filterselect-no-input { - cursor: pointer; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-filterselect-no-input [class*="input"] { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - cursor: inherit; - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - text-shadow: inherit; - text-overflow: ellipsis; - border-radius: inherit; -} - -.mytheme .v-filterselect-no-input [class*="input"]:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-filterselect-no-input [class$="button"] { - border-left: none !important; -} - -.mytheme .v-filterselect-no-input:hover [class$="button"]:before { - color: inherit; -} - -.mytheme .v-filterselect-borderless .v-filterselect-input { - border: none; - border-radius: 0; - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: inherit; -} - -.mytheme .v-filterselect-borderless .v-filterselect-input:focus { - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect-borderless .v-filterselect-input[class*="prompt"] { - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-borderless .v-filterselect-button { - border: none; - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-borderless.v-filterselect-prompt .v-filterselect-input { - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-align-right input { - text-align: right; -} - -.mytheme .v-filterselect-align-center input { - text-align: center; -} - -.mytheme .v-filterselect-tiny { - height: 28px; - - font-size: 12px; -} - -.mytheme .v-filterselect-tiny [class*="input"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 28px; - - padding: 3px 5px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 100% !important; - height: 100%; - padding-right: 29px; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-filterselect-tiny [class*="input"], .v-ie9 .mytheme .v-filterselect-tiny [class*="input"] { - line-height: 28px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-filterselect-tiny .v-icon + [class*="input"] { - padding-left: 28px; -} - -.mytheme .v-filterselect-tiny img.v-icon { - max-height: 28px; - margin-left: 5px; -} - -.mytheme .v-filterselect-tiny span.v-icon { - - width: 28px; - line-height: 1; - padding-top: 0.12em; -} - -.mytheme .v-filterselect-tiny [class$="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - position: absolute; - width: 28px; - border-radius: 0 4px 4px 0; -} - -.mytheme .v-filterselect-tiny [class$="button"]:before { - font-family: ThemeIcons; - content: "\f078"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - position: absolute; - width: 28px; - text-align: center; - top: 50%; - line-height: 1; - margin-top: -0.47em; -} - -.mytheme .v-filterselect-tiny [class$="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-filterselect-tiny.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-tiny.v-disabled [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-tiny.v-disabled [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-tiny.v-readonly [class*="input"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect-tiny.v-readonly [class*="input"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-filterselect-tiny.v-readonly [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-tiny.v-readonly [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-compact, .mytheme .v-filterselect-small { - height: 31px; - -} - -.mytheme .v-filterselect-compact [class*="input"], .mytheme .v-filterselect-small [class*="input"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 31px; - - padding: 3px 6px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 100% !important; - height: 100%; - padding-right: 32px; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-filterselect-compact [class*="input"], .v-ie9 .mytheme .v-filterselect-compact [class*="input"], .v-ie8 .mytheme .v-filterselect-small [class*="input"], .v-ie9 .mytheme .v-filterselect-small [class*="input"] { - line-height: 31px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-filterselect-compact .v-icon + [class*="input"], .mytheme .v-filterselect-small .v-icon + [class*="input"] { - padding-left: 31px; -} - -.mytheme .v-filterselect-compact img.v-icon, .mytheme .v-filterselect-small img.v-icon { - max-height: 31px; - margin-left: 6px; -} - -.mytheme .v-filterselect-compact span.v-icon, .mytheme .v-filterselect-small span.v-icon { - - width: 31px; - line-height: 1; - padding-top: 0.12em; -} - -.mytheme .v-filterselect-compact [class$="button"], .mytheme .v-filterselect-small [class$="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - position: absolute; - width: 31px; - border-radius: 0 4px 4px 0; -} - -.mytheme .v-filterselect-compact [class$="button"]:before, .mytheme .v-filterselect-small [class$="button"]:before { - font-family: ThemeIcons; - content: "\f078"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - position: absolute; - width: 31px; - text-align: center; - top: 50%; - line-height: 1; - margin-top: -0.47em; -} - -.mytheme .v-filterselect-compact [class$="button"]:active:after, .mytheme .v-filterselect-small [class$="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-filterselect-compact.v-disabled, .mytheme .v-filterselect-small.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-compact.v-disabled [class$="button"], .mytheme .v-filterselect-small.v-disabled [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-compact.v-disabled [class$="button"]:active:after, .mytheme .v-filterselect-small.v-disabled [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-compact.v-readonly [class*="input"], .mytheme .v-filterselect-small.v-readonly [class*="input"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect-compact.v-readonly [class*="input"]:focus, .mytheme .v-filterselect-small.v-readonly [class*="input"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-filterselect-compact.v-readonly [class$="button"], .mytheme .v-filterselect-small.v-readonly [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-compact.v-readonly [class$="button"]:active:after, .mytheme .v-filterselect-small.v-readonly [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-small { - font-size: 14px; -} - -.mytheme .v-filterselect-large { - height: 44px; - - font-size: 20px; -} - -.mytheme .v-filterselect-large [class*="input"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 44px; - - padding: 5px 8px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 100% !important; - height: 100%; - padding-right: 45px; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-filterselect-large [class*="input"], .v-ie9 .mytheme .v-filterselect-large [class*="input"] { - line-height: 44px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-filterselect-large .v-icon + [class*="input"] { - padding-left: 44px; -} - -.mytheme .v-filterselect-large img.v-icon { - max-height: 44px; - margin-left: 8px; -} - -.mytheme .v-filterselect-large span.v-icon { - - width: 44px; - line-height: 1; - padding-top: 0.12em; -} - -.mytheme .v-filterselect-large [class$="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - position: absolute; - width: 44px; - border-radius: 0 4px 4px 0; -} - -.mytheme .v-filterselect-large [class$="button"]:before { - font-family: ThemeIcons; - content: "\f078"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - position: absolute; - width: 44px; - text-align: center; - top: 50%; - line-height: 1; - margin-top: -0.47em; -} - -.mytheme .v-filterselect-large [class$="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-filterselect-large.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-large.v-disabled [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-large.v-disabled [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-large.v-readonly [class*="input"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect-large.v-readonly [class*="input"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-filterselect-large.v-readonly [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-large.v-readonly [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-huge { - height: 59px; - - font-size: 26px; -} - -.mytheme .v-filterselect-huge [class*="input"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 59px; - - padding: 7px 10px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 100% !important; - height: 100%; - padding-right: 60px; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-filterselect-huge [class*="input"], .v-ie9 .mytheme .v-filterselect-huge [class*="input"] { - line-height: 59px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-filterselect-huge .v-icon + [class*="input"] { - padding-left: 59px; -} - -.mytheme .v-filterselect-huge img.v-icon { - max-height: 59px; - margin-left: 10px; -} - -.mytheme .v-filterselect-huge span.v-icon { - - width: 59px; - line-height: 1; - padding-top: 0.12em; -} - -.mytheme .v-filterselect-huge [class$="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - position: absolute; - width: 59px; - border-radius: 0 4px 4px 0; -} - -.mytheme .v-filterselect-huge [class$="button"]:before { - font-family: ThemeIcons; - content: "\f078"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - position: absolute; - width: 59px; - text-align: center; - top: 50%; - line-height: 1; - margin-top: -0.47em; -} - -.mytheme .v-filterselect-huge [class$="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-filterselect-huge.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-filterselect-huge.v-disabled [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-huge.v-disabled [class$="button"]:active:after { - display: none; -} - -.mytheme .v-filterselect-huge.v-readonly [class*="input"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-filterselect-huge.v-readonly [class*="input"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-filterselect-huge.v-readonly [class$="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-filterselect-huge.v-readonly [class$="button"]:active:after { - display: none; -} - -.mytheme .v-csslayout-well { - background: #f5f5f5; - color: #454545; - -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - border-radius: 4px; - border: 1px solid #c5c5c5; -} - -.mytheme .v-csslayout-well > div > [class*="-caption"] { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-csslayout-well > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-csslayout-well > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-csslayout-well > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-csslayout-well > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-csslayout-card { - background: white; - color: #474747; - border-radius: 4px; - border: 1px solid #d5d5d5; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); -} - -.mytheme .v-csslayout-card > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-csslayout-card > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-csslayout-card > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-csslayout-card > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-csslayout-v-component-group { - white-space: nowrap; - position: relative; -} - -.mytheme .v-csslayout-v-component-group .v-widget ~ .v-widget:not(:last-child) { - border-radius: 0; -} - -.mytheme .v-csslayout-v-component-group .v-widget:last-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} - -.mytheme .v-csslayout-v-component-group .v-widget:first-child, .mytheme .v-csslayout-v-component-group .v-caption:first-child + .v-widget { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} - -.mytheme .v-csslayout-v-component-group .v-widget ~ .v-widget.first.first { - border-radius: 4px 0 0 4px; -} - -.mytheme .v-csslayout-v-component-group .v-widget ~ .v-widget.last.last { - border-radius: 0 4px 4px 0; -} - -.mytheme .v-csslayout-v-component-group .v-widget { - vertical-align: middle; - margin-left: -1px; -} - -.mytheme .v-csslayout-v-component-group .v-widget:first-child { - margin-left: 0; -} - -.mytheme .v-csslayout-v-component-group .v-widget:focus, .mytheme .v-csslayout-v-component-group .v-widget[class*="focus"], .mytheme .v-csslayout-v-component-group .v-widget [class*="focus"] { - position: relative; - z-index: 5; -} - -.mytheme .v-form fieldset { - border: none; - padding: 0; - margin: 0; - height: 100%; -} - -.mytheme .v-form-content { - height: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme [class*="spacing"] > tbody > [class*="row"] > td { - padding-top: 12px; -} - -.mytheme [class*="spacing"] > tbody > [class*="firstrow"] > td { - padding-top: 0; -} - -.mytheme [class*="margin-top"] > tbody > [class*="firstrow"] > td { - padding-top: 37px; -} - -.mytheme [class*="margin-bottom"] > tbody > [class*="lastrow"] > td { - padding-bottom: 37px; -} - -.mytheme [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] { - padding-left: 37px; -} - -.mytheme [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .mytheme [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - left: 37px; -} - -.mytheme [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] { - padding-right: 37px; -} - -.mytheme [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .mytheme [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - right: 37px; -} - -.mytheme .v-formlayout > table { - border-spacing: 0; - position: relative; -} - -.mytheme .v-formlayout.v-has-width > table, .mytheme .v-formlayout.v-has-width .v-formlayout-contentcell { - width: 100%; -} - -.mytheme .v-formlayout-error-indicator { - width: 19px; -} - -.mytheme .v-formlayout-captioncell { - vertical-align: top; - line-height: 36px; -} - -.mytheme .v-formlayout-captioncell .v-caption { - padding-bottom: 0; -} - -.mytheme .v-formlayout-captioncell .v-caption-h2, .mytheme .v-formlayout-captioncell .v-caption-h3, .mytheme .v-formlayout-captioncell .v-caption-h4 { - height: 3em; -} - -.mytheme .v-formlayout-contentcell .v-checkbox, .mytheme .v-formlayout-contentcell .v-radiobutton { - font-weight: 400; -} - -.mytheme .v-formlayout-contentcell > .v-label-h2, .mytheme .v-formlayout-contentcell > .v-label-h3, .mytheme .v-formlayout-contentcell > .v-label-h4 { - position: absolute; - left: 0; - right: 0; - width: auto !important; - margin-top: -0.5em; - padding-bottom: 0.5em; - border-bottom: 1px solid #dfdfdf; -} - -.mytheme .v-formlayout.light > table { - padding: 0; -} - -.mytheme .v-formlayout.light > table > tbody > tr > td { - padding-top: 0; - height: 37px; - border-bottom: 1px solid #eaeaea; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="lastrow"] > td { - border-bottom: none; -} - -.mytheme .v-formlayout.light > table > tbody > tr > [class*="captioncell"] { - color: #7d7d7d; - text-align: right; - padding-left: 13px; - line-height: 37px; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] { - padding-right: 0; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect-input, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield-textfield { - width: 100%; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 0; - padding: 4px 7px; - - -webkit-box-shadow: none; - box-shadow: none; - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - background: transparent; - border: none; - color: inherit; -} - -.v-ie8 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .v-ie9 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield, .v-ie8 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .v-ie9 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .v-ie8 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .v-ie9 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input, .v-ie8 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .v-ie9 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input, .v-ie8 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea, .v-ie9 .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield.v-disabled, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea.v-disabled, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input.v-disabled, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input.v-disabled, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none; - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect input:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield input:focus, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea:focus { - box-shadow: none; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textfield-prompt, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea-prompt, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-filterselect-prompt input, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-datefield-prompt input { - color: #a3a3a3; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-textarea, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-richtextarea { - height: auto; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - border-bottom: none; - left: 0; - right: 0; -} - -.mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme .v-formlayout.light > table > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - margin-top: 0; -} - -.mytheme .v-formlayout.light .v-richtextarea { - margin: 5px 0; -} - -.mytheme .v-formlayout.light .v-filterselect-button, .mytheme .v-formlayout.light .v-datefield-button { - border: none; -} - -.mytheme .v-formlayout.light .v-filterselect-button:active:after, .mytheme .v-formlayout.light .v-datefield-button:active:after { - display: none; -} - -.mytheme .v-formlayout.light .v-datefield-button { - right: 0; - left: auto; -} - -.mytheme .v-formlayout.light .v-checkbox { - margin-left: 7px; -} - -.mytheme .v-grid { - position: relative; -} - -.mytheme .v-grid-scroller { - position: absolute; - z-index: 1; - outline: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-grid-scroller-horizontal { - left: 0; - right: 0; - bottom: 0; - overflow-y: hidden; - -ms-overflow-y: hidden; -} - -.mytheme .v-grid-scroller-vertical { - right: 0; - top: 0; - bottom: 0; - overflow-x: hidden; - -ms-overflow-x: hidden; -} - -.mytheme .v-grid-tablewrapper { - position: absolute; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 5; -} - -.mytheme .v-grid-tablewrapper > table { - border-spacing: 0; - table-layout: fixed; - width: inherit; -} - -.mytheme .v-grid-header-deco, .mytheme .v-grid-footer-deco { - position: absolute; - right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-grid-horizontal-scrollbar-deco { - position: absolute; - bottom: 0; - left: 0; - right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-grid-header, .mytheme .v-grid-body, .mytheme .v-grid-footer { - position: absolute; - left: 0; - width: inherit; - z-index: 10; -} - -.mytheme .v-grid-header, .mytheme .v-grid-header-deco { - top: 0; -} - -.mytheme .v-grid-footer, .mytheme .v-grid-footer-deco { - bottom: 0; -} - -.mytheme .v-grid-body { - -ms-touch-action: none; - touch-action: none; - z-index: 0; - top: 0; -} - -.mytheme .v-grid-body .v-grid-row { - position: absolute; - top: 0; - left: 0; -} - -.mytheme .v-grid-row { - display: block; -} - -.v-ie8 .mytheme .v-grid-row, .v-ie9 .mytheme .v-grid-row { - float: left; - clear: left; - margin-top: 0; -} - -.mytheme .v-grid-row > td, .mytheme .v-grid-row > th { - background-color: white; -} - -.mytheme .v-grid-row { - width: inherit; -} - -.mytheme .v-grid-cell { - display: block; - float: left; - padding: 2px; - white-space: nowrap; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - overflow: hidden; - font-size: 16px; -} - -.mytheme .v-grid-cell.frozen { - position: relative; - z-index: 1; -} - -.mytheme .v-grid-spacer { - position: absolute; - display: block; - background-color: white; -} - -.mytheme .v-grid-spacer > td { - width: 100%; - height: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.v-ie8 .mytheme .v-grid-spacer, .v-ie9 .mytheme .v-grid-spacer { - margin-top: 0; -} - -.mytheme .v-grid { - outline: none; -} - -.mytheme .v-grid-scroller-vertical, .mytheme .v-grid-scroller-horizontal { - border: 1px solid #d4d4d4; -} - -.mytheme .v-grid-scroller-vertical { - border-left: none; -} - -.mytheme .v-grid-scroller-horizontal { - border-top: none; -} - -.mytheme .v-grid-tablewrapper { - border: 1px solid #d4d4d4; -} - -.mytheme .v-grid .header-drag-table { - border-spacing: 0; - position: relative; - table-layout: fixed; - width: inherit; -} - -.mytheme .v-grid .header-drag-table .v-grid-header { - position: absolute; -} - -.mytheme .v-grid .header-drag-table .v-grid-header > .v-grid-cell { - border: 1px solid #d4d4d4; - margin-top: -10px; - opacity: 0.9; - filter: alpha(opacity=90); - z-index: 30000; -} - -.mytheme .v-grid .header-drag-table .v-grid-header > .v-grid-drop-marker { - background-color: #197de1; - position: absolute; - width: 3px; -} - -.mytheme .v-grid-sidebar.v-contextmenu { - -webkit-box-shadow: none; - box-shadow: none; - border-radius: 0; - position: absolute; - top: 0; - right: 0; - background-color: #fafafa; - border: 1px solid #d4d4d4; - padding: 0; - z-index: 5; -} - -.mytheme .v-grid-sidebar.v-contextmenu.v-grid-sidebar-popup { - right: auto; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button { - background: transparent; - border: none; - color: inherit; - cursor: pointer; - outline: none; - padding: 0 4px; - text-align: right; - line-height: 1; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button[disabled] { - cursor: default; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button::-moz-focus-inner { - border: 0; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button:after { - content: "\f0c9"; - display: block; - font-family: ThemeIcons, sans-serif; - font-size: 14px; -} - -.mytheme .v-grid-sidebar.v-contextmenu.closed { - border-radius: 0; -} - -.mytheme .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button { - width: 100%; -} - -.mytheme .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after { - content: "\f0c9"; - font-size: 14px; - line-height: 1; -} - -.v-ie .mytheme .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button { - vertical-align: middle; -} - -.v-ie8 .mytheme .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after { - vertical-align: middle; - text-align: center; - display: inline; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content { - padding: 4px 0; - overflow-y: auto; - overflow-x: hidden; -} - -.mytheme .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content .gwt-MenuBar .gwt-MenuItem .column-hiding-toggle { - text-shadow: none; -} - -.mytheme .v-grid-cell { - background-color: white; - padding: 0 18px; - line-height: 37px; - text-overflow: ellipsis; -} - -.mytheme .v-grid-cell > * { - line-height: 1.55; - vertical-align: middle; -} - -.mytheme .v-grid-cell > div { - display: inline-block; -} - -.mytheme .v-grid-cell.frozen { - -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); - box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); - border-right: 1px solid #d4d4d4; -} - -.mytheme .v-grid-cell.frozen + th, .mytheme .v-grid-cell.frozen + td { - border-left: none; -} - -.mytheme .v-grid-row > td, .mytheme .v-grid-editor-cells > div { - border-left: 1px solid #d4d4d4; - border-bottom: 1px solid #d4d4d4; -} - -.mytheme .v-grid-row > td:first-child, .mytheme .v-grid-editor-cells > div:first-child { - border-left: none; -} - -.mytheme .v-grid-editor-cells.frozen > div { - -webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); - box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1); - border-right: 1px solid #d4d4d4; - border-left: none; -} - -.mytheme .v-grid-row-stripe > td { - background-color: #f5f5f5; -} - -.mytheme .v-grid-row-selected > td { - background: #197de1; -} - -.mytheme .v-grid-row-focused > td { - -} - -.mytheme .v-grid-header th { - position: relative; - background-color: #fafafa; - font-size: 14px; - font-weight: inherit; - border-left: 1px solid #d4d4d4; - border-bottom: 1px solid #d4d4d4; - - text-align: left; -} - -.mytheme .v-grid-header th:first-child { - border-left: none; -} - -.mytheme .v-grid-header .sort-asc, .mytheme .v-grid-header .sort-desc { - padding-right: 35px; -} - -.mytheme .v-grid-header .sort-asc:after, .mytheme .v-grid-header .sort-desc:after { - font-family: ThemeIcons, sans-serif; - content: "\f0de" " " attr(sort-order); - position: absolute; - right: 18px; - font-size: 12px; -} - -.mytheme .v-grid-header .sort-desc:after { - content: "\f0dd" " " attr(sort-order); -} - -.mytheme .v-grid-column-resize-handle { - position: absolute; - width: 36px; - right: -18px; - top: 0px; - bottom: 0px; - cursor: col-resize; - z-index: 10; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.mytheme .v-grid-column-resize-simple-indicator { - position: absolute; - width: 3px; - top: 0px; - left: 18px; - z-index: 9001; - background: #fff; - box-shadow: 0px 0px 5px #000; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.mytheme .v-grid-footer td { - background-color: #fafafa; - font-size: 14px; - font-weight: inherit; - border-left: 1px solid #d4d4d4; - border-top: 1px solid #d4d4d4; - border-bottom: none; - -} - -.mytheme .v-grid-footer td:first-child { - border-left: none; -} - -.mytheme .v-grid-header .v-grid-cell, .mytheme .v-grid-footer .v-grid-cell { - overflow: visible; -} - -.mytheme .v-grid-column-header-content, .mytheme .v-grid-column-footer-content { - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - line-height: 37px; - vertical-align: baseline; -} - -.mytheme .v-grid-header-deco { - border-top: 1px solid #d4d4d4; - border-right: 1px solid #d4d4d4; - background-color: #fafafa; -} - -.mytheme .v-grid-footer-deco { - border-bottom: 1px solid #d4d4d4; - border-right: 1px solid #d4d4d4; - background-color: #fafafa; -} - -.mytheme .v-grid-horizontal-scrollbar-deco { - background-color: #fafafa; - border: 1px solid #d4d4d4; - border-top: none; -} - -.mytheme .v-grid-cell-focused { - position: relative; -} - -.mytheme .v-grid-cell-focused:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border: 2px solid #197de1; - display: none; - pointer-events: none; -} - -.ie8 .mytheme .v-grid-cell-focused:before, .ie9 .mytheme .v-grid-cell-focused:before, .ie10 .mytheme .v-grid-cell-focused:before { - content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==); -} - -.mytheme .v-grid:focus .v-grid-cell-focused:before { - display: block; -} - -.mytheme .v-grid.v-disabled:focus .v-grid-cell-focused:before { - display: none; -} - -.mytheme .v-grid-editor { - position: absolute; - z-index: 20; - overflow: hidden; - left: 0; - right: 0; - border: 1px solid #d4d4d4; - box-sizing: border-box; - -moz-box-sizing: border-box; - margin-top: -1px; - -webkit-box-shadow: 0 0 9px rgba(0, 0, 0, 0.2); - box-shadow: 0 0 9px rgba(0, 0, 0, 0.2); -} - -.mytheme .v-grid-editor.unbuffered .v-grid-editor-footer { - width: 100%; -} - -.mytheme .v-grid-editor-cells { - position: relative; - white-space: nowrap; -} - -.mytheme .v-grid-editor-cells.frozen { - z-index: 2; -} - -.mytheme .v-grid-editor-cells > div { - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - vertical-align: middle; - background: white; -} - -.mytheme .v-grid-editor-cells > div:first-child { - border-left: none; -} - -.mytheme .v-grid-editor-cells > div > * { - vertical-align: middle; - display: inline-block; -} - -.mytheme .v-grid-editor-cells > div .v-filterselect { - padding-left: 0; -} - -.mytheme .v-grid-editor-cells > div input[type="text"], .mytheme .v-grid-editor-cells > div input[type="text"].v-filterselect-input, .mytheme .v-grid-editor-cells > div input[type="password"] { - padding-left: 18px; -} - -.mytheme .v-grid-editor-cells > div input[type="text"]:not(.v-filterselect-input), .mytheme .v-grid-editor-cells > div input[type="password"] { - padding-right: 9px; -} - -.mytheme .v-grid-editor-cells > div input[type="checkbox"] { - margin-left: 18px; -} - -.mytheme .v-grid-editor-cells > div .v-textfield, .mytheme .v-grid-editor-cells > div .v-datefield, .mytheme .v-grid-editor-cells > div .v-filterselect { - min-width: 100%; - max-width: 100%; - min-height: 100%; - max-height: 100%; -} - -.v-ie8 .mytheme .v-grid-editor-cells > div .v-datefield-button { - margin-left: -37px; -} - -.v-ie8 .mytheme .v-grid-editor-cells > div .v-filterselect-button { - margin-left: -25px; -} - -.mytheme .v-grid-editor-cells > div .v-select, .mytheme .v-grid-editor-cells > div .v-select-select { - min-width: 100%; - max-width: 100%; -} - -.mytheme .v-grid-editor-cells > div.not-editable.v-grid-cell { - float: none; -} - -.mytheme .v-grid-editor-cells .error::before { - position: absolute; - display: block; - height: 0; - width: 0; - content: ""; - border-top: 5px solid red; - border-right: 5px solid transparent; -} - -.mytheme .v-grid-editor-cells .error, .mytheme .v-grid-editor-cells .error > input { - background-color: #fee; -} - -.mytheme .v-grid-editor-footer { - display: table; - height: 37px; - border-top: 1px solid #d4d4d4; - margin-top: -1px; - background: white; - padding: 0 5px; -} - -.mytheme .v-grid-editor-footer + .v-grid-editor-cells > div { - border-bottom: none; - border-top: 1px solid #d4d4d4; -} - -.mytheme .v-grid-editor-footer:first-child { - border-top: none; - margin-top: 0; - border-bottom: 1px solid #d4d4d4; - margin-bottom: -1px; -} - -.mytheme .v-grid-editor-message, .mytheme .v-grid-editor-buttons { - display: table-cell; - white-space: nowrap; - vertical-align: middle; -} - -.mytheme .v-grid-editor-message { - width: 100%; - position: relative; -} - -.mytheme .v-grid-editor-message > div { - position: absolute; - width: 100%; - overflow: hidden; - text-overflow: ellipsis; - line-height: 37px; - top: 0; -} - -.mytheme .v-grid-editor-save { - margin-right: 4px; -} - -.mytheme .v-grid-spacer { - padding-left: 1px; -} - -.mytheme .v-grid-spacer > td { - display: block; - padding: 0; - background-color: white; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #d4d4d4; -} - -.mytheme .v-grid-spacer.stripe > td { - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - border-bottom: 1px solid #d4d4d4; -} - -.mytheme .v-grid-spacer-deco-container { - border-top: 1px solid transparent; - position: relative; - top: 0; - z-index: 5; -} - -.mytheme .v-grid-spacer-deco { - top: 0; - left: 0; - width: 2px; - background-color: #197de1; - position: absolute; - height: 100%; - pointer-events: none; -} - -.ie8 .mytheme .v-grid-spacer-deco:before, .ie9 .mytheme .v-grid-spacer-deco:before, .ie10 .mytheme .v-grid-spacer-deco:before { - content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==); -} - -.mytheme .v-grid-cell > .v-progressbar { - width: 100%; -} - -.mytheme .v-grid { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - background-color: #fafafa; -} - -.mytheme .v-grid.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-grid-header .v-grid-cell { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-grid-header .v-grid-cell.dragged { - opacity: 0.5; - filter: alpha(opacity=50) ; - -webkit-transition: opacity 0.3s ease-in-out; - -moz-transition: opacity 0.3s ease-in-out; - transition: opacity 0.3s ease-in-out; -} - -.mytheme .v-grid-header .v-grid-cell.dragged-column-header { - margin-top: -19px; -} - -.mytheme .v-grid-footer .v-grid-cell { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-grid-header-deco { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); -} - -.mytheme .v-grid-footer-deco, .mytheme .v-grid-horizontal-scrollbar-deco { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); -} - -.mytheme .v-grid-row-selected > .v-grid-cell { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: #c8dbed; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); - border-color: #1d69b4; -} - -.mytheme .v-grid-row-selected > .v-grid-cell-focused:before { - border-color: #71b0ef; -} - -.mytheme .v-grid-editor { - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - border-color: #197de1; -} - -.mytheme .v-grid-editor-footer { - font-size: 14px; - padding: 0 6px; - background: #fafafa; - -webkit-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards; - -moz-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards; - animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards; -} - -.mytheme .v-grid-editor-footer:first-child { - -webkit-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards; - -moz-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards; - animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards; -} - -.mytheme .v-grid-editor-cells { - z-index: 1; -} - -.mytheme .v-grid-editor-cells > div:before { - content: ""; - display: inline-block; - height: 100%; - vertical-align: middle; -} - -.mytheme .v-grid-editor-cells > div.not-editable.v-grid-cell { - float: none; -} - -.mytheme .v-grid-editor-cells > div .error::before { - border-top: 9px solid #ed473b; - border-right: 9px solid transparent; -} - -.mytheme .v-grid-editor-cells > div .error, .mytheme .v-grid-editor-cells > div .error > input { - background-color: #fffbfb; -} - -.mytheme .v-grid-editor-cells > div .v-textfield, .mytheme .v-grid-editor-cells > div .v-textfield-focus, .mytheme .v-grid-editor-cells > div .v-datefield, .mytheme .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .mytheme .v-grid-editor-cells > div .v-filterselect-input, .mytheme .v-grid-editor-cells > div .v-filterselect-input:focus { - border: none; - border-radius: 0; - background: transparent; - -webkit-box-shadow: inset 0 1px 0 #f2f2f2; - box-shadow: inset 0 1px 0 #f2f2f2; -} - -.mytheme .v-grid-editor-cells > div input[type="text"].v-datefield-textfield { - padding-left: 44.4px; -} - -.v-ie8 .mytheme .v-grid-editor-cells > div .v-datefield-button { - margin-left: 0px; -} - -.v-ie8 .mytheme .v-grid-editor-cells > div .v-filterselect-button { - margin-left: 0px; -} - -.mytheme .v-grid-editor-cells > div .v-textfield-focus, .mytheme .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .mytheme .v-grid-editor-cells > div .v-filterselect-input:focus { - position: relative; -} - -.mytheme .v-grid-editor-cells > div .v-select { - padding-left: 9px; - padding-right: 9px; -} - -.mytheme .v-grid-editor-cells > div .v-checkbox { - margin: 0 9px 0 18px; -} - -.mytheme .v-grid-editor-cells > div .v-checkbox > input[type="checkbox"] { - margin-left: 0; -} - -.mytheme .v-grid-editor-cells > div .v-checkbox > label { - white-space: nowrap; -} - -.mytheme .v-grid-editor-message > div:before { - display: inline-block; - color: #ed473b; - font-weight: 600; - width: 19px; - text-align: center; - content: "!"; -} - -.mytheme .v-grid-editor-save, .mytheme .v-grid-editor-cancel { - cursor: pointer; - color: #197de1; - text-decoration: underline; - font-weight: inherit; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; - font-weight: 400; - text-decoration: none; - border: none; - background: transparent; - padding: 6px 6px; - margin: 0; - outline: none; -} - -.mytheme .v-grid-editor-save:hover, .mytheme .v-grid-editor-cancel:hover { - color: #4396ea; -} - -.mytheme .v-grid-editor-save.v-disabled, .mytheme .v-grid-editor-cancel.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-grid-spacer { - margin-top: -1px; -} - -.mytheme .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-content { - margin: 0 0 2px; - padding: 4px 4px 2px; - overflow-y: auto; - overflow-x: hidden; -} - -.mytheme .v-grid-sidebar.v-contextmenu.closed { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); -} - -.mytheme .v-grid-scroller::-webkit-scrollbar { - border: none; -} - -.mytheme .v-grid-scroller::-webkit-scrollbar-thumb { - border-radius: 10px; - border: 4px solid transparent; - background: rgba(0, 0, 0, 0.3); - -webkit-background-clip: content-box; - background-clip: content-box; -} - -.mytheme .v-grid-scroller-vertical::-webkit-scrollbar-thumb { - min-height: 30px; -} - -.mytheme .v-grid-scroller-horizontal::-webkit-scrollbar-thumb { - min-width: 30px; -} - -.mytheme .v-textfield { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 4px; - padding: 4px 9px; - border: 1px solid #c5c5c5; - background: white; - color: #474747; - -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - width: 185px; -} - -.v-ie8 .mytheme .v-textfield, .v-ie9 .mytheme .v-textfield { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-textfield.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-textfield:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-textfield[class*="prompt"] { - color: #a3a3a3; -} - -.mytheme .v-textfield-readonly { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-textfield-readonly:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-textfield-error { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-textfield-borderless { - border: none; - border-radius: 0; - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: inherit; -} - -.mytheme .v-textfield-borderless:focus { - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-textfield-borderless[class*="prompt"] { - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-textfield-tiny { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 28px; - border-radius: 4px; - padding: 3px 7px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - font-size: 12px; -} - -.v-ie8 .mytheme .v-textfield-tiny, .v-ie9 .mytheme .v-textfield-tiny { - line-height: 28px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-textfield-compact, .mytheme .v-textfield-small { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 31px; - border-radius: 4px; - padding: 3px 8px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; -} - -.v-ie8 .mytheme .v-textfield-compact, .v-ie9 .mytheme .v-textfield-compact, .v-ie8 .mytheme .v-textfield-small, .v-ie9 .mytheme .v-textfield-small { - line-height: 31px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-textfield-small { - font-size: 14px; -} - -.mytheme .v-textfield-large { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 44px; - border-radius: 4px; - padding: 5px 10px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - font-size: 20px; -} - -.v-ie8 .mytheme .v-textfield-large, .v-ie9 .mytheme .v-textfield-large { - line-height: 44px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-textfield-huge { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 59px; - border-radius: 4px; - padding: 7px 12px; - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - font-size: 26px; -} - -.v-ie8 .mytheme .v-textfield-huge, .v-ie9 .mytheme .v-textfield-huge { - line-height: 59px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-slot-inline-icon { - position: relative; -} - -.mytheme .v-caption-inline-icon { - padding: 0; -} - -.mytheme .v-caption-inline-icon .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon span.v-icon { - left: 1px; - bottom: 1px; - width: 37px; - line-height: 35px; - text-align: center; - font-size: 16px; -} - -.mytheme .v-caption-inline-icon img.v-icon { - left: 11px; - bottom: 11px; -} - -.mytheme .v-textfield-inline-icon { - padding-left: 37px; -} - -.mytheme .v-slot-inline-icon.v-slot-tiny { - position: relative; -} - -.mytheme .v-caption-inline-icon.v-caption-tiny { - padding: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-tiny .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-tiny .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon.v-caption-tiny span.v-icon { - left: 1px; - bottom: 1px; - width: 28px; - line-height: 26px; - text-align: center; - font-size: 12px; -} - -.mytheme .v-caption-inline-icon.v-caption-tiny img.v-icon { - left: 6px; - bottom: 6px; -} - -.mytheme .v-textfield-inline-icon.v-textfield-tiny { - padding-left: 28px; -} - -.mytheme .v-slot-inline-icon.v-slot-compact { - position: relative; -} - -.mytheme .v-caption-inline-icon.v-caption-compact { - padding: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-compact .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-compact .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon.v-caption-compact span.v-icon { - left: 1px; - bottom: 1px; - width: 31px; - line-height: 29px; - text-align: center; - font-size: 16px; -} - -.mytheme .v-caption-inline-icon.v-caption-compact img.v-icon { - left: 8px; - bottom: 8px; -} - -.mytheme .v-textfield-inline-icon.v-textfield-compact { - padding-left: 31px; -} - -.mytheme .v-slot-inline-icon.v-slot-small { - position: relative; -} - -.mytheme .v-caption-inline-icon.v-caption-small { - padding: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-small .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-small .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon.v-caption-small span.v-icon { - left: 1px; - bottom: 1px; - width: 31px; - line-height: 29px; - text-align: center; - font-size: 14px; -} - -.mytheme .v-caption-inline-icon.v-caption-small img.v-icon { - left: 8px; - bottom: 8px; -} - -.mytheme .v-textfield-inline-icon.v-textfield-small { - padding-left: 31px; -} - -.mytheme .v-slot-inline-icon.v-slot-large { - position: relative; -} - -.mytheme .v-caption-inline-icon.v-caption-large { - padding: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-large .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-large .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon.v-caption-large span.v-icon { - left: 1px; - bottom: 1px; - width: 44px; - line-height: 42px; - text-align: center; - font-size: 20px; -} - -.mytheme .v-caption-inline-icon.v-caption-large img.v-icon { - left: 14px; - bottom: 14px; -} - -.mytheme .v-textfield-inline-icon.v-textfield-large { - padding-left: 44px; -} - -.mytheme .v-slot-inline-icon.v-slot-huge { - position: relative; -} - -.mytheme .v-caption-inline-icon.v-caption-huge { - padding: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-huge .v-captiontext { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; - margin: 0; -} - -.mytheme .v-caption-inline-icon.v-caption-huge .v-icon { - position: absolute; - z-index: 10; -} - -.mytheme .v-caption-inline-icon.v-caption-huge span.v-icon { - left: 1px; - bottom: 1px; - width: 59px; - line-height: 57px; - text-align: center; - font-size: 26px; -} - -.mytheme .v-caption-inline-icon.v-caption-huge img.v-icon { - left: 22px; - bottom: 22px; -} - -.mytheme .v-textfield-inline-icon.v-textfield-huge { - padding-left: 59px; -} - -.mytheme .v-textfield-align-right { - text-align: right; -} - -.mytheme .v-textfield-align-center { - text-align: center; -} - -.mytheme .v-textarea { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 4px; - padding: 6px; - border: 1px solid #c5c5c5; - background: white; - color: #474747; - -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - resize: none; - white-space: pre-wrap; - width: 185px; -} - -.v-ie8 .mytheme .v-textarea, .v-ie9 .mytheme .v-textarea { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-textarea.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-textarea:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-textarea[class*="prompt"] { - color: #a3a3a3; -} - -.v-ie8 .mytheme .v-textarea, .v-ie9 .mytheme .v-textarea { - line-height: inherit; - padding-top: 4px; - padding-bottom: 4px; -} - -.mytheme .v-textarea-readonly { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-textarea-readonly:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-textarea-error { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-textarea-borderless { - border: none; - border-radius: 0; - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: inherit; -} - -.mytheme .v-textarea-borderless:focus { - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-textarea-borderless[class*="prompt"] { - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-textarea-tiny { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 28px; - border-radius: 4px; - padding: 6px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - resize: none; - white-space: pre-wrap; - font-size: 12px; -} - -.v-ie8 .mytheme .v-textarea-tiny, .v-ie9 .mytheme .v-textarea-tiny { - line-height: 28px; - padding-top: 0; - padding-bottom: 0; -} - -.v-ie8 .mytheme .v-textarea-tiny, .v-ie9 .mytheme .v-textarea-tiny { - line-height: inherit; - padding-top: 3px; - padding-bottom: 3px; -} - -.mytheme .v-textarea-small { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 31px; - border-radius: 4px; - padding: 6px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - resize: none; - white-space: pre-wrap; - font-size: 14px; -} - -.v-ie8 .mytheme .v-textarea-small, .v-ie9 .mytheme .v-textarea-small { - line-height: 31px; - padding-top: 0; - padding-bottom: 0; -} - -.v-ie8 .mytheme .v-textarea-small, .v-ie9 .mytheme .v-textarea-small { - line-height: inherit; - padding-top: 3px; - padding-bottom: 3px; -} - -.mytheme .v-textarea-large { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 44px; - border-radius: 4px; - padding: 6px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - resize: none; - white-space: pre-wrap; - font-size: 20px; -} - -.v-ie8 .mytheme .v-textarea-large, .v-ie9 .mytheme .v-textarea-large { - line-height: 44px; - padding-top: 0; - padding-bottom: 0; -} - -.v-ie8 .mytheme .v-textarea-large, .v-ie9 .mytheme .v-textarea-large { - line-height: inherit; - padding-top: 5px; - padding-bottom: 5px; -} - -.mytheme .v-textarea-huge { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 59px; - border-radius: 4px; - padding: 6px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - resize: none; - white-space: pre-wrap; - font-size: 26px; -} - -.v-ie8 .mytheme .v-textarea-huge, .v-ie9 .mytheme .v-textarea-huge { - line-height: 59px; - padding-top: 0; - padding-bottom: 0; -} - -.v-ie8 .mytheme .v-textarea-huge, .v-ie9 .mytheme .v-textarea-huge { - line-height: inherit; - padding-top: 7px; - padding-bottom: 7px; -} - -.mytheme .v-textarea-align-right { - text-align: right; -} - -.mytheme .v-textarea-align-center { - text-align: center; -} - -.mytheme .v-datefield { - position: relative; - width: 185px; - height: 37px; - border-radius: 4px; -} - -.mytheme .v-datefield [class*="textfield"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 4px; - padding: 4px 9px; - border: 1px solid #c5c5c5; - background: white; - color: #474747; - -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - padding-left: 44.4px; - width: 100%; - height: 100%; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-datefield [class*="textfield"], .v-ie9 .mytheme .v-datefield [class*="textfield"] { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-datefield [class*="textfield"].v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield [class*="textfield"]:focus { - outline: none; - -webkit-transition: none; - -moz-transition: none; - transition: none; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-datefield [class*="textfield"][class*="prompt"] { - color: #a3a3a3; -} - -.mytheme .v-datefield[class*="prompt"] > [class*="textfield"] { - color: #a3a3a3; -} - -.mytheme .v-datefield [class*="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - -webkit-appearance: none; - background: transparent; - padding: 0; - position: absolute; - z-index: 10; - width: 37px; - line-height: 35px; - text-align: center; - font: inherit; - outline: none; - margin: 0; - top: 1px; - bottom: 1px; - left: 1px; - border: none; - border-right: 1px solid #e4e4e4; - color: #a3a3a3; - border-radius: 3px 0 0 3px; -} - -.mytheme .v-datefield [class*="button"]:hover { - color: #474747; -} - -.mytheme .v-datefield [class*="button"]:before { - font-family: ThemeIcons; - content: "\f073"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-datefield [class*="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background-color: rgba(128, 128, 128, 0.2); - border-radius: inherit; -} - -.mytheme .v-datefield.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield.v-disabled [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield.v-disabled [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield.v-readonly [class*="textfield"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield.v-readonly [class*="textfield"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-datefield.v-readonly [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield.v-readonly [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-error .v-datefield-textfield { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-datefield-error .v-datefield-button { - color: #ed473b; - border-color: #ed473b; -} - -.mytheme .v-datefield-full { - width: 240px; -} - -.mytheme .v-datefield-day { - width: 185px; -} - -.mytheme .v-datefield-month { - width: 120px; -} - -.mytheme .v-datefield-year { - width: 104px; -} - -.mytheme .v-datefield-popup { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - margin-top: 5px !important; - margin-bottom: 5px !important; - margin-right: 5px !important; - cursor: default; - width: auto; -} - -.mytheme .v-datefield-popup[class*="animate-in"] { - -webkit-animation: valo-overlay-animate-in 120ms; - -moz-animation: valo-overlay-animate-in 120ms; - animation: valo-overlay-animate-in 120ms; -} - -.mytheme .v-datefield-popup[class*="animate-out"] { - -webkit-animation: valo-animate-out-fade 120ms; - -moz-animation: valo-animate-out-fade 120ms; - animation: valo-animate-out-fade 120ms; -} - -.mytheme .v-datefield-popup table { - border-collapse: collapse; - border-spacing: 0; - margin: 0 auto; -} - -.mytheme .v-datefield-popup td { - padding: 2px; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel { - font-size: 16px; - text-align: center; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel:focus { - outline: none; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 30px; - height: 26px; - border: 1px solid transparent; - line-height: 26px; - text-align: center; - font-size: 14px; - background: #fafafa; - border-radius: 2px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day:hover { - color: #197de1; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day-offmonth { - color: #a0a0a0; - background: transparent; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day-today { - color: #191919; - font-weight: 600; - border-color: #afafaf; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover { - color: #c8dbed; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - border: none; - font-weight: 600; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused { - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - position: relative; -} - -.v-ie8 .mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused { - border-color: #197de1; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .mytheme .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover { - color: #a0a0a0; - cursor: not-allowed; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-weekdays { - height: 26px; - color: rgba(133, 133, 133, 0.85); -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-weekdays strong { - font: inherit; - font-size: 14px; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-header { - white-space: nowrap; -} - -.mytheme .v-datefield-popup td[class*="year"] button, .mytheme .v-datefield-popup td[class*="month"] button { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - border: none; - background: transparent; - padding: 0; - margin: 0; - cursor: pointer; - color: transparent; - font-size: 0; - width: 19px; - height: 25px; - outline: none; - position: relative; - vertical-align: middle; -} - -.mytheme .v-datefield-popup td[class*="year"] button:before, .mytheme .v-datefield-popup td[class*="month"] button:before { - color: #a0a0a0; - font-size: 21px; - line-height: 24px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; -} - -.mytheme .v-datefield-popup td[class*="year"] button:hover:before, .mytheme .v-datefield-popup td[class*="month"] button:hover:before { - color: #197de1; -} - -.mytheme .v-datefield-popup td[class*="year"] button.outside-range, .mytheme .v-datefield-popup td[class*="month"] button.outside-range { - cursor: default; - opacity: 0.3; - filter: alpha(opacity=30.0) ; -} - -.mytheme .v-datefield-popup td[class*="year"] button.outside-range:hover:before, .mytheme .v-datefield-popup td[class*="month"] button.outside-range:hover:before { - color: #a0a0a0; -} - -.mytheme .v-datefield-popup .v-button-prevyear:before { - font-family: ThemeIcons; - content: "\f100"; -} - -.mytheme .v-datefield-popup .v-button-prevmonth:before { - font-family: ThemeIcons; - content: "\f104"; -} - -.mytheme .v-datefield-popup .v-button-nextyear:before { - font-family: ThemeIcons; - content: "\f101"; -} - -.mytheme .v-datefield-popup .v-button-nextmonth:before { - font-family: ThemeIcons; - content: "\f105"; -} - -.mytheme .v-datefield-popup td.v-datefield-calendarpanel-month { - width: 148px; - color: #197de1; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month { - width: 74px; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-weeknumber, .mytheme .v-datefield-popup .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child { - width: 30px; - color: rgba(133, 133, 133, 0.85); - font-size: 14px; - display: inline-block; - text-align: left; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-weeknumber { - position: relative; -} - -.mytheme .v-datefield-popup .v-datefield-calendarpanel-weeknumbers .v-first:before { - content: ""; - position: absolute; - top: 38px; - bottom: 0; - left: 0; - width: 34px; - border-top: 1px solid #eaeaea; - border-right: 1px solid #eaeaea; - border-top-right-radius: 4px; - border-bottom-left-radius: 4px; - background: #fafafa; -} - -.mytheme .v-datefield-popup td.v-datefield-calendarpanel-time { - width: 100%; - font-size: 14px; -} - -.mytheme .v-datefield-popup td.v-datefield-calendarpanel-time .v-label { - display: inline; - margin: 0 0.1em; - font-weight: 400; -} - -.mytheme .v-datefield-calendarpanel { - font-size: 16px; - text-align: center; -} - -.mytheme .v-datefield-calendarpanel:focus { - outline: none; -} - -.mytheme .v-datefield-calendarpanel-day { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 30px; - height: 26px; - border: 1px solid transparent; - line-height: 26px; - text-align: center; - font-size: 14px; - background: #fafafa; - border-radius: 2px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} - -.mytheme .v-datefield-calendarpanel-day:hover { - color: #197de1; -} - -.mytheme .v-datefield-calendarpanel-day-offmonth { - color: #a0a0a0; - background: transparent; -} - -.mytheme .v-datefield-calendarpanel-day-today { - color: #191919; - font-weight: 600; - border-color: #afafaf; -} - -.mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover { - color: #c8dbed; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - border: none; - font-weight: 600; -} - -.mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused { - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - position: relative; -} - -.v-ie8 .mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused { - border-color: #197de1; -} - -.mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .mytheme .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover { - color: #a0a0a0; - cursor: not-allowed; -} - -.mytheme .v-datefield-calendarpanel-weekdays { - height: 26px; - color: rgba(133, 133, 133, 0.85); -} - -.mytheme .v-datefield-calendarpanel-weekdays strong { - font: inherit; - font-size: 14px; -} - -.mytheme .v-datefield-calendarpanel-header { - white-space: nowrap; -} - -.mytheme td[class*="year"] button, .mytheme td[class*="month"] button { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - border: none; - background: transparent; - padding: 0; - margin: 0; - cursor: pointer; - color: transparent; - font-size: 0; - width: 19px; - height: 25px; - outline: none; - position: relative; - vertical-align: middle; -} - -.mytheme td[class*="year"] button:before, .mytheme td[class*="month"] button:before { - color: #a0a0a0; - font-size: 21px; - line-height: 24px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; -} - -.mytheme td[class*="year"] button:hover:before, .mytheme td[class*="month"] button:hover:before { - color: #197de1; -} - -.mytheme td[class*="year"] button.outside-range, .mytheme td[class*="month"] button.outside-range { - cursor: default; - opacity: 0.3; - filter: alpha(opacity=30.0) ; -} - -.mytheme td[class*="year"] button.outside-range:hover:before, .mytheme td[class*="month"] button.outside-range:hover:before { - color: #a0a0a0; -} - -.mytheme .v-button-prevyear:before { - font-family: ThemeIcons; - content: "\f100"; -} - -.mytheme .v-button-prevmonth:before { - font-family: ThemeIcons; - content: "\f104"; -} - -.mytheme .v-button-nextyear:before { - font-family: ThemeIcons; - content: "\f101"; -} - -.mytheme .v-button-nextmonth:before { - font-family: ThemeIcons; - content: "\f105"; -} - -.mytheme td.v-datefield-calendarpanel-month { - width: 148px; - color: #197de1; -} - -.mytheme .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month { - width: 74px; -} - -.mytheme .v-datefield-calendarpanel-weeknumber, .mytheme .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child { - width: 30px; - color: rgba(133, 133, 133, 0.85); - font-size: 14px; - display: inline-block; - text-align: left; -} - -.mytheme .v-datefield-calendarpanel-weeknumber { - position: relative; -} - -.mytheme .v-datefield-calendarpanel-weeknumbers .v-first:before { - content: ""; - position: absolute; - top: 38px; - bottom: 0; - left: 0; - width: 34px; - border-top: 1px solid #eaeaea; - border-right: 1px solid #eaeaea; - border-top-right-radius: 4px; - border-bottom-left-radius: 4px; - background: #fafafa; -} - -.mytheme td.v-datefield-calendarpanel-time { - width: 100%; - font-size: 14px; -} - -.mytheme td.v-datefield-calendarpanel-time .v-label { - display: inline; - margin: 0 0.1em; - font-weight: 400; -} - -.mytheme .v-datefield-borderless .v-datefield-textfield { - border: none; - border-radius: 0; - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: inherit; -} - -.mytheme .v-datefield-borderless .v-datefield-textfield:focus { - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield-borderless .v-datefield-textfield[class*="prompt"] { - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-borderless .v-datefield-button { - border: none; - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-align-right input { - text-align: right; -} - -.mytheme .v-datefield-align-center input { - text-align: center; -} - -.mytheme .v-datefield-tiny { - height: 28px; - border-radius: 4px; - font-size: 12px; -} - -.mytheme .v-datefield-tiny [class*="textfield"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 28px; - border-radius: 4px; - padding: 3px 7px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - padding-left: 33.6px; - width: 100%; - height: 100%; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-datefield-tiny [class*="textfield"], .v-ie9 .mytheme .v-datefield-tiny [class*="textfield"] { - line-height: 28px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-datefield-tiny [class*="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - -webkit-appearance: none; - background: transparent; - padding: 0; - position: absolute; - z-index: 10; - width: 28px; - line-height: 28px; - text-align: center; - font: inherit; - outline: none; - margin: 0; - border-radius: 4px 0 0 4px; -} - -.mytheme .v-datefield-tiny [class*="button"]:before { - font-family: ThemeIcons; - content: "\f073"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-datefield-tiny [class*="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-datefield-tiny.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-tiny.v-disabled [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-tiny.v-disabled [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-tiny.v-readonly [class*="textfield"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield-tiny.v-readonly [class*="textfield"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-datefield-tiny.v-readonly [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-tiny.v-readonly [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-compact, .mytheme .v-datefield-small { - height: 31px; - border-radius: 4px; -} - -.mytheme .v-datefield-compact [class*="textfield"], .mytheme .v-datefield-small [class*="textfield"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 31px; - border-radius: 4px; - padding: 3px 8px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - padding-left: 37.2px; - width: 100%; - height: 100%; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-datefield-compact [class*="textfield"], .v-ie9 .mytheme .v-datefield-compact [class*="textfield"], .v-ie8 .mytheme .v-datefield-small [class*="textfield"], .v-ie9 .mytheme .v-datefield-small [class*="textfield"] { - line-height: 31px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-datefield-compact [class*="button"], .mytheme .v-datefield-small [class*="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - -webkit-appearance: none; - background: transparent; - padding: 0; - position: absolute; - z-index: 10; - width: 31px; - line-height: 31px; - text-align: center; - font: inherit; - outline: none; - margin: 0; - border-radius: 4px 0 0 4px; -} - -.mytheme .v-datefield-compact [class*="button"]:before, .mytheme .v-datefield-small [class*="button"]:before { - font-family: ThemeIcons; - content: "\f073"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-datefield-compact [class*="button"]:active:after, .mytheme .v-datefield-small [class*="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-datefield-compact.v-disabled, .mytheme .v-datefield-small.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-compact.v-disabled [class*="button"], .mytheme .v-datefield-small.v-disabled [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-compact.v-disabled [class*="button"]:active:after, .mytheme .v-datefield-small.v-disabled [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-compact.v-readonly [class*="textfield"], .mytheme .v-datefield-small.v-readonly [class*="textfield"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield-compact.v-readonly [class*="textfield"]:focus, .mytheme .v-datefield-small.v-readonly [class*="textfield"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-datefield-compact.v-readonly [class*="button"], .mytheme .v-datefield-small.v-readonly [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-compact.v-readonly [class*="button"]:active:after, .mytheme .v-datefield-small.v-readonly [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-small { - font-size: 14px; -} - -.mytheme .v-datefield-large { - height: 44px; - border-radius: 4px; - font-size: 20px; -} - -.mytheme .v-datefield-large [class*="textfield"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 44px; - border-radius: 4px; - padding: 5px 10px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - padding-left: 52.8px; - width: 100%; - height: 100%; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-datefield-large [class*="textfield"], .v-ie9 .mytheme .v-datefield-large [class*="textfield"] { - line-height: 44px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-datefield-large [class*="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - -webkit-appearance: none; - background: transparent; - padding: 0; - position: absolute; - z-index: 10; - width: 44px; - line-height: 44px; - text-align: center; - font: inherit; - outline: none; - margin: 0; - border-radius: 4px 0 0 4px; -} - -.mytheme .v-datefield-large [class*="button"]:before { - font-family: ThemeIcons; - content: "\f073"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-datefield-large [class*="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-datefield-large.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-large.v-disabled [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-large.v-disabled [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-large.v-readonly [class*="textfield"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield-large.v-readonly [class*="textfield"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-datefield-large.v-readonly [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-large.v-readonly [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-huge { - height: 59px; - border-radius: 4px; - font-size: 26px; -} - -.mytheme .v-datefield-huge [class*="textfield"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 59px; - border-radius: 4px; - padding: 7px 12px; - - - - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - padding-left: 70.8px; - width: 100%; - height: 100%; - border-radius: inherit; -} - -.v-ie8 .mytheme .v-datefield-huge [class*="textfield"], .v-ie9 .mytheme .v-datefield-huge [class*="textfield"] { - line-height: 59px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-datefield-huge [class*="button"] { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - -webkit-appearance: none; - background: transparent; - padding: 0; - position: absolute; - z-index: 10; - width: 59px; - line-height: 59px; - text-align: center; - font: inherit; - outline: none; - margin: 0; - border-radius: 4px 0 0 4px; -} - -.mytheme .v-datefield-huge [class*="button"]:before { - font-family: ThemeIcons; - content: "\f073"; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-datefield-huge [class*="button"]:active:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-datefield-huge.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-datefield-huge.v-disabled [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-huge.v-disabled [class*="button"]:active:after { - display: none; -} - -.mytheme .v-datefield-huge.v-readonly [class*="textfield"] { - background: #fafafa; - color: #464646; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-datefield-huge.v-readonly [class*="textfield"]:focus { - box-shadow: none; - border-color: #c5c5c5; -} - -.mytheme .v-datefield-huge.v-readonly [class*="button"] { - cursor: default; - pointer-events: none; -} - -.mytheme .v-datefield-huge.v-readonly [class*="button"]:active:after { - display: none; -} - -.mytheme .v-inline-datefield-calendarpanel { - font-size: 16px; - text-align: center; -} - -.mytheme .v-inline-datefield-calendarpanel:focus { - outline: none; -} - -.mytheme .v-inline-datefield-calendarpanel-day { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 30px; - height: 26px; - border: 1px solid transparent; - line-height: 26px; - text-align: center; - font-size: 14px; - background: #fafafa; - border-radius: 2px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} - -.mytheme .v-inline-datefield-calendarpanel-day:hover { - color: #197de1; -} - -.mytheme .v-inline-datefield-calendarpanel-day-offmonth { - color: #a0a0a0; - background: transparent; -} - -.mytheme .v-inline-datefield-calendarpanel-day-today { - color: #191919; - font-weight: 600; - border-color: #afafaf; -} - -.mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected, .mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected:hover { - color: #c8dbed; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - border: none; - font-weight: 600; -} - -.mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused { - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - position: relative; -} - -.v-ie8 .mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused { - border-color: #197de1; -} - -.mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range, .mytheme .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range:hover { - color: #a0a0a0; - cursor: not-allowed; -} - -.mytheme .v-inline-datefield-calendarpanel-weekdays { - height: 26px; - color: rgba(133, 133, 133, 0.85); -} - -.mytheme .v-inline-datefield-calendarpanel-weekdays strong { - font: inherit; - font-size: 14px; -} - -.mytheme .v-inline-datefield-calendarpanel-header { - white-space: nowrap; -} - -.mytheme td[class*="year"] button, .mytheme td[class*="month"] button { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - border: none; - background: transparent; - padding: 0; - margin: 0; - cursor: pointer; - color: transparent; - font-size: 0; - width: 19px; - height: 25px; - outline: none; - position: relative; - vertical-align: middle; -} - -.mytheme td[class*="year"] button:before, .mytheme td[class*="month"] button:before { - color: #a0a0a0; - font-size: 21px; - line-height: 24px; - -webkit-transition: color 200ms; - -moz-transition: color 200ms; - transition: color 200ms; -} - -.mytheme td[class*="year"] button:hover:before, .mytheme td[class*="month"] button:hover:before { - color: #197de1; -} - -.mytheme td[class*="year"] button.outside-range, .mytheme td[class*="month"] button.outside-range { - cursor: default; - opacity: 0.3; - filter: alpha(opacity=30.0) ; -} - -.mytheme td[class*="year"] button.outside-range:hover:before, .mytheme td[class*="month"] button.outside-range:hover:before { - color: #a0a0a0; -} - -.mytheme .v-button-prevyear:before { - font-family: ThemeIcons; - content: "\f100"; -} - -.mytheme .v-button-prevmonth:before { - font-family: ThemeIcons; - content: "\f104"; -} - -.mytheme .v-button-nextyear:before { - font-family: ThemeIcons; - content: "\f101"; -} - -.mytheme .v-button-nextmonth:before { - font-family: ThemeIcons; - content: "\f105"; -} - -.mytheme td.v-inline-datefield-calendarpanel-month { - width: 148px; - color: #197de1; -} - -.mytheme .v-inline-datefield-calendarpanel-year td.v-inline-datefield-calendarpanel-month { - width: 74px; -} - -.mytheme .v-inline-datefield-calendarpanel-weeknumber, .mytheme .v-inline-datefield-calendarpanel-weekdays.v-inline-datefield-calendarpanel-weeknumbers td:first-child { - width: 30px; - color: rgba(133, 133, 133, 0.85); - font-size: 14px; - display: inline-block; - text-align: left; -} - -.mytheme .v-inline-datefield-calendarpanel-weeknumber { - position: relative; -} - -.mytheme .v-inline-datefield-calendarpanel-weeknumbers .v-first:before { - content: ""; - position: absolute; - top: 38px; - bottom: 0; - left: 0; - width: 34px; - border-top: 1px solid #eaeaea; - border-right: 1px solid #eaeaea; - border-top-right-radius: 4px; - border-bottom-left-radius: 4px; - background: #fafafa; -} - -.mytheme td.v-inline-datefield-calendarpanel-time { - width: 100%; - font-size: 14px; -} - -.mytheme td.v-inline-datefield-calendarpanel-time .v-label { - display: inline; - margin: 0 0.1em; - font-weight: 400; -} - -.mytheme .v-inline-datefield-calendarpanel { - position: relative; - background: white; - padding: 6px; -} - -.mytheme .v-gridlayout-margin-top { - padding-top: 37px; -} - -.mytheme .v-gridlayout-margin-bottom { - padding-bottom: 37px; -} - -.mytheme .v-gridlayout-margin-left { - padding-left: 37px; -} - -.mytheme .v-gridlayout-margin-right { - padding-right: 37px; -} - -.mytheme .v-gridlayout-spacing-on { - padding-left: 12px; - padding-top: 12px; -} - -.mytheme .v-menubar { - position: relative; - text-align: center; - white-space: nowrap; - outline: none; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - cursor: default; - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - text-align: left; - line-height: 35px; -} - -.mytheme .v-menubar:after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; -} - -.mytheme .v-menubar:focus:after { - -webkit-transition: none; - -moz-transition: none; - transition: none; -} - -.mytheme .v-menubar.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-menubar.v-disabled:after { - display: none; -} - -.mytheme .v-menubar:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-menubar:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-menubar > .v-menubar-menuitem { - padding: 0 14px; -} - -.mytheme .v-menubar > .v-menubar-menuitem[class*="-icon-only"] { - width: 37px; -} - -.mytheme .v-menubar:active:after { - background: transparent; -} - -.mytheme .v-menubar > .v-menubar-menuitem { - position: relative; - z-index: 1; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 37px; - padding: 0 15px; - color: inherit; - font-weight: 400; - - cursor: pointer; - border-radius: 0; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - border-width: 0 1px 0 0; - border-color: inherit; - height: 100%; - line-height: inherit; - vertical-align: top; - text-align: center; -} - -.mytheme .v-menubar > .v-menubar-menuitem:first-child { - border-left-width: 0; - border-radius: 3px 0 0 3px; -} - -.mytheme .v-menubar > .v-menubar-menuitem:last-child { - border-radius: 0 3px 3px 0; - border-right-width: 0; -} - -.mytheme .v-menubar > .v-menubar-menuitem:first-child:last-child { - border-radius: 3px; -} - -.mytheme .v-menubar > .v-menubar-menuitem:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-menubar > .v-menubar-menuitem:hover { - zoom: 1; -} - -.mytheme .v-menubar > .v-menubar-menuitem:hover:before { - background-color: rgba(186, 186, 186, 0.1); - border: none; -} - -.mytheme .v-menubar > .v-menubar-menuitem:active:before { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-menubar > .v-menubar-menuitem .v-icon { - margin: 0 4px 0 -4px; - cursor: inherit; -} - -.mytheme .v-menubar > .v-menubar-menuitem[class*="-icon-only"] { - width: 37px; - padding: 0; -} - -.mytheme .v-menubar > .v-menubar-menuitem[class*="-icon-only"] .v-icon { - margin: 0; -} - -.mytheme .v-menubar > .v-menubar-menuitem-checked { - -webkit-box-shadow: none; - box-shadow: none; - background-color: #ededed; - background-image: -webkit-linear-gradient(bottom, #ededed 2%, #e9e9e9 98%); - background-image: linear-gradient(to top,#ededed 2%, #e9e9e9 98%); - color: #181818; -} - -.mytheme .v-disabled > .v-menubar-menuitem, .mytheme .v-menubar > .v-menubar-menuitem-disabled { - cursor: default; -} - -.mytheme .v-disabled > .v-menubar-menuitem:before, .mytheme .v-menubar > .v-menubar-menuitem-disabled:before { - display: none; -} - -.mytheme .v-menubar-menuitem-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-menubar > .v-menubar-menuitem-selected { - color: #ecf2f8; - - - - border-radius: 0; - border: 1px solid #1362b1; - border-top-color: #156ab3; - border-bottom-color: #1156a8; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca; - box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); - border-top-width: 0; - border-left-width: 0; - border-bottom-width: 0; - z-index: 2; -} - -.mytheme .v-menubar > .v-menubar-menuitem-selected:hover:before { - background: none; -} - -.mytheme .v-menubar .v-menubar-submenu-indicator { - display: none; -} - -.mytheme .v-menubar .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:after { - font-family: ThemeIcons; - content: "\f078"; - font-size: 0.7em; - vertical-align: 0.15em; - margin: 0 -0.2em 0 0.5em; - opacity: 0.5; -} - -.mytheme .v-menubar .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:empty:after { - margin-left: -0.2em; -} - -.mytheme .v-menubar-popup { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - padding: 4px 4px; - margin: 5px 0 0 1px !important; -} - -.mytheme .v-menubar-popup[class*="animate-in"] { - -webkit-animation: valo-overlay-animate-in 120ms; - -moz-animation: valo-overlay-animate-in 120ms; - animation: valo-overlay-animate-in 120ms; -} - -.mytheme .v-menubar-popup[class*="animate-out"] { - -webkit-animation: valo-animate-out-fade 120ms; - -moz-animation: valo-animate-out-fade 120ms; - animation: valo-animate-out-fade 120ms; -} - -.mytheme .v-menubar-popup .v-menubar-submenu { - outline: none; -} - -.mytheme .v-menubar-popup .v-menubar-menuitem { - display: block; - cursor: pointer; - line-height: 27px; - padding: 0 20px 0 10px; - border-radius: 3px; - font-weight: 400; - white-space: nowrap; - position: relative; - padding-left: 32px; - padding-right: 37px; - position: relative; -} - -.mytheme .v-menubar-popup .v-menubar-menuitem:active:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: #0957a6; - opacity: 0.15; - filter: alpha(opacity=15.0) ; - pointer-events: none; - border-radius: inherit; -} - -.mytheme .v-menubar-popup .v-menubar-menuitem .v-icon { - max-height: 27px; - margin-right: 5px; - min-width: 1em; -} - -.mytheme .v-menubar-popup .v-menubar-submenu-indicator { - display: none; -} - -.mytheme .v-menubar-popup .v-menubar-submenu-indicator + .v-menubar-menuitem-caption:after { - position: absolute; - right: 10px; - font-family: ThemeIcons; - content: "\f054"; - line-height: 29px; -} - -.mytheme .v-menubar-popup .v-menubar-menuitem-selected { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-menubar-popup .v-menubar-separator { - display: block; - margin: 4px 0; - height: 0; - overflow: hidden; - border-bottom: 1px solid #e4e4e4; -} - -.mytheme .v-menubar-popup [class*="checked"] .v-menubar-menuitem-caption:before { - content: "\f00c"; - font-family: ThemeIcons; - position: absolute; - left: 10px; -} - -.mytheme .v-menubar-popup [class*="unchecked"] .v-menubar-menuitem-caption:before { - content: ""; -} - -.mytheme .v-menubar-popup [class*="disabled"] { - cursor: default; -} - -.mytheme .v-menubar-small { - height: 31px; - padding: 0 14px; - - font-weight: 400; - - cursor: default; - border-radius: 4px; - padding: 0; - text-align: left; - line-height: 29px; - font-size: 14px; -} - -.mytheme .v-menubar-small:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-menubar-small > .v-menubar-menuitem { - padding: 0 12px; -} - -.mytheme .v-menubar-small > .v-menubar-menuitem[class*="-icon-only"] { - width: 31px; -} - -.mytheme .v-menubar-borderless { - border: none; - border-radius: 0; - padding: 1px; - -webkit-box-shadow: none; - box-shadow: none; - text-shadow: none; - background: transparent; - color: inherit; -} - -.mytheme .v-menubar-borderless:focus:after { - display: none; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem { - -webkit-box-shadow: none; - box-shadow: none; - border: none; - margin-right: 1px; - border-radius: 4px; - color: #197de1; - padding: 0 12px; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem:first-child, .mytheme .v-menubar-borderless .v-menubar-menuitem:last-child, .mytheme .v-menubar-borderless .v-menubar-menuitem:first-child:last-child { - border-radius: 4px; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem:before { - content: none; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem:hover { - color: #4396ea; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem:active { - color: inherit; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem-checked, .mytheme .v-menubar-borderless .v-menubar-menuitem-checked:first-child { - border: 1px solid #c5c5c5; - color: #197de1; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .mytheme .v-menubar-borderless .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption { - position: relative; - top: -1px; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem-selected { - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem-selected:hover { - color: #ecf2f8; -} - -.mytheme .v-menubar-borderless .v-menubar-menuitem-disabled, .mytheme .v-menubar-borderless .v-menubar-menuitem-disabled:hover { - color: inherit; -} - -.mytheme .v-radiobutton { - position: relative; - line-height: 19px; - white-space: nowrap; -} - -.mytheme .v-radiobutton.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-radiobutton { - padding-left: 25px; -} - -:root .mytheme .v-radiobutton label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-radiobutton > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-radiobutton > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-radiobutton > input ~ label:before, :root .mytheme .v-radiobutton > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 19px; - height: 19px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 13px; - text-align: center; -} - -:root .mytheme .v-radiobutton > input ~ label:before { - height: 18.5px; - padding: 0 9px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 19px; -} - -:root .mytheme .v-radiobutton > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-radiobutton > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-radiobutton > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-radiobutton > .v-icon, .mytheme .v-radiobutton > label .v-icon { - margin: 0 6px 0 3px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-radiobutton.v-disabled > label, .mytheme .v-radiobutton.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-radiobutton.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-radiobutton.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-radiobutton.v-readonly > label, .mytheme .v-radiobutton.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-radiobutton.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-radiobutton.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-radiobutton.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -:root .mytheme .v-radiobutton > input:checked ~ label:after { - width: 7px; - height: 7px; - top: 6px; - left: 6px; - background: #197de1; -} - -:root .mytheme .v-radiobutton > input ~ label:before, :root .mytheme .v-radiobutton > input ~ label:after { - border-radius: 50%; - content: ""; -} - -.mytheme .v-select-optiongroup .v-radiobutton, .mytheme .v-select-optiongroup .v-checkbox { - display: block; - margin: 9px 16px 0 0; -} - -.mytheme .v-select-optiongroup .v-radiobutton:first-child, .mytheme .v-select-optiongroup .v-checkbox:first-child { - margin-top: 6px; -} - -.mytheme .v-select-optiongroup .v-radiobutton:last-child, .mytheme .v-select-optiongroup .v-checkbox:last-child { - margin-bottom: 6px; -} - -.mytheme .v-select-optiongroup.v-has-width label { - white-space: normal; -} - -.mytheme .v-select-optiongroup-small { - font-size: 14px; -} - -.mytheme .v-select-optiongroup-small .v-checkbox { - position: relative; - line-height: 16px; - white-space: nowrap; -} - -.mytheme .v-select-optiongroup-small .v-checkbox.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox { - padding-left: 21px; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input ~ label:before, :root .mytheme .v-select-optiongroup-small .v-checkbox > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 16px; - height: 16px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 11px; - text-align: center; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input ~ label:before { - height: 15.5px; - padding: 0 7px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 16px; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-select-optiongroup-small .v-checkbox > .v-icon, .mytheme .v-select-optiongroup-small .v-checkbox > label .v-icon { - margin: 0 5px 0 3px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-select-optiongroup-small .v-checkbox.v-disabled > label, .mytheme .v-select-optiongroup-small .v-checkbox.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-small .v-checkbox.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-select-optiongroup-small .v-checkbox.v-readonly > label, .mytheme .v-select-optiongroup-small .v-checkbox.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-select-optiongroup-small .v-checkbox.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-select-optiongroup-small .v-checkbox.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton { - position: relative; - line-height: 16px; - white-space: nowrap; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton { - padding-left: 21px; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 16px; - height: 16px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 11px; - text-align: center; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:before { - height: 15.5px; - padding: 0 7px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 16px; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton > .v-icon, .mytheme .v-select-optiongroup-small .v-radiobutton > label .v-icon { - margin: 0 5px 0 3px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton.v-disabled > label, .mytheme .v-select-optiongroup-small .v-radiobutton.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton.v-readonly > label, .mytheme .v-select-optiongroup-small .v-radiobutton.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after { - width: 6px; - height: 6px; - top: 5px; - left: 5px; - background: #197de1; -} - -:root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .mytheme .v-select-optiongroup-small .v-radiobutton > input ~ label:after { - border-radius: 50%; - content: ""; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton, .mytheme .v-select-optiongroup-small .v-checkbox { - display: block; - margin: 8px 16px 0 0; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton:first-child, .mytheme .v-select-optiongroup-small .v-checkbox:first-child { - margin-top: 5px; -} - -.mytheme .v-select-optiongroup-small .v-radiobutton:last-child, .mytheme .v-select-optiongroup-small .v-checkbox:last-child { - margin-bottom: 5px; -} - -.mytheme .v-select-optiongroup-small.v-has-width label { - white-space: normal; -} - -.mytheme .v-select-optiongroup-large { - font-size: 20px; -} - -.mytheme .v-select-optiongroup-large .v-checkbox { - position: relative; - line-height: 22px; - white-space: nowrap; -} - -.mytheme .v-select-optiongroup-large .v-checkbox.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox { - padding-left: 29px; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input ~ label:before, :root .mytheme .v-select-optiongroup-large .v-checkbox > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 22px; - height: 22px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 15px; - text-align: center; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input ~ label:before { - height: 22px; - padding: 0 10px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 22px; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-select-optiongroup-large .v-checkbox > .v-icon, .mytheme .v-select-optiongroup-large .v-checkbox > label .v-icon { - margin: 0 7px 0 4px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-select-optiongroup-large .v-checkbox.v-disabled > label, .mytheme .v-select-optiongroup-large .v-checkbox.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-large .v-checkbox.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-select-optiongroup-large .v-checkbox.v-readonly > label, .mytheme .v-select-optiongroup-large .v-checkbox.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-select-optiongroup-large .v-checkbox.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-select-optiongroup-large .v-checkbox.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton { - position: relative; - line-height: 22px; - white-space: nowrap; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton.v-has-width label { - white-space: normal; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton { - padding-left: 29px; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton label { - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - cursor: pointer; - display: inline-block; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input { - position: absolute; - clip: rect(0, 0, 0, 0); - left: 0.2em; - top: 0.2em; - z-index: 0; - margin: 0; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input:focus ~ label:before { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:after { - content: ""; - display: inline-block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 22px; - height: 22px; - position: absolute; - top: 0; - left: 0; - border-radius: 4px; - font-size: 15px; - text-align: center; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:before { - height: 22px; - padding: 0 10px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - padding: 0; - height: 22px; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:after { - content: "\f00c"; - font-family: ThemeIcons; - color: transparent; - -webkit-transition: color 100ms; - -moz-transition: color 100ms; - transition: color 100ms; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input:active ~ label:after { - background-color: rgba(125, 125, 125, 0.2); -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after { - color: #197de1; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton > .v-icon, .mytheme .v-select-optiongroup-large .v-radiobutton > label .v-icon { - margin: 0 7px 0 4px; - min-width: 1em; - cursor: pointer; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton.v-disabled > label, .mytheme .v-select-optiongroup-large .v-radiobutton.v-disabled > .v-icon { - cursor: default; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton.v-disabled > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton.v-disabled > input:active ~ label:after { - background: transparent; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton.v-readonly > label, .mytheme .v-select-optiongroup-large .v-radiobutton.v-readonly > .v-icon { - cursor: default; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton.v-readonly > label > .v-icon { - cursor: default; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton.v-readonly > input:active ~ label:after { - background: transparent; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton.v-readonly > input ~ label:after { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after { - width: 8px; - height: 8px; - top: 7px; - left: 7px; - background: #197de1; -} - -:root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .mytheme .v-select-optiongroup-large .v-radiobutton > input ~ label:after { - border-radius: 50%; - content: ""; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton, .mytheme .v-select-optiongroup-large .v-checkbox { - display: block; - margin: 11px 16px 0 0; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton:first-child, .mytheme .v-select-optiongroup-large .v-checkbox:first-child { - margin-top: 7px; -} - -.mytheme .v-select-optiongroup-large .v-radiobutton:last-child, .mytheme .v-select-optiongroup-large .v-checkbox:last-child { - margin-bottom: 7px; -} - -.mytheme .v-select-optiongroup-large.v-has-width label { - white-space: normal; -} - -.mytheme .v-select-optiongroup-horizontal { - white-space: nowrap; -} - -.mytheme .v-select-optiongroup-horizontal .v-radiobutton, .mytheme .v-select-optiongroup-horizontal .v-checkbox { - display: inline-block; -} - -.mytheme .v-select-optiongroup-horizontal.v-has-width { - white-space: normal; -} - -.mytheme .v-select-optiongroup-horizontal.v-has-width label { - white-space: nowrap; -} - -.mytheme .v-link { - cursor: pointer; - color: #197de1; - text-decoration: underline; - font-weight: inherit; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-link:hover { - color: #4396ea; -} - -.mytheme .v-link.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-link a { - cursor: inherit; - color: inherit; - text-decoration: inherit; - -webkit-transition: inherit; - -moz-transition: inherit; - transition: inherit; -} - -.mytheme .v-link .v-icon { - cursor: inherit; -} - -.mytheme .v-link-small { - font-size: 14px; -} - -.mytheme .v-link-large { - font-size: 20px; -} - -.mytheme .v-window { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098); - padding: 0; - min-width: 148px !important; - min-height: 37px !important; - white-space: nowrap; - overflow: hidden !important; - -webkit-transition: width 200ms, height 200ms, top 200ms, left 200ms; - -moz-transition: width 200ms, height 200ms, top 200ms, left 200ms; - transition: width 200ms, height 200ms, top 200ms, left 200ms; -} - -.mytheme .v-window[class*="animate-in"] { - -webkit-animation: valo-animate-in-fade 140ms; - -moz-animation: valo-animate-in-fade 140ms; - animation: valo-animate-in-fade 140ms; -} - -.mytheme .v-window[class*="animate-out"] { - -webkit-animation: valo-animate-out-scale-down-fade 100ms; - -moz-animation: valo-animate-out-scale-down-fade 100ms; - animation: valo-animate-out-scale-down-fade 100ms; -} - -.mytheme .v-window.v-window-animate-in { - -webkit-transition: none; - -moz-transition: none; - transition: none; -} - -.mytheme .v-window-modalitycurtain { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - background-color: #222; - background-image: -webkit-radial-gradient(50% 50%, circle, #222, #0e0e0e); - background-image: radial-gradient( circle at 50% 50%, #222, #0e0e0e); - opacity: 0.72; - filter: alpha(opacity=72) ; - -webkit-animation: valo-animate-in-fade 400ms 100ms backwards; - -moz-animation: valo-animate-in-fade 400ms 100ms backwards; - animation: valo-animate-in-fade 400ms 100ms backwards; -} - -.v-op12 .mytheme .v-window-modalitycurtain { - -webkit-animation: none; - -moz-animation: none; - animation: none; -} - -.mytheme .v-window-draggingCurtain { - position: fixed !important; -} - -.mytheme .v-window-resizingCurtain + .v-window, .mytheme .v-window-draggingCurtain + .v-window { - -webkit-transition: none; - -moz-transition: none; - transition: none; -} - -.mytheme .v-window-outerheader { - cursor: move; - position: absolute; - z-index: 2; - top: 0; - left: 0; - right: 0; - -webkit-transform: translatez(0); - -moz-transform: translatez(0); - -ms-transform: translatez(0); - -o-transform: translatez(0); - transform: translatez(0); -} - -.mytheme .v-window-outerheader:after { - content: ""; - position: absolute; - bottom: -1px; - right: 0; - left: 0; - height: 0; - border-top: 1px solid #dfdfdf; - border-color: rgba(197, 197, 197, 0.5); -} - -.mytheme .v-window-header { - line-height: 36px; - padding-left: 12px; - margin-right: 74px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - color: #7e7e7e; -} - -.mytheme .v-window-restorebox-disabled ~ .v-window-closebox ~ .v-window-header, .mytheme .v-window-maximizebox-disabled ~ .v-window-closebox ~ .v-window-header { - margin-right: 37px; -} - -.mytheme .v-window-restorebox-disabled ~ .v-window-closebox-disabled ~ .v-window-header, .mytheme .v-window-maximizebox-disabled ~ .v-window-closebox-disabled ~ .v-window-header { - margin-right: 12px; -} - -.mytheme .v-window-closebox, .mytheme .v-window-maximizebox, .mytheme .v-window-restorebox { - position: absolute; - z-index: 3; - top: 0; - right: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 33px; - height: 36px; - background-color: white; - line-height: 34px; - text-align: center; - cursor: pointer; - font-size: 21px; - color: #999999; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-window-closebox:focus, .mytheme .v-window-maximizebox:focus, .mytheme .v-window-restorebox:focus { - outline: none; -} - -.mytheme .v-window-closebox:hover, .mytheme .v-window-maximizebox:hover, .mytheme .v-window-restorebox:hover { - opacity: 1; - filter: none ; - color: #197de1; -} - -.mytheme .v-window-closebox:active, .mytheme .v-window-maximizebox:active, .mytheme .v-window-restorebox:active { - color: inherit; -} - -.mytheme .v-window-closebox { - padding-right: 4px; - border-radius: 0 4px 0 4px; -} - -.mytheme .v-window-closebox:before { - content: "\00d7"; -} - -.mytheme .v-window-maximizebox, .mytheme .v-window-restorebox { - right: 33px; - padding-left: 4px; - border-radius: 0 0 0 4px; -} - -.mytheme .v-window-maximizebox + .v-window-closebox, .mytheme .v-window-restorebox + .v-window-closebox { - border-bottom-left-radius: 0; -} - -.mytheme .v-window-closebox-disabled, .mytheme .v-window-resizebox-disabled, .mytheme .v-window-restorebox-disabled, .mytheme .v-window-maximizebox-disabled { - display: none; -} - -.mytheme .v-window-closebox-disabled + .v-window-closebox, .mytheme .v-window-resizebox-disabled + .v-window-closebox, .mytheme .v-window-restorebox-disabled + .v-window-closebox, .mytheme .v-window-maximizebox-disabled + .v-window-closebox { - width: 37px; - padding-right: 0; - border-bottom-left-radius: 4px; -} - -.mytheme .v-window-maximizebox:before { - content: "+"; -} - -.mytheme .v-window-restorebox:before { - content: "\2013"; -} - -.mytheme .v-window > .popupContent, .mytheme .v-window-wrap, .mytheme .v-window-contents, .mytheme .v-window-contents > .v-scrollable { - height: 100%; -} - -.mytheme .v-window-contents { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-radius: 4px; - margin-top: 0 !important; -} - -.mytheme .v-window-contents > .v-scrollable { - position: relative; -} - -.mytheme .v-window-contents > .v-scrollable > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-top"] > tbody > [class*="firstrow"] > td { - padding-top: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-bottom"] > tbody > [class*="lastrow"] > td { - padding-bottom: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] { - padding-left: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - left: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] { - padding-right: 12px; -} - -.mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h2, .mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h3, .mytheme .v-window-contents > .v-scrollable > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] > .v-label-h4 { - right: 12px; -} - -.mytheme .v-window-contents > .v-scrollable:focus { - outline: none; -} - -.mytheme .v-window-contents > .v-scrollable:before { - content: ""; - position: absolute; - z-index: 2; - top: 0; - height: 0; - border-top: 1px solid white; - left: 0; - right: 0; -} - -.mytheme .v-window-contents > .v-scrollable .v-panel-captionwrap:after { - border-color: #dfdfdf; -} - -.mytheme .v-window-contents > .v-scrollable .v-panel-content:before { - border-color: white; -} - -.mytheme .v-window-footer { - height: 0; -} - -.mytheme .v-window-resizebox { - position: absolute; - z-index: 1000; - right: 0; - bottom: 0; - width: 19px; - height: 19px; - cursor: nwse-resize; -} - -.v-ie8 .mytheme .v-window-resizebox { - background: #000; - filter: alpha(opacity=0.1); -} - -.v-ie8 .mytheme .v-window-resizebox, .v-ie9 .mytheme .v-window-resizebox { - cursor: se-resize; -} - -.mytheme .v-window-modalitycurtain:active ~ .v-window { - -webkit-animation: none; - -moz-animation: none; - animation: none; -} - -.mytheme .v-window-top-toolbar > .v-widget, .mytheme .v-window-bottom-toolbar > .v-widget { - vertical-align: top; -} - -.mytheme .v-window-top-toolbar .v-label, .mytheme .v-window-bottom-toolbar .v-label { - line-height: 36px; -} - -.mytheme .v-window-top-toolbar .v-spacing, .mytheme .v-window-bottom-toolbar .v-spacing { - width: 6px; -} - -.mytheme .v-window-top-toolbar.v-layout { - padding: 7px 12px; - position: relative; - z-index: 2; - border-top: 1px solid #dfdfdf; - border-bottom: 1px solid #dfdfdf; - background-color: #fafafa; -} - -.mytheme .v-window-top-toolbar.v-menubar { - margin: 12px 12px 6px; -} - -.mytheme .v-window-top-toolbar.v-menubar-borderless { - padding-left: 6px; - padding-right: 6px; - margin: 5px 0; -} - -.mytheme .v-window-bottom-toolbar.v-layout { - padding: 7px 12px; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #f0f0f0 0, #fafafa 4px); - background-image: linear-gradient(to bottom,#f0f0f0 0, #fafafa 4px); - border-top: 1px solid #dfdfdf; - border-radius: 0 0 4px 4px; -} - -.mytheme .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-layout { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - margin: -12px -12px 0; -} - -.mytheme .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar { - margin: 0; -} - -.mytheme .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar-borderless { - margin: -6px -6px 0; - padding: 0; -} - -.mytheme .v-margin-left.v-margin-right.v-margin-bottom .v-window-bottom-toolbar.v-layout { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - margin: 0 -12px -12px; -} - -.mytheme .v-tree { - position: relative; - white-space: nowrap; -} - -.mytheme .v-tree:focus { - outline: none; -} - -.mytheme .v-tree-node:before { - content: ""; - position: absolute; - display: inline-block; - z-index: 3; - width: 1.9em; - height: 28px; - cursor: pointer; - background: red; - opacity: 0; -} - -.v-ie8 .mytheme .v-tree-node:before { - position: static; - margin-left: -1.9em; - vertical-align: top; - content: "\f0da"; - font-family: ThemeIcons; - text-align: center; - background: transparent; -} - -.v-ie8 .mytheme .v-tree-node { - padding-left: 1.9em; -} - -.mytheme .v-tree-node-caption { - height: 28px; - line-height: 27px; - overflow: hidden; - white-space: nowrap; - vertical-align: top; -} - -.mytheme .v-tree-node-caption > div { - display: inline-block; - width: 100%; - position: relative; - z-index: 2; -} - -.mytheme .v-tree-node-caption > div:before { - content: "\f0da"; - font-family: ThemeIcons; - display: inline-block; - width: 0.5em; - text-align: center; - margin: 0 0.6em 0 0.8em; - -webkit-transition: all 100ms; - -moz-transition: all 100ms; - transition: all 100ms; -} - -.v-ie8 .mytheme .v-tree-node-caption > div:before { - display: none; -} - -.mytheme .v-tree-node-caption span { - padding-right: 28px; - cursor: pointer; - display: inline-block; - width: 100%; -} - -.v-ie .mytheme .v-tree-node-caption span { - width: auto; -} - -.mytheme .v-tree-node-caption .v-icon { - padding-right: 0; - width: auto; - min-width: 1em; -} - -.mytheme .v-tree-node-caption:after { - content: ""; - display: block; - vertical-align: top; - position: absolute; - z-index: 1; - left: 0; - margin-top: -28px; - width: 100%; - height: 28px; - border-radius: 4px; - opacity: 0; - -webkit-transition: opacity 120ms; - -moz-transition: opacity 120ms; - transition: opacity 120ms; -} - -.v-ie8 .mytheme .v-tree-node-caption:after { - content: none; -} - -.v-ie8 .mytheme .v-tree-node-caption { - display: inline-block; -} - -.mytheme .v-tree-node-expanded > .v-tree-node-caption > div:before { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); - content: "\f0da"; - font-family: ThemeIcons; -} - -.v-ie8 .mytheme .v-tree-node-expanded:before { - content: "\f0d7"; - font-family: ThemeIcons; -} - -.mytheme .v-tree-node-leaf:before, .mytheme .v-tree-node-leaf > .v-tree-node-caption > div:before { - visibility: hidden; -} - -.mytheme .v-tree-node-focused:after { - opacity: 1; - border: 1px solid #197de1; -} - -.v-ie8 .mytheme .v-tree-node-focused { - outline: 1px dotted #197de1; -} - -.mytheme .v-tree-node-selected { - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-tree-node-selected:after { - opacity: 1; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - border: none; -} - -.v-ie8 .mytheme .v-tree-node-selected { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); -} - -.mytheme .v-tree-node-children { - padding-left: 19px; -} - -.v-ie8 .mytheme .v-tree-node-children { - padding-left: 0; -} - -.mytheme .v-tree-node-drag-top:before, .mytheme .v-tree-node-drag-bottom:after, .mytheme .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded > .v-tree-node-children:before { - content: "\2022"; - display: block; - position: absolute; - height: 2px; - width: 100%; - background: #197de1; - font-size: 32px; - line-height: 2px; - color: #197de1; - text-indent: -4px; - text-shadow: 0 0 1px #fafafa, 0 0 1px #fafafa; - opacity: 1; - visibility: visible; -} - -.mytheme .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded:after { - content: none; -} - -.mytheme .v-tree-node-caption-drag-center { - -webkit-box-shadow: 0 0 0 2px #197de1; - box-shadow: 0 0 0 2px #197de1; - position: relative; - border-radius: 4px; -} - -.v-ie8 .mytheme .v-tree-node-caption-drag-center { - outline: 2px solid #197de1; -} - -.v-ff .mytheme .v-tree-node-drag-top:before, .v-ff .mytheme .v-tree-node-drag-bottom:after { - line-height: 1px; -} - -.v-ie8 .mytheme .v-tree-node-drag-top:before, .v-ie8 .mytheme .v-tree-node-drag-bottom:after { - line-height: 0; -} - -.mytheme .v-table { - position: relative; - background: #fafafa; - color: #464646; - overflow: hidden; -} - -.mytheme .v-table-header table, .mytheme .v-table-footer table, .mytheme .v-table-table { - -webkit-box-shadow: 0 0 0 1px #d4d4d4; - box-shadow: 0 0 0 1px #d4d4d4; -} - -.v-ie8 .mytheme .v-table-header table, .v-ie8 .mytheme .v-table-footer table, .v-ie8 .mytheme .v-table-table { - outline: 1px solid #d4d4d4; -} - -.mytheme .v-table-header-wrap, .mytheme .v-table-footer-wrap, .mytheme .v-table-header-drag { - border: 1px solid #d4d4d4; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - white-space: nowrap; - font-size: 14px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-table-header-wrap { - position: relative; - border-bottom: none; -} - -.mytheme .v-table-footer-wrap { - border-top: none; -} - -.mytheme .v-table-footer td { - border-left: 1px solid #d4d4d4; -} - -.mytheme .v-table-footer-container, .mytheme .v-table-caption-container { - overflow: hidden; - line-height: 1; - min-height: 37px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.v-ie8 .mytheme .v-table-footer-container, .v-ie8 .mytheme .v-table-caption-container { - min-height: 14px; -} - -.mytheme .v-table-footer-container { - padding: 11px 12px 12px; - float: right; -} - -.mytheme [class^="v-table-header-cell"] { - position: relative; -} - -.mytheme .v-table-caption-container, .mytheme .v-table-header-drag { - padding: 12px 12px 11px; - border-left: 1px solid #d4d4d4; -} - -.mytheme .v-table-caption-container-align-right { - padding-right: 4px; -} - -.mytheme .v-table-resizer { - height: 37px; - width: 8px; - cursor: e-resize; - cursor: col-resize; - position: relative; - right: -4px; - z-index: 1; - margin-left: -8px; -} - -.mytheme .v-table-cell-content { - border-left: 1px solid #d4d4d4; - overflow: hidden; - height: 37px; - vertical-align: middle; -} - -.mytheme .v-table-cell-content:first-child { - border-left: none; - padding-left: 1px; -} - -.mytheme .v-table-header td:first-child .v-table-caption-container, .mytheme .v-table-footer td:first-child { - border-left-color: transparent; -} - -.mytheme .v-table-cell-wrapper { - line-height: 1; - padding: 0 12px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-right: 0 !important; -} - -.mytheme .v-table-cell-wrapper > .v-widget { - margin: 3px -6px; -} - -.mytheme .v-table-cell-wrapper > .v-widget.v-label, .mytheme .v-table-cell-wrapper > .v-widget.v-checkbox, .mytheme .v-table-cell-wrapper > .v-widget.v-select-optiongroup { - margin: 0; -} - -.mytheme .v-table-cell-wrapper > .v-widget.v-progressbar { - margin-left: 0; - margin-right: 0; -} - -.mytheme .v-table-body { - border: 1px solid #d4d4d4; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.mytheme .v-table-table { - background-color: white; - white-space: nowrap; -} - -.mytheme .v-table-table td { - border-top: 1px solid #d4d4d4; -} - -.mytheme .v-table-table tr:first-child > td { - border-top: none; -} - -.mytheme .v-table-row { - background-color: white; - cursor: pointer; -} - -.mytheme .v-table-row-odd { - background-color: #f5f5f5; - cursor: pointer; -} - -.mytheme .v-table-body-noselection .v-table-row, .mytheme .v-table-body-noselection .v-table-row-odd { - cursor: default; -} - -.mytheme .v-table [class*="-row"].v-selected { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - background-origin: border-box; - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-table [class*="-row"].v-selected + .v-selected { - background: #166ed5; -} - -.mytheme .v-table [class*="-row"].v-selected + .v-selected td { - border-top-color: #166ed5; -} - -.mytheme .v-table [class*="-row"].v-selected .v-table-cell-content { - border-color: transparent; - border-left-color: #1d69b4; -} - -.mytheme .v-table [class*="-row"].v-selected .v-table-cell-content:first-child { - border-left-color: transparent; -} - -.mytheme .v-table-header-cell-asc .v-table-sort-indicator, .mytheme .v-table-header-cell-desc .v-table-sort-indicator { - background: transparent; - width: 19px; - height: 37px; - line-height: 37px; - margin-left: -19px; -} - -.mytheme .v-table-header-cell-asc .v-table-sort-indicator:before, .mytheme .v-table-header-cell-desc .v-table-sort-indicator:before { - font-style: normal; - font-weight: normal; - display: inline-block; -} - -.mytheme .v-table-header-cell-asc .v-table-sort-indicator:before { - content: "\f0de"; - font-family: ThemeIcons; -} - -.mytheme .v-table-header-cell-desc .v-table-sort-indicator:before { - content: "\f0dd"; - font-family: ThemeIcons; -} - -.mytheme [class*="rowheader"] span.v-icon { - min-width: 1em; -} - -.mytheme .v-table-focus { - outline: 1px solid #197de1; - outline-offset: -1px; -} - -.mytheme .v-drag-element.v-table-focus, .mytheme .v-drag-element .v-table-focus { - outline: none; -} - -.mytheme .v-table-header-drag { - position: absolute; - opacity: 0.9; - filter: alpha(opacity=90) ; - margin-top: -19px; - z-index: 30000; - line-height: 1; -} - -.mytheme .v-table-focus-slot-right { - border-right: 3px solid #197de1; - right: -2px; - margin-left: -11px !important; -} - -.mytheme .v-table-focus-slot-left { - float: left; - border-left: 3px solid #197de1; - left: -1px; - right: auto; - margin-left: 0 !important; - margin-right: -11px; -} - -.mytheme .v-table-column-selector { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - position: absolute; - z-index: 2; - top: 0; - right: 0; - width: 19px; - height: 19px; - line-height: 19px; - padding: 0; - border-top-width: 0; - border-right-width: 0; - border-radius: 0 0 0 4px; - cursor: pointer; - text-align: center; - opacity: 0; - filter: alpha(opacity=0) ; - -webkit-transition: opacity 200ms 2s; - -moz-transition: opacity 200ms 2s; - transition: opacity 200ms 2s; -} - -.mytheme .v-table-column-selector:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-table-column-selector:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-table-column-selector:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-table-column-selector:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-table-column-selector:after { - content: ""; - position: absolute; - border: none; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.mytheme .v-table-column-selector:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-table-column-selector:before { - font-family: ThemeIcons; - content: "\f013"; -} - -.mytheme .v-table-header-wrap:hover .v-table-column-selector { - opacity: 1; - filter: none ; - -webkit-transition-delay: 200ms; - -moz-transition-delay: 200ms; - transition-delay: 200ms; -} - -.mytheme .v-on:before, .mytheme .v-off:before { - content: "\f00c"; - font-family: ThemeIcons; - font-size: 0.9em; - margin-right: 6px; -} - -.mytheme .v-on div, .mytheme .v-off div { - display: inline; -} - -.mytheme .v-on.v-disabled, .mytheme .v-off.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-off:before { - visibility: hidden; -} - -.mytheme tbody.v-drag-element { - display: block; - overflow: visible; - -webkit-box-shadow: none; - box-shadow: none; - background: transparent; - opacity: 1; - filter: none ; -} - -.mytheme tbody.v-drag-element tr { - display: block; - - - -webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - border-radius: 4px; - overflow: hidden; - opacity: 0.5; - filter: alpha(opacity=50) ; - background: white; -} - -.mytheme .v-table-body { - position: relative; - z-index: 1; -} - -.mytheme .v-table-scrollposition { - position: absolute; - top: 50%; - width: 100%; - height: 37px; - line-height: 37px; - margin: -19px 0 0 !important; - text-align: center; -} - -.mytheme .v-table-drag { - overflow: visible; -} - -.mytheme .v-table-drag .v-table-body { - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - border-color: #197de1; -} - -.v-ie8 .mytheme .v-table-drag .v-table-body { - border-color: #197de1; -} - -.mytheme .v-table-drag .v-table-body .v-table-focus { - outline: none; -} - -.mytheme .v-table-row-drag-middle .v-table-cell-content { - background-color: #d1e5f9; - color: #214060; -} - -.mytheme .v-table-row-drag-bottom td.v-table-cell-content { - border-bottom: 2px solid #197de1; - height: 35px; -} - -.mytheme .v-table-row-drag-bottom .v-table-cell-wrapper { - margin-bottom: -2px; -} - -.mytheme .v-table-row-drag-top td.v-table-cell-content { - border-top: 2px solid #197de1; - height: 36px; -} - -.mytheme .v-table-row-drag-top .v-table-cell-wrapper { - margin-top: -1px; -} - -.mytheme .v-table-no-stripes .v-table-row, .mytheme .v-table-no-stripes .v-table-row-odd { - background: transparent; -} - -.mytheme .v-table-no-vertical-lines .v-table-cell-content { - border-left: none; - padding-left: 1px; -} - -.mytheme .v-table-no-vertical-lines.v-treetable .v-table-cell-content { - padding-left: 13px; -} - -.mytheme .v-table-no-horizontal-lines .v-table-cell-content { - border-top: none; - border-bottom: none; -} - -.mytheme .v-table-no-horizontal-lines .v-table-row-drag-top .v-table-cell-content, .mytheme .v-table-no-horizontal-lines .v-table-row-drag-bottom .v-table-cell-content { - height: 36px; -} - -.mytheme .v-table-no-header .v-table-header-wrap { - display: none; -} - -.mytheme .v-table-borderless .v-table-header-wrap, .mytheme .v-table-borderless .v-table-footer-wrap, .mytheme .v-table-borderless .v-table-header-drag, .mytheme .v-table-borderless .v-table-body { - border: none; -} - -.mytheme .v-table-borderless .v-table-header-wrap { - border-bottom: 1px solid #d9d9d9; -} - -.mytheme .v-table-borderless .v-table-footer-wrap { - border-top: 1px solid #d9d9d9; -} - -.mytheme .v-table-compact .v-table-header-wrap, .mytheme .v-table-compact .v-table-footer-wrap, .mytheme .v-table-compact .v-table-header-drag, .mytheme .v-table-small .v-table-header-wrap, .mytheme .v-table-small .v-table-footer-wrap, .mytheme .v-table-small .v-table-header-drag { - font-size: 14px; -} - -.mytheme .v-table-compact .v-table-footer-container, .mytheme .v-table-small .v-table-footer-container { - padding: 8px 7px 9px; -} - -.mytheme .v-table-compact .v-table-caption-container, .mytheme .v-table-compact .v-table-header-drag, .mytheme .v-table-small .v-table-caption-container, .mytheme .v-table-small .v-table-header-drag { - padding-top: 9px; - padding-bottom: 8px; - padding-left: 6px; - padding-right: 6px; -} - -.mytheme .v-table-compact .v-table-caption-container-align-right, .mytheme .v-table-small .v-table-caption-container-align-right { - padding-right: 0; -} - -.mytheme .v-table-compact .v-table-resizer, .mytheme .v-table-small .v-table-resizer { - height: 31px; -} - -.mytheme .v-table-compact .v-table-cell-content, .mytheme .v-table-small .v-table-cell-content { - height: 31px; -} - -.mytheme .v-table-compact .v-table-cell-wrapper, .mytheme .v-table-small .v-table-cell-wrapper { - padding-left: 6px; - padding-right: 6px; -} - -.mytheme .v-table-compact .v-table-cell-wrapper > .v-widget, .mytheme .v-table-small .v-table-cell-wrapper > .v-widget { - margin: 2px -3px; -} - -.mytheme .v-table-compact .v-table-cell-wrapper > .v-widget.v-label, .mytheme .v-table-compact .v-table-cell-wrapper > .v-widget.v-checkbox, .mytheme .v-table-compact .v-table-cell-wrapper > .v-widget.v-select-optiongroup, .mytheme .v-table-small .v-table-cell-wrapper > .v-widget.v-label, .mytheme .v-table-small .v-table-cell-wrapper > .v-widget.v-checkbox, .mytheme .v-table-small .v-table-cell-wrapper > .v-widget.v-select-optiongroup { - margin: 0; -} - -.mytheme .v-table-compact .v-table-cell-wrapper > .v-widget.v-progressbar, .mytheme .v-table-small .v-table-cell-wrapper > .v-widget.v-progressbar { - margin-left: 0; - margin-right: 0; -} - -.mytheme .v-table-compact .v-table-header-cell-asc .v-table-sort-indicator, .mytheme .v-table-compact .v-table-header-cell-desc .v-table-sort-indicator, .mytheme .v-table-small .v-table-header-cell-asc .v-table-sort-indicator, .mytheme .v-table-small .v-table-header-cell-desc .v-table-sort-indicator { - height: 31px; - line-height: 31px; -} - -.mytheme .v-table-compact .v-table-header-drag, .mytheme .v-table-small .v-table-header-drag { - margin-top: -16px; -} - -.mytheme .v-table-compact.v-treetable .v-table-cell-wrapper, .mytheme .v-table-small.v-treetable .v-table-cell-wrapper { - padding-left: 0; - padding-right: 0; - min-height: 16px; -} - -.mytheme .v-table-compact.v-treetable .v-table-cell-content, .mytheme .v-table-small.v-treetable .v-table-cell-content { - padding-left: 6px; - padding-right: 6px; -} - -.mytheme .v-table-compact.v-treetable .v-table-cell-content:first-child, .mytheme .v-table-small.v-treetable .v-table-cell-content:first-child { - padding-left: 7px; -} - -.mytheme .v-table-compact.v-treetable .v-table-footer-container, .mytheme .v-table-small.v-treetable .v-table-footer-container { - padding-left: 6px; - padding-right: 6px; -} - -.mytheme .v-table-compact .v-table-row-drag-top .v-table-cell-content, .mytheme .v-table-compact .v-table-row-drag-bottom .v-table-cell-content, .mytheme .v-table-small .v-table-row-drag-top .v-table-cell-content, .mytheme .v-table-small .v-table-row-drag-bottom .v-table-cell-content { - height: 30px; -} - -.mytheme .v-table-small { - font-size: 14px; -} - -.mytheme .v-table-small.v-treetable .v-table-cell-wrapper { - min-height: 14px; -} - -.mytheme .v-treetable [class*="caption-container"], .mytheme .v-treetable [class*="footer-container"], .mytheme .v-treetable [class*="cell-wrapper"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding-left: 0; - padding-right: 0; -} - -.mytheme .v-treetable [class*="caption-container"], .mytheme .v-treetable [class*="footer-container"] { - min-height: 14px; -} - -.mytheme .v-treetable [class*="cell-wrapper"] { - min-height: 16px; -} - -.mytheme .v-treetable [class*="caption-container"] { - padding-left: 12px; -} - -.mytheme .v-treetable [class*="caption-container-align-right"] { - padding-left: 20px; -} - -.mytheme .v-treetable [class*="footer-container"] { - padding-right: 12px; -} - -.mytheme .v-treetable [class*="cell-content"] { - padding-left: 12px; - padding-right: 12px; -} - -.mytheme .v-treetable [class*="cell-content"]:first-child { - padding-left: 13px; -} - -.mytheme .v-treetable-treespacer { - display: inline-block; - position: absolute; - width: 19px !important; - margin-left: -25px; - text-align: center; - cursor: pointer; -} - -.mytheme .v-treetable-node-closed:before { - content: "\f0da"; - font-family: ThemeIcons; -} - -.mytheme .v-treetable-node-open:before { - content: "\f0d7"; - font-family: ThemeIcons; -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter { - width: 1px; -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter:after { - left: -6px; - right: -6px; -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - height: auto; - padding: 0; - border-radius: 0; - background-color: #fafafa; - background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%); -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-hsplitter div:before:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-splitpanel-horizontal > div > .v-splitpanel-second-container { - margin-left: 1px; -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter { - height: 1px; -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter:after { - top: -6px; - bottom: -6px; -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - height: auto; - padding: 0; - border-radius: 0; -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-splitpanel-vertical > div > .v-splitpanel-vsplitter div:before:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter { - width: 12px; -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter:after { - left: 0px; - right: 0px; -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - height: auto; - padding: 0; - border-radius: 0; - background-color: #fafafa; - background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%); -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:before:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-hsplitter div:after { - content: ""; - border: 1px solid #dadada; - border-top-color: #bababa; - border-left-color: #bababa; - position: absolute; - top: 50%; - left: 50%; - width: 0; - height: 37px; - margin-left: -1px; - margin-top: -19px; -} - -.mytheme .v-splitpanel-horizontal.large > div > .v-splitpanel-second-container { - margin-left: 12px; -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter { - height: 12px; -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter:after { - top: 0px; - bottom: 0px; -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - height: auto; - padding: 0; - border-radius: 0; -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:before:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-splitpanel-vertical.large > div > .v-splitpanel-vsplitter div:after { - content: ""; - border: 1px solid #dadada; - border-top-color: #bababa; - border-left-color: #bababa; - position: absolute; - top: 50%; - left: 50%; - width: 37px; - height: 0; - margin-left: -19px; - margin-top: -1px; -} - -.mytheme .v-progressbar-wrapper { - border-radius: 4px; - height: 9px; - background-color: #d4d4d4; - background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%); - background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - min-width: 74px; -} - -.mytheme .v-progressbar-indicator { - border-radius: 4px; - height: inherit; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - - - border: 1px solid #1362b1; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - max-width: 100%; - min-width: 8px; - -webkit-transition: width 160ms; - -moz-transition: width 160ms; - transition: width 160ms; -} - -.mytheme .v-progressbar-point .v-progressbar-indicator { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - border: none; - text-align: right; - overflow: hidden; -} - -.mytheme .v-progressbar-point .v-progressbar-indicator:before { - content: ""; - display: inline-block; - border-radius: 4px; - height: inherit; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - - - border: 1px solid #1362b1; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - max-width: 100%; - width: 9px; - vertical-align: top; -} - -.mytheme .v-progressbar-indeterminate { - height: 24px !important; - width: 24px !important; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 2px solid rgba(25, 125, 225, 0.2); - border-top-color: #197de1; - border-right-color: #197de1; - border-radius: 100%; - -webkit-animation: v-rotate-360 500ms infinite linear; - -moz-animation: v-rotate-360 500ms infinite linear; - animation: v-rotate-360 500ms infinite linear; - pointer-events: none; -} - -.v-ie8 .mytheme .v-progressbar-indeterminate, .v-ie9 .mytheme .v-progressbar-indeterminate { - border: none; - border-radius: 4px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%; - background-size: 80%; -} - -.v-ie8 .mytheme .v-progressbar-indeterminate { - min-width: 30px; - min-height: 30px; -} - -.mytheme .v-progressbar-indeterminate .v-progressbar-wrapper { - display: none; -} - -.mytheme .v-slider { - position: relative; -} - -.mytheme .v-slider:focus { - outline: none; -} - -.mytheme .v-slider:focus .v-slider-handle:after { - opacity: 1; -} - -.v-ie8 .mytheme .v-slider:focus .v-slider-handle:after { - visibility: visible; -} - -.mytheme .v-slider.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-slider-base { - border-radius: 4px; - height: 9px; - background-color: #d4d4d4; - background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%); - background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - min-width: 74px; - height: 6px; - margin: 16px 11px; - white-space: nowrap; - overflow: hidden; - -} - -.mytheme .v-slider-base:before { - content: ""; - position: absolute; - top: 16px; - bottom: 16px; - left: 11px; - width: 8px; - border-radius: 4px; - border-left: 1px solid #1362b1; -} - -.mytheme .v-slider-base:after { - border-radius: 4px; - height: inherit; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - - - border: 1px solid #1362b1; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - max-width: 100%; - content: ""; - display: inline-block; - margin-left: -100%; - width: 100%; - vertical-align: top; -} - -.v-ie8 .mytheme .v-slider-base:after { - position: relative; - left: -11px; -} - -.mytheme .v-has-width > .v-slider-base { - min-width: 0; -} - -.mytheme .v-slider-handle { - margin-top: -16px; - width: 0.1px; - display: inline-block; - vertical-align: top; -} - -.mytheme .v-slider-handle:before { - height: 37px; - padding: 0 16px; - color: #191919; - font-weight: 400; - - - border-radius: 4px; - border: 1px solid #c5c5c5; - border-top-color: #c5c5c5; - border-bottom-color: #bcbcbc; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05); - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); -} - -.mytheme .v-slider-handle:before:after { - border: inherit; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; -} - -.mytheme .v-slider-handle:before:hover:after { - background-color: rgba(186, 186, 186, 0.1); -} - -.mytheme .v-slider-handle:before:focus:after { - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-slider-handle:before:active:after { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-slider-handle:after { - border: 1px solid #c5c5c5; - border-color: #197de1; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - opacity: 0; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; - transition: opacity 200ms; -} - -.v-ie8 .mytheme .v-slider-handle:after { - visibility: hidden; -} - -.mytheme .v-slider-handle:before, .mytheme .v-slider-handle:after { - content: ""; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0; - width: 22px; - height: 22px; - border-radius: 11px; - position: absolute; - z-index: 1; - margin-top: 8px; - margin-left: -11px; -} - -.mytheme .v-slider-feedback { - background-color: #323232; - background-color: rgba(50, 50, 50, 0.9); - -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - color: white; - padding: 5px 9px; - border-radius: 3px; - max-width: 35em; - overflow: hidden !important; - font-size: 14px; -} - -.mytheme .v-slider-vertical { - padding: 11px 0; - height: 96px; -} - -.mytheme .v-slider-vertical .v-slider-base { - background-color: #d4d4d4; - background-image: -webkit-linear-gradient(right, #d7d7d7 2%, #c7c7c7 98%); - background-image: linear-gradient(to left,#d7d7d7 2%, #c7c7c7 98%); - width: 6px; - height: 100% !important; - min-width: 0; - margin: 0 16px; -} - -.mytheme .v-slider-vertical .v-slider-base:before { - top: auto; - bottom: 11px; - left: 16px; - right: 16px; - width: auto; - height: 8px; - border-left: none; - border-bottom: 1px solid #1362b1; -} - -.mytheme .v-slider-vertical .v-slider-base:after { - height: 101%; - margin-left: 0; - background-color: #197de1; - background-image: -webkit-linear-gradient(left, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to right,#1b87e3 2%, #166ed5 98%); -} - -.v-ie8 .mytheme .v-slider-vertical .v-slider-base:after { - top: 11px; - left: 0; - height: 130%; -} - -.mytheme .v-slider-vertical .v-slider-handle { - width: 0; - height: 0.1px; - width: 37px; - display: block; -} - -.mytheme .v-slider-vertical .v-slider-handle:before, .mytheme .v-slider-vertical .v-slider-handle:after { - width: 22px; - height: 22px; - margin-top: -11px; - margin-left: -8px; -} - -.mytheme .v-slider-no-indicator .v-slider-base:before, .mytheme .v-slider-no-indicator .v-slider-base:after { - display: none; -} - -.mytheme .v-tabsheet:not(.v-has-width) { - width: auto !important; -} - -.mytheme .v-tabsheet-spacertd { - display: none !important; -} - -.mytheme .v-tabsheet-tabcontainer { - position: relative; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-tabsheet-tabcontainer:before { - content: ""; - position: absolute; - height: 0; - border-top: 1px solid #dfdfdf; - bottom: 0; - left: 0; - right: 0; -} - -.mytheme .v-tabsheet-tabcontainer .v-tabsheet-tabs { - position: relative; -} - -.mytheme .v-tabsheet-tabitemcell { - vertical-align: bottom; -} - -.mytheme .v-tabsheet-tabitemcell .v-tabsheet-tabitem { - line-height: 0; - overflow: hidden; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption { - margin-left: 19px; - padding: 0 4px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; - text-align: center; - line-height: 37px; - font-size: 15px; - font-weight: 300; - color: #696969; - width: auto !important; - overflow: hidden; - text-overflow: ellipsis; - border-bottom: 2px solid transparent; - position: relative; - -webkit-transition: border-bottom 200ms, color 200ms; - -moz-transition: border-bottom 200ms, color 200ms; - transition: border-bottom 200ms, color 200ms; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption .v-captiontext { - display: inline; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption .v-icon + .v-captiontext { - margin-left: 9px; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption:hover { - color: #197de1; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; - cursor: default; - color: inherit !important; -} - -.mytheme .v-tabsheet-tabitemcell:first-child .v-caption, .mytheme .v-tabsheet-tabitemcell[aria-hidden="true"] + td .v-caption { - margin-left: 0; -} - -.mytheme .v-tabsheet-tabitemcell:focus { - outline: none; -} - -.mytheme .v-tabsheet-tabitemcell:focus .v-caption { - color: #197de1; -} - -.mytheme .v-tabsheet-tabitemcell .v-tabsheet-tabitem-selected .v-caption.v-caption { - border-bottom-color: #197de1; - color: #197de1; -} - -.mytheme .v-tabsheet-tabitemcell .v-caption-closable { - padding-right: 22px; -} - -.mytheme .v-tabsheet-tabitemcell.icons-on-top .v-caption-closable { - padding-right: 4px; -} - -.mytheme .v-tabsheet-tabitemcell .v-tabsheet-caption-close { - position: absolute; - right: 0; - top: 50%; - margin: -8px 0 0; - font-size: 18px; - line-height: 18px; - width: 18px; - text-align: center; - border-radius: 2px; - color: #969696; -} - -.mytheme .v-tabsheet-tabitemcell .v-tabsheet-caption-close:hover { - background: rgba(0, 0, 0, 0.03); - color: #197de1; -} - -.mytheme .v-tabsheet-tabitemcell .v-tabsheet-caption-close:active { - background: #197de1; - color: #c8dbed; -} - -.mytheme .v-tabsheet-scroller { - position: absolute; - top: 0; - right: 0; - bottom: 0; - padding-left: 19px; - background-color: transparent; - background-image: -webkit-linear-gradient(right, #fafafa 70%, rgba(250, 250, 250, 0) 100%); - background-image: linear-gradient(to left,#fafafa 70%, rgba(250, 250, 250, 0) 100%); - pointer-events: none; -} - -.mytheme .v-tabsheet-scroller:after { - content: ""; - height: 1px; - position: absolute; - bottom: 0; - left: 0; - right: 0; - display: block; - background-color: transparent; - background-image: -webkit-linear-gradient(right, #dfdfdf 70%, rgba(223, 223, 223, 0) 100%); - background-image: linear-gradient(to left,#dfdfdf 70%, rgba(223, 223, 223, 0) 100%); -} - -.v-ie8 .mytheme .v-tabsheet-scroller, .v-ie9 .mytheme .v-tabsheet-scroller { - background-color: #fafafa; -} - -.v-ie8 .mytheme .v-tabsheet-scroller:after, .v-ie9 .mytheme .v-tabsheet-scroller:after { - background-color: #dfdfdf; -} - -.mytheme .v-tabsheet-scroller button { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - border: none; - background: transparent; - font: inherit; - color: inherit; - height: 100%; - margin: 0; - padding: 0 9px; - outline: none; - cursor: pointer; - pointer-events: auto; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-tabsheet-scroller button:hover { - opacity: 1; - filter: none ; - color: #197de1; -} - -.mytheme .v-tabsheet-scroller button:active { - opacity: 0.7; - filter: alpha(opacity=70) ; - color: #197de1; -} - -.mytheme .v-tabsheet-scroller button::-moz-focus-inner { - padding: 0; - border: 0; -} - -.mytheme .v-tabsheet-scroller [class*="Next"] { - padding-left: 5px; -} - -.mytheme .v-tabsheet-scroller [class*="Next"]:before { - font-family: ThemeIcons; - content: "\f054"; -} - -.mytheme .v-tabsheet-scroller [class*="Prev"] { - padding-right: 5px; -} - -.mytheme .v-tabsheet-scroller [class*="Prev"]:before { - font-family: ThemeIcons; - content: "\f053"; -} - -.mytheme .v-tabsheet-scroller [class*="disabled"] { - cursor: default; - color: inherit !important; - opacity: 0.1 !important; - filter: alpha(opacity=10) !important; -} - -.mytheme .v-tabsheet-tabsheetpanel > .v-scrollable > .v-widget { - -webkit-animation: valo-animate-in-fade 300ms backwards; - -moz-animation: valo-animate-in-fade 300ms backwards; - animation: valo-animate-in-fade 300ms backwards; -} - -.mytheme .v-tabsheet-deco { - height: 20px !important; - width: 20px !important; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 2px solid rgba(25, 125, 225, 0.2); - border-top-color: #197de1; - border-right-color: #197de1; - border-radius: 100%; - -webkit-animation: v-rotate-360 500ms infinite linear; - -moz-animation: v-rotate-360 500ms infinite linear; - animation: v-rotate-360 500ms infinite linear; - pointer-events: none; - display: none; - position: absolute; - z-index: 1; - bottom: 50%; - margin-bottom: -29px; - left: 50%; - margin-left: -10px; -} - -.v-ie8 .mytheme .v-tabsheet-deco, .v-ie9 .mytheme .v-tabsheet-deco { - border: none; - border-radius: 4px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%; - background-size: 80%; -} - -.v-ie8 .mytheme .v-tabsheet-deco { - min-width: 30px; - min-height: 30px; -} - -.mytheme .v-tabsheet-loading .v-tabsheet-deco { - display: block; -} - -.mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer table, .mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tbody, .mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tr { - width: 100%; -} - -.mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer tr { - display: table; - table-layout: fixed; -} - -.mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer td { - display: table-cell; -} - -.mytheme .v-tabsheet-equal-width-tabs > .v-tabsheet-tabcontainer .v-caption { - margin: 0; - display: block; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption { - margin-left: 4px; - padding: 0 12px; - background-color: #fafafa; - border: 1px solid transparent; - line-height: 36px; - border-radius: 4px 4px 0 0; - font-weight: 400; - -webkit-transition: background-color 160ms; - -moz-transition: background-color 160ms; - transition: background-color 160ms; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption:hover { - background-color: #f2f2f2; - border-bottom-color: #dfdfdf; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption.v-disabled:hover { - background-color: #fafafa; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-caption-closable { - padding-right: 30px; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-caption-close { - top: 4px; - right: 4px; - margin-top: 0; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer td:first-child .v-caption, .mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer [aria-hidden="true"] + td .v-caption { - margin-left: 0; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-tabitem .v-caption { - border-color: #dfdfdf; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption { - background: white; - border-color: #dfdfdf; - border-bottom: none; - padding-bottom: 1px; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-content { - border: 1px solid #dfdfdf; - border-top: none; -} - -.mytheme .v-tabsheet-framed > .v-tabsheet-content > div { - background: white; -} - -.mytheme .v-tabsheet-framed.padded-tabbar > .v-tabsheet-tabcontainer { - border: 1px solid #dfdfdf; - border-bottom: none; - background: #fafafa; - padding-top: 6px; -} - -.mytheme .v-tabsheet-framed.icons-on-top > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption { - padding-bottom: 7px; -} - -.mytheme .v-tabsheet-centered-tabs > .v-tabsheet-tabcontainer { - text-align: center; -} - -.mytheme .v-tabsheet-right-aligned-tabs > .v-tabsheet-tabcontainer { - text-align: right; -} - -.mytheme .v-tabsheet-padded-tabbar > .v-tabsheet-tabcontainer .v-tabsheet-tabs { - padding: 0 9px; -} - -.mytheme .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-caption { - padding-top: 6px; - padding-bottom: 6px; - line-height: 1.2; -} - -.mytheme .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-icon { - display: block; -} - -.mytheme .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-icon + .v-captiontext.v-captiontext { - margin-left: 0; -} - -.mytheme .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-caption-closable { - padding-right: 12px; -} - -.mytheme .v-tabsheet-icons-on-top > .v-tabsheet-tabcontainer .v-tabsheet-caption-close { - top: 4px; - margin-top: 0; -} - -.mytheme .v-tabsheet-compact-tabbar > .v-tabsheet-tabcontainer-compact-tabbar .v-caption { - line-height: 1.8; -} - -.mytheme .v-tabsheet-only-selected-closable > .v-tabsheet-tabcontainer .v-tabsheet-caption-close { - visibility: hidden; -} - -.mytheme .v-tabsheet-only-selected-closable > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-tabsheet-caption-close { - visibility: visible; -} - -.mytheme .v-colorpicker-popup.v-window { - min-width: 220px !important; -} - -.mytheme .v-colorpicker-popup .v-tabsheet-tabs { - padding: 0 9px; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] { - padding: 12px; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] .v-widget { - width: 100% !important; - vertical-align: middle; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] .v-has-caption { - white-space: nowrap; - padding-left: 48px; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] .v-caption { - display: inline-block; - margin-left: -48px; - width: 48px; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-has-caption { - padding-left: 80px; -} - -.mytheme .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-caption { - margin-left: -80px; - width: 80px; -} - -.mytheme .v-colorpicker-popup .v-slider-red .v-slider-base:after { - background: red; - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-colorpicker-popup .v-slider-green .v-slider-base:after { - background: green; - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-colorpicker-popup .v-slider-blue .v-slider-base:after { - background: blue; - border: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-colorpicker-popup .v-margin-bottom { - padding-bottom: 0; -} - -.mytheme .v-colorpicker-popup .resize-button { - width: 100% !important; - height: auto !important; - text-align: center; - outline: none; -} - -.mytheme .v-colorpicker-popup .resize-button:before { - font-family: ThemeIcons; - content: "\f141"; -} - -.mytheme .v-colorpicker-popup .resize-button-caption { - display: none; -} - -.mytheme .v-colorpicker-popup .v-horizontallayout { - height: auto !important; - padding: 9px 0; - background-color: #fafafa; - border-top: 1px solid #ededed; -} - -.mytheme .v-colorpicker-popup .v-horizontallayout .v-expand { - overflow: visible; -} - -.mytheme .v-colorpicker-popup .v-horizontallayout .v-button { - width: 80% !important; -} - -.mytheme .v-colorpicker-preview { - width: 100% !important; - height: auto !important; - padding: 9px; -} - -.mytheme .v-colorpicker-preview-textfield { - height: auto !important; - text-align: center; - border: none; -} - -.mytheme .v-colorpicker { - width: auto; -} - -.mytheme .v-colorpicker-button-color { - position: absolute; - top: 6px; - right: 6px; - bottom: 6px; - left: 6px; - border-radius: 3px; - border: 1px solid rgba(0, 0, 0, 0.5); - max-width: 23px; -} - -.mytheme .v-colorpicker-button-color + .v-button-caption:not(:empty) { - margin-left: 19px; -} - -.v-ie8 .mytheme .v-colorpicker-button-color { - position: relative; - top: auto; - right: auto; - bottom: auto; - left: auto; - width: 16px; - height: 16px; - display: inline-block; - vertical-align: middle; - margin: 0 -8px; -} - -.v-ie8 .mytheme .v-colorpicker-button-color + .v-button-caption { - margin-left: 19px; -} - -.mytheme .v-panel { - background: white; - color: #474747; - border-radius: 4px; - border: 1px solid #d5d5d5; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - overflow: visible !important; -} - -.mytheme .v-panel-caption { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 12px; - line-height: 36px; - border-bottom: 1px solid #d5d5d5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%); - color: #464646; - font-weight: 400; - font-size: 14px; - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - border-radius: 3px 3px 0 0; -} - -.mytheme .v-panel-content { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - width: 100%; - height: 100%; -} - -.mytheme .v-panel-content > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-panel-content > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-panel-content > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-panel-content > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-panel-borderless { - background: transparent; - color: inherit; - border: none; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-panel-borderless > div > [class*="-caption"] { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; - color: inherit; - padding: 0; - margin: 0 12px; - border-bottom: none; -} - -.mytheme .v-panel-well { - background: #f5f5f5; - color: #454545; - -webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05); - border-radius: 4px; - border: 1px solid #c5c5c5; -} - -.mytheme .v-panel-well > div > [class*="-caption"] { - background: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-panel-scroll-divider > [class*="-captionwrap"] { - position: relative; - z-index: 2; -} - -.mytheme .v-panel-scroll-divider > [class*="-captionwrap"]:after { - content: ""; - position: absolute; - bottom: -1px; - right: 0; - left: 0; - height: 0; - border-top: 1px solid #dfdfdf; - border-color: rgba(197, 197, 197, 0.5); -} - -.mytheme .v-panel-scroll-divider > [class*="-content"]:before { - content: ""; - position: absolute; - z-index: 2; - top: 0; - height: 0; - border-top: 1px solid #fafafa; - left: 0; - right: 0; -} - -.mytheme .v-panel-caption.v-horizontallayout { - height: auto !important; - line-height: 0; -} - -.mytheme .v-panel-caption.v-horizontallayout .v-slot { - vertical-align: middle; -} - -.mytheme .v-panel-caption.v-horizontallayout .v-label { - line-height: 37px; -} - -.mytheme .v-accordion { - background: white; - color: #474747; - border-radius: 4px; - border: 1px solid #d5d5d5; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #f4f4f4 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #f4f4f4 98%); - overflow: hidden; -} - -.mytheme .v-accordion-item { - position: relative; -} - -.mytheme .v-accordion-item:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} - -.mytheme .v-accordion-item:last-child { - border-bottom-left-radius: 3px; - border-bottom-right-radius: 3px; -} - -.mytheme .v-accordion-item:last-child [class*="item-content"] { - border-radius: inherit; -} - -.mytheme .v-accordion-item[class*="item-open"]:last-child > div > .v-caption { - border-radius: 0; -} - -.mytheme .v-accordion-item:not([class*="item-open"]):last-child > div > .v-caption { - border-bottom: none; - margin-bottom: 0; -} - -.mytheme .v-accordion-item[class*="item-open"] + [class*="item"] { - border-top: 1px solid #d9d9d9; -} - -.mytheme .v-accordion-item-caption { - border-radius: inherit; -} - -.mytheme .v-accordion-item-caption > .v-caption { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 0 12px; - line-height: 36px; - border-bottom: 1px solid #d5d5d5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%); - color: #464646; - font-weight: 400; - font-size: 14px; - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05); - display: block; - background: transparent; - border-bottom-color: #c9c9c9; - border-radius: inherit; - cursor: pointer; - position: relative; -} - -.mytheme .v-accordion-item-caption > .v-caption:hover:before, .mytheme .v-accordion-item-caption > .v-caption:active:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - border-radius: inherit; -} - -.mytheme .v-accordion-item-caption > .v-caption:hover:before { - background-color: rgba(186, 186, 186, 0.1); - border: none; -} - -.mytheme .v-accordion-item-caption > .v-caption:active:before { - background-color: rgba(125, 125, 125, 0.2); -} - -.mytheme .v-accordion-item-content { - -webkit-box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05); - background-color: white; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .v-accordion-item-content > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-accordion-item-content > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-accordion-item-content > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-accordion-item-content > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-accordion-borderless { - border: none; - border-radius: 0; - -webkit-box-shadow: none; - box-shadow: none; -} - -.mytheme .v-accordion-borderless > .v-accordion-item, .mytheme .v-accordion-borderless > .v-accordion-item > div > .v-caption, .mytheme .v-accordion-borderless > .v-accordion-item > .v-accordion-item-content { - border-radius: 0; -} - -.mytheme .v-select-twincol { - white-space: normal; -} - -.mytheme .v-select-twincol select { - border: 1px solid #c5c5c5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - color: #464646; -} - -.mytheme .v-select-twincol select:focus { - outline: none; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-select-twincol .v-textfield, .mytheme .v-select-twincol .v-nativebutton { - width: auto !important; - margin-top: 9px; -} - -.mytheme .v-select-twincol .v-nativebutton { - margin-left: 9px; -} - -.mytheme .v-select-twincol-caption-left, .mytheme .v-select-twincol-caption-right { - font-size: 14px; - font-weight: 400; - padding-bottom: 0.3em; - padding-left: 1px; -} - -.mytheme .v-select-twincol-buttons { - white-space: nowrap; - display: inline-block; - vertical-align: top; - position: relative; - min-width: 3.5em; -} - -.mytheme .v-select-twincol-buttons .v-button { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - vertical-align: top; - text-align: left; - white-space: normal; - position: absolute; - left: 9px; - right: 9px; - top: 36px; - padding: 0; - text-align: center; -} - -.mytheme .v-select-twincol-buttons .v-button:first-child { - top: 0; -} - -.mytheme .v-select-twincol-buttons .v-button-caption { - display: none; -} - -.mytheme .v-select-twincol-buttons .v-button:focus { - z-index: 1; -} - -.mytheme .v-select-twincol-buttons .v-button:first-child { - border-radius: 4px 4px 0 0; -} - -.mytheme .v-select-twincol-buttons .v-button:last-child { - border-radius: 0 0 4px 4px; -} - -.mytheme .v-select-twincol-buttons .v-button-wrap:before { - font-family: ThemeIcons; - content: "\f053"; -} - -.mytheme .v-select-twincol-buttons .v-button:first-child .v-button-wrap:before { - font-family: ThemeIcons; - content: "\f054"; -} - -.mytheme .v-select-twincol-error .v-select-twincol-options, .mytheme .v-select-twincol-error .v-select-twincol-selections { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-select select { - border: 1px solid #c5c5c5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - color: #464646; -} - -.mytheme .v-select select:focus { - outline: none; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-select-select { - display: block; -} - -.mytheme .v-select-select + .v-textfield { - width: auto !important; - margin-top: 9px; -} - -.mytheme .v-select-select + .v-textfield + .v-nativebutton { - margin-top: 9px; - margin-left: 9px; -} - -.mytheme .v-select-error .v-select-select { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-calendar-header-day { - font-weight: 400; - text-align: center; - padding: 7px 0; -} - -.mytheme .v-calendar-header-week .v-calendar-back, .mytheme .v-calendar-header-week .v-calendar-next { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - background: transparent; - border: none; - padding: 0; - margin: 0; - cursor: pointer; - outline: none; - color: inherit; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-calendar-header-week .v-calendar-back:focus, .mytheme .v-calendar-header-week .v-calendar-next:focus { - outline: none; -} - -.mytheme .v-calendar-header-week .v-calendar-back:hover, .mytheme .v-calendar-header-week .v-calendar-next:hover { - opacity: 1; - filter: none ; -} - -.mytheme .v-calendar-header-week .v-calendar-back:active, .mytheme .v-calendar-header-week .v-calendar-next:active { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-calendar-header-week .v-calendar-back:before { - font-family: ThemeIcons; - content: "\f053"; -} - -.mytheme .v-calendar-header-week .v-calendar-next:before { - font-family: ThemeIcons; - content: "\f054"; -} - -.mytheme .v-calendar-month { - outline: none; - overflow: hidden; -} - -.mytheme .v-calendar-month td { - vertical-align: top; -} - -.mytheme .v-calendar-week-number { - cursor: pointer; - width: 20px; - text-align: center; - font-size: 0.8em; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-calendar-week-number:hover { - opacity: 1; - filter: none ; -} - -.mytheme .v-calendar-month-day { - outline: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - line-height: 1.2; -} - -.mytheme .v-calendar-bottom-spacer, .mytheme .v-calendar-spacer, .mytheme .v-calendar-bottom-spacer-empty { - height: 19px; - margin-bottom: 3px; -} - -.mytheme .v-calendar-bottom-spacer { - font-size: 0.8em; - padding: 0 5px; - cursor: pointer; -} - -.mytheme .v-calendar-bottom-spacer:hover { - color: #197de1; -} - -.mytheme .v-calendar-day-number { - line-height: 25px; - font-size: 16px; - text-align: right; - margin: 0 5px; - white-space: nowrap; - border-top: 1px solid #f2f2f2; - cursor: pointer; -} - -.mytheme .v-calendar-day-number:hover { - color: #197de1; -} - -.mytheme .v-calendar-month-day-today { - background: #eef3f8; -} - -.mytheme .v-calendar-month-day-today .v-calendar-day-number { - font-weight: 400; - color: #197de1; - border-top: 2px solid #197de1; - line-height: 24px; - margin: 0; - padding: 0 5px; -} - -.mytheme .v-calendar-month-day-selected { - background-color: #e3edf7; -} - -.mytheme .v-calendar-month-day-dragemphasis { - background-color: #a8a8a8; -} - -.mytheme .v-calendar-month-day-scrollable { - overflow-y: scroll; -} - -.mytheme .v-calendar-weekly-longevents { - margin-left: 50px; - border-bottom: 3px solid #e0e0e0; -} - -.mytheme .v-calendar-weekly-longevents .v-calendar-event-all-day { - height: 22px; - line-height: 1.6; - margin-bottom: 3px; -} - -.mytheme .v-calendar-header-week td { - vertical-align: middle !important; -} - -.mytheme .v-calendar-header-week .v-calendar-header-day { - cursor: pointer; -} - -.mytheme .v-calendar-times { - width: 50px; - font-size: 0.77em; - line-height: 1; - white-space: nowrap; -} - -.mytheme .v-calendar-time { - text-align: right; - padding-right: 9px; - margin-top: -6px; - padding-bottom: 6px; -} - -.mytheme .v-calendar-day-times, .mytheme .v-calendar-day-times-today { - outline: none; - border-right: 1px solid transparent; -} - -.mytheme .v-calendar-day-times:focus, .mytheme .v-calendar-day-times-today:focus { - outline: none; -} - -.mytheme .v-calendar .v-datecellslot, .mytheme .v-calendar .v-datecellslot-even { - border-top: 1px solid #dfdfdf; -} - -.mytheme .v-calendar .v-datecellslot:first-child, .mytheme .v-calendar .v-datecellslot-even:first-child { - border-top-color: transparent; -} - -.mytheme .v-calendar .v-datecellslot { - border-top-style: dotted; -} - -.mytheme .v-calendar .v-datecellslot, .mytheme .v-calendar .v-datecellslot-even { - margin-right: 5px; -} - -.mytheme .v-calendar-current-time { - background: #197de1; - line-height: 1px; - pointer-events: none; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-calendar-current-time:before { - content: "\2022"; - color: #197de1; - font-size: 22px; - margin-left: -0.07em; -} - -.mytheme .v-calendar .v-daterange { - position: relative; -} - -.mytheme .v-calendar .v-daterange:before { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: -1px; - left: 0; - background: #197de1; - opacity: 0.5; - filter: alpha(opacity=50) ; - border-radius: 4px 4px 0 0; -} - -.mytheme .v-calendar .v-daterange + .v-daterange { - border-color: transparent; -} - -.mytheme .v-calendar .v-daterange + .v-daterange:before { - border-radius: 0; -} - -.mytheme .v-calendar-event { - font-size: 0.85em; - overflow: hidden; - cursor: pointer; - outline: none; - border-radius: 4px; -} - -.mytheme .v-calendar-event:focus { - outline: none; -} - -.mytheme .v-calendar-event-month { - padding: 0 5px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin-bottom: 3px; - white-space: nowrap; - text-overflow: ellipsis; - height: 19px; - line-height: 19px; -} - -.mytheme .v-calendar-event-month .v-calendar-event-time { - float: right; - font-size: 0.9em; - line-height: 19px; - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-calendar-event-month:before { - content: "\25cf"; - margin-right: 0.2em; -} - -.mytheme .v-calendar-event-all-day { - padding: 0 5px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - height: 19px; - line-height: 19px; - border-radius: 0; - margin-left: -1px; - white-space: nowrap; -} - -.mytheme .v-calendar-event-all-day:before { - content: ""; -} - -.mytheme .v-calendar-event-start { - overflow: visible; - margin-left: 0; -} - -.mytheme .v-calendar-event-start.v-calendar-event-continued-to, .mytheme .v-calendar-event-start.v-calendar-event-end { - overflow: hidden; - text-overflow: ellipsis; -} - -.mytheme .v-calendar-event-start { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - margin-left: 5px; -} - -.mytheme .v-calendar-event-end { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - margin-right: 5px; -} - -.mytheme .v-calendar-event-caption { - font-weight: 500; - line-height: 1.2; - padding: 5px 0; - position: absolute; - overflow: hidden; - right: 9px; - left: 5px; - bottom: 0; - top: 0; -} - -.mytheme .v-calendar-event-caption span { - font-weight: 300; - white-space: nowrap; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event { - overflow: visible; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event-content { - margin-top: -1px; - border-radius: 5px; - border: 1px solid #fafafa; - padding-top: 3px; - margin-right: 5px; -} - -.mytheme .v-calendar-event-month:before { - color: #00ace0; -} - -.mytheme .v-calendar-event-all-day { - background-color: #c8eaf4; - background-color: rgba(200, 234, 244, 0.8); - color: #00ace0; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event { - color: #00ace0; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event .v-calendar-event-content { - background-color: #c8eaf4; - background-color: rgba(200, 234, 244, 0.8); -} - -.mytheme .v-calendar-event-month[class*="color2"]:before { - color: #2d9f19; -} - -.mytheme .v-calendar-event-all-day[class*="color2"] { - background-color: #d1e7cd; - background-color: rgba(209, 231, 205, 0.8); - color: #2d9f19; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color2"] { - color: #2d9f19; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color2"] .v-calendar-event-content { - background-color: #d1e7cd; - background-color: rgba(209, 231, 205, 0.8); -} - -.mytheme .v-calendar-event-month[class*="color3"]:before { - color: #d18100; -} - -.mytheme .v-calendar-event-all-day[class*="color3"] { - background-color: #f1e1c8; - background-color: rgba(241, 225, 200, 0.8); - color: #d18100; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color3"] { - color: #d18100; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color3"] .v-calendar-event-content { - background-color: #f1e1c8; - background-color: rgba(241, 225, 200, 0.8); -} - -.mytheme .v-calendar-event-month[class*="color4"]:before { - color: #ce3812; -} - -.mytheme .v-calendar-event-all-day[class*="color4"] { - background-color: #f1d3cb; - background-color: rgba(241, 211, 203, 0.8); - color: #ce3812; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color4"] { - color: #ce3812; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color4"] .v-calendar-event-content { - background-color: #f1d3cb; - background-color: rgba(241, 211, 203, 0.8); -} - -.mytheme .v-calendar-event-month[class*="color5"]:before { - color: #2d55cd; -} - -.mytheme .v-calendar-event-all-day[class*="color5"] { - background-color: #d1d9f1; - background-color: rgba(209, 217, 241, 0.8); - color: #2d55cd; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color5"] { - color: #2d55cd; -} - -.mytheme .v-calendar-week-wrapper .v-calendar-event[class*="color5"] .v-calendar-event-content { - background-color: #d1d9f1; - background-color: rgba(209, 217, 241, 0.8); -} - -.mytheme .v-calendar.v-disabled * { - cursor: default; -} - -.mytheme .v-label { - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.mytheme .v-label.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-label-undef-w { - white-space: nowrap; -} - -.mytheme h1, .mytheme .v-label-h1, .mytheme h2, .mytheme .v-label-h2, .mytheme h3, .mytheme .v-label-h3 { - line-height: 1.1; - font-weight: 200; - color: #141414; -} - -.mytheme h1, .mytheme .v-label-h1 { - font-size: 2.4em; - margin-top: 1.4em; - margin-bottom: 1em; - - letter-spacing: -0.03em; -} - -.mytheme h2, .mytheme .v-label-h2 { - font-size: 1.6em; - - margin-top: 1.6em; - margin-bottom: 0.77em; - letter-spacing: -0.02em; -} - -.mytheme h3, .mytheme .v-label-h3 { - font-size: 1.2em; - - margin-top: 1.8em; - margin-bottom: 0.77em; - letter-spacing: 0; -} - -.mytheme h4, .mytheme .v-label-h4 { - line-height: 1.1; - font-weight: 500; - font-size: 14px; - color: #414141; - text-transform: uppercase; - letter-spacing: 0; - margin-top: 2.4em; - margin-bottom: 0.8em; -} - -.mytheme .v-csslayout > h1:first-child, .mytheme .v-csslayout > h2:first-child, .mytheme .v-csslayout > h3:first-child, .mytheme .v-csslayout > h4 > .v-label-h1:first-child, .mytheme .v-csslayout > .v-label-h2:first-child, .mytheme .v-csslayout > .v-label-h3:first-child, .mytheme .v-csslayout > .v-label-h4:first-child { - margin-top: 16px; -} - -.mytheme .v-verticallayout > .v-slot:first-child h1, .mytheme .v-verticallayout > .v-slot:first-child .v-label-h1, .mytheme .v-verticallayout > .v-slot:first-child h2, .mytheme .v-verticallayout > .v-slot:first-child .v-label-h2, .mytheme .v-verticallayout > .v-slot:first-child h3, .mytheme .v-verticallayout > .v-slot:first-child .v-label-h3, .mytheme .v-verticallayout > .v-slot:first-child h4, .mytheme .v-verticallayout > .v-slot:first-child .v-label-h4, .mytheme .v-verticallayout > div > .v-slot:first-child h1, .mytheme .v-verticallayout > div > .v-slot:first-child .v-label-h1, .mytheme .v-verticallayout > div > .v-slot:first-child h2, .mytheme .v-verticallayout > div > .v-slot:first-child .v-label-h2, .mytheme .v-verticallayout > div > .v-slot:first-child h3, .mytheme .v-verticallayout > div > .v-slot:first-child .v-label-h3, .mytheme .v-verticallayout > div > .v-slot:first-child h4, .mytheme .v-verticallayout > div > .v-slot:first-child .v-label-h4 { - margin-top: 16px; -} - -.mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h1, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h2, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h3, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h4, .mytheme .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h4, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h1, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h2, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h3, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h4, .mytheme .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h4 { - margin-top: -0.5em; -} - -.mytheme h1.no-margin, .mytheme .v-label-h1.no-margin, .mytheme h2.no-margin, .mytheme .v-label-h2.no-margin, .mytheme h3.no-margin, .mytheme .v-label-h3.no-margin, .mytheme h4.no-margin, .mytheme .v-label-h4.no-margin { - margin: 0 !important; -} - -.mytheme .v-label-colored { - color: #197de1; -} - -.mytheme .v-label-large { - font-size: 20px; -} - -.mytheme .v-label-small { - font-size: 14px; -} - -.mytheme .v-label-tiny { - font-size: 12px; -} - -.mytheme .v-label-huge { - font-size: 26px; -} - -.mytheme .v-label-bold { - font-weight: 500; -} - -.mytheme .v-label-light { - font-weight: 200; - color: #7d7d7d; -} - -.mytheme .v-label-align-right { - text-align: right; -} - -.mytheme .v-label-align-center { - text-align: center; -} - -.mytheme .v-label-spinner { - height: 24px !important; - width: 24px !important; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 2px solid rgba(25, 125, 225, 0.2); - border-top-color: #197de1; - border-right-color: #197de1; - border-radius: 100%; - -webkit-animation: v-rotate-360 500ms infinite linear; - -moz-animation: v-rotate-360 500ms infinite linear; - animation: v-rotate-360 500ms infinite linear; - pointer-events: none; -} - -.v-ie8 .mytheme .v-label-spinner, .v-ie9 .mytheme .v-label-spinner { - border: none; - border-radius: 4px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%; - background-size: 80%; -} - -.v-ie8 .mytheme .v-label-spinner { - min-width: 30px; - min-height: 30px; -} - -.mytheme .v-label-success, .mytheme .v-label-failure { - background: white; - color: #474747; - border: 2px solid #2c9720; - border-radius: 4px; - padding: 7px 19px 7px 37px; - font-weight: 400; - font-size: 15px; -} - -.mytheme .v-label-success:before, .mytheme .v-label-failure:before { - font-family: ThemeIcons; - content: "\f00c"; - margin-right: 0.5em; - margin-left: -19px; - color: #2c9720; -} - -.mytheme .v-label-failure { - border-color: #ed473b; -} - -.mytheme .v-label-failure:before { - content: "\f05e"; - color: #ed473b; -} - -.mytheme [draggable=true] { - -khtml-user-drag: element; - -webkit-user-drag: element; -} - -.mytheme .v-ddwrapper { - position: relative; -} - -.mytheme .v-ddwrapper-over:before, .mytheme .v-ddwrapper-over:after { - content: ""; - position: absolute; - z-index: 10; - top: -1px; - right: -1px; - bottom: -1px; - left: -1px; - border: 0 solid #197de1; -} - -.mytheme .v-ddwrapper-over-top:before { - border-top-width: 2px; -} - -.mytheme .v-ddwrapper-over-right:before { - border-right-width: 2px; -} - -.mytheme .v-ddwrapper-over-bottom:before { - border-bottom-width: 2px; -} - -.mytheme .v-ddwrapper-over-left:before { - border-left-width: 2px; -} - -.mytheme .no-vertical-drag-hints .v-ddwrapper-over-top:before, .mytheme .no-vertical-drag-hints.v-ddwrapper-over-top:before { - border-top-width: 0; -} - -.mytheme .no-vertical-drag-hints .v-ddwrapper-over-top:after, .mytheme .no-vertical-drag-hints.v-ddwrapper-over-top:after { - border-width: 2px; - border-radius: 4px; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - background: #8abef2; -} - -.mytheme .no-vertical-drag-hints .v-ddwrapper-over-bottom:before, .mytheme .no-vertical-drag-hints.v-ddwrapper-over-bottom:before { - border-bottom-width: 0; -} - -.mytheme .no-vertical-drag-hints .v-ddwrapper-over-bottom:after, .mytheme .no-vertical-drag-hints.v-ddwrapper-over-bottom:after { - border-width: 2px; - border-radius: 4px; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - background: #8abef2; -} - -.mytheme .no-horizontal-drag-hints.v-ddwrapper-over-left:before, .mytheme .no-horizontal-drag-hints .v-ddwrapper-over-left:before { - border-left-width: 0; -} - -.mytheme .no-horizontal-drag-hints.v-ddwrapper-over-left:after, .mytheme .no-horizontal-drag-hints .v-ddwrapper-over-left:after { - border-width: 2px; - border-radius: 4px; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - background: #8abef2; -} - -.mytheme .no-horizontal-drag-hints.v-ddwrapper-over-right:before, .mytheme .no-horizontal-drag-hints .v-ddwrapper-over-right:before { - border-right-width: 0; -} - -.mytheme .no-horizontal-drag-hints.v-ddwrapper-over-right:after, .mytheme .no-horizontal-drag-hints .v-ddwrapper-over-right:after { - border-width: 2px; - border-radius: 4px; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - background: #8abef2; -} - -.mytheme .v-ddwrapper-over-middle:after, .mytheme .v-ddwrapper-over-center:after { - border-width: 2px; - border-radius: 4px; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - background: #8abef2; -} - -.mytheme .no-box-drag-hints.v-ddwrapper:after, .mytheme .no-box-drag-hints .v-ddwrapper:after { - display: none !important; - content: none; -} - -.mytheme .v-nativebutton { - -webkit-touch-callout: none; -} - -.mytheme .v-select select { - border: 1px solid #c5c5c5; - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - color: #464646; -} - -.mytheme .v-select select:focus { - outline: none; - -webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); - box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5); -} - -.mytheme .v-select-select { - display: block; -} - -.mytheme .v-select-select + .v-textfield { - width: auto !important; - margin-top: 9px; -} - -.mytheme .v-select-select + .v-textfield + .v-nativebutton { - margin-top: 9px; - margin-left: 9px; -} - -.mytheme .v-select-error .v-select-select { - border-color: #ed473b !important; - background: #fffbfb; - color: #6c2621; -} - -.mytheme .v-popupview { - cursor: pointer; - color: #197de1; - text-decoration: underline; - font-weight: inherit; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-popupview:hover { - color: #4396ea; -} - -.mytheme .v-popupview.v-disabled { - opacity: 0.5; - filter: alpha(opacity=50) ; -} - -.mytheme .v-popupview-popup { - padding: 4px 4px; - border-radius: 4px; - background-color: white; - color: #474747; - -webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098); - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; -} - -.mytheme .v-popupview-popup[class*="animate-in"] { - -webkit-animation: v-popupview-animate-in 120ms; - -moz-animation: v-popupview-animate-in 120ms; - animation: v-popupview-animate-in 120ms; -} - -.mytheme .v-popupview-popup[class*="animate-out"] { - -webkit-animation: valo-animate-out-fade 120ms; - -moz-animation: valo-animate-out-fade 120ms; - animation: valo-animate-out-fade 120ms; -} - -.mytheme .v-popupview-popup .popupContent > .v-margin-top { - padding-top: 12px; -} - -.mytheme .v-popupview-popup .popupContent > .v-margin-right { - padding-right: 12px; -} - -.mytheme .v-popupview-popup .popupContent > .v-margin-bottom { - padding-bottom: 12px; -} - -.mytheme .v-popupview-popup .popupContent > .v-margin-left { - padding-left: 12px; -} - -.mytheme .v-popupview-loading { - margin: 12px 12px; - height: 24px !important; - width: 24px !important; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border: 2px solid rgba(25, 125, 225, 0.2); - border-top-color: #197de1; - border-right-color: #197de1; - border-radius: 100%; - -webkit-animation: v-rotate-360 500ms infinite linear; - -moz-animation: v-rotate-360 500ms infinite linear; - animation: v-rotate-360 500ms infinite linear; - pointer-events: none; -} - -.v-ie8 .mytheme .v-popupview-loading, .v-ie9 .mytheme .v-popupview-loading { - border: none; - border-radius: 4px; - background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%; - background-size: 80%; -} - -.v-ie8 .mytheme .v-popupview-loading { - min-width: 30px; - min-height: 30px; -} - -.mytheme .v-richtextarea { - -webkit-appearance: none; - -moz-appearance: none; - -ms-appearance: none; - -o-appearance: none; - appearance: none; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - margin: 0; - font: inherit; - - font-weight: 400; - line-height: normal; - height: 37px; - border-radius: 4px; - padding: 0; - border: 1px solid #c5c5c5; - background: white; - color: #474747; - -webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1); - -webkit-transition: box-shadow 180ms, border 180ms; - -moz-transition: box-shadow 180ms, border 180ms; - transition: box-shadow 180ms, border 180ms; - height: auto; - overflow: hidden; -} - -.v-ie8 .mytheme .v-richtextarea, .v-ie9 .mytheme .v-richtextarea { - line-height: 37px; - padding-top: 0; - padding-bottom: 0; -} - -.mytheme .v-richtextarea[class*="prompt"] { - color: #a3a3a3; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar { - background-color: #fafafa; - background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%); - background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%); - -webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7; - border-bottom: 1px solid #c5c5c5; - color: #464646; -} - -.mytheme .v-richtextarea .gwt-ToggleButton, .mytheme .v-richtextarea .gwt-PushButton { - display: inline-block; - line-height: 37px; - width: 37px; - text-align: center; - outline: none; -} - -.mytheme .v-richtextarea .gwt-ToggleButton:hover, .mytheme .v-richtextarea .gwt-PushButton:hover { - color: black; -} - -.mytheme .v-richtextarea .gwt-ToggleButton-down, .mytheme .v-richtextarea .gwt-ToggleButton-down-hovering { - background-color: #e0e0e0; - background-image: -webkit-linear-gradient(bottom, #e0e0e0 2%, #dcdcdc 98%); - background-image: linear-gradient(to top,#e0e0e0 2%, #dcdcdc 98%); -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top img { - display: none; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div:before { - font-family: ThemeIcons; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Bold"]:before { - content: "\f032"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Italic"]:before { - content: "\f033"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Underline"]:before { - content: "\f0cd"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Subscript"]:before { - content: "\f12c"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Superscript"]:before { - content: "\f12b"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Left Justify"]:before { - content: "\f036"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Center"]:before { - content: "\f037"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Right Justify"]:before { - content: "\f038"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Strikethrough"]:before { - content: "\f0cc"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Right"]:before { - content: "\f03c"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Left"]:before { - content: "\f03b"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Horizontal Rule"]:before { - content: "\2014"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Ordered List"]:before { - content: "\f0cb"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Unordered List"]:before { - content: "\f0ca"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Image"]:before { - content: "\f03e"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Create Link"]:before { - content: "\f0c1"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Link"]:before { - content: "\f127"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Formatting"]:before { - content: "\f12d"; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-bottom { - font-size: 13px; - padding: 0 9px 9px 0; -} - -.mytheme .v-richtextarea .gwt-RichTextToolbar-bottom select { - margin: 9px 0 0 9px; -} - -.mytheme .v-richtextarea .gwt-RichTextArea { - background: #fff; - border: none; - display: block; -} - -.mytheme .v-richtextarea-readonly { - padding: 5px 7px; - background: transparent; -} - -.mytheme .v-upload .v-button { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - display: inline-block; - vertical-align: top; - text-align: left; - white-space: normal; -} - -.mytheme .v-upload-immediate .v-button { - width: 100%; -} - -.mytheme .v-upload-immediate input[type="file"] { - opacity: 0; - filter: alpha(opacity=0) ; - z-index: -1; - position: absolute; - right: 0; - height: 37px; - text-align: right; - border: none; - background: transparent; -} - -.mytheme .v-Notification.v-position-top { - top: 12px; -} - -.mytheme .v-Notification.v-position-right { - right: 12px; -} - -.mytheme .v-Notification.v-position-bottom { - bottom: 12px; -} - -.mytheme .v-Notification.v-position-left { - left: 12px; -} - -.mytheme .v-Notification.v-position-assistive { - top: -9999px; - left: -9999px; -} - -.mytheme .v-Notification-animate-in { - -webkit-animation: valo-animate-in-fade 180ms 10ms backwards; - -moz-animation: valo-animate-in-fade 180ms 10ms backwards; - animation: valo-animate-in-fade 180ms 10ms backwards; -} - -.mytheme .v-Notification-animate-in.v-position-top { - -webkit-animation: valo-animate-in-slide-down 400ms 10ms backwards; - -moz-animation: valo-animate-in-slide-down 400ms 10ms backwards; - animation: valo-animate-in-slide-down 400ms 10ms backwards; -} - -.mytheme .v-Notification-animate-in.v-position-bottom { - -webkit-animation: valo-animate-in-slide-up 400ms 10ms backwards; - -moz-animation: valo-animate-in-slide-up 400ms 10ms backwards; - animation: valo-animate-in-slide-up 400ms 10ms backwards; -} - -.mytheme .v-Notification-animate-out { - -webkit-animation: valo-animate-out-fade 150ms; - -moz-animation: valo-animate-out-fade 150ms; - animation: valo-animate-out-fade 150ms; -} - -.mytheme .v-Notification-animate-out.v-position-top, .mytheme .v-Notification-animate-out.v-position-bottom { - -webkit-animation: valo-animate-out-slide-down-fade 200ms; - -moz-animation: valo-animate-out-slide-down-fade 200ms; - animation: valo-animate-out-slide-down-fade 200ms; -} - -.mytheme .v-Notification { - border-radius: 4px; - text-align: center; - position: fixed !important; - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -ms-backface-visibility: hidden; - backface-visibility: hidden; - background: white; - -webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15); - box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15); - padding: 19px 22px; -} - -.mytheme .v-Notification .v-Notification-caption { - color: #197de1; - font-size: 19px; - line-height: 1; -} - -.mytheme .v-Notification .v-Notification-description { - line-height: 1.4; -} - -.mytheme .v-Notification-caption { - margin: 0; - display: inline-block; - text-align: left; - font-weight: inherit; - line-height: inherit; - white-space: nowrap; - letter-spacing: 0; -} - -.mytheme .v-Notification-description, .mytheme .v-Notification-details { - margin: 0; - display: inline-block; - vertical-align: middle; - max-width: 30em; - text-align: left; - max-height: 20em; - overflow: auto; -} - -.mytheme .v-Notification-caption ~ .v-Notification-description, .mytheme .v-Notification-caption ~ .v-Notification-details { - margin-left: 24px; -} - -.mytheme .v-icon + .v-Notification-caption { - margin-left: 16px; -} - -.mytheme .v-Notification-system { - left: 0 !important; - right: 0; - max-width: 100%; - margin: 0 !important; - border-radius: 0; - -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - padding: 12px 15px; - background-color: #444; - background-color: rgba(68, 68, 68, 0.9); - font-weight: 400; - line-height: 22px; -} - -.mytheme .v-Notification-system .v-Notification-description, .mytheme .v-Notification-system .v-Notification-details { - max-width: 50em; -} - -.mytheme .v-Notification-system.v-position-top { - top: 0; -} - -.mytheme .v-Notification-system.v-position-top[class*="animate-in"] { - -webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards; - -moz-animation: valo-animate-in-slide-down 300ms 10ms backwards; - animation: valo-animate-in-slide-down 300ms 10ms backwards; -} - -.mytheme .v-Notification-system.v-position-top[class*="animate-out"] { - -webkit-animation: valo-animate-out-slide-up 200ms; - -moz-animation: valo-animate-out-slide-up 200ms; - animation: valo-animate-out-slide-up 200ms; -} - -.mytheme .v-Notification-system.v-position-bottom { - bottom: 0; -} - -.mytheme .v-Notification-system.v-position-bottom[class*="animate-in"] { - -webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards; - -moz-animation: valo-animate-in-slide-up 300ms 10ms backwards; - animation: valo-animate-in-slide-up 300ms 10ms backwards; -} - -.mytheme .v-Notification-system.v-position-bottom[class*="animate-out"] { - -webkit-animation: valo-animate-out-slide-down 200ms; - -moz-animation: valo-animate-out-slide-down 200ms; - animation: valo-animate-out-slide-down 200ms; -} - -.mytheme .v-Notification-system .v-Notification-caption { - color: #fff; - vertical-align: middle; -} - -.mytheme .v-Notification-system .v-Notification-description, .mytheme .v-Notification-system .v-Notification-details { - color: #e6e6e6; -} - -.mytheme .v-Notification-system u { - text-decoration: none; -} - -.mytheme .v-Notification.tray { - text-align: left; -} - -.mytheme .v-Notification.tray .v-Notification-caption + .v-Notification-description { - display: block; - margin: 0.5em 0 0; -} - -.mytheme .v-Notification.warning { - background: #FFF3D2; -} - -.mytheme .v-Notification.warning .v-Notification-caption { - color: #AC7C00; -} - -.mytheme .v-Notification.warning .v-Notification-description { - color: #9D874D; -} - -.mytheme .v-Notification.error { - background: #ed473b; - font-weight: 400; - -webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25); - box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25); -} - -.mytheme .v-Notification.error .v-Notification-caption { - color: white; -} - -.mytheme .v-Notification.error .v-Notification-description { - color: #f4e0df; -} - -.mytheme .v-Notification.dark { - background-color: #444; - background-color: rgba(68, 68, 68, 0.9); - font-weight: 400; - line-height: 22px; -} - -.mytheme .v-Notification.dark .v-Notification-caption { - color: #fff; - vertical-align: middle; -} - -.mytheme .v-Notification.dark .v-Notification-description, .mytheme .v-Notification.dark .v-Notification-details { - color: #e6e6e6; -} - -.mytheme .v-Notification.bar { - left: 0 !important; - right: 0; - max-width: 100%; - margin: 0 !important; - border-radius: 0; - -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25); - padding: 12px 15px; -} - -.mytheme .v-Notification.bar .v-Notification-description, .mytheme .v-Notification.bar .v-Notification-details { - max-width: 50em; -} - -.mytheme .v-Notification.bar.v-position-top { - top: 0; -} - -.mytheme .v-Notification.bar.v-position-top[class*="animate-in"] { - -webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards; - -moz-animation: valo-animate-in-slide-down 300ms 10ms backwards; - animation: valo-animate-in-slide-down 300ms 10ms backwards; -} - -.mytheme .v-Notification.bar.v-position-top[class*="animate-out"] { - -webkit-animation: valo-animate-out-slide-up 200ms; - -moz-animation: valo-animate-out-slide-up 200ms; - animation: valo-animate-out-slide-up 200ms; -} - -.mytheme .v-Notification.bar.v-position-bottom { - bottom: 0; -} - -.mytheme .v-Notification.bar.v-position-bottom[class*="animate-in"] { - -webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards; - -moz-animation: valo-animate-in-slide-up 300ms 10ms backwards; - animation: valo-animate-in-slide-up 300ms 10ms backwards; -} - -.mytheme .v-Notification.bar.v-position-bottom[class*="animate-out"] { - -webkit-animation: valo-animate-out-slide-down 200ms; - -moz-animation: valo-animate-out-slide-down 200ms; - animation: valo-animate-out-slide-down 200ms; -} - -.mytheme .v-Notification.small { - padding: 11px 13px; -} - -.mytheme .v-Notification.small .v-Notification-caption { - font-size: 16px; -} - -.mytheme .v-Notification.small .v-Notification-description { - font-size: 14px; -} - -.mytheme .v-Notification.closable { - padding-right: 59px; - overflow: hidden !important; - cursor: pointer; -} - -.mytheme .v-Notification.closable:after { - content: "\00d7"; - font-size: 1.5em; - position: absolute; - top: 50%; - margin-top: -12px; - right: 12px; - width: 25px; - height: 25px; - line-height: 24px; - cursor: pointer; - color: #000; - opacity: 0.5; - filter: alpha(opacity=50) ; - text-align: center; - border: 1px solid #000; - border-color: rgba(0, 0, 0, 0.3); - border-radius: 50%; - -webkit-transition: opacity 200ms; - -moz-transition: opacity 200ms; - transition: opacity 200ms; -} - -.mytheme .v-Notification.closable:hover:after { - opacity: 1; - filter: none ; -} - -.mytheme .v-Notification.closable:active:after { - background-color: #000; - color: #fff; - opacity: 0.3; - filter: alpha(opacity=30.0) ; - -webkit-transition: none 200ms; - -moz-transition: none 200ms; - transition: none 200ms; -} - -.mytheme .v-Notification.closable.dark:after, .mytheme .v-Notification.closable.error:after, .mytheme .v-Notification.closable.system:after { - color: #fff; - border-color: #fff; - border-color: rgba(255, 255, 255, 0.3); -} - -.mytheme .v-Notification.closable.dark:active:after, .mytheme .v-Notification.closable.error:active:after, .mytheme .v-Notification.closable.system:active:after { - background-color: #fff; - color: #000; -} - -.mytheme .v-Notification.closable.tray:after { - top: 16px; - margin-top: 0; -} - -.mytheme .v-Notification.success, .mytheme .v-Notification.failure { - background: #fff; - color: #555; - border: 2px solid #2c9720; -} - -.mytheme .v-Notification.success .v-Notification-caption, .mytheme .v-Notification.failure .v-Notification-caption { - color: #2c9720; - font-weight: 400; -} - -.mytheme .v-Notification.success .v-Notification-caption:before, .mytheme .v-Notification.failure .v-Notification-caption:before { - font-family: ThemeIcons; - content: "\f00c"; - margin-right: 0.5em; -} - -.mytheme .v-Notification.success.bar, .mytheme .v-Notification.failure.bar { - margin: -2px !important; -} - -.mytheme .v-Notification.failure { - border-color: #ed473b; -} - -.mytheme .v-Notification.failure .v-Notification-caption { - color: #ed473b; -} - -.mytheme .v-Notification.failure .v-Notification-caption:before { - content: "\f05e"; -} - -.mytheme .valo-menu { - height: 100%; - background-color: #4b4b4b; - background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px); - background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px); - color: #a5a5a5; - font-size: 14px; - line-height: 30px; - border-right: 1px solid #3b3b3b; - white-space: nowrap; -} - -.mytheme .valo-menu-toggle { - display: none; - position: fixed; - z-index: 200; - top: 3px; - left: 3px; - min-width: 0; -} - -.mytheme .valo-menu-part { - border-left: 1px solid #414141; - height: 100%; - padding-bottom: 37px; - overflow: auto; -} - -.mytheme .valo-menu-part:first-child { - border-left: none; -} - -.mytheme .valo-menu-title, .mytheme .valo-menu-subtitle, .mytheme .valo-menu-item { - display: block; - line-height: inherit; - white-space: nowrap; - position: relative; -} - -.mytheme .valo-menu-title .valo-menu-badge, .mytheme .valo-menu-subtitle .valo-menu-badge, .mytheme .valo-menu-item .valo-menu-badge { - position: absolute; - right: 19px; -} - -.mytheme .valo-menu-title { - line-height: 1.2; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: white; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); - padding: 12px 19px; - font-size: 14px; - border-bottom: 1px solid #1362b1; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - text-align: center; -} - -.mytheme .valo-menu-title .v-menubar.v-menubar { - background: transparent; - border-color: #1362b1; - color: inherit; - -webkit-box-shadow: none; - box-shadow: none; - text-shadow: inherit; -} - -.mytheme .valo-menu-title .v-menubar-menuitem { - background: transparent; - -webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca; - box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca; - text-shadow: inherit; - font-size: 16px; - border-color: inherit; -} - -.mytheme .valo-menu-title h1, .mytheme .valo-menu-title .v-label-h1, .mytheme .valo-menu-title h2, .mytheme .valo-menu-title .v-label-h2, .mytheme .valo-menu-title h3, .mytheme .valo-menu-title .v-label-h3, .mytheme .valo-menu-title h4, .mytheme .valo-menu-title .v-label-h4 { - margin-top: 0; - margin-bottom: 0; - color: inherit; -} - -.mytheme .v-menubar-user-menu { - border: none; - border-radius: 0; - padding: 1px; - -webkit-box-shadow: none; - box-shadow: none; - text-shadow: none; - background: transparent; - color: inherit; - margin: 19px 7px; - display: block; - overflow: hidden; - text-align: center; - height: auto; - color: inherit; -} - -.mytheme .v-menubar-user-menu:focus:after { - display: none; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem { - -webkit-box-shadow: none; - box-shadow: none; - border: none; - margin-right: 1px; - border-radius: 4px; - color: #197de1; - padding: 0 12px; - -webkit-transition: color 140ms; - -moz-transition: color 140ms; - transition: color 140ms; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem:first-child, .mytheme .v-menubar-user-menu .v-menubar-menuitem:last-child, .mytheme .v-menubar-user-menu .v-menubar-menuitem:first-child:last-child { - border-radius: 4px; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem:before { - content: none; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem:hover { - color: #4396ea; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem:active { - color: inherit; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-checked, .mytheme .v-menubar-user-menu .v-menubar-menuitem-checked:first-child { - border: 1px solid #c5c5c5; - color: #197de1; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .mytheme .v-menubar-user-menu .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption { - position: relative; - top: -1px; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-selected { - color: #ecf2f8; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05); -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-selected:hover { - color: #ecf2f8; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-disabled, .mytheme .v-menubar-user-menu .v-menubar-menuitem-disabled:hover { - color: inherit; -} - -.mytheme .v-menubar-user-menu > .v-menubar-menuitem { - color: inherit; - white-space: normal; - line-height: 1.4; - margin: 0; -} - -.mytheme .v-menubar-user-menu > .v-menubar-menuitem img.v-icon { - width: 56px; - height: 56px; - border-radius: 29px; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - display: block; - margin: 0 auto 0.3em; - border: 1px solid #c5c5c5; -} - -.mytheme .v-menubar-user-menu > .v-menubar-menuitem:after { - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.mytheme .v-menubar-user-menu .v-menubar-menuitem-selected { - background: transparent; -} - -.mytheme .valo-menu-subtitle { - color: #868686; - margin: 7px 0 7px 19px; - border-bottom: 1px solid #666666; -} - -.mytheme .valo-menu-subtitle [class*="badge"] { - color: #73a5d7; -} - -.mytheme .valo-menuitems { - display: block; -} - -.mytheme .valo-menu-item { - outline: none; - font-weight: 400; - padding: 0 37px 0 19px; - cursor: pointer; - position: relative; - overflow: hidden; - text-shadow: 0 2px 0 rgba(0, 0, 0, 0.05); - -webkit-transition: background-color 300ms, color 60ms; - -moz-transition: background-color 300ms, color 60ms; - transition: background-color 300ms, color 60ms; -} - -.mytheme .valo-menu-item [class*="caption"] { - vertical-align: middle; - display: inline-block; - width: 90%; - max-width: 15em; - padding-right: 19px; - text-overflow: ellipsis; - overflow: hidden; -} - -.mytheme .valo-menu-item [class*="badge"] { - color: #73a5d7; -} - -.mytheme .valo-menu-item.selected { - background: #434343; -} - -.mytheme .valo-menu-item.selected .v-icon { - color: #197de1; -} - -.mytheme .valo-menu-item.selected [class*="badge"] { - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: #c8dbed; -} - -.mytheme .valo-menu-item:focus, .mytheme .valo-menu-item:hover, .mytheme .valo-menu-item.selected { - color: white; -} - -.mytheme .valo-menu-item span.v-icon { - min-width: 1em; - margin-right: 19px; - text-align: center; - vertical-align: middle; - -webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(black), to(rgba(0, 0, 0, 0.75))); -} - -.mytheme .valo-menu-item span.v-icon + span { - margin-left: 0; -} - -.mytheme .valo-menu-item [class*="badge"] { - background-color: #585858; - -webkit-transition: background-color 300ms; - -moz-transition: background-color 300ms; - transition: background-color 300ms; - line-height: 1; - padding: 4px 6px; - min-width: 11px; - text-align: center; - top: 4px; - border-radius: 4px; -} - -.mytheme .valo-menu-part.large-icons { - background-color: #4b4b4b; - min-width: 74px; - max-width: 111px; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-title { - font-size: 12px; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-title .v-label-undef-w { - white-space: normal; -} - -.mytheme .valo-menu-part.large-icons .v-menubar-user-menu { - margin-left: 0; - margin-right: 0; - font-size: 11px; -} - -.mytheme .valo-menu-part.large-icons .v-menubar-user-menu img.v-icon { - width: 28px; - height: 28px; -} - -.mytheme .valo-menu-part.large-icons [class*="subtitle"] { - margin: 9px 0 0; - padding: 7px 25px 7px 9px; - line-height: 1; - border: none; - text-overflow: ellipsis; - overflow: hidden; - background: #3c3c3c; - font-size: 13px; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); -} - -.mytheme .valo-menu-part.large-icons [class*="subtitle"] [class*="badge"] { - right: 9px; -} - -.mytheme .valo-menu-part.large-icons [class*="subtitle"] + .valo-menu-item { - border-top: none; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item { - display: block; - font-size: 26px; - line-height: 1; - padding: 12px; - text-align: center; - border-top: 1px solid #555555; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item:first-child { - border-top: none; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item [class*="caption"] { - display: block; - width: auto; - margin: 0.3em 0 0; - padding: 0; - font-size: 11px; - line-height: 1.3; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item .v-icon { - margin: 0; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item span.v-icon { - opacity: 0.8; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item.selected { - background: #434343; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item.selected .v-icon { - opacity: 1; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item.selected [class*="badge"] { - border-color: #434343; -} - -.mytheme .valo-menu-part.large-icons .valo-menu-item [class*="badge"] { - padding-left: 4px; - padding-right: 4px; - top: 7px; - right: 7px; - border: 2px solid #4b4b4b; -} - -.mytheme .valo-menu-logo { - display: block; - overflow: hidden; - width: 44px !important; - height: 44px; - border-radius: 4px; - text-align: center; - background-color: #197de1; - background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%); - background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%); - color: white; - font-size: 25px; - line-height: 44px; - margin: 19px auto; - -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); -} - -.mytheme .valo-menu-logo:focus { - outline: none; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part { - background-color: #4b4b4b; - min-width: 74px; - max-width: 111px; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title { - font-size: 12px; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title .v-label-undef-w { - white-space: normal; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu { - margin-left: 0; - margin-right: 0; - font-size: 11px; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu img.v-icon { - width: 28px; - height: 28px; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] { - margin: 9px 0 0; - padding: 7px 25px 7px 9px; - line-height: 1; - border: none; - text-overflow: ellipsis; - overflow: hidden; - background: #3c3c3c; - font-size: 13px; - box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05); -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] [class*="badge"] { - right: 9px; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] + .valo-menu-item { - border-top: none; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item { - display: block; - font-size: 26px; - line-height: 1; - padding: 12px; - text-align: center; - border-top: 1px solid #555555; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item:first-child { - border-top: none; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="caption"] { - display: block; - width: auto; - margin: 0.3em 0 0; - padding: 0; - font-size: 11px; - line-height: 1.3; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item .v-icon { - margin: 0; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item span.v-icon { - opacity: 0.8; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected { - background: #434343; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected .v-icon { - opacity: 1; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected [class*="badge"] { - border-color: #434343; -} - -.mytheme .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="badge"] { - padding-left: 4px; - padding-right: 4px; - top: 7px; - right: 7px; - border: 2px solid #4b4b4b; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] { - padding-top: 37px; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .v-loading-indicator { - top: 37px; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] > .v-widget { - position: relative !important; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu { - border-right: none; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu-part { - overflow: visible; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu-toggle { - display: inline-block; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu-title { - position: fixed; - z-index: 100; - top: 0; - left: 0; - right: 0; - height: 37px !important; - padding-top: 0; - padding-bottom: 0; - -webkit-backface-visibility: hidden; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu { - position: fixed; - z-index: 100; - top: 0; - right: 0; - margin: 0; - padding: 0; - height: 37px; - color: #97bee5; - max-width: 30%; - -webkit-backface-visibility: hidden; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem { - line-height: 36px; - white-space: nowrap; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu img.v-icon { - display: inline-block; - margin: 0 6px 0 0; - width: 19px; - height: 19px; - border-radius: 10px; - border: none; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menuitems { - height: 100%; - background-color: #4b4b4b; - background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px); - background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px); - color: #a5a5a5; - font-size: 14px; - line-height: 30px; - border-right: 1px solid #3b3b3b; - white-space: nowrap; - position: fixed; - z-index: 9000; - top: 37px; - bottom: 0; - height: auto; - max-width: 100%; - overflow: auto; - padding: 19px 0; - -webkit-transform: translatex(-100%); - -moz-transform: translatex(-100%); - -ms-transform: translatex(-100%); - -o-transform: translatex(-100%); - transform: translatex(-100%); - -webkit-transition: all 300ms; - -moz-transition: all 300ms; - transition: all 300ms; -} - -.mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu-visible .valo-menuitems, .mytheme .valo-menu-responsive[width-range~="0-800px"] .valo-menu-hover:hover .valo-menuitems { - -webkit-transform: translatex(0%); - -moz-transform: translatex(0%); - -ms-transform: translatex(0%); - -o-transform: translatex(0%); - transform: translatex(0%); -} - -.mytheme .valo-menu-responsive[width-range~="0-500px"] .valo-menu-toggle .v-button-caption { - display: none; -} - -.mytheme .valo-menu-responsive[width-range~="0-500px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem-caption { - display: inline-block; - width: 19px; - overflow: hidden; -} \ No newline at end of file diff --git a/vertx-and-rxjava/pom.xml b/vertx-and-rxjava/pom.xml index fb04ba784c..1793cff1e7 100644 --- a/vertx-and-rxjava/pom.xml +++ b/vertx-and-rxjava/pom.xml @@ -47,7 +47,6 @@ 3.5.0.Beta1 - 1.2.3 \ No newline at end of file diff --git a/vraptor/pom.xml b/vraptor/pom.xml index ab78c0d97a..fad17e7aae 100644 --- a/vraptor/pom.xml +++ b/vraptor/pom.xml @@ -68,7 +68,7 @@ org.slf4j slf4j-log4j12 - ${slf4j-log4j12.version} + ${org.slf4j.version} br.com.caelum.vraptor @@ -117,7 +117,6 @@ 2.1.2.Final 2.2 5.1.1.Final - 1.7.5 4.1.0-RC3 4.0.4 8.0.8-dmr
This is the tutorial to convert html to pdf.
true