diff --git a/.gitignore b/.gitignore index 60c38ed8f5cc..1890e8bd0ee1 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,11 @@ spring-openid/src/main/resources/application.properties spring-security-openid/src/main/resources/application.properties spring-all/*.log + +*.jar + +SpringDataInjectionDemo/.mvn/wrapper/maven-wrapper.properties + +spring-call-getters-using-reflection/.mvn/wrapper/maven-wrapper.properties + +spring-check-if-a-property-is-null/.mvn/wrapper/maven-wrapper.properties diff --git a/algorithms/README.md b/algorithms/README.md index f1e12ee243a9..dc12b528daac 100644 --- a/algorithms/README.md +++ b/algorithms/README.md @@ -6,3 +6,5 @@ - [Validating Input With Finite Automata in Java](http://www.baeldung.com/finite-automata-java) - [Introduction to Jenetics Library](http://www.baeldung.com/jenetics) - [Check If a Number Is Prime in Java](http://www.baeldung.com/java-prime-numbers) +- [Example of Hill Climbing Algorithm](http://www.baeldung.com/java-hill-climbing-algorithm) +- [Monte Carlo Tree Search for Tic-Tac-Toe Game](http://www.baeldung.com/java-monte-carlo-tree-search) diff --git a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java b/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java index d278418a8719..77089636c8d8 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java +++ b/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/HillClimbing.java @@ -186,4 +186,4 @@ public int getHeuristicsValueForStack(Stack stack, List> c return stackHeuristics; } -} +} \ No newline at end of file diff --git a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java b/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java index ad22aa27e72d..9180b33b5b12 100644 --- a/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java +++ b/algorithms/src/main/java/com/baeldung/algorithms/hillclimbing/State.java @@ -40,4 +40,4 @@ public int getHeuristics() { public void setHeuristics(int heuristics) { this.heuristics = heuristics; } -} +} \ No newline at end of file diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java b/algorithms/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java new file mode 100644 index 000000000000..8e14afcf7af7 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/minimax/GameOfBones.java @@ -0,0 +1,14 @@ +package com.baeldung.algorithms.minimax; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +class GameOfBones { + static List getPossibleStates(int noOfBonesInHeap) { + return IntStream.rangeClosed(1, 3).boxed() + .map(i -> noOfBonesInHeap - i) + .filter(newHeapCount -> newHeapCount >= 0) + .collect(Collectors.toList()); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java b/algorithms/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java new file mode 100644 index 000000000000..fed4ebed4879 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/minimax/MiniMax.java @@ -0,0 +1,60 @@ +package com.baeldung.algorithms.minimax; + +import java.util.Comparator; +import java.util.List; +import java.util.NoSuchElementException; + +public class MiniMax { + private Tree tree; + + public Tree getTree() { + return tree; + } + + public void constructTree(int noOfBones) { + tree = new Tree(); + Node root = new Node(noOfBones, true); + tree.setRoot(root); + constructTree(root); + } + + private void constructTree(Node parentNode) { + List listofPossibleHeaps = GameOfBones.getPossibleStates(parentNode.getNoOfBones()); + boolean isChildMaxPlayer = !parentNode.isMaxPlayer(); + listofPossibleHeaps.forEach(n -> { + Node newNode = new Node(n, isChildMaxPlayer); + parentNode.addChild(newNode); + if (newNode.getNoOfBones() > 0) { + constructTree(newNode); + } + }); + } + + public boolean checkWin() { + Node root = tree.getRoot(); + checkWin(root); + return root.getScore() == 1; + } + + private void checkWin(Node node) { + List children = node.getChildren(); + boolean isMaxPlayer = node.isMaxPlayer(); + children.forEach(child -> { + if (child.getNoOfBones() == 0) { + child.setScore(isMaxPlayer ? 1 : -1); + } else { + checkWin(child); + } + }); + Node bestChild = findBestChild(isMaxPlayer, children); + node.setScore(bestChild.getScore()); + } + + private Node findBestChild(boolean isMaxPlayer, List children) { + Comparator byScoreComparator = Comparator.comparing(Node::getScore); + + return children.stream() + .max(isMaxPlayer ? byScoreComparator : byScoreComparator.reversed()) + .orElseThrow(NoSuchElementException::new); + } +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/Node.java b/algorithms/src/main/java/com/baeldung/algorithms/minimax/Node.java new file mode 100644 index 000000000000..4ceef0073da3 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/minimax/Node.java @@ -0,0 +1,42 @@ +package com.baeldung.algorithms.minimax; + +import java.util.ArrayList; +import java.util.List; + +public class Node { + private int noOfBones; + private boolean isMaxPlayer; + private int score; + private List children; + + public Node(int noOfBones, boolean isMaxPlayer) { + this.noOfBones = noOfBones; + this.isMaxPlayer = isMaxPlayer; + children = new ArrayList<>(); + } + + int getNoOfBones() { + return noOfBones; + } + + boolean isMaxPlayer() { + return isMaxPlayer; + } + + int getScore() { + return score; + } + + void setScore(int score) { + this.score = score; + } + + List getChildren() { + return children; + } + + void addChild(Node newNode) { + children.add(newNode); + } + +} diff --git a/algorithms/src/main/java/com/baeldung/algorithms/minimax/Tree.java b/algorithms/src/main/java/com/baeldung/algorithms/minimax/Tree.java new file mode 100644 index 000000000000..34c56cdd5804 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/minimax/Tree.java @@ -0,0 +1,16 @@ +package com.baeldung.algorithms.minimax; + +public class Tree { + private Node root; + + Tree() { + } + + Node getRoot() { + return root; + } + + void setRoot(Node root) { + this.root = root; + } +} diff --git a/algorithms/src/test/java/algorithms/HillClimbingAlgorithmTest.java b/algorithms/src/test/java/algorithms/HillClimbingAlgorithmTest.java index 6e5055da6e6b..666adbb18010 100644 --- a/algorithms/src/test/java/algorithms/HillClimbingAlgorithmTest.java +++ b/algorithms/src/test/java/algorithms/HillClimbingAlgorithmTest.java @@ -55,4 +55,4 @@ public void givenCurrentState_whenFindNextState_thenBetterHeuristics() { State nextState = hillClimbing.findNextState(currentState, goalStack); assertTrue(nextState.getHeuristics() > currentState.getHeuristics()); } -} +} \ No newline at end of file diff --git a/algorithms/src/test/java/algorithms/MCTSTest.java b/algorithms/src/test/java/algorithms/MCTSTest.java new file mode 100644 index 000000000000..f969c26311d3 --- /dev/null +++ b/algorithms/src/test/java/algorithms/MCTSTest.java @@ -0,0 +1,92 @@ +package algorithms; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.algorithms.mcts.montecarlo.MonteCarloTreeSearch; +import com.baeldung.algorithms.mcts.montecarlo.State; +import com.baeldung.algorithms.mcts.montecarlo.UCT; +import com.baeldung.algorithms.mcts.tictactoe.Board; +import com.baeldung.algorithms.mcts.tictactoe.Position; +import com.baeldung.algorithms.mcts.tree.Tree; + +public class MCTSTest { + Tree gameTree; + MonteCarloTreeSearch mcts; + + @Before + public void initGameTree() { + gameTree = new Tree(); + mcts = new MonteCarloTreeSearch(); + } + + @Test + public void givenStats_whenGetUCTForNode_thenUCTMatchesWithManualData() { + double uctValue = 15.79; + assertEquals(UCT.uctValue(600, 300, 20), uctValue, 0.01); + } + + @Test + public void giveninitBoardState_whenGetAllPossibleStates_thenNonEmptyList() { + State initState = gameTree.getRoot().getState(); + List possibleStates = initState.getAllPossibleStates(); + assertTrue(possibleStates.size() > 0); + } + + @Test + public void givenEmptyBoard_whenPerformMove_thenLessAvailablePossitions() { + Board board = new Board(); + int initAvailablePositions = board.getEmptyPositions().size(); + board.performMove(Board.P1, new Position(1, 1)); + int availablePositions = board.getEmptyPositions().size(); + assertTrue(initAvailablePositions > availablePositions); + } + + @Test + public void givenEmptyBoard_whenSimulateInterAIPlay_thenGameDraw() { + Board board = new Board(); + + int player = Board.P1; + int totalMoves = Board.DEFAULT_BOARD_SIZE * Board.DEFAULT_BOARD_SIZE; + for (int i = 0; i < totalMoves; i++) { + board = mcts.findNextMove(board, player); + if (board.checkStatus() != -1) { + break; + } + player = 3 - player; + } + int winStatus = board.checkStatus(); + assertEquals(winStatus, Board.DRAW); + } + + @Test + public void givenEmptyBoard_whenLevel1VsLevel3_thenLevel3WinsOrDraw() { + Board board = new Board(); + MonteCarloTreeSearch mcts1 = new MonteCarloTreeSearch(); + mcts1.setLevel(1); + MonteCarloTreeSearch mcts3 = new MonteCarloTreeSearch(); + mcts3.setLevel(3); + + int player = Board.P1; + int totalMoves = Board.DEFAULT_BOARD_SIZE * Board.DEFAULT_BOARD_SIZE; + for (int i = 0; i < totalMoves; i++) { + if (player == Board.P1) + board = mcts3.findNextMove(board, player); + else + board = mcts1.findNextMove(board, player); + + if (board.checkStatus() != -1) { + break; + } + player = 3 - player; + } + int winStatus = board.checkStatus(); + assertTrue(winStatus == Board.DRAW || winStatus == Board.P1); + } + +} diff --git a/algorithms/src/test/java/algorithms/minimax/MinimaxTest.java b/algorithms/src/test/java/algorithms/minimax/MinimaxTest.java new file mode 100644 index 000000000000..b29c16386c63 --- /dev/null +++ b/algorithms/src/test/java/algorithms/minimax/MinimaxTest.java @@ -0,0 +1,36 @@ +package algorithms.minimax; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; +import com.baeldung.algorithms.minimax.MiniMax; +import com.baeldung.algorithms.minimax.Tree; + +public class MinimaxTest { + private Tree gameTree; + private MiniMax miniMax; + + @Before + public void initMiniMaxUtility() { + miniMax = new MiniMax(); + } + + @Test + public void givenMiniMax_whenConstructTree_thenNotNullTree() { + assertNull(gameTree); + miniMax.constructTree(6); + gameTree = miniMax.getTree(); + assertNotNull(gameTree); + } + + @Test + public void givenMiniMax_whenCheckWin_thenComputeOptimal() { + miniMax.constructTree(6); + boolean result = miniMax.checkWin(); + assertTrue(result); + miniMax.constructTree(8); + result = miniMax.checkWin(); + assertFalse(result); + } +} diff --git a/aws/pom.xml b/aws/pom.xml index 8d60240c8782..c66c420fae44 100644 --- a/aws/pom.xml +++ b/aws/pom.xml @@ -18,9 +18,41 @@ 1.3.0 1.1.0 2.8.0 + 1.11.154 + 4.12 + 2.8.9 + 3.8.0 + + + com.amazonaws + aws-java-sdk + ${aws-java-sdk.version} + + + + junit + junit + ${junit.version} + test + + + + org.mockito + mockito-core + ${mockito-core.version} + test + + + + org.assertj + assertj-core + ${assertj-core.version} + test + + com.amazonaws aws-lambda-java-core diff --git a/aws/src/main/java/com/baeldung/s3/AWSS3Service.java b/aws/src/main/java/com/baeldung/s3/AWSS3Service.java new file mode 100644 index 000000000000..792e41a18818 --- /dev/null +++ b/aws/src/main/java/com/baeldung/s3/AWSS3Service.java @@ -0,0 +1,87 @@ +package com.baeldung.s3; + +import java.io.File; +import java.util.List; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.Bucket; +import com.amazonaws.services.s3.model.CopyObjectResult; +import com.amazonaws.services.s3.model.DeleteObjectsRequest; +import com.amazonaws.services.s3.model.DeleteObjectsResult; +import com.amazonaws.services.s3.model.ObjectListing; +import com.amazonaws.services.s3.model.PutObjectResult; +import com.amazonaws.services.s3.model.S3Object; + +public class AWSS3Service { + private final AmazonS3 s3client; + + public AWSS3Service() { + this(new AmazonS3Client() { + }); + } + + public AWSS3Service(AmazonS3 s3client) { + this.s3client = s3client; + } + + //is bucket exist? + public boolean doesBucketExist(String bucketName) { + return s3client.doesBucketExist(bucketName); + } + + //create a bucket + public Bucket createBucket(String bucketName) { + return s3client.createBucket(bucketName); + } + + //list all buckets + public List listBuckets() { + return s3client.listBuckets(); + } + + //delete a bucket + public void deleteBucket(String bucketName) { + s3client.deleteBucket(bucketName); + } + + //uploading object + public PutObjectResult putObject(String bucketName, String key, File file) { + return s3client.putObject(bucketName, key, file); + } + + //listing objects + public ObjectListing listObjects(String bucketName) { + return s3client.listObjects(bucketName); + } + + //get an object + public S3Object getObject(String bucketName, String objectKey) { + return s3client.getObject(bucketName, objectKey); + } + + //copying an object + public CopyObjectResult copyObject( + String sourceBucketName, + String sourceKey, + String destinationBucketName, + String destinationKey + ) { + return s3client.copyObject( + sourceBucketName, + sourceKey, + destinationBucketName, + destinationKey + ); + } + + //deleting an object + public void deleteObject(String bucketName, String objectKey) { + s3client.deleteObject(bucketName, objectKey); + } + + //deleting multiple Objects + public DeleteObjectsResult deleteObjects(DeleteObjectsRequest delObjReq) { + return s3client.deleteObjects(delObjReq); + } +} diff --git a/aws/src/main/java/com/baeldung/s3/S3Application.java b/aws/src/main/java/com/baeldung/s3/S3Application.java new file mode 100644 index 000000000000..fcbd7811b543 --- /dev/null +++ b/aws/src/main/java/com/baeldung/s3/S3Application.java @@ -0,0 +1,108 @@ +package com.baeldung.s3; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.model.Bucket; +import com.amazonaws.services.s3.model.DeleteObjectsRequest; +import com.amazonaws.services.s3.model.ObjectListing; +import com.amazonaws.services.s3.model.S3Object; +import com.amazonaws.services.s3.model.S3ObjectInputStream; +import com.amazonaws.services.s3.model.S3ObjectSummary; + +public class S3Application { + + private static final AWSCredentials credentials; + private static String bucketName; + + static { + //put your accesskey and secretkey here + credentials = new BasicAWSCredentials( + "", + "" + ); + } + + public static void main(String[] args) throws IOException { + //set-up the client + AmazonS3 s3client = AmazonS3ClientBuilder + .standard() + .withCredentials(new AWSStaticCredentialsProvider(credentials)) + .withRegion(Regions.US_EAST_2) + .build(); + + AWSS3Service awsService = new AWSS3Service(s3client); + + bucketName = "baeldung-bucket"; + + //creating a bucket + if(awsService.doesBucketExist(bucketName)) { + System.out.println("Bucket name is not available." + + " Try again with a different Bucket name."); + return; + } + awsService.createBucket(bucketName); + + //list all the buckets + for(Bucket s : awsService.listBuckets() ) { + System.out.println(s.getName()); + } + + //deleting bucket + awsService.deleteBucket("baeldung-bucket-test2"); + + //uploading object + awsService.putObject( + bucketName, + "Document/hello.txt", + new File("/Users/user/Document/hello.txt") + ); + + //listing objects + ObjectListing objectListing = awsService.listObjects(bucketName); + for(S3ObjectSummary os : objectListing.getObjectSummaries()) { + System.out.println(os.getKey()); + } + + //downloading an object + S3Object s3object = awsService.getObject(bucketName, "Document/hello.txt"); + S3ObjectInputStream inputStream = s3object.getObjectContent(); + FileOutputStream fos = new FileOutputStream(new File("/Users/user/Desktop/hello.txt")); + + int read = 0; + byte[] bytes = new byte[1024]; + while ((read = inputStream.read(bytes)) != -1) { + fos.write(bytes, 0, read); + } + inputStream.close(); + fos.close(); + + //copying an object + awsService.copyObject( + "baeldung-bucket", + "picture/pic.png", + "baeldung-bucket2", + "Document/picture.png" + ); + + //deleting an object + awsService.deleteObject(bucketName, "Document/hello.txt"); + + //deleting multiple objects + String objkeyArr[] = { + "Document/hello2.txt", + "Document/picture.png" + }; + + DeleteObjectsRequest delObjReq = new DeleteObjectsRequest("baeldung-bucket") + .withKeys(objkeyArr); + awsService.deleteObjects(delObjReq); + } +} diff --git a/aws/src/test/java/com/baeldung/s3/AWSS3ServiceIntegrationTest.java b/aws/src/test/java/com/baeldung/s3/AWSS3ServiceIntegrationTest.java new file mode 100644 index 000000000000..d38670451310 --- /dev/null +++ b/aws/src/test/java/com/baeldung/s3/AWSS3ServiceIntegrationTest.java @@ -0,0 +1,113 @@ +package com.baeldung.s3; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.File; + +import org.junit.Before; +import org.junit.Test; + +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.CopyObjectResult; +import com.amazonaws.services.s3.model.DeleteObjectsRequest; +import com.amazonaws.services.s3.model.DeleteObjectsResult; +import com.amazonaws.services.s3.model.PutObjectResult; + +public class AWSS3ServiceIntegrationTest { + + private static final String BUCKET_NAME = "bucket_name"; + private static final String KEY_NAME = "key_name"; + private static final String BUCKET_NAME2 = "bucket_name2"; + private static final String KEY_NAME2 = "key_name2"; + + private AmazonS3 s3; + private AWSS3Service service; + + @Before + public void setUp() { + s3 = mock(AmazonS3.class); + service = new AWSS3Service(s3); + } + + @Test + public void whenInitializingAWSS3Service_thenNotNull() { + assertThat(new AWSS3Service()).isNotNull(); + } + + @Test + public void whenVerifyingIfS3BucketExist_thenCorrect() { + service.doesBucketExist(BUCKET_NAME); + verify(s3).doesBucketExist(BUCKET_NAME); + } + + @Test + public void whenVerifyingCreationOfS3Bucket_thenCorrect() { + service.createBucket(BUCKET_NAME); + verify(s3).createBucket(BUCKET_NAME); + } + + @Test + public void whenVerifyingListBuckets_thenCorrect() { + service.listBuckets(); + verify(s3).listBuckets(); + } + + @Test + public void whenDeletingBucket_thenCorrect() { + service.deleteBucket(BUCKET_NAME); + verify(s3).deleteBucket(BUCKET_NAME); + } + + @Test + public void whenVerifyingPutObject_thenCorrect() { + File file = mock(File.class); + PutObjectResult result = mock(PutObjectResult.class); + when(s3.putObject(anyString(), anyString(), (File) any())).thenReturn(result); + + assertThat(service.putObject(BUCKET_NAME, KEY_NAME, file)).isEqualTo(result); + verify(s3).putObject(BUCKET_NAME, KEY_NAME, file); + } + + @Test + public void whenVerifyingListObjects_thenCorrect() { + service.listObjects(BUCKET_NAME); + verify(s3).listObjects(BUCKET_NAME); + } + + @Test + public void whenVerifyingGetObject_thenCorrect() { + service.getObject(BUCKET_NAME, KEY_NAME); + verify(s3).getObject(BUCKET_NAME, KEY_NAME); + } + + @Test + public void whenVerifyingCopyObject_thenCorrect() { + CopyObjectResult result = mock(CopyObjectResult.class); + when(s3.copyObject(anyString(), anyString(), anyString(), anyString())).thenReturn(result); + + assertThat(service.copyObject(BUCKET_NAME, KEY_NAME, BUCKET_NAME2, KEY_NAME2)).isEqualTo(result); + verify(s3).copyObject(BUCKET_NAME, KEY_NAME, BUCKET_NAME2, KEY_NAME2); + } + + @Test + public void whenVerifyingDeleteObject_thenCorrect() { + service.deleteObject(BUCKET_NAME, KEY_NAME); + verify(s3).deleteObject(BUCKET_NAME, KEY_NAME); + } + + @Test + public void whenVerifyingDeleteObjects_thenCorrect() { + DeleteObjectsRequest request = mock(DeleteObjectsRequest.class); + DeleteObjectsResult result = mock(DeleteObjectsResult.class); + when(s3.deleteObjects((DeleteObjectsRequest)any())).thenReturn(result); + + assertThat(service.deleteObjects(request)).isEqualTo(result); + verify(s3).deleteObjects(request); + } + +} diff --git a/camel-api/README.md b/camel-api/README.md new file mode 100644 index 000000000000..fe8dadcfe1bc --- /dev/null +++ b/camel-api/README.md @@ -0,0 +1,15 @@ +Example for the Article on Camel API with SpringBoot + +to start up, run: + mvn spring-boot:run + +them, do a POST http request to: + http://localhost:8080/camel/api/bean + +with the HEADER: Content-Type: application/json, + +and a BODY Payload like {"id": 1,"name": "World"} + +and we will get a return code of 201 and the response: Hello, World - if the transform() method from Application class is uncommented and the process() method is commented + +or return code of 201 and the response: {"id": 10,"name": "Hello, World"} - if the transform() method from Application class is commented and the process() method is uncommented diff --git a/camel-api/pom.xml b/camel-api/pom.xml new file mode 100644 index 000000000000..6db9f9bfd17c --- /dev/null +++ b/camel-api/pom.xml @@ -0,0 +1,80 @@ + + + + 4.0.0 + + com.example + spring-boot-camel + 0.0.1-SNAPSHOT + + Spring-Boot - Camel API + + + UTF-8 + 3.6.0 + 2.19.1 + 2.19.1 + 1.5.4.RELEASE + + + + + org.apache.camel + camel-servlet-starter + ${camel.version} + + + org.apache.camel + camel-jackson-starter + ${camel.version} + + + org.apache.camel + camel-swagger-java-starter + ${camel.version} + + + org.apache.camel + camel-spring-boot-starter + ${camel.version} + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot-starter.version} + + + + + spring-boot:run + + + + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot-starter.version} + + + + repackage + + + + + + + diff --git a/camel-api/src/main/java/com/baeldung/camel/Application.java b/camel-api/src/main/java/com/baeldung/camel/Application.java new file mode 100644 index 000000000000..f805385ff959 --- /dev/null +++ b/camel-api/src/main/java/com/baeldung/camel/Application.java @@ -0,0 +1,104 @@ +package com.baeldung.camel; + +import javax.ws.rs.core.MediaType; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.servlet.CamelHttpTransportServlet; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.model.rest.RestBindingMode; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletRegistrationBean; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.stereotype.Component; + +@SpringBootApplication +@ComponentScan(basePackages="com.baeldung.camel") +public class Application extends SpringBootServletInitializer { + + @Value("${server.port}") + String serverPort; + + @Value("${baeldung.api.path}") + String contextPath; + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + ServletRegistrationBean servletRegistrationBean() { + ServletRegistrationBean servlet = new ServletRegistrationBean(new CamelHttpTransportServlet(), contextPath+"/*"); + servlet.setName("CamelServlet"); + return servlet; + } + + + @Component + class RestApi extends RouteBuilder { + + @Override + public void configure() { + + CamelContext context = new DefaultCamelContext(); + + + // http://localhost:8080/camel/api-doc + restConfiguration().contextPath(contextPath) // + .port(serverPort) + .enableCORS(true) + .apiContextPath("/api-doc") + .apiProperty("api.title", "Test REST API") + .apiProperty("api.version", "v1") + .apiProperty("cors", "true") // cross-site + .apiContextRouteId("doc-api") + .component("servlet") + .bindingMode(RestBindingMode.json) + .dataFormatProperty("prettyPrint", "true"); +/** +The Rest DSL supports automatic binding json/xml contents to/from POJOs using Camels Data Format. +By default the binding mode is off, meaning there is no automatic binding happening for incoming and outgoing messages. +You may want to use binding if you develop POJOs that maps to your REST services request and response types. +This allows you, as a developer, to work with the POJOs in Java code. +*/ + + rest("/api/").description("Teste REST Service") + .id("api-route") + .post("/bean") + .produces(MediaType.APPLICATION_JSON) + .consumes(MediaType.APPLICATION_JSON) +// .get("/hello/{place}") + .bindingMode(RestBindingMode.auto) + .type(MyBean.class) + .enableCORS(true) +// .outType(OutBean.class) + + .to("direct:remoteService"); + + + from("direct:remoteService") + .routeId("direct-route") + .tracing() + .log(">>> ${body.id}") + .log(">>> ${body.name}") +// .transform().simple("blue ${in.body.name}") + .process(new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + MyBean bodyIn = (MyBean) exchange.getIn().getBody(); + + ExampleServices.example(bodyIn); + + exchange.getIn().setBody(bodyIn); + } + }) + .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(201)); + } + } +} diff --git a/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java b/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java new file mode 100644 index 000000000000..ec8f368e6860 --- /dev/null +++ b/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java @@ -0,0 +1,15 @@ +package com.baeldung.camel; + +/** + * a Mock class to show how some other layer + * (a persistence layer, for instance) + * could be used insida a Camel + * + */ +public class ExampleServices { + + public static void example(MyBean bodyIn) { + bodyIn.setName( "Hello, " + bodyIn.getName() ); + bodyIn.setId(bodyIn.getId()*10); + } +} diff --git a/camel-api/src/main/java/com/baeldung/camel/MyBean.java b/camel-api/src/main/java/com/baeldung/camel/MyBean.java new file mode 100644 index 000000000000..5368e40c9344 --- /dev/null +++ b/camel-api/src/main/java/com/baeldung/camel/MyBean.java @@ -0,0 +1,18 @@ +package com.baeldung.camel; + +public class MyBean { + private Integer id; + private String name; + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/camel-api/src/main/resources/application.properties b/camel-api/src/main/resources/application.properties new file mode 100644 index 000000000000..bce95f8eaf0f --- /dev/null +++ b/camel-api/src/main/resources/application.properties @@ -0,0 +1,15 @@ +logging.config=classpath:logback.xml + +# the options from org.apache.camel.spring.boot.CamelConfigurationProperties can be configured here +camel.springboot.name=MyCamel + +# lets listen on all ports to ensure we can be invoked from the pod IP +server.address=0.0.0.0 +management.address=0.0.0.0 + +# lets use a different management port in case you need to listen to HTTP requests on 8080 +management.port=8081 + +# disable all management enpoints except health +endpoints.enabled = true +endpoints.health.enabled = true \ No newline at end of file diff --git a/camel-api/src/main/resources/application.yml b/camel-api/src/main/resources/application.yml new file mode 100644 index 000000000000..3a4b913db7dd --- /dev/null +++ b/camel-api/src/main/resources/application.yml @@ -0,0 +1,27 @@ +server: + port: 8080 + +# for example purposes of Camel version 2.18 and below +baeldung: + api: + path: '/camel' + +camel: + springboot: + # The Camel context name + name: ServicesRest + +# Binding health checks to a different port +management: + port: 8081 + +# disable all management enpoints except health +endpoints: + enabled: false + health: + enabled: true + +# The application configuration properties +quickstart: + generateOrderPeriod: 10s + processOrderPeriod: 30s diff --git a/camel-api/src/main/resources/logback.xml b/camel-api/src/main/resources/logback.xml new file mode 100644 index 000000000000..d0b4334f5a23 --- /dev/null +++ b/camel-api/src/main/resources/logback.xml @@ -0,0 +1,17 @@ + + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/core-java-9/README.md b/core-java-9/README.md index 3e82ffe14b23..22d6903f0638 100644 --- a/core-java-9/README.md +++ b/core-java-9/README.md @@ -13,3 +13,6 @@ - [Java 9 Process API Improvements](http://www.baeldung.com/java-9-process-api) - [Introduction to Java 9 StackWalking API](http://www.baeldung.com/java-9-stackwalking-api) - [Introduction to Project Jigsaw](http://www.baeldung.com/project-jigsaw-java-modularity) +- [Java 9 Optional API Additions](http://www.baeldung.com/java-9-optional) +- [Java 9 Reactive Streams](http://www.baeldung.com/java-9-reactive-streams) +- [How to Get All Dates Between Two Dates?](http://www.baeldung.com/java-between-dates) diff --git a/core-java/README.md b/core-java/README.md index 559507e47236..dabf6f39be29 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -113,6 +113,16 @@ - [Difference Between Wait and Sleep in Java](http://www.baeldung.com/java-wait-and-sleep) - [LongAdder and LongAccumulator in Java](http://www.baeldung.com/java-longadder-and-longaccumulator) - [Using Java MappedByteBuffer](http://www.baeldung.com/java-mapped-byte-buffer) +- [The Dining Philosophers Problem in Java](http://www.baeldung.com/java-dining-philoshophers) +- [The Difference Between map() and flatMap()](http://www.baeldung.com/java-difference-map-and-flatmap) +- [How to Round a Number to N Decimal Places in Java](http://www.baeldung.com/java-round-decimal-number) +- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params) +- [How to Find all Getters Returning Null](http://www.baeldung.com/java-getters-returning-null) +- [Converting String to Stream of chars](http://www.baeldung.com/java-string-to-stream) +- [Changing the Order in a Sum Operation Can Produce Different Results?](http://www.baeldung.com/java-floating-point-sum-order) +- [How to Get a Name of a Method Being Executed?](http://www.baeldung.com/java-name-of-executing-method) +- [Iterate over a Map in Java](http://www.baeldung.com/java-iterate-map) +- [CyclicBarrier in Java](http://www.baeldung.com/java-cyclic-barrier) - [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies) - [How to Copy an Array in Java](http://www.baeldung.com/java-array-copy) - [Introduction to JDBC](http://www.baeldung.com/java-jdbc) diff --git a/core-java/pom.xml b/core-java/pom.xml index 2267dba1e6f4..ee0d6b4b4a38 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -327,6 +327,22 @@ + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + java + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + -Xmx300m + -XX:+UseParallelGC + -classpath + + com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed + + + @@ -401,4 +417,4 @@ 2.19.1 - \ No newline at end of file + diff --git a/core-java/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java b/core-java/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java new file mode 100644 index 000000000000..171f308c1682 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java @@ -0,0 +1,46 @@ +package com.baeldung.concurrent.Scheduledexecutorservice; + +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +public class ScheduledExecutorServiceDemo { + + public void execute() { + ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); + + ScheduledFuture scheduledFuture = executorService.schedule(new Runnable() { + @Override + public void run() { + // task details + } + }, 1, TimeUnit.SECONDS); + + executorService.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + // task details + } + }, 1, 10, TimeUnit.SECONDS); + + executorService.scheduleWithFixedDelay(new Runnable() { + @Override + public void run() { + // task details + } + }, 1, 10, TimeUnit.SECONDS); + + Future future = executorService.schedule(new Callable() { + @Override + public String call() throws Exception { + return "Hello World"; + } + }, 1, TimeUnit.SECONDS); + + executorService.shutdown(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java b/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java new file mode 100644 index 000000000000..b2502018bbda --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java @@ -0,0 +1,13 @@ +package com.baeldung.concurrent.atomic; + +public class SafeCounterWithLock { + int counter; + + public int getValue() { + return counter; + } + + public synchronized void increment() { + counter++; + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java b/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java new file mode 100644 index 000000000000..55226f4f13ed --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java @@ -0,0 +1,21 @@ +package com.baeldung.concurrent.atomic; + +import java.util.concurrent.atomic.AtomicInteger; + +public class SafeCounterWithoutLock { + AtomicInteger counter = new AtomicInteger(0); + + public int getValue() { + return counter.get(); + } + + public void increment() { + while(true) { + int existingValue = getValue(); + int newValue = existingValue + 1; + if(counter.compareAndSet(existingValue, newValue)) { + return; + } + } + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java b/core-java/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java new file mode 100644 index 000000000000..8a7278884262 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java @@ -0,0 +1,13 @@ +package com.baeldung.concurrent.atomic; + +public class UnsafeCounter { + int counter; + + public int getValue() { + return counter; + } + + public void increment() { + counter++; + } +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java index 13fe0c312647..7b261b2b8e6a 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java +++ b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersConsumer.java @@ -6,7 +6,7 @@ public class NumbersConsumer implements Runnable { private final BlockingQueue queue; private final int poisonPill; - public NumbersConsumer(BlockingQueue queue, int poisonPill) { + NumbersConsumer(BlockingQueue queue, int poisonPill) { this.queue = queue; this.poisonPill = poisonPill; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java index b262097c637b..9dcd0a3e4753 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java +++ b/core-java/src/main/java/com/baeldung/concurrent/blockingqueue/NumbersProducer.java @@ -9,7 +9,7 @@ public class NumbersProducer implements Runnable { private final int poisonPill; private final int poisonPillPerProducer; - public NumbersProducer(BlockingQueue numbersQueue, int poisonPill, int poisonPillPerProducer) { + NumbersProducer(BlockingQueue numbersQueue, int poisonPill, int poisonPillPerProducer) { this.numbersQueue = numbersQueue; this.poisonPill = poisonPill; this.poisonPillPerProducer = poisonPillPerProducer; diff --git a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java index 90cd01b69f10..d48f317fe7c0 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java +++ b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java @@ -7,7 +7,7 @@ public class BrokenWorker implements Runnable { private final List outputScraper; private final CountDownLatch countDownLatch; - public BrokenWorker(final List outputScraper, final CountDownLatch countDownLatch) { + BrokenWorker(final List outputScraper, final CountDownLatch countDownLatch) { this.outputScraper = outputScraper; this.countDownLatch = countDownLatch; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java index 66be2030e220..4aee5cf89ac0 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java +++ b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java @@ -10,7 +10,7 @@ public class WaitingWorker implements Runnable { private final CountDownLatch callingThreadBlocker; private final CountDownLatch completedThreadCounter; - public WaitingWorker(final List outputScraper, final CountDownLatch readyThreadCounter, final CountDownLatch callingThreadBlocker, CountDownLatch completedThreadCounter) { + WaitingWorker(final List outputScraper, final CountDownLatch readyThreadCounter, final CountDownLatch callingThreadBlocker, CountDownLatch completedThreadCounter) { this.outputScraper = outputScraper; this.readyThreadCounter = readyThreadCounter; diff --git a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java index e712fc18d690..389e25719bdb 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java +++ b/core-java/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java @@ -7,7 +7,7 @@ public class Worker implements Runnable { private final List outputScraper; private final CountDownLatch countDownLatch; - public Worker(final List outputScraper, final CountDownLatch countDownLatch) { + Worker(final List outputScraper, final CountDownLatch countDownLatch) { this.outputScraper = outputScraper; this.countDownLatch = countDownLatch; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java index 69b6d46599be..977dae4fdbd8 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java +++ b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java @@ -7,9 +7,6 @@ import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; -/** - * Created by cv on 24/6/17. - */ public class CyclicBarrierDemo { private CyclicBarrier cyclicBarrier; @@ -19,7 +16,7 @@ public class CyclicBarrierDemo { private int NUM_WORKERS; - public void runSimulation(int numWorkers, int numberOfPartialResults) { + private void runSimulation(int numWorkers, int numberOfPartialResults) { NUM_PARTIAL_RESULTS = numberOfPartialResults; NUM_WORKERS = numWorkers; @@ -49,9 +46,7 @@ public void run() { try { System.out.println(thisThreadName + " waiting for others to reach barrier."); cyclicBarrier.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (BrokenBarrierException e) { + } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java new file mode 100644 index 000000000000..e6075c933e89 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java @@ -0,0 +1,27 @@ +package com.baeldung.concurrent.cyclicbarrier; + +import java.util.concurrent.CyclicBarrier; + +public class CyclicBarrierExample { + + public void start() { + CyclicBarrier cyclicBarrier = new CyclicBarrier(3, new Runnable() { + @Override + public void run() { + System.out.println("All previous tasks are completed"); + } + }); + + Thread t1 = new Thread(new Task(cyclicBarrier), "T1"); + Thread t2 = new Thread(new Task(cyclicBarrier), "T2"); + Thread t3 = new Thread(new Task(cyclicBarrier), "T3"); + + if (!cyclicBarrier.isBroken()) { + t1.start(); + t2.start(); + t3.start(); + } + + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java new file mode 100644 index 000000000000..4f7801e8c519 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java @@ -0,0 +1,25 @@ +package com.baeldung.concurrent.cyclicbarrier; + +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +public class Task implements Runnable { + + private CyclicBarrier barrier; + + public Task(CyclicBarrier barrier) { + this.barrier = barrier; + } + + @Override + public void run() { + try { + System.out.println("Thread : "+ Thread.currentThread().getName() + " is waiting"); + barrier.await(); + System.out.println("Thread : "+ Thread.currentThread().getName() + " is released"); + } catch (InterruptedException | BrokenBarrierException e) { + e.printStackTrace(); + } + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayObject.java b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayObject.java index aa4ca58d6a71..5f72758e7195 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayObject.java +++ b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayObject.java @@ -9,7 +9,7 @@ public class DelayObject implements Delayed { private String data; private long startTime; - public DelayObject(String data, long delayInMilliseconds) { + DelayObject(String data, long delayInMilliseconds) { this.data = data; this.startTime = System.currentTimeMillis() + delayInMilliseconds; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueConsumer.java b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueConsumer.java index 8a969bf7aa37..d1c1eae9f235 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueConsumer.java +++ b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueConsumer.java @@ -7,9 +7,9 @@ public class DelayQueueConsumer implements Runnable { private BlockingQueue queue; private final Integer numberOfElementsToTake; - public final AtomicInteger numberOfConsumedElements = new AtomicInteger(); + final AtomicInteger numberOfConsumedElements = new AtomicInteger(); - public DelayQueueConsumer(BlockingQueue queue, Integer numberOfElementsToTake) { + DelayQueueConsumer(BlockingQueue queue, Integer numberOfElementsToTake) { this.queue = queue; this.numberOfElementsToTake = numberOfElementsToTake; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueProducer.java b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueProducer.java index 617f19b9acd5..f24f4bc38596 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueProducer.java +++ b/core-java/src/main/java/com/baeldung/concurrent/delayqueue/DelayQueueProducer.java @@ -9,9 +9,9 @@ public class DelayQueueProducer implements Runnable { private final Integer numberOfElementsToProduce; private final Integer delayOfEachProducedMessageMilliseconds; - public DelayQueueProducer(BlockingQueue queue, - Integer numberOfElementsToProduce, - Integer delayOfEachProducedMessageMilliseconds) { + DelayQueueProducer(BlockingQueue queue, + Integer numberOfElementsToProduce, + Integer delayOfEachProducedMessageMilliseconds) { this.queue = queue; this.numberOfElementsToProduce = numberOfElementsToProduce; this.delayOfEachProducedMessageMilliseconds = delayOfEachProducedMessageMilliseconds; diff --git a/core-java/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java b/core-java/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java index 3f1eacd27681..c5672706ad2e 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java +++ b/core-java/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java @@ -5,7 +5,7 @@ public class Philosopher implements Runnable { private final Object leftFork; private final Object rightFork; - public Philosopher(Object left, Object right) { + Philosopher(Object left, Object right) { this.leftFork = left; this.rightFork = right; } @@ -30,7 +30,6 @@ private void doAction(String action) throws InterruptedException { } } catch (InterruptedException e) { Thread.currentThread().interrupt(); - return; } } } \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java b/core-java/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java new file mode 100644 index 000000000000..9392134bfb70 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java @@ -0,0 +1,17 @@ +package com.baeldung.concurrent.executor; + +import java.util.concurrent.Executor; + +public class ExecutorDemo { + + public void execute() { + Executor executor = new Invoker(); + executor.execute(new Runnable() { + @Override + public void run() { + // task to be performed + } + }); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/executor/Invoker.java b/core-java/src/main/java/com/baeldung/concurrent/executor/Invoker.java new file mode 100644 index 000000000000..d9f11986d65d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/executor/Invoker.java @@ -0,0 +1,12 @@ +package com.baeldung.concurrent.executor; + +import java.util.concurrent.Executor; + +public class Invoker implements Executor { + + @Override + public void execute(Runnable r) { + r.run(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java b/core-java/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java new file mode 100644 index 000000000000..631ae140ab06 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java @@ -0,0 +1,32 @@ +package com.baeldung.concurrent.executorservice; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class ExecutorServiceDemo { + + ExecutorService executor = Executors.newFixedThreadPool(10); + + public void execute() { + + executor.execute(new Runnable() { + @Override + public void run() { + // task details + } + }); + + executor.submit(new Task()); + + executor.shutdown(); + executor.shutdownNow(); + try { + executor.awaitTermination(20l, TimeUnit.NANOSECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/executorservice/Task.java b/core-java/src/main/java/com/baeldung/concurrent/executorservice/Task.java new file mode 100644 index 000000000000..9a21bca80ccc --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/executorservice/Task.java @@ -0,0 +1,10 @@ +package com.baeldung.concurrent.executorservice; + +public class Task implements Runnable { + + @Override + public void run() { + // task details + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java b/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java index 471072b333c9..35bb2aa4976d 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java +++ b/core-java/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java @@ -7,7 +7,7 @@ public class FactorialSquareCalculator extends RecursiveTask { final private Integer n; - public FactorialSquareCalculator(Integer n) { + FactorialSquareCalculator(Integer n) { this.n = n; } diff --git a/core-java/src/main/java/com/baeldung/concurrent/future/FutureDemo.java b/core-java/src/main/java/com/baeldung/concurrent/future/FutureDemo.java new file mode 100644 index 000000000000..89ce1a0a41d4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/future/FutureDemo.java @@ -0,0 +1,47 @@ +package com.baeldung.concurrent.future; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +public class FutureDemo { + + public String invoke() { + + String str = null; + + ExecutorService executorService = Executors.newFixedThreadPool(10); + + Future future = executorService.submit(new Callable() { + @Override + public String call() throws Exception { + Thread.sleep(10000l); + return "Hello World"; + } + }); + + future.cancel(false); + + try { + future.get(20, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e1) { + e1.printStackTrace(); + } + + if (future.isDone() && !future.isCancelled()) { + try { + str = future.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + + return str; + + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java b/core-java/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java index bcd559dd3bae..3329fa599b40 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java +++ b/core-java/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java @@ -3,15 +3,15 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -public class SquareCalculator { +class SquareCalculator { private final ExecutorService executor; - public SquareCalculator(ExecutorService executor) { + SquareCalculator(ExecutorService executor) { this.executor = executor; } - public Future calculate(Integer input) { + Future calculate(Integer input) { return executor.submit(() -> { Thread.sleep(1000); return input * input; diff --git a/core-java/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java b/core-java/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java index 4f061d2efd46..f01c675fd267 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java +++ b/core-java/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java @@ -13,71 +13,71 @@ public class ReentrantLockWithCondition { - static Logger logger = LoggerFactory.getLogger(ReentrantLockWithCondition.class); + private static Logger LOG = LoggerFactory.getLogger(ReentrantLockWithCondition.class); - Stack stack = new Stack<>(); - int CAPACITY = 5; + private Stack stack = new Stack<>(); + private static final int CAPACITY = 5; - ReentrantLock lock = new ReentrantLock(); - Condition stackEmptyCondition = lock.newCondition(); - Condition stackFullCondition = lock.newCondition(); + private ReentrantLock lock = new ReentrantLock(); + private Condition stackEmptyCondition = lock.newCondition(); + private Condition stackFullCondition = lock.newCondition(); - public void pushToStack(String item) throws InterruptedException { - try { - lock.lock(); - if (stack.size() == CAPACITY) { - logger.info(Thread.currentThread().getName() + " wait on stack full"); - stackFullCondition.await(); - } - logger.info("Pushing the item " + item); - stack.push(item); - stackEmptyCondition.signalAll(); - } finally { - lock.unlock(); - } + private void pushToStack(String item) throws InterruptedException { + try { + lock.lock(); + if (stack.size() == CAPACITY) { + LOG.info(Thread.currentThread().getName() + " wait on stack full"); + stackFullCondition.await(); + } + LOG.info("Pushing the item " + item); + stack.push(item); + stackEmptyCondition.signalAll(); + } finally { + lock.unlock(); + } - } + } - public String popFromStack() throws InterruptedException { - try { - lock.lock(); - if (stack.size() == 0) { - logger.info(Thread.currentThread().getName() + " wait on stack empty"); - stackEmptyCondition.await(); - } - return stack.pop(); - } finally { - stackFullCondition.signalAll(); - lock.unlock(); - } - } + private String popFromStack() throws InterruptedException { + try { + lock.lock(); + if (stack.size() == 0) { + LOG.info(Thread.currentThread().getName() + " wait on stack empty"); + stackEmptyCondition.await(); + } + return stack.pop(); + } finally { + stackFullCondition.signalAll(); + lock.unlock(); + } + } - public static void main(String[] args) { - final int threadCount = 2; - ReentrantLockWithCondition object = new ReentrantLockWithCondition(); - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - service.execute(() -> { - for (int i = 0; i < 10; i++) { - try { - object.pushToStack("Item " + i); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + public static void main(String[] args) { + final int threadCount = 2; + ReentrantLockWithCondition object = new ReentrantLockWithCondition(); + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + service.execute(() -> { + for (int i = 0; i < 10; i++) { + try { + object.pushToStack("Item " + i); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - }); + }); - service.execute(() -> { - for (int i = 0; i < 10; i++) { - try { - logger.info("Item popped " + object.popFromStack()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } + service.execute(() -> { + for (int i = 0; i < 10; i++) { + try { + LOG.info("Item popped " + object.popFromStack()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } - }); + }); - service.shutdown(); - } + service.shutdown(); + } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java b/core-java/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java index b6a461563892..14ae47b2f3f2 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java +++ b/core-java/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java @@ -12,81 +12,77 @@ public class SharedObjectWithLock { - Logger logger = LoggerFactory.getLogger(SharedObjectWithLock.class); - - ReentrantLock lock = new ReentrantLock(true); - - int counter = 0; - - public void perform() { - - lock.lock(); - logger.info("Thread - " + Thread.currentThread().getName() + " acquired the lock"); - try { - logger.info("Thread - " + Thread.currentThread().getName() + " processing"); - counter++; - } catch (Exception exception) { - logger.error(" Interrupted Exception ", exception); - } finally { - lock.unlock(); - logger.info("Thread - " + Thread.currentThread().getName() + " released the lock"); - } - } - - public void performTryLock() { - - logger.info("Thread - " + Thread.currentThread().getName() + " attempting to acquire the lock"); - try { - boolean isLockAcquired = lock.tryLock(2, TimeUnit.SECONDS); - if (isLockAcquired) { - try { - logger.info("Thread - " + Thread.currentThread().getName() + " acquired the lock"); - - logger.info("Thread - " + Thread.currentThread().getName() + " processing"); - sleep(1000); - } finally { - lock.unlock(); - logger.info("Thread - " + Thread.currentThread().getName() + " released the lock"); - - } - } - } catch (InterruptedException exception) { - logger.error(" Interrupted Exception ", exception); - } - logger.info("Thread - " + Thread.currentThread().getName() + " could not acquire the lock"); - } - - public ReentrantLock getLock() { - return lock; - } - - boolean isLocked() { - return lock.isLocked(); - } - - boolean hasQueuedThreads() { - return lock.hasQueuedThreads(); - } - - int getCounter() { - return counter; - } - - public static void main(String[] args) { - - final int threadCount = 2; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - final SharedObjectWithLock object = new SharedObjectWithLock(); - - service.execute(() -> { - object.perform(); - }); - service.execute(() -> { - object.performTryLock(); - }); - - service.shutdown(); - - } + private static final Logger LOG = LoggerFactory.getLogger(SharedObjectWithLock.class); + + private ReentrantLock lock = new ReentrantLock(true); + + private int counter = 0; + + void perform() { + + lock.lock(); + LOG.info("Thread - " + Thread.currentThread().getName() + " acquired the lock"); + try { + LOG.info("Thread - " + Thread.currentThread().getName() + " processing"); + counter++; + } catch (Exception exception) { + LOG.error(" Interrupted Exception ", exception); + } finally { + lock.unlock(); + LOG.info("Thread - " + Thread.currentThread().getName() + " released the lock"); + } + } + + private void performTryLock() { + + LOG.info("Thread - " + Thread.currentThread().getName() + " attempting to acquire the lock"); + try { + boolean isLockAcquired = lock.tryLock(2, TimeUnit.SECONDS); + if (isLockAcquired) { + try { + LOG.info("Thread - " + Thread.currentThread().getName() + " acquired the lock"); + + LOG.info("Thread - " + Thread.currentThread().getName() + " processing"); + sleep(1000); + } finally { + lock.unlock(); + LOG.info("Thread - " + Thread.currentThread().getName() + " released the lock"); + + } + } + } catch (InterruptedException exception) { + LOG.error(" Interrupted Exception ", exception); + } + LOG.info("Thread - " + Thread.currentThread().getName() + " could not acquire the lock"); + } + + public ReentrantLock getLock() { + return lock; + } + + boolean isLocked() { + return lock.isLocked(); + } + + boolean hasQueuedThreads() { + return lock.hasQueuedThreads(); + } + + int getCounter() { + return counter; + } + + public static void main(String[] args) { + + final int threadCount = 2; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + final SharedObjectWithLock object = new SharedObjectWithLock(); + + service.execute(object::perform); + service.execute(object::performTryLock); + + service.shutdown(); + + } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java b/core-java/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java index 0b0dbc72cb45..638bb56b2fc4 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java +++ b/core-java/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java @@ -12,93 +12,93 @@ import static java.lang.Thread.sleep; public class StampedLockDemo { - Map map = new HashMap<>(); - Logger logger = LoggerFactory.getLogger(StampedLockDemo.class); - - private final StampedLock lock = new StampedLock(); - - public void put(String key, String value) throws InterruptedException { - long stamp = lock.writeLock(); - - try { - logger.info(Thread.currentThread().getName() + " acquired the write lock with stamp " + stamp); - map.put(key, value); - } finally { - lock.unlockWrite(stamp); - logger.info(Thread.currentThread().getName() + " unlocked the write lock with stamp " + stamp); - } - } - - public String get(String key) throws InterruptedException { - long stamp = lock.readLock(); - logger.info(Thread.currentThread().getName() + " acquired the read lock with stamp " + stamp); - try { - sleep(5000); - return map.get(key); - - } finally { - lock.unlockRead(stamp); - logger.info(Thread.currentThread().getName() + " unlocked the read lock with stamp " + stamp); - - } - - } - - public String readWithOptimisticLock(String key) throws InterruptedException { - long stamp = lock.tryOptimisticRead(); - String value = map.get(key); - - if (!lock.validate(stamp)) { - stamp = lock.readLock(); - try { - sleep(5000); - return map.get(key); - - } finally { - lock.unlock(stamp); - logger.info(Thread.currentThread().getName() + " unlocked the read lock with stamp " + stamp); - - } - } - return value; - } - - public static void main(String[] args) { - final int threadCount = 4; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - StampedLockDemo object = new StampedLockDemo(); - - Runnable writeTask = () -> { - - try { - object.put("key1", "value1"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }; - Runnable readTask = () -> { - - try { - object.get("key1"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }; - Runnable readOptimisticTask = () -> { - - try { - object.readWithOptimisticLock("key1"); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }; - service.submit(writeTask); - service.submit(writeTask); - service.submit(readTask); - service.submit(readOptimisticTask); - - service.shutdown(); - - } + private Map map = new HashMap<>(); + private Logger logger = LoggerFactory.getLogger(StampedLockDemo.class); + + private final StampedLock lock = new StampedLock(); + + public void put(String key, String value) throws InterruptedException { + long stamp = lock.writeLock(); + + try { + logger.info(Thread.currentThread().getName() + " acquired the write lock with stamp " + stamp); + map.put(key, value); + } finally { + lock.unlockWrite(stamp); + logger.info(Thread.currentThread().getName() + " unlocked the write lock with stamp " + stamp); + } + } + + public String get(String key) throws InterruptedException { + long stamp = lock.readLock(); + logger.info(Thread.currentThread().getName() + " acquired the read lock with stamp " + stamp); + try { + sleep(5000); + return map.get(key); + + } finally { + lock.unlockRead(stamp); + logger.info(Thread.currentThread().getName() + " unlocked the read lock with stamp " + stamp); + + } + + } + + private String readWithOptimisticLock(String key) throws InterruptedException { + long stamp = lock.tryOptimisticRead(); + String value = map.get(key); + + if (!lock.validate(stamp)) { + stamp = lock.readLock(); + try { + sleep(5000); + return map.get(key); + + } finally { + lock.unlock(stamp); + logger.info(Thread.currentThread().getName() + " unlocked the read lock with stamp " + stamp); + + } + } + return value; + } + + public static void main(String[] args) { + final int threadCount = 4; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + StampedLockDemo object = new StampedLockDemo(); + + Runnable writeTask = () -> { + + try { + object.put("key1", "value1"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }; + Runnable readTask = () -> { + + try { + object.get("key1"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }; + Runnable readOptimisticTask = () -> { + + try { + object.readWithOptimisticLock("key1"); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }; + service.submit(writeTask); + service.submit(writeTask); + service.submit(readTask); + service.submit(readOptimisticTask); + + service.shutdown(); + + } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java b/core-java/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java index 83b8b34fe912..eeb7aa4b1304 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java +++ b/core-java/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java @@ -15,106 +15,106 @@ public class SynchronizedHashMapWithRWLock { - static Map syncHashMap = new HashMap<>(); - Logger logger = LoggerFactory.getLogger(SynchronizedHashMapWithRWLock.class); - - private final ReadWriteLock lock = new ReentrantReadWriteLock(); - private final Lock readLock = lock.readLock(); - private final Lock writeLock = lock.writeLock(); - - public void put(String key, String value) throws InterruptedException { - - try { - writeLock.lock(); - logger.info(Thread.currentThread().getName() + " writing"); - syncHashMap.put(key, value); - sleep(1000); - } finally { - writeLock.unlock(); - } - - } - - public String get(String key) { - try { - readLock.lock(); - logger.info(Thread.currentThread().getName() + " reading"); - return syncHashMap.get(key); - } finally { - readLock.unlock(); - } - } - - public String remove(String key) { - try { - writeLock.lock(); - return syncHashMap.remove(key); - } finally { - writeLock.unlock(); - } - } - - public boolean containsKey(String key) { - try { - readLock.lock(); - return syncHashMap.containsKey(key); - } finally { - readLock.unlock(); - } - } - - boolean isReadLockAvailable() { - return readLock.tryLock(); - } - - public static void main(String[] args) throws InterruptedException { - - final int threadCount = 3; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); - - service.execute(new Thread(new Writer(object), "Writer")); - service.execute(new Thread(new Reader(object), "Reader1")); - service.execute(new Thread(new Reader(object), "Reader2")); - - service.shutdown(); - } - - private static class Reader implements Runnable { - - SynchronizedHashMapWithRWLock object; - - public Reader(SynchronizedHashMapWithRWLock object) { - this.object = object; - } - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - object.get("key" + i); - } - } - } - - private static class Writer implements Runnable { - - SynchronizedHashMapWithRWLock object; - - public Writer(SynchronizedHashMapWithRWLock object) { - this.object = object; - } - - @Override - public void run() { - for (int i = 0; i < 10; i++) { - try { - object.put("key" + i, "value" + i); - sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - } - } + private static Map syncHashMap = new HashMap<>(); + private Logger logger = LoggerFactory.getLogger(SynchronizedHashMapWithRWLock.class); + + private final ReadWriteLock lock = new ReentrantReadWriteLock(); + private final Lock readLock = lock.readLock(); + private final Lock writeLock = lock.writeLock(); + + public void put(String key, String value) throws InterruptedException { + + try { + writeLock.lock(); + logger.info(Thread.currentThread().getName() + " writing"); + syncHashMap.put(key, value); + sleep(1000); + } finally { + writeLock.unlock(); + } + + } + + public String get(String key) { + try { + readLock.lock(); + logger.info(Thread.currentThread().getName() + " reading"); + return syncHashMap.get(key); + } finally { + readLock.unlock(); + } + } + + public String remove(String key) { + try { + writeLock.lock(); + return syncHashMap.remove(key); + } finally { + writeLock.unlock(); + } + } + + public boolean containsKey(String key) { + try { + readLock.lock(); + return syncHashMap.containsKey(key); + } finally { + readLock.unlock(); + } + } + + boolean isReadLockAvailable() { + return readLock.tryLock(); + } + + public static void main(String[] args) throws InterruptedException { + + final int threadCount = 3; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); + + service.execute(new Thread(new Writer(object), "Writer")); + service.execute(new Thread(new Reader(object), "Reader1")); + service.execute(new Thread(new Reader(object), "Reader2")); + + service.shutdown(); + } + + private static class Reader implements Runnable { + + SynchronizedHashMapWithRWLock object; + + Reader(SynchronizedHashMapWithRWLock object) { + this.object = object; + } + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + object.get("key" + i); + } + } + } + + private static class Writer implements Runnable { + + SynchronizedHashMapWithRWLock object; + + public Writer(SynchronizedHashMapWithRWLock object) { + this.object = object; + } + + @Override + public void run() { + for (int i = 0; i < 10; i++) { + try { + object.put("key" + i, "value" + i); + sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java b/core-java/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java new file mode 100644 index 000000000000..3a1d8555d3ca --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java @@ -0,0 +1,22 @@ +package com.baeldung.concurrent.semaphore; + +import java.util.concurrent.Semaphore; + +public class SemaPhoreDemo { + + static Semaphore semaphore = new Semaphore(10); + + public void execute() throws InterruptedException { + + System.out.println("Available permit : " + semaphore.availablePermits()); + System.out.println("Number of threads waiting to acquire: " + semaphore.getQueueLength()); + + if (semaphore.tryAcquire()) { + semaphore.acquire(); + // perform some critical operations + semaphore.release(); + } + + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java b/core-java/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java new file mode 100644 index 000000000000..50cd2966eac1 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java @@ -0,0 +1,31 @@ +package com.baeldung.concurrent.semaphores; + +import java.util.concurrent.Semaphore; + +class CounterUsingMutex { + + private final Semaphore mutex; + private int count; + + CounterUsingMutex() { + mutex = new Semaphore(1); + count = 0; + } + + void increase() throws InterruptedException { + mutex.acquire(); + this.count = this.count + 1; + Thread.sleep(1000); + mutex.release(); + + } + + int getCount() { + return this.count; + } + + boolean hasQueuedThreads() { + return mutex.hasQueuedThreads(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java b/core-java/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java new file mode 100644 index 000000000000..718574d3c88c --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java @@ -0,0 +1,23 @@ +package com.baeldung.concurrent.semaphores; + +import java.util.concurrent.TimeUnit; + +import org.apache.commons.lang3.concurrent.TimedSemaphore; + +class DelayQueueUsingTimedSemaphore { + + private final TimedSemaphore semaphore; + + DelayQueueUsingTimedSemaphore(long period, int slotLimit) { + semaphore = new TimedSemaphore(period, TimeUnit.SECONDS, slotLimit); + } + + boolean tryAdd() { + return semaphore.tryAcquire(); + } + + int availableSlots() { + return semaphore.getAvailablePermits(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java b/core-java/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java new file mode 100644 index 000000000000..3cf7c45428e9 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java @@ -0,0 +1,25 @@ +package com.baeldung.concurrent.semaphores; + +import java.util.concurrent.Semaphore; + +class LoginQueueUsingSemaphore { + + private final Semaphore semaphore; + + LoginQueueUsingSemaphore(int slotLimit) { + semaphore = new Semaphore(slotLimit); + } + + boolean tryLogin() { + return semaphore.tryAcquire(); + } + + void logout() { + semaphore.release(); + } + + int availableSlots() { + return semaphore.availablePermits(); + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java b/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java index ce1f57bb936c..d5ff5f784227 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java +++ b/core-java/src/main/java/com/baeldung/concurrent/skiplist/Event.java @@ -2,20 +2,20 @@ import java.time.ZonedDateTime; -public class Event { +class Event { private final ZonedDateTime eventTime; private final String content; - public Event(ZonedDateTime eventTime, String content) { + Event(ZonedDateTime eventTime, String content) { this.eventTime = eventTime; this.content = content; } - public ZonedDateTime getEventTime() { + ZonedDateTime getEventTime() { return eventTime; } - public String getContent() { + String getContent() { return content; } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java index 3aca6b01470a..2e501ed3681f 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java +++ b/core-java/src/main/java/com/baeldung/concurrent/skiplist/EventWindowSort.java @@ -5,24 +5,24 @@ import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; -public class EventWindowSort { +class EventWindowSort { private final ConcurrentSkipListMap events - = new ConcurrentSkipListMap<>(Comparator.comparingLong(value -> value.toInstant().toEpochMilli())); + = new ConcurrentSkipListMap<>(Comparator.comparingLong(value -> value.toInstant().toEpochMilli())); - public void acceptEvent(Event event) { + void acceptEvent(Event event) { events.put(event.getEventTime(), event.getContent()); } - public ConcurrentNavigableMap getEventsFromLastMinute() { + ConcurrentNavigableMap getEventsFromLastMinute() { return events.tailMap(ZonedDateTime - .now() - .minusMinutes(1)); + .now() + .minusMinutes(1)); } - public ConcurrentNavigableMap getEventsOlderThatOneMinute() { + ConcurrentNavigableMap getEventsOlderThatOneMinute() { return events.headMap(ZonedDateTime - .now() - .minusMinutes(1)); + .now() + .minusMinutes(1)); } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java index 0311d9b0b2d6..90bc4dceed80 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java +++ b/core-java/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java @@ -13,10 +13,10 @@ public class WaitSleepExample { private static final Object LOCK = new Object(); public static void main(String... args) throws InterruptedException { - sleepWaitInSyncronizedBlocks(); + sleepWaitInSynchronizedBlocks(); } - private static void sleepWaitInSyncronizedBlocks() throws InterruptedException { + private static void sleepWaitInSynchronizedBlocks() throws InterruptedException { Thread.sleep(1000); // called on the thread LOG.debug("Thread '" + Thread.currentThread().getName() + "' is woken after sleeping for 1 second"); @@ -25,5 +25,5 @@ private static void sleepWaitInSyncronizedBlocks() throws InterruptedException { LOG.debug("Object '" + LOCK + "' is woken after waiting for 1 second"); } } - + } diff --git a/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java b/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java index d66cd0d7961a..332a6d9263d3 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java +++ b/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java @@ -5,13 +5,13 @@ public class BaeldungSynchronizedBlocks { private int count = 0; private static int staticCount = 0; - public void performSynchronisedTask() { + void performSynchronisedTask() { synchronized (this) { setCount(getCount() + 1); } } - public static void performStaticSyncTask() { + static void performStaticSyncTask() { synchronized (BaeldungSynchronizedBlocks.class) { setStaticCount(getStaticCount() + 1); } @@ -25,11 +25,11 @@ public void setCount(int count) { this.count = count; } - public static int getStaticCount() { + static int getStaticCount() { return staticCount; } - public static void setStaticCount(int staticCount) { + private static void setStaticCount(int staticCount) { BaeldungSynchronizedBlocks.staticCount = staticCount; } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java b/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java index 1295140b7c80..179c6fb9ef68 100644 --- a/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java +++ b/core-java/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java @@ -5,17 +5,17 @@ public class BaeldungSynchronizedMethods { private int sum = 0; private int syncSum = 0; - public static int staticSum = 0; + static int staticSum = 0; - public void calculate() { + void calculate() { setSum(getSum() + 1); } - public synchronized void synchronisedCalculate() { + synchronized void synchronisedCalculate() { setSyncSum(getSyncSum() + 1); } - public static synchronized void syncStaticCalculate() { + static synchronized void syncStaticCalculate() { staticSum = staticSum + 1; } @@ -27,11 +27,11 @@ public void setSum(int sum) { this.sum = sum; } - public int getSyncSum() { + int getSyncSum() { return syncSum; } - public void setSyncSum(int syncSum) { + private void setSyncSum(int syncSum) { this.syncSum = syncSum; } } diff --git a/core-java/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java new file mode 100644 index 000000000000..8744027e40f4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java @@ -0,0 +1,23 @@ +package com.baeldung.concurrent.threadfactory; + +import java.util.concurrent.ThreadFactory; + +public class BaeldungThreadFactory implements ThreadFactory { + + private int threadId; + private String name; + + public BaeldungThreadFactory(String name) { + threadId = 1; + this.name = name; + } + + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r, name + "-Thread_" + threadId); + System.out.println("created new thread with id : " + threadId + " and name : " + t.getName()); + threadId++; + return t; + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java new file mode 100644 index 000000000000..d2af97b761ba --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java @@ -0,0 +1,13 @@ +package com.baeldung.concurrent.threadfactory; + +public class Demo { + + public void execute() { + BaeldungThreadFactory factory = new BaeldungThreadFactory("BaeldungThreadFactory"); + for (int i = 0; i < 10; i++) { + Thread t = factory.newThread(new Task()); + t.start(); + } + } + +} diff --git a/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Task.java b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Task.java new file mode 100644 index 000000000000..04ba62d457bf --- /dev/null +++ b/core-java/src/main/java/com/baeldung/concurrent/threadfactory/Task.java @@ -0,0 +1,10 @@ +package com.baeldung.concurrent.threadfactory; + +public class Task implements Runnable { + + @Override + public void run() { + // task details + } + +} diff --git a/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java index 82f5745b3c9c..0d727cf0b5e6 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java @@ -6,40 +6,40 @@ import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; -public class UseLocalDate { +class UseLocalDate { - public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth) { + LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth) { return LocalDate.of(year, month, dayOfMonth); } - public LocalDate getLocalDateUsingParseMethod(String representation) { + LocalDate getLocalDateUsingParseMethod(String representation) { return LocalDate.parse(representation); } - public LocalDate getLocalDateFromClock() { + LocalDate getLocalDateFromClock() { LocalDate localDate = LocalDate.now(); return localDate; } - public LocalDate getNextDay(LocalDate localDate) { + LocalDate getNextDay(LocalDate localDate) { return localDate.plusDays(1); } - public LocalDate getPreviousDay(LocalDate localDate) { + LocalDate getPreviousDay(LocalDate localDate) { return localDate.minus(1, ChronoUnit.DAYS); } - public DayOfWeek getDayOfWeek(LocalDate localDate) { + DayOfWeek getDayOfWeek(LocalDate localDate) { DayOfWeek day = localDate.getDayOfWeek(); return day; } - public LocalDate getFirstDayOfMonth() { + LocalDate getFirstDayOfMonth() { LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); return firstDayOfMonth; } - public LocalDateTime getStartOfDay(LocalDate localDate) { + LocalDateTime getStartOfDay(LocalDate localDate) { LocalDateTime startofDay = localDate.atStartOfDay(); return startofDay; } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java index 9bd8f9706ce2..8d166c413fdb 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java @@ -5,31 +5,27 @@ public class UseLocalTime { - public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds) { - LocalTime localTime = LocalTime.of(hour, min, seconds); - return localTime; + LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds) { + return LocalTime.of(hour, min, seconds); } - public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation) { - LocalTime localTime = LocalTime.parse(timeRepresentation); - return localTime; + LocalTime getLocalTimeUsingParseMethod(String timeRepresentation) { + return LocalTime.parse(timeRepresentation); } - public LocalTime getLocalTimeFromClock() { - LocalTime localTime = LocalTime.now(); - return localTime; + private LocalTime getLocalTimeFromClock() { + return LocalTime.now(); } - public LocalTime addAnHour(LocalTime localTime) { - LocalTime newTime = localTime.plus(1, ChronoUnit.HOURS); - return newTime; + LocalTime addAnHour(LocalTime localTime) { + return localTime.plus(1, ChronoUnit.HOURS); } - public int getHourFromLocalTime(LocalTime localTime) { + int getHourFromLocalTime(LocalTime localTime) { return localTime.getHour(); } - public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute) { + LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute) { return localTime.withMinute(minute); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java b/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java index 5a42ef83b44b..10bc6caec3aa 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java +++ b/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java @@ -3,13 +3,13 @@ import java.time.LocalDate; import java.time.Period; -public class UsePeriod { +class UsePeriod { - public LocalDate modifyDates(LocalDate localDate, Period period) { + LocalDate modifyDates(LocalDate localDate, Period period) { return localDate.plus(period); } - public Period getDifferenceBetweenDates(LocalDate localDate1, LocalDate localDate2) { + Period getDifferenceBetweenDates(LocalDate localDate1, LocalDate localDate2) { return Period.between(localDate1, localDate2); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java b/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java index 94154ce5c074..1fa413bbf219 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java @@ -8,12 +8,10 @@ public class UseToInstant { public LocalDateTime convertDateToLocalDate(Date date) { - LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); - return localDateTime; + return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } public LocalDateTime convertDateToLocalDate(Calendar calendar) { - LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); - return localDateTime; + return LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java index 2d1b17484b03..f5e1af0a06b2 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java @@ -4,10 +4,9 @@ import java.time.ZoneId; import java.time.ZonedDateTime; -public class UseZonedDateTime { +class UseZonedDateTime { - public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime, ZoneId zoneId) { - ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId); - return zonedDateTime; + ZonedDateTime getZonedDateTime(LocalDateTime localDateTime, ZoneId zoneId) { + return ZonedDateTime.of(localDateTime, zoneId); } } diff --git a/core-java/src/main/java/com/baeldung/deserialization/AppleProduct.java b/core-java/src/main/java/com/baeldung/deserialization/AppleProduct.java new file mode 100644 index 000000000000..d672b9a4f5dc --- /dev/null +++ b/core-java/src/main/java/com/baeldung/deserialization/AppleProduct.java @@ -0,0 +1,26 @@ +package com.baeldung.deserialization; + +import java.io.Serializable; + +public class AppleProduct implements Serializable { + + private static final long serialVersionUID = 1234567L; // user-defined (i.e. not default or generated) +// private static final long serialVersionUID = 7654321L; // user-defined (i.e. not default or generated) + + public String headphonePort; + public String thunderboltPort; + public String lighteningPort; + + public String getHeadphonePort() { + return headphonePort; + } + + public String getThunderboltPort() { + return thunderboltPort; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/deserialization/DeserializationUtility.java b/core-java/src/main/java/com/baeldung/deserialization/DeserializationUtility.java new file mode 100644 index 000000000000..3ed2b8be1d9a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/deserialization/DeserializationUtility.java @@ -0,0 +1,27 @@ +package com.baeldung.deserialization; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.util.Base64; + +public class DeserializationUtility { + + public static void main(String[] args) throws ClassNotFoundException, IOException { + + String serializedObj = "rO0ABXNyACljb20uYmFlbGR1bmcuZGVzZXJpYWxpemF0aW9uLkFwcGxlUHJvZHVjdAAAAAAAEtaHAgADTAANaGVhZHBob25lUG9ydHQAEkxqYXZhL2xhbmcvU3RyaW5nO0wADmxpZ2h0ZW5pbmdQb3J0cQB+AAFMAA90aHVuZGVyYm9sdFBvcnRxAH4AAXhwdAARaGVhZHBob25lUG9ydDIwMjBwdAATdGh1bmRlcmJvbHRQb3J0MjAyMA=="; + System.out.println("Deserializing AppleProduct..."); + AppleProduct deserializedObj = (AppleProduct) deSerializeObjectFromString(serializedObj); + System.out.println("Headphone port of AppleProduct:" + deserializedObj.getHeadphonePort()); + System.out.println("Thunderbolt port of AppleProduct:" + deserializedObj.getThunderboltPort()); + } + + public static Object deSerializeObjectFromString(String s) throws IOException, ClassNotFoundException { + byte[] data = Base64.getDecoder().decode(s); + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data)); + Object o = ois.readObject(); + ois.close(); + return o; + } + +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/deserialization/SerializationUtility.java b/core-java/src/main/java/com/baeldung/deserialization/SerializationUtility.java new file mode 100644 index 000000000000..1dbcc40e6bfc --- /dev/null +++ b/core-java/src/main/java/com/baeldung/deserialization/SerializationUtility.java @@ -0,0 +1,30 @@ +package com.baeldung.deserialization; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.Base64; + +public class SerializationUtility { + + public static void main(String[] args) throws ClassNotFoundException, IOException { + + AppleProduct macBook = new AppleProduct(); + macBook.headphonePort = "headphonePort2020"; + macBook.thunderboltPort = "thunderboltPort2020"; + + String serializedObj = serializeObjectToString(macBook); + System.out.println("Serialized AppleProduct object to string:"); + System.out.println(serializedObj); + } + + public static String serializeObjectToString(Serializable o) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(o); + oos.close(); + return Base64.getEncoder().encodeToString(baos.toByteArray()); + } + +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java b/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java index f9028bd159eb..bdc732947f50 100644 --- a/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java +++ b/core-java/src/main/java/com/baeldung/dirmonitoring/DirectoryMonitoringExample.java @@ -13,8 +13,7 @@ public class DirectoryMonitoringExample { private static final Logger LOG = LoggerFactory.getLogger(DirectoryMonitoringExample.class); - - public static final int POLL_INTERVAL = 500; + private static final int POLL_INTERVAL = 500; public static void main(String[] args) throws Exception { FileAlterationObserver observer = new FileAlterationObserver(System.getProperty("user.home")); diff --git a/core-java/src/main/java/com/baeldung/doublecolon/Computer.java b/core-java/src/main/java/com/baeldung/doublecolon/Computer.java index b5d2e70abd38..dc0b06401341 100644 --- a/core-java/src/main/java/com/baeldung/doublecolon/Computer.java +++ b/core-java/src/main/java/com/baeldung/doublecolon/Computer.java @@ -6,12 +6,12 @@ public class Computer { private String color; private Integer healty; - public Computer(final int age, final String color) { + Computer(final int age, final String color) { this.age = age; this.color = color; } - public Computer(final Integer age, final String color, final Integer healty) { + Computer(final Integer age, final String color, final Integer healty) { this.age = age; this.color = color; this.healty = healty; @@ -28,7 +28,7 @@ public void setAge(final Integer age) { this.age = age; } - public String getColor() { + String getColor() { return color; } @@ -36,11 +36,11 @@ public void setColor(final String color) { this.color = color; } - public Integer getHealty() { + Integer getHealty() { return healty; } - public void setHealty(final Integer healty) { + void setHealty(final Integer healty) { this.healty = healty; } @@ -72,10 +72,7 @@ public boolean equals(final Object o) { final Computer computer = (Computer) o; - if (age != null ? !age.equals(computer.age) : computer.age != null) { - return false; - } - return color != null ? color.equals(computer.color) : computer.color == null; + return (age != null ? age.equals(computer.age) : computer.age == null) && (color != null ? color.equals(computer.color) : computer.color == null); } diff --git a/core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java b/core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java index d181dfcdf752..317808d8937d 100644 --- a/core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java +++ b/core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java @@ -7,8 +7,8 @@ public class ComputerUtils { - public static final ComputerPredicate after2010Predicate = (c) -> (c.getAge() > 2010); - public static final ComputerPredicate blackPredicate = (c) -> "black".equals(c.getColor()); + static final ComputerPredicate after2010Predicate = (c) -> (c.getAge() > 2010); + static final ComputerPredicate blackPredicate = (c) -> "black".equals(c.getColor()); public static List filter(final List inventory, final ComputerPredicate p) { @@ -18,7 +18,7 @@ public static List filter(final List inventory, final Comput return result; } - public static void repair(final Computer computer) { + static void repair(final Computer computer) { if (computer.getHealty() < 50) { computer.setHealty(100); } diff --git a/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java b/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java index f5c31e96537f..79c8d9e383c0 100644 --- a/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java +++ b/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java @@ -13,7 +13,7 @@ public MacbookPro(int age, String color) { super(age, color); } - public MacbookPro(Integer age, String color, Integer healty) { + MacbookPro(Integer age, String color, Integer healty) { super(age, color, healty); } diff --git a/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java b/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java index 942efc50cc6d..c35b69d075ee 100644 --- a/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java +++ b/core-java/src/main/java/com/baeldung/dynamicproxy/TimingDynamicInvocationHandler.java @@ -15,7 +15,7 @@ public class TimingDynamicInvocationHandler implements InvocationHandler { private Object target; - public TimingDynamicInvocationHandler(Object target) { + TimingDynamicInvocationHandler(Object target) { this.target = target; for(Method method: target.getClass().getDeclaredMethods()) { diff --git a/core-java/src/main/java/com/baeldung/equalshashcode/entities/Square.java b/core-java/src/main/java/com/baeldung/equalshashcode/entities/Square.java index b9125c3e2f7b..66de22005736 100644 --- a/core-java/src/main/java/com/baeldung/equalshashcode/entities/Square.java +++ b/core-java/src/main/java/com/baeldung/equalshashcode/entities/Square.java @@ -1,10 +1,10 @@ package com.baeldung.equalshashcode.entities; -import java.awt.Color; +import java.awt.*; public class Square extends Rectangle { - Color color; + private Color color; public Square(double width, Color color) { super(width, width); diff --git a/core-java/src/main/java/com/baeldung/filesystem/jndi/LookupFSJNDI.java b/core-java/src/main/java/com/baeldung/filesystem/jndi/LookupFSJNDI.java index d8d35d536397..4afce56e3973 100644 --- a/core-java/src/main/java/com/baeldung/filesystem/jndi/LookupFSJNDI.java +++ b/core-java/src/main/java/com/baeldung/filesystem/jndi/LookupFSJNDI.java @@ -8,7 +8,7 @@ import javax.naming.NamingException; public class LookupFSJNDI { - InitialContext ctx = null; + private InitialContext ctx = null; public LookupFSJNDI() throws NamingException { super(); diff --git a/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java b/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java new file mode 100644 index 000000000000..121e0f5d7219 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java @@ -0,0 +1,91 @@ +package com.baeldung.javanetworking.uriurl; + +import java.io.BufferedReader; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class URIDemo { + private final Logger logger = LoggerFactory.getLogger(URIDemo.class); + + String URISTRING = "https://wordpress.org:443/support/topic/page-jumps-within-wordpress/?replies=3#post-2278484"; + // parsed locator + String URISCHEME = "https"; + String URISCHEMESPECIFIC; + String URIHOST = "wordpress.org"; + String URIAUTHORITY = "wordpress.org:443"; + + String URIPATH = "/support/topic/page-jumps-within-wordpress/"; + int URIPORT = 443; + String URIQUERY = "replies=3"; + String URIFRAGMENT = "post-2278484"; + String URIUSERINFO; + String URICOMPOUND = URISCHEME + "://" + URIHOST + ":" + URIPORT + URIPATH + "?" + URIQUERY + "#" + URIFRAGMENT; + + URI uri; + URL url; + BufferedReader in = null; + String URIContent = ""; + + private String getParsedPieces(URI uri) { + logger.info("*** List of parsed pieces ***"); + URISCHEME = uri.getScheme(); + logger.info("URISCHEME: " + URISCHEME); + URISCHEMESPECIFIC = uri.getSchemeSpecificPart(); + logger.info("URISCHEMESPECIFIC: " + URISCHEMESPECIFIC); + URIHOST = uri.getHost(); + URIAUTHORITY = uri.getAuthority(); + logger.info("URIAUTHORITY: " + URIAUTHORITY); + logger.info("URIHOST: " + URIHOST); + URIPATH = uri.getPath(); + logger.info("URIPATH: " + URIPATH); + URIPORT = uri.getPort(); + logger.info("URIPORT: " + URIPORT); + URIQUERY = uri.getQuery(); + logger.info("URIQUERY: " + URIQUERY); + URIFRAGMENT = uri.getFragment(); + logger.info("URIFRAGMENT: " + URIFRAGMENT); + + try { + url = uri.toURL(); + } catch (MalformedURLException e) { + logger.info("MalformedURLException thrown: " + e.getMessage()); + e.printStackTrace(); + } catch (IllegalArgumentException e) { + logger.info("IllegalArgumentException thrown: " + e.getMessage()); + e.printStackTrace(); + } + return url.toString(); + } + + public String testURIAsNew(String URIString) { + // creating URI object + try { + uri = new URI(URIString); + } catch (URISyntaxException e) { + logger.info("URISyntaxException thrown: " + e.getMessage()); + e.printStackTrace(); + throw new IllegalArgumentException(); + } + return getParsedPieces(uri); + } + + public String testURIAsCreate(String URIString) { + // creating URI object + uri = URI.create(URIString); + return getParsedPieces(uri); + } + + public static void main(String[] args) throws Exception { + URIDemo demo = new URIDemo(); + String contentCreate = demo.testURIAsCreate(demo.URICOMPOUND); + demo.logger.info(contentCreate); + String contentNew = demo.testURIAsNew(demo.URICOMPOUND); + demo.logger.info(contentNew); + } +} diff --git a/core-java/src/main/java/com/baeldung/javanetworking/url/URLDemo.java b/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java similarity index 97% rename from core-java/src/main/java/com/baeldung/javanetworking/url/URLDemo.java rename to core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java index f8038a7e8615..109a9951d2a8 100644 --- a/core-java/src/main/java/com/baeldung/javanetworking/url/URLDemo.java +++ b/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java @@ -1,9 +1,10 @@ -package com.baeldung.javanetworking.url; +package com.baeldung.javanetworking.uriurl; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; +import java.net.URI; import java.net.URL; import java.net.URLConnection; diff --git a/core-java/src/main/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorExample.java b/core-java/src/main/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorExample.java index 2c852b5e825c..0d02391a7363 100644 --- a/core-java/src/main/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorExample.java +++ b/core-java/src/main/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorExample.java @@ -11,4 +11,4 @@ public ClassWithInitErrors getClassWithInitErrors() { test = new ClassWithInitErrors(); return test; } -} +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/outofmemoryerror/OutOfMemoryGCLimitExceed.java b/core-java/src/main/java/com/baeldung/outofmemoryerror/OutOfMemoryGCLimitExceed.java new file mode 100644 index 000000000000..a1b414028115 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/outofmemoryerror/OutOfMemoryGCLimitExceed.java @@ -0,0 +1,19 @@ +package com.baeldung.outofmemoryerror; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +public class OutOfMemoryGCLimitExceed { + public static void addRandomDataToMap() { + Map dataMap = new HashMap<>(); + Random r = new Random(); + while (true) { + dataMap.put(r.nextInt(), String.valueOf(r.nextInt())); + } + } + + public static void main(String[] args) { + OutOfMemoryGCLimitExceed.addRandomDataToMap(); + } +} diff --git a/core-java/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java b/core-java/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java new file mode 100644 index 000000000000..bfb6681f7c55 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/temporaladjuster/CustomTemporalAdjuster.java @@ -0,0 +1,22 @@ +package com.baeldung.temporaladjuster; + +import java.time.DayOfWeek; +import java.time.temporal.ChronoField; +import java.time.temporal.ChronoUnit; +import java.time.temporal.Temporal; +import java.time.temporal.TemporalAdjuster; + +public class CustomTemporalAdjuster implements TemporalAdjuster { + + @Override + public Temporal adjustInto(Temporal temporal) { + switch (DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK))) { + case FRIDAY: + return temporal.plus(3, ChronoUnit.DAYS); + case SATURDAY: + return temporal.plus(2, ChronoUnit.DAYS); + default: + return temporal.plus(1, ChronoUnit.DAYS); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java b/core-java/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java new file mode 100644 index 000000000000..79c18916c27a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java @@ -0,0 +1,16 @@ +package com.baeldung.typeerasure; + +public class ArrayContentPrintUtil { + + public static void printArray(E[] array) { + for (E element : array) { + System.out.printf("%s ", element); + } + } + + public static > void printArray(E[] array) { + for (E element : array) { + System.out.printf("%s ", element); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/typeerasure/BoundStack.java b/core-java/src/main/java/com/baeldung/typeerasure/BoundStack.java new file mode 100644 index 000000000000..6d158fda777d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/typeerasure/BoundStack.java @@ -0,0 +1,37 @@ +package com.baeldung.typeerasure; + +import java.util.Arrays; + +public class BoundStack> { + + private E[] stackContent; + private int total; + + public BoundStack(int capacity) { + this.stackContent = (E[]) new Object[capacity]; + } + + public void push(E data) { + if (total == stackContent.length) { + resize(2 * stackContent.length); + } + stackContent[total++] = data; + } + + public E pop() { + if (!isEmpty()) { + E datum = stackContent[total]; + stackContent[total--] = null; + return datum; + } + return null; + } + + private void resize(int capacity) { + Arrays.copyOf(stackContent, capacity); + } + + public boolean isEmpty() { + return total == 0; + } +} diff --git a/core-java/src/main/java/com/baeldung/typeerasure/IntegerStack.java b/core-java/src/main/java/com/baeldung/typeerasure/IntegerStack.java new file mode 100644 index 000000000000..ad1da1239d9e --- /dev/null +++ b/core-java/src/main/java/com/baeldung/typeerasure/IntegerStack.java @@ -0,0 +1,13 @@ +package com.baeldung.typeerasure; + +public class IntegerStack extends Stack { + + public IntegerStack(int capacity) { + super(capacity); + } + + public void push(Integer value) { + System.out.println("Pushing into my integerStack"); + super.push(value); + } +} diff --git a/core-java/src/main/java/com/baeldung/typeerasure/Stack.java b/core-java/src/main/java/com/baeldung/typeerasure/Stack.java new file mode 100644 index 000000000000..b88ef6ad8bc4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/typeerasure/Stack.java @@ -0,0 +1,39 @@ +package com.baeldung.typeerasure; + +import java.util.Arrays; + +public class Stack { + + private E[] stackContent; + private int total; + + public Stack(int capacity) { + this.stackContent = (E[]) new Object[capacity]; + } + + public void push(E data) { + System.out.println("In base stack push#"); + if (total == stackContent.length) { + resize(2 * stackContent.length); + } + stackContent[total++] = data; + } + + public E pop() { + if (!isEmpty()) { + E datum = stackContent[total]; + stackContent[total--] = null; + return datum; + } + return null; + } + + private void resize(int capacity) { + Arrays.copyOf(stackContent, capacity); + } + + public boolean isEmpty() { + return total == 0; + } + +} diff --git a/core-java/src/test/java/com/baeldung/arraycopy/ArrayCopyUtilUnitTest.java b/core-java/src/test/java/com/baeldung/arraycopy/ArrayCopyUtilUnitTest.java index 6b6f5dbe2a47..d9e580acbb6f 100644 --- a/core-java/src/test/java/com/baeldung/arraycopy/ArrayCopyUtilUnitTest.java +++ b/core-java/src/test/java/com/baeldung/arraycopy/ArrayCopyUtilUnitTest.java @@ -9,6 +9,8 @@ import java.util.Arrays; +import static org.junit.Assert.assertTrue; + public class ArrayCopyUtilUnitTest { private static Employee[] employees; private static final int MAX = 2; @@ -46,10 +48,10 @@ public void givenArrayOfPrimitiveType_whenCopiedSubSequenceViaSystemsArrayCopy_t System.arraycopy(array, 2, copiedArray, 0, 3); - Assert.assertTrue(3 == copiedArray.length); - Assert.assertTrue(copiedArray[0] == array[2]); - Assert.assertTrue(copiedArray[1] == array[3]); - Assert.assertTrue(copiedArray[2] == array[4]); + assertTrue(3 == copiedArray.length); + assertTrue(copiedArray[0] == array[2]); + assertTrue(copiedArray[1] == array[3]); + assertTrue(copiedArray[2] == array[4]); } @Test @@ -58,10 +60,10 @@ public void givenArrayOfPrimitiveType_whenCopiedSubSequenceViaArraysCopyOfRange_ int[] copiedArray = Arrays.copyOfRange(array, 1, 4); - Assert.assertTrue(3 == copiedArray.length); - Assert.assertTrue(copiedArray[0] == array[1]); - Assert.assertTrue(copiedArray[1] == array[2]); - Assert.assertTrue(copiedArray[2] == array[3]); + assertTrue(3 == copiedArray.length); + assertTrue(copiedArray[0] == array[1]); + assertTrue(copiedArray[1] == array[2]); + assertTrue(copiedArray[2] == array[3]); } @Test @@ -73,9 +75,9 @@ public void givenArrayOfPrimitiveType_whenCopiedViaArraysCopyOf_thenValueChangeI Assert.assertArrayEquals(copiedArray, array); array[0] = 9; - Assert.assertTrue(copiedArray[0] != array[0]); + assertTrue(copiedArray[0] != array[0]); copiedArray[1] = 12; - Assert.assertTrue(copiedArray[1] != array[1]); + assertTrue(copiedArray[1] != array[1]); } @Test @@ -85,7 +87,7 @@ public void givenArrayOfNonPrimitiveType_whenCopiedViaArraysCopyOf_thenDoShallow Assert.assertArrayEquals(copiedArray, employees); employees[0].setName(employees[0].getName()+"_Changed"); //change in employees' element caused change in the copied array - Assert.assertTrue(copiedArray[0].getName().equals(employees[0].getName())); + assertTrue(copiedArray[0].getName().equals(employees[0].getName())); } @Test @@ -96,9 +98,9 @@ public void givenArrayOfPrimitiveType_whenCopiedViaArrayClone_thenValueChangeIsS Assert.assertArrayEquals(copiedArray, array); array[0] = 9; - Assert.assertTrue(copiedArray[0] != array[0]); + assertTrue(copiedArray[0] != array[0]); copiedArray[1] = 12; - Assert.assertTrue(copiedArray[1] != array[1]); + assertTrue(copiedArray[1] != array[1]); } @Test @@ -108,7 +110,7 @@ public void givenArraysOfNonPrimitiveType_whenCopiedViaArrayClone_thenDoShallowC Assert.assertArrayEquals(copiedArray, employees);; employees[0].setName(employees[0].getName()+"_Changed"); //change in employees' element changed the copied array - Assert.assertTrue(copiedArray[0].getName().equals(employees[0].getName())); + assertTrue(copiedArray[0].getName().equals(employees[0].getName())); } @Test @@ -138,7 +140,7 @@ public void givenArraysOfNonPrimitiveType_whenCopiedViaStream_thenDoShallowCopy( Assert.assertArrayEquals(copiedArray, employees); employees[0].setName(employees[0].getName()+"_Changed"); //change in employees' element didn't change in the copied array - Assert.assertTrue(copiedArray[0].getName().equals(employees[0].getName())); + assertTrue(copiedArray[0].getName().equals(employees[0].getName())); } @Test diff --git a/core-java/src/test/java/com/baeldung/classnotfoundexception/ClassNotFoundExceptionTest.java b/core-java/src/test/java/com/baeldung/classnotfoundexception/ClassNotFoundExceptionTest.java index a6104e635bbe..8714d084abb8 100644 --- a/core-java/src/test/java/com/baeldung/classnotfoundexception/ClassNotFoundExceptionTest.java +++ b/core-java/src/test/java/com/baeldung/classnotfoundexception/ClassNotFoundExceptionTest.java @@ -8,4 +8,4 @@ public class ClassNotFoundExceptionTest { public void givenNoDriversInClassPath_whenLoadDrivers_thenClassNotFoundException() throws ClassNotFoundException { Class.forName("oracle.jdbc.driver.OracleDriver"); } -} +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java index 51b9e5338bd8..0c3a13d176d5 100644 --- a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java +++ b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java @@ -24,7 +24,7 @@ public void whenRunningCompletableFutureAsynchronously_thenGetMethodWaitsForResu assertEquals("Hello", result); } - public Future calculateAsync() throws InterruptedException { + private Future calculateAsync() throws InterruptedException { CompletableFuture completableFuture = new CompletableFuture<>(); Executors.newCachedThreadPool().submit(() -> { @@ -44,7 +44,7 @@ public void whenRunningCompletableFutureWithResult_thenGetMethodReturnsImmediate assertEquals("Hello", result); } - public Future calculateAsyncWithCancellation() throws InterruptedException { + private Future calculateAsyncWithCancellation() throws InterruptedException { CompletableFuture completableFuture = new CompletableFuture<>(); Executors.newCachedThreadPool().submit(() -> { diff --git a/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java index 11c27ff980c3..2f1abef64e47 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java @@ -24,8 +24,8 @@ public void givenLongAccumulator_whenApplyActionOnItFromMultipleThrads_thenShoul //when Runnable accumulateAction = () -> IntStream - .rangeClosed(0, numberOfIncrements) - .forEach(accumulator::accumulate); + .rangeClosed(0, numberOfIncrements) + .forEach(accumulator::accumulate); for (int i = 0; i < numberOfThreads; i++) { executorService.execute(accumulateAction); diff --git a/core-java/src/test/java/com/baeldung/concurrent/atomic/CounterTest.java b/core-java/src/test/java/com/baeldung/concurrent/atomic/CounterTest.java new file mode 100644 index 000000000000..1612c62513c9 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/atomic/CounterTest.java @@ -0,0 +1,58 @@ +package com.baeldung.concurrent.atomic; + +import static org.junit.Assert.assertEquals; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import org.junit.Ignore; +import org.junit.Test; + +public class CounterTest { + + /** + * This test shows the behaviour of a thread-unsafe class in a multithreaded scenario. We are calling + * the increment methods 1000 times from a pool of 3 threads. In most of the cases, the counter will + * less than 1000, because of lost updates, however, occasionally it may reach 1000, when no threads + * called the method simultaneously. This may cause the build to fail occasionally. Hence excluding this + * test by adding Ignore annotation. + */ + @Test + @Ignore + public void givenMultiThread_whenUnsafeCounterIncrement() throws InterruptedException { + ExecutorService service = Executors.newFixedThreadPool(3); + UnsafeCounter unsafeCounter = new UnsafeCounter(); + + IntStream.range(0, 1000) + .forEach(count -> service.submit(unsafeCounter::increment)); + service.awaitTermination(100, TimeUnit.MILLISECONDS); + + assertEquals(1000, unsafeCounter.getValue()); + } + + @Test + public void givenMultiThread_whenSafeCounterWithLockIncrement() throws InterruptedException { + ExecutorService service = Executors.newFixedThreadPool(3); + SafeCounterWithLock safeCounter = new SafeCounterWithLock(); + + IntStream.range(0, 1000) + .forEach(count -> service.submit(safeCounter::increment)); + service.awaitTermination(100, TimeUnit.MILLISECONDS); + + assertEquals(1000, safeCounter.getValue()); + } + + @Test + public void givenMultiThread_whenSafeCounterWithoutLockIncrement() throws InterruptedException { + ExecutorService service = Executors.newFixedThreadPool(3); + SafeCounterWithoutLock safeCounter = new SafeCounterWithoutLock(); + + IntStream.range(0, 1000) + .forEach(count -> service.submit(safeCounter::increment)); + service.awaitTermination(100, TimeUnit.MILLISECONDS); + + assertEquals(1000, safeCounter.getValue()); + } +} diff --git a/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListUnitTest.java index 911140315595..3eb1d218727c 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListUnitTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/copyonwrite/CopyOnWriteArrayListUnitTest.java @@ -17,7 +17,7 @@ public class CopyOnWriteArrayListUnitTest { public void givenCopyOnWriteList_whenIterateAndAddElementToUnderneathList_thenShouldNotChangeIterator() { //given final CopyOnWriteArrayList numbers = - new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8}); + new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8}); //when Iterator iterator = numbers.iterator(); @@ -42,7 +42,7 @@ public void givenCopyOnWriteList_whenIterateAndAddElementToUnderneathList_thenSh public void givenCopyOnWriteList_whenIterateOverItAndTryToRemoveElement_thenShouldThrowException() { //given final CopyOnWriteArrayList numbers = - new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8}); + new CopyOnWriteArrayList<>(new Integer[]{1, 3, 5, 8}); //when Iterator iterator = numbers.iterator(); diff --git a/core-java/src/test/java/com/baeldung/concurrent/delayqueue/DelayQueueIntegrationTest.java b/core-java/src/test/java/com/baeldung/concurrent/delayqueue/DelayQueueIntegrationTest.java index 6490c6c09482..180f3033abe7 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/delayqueue/DelayQueueIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/delayqueue/DelayQueueIntegrationTest.java @@ -4,7 +4,11 @@ import org.junit.Test; import org.junit.runners.MethodSorters; -import java.util.concurrent.*; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.DelayQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import static junit.framework.TestCase.assertEquals; @@ -19,7 +23,7 @@ public void givenDelayQueue_whenProduceElement_thenShouldConsumeAfterGivenDelay( int delayOfEachProducedMessageMilliseconds = 500; DelayQueueConsumer consumer = new DelayQueueConsumer(queue, numberOfElementsToProduce); DelayQueueProducer producer - = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); + = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); //when executor.submit(producer); @@ -41,7 +45,7 @@ public void givenDelayQueue_whenProduceElementWithHugeDelay_thenConsumerWasNotAb int delayOfEachProducedMessageMilliseconds = 10_000; DelayQueueConsumer consumer = new DelayQueueConsumer(queue, numberOfElementsToProduce); DelayQueueProducer producer - = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); + = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); //when executor.submit(producer); @@ -63,7 +67,7 @@ public void givenDelayQueue_whenProduceElementWithNegativeDelay_thenConsumeMessa int delayOfEachProducedMessageMilliseconds = -10_000; DelayQueueConsumer consumer = new DelayQueueConsumer(queue, numberOfElementsToProduce); DelayQueueProducer producer - = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); + = new DelayQueueProducer(queue, numberOfElementsToProduce, delayOfEachProducedMessageMilliseconds); //when executor.submit(producer); diff --git a/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java index a47c44506d73..1dff70ffb843 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java @@ -1,10 +1,10 @@ package com.baeldung.concurrent.future; -import static org.junit.Assert.assertEquals; +import org.junit.Test; import java.util.concurrent.ForkJoinPool; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class FactorialSquareCalculatorUnitTest { diff --git a/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java b/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java index 84d7a5550475..5f8b05a974a4 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java @@ -8,7 +8,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.concurrent.*; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/core-java/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java b/core-java/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java index 4dccbc3e2608..0d4591e6246b 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java @@ -9,65 +9,65 @@ public class SharedObjectWithLockManualTest { - @Test - public void whenLockAcquired_ThenLockedIsTrue() { - final SharedObjectWithLock object = new SharedObjectWithLock(); + @Test + public void whenLockAcquired_ThenLockedIsTrue() { + final SharedObjectWithLock object = new SharedObjectWithLock(); - final int threadCount = 2; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); + final int threadCount = 2; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); - executeThreads(object, threadCount, service); + executeThreads(object, threadCount, service); - assertEquals(true, object.isLocked()); + assertEquals(true, object.isLocked()); - service.shutdown(); - } + service.shutdown(); + } - @Test - public void whenLocked_ThenQueuedThread() { - final int threadCount = 4; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - final SharedObjectWithLock object = new SharedObjectWithLock(); + @Test + public void whenLocked_ThenQueuedThread() { + final int threadCount = 4; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + final SharedObjectWithLock object = new SharedObjectWithLock(); - executeThreads(object, threadCount, service); + executeThreads(object, threadCount, service); - assertEquals(object.hasQueuedThreads(), true); + assertEquals(object.hasQueuedThreads(), true); - service.shutdown(); + service.shutdown(); - } + } - public void whenTryLock_ThenQueuedThread() { - final SharedObjectWithLock object = new SharedObjectWithLock(); + public void whenTryLock_ThenQueuedThread() { + final SharedObjectWithLock object = new SharedObjectWithLock(); - final int threadCount = 2; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); + final int threadCount = 2; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); - executeThreads(object, threadCount, service); + executeThreads(object, threadCount, service); - assertEquals(true, object.isLocked()); + assertEquals(true, object.isLocked()); - service.shutdown(); - } + service.shutdown(); + } - @Test - public void whenGetCount_ThenCorrectCount() throws InterruptedException { - final int threadCount = 4; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - final SharedObjectWithLock object = new SharedObjectWithLock(); + @Test + public void whenGetCount_ThenCorrectCount() throws InterruptedException { + final int threadCount = 4; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + final SharedObjectWithLock object = new SharedObjectWithLock(); - executeThreads(object, threadCount, service); - Thread.sleep(1000); - assertEquals(object.getCounter(), 4); + executeThreads(object, threadCount, service); + Thread.sleep(1000); + assertEquals(object.getCounter(), 4); - service.shutdown(); + service.shutdown(); - } + } - private void executeThreads(SharedObjectWithLock object, int threadCount, ExecutorService service) { - for (int i = 0; i < threadCount; i++) { - service.execute(object::perform); - } - } + private void executeThreads(SharedObjectWithLock object, int threadCount, ExecutorService service) { + for (int i = 0; i < threadCount; i++) { + service.execute(object::perform); + } + } } diff --git a/core-java/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java b/core-java/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java index fd6cf0844267..3014ae38b27f 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java @@ -1,6 +1,5 @@ package com.baeldung.concurrent.locks; -import jdk.nashorn.internal.ir.annotations.Ignore; import org.junit.Test; import java.util.concurrent.ExecutorService; @@ -10,49 +9,49 @@ public class SynchronizedHashMapWithRWLockManualTest { - @Test - public void whenWriting_ThenNoReading() { - SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); - final int threadCount = 3; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - - executeWriterThreads(object, threadCount, service); - - assertEquals(object.isReadLockAvailable(), false); - - service.shutdown(); - } - - @Test - public void whenReading_ThenMultipleReadingAllowed() { - SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); - final int threadCount = 5; - final ExecutorService service = Executors.newFixedThreadPool(threadCount); - - executeReaderThreads(object, threadCount, service); - - assertEquals(object.isReadLockAvailable(), true); - - service.shutdown(); - } - - private void executeWriterThreads(SynchronizedHashMapWithRWLock object, int threadCount, ExecutorService service) { - for (int i = 0; i < threadCount; i++) { - service.execute(() -> { - try { - object.put("key" + threadCount, "value" + threadCount); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }); - } - } - - private void executeReaderThreads(SynchronizedHashMapWithRWLock object, int threadCount, ExecutorService service) { - for (int i = 0; i < threadCount; i++) - service.execute(() -> { - object.get("key" + threadCount); - }); - } + @Test + public void whenWriting_ThenNoReading() { + SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); + final int threadCount = 3; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + + executeWriterThreads(object, threadCount, service); + + assertEquals(object.isReadLockAvailable(), false); + + service.shutdown(); + } + + @Test + public void whenReading_ThenMultipleReadingAllowed() { + SynchronizedHashMapWithRWLock object = new SynchronizedHashMapWithRWLock(); + final int threadCount = 5; + final ExecutorService service = Executors.newFixedThreadPool(threadCount); + + executeReaderThreads(object, threadCount, service); + + assertEquals(object.isReadLockAvailable(), true); + + service.shutdown(); + } + + private void executeWriterThreads(SynchronizedHashMapWithRWLock object, int threadCount, ExecutorService service) { + for (int i = 0; i < threadCount; i++) { + service.execute(() -> { + try { + object.put("key" + threadCount, "value" + threadCount); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }); + } + } + + private void executeReaderThreads(SynchronizedHashMapWithRWLock object, int threadCount, ExecutorService service) { + for (int i = 0; i < threadCount; i++) + service.execute(() -> { + object.get("key" + threadCount); + }); + } } diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java index 9f7b828a9ce6..d1814c8fc9e9 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueIntegrationTest.java @@ -42,7 +42,7 @@ public void whenPollingEmptyQueue_thenShouldBlockThread() throws InterruptedExce try { Integer poll = queue.take(); LOG.debug("Polled: " + poll); - } catch (InterruptedException e) { + } catch (InterruptedException ignored) { } } }); diff --git a/core-java/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java b/core-java/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java new file mode 100644 index 000000000000..8d64bb68092f --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java @@ -0,0 +1,114 @@ +package com.baeldung.concurrent.semaphores; + +import org.junit.Test; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class SemaphoresManualTest { + + // ========= login queue ====== + + @Test + public void givenLoginQueue_whenReachLimit_thenBlocked() { + final int slots = 10; + final ExecutorService executorService = Executors.newFixedThreadPool(slots); + final LoginQueueUsingSemaphore loginQueue = new LoginQueueUsingSemaphore(slots); + IntStream.range(0, slots) + .forEach(user -> executorService.execute(loginQueue::tryLogin)); + executorService.shutdown(); + + assertEquals(0, loginQueue.availableSlots()); + assertFalse(loginQueue.tryLogin()); + } + + @Test + public void givenLoginQueue_whenLogout_thenSlotsAvailable() { + final int slots = 10; + final ExecutorService executorService = Executors.newFixedThreadPool(slots); + final LoginQueueUsingSemaphore loginQueue = new LoginQueueUsingSemaphore(slots); + IntStream.range(0, slots) + .forEach(user -> executorService.execute(loginQueue::tryLogin)); + executorService.shutdown(); + + assertEquals(0, loginQueue.availableSlots()); + loginQueue.logout(); + assertTrue(loginQueue.availableSlots() > 0); + assertTrue(loginQueue.tryLogin()); + } + + // ========= delay queue ======= + + @Test + public void givenDelayQueue_whenReachLimit_thenBlocked() { + final int slots = 50; + final ExecutorService executorService = Executors.newFixedThreadPool(slots); + final DelayQueueUsingTimedSemaphore delayQueue = new DelayQueueUsingTimedSemaphore(1, slots); + IntStream.range(0, slots) + .forEach(user -> executorService.execute(delayQueue::tryAdd)); + executorService.shutdown(); + + assertEquals(0, delayQueue.availableSlots()); + assertFalse(delayQueue.tryAdd()); + } + + @Test + public void givenDelayQueue_whenTimePass_thenSlotsAvailable() throws InterruptedException { + final int slots = 50; + final ExecutorService executorService = Executors.newFixedThreadPool(slots); + final DelayQueueUsingTimedSemaphore delayQueue = new DelayQueueUsingTimedSemaphore(1, slots); + IntStream.range(0, slots) + .forEach(user -> executorService.execute(delayQueue::tryAdd)); + executorService.shutdown(); + + assertEquals(0, delayQueue.availableSlots()); + Thread.sleep(1000); + assertTrue(delayQueue.availableSlots() > 0); + assertTrue(delayQueue.tryAdd()); + } + + // ========== mutex ======== + + @Test + public void whenMutexAndMultipleThreads_thenBlocked() throws InterruptedException { + final int count = 5; + final ExecutorService executorService = Executors.newFixedThreadPool(count); + final CounterUsingMutex counter = new CounterUsingMutex(); + IntStream.range(0, count) + .forEach(user -> executorService.execute(() -> { + try { + counter.increase(); + } catch (final InterruptedException e) { + e.printStackTrace(); + } + })); + executorService.shutdown(); + + assertTrue(counter.hasQueuedThreads()); + } + + @Test + public void givenMutexAndMultipleThreads_ThenDelay_thenCorrectCount() throws InterruptedException { + final int count = 5; + final ExecutorService executorService = Executors.newFixedThreadPool(count); + final CounterUsingMutex counter = new CounterUsingMutex(); + IntStream.range(0, count) + .forEach(user -> executorService.execute(() -> { + try { + counter.increase(); + } catch (final InterruptedException e) { + e.printStackTrace(); + } + })); + executorService.shutdown(); + assertTrue(counter.hasQueuedThreads()); + Thread.sleep(5000); + assertFalse(counter.hasQueuedThreads()); + assertEquals(count, counter.getCount()); + } +} diff --git a/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockTest.java b/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockTest.java index 303daa8d262d..1f8e8d681a01 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockTest.java @@ -1,13 +1,13 @@ package com.baeldung.concurrent.synchronize; -import static org.junit.Assert.assertEquals; +import org.junit.Test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class BaeldungSychronizedBlockTest { @@ -17,7 +17,7 @@ public void givenMultiThread_whenBlockSync() throws InterruptedException { BaeldungSynchronizedBlocks synchronizedBlocks = new BaeldungSynchronizedBlocks(); IntStream.range(0, 1000) - .forEach(count -> service.submit(synchronizedBlocks::performSynchronisedTask)); + .forEach(count -> service.submit(synchronizedBlocks::performSynchronisedTask)); service.awaitTermination(100, TimeUnit.MILLISECONDS); assertEquals(1000, synchronizedBlocks.getCount()); @@ -28,7 +28,7 @@ public void givenMultiThread_whenStaticSyncBlock() throws InterruptedException { ExecutorService service = Executors.newCachedThreadPool(); IntStream.range(0, 1000) - .forEach(count -> service.submit(BaeldungSynchronizedBlocks::performStaticSyncTask)); + .forEach(count -> service.submit(BaeldungSynchronizedBlocks::performStaticSyncTask)); service.awaitTermination(100, TimeUnit.MILLISECONDS); assertEquals(1000, BaeldungSynchronizedBlocks.getStaticCount()); diff --git a/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsTest.java b/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsTest.java index e829423362c4..ba7c1f0a7b38 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsTest.java @@ -1,14 +1,14 @@ package com.baeldung.concurrent.synchronize; -import static org.junit.Assert.assertEquals; +import org.junit.Ignore; +import org.junit.Test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; -import org.junit.Ignore; -import org.junit.Test; +import static org.junit.Assert.assertEquals; public class BaeldungSynchronizeMethodsTest { @@ -19,7 +19,7 @@ public void givenMultiThread_whenNonSyncMethod() throws InterruptedException { BaeldungSynchronizedMethods method = new BaeldungSynchronizedMethods(); IntStream.range(0, 1000) - .forEach(count -> service.submit(method::calculate)); + .forEach(count -> service.submit(method::calculate)); service.awaitTermination(100, TimeUnit.MILLISECONDS); assertEquals(1000, method.getSum()); @@ -31,7 +31,7 @@ public void givenMultiThread_whenMethodSync() throws InterruptedException { BaeldungSynchronizedMethods method = new BaeldungSynchronizedMethods(); IntStream.range(0, 1000) - .forEach(count -> service.submit(method::synchronisedCalculate)); + .forEach(count -> service.submit(method::synchronisedCalculate)); service.awaitTermination(100, TimeUnit.MILLISECONDS); assertEquals(1000, method.getSyncSum()); @@ -42,7 +42,7 @@ public void givenMultiThread_whenStaticSyncMethod() throws InterruptedException ExecutorService service = Executors.newCachedThreadPool(); IntStream.range(0, 1000) - .forEach(count -> service.submit(BaeldungSynchronizedMethods::syncStaticCalculate)); + .forEach(count -> service.submit(BaeldungSynchronizedMethods::syncStaticCalculate)); service.awaitTermination(100, TimeUnit.MILLISECONDS); assertEquals(1000, BaeldungSynchronizedMethods.staticSum); diff --git a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java index 57e1f3328027..a10ec66f2014 100644 --- a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java +++ b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeUnitTest.java @@ -7,13 +7,15 @@ import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class UseLocalDateTimeUnitTest { UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); @Test public void givenString_whenUsingParse_thenLocalDateTime() { - Assert.assertEquals(LocalDate.of(2016, Month.MAY, 10), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalDate()); - Assert.assertEquals(LocalTime.of(6, 30), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalTime()); + assertEquals(LocalDate.of(2016, Month.MAY, 10), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalDate()); + assertEquals(LocalTime.of(6, 30), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalTime()); } } diff --git a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java index 8f1997e9e89e..e158c0fd6793 100644 --- a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java +++ b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateUnitTest.java @@ -7,48 +7,50 @@ import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; + public class UseLocalDateUnitTest { UseLocalDate useLocalDate = new UseLocalDate(); @Test public void givenValues_whenUsingFactoryOf_thenLocalDate() { - Assert.assertEquals("2016-05-10", useLocalDate.getLocalDateUsingFactoryOfMethod(2016, 5, 10).toString()); + assertEquals("2016-05-10", useLocalDate.getLocalDateUsingFactoryOfMethod(2016, 5, 10).toString()); } @Test public void givenString_whenUsingParse_thenLocalDate() { - Assert.assertEquals("2016-05-10", useLocalDate.getLocalDateUsingParseMethod("2016-05-10").toString()); + assertEquals("2016-05-10", useLocalDate.getLocalDateUsingParseMethod("2016-05-10").toString()); } @Test public void whenUsingClock_thenLocalDate() { - Assert.assertEquals(LocalDate.now(), useLocalDate.getLocalDateFromClock()); + assertEquals(LocalDate.now(), useLocalDate.getLocalDateFromClock()); } @Test public void givenDate_whenUsingPlus_thenNextDay() { - Assert.assertEquals(LocalDate.now().plusDays(1), useLocalDate.getNextDay(LocalDate.now())); + assertEquals(LocalDate.now().plusDays(1), useLocalDate.getNextDay(LocalDate.now())); } @Test public void givenDate_whenUsingMinus_thenPreviousDay() { - Assert.assertEquals(LocalDate.now().minusDays(1), useLocalDate.getPreviousDay(LocalDate.now())); + assertEquals(LocalDate.now().minusDays(1), useLocalDate.getPreviousDay(LocalDate.now())); } @Test public void givenToday_whenUsingGetDayOfWeek_thenDayOfWeek() { - Assert.assertEquals(DayOfWeek.SUNDAY, useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22"))); + assertEquals(DayOfWeek.SUNDAY, useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22"))); } @Test public void givenToday_whenUsingWithTemporalAdjuster_thenFirstDayOfMonth() { - Assert.assertEquals(1, useLocalDate.getFirstDayOfMonth().getDayOfMonth()); + assertEquals(1, useLocalDate.getFirstDayOfMonth().getDayOfMonth()); } @Test public void givenLocalDate_whenUsingAtStartOfDay_thenReturnMidnight() { - Assert.assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"), useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22"))); + assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"), useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22"))); } } diff --git a/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java b/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java new file mode 100644 index 000000000000..887e7e41da1c --- /dev/null +++ b/core-java/src/test/java/com/baeldung/deserialization/DeserializationUnitTest.java @@ -0,0 +1,67 @@ +package com.baeldung.deserialization; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.io.InvalidClassException; + +import org.junit.Ignore; +import org.junit.Test; + +public class DeserializationUnitTest { + + private static final String serializedObj = "rO0ABXNyACljb20uYmFlbGR1bmcuZGVzZXJpYWxpemF0aW9uLkFwcGxlUHJvZHVjdAAAAAAAEtaHAgADTAANaGVhZHBob25lUG9ydHQAEkxqYXZhL2xhbmcvU3RyaW5nO0wADmxpZ2h0ZW5pbmdQb3J0cQB+AAFMAA90aHVuZGVyYm9sdFBvcnRxAH4AAXhwdAARaGVhZHBob25lUG9ydDIwMjBwdAATdGh1bmRlcmJvbHRQb3J0MjAyMA=="; + + private static long userDefinedSerialVersionUID = 1234567L; + + /** + * Tests the deserialization of the original "AppleProduct" (no exceptions are thrown) + * @throws ClassNotFoundException + * @throws IOException + */ + @Test + public void testDeserializeObj_compatible() throws IOException, ClassNotFoundException { + + assertEquals(userDefinedSerialVersionUID, AppleProduct.getSerialVersionUID()); + + AppleProduct macBook = new AppleProduct(); + macBook.headphonePort = "headphonePort2020"; + macBook.thunderboltPort = "thunderboltPort2020"; + + // serializes the "AppleProduct" object + String serializedProduct = SerializationUtility.serializeObjectToString(macBook); + + // deserializes the "AppleProduct" object + AppleProduct deserializedProduct = (AppleProduct) DeserializationUtility.deSerializeObjectFromString(serializedProduct); + + assertTrue(deserializedProduct.headphonePort.equalsIgnoreCase(macBook.headphonePort)); + assertTrue(deserializedProduct.thunderboltPort.equalsIgnoreCase(macBook.thunderboltPort)); + + } + + /** + * Tests the deserialization of the modified (non-compatible) "AppleProduct". + * The test should result in an InvalidClassException being thrown. + * + * Note: to run this test: + * 1. Modify the value of the serialVersionUID identifier in AppleProduct.java + * 2. Remove the @Ignore annotation + * 3. Run the test individually (do not run the entire set of tests) + * 4. Revert the changes made in 1 & 2 (so that you're able to re-run the tests successfully) + * + * @throws ClassNotFoundException + * @throws IOException + */ + @Ignore + @Test(expected = InvalidClassException.class) + public void testDeserializeObj_incompatible() throws ClassNotFoundException, IOException { + + assertNotEquals(userDefinedSerialVersionUID, AppleProduct.getSerialVersionUID()); + + // attempts to deserialize the "AppleProduct" object + DeserializationUtility.deSerializeObjectFromString(serializedObj); + } + +} diff --git a/core-java/src/test/java/com/baeldung/doublecolon/ComputerUtilsUnitTest.java b/core-java/src/test/java/com/baeldung/doublecolon/ComputerUtilsUnitTest.java index f69e4b03ee54..7157dead6e93 100644 --- a/core-java/src/test/java/com/baeldung/doublecolon/ComputerUtilsUnitTest.java +++ b/core-java/src/test/java/com/baeldung/doublecolon/ComputerUtilsUnitTest.java @@ -83,7 +83,7 @@ public void testSuperMethodReference() { final TriFunction integerStringIntegerObjectTriFunction = MacbookPro::new; final MacbookPro macbookPro = integerStringIntegerObjectTriFunction.apply(2010, "black", 100); - Double initialValue = new Double(999.99); + Double initialValue = 999.99; final Double actualValue = macbookPro.calculateValue(initialValue); Assert.assertEquals(766.659, actualValue, 0.0); } diff --git a/core-java/src/test/java/com/baeldung/file/FileOperationsManualTest.java b/core-java/src/test/java/com/baeldung/file/FileOperationsManualTest.java index 74886bdb53ea..ea71d1b5c1fd 100644 --- a/core-java/src/test/java/com/baeldung/file/FileOperationsManualTest.java +++ b/core-java/src/test/java/com/baeldung/file/FileOperationsManualTest.java @@ -6,7 +6,12 @@ import org.junit.Assert; import org.junit.Test; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; @@ -14,6 +19,10 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + public class FileOperationsManualTest { @Test @@ -25,7 +34,7 @@ public void givenFileName_whenUsingClassloader_thenFileData() throws IOException InputStream inputStream = new FileInputStream(file); String data = readFromInputStream(inputStream); - Assert.assertEquals(expectedData, data.trim()); + assertEquals(expectedData, data.trim()); } @Test @@ -36,7 +45,7 @@ public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); String data = readFromInputStream(inputStream); - Assert.assertEquals(expectedData, data.trim()); + assertEquals(expectedData, data.trim()); } @Test @@ -47,7 +56,7 @@ public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); String data = readFromInputStream(inputStream); - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } @Test @@ -61,7 +70,7 @@ public void givenURLName_whenUsingURL_thenFileData() throws IOException { InputStream inputStream = urlConnection.getInputStream(); String data = readFromInputStream(inputStream); - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } @Test @@ -72,7 +81,7 @@ public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { File file = new File(classLoader.getResource("fileTest.txt").getFile()); String data = FileUtils.readFileToString(file); - Assert.assertEquals(expectedData, data.trim()); + assertEquals(expectedData, data.trim()); } @Test @@ -84,7 +93,7 @@ public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOExc byte[] fileBytes = Files.readAllBytes(path); String data = new String(fileBytes); - Assert.assertEquals(expectedData, data.trim()); + assertEquals(expectedData, data.trim()); } @Test @@ -98,7 +107,7 @@ public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, lines.forEach(line -> data.append(line).append("\n")); lines.close(); - Assert.assertEquals(expectedData, data.toString().trim()); + assertEquals(expectedData, data.toString().trim()); } private String readFromInputStream(InputStream inputStream) throws IOException { diff --git a/core-java/src/test/java/com/baeldung/filesystem/jndi/test/LookupFSJNDIIntegrationTest.java b/core-java/src/test/java/com/baeldung/filesystem/jndi/test/LookupFSJNDIIntegrationTest.java index 1ec703f0f629..330ec3aee3e9 100644 --- a/core-java/src/test/java/com/baeldung/filesystem/jndi/test/LookupFSJNDIIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/filesystem/jndi/test/LookupFSJNDIIntegrationTest.java @@ -1,15 +1,13 @@ package com.baeldung.filesystem.jndi.test; -import static org.junit.Assert.assertNotNull; - -import java.io.File; +import com.baeldung.filesystem.jndi.LookupFSJNDI; +import org.junit.Test; import javax.naming.InitialContext; import javax.naming.NamingException; +import java.io.File; -import org.junit.Test; - -import com.baeldung.filesystem.jndi.LookupFSJNDI; +import static org.junit.Assert.assertNotNull; public class LookupFSJNDIIntegrationTest { LookupFSJNDI fsjndi; diff --git a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java index 1036df0bb81d..811088cc0caf 100644 --- a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java +++ b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java @@ -25,7 +25,7 @@ public class FunctionalInterfaceUnitTest { @Test public void whenPassingLambdaToComputeIfAbsent_thenTheValueGetsComputedAndPutIntoMap() { Map nameMap = new HashMap<>(); - Integer value = nameMap.computeIfAbsent("John", s -> s.length()); + Integer value = nameMap.computeIfAbsent("John", String::length); assertEquals(new Integer(4), nameMap.get("John")); assertEquals(new Integer(4), value); diff --git a/core-java/src/test/java/com/baeldung/hashing/SHA256HashingUnitTest.java b/core-java/src/test/java/com/baeldung/hashing/SHA256HashingUnitTest.java index 270cc8be9a80..3c34bf2c6e06 100644 --- a/core-java/src/test/java/com/baeldung/hashing/SHA256HashingUnitTest.java +++ b/core-java/src/test/java/com/baeldung/hashing/SHA256HashingUnitTest.java @@ -2,7 +2,7 @@ import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class SHA256HashingUnitTest { diff --git a/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java b/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java index 691615a1b4c1..acd6536ac4eb 100644 --- a/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java +++ b/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java @@ -2,7 +2,6 @@ import org.apache.commons.lang.StringUtils; import org.junit.Test; -import static org.junit.Assert.*; import java.io.BufferedReader; import java.io.DataOutputStream; @@ -17,6 +16,9 @@ import java.util.Map; import java.util.Optional; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + public class HttpRequestLiveTest { @Test @@ -39,7 +41,7 @@ public void whenGetRequest_thenOk() throws IOException { int status = con.getResponseCode(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } @@ -67,7 +69,7 @@ public void whenPostRequest_thenOk() throws IOException { int status = con.getResponseCode(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; - StringBuffer content = new StringBuffer(); + StringBuilder content = new StringBuilder(); while ((inputLine = in.readLine()) != null) { content.append(inputLine); } diff --git a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoTest.java b/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoTest.java new file mode 100644 index 000000000000..c429039e3dbd --- /dev/null +++ b/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoTest.java @@ -0,0 +1,65 @@ +package com.baeldung.javanetworking.uriurl.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; + +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.javanetworking.uriurl.URLDemo; + +@FixMethodOrder +public class URIDemoTest { + private final Logger log = LoggerFactory.getLogger(URIDemoTest.class); + String URISTRING = "https://wordpress.org:443/support/topic/page-jumps-within-wordpress/?replies=3#post-2278484"; + // parsed locator + static String URISCHEME = "https"; + String URISCHEMESPECIFIC; + static String URIHOST = "wordpress.org"; + static String URIAUTHORITY = "wordpress.org:443"; + + static String URIPATH = "/support/topic/page-jumps-within-wordpress/"; + int URIPORT = 443; + static int URIDEFAULTPORT = 443; + static String URIQUERY = "replies=3"; + static String URIFRAGMENT = "post-2278484"; + static String URICOMPOUND = URISCHEME + "://" + URIHOST + ":" + URIDEFAULTPORT + URIPATH + "?" + URIQUERY + "#" + URIFRAGMENT; + + static URI uri; + URL url; + BufferedReader in = null; + String URIContent = ""; + + @BeforeClass + public static void givenEmplyURL_whenInitializeURL_thenSuccess() throws URISyntaxException { + uri = new URI(URICOMPOUND); + } + + // check parsed URL + @Test + public void givenURI_whenURIIsParsed_thenSuccess() { + assertNotNull("URI is null", uri); + assertEquals("URI string is not equal", uri.toString(), URISTRING); + assertEquals("Scheme is not equal", uri.getScheme(), URISCHEME); + assertEquals("Authority is not equal", uri.getAuthority(), URIAUTHORITY); + assertEquals("Host string is not equal", uri.getHost(), URIHOST); + assertEquals("Path string is not equal", uri.getPath(), URIPATH); + assertEquals("Port number is not equal", uri.getPort(), URIPORT); + assertEquals("Query string is not equal", uri.getQuery(), URIQUERY); + assertEquals("Fragment string is not equal", uri.getFragment(), URIFRAGMENT); + } +} diff --git a/core-java/src/test/java/com/baeldung/javanetworking/url/test/URLDemoTest.java b/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoTest.java similarity index 95% rename from core-java/src/test/java/com/baeldung/javanetworking/url/test/URLDemoTest.java rename to core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoTest.java index 293052e84278..47cbf539a550 100644 --- a/core-java/src/test/java/com/baeldung/javanetworking/url/test/URLDemoTest.java +++ b/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoTest.java @@ -1,4 +1,4 @@ -package com.baeldung.javanetworking.url.test; +package com.baeldung.javanetworking.uriurl.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -18,11 +18,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.baeldung.javanetworking.url.URLDemo; +import com.baeldung.javanetworking.uriurl.URLDemo; @FixMethodOrder public class URLDemoTest { - private final Logger log = LoggerFactory.getLogger(URLDemo.class); + private final Logger log = LoggerFactory.getLogger(URLDemoTest.class); static String URLSTRING = "https://wordpress.org:443/support/topic/page-jumps-within-wordpress/?replies=3#post-2278484"; // parsed locator static String URLPROTOCOL = "https"; diff --git a/core-java/src/test/java/com/baeldung/list/flattennestedlist/FlattenNestedListUnitTest.java b/core-java/src/test/java/com/baeldung/list/flattennestedlist/FlattenNestedListUnitTest.java index 50abb4bc9277..3c8f519082fe 100644 --- a/core-java/src/test/java/com/baeldung/list/flattennestedlist/FlattenNestedListUnitTest.java +++ b/core-java/src/test/java/com/baeldung/list/flattennestedlist/FlattenNestedListUnitTest.java @@ -14,7 +14,7 @@ import org.junit.Test; public class FlattenNestedListUnitTest { - List> lol = asList(asList("one:one"), asList("two:one", "two:two", "two:three"), asList("three:one", "three:two", "three:three", "three:four")); + private List> lol = asList(asList("one:one"), asList("two:one", "two:two", "two:three"), asList("three:one", "three:two", "three:three", "three:four")); @Test public void givenNestedList_thenFlattenImperatively() { @@ -36,13 +36,13 @@ public void givenNestedList_thenFlattenFunctionally() { assertThat(ls, IsIterableContainingInOrder.contains("one:one", "two:one", "two:two", "two:three", "three:one", "three:two", "three:three", "three:four")); } - public List flattenListOfListsImperatively(List> list) { + private List flattenListOfListsImperatively(List> list) { List ls = new ArrayList<>(); list.forEach(ls::addAll); return ls; } - public List flattenListOfListsStream(List> list) { + private List flattenListOfListsStream(List> list) { return list.stream().flatMap(Collection::stream).collect(Collectors.toList()); } } diff --git a/core-java/src/test/java/com/baeldung/list/listoflist/ListOfListsUnitTest.java b/core-java/src/test/java/com/baeldung/list/listoflist/ListOfListsUnitTest.java index 75f8b8359f68..7a23afa12fd2 100644 --- a/core-java/src/test/java/com/baeldung/list/listoflist/ListOfListsUnitTest.java +++ b/core-java/src/test/java/com/baeldung/list/listoflist/ListOfListsUnitTest.java @@ -1,18 +1,19 @@ package com.baeldung.list.listoflist; +import org.junit.Before; +import org.junit.Test; + import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Test; public class ListOfListsUnitTest { - private List> listOfLists = new ArrayList>(); - private ArrayList penList = new ArrayList<>(); - private ArrayList pencilList = new ArrayList<>(); - private ArrayList rubberList = new ArrayList<>(); + private List> listOfLists = new ArrayList<>(); + private List penList = new ArrayList<>(); + private List pencilList = new ArrayList<>(); + private List rubberList = new ArrayList<>(); @SuppressWarnings("unchecked") @Before @@ -29,11 +30,11 @@ public void init() { @Test public void givenListOfLists_thenCheckNames() { assertEquals("Pen 1", ((Pen) listOfLists.get(0) - .get(0)).getName()); + .get(0)).getName()); assertEquals("Pencil 1", ((Pencil) listOfLists.get(1) - .get(0)).getName()); + .get(0)).getName()); assertEquals("Rubber 1", ((Rubber) listOfLists.get(2) - .get(0)).getName()); + .get(0)).getName()); } @SuppressWarnings("unchecked") @@ -43,10 +44,10 @@ public void givenListOfLists_whenRemovingElements_thenCheckNames() { ((ArrayList) listOfLists.get(1)).remove(0); listOfLists.remove(1); assertEquals("Rubber 1", ((Rubber) listOfLists.get(1) - .get(0)).getName()); + .get(0)).getName()); listOfLists.remove(0); assertEquals("Rubber 1", ((Rubber) listOfLists.get(0) - .get(0)).getName()); + .get(0)).getName()); } @Test @@ -60,17 +61,17 @@ public void givenThreeList_whenCombineIntoOneList_thenCheckList() { ArrayList rubbers = new ArrayList<>(); rubbers.add(new Rubber("Rubber 1")); rubbers.add(new Rubber("Rubber 2")); - + List> list = new ArrayList>(); list.add(pens); list.add(pencils); list.add(rubbers); - + assertEquals("Pen 1", ((Pen) list.get(0) - .get(0)).getName()); + .get(0)).getName()); assertEquals("Pencil 1", ((Pencil) list.get(1) - .get(0)).getName()); + .get(0)).getName()); assertEquals("Rubber 1", ((Rubber) list.get(2) - .get(0)).getName()); + .get(0)).getName()); } } diff --git a/core-java/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java b/core-java/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java index 22457d196ec4..3c2d9904d4c3 100644 --- a/core-java/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java +++ b/core-java/src/test/java/com/baeldung/mappedbytebuffer/MappedByteBufferUnitTest.java @@ -47,7 +47,7 @@ public void givenPath_whenWriteToItUsingMappedByteBuffer_thenShouldSuccessfullyW //when try (FileChannel fileChannel = (FileChannel) Files.newByteChannel(pathToWrite, - EnumSet.of(StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING))) { + EnumSet.of(StandardOpenOption.READ, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING))) { MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, charBuffer.length()); if (mappedByteBuffer != null) { @@ -61,7 +61,7 @@ public void givenPath_whenWriteToItUsingMappedByteBuffer_thenShouldSuccessfullyW } - public Path getFileURIFromResources(String fileName) throws Exception { + private Path getFileURIFromResources(String fileName) throws Exception { ClassLoader classLoader = getClass().getClassLoader(); return Paths.get(classLoader.getResource(fileName).getPath()); } diff --git a/core-java/src/test/java/com/baeldung/maths/BigDecimalImplTest.java b/core-java/src/test/java/com/baeldung/maths/BigDecimalImplTest.java index 973b987224b6..788fbd7047e9 100644 --- a/core-java/src/test/java/com/baeldung/maths/BigDecimalImplTest.java +++ b/core-java/src/test/java/com/baeldung/maths/BigDecimalImplTest.java @@ -1,10 +1,11 @@ package com.baeldung.maths; -import java.math.BigDecimal; -import java.math.RoundingMode; import org.junit.Assert; import org.junit.Test; +import java.math.BigDecimal; +import java.math.RoundingMode; + public class BigDecimalImplTest { @Test diff --git a/core-java/src/test/java/com/baeldung/maths/BigIntegerImplTest.java b/core-java/src/test/java/com/baeldung/maths/BigIntegerImplTest.java index 040c595065ab..aa8eaa990907 100644 --- a/core-java/src/test/java/com/baeldung/maths/BigIntegerImplTest.java +++ b/core-java/src/test/java/com/baeldung/maths/BigIntegerImplTest.java @@ -1,11 +1,10 @@ package com.baeldung.maths; -import java.math.BigInteger; - import org.junit.Assert; - import org.junit.Test; +import java.math.BigInteger; + public class BigIntegerImplTest { @Test diff --git a/core-java/src/test/java/com/baeldung/maths/RoundTest.java b/core-java/src/test/java/com/baeldung/maths/RoundTest.java index 95db14641407..5ce9523e213b 100644 --- a/core-java/src/test/java/com/baeldung/maths/RoundTest.java +++ b/core-java/src/test/java/com/baeldung/maths/RoundTest.java @@ -5,6 +5,9 @@ import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + public class RoundTest { private double value = 2.03456d; private int places = 2; diff --git a/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitTest.java b/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitTest.java index 69906543a91a..8948d1ebf78f 100644 --- a/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitTest.java +++ b/core-java/src/test/java/com/baeldung/money/JavaMoneyUnitTest.java @@ -3,13 +3,13 @@ import org.javamoney.moneta.FastMoney; import org.javamoney.moneta.Money; import org.javamoney.moneta.format.CurrencyStyle; +import org.junit.Ignore; import org.junit.Test; import javax.money.CurrencyUnit; import javax.money.Monetary; import javax.money.MonetaryAmount; import javax.money.UnknownCurrencyException; -import javax.money.convert.ConversionQueryBuilder; import javax.money.convert.CurrencyConversion; import javax.money.convert.MonetaryConversions; import javax.money.format.AmountFormatQueryBuilder; @@ -19,7 +19,11 @@ import java.util.List; import java.util.Locale; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; public class JavaMoneyUnitTest { @@ -36,17 +40,16 @@ public void givenCurrencyCode_whenString_thanExist() { @Test(expected = UnknownCurrencyException.class) public void givenCurrencyCode_whenNoExist_thanThrowsError() { Monetary.getCurrency("AAA"); - fail(); // if no exception } @Test public void givenAmounts_whenStringified_thanEquals() { CurrencyUnit usd = Monetary.getCurrency("USD"); MonetaryAmount fstAmtUSD = Monetary - .getDefaultAmountFactory() - .setCurrency(usd) - .setNumber(200) - .create(); + .getDefaultAmountFactory() + .setCurrency(usd) + .setNumber(200) + .create(); Money moneyof = Money.of(12, usd); FastMoney fastmoneyof = FastMoney.of(2, usd); @@ -59,10 +62,10 @@ public void givenAmounts_whenStringified_thanEquals() { @Test public void givenCurrencies_whenCompared_thanNotequal() { MonetaryAmount oneDolar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); Money oneEuro = Money.of(1, "EUR"); assertFalse(oneEuro.equals(FastMoney.of(1, "EUR"))); @@ -72,10 +75,10 @@ public void givenCurrencies_whenCompared_thanNotequal() { @Test(expected = ArithmeticException.class) public void givenAmount_whenDivided_thanThrowsException() { MonetaryAmount oneDolar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); oneDolar.divide(3); fail(); // if no exception } @@ -85,8 +88,8 @@ public void givenAmounts_whenSummed_thanCorrect() { List monetaryAmounts = Arrays.asList(Money.of(100, "CHF"), Money.of(10.20, "CHF"), Money.of(1.15, "CHF")); Money sumAmtCHF = (Money) monetaryAmounts - .stream() - .reduce(Money.of(0, "CHF"), MonetaryAmount::add); + .stream() + .reduce(Money.of(0, "CHF"), MonetaryAmount::add); assertEquals("CHF 111.35", sumAmtCHF.toString()); } @@ -97,18 +100,18 @@ public void givenArithmetic_whenStringified_thanEqualsAmount() { Money moneyof = Money.of(12, usd); MonetaryAmount fstAmtUSD = Monetary - .getDefaultAmountFactory() - .setCurrency(usd) - .setNumber(200.50) - .create(); + .getDefaultAmountFactory() + .setCurrency(usd) + .setNumber(200.50) + .create(); MonetaryAmount oneDolar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); Money subtractedAmount = Money - .of(1, "USD") - .subtract(fstAmtUSD); + .of(1, "USD") + .subtract(fstAmtUSD); MonetaryAmount multiplyAmount = oneDolar.multiply(0.25); MonetaryAmount divideAmount = oneDolar.divide(0.25); @@ -124,22 +127,23 @@ public void givenArithmetic_whenStringified_thanEqualsAmount() { @Test public void givenAmount_whenRounded_thanEquals() { MonetaryAmount fstAmtEUR = Monetary - .getDefaultAmountFactory() - .setCurrency("EUR") - .setNumber(1.30473908) - .create(); + .getDefaultAmountFactory() + .setCurrency("EUR") + .setNumber(1.30473908) + .create(); MonetaryAmount roundEUR = fstAmtEUR.with(Monetary.getDefaultRounding()); assertEquals("EUR 1.30473908", fstAmtEUR.toString()); assertEquals("EUR 1.3", roundEUR.toString()); } @Test + @Ignore("Currency providers are not always available") public void givenAmount_whenConversion_thenNotNull() { MonetaryAmount oneDollar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); CurrencyConversion conversionEUR = MonetaryConversions.getConversion("EUR"); @@ -152,10 +156,10 @@ public void givenAmount_whenConversion_thenNotNull() { @Test public void givenLocale_whenFormatted_thanEquals() { MonetaryAmount oneDollar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); MonetaryAmountFormat formatUSD = MonetaryFormats.getAmountFormat(Locale.US); String usFormatted = formatUSD.format(oneDollar); @@ -167,16 +171,16 @@ public void givenLocale_whenFormatted_thanEquals() { @Test public void givenAmount_whenCustomFormat_thanEquals() { MonetaryAmount oneDollar = Monetary - .getDefaultAmountFactory() - .setCurrency("USD") - .setNumber(1) - .create(); + .getDefaultAmountFactory() + .setCurrency("USD") + .setNumber(1) + .create(); MonetaryAmountFormat customFormat = MonetaryFormats.getAmountFormat(AmountFormatQueryBuilder - .of(Locale.US) - .set(CurrencyStyle.NAME) - .set("pattern", "00000.00 ¤") - .build()); + .of(Locale.US) + .set(CurrencyStyle.NAME) + .set("pattern", "00000.00 ¤") + .build()); String customFormatted = customFormat.format(oneDollar); assertNotNull(customFormat); diff --git a/core-java/src/test/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorTest.java b/core-java/src/test/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorTest.java index bb446dc3856d..aa11aaa78841 100644 --- a/core-java/src/test/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorTest.java +++ b/core-java/src/test/java/com/baeldung/noclassdeffounderror/NoClassDefFoundErrorTest.java @@ -9,4 +9,4 @@ public void givenInitErrorInClass_whenloadClass_thenNoClassDefFoundError() { NoClassDefFoundErrorExample sample = new NoClassDefFoundErrorExample(); sample.getClassWithInitErrors(); } -} +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/regexp/EscapingCharsTest.java b/core-java/src/test/java/com/baeldung/regexp/EscapingCharsTest.java index f8dbde4c4fb4..47c9cfc62110 100644 --- a/core-java/src/test/java/com/baeldung/regexp/EscapingCharsTest.java +++ b/core-java/src/test/java/com/baeldung/regexp/EscapingCharsTest.java @@ -1,71 +1,73 @@ package com.baeldung.regexp; -import static junit.framework.TestCase.assertEquals; -import static org.junit.Assert.assertThat; -import static org.hamcrest.CoreMatchers.*; +import org.junit.Test; + import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.junit.Test; +import static junit.framework.TestCase.assertEquals; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; public class EscapingCharsTest { @Test public void givenRegexWithDot_whenMatchingStr_thenMatches() { String strInput = "foof"; String strRegex = "foo."; - + assertEquals(true, strInput.matches(strRegex)); } - + @Test public void givenRegexWithDotEsc_whenMatchingStr_thenNotMatching() { String strInput = "foof"; String strRegex = "foo\\."; - + assertEquals(false, strInput.matches(strRegex)); } - + @Test public void givenRegexWithPipeEscaped_whenSplitStr_thenSplits() { String strInput = "foo|bar|hello|world"; String strRegex = "\\Q|\\E"; - + assertEquals(4, strInput.split(strRegex).length); } - + @Test public void givenRegexWithPipeEscQuoteMeth_whenSplitStr_thenSplits() { String strInput = "foo|bar|hello|world"; String strRegex = "|"; - - assertEquals(4,strInput.split(Pattern.quote(strRegex)).length); + + assertEquals(4, strInput.split(Pattern.quote(strRegex)).length); } - + @Test public void givenRegexWithDollar_whenReplacing_thenNotReplace() { String strInput = "I gave $50 to my brother." - + "He bought candy for $35. Now he has $15 left."; + + "He bought candy for $35. Now he has $15 left."; String strRegex = "$"; String strReplacement = "£"; String output = "I gave £50 to my brother." - + "He bought candy for £35. Now he has £15 left."; + + "He bought candy for £35. Now he has £15 left."; Pattern p = Pattern.compile(strRegex); Matcher m = p.matcher(strInput); - + assertThat(output, not(equalTo(m.replaceAll(strReplacement)))); } - + @Test public void givenRegexWithDollarEsc_whenReplacing_thenReplace() { String strInput = "I gave $50 to my brother." - + "He bought candy for $35. Now he has $15 left."; + + "He bought candy for $35. Now he has $15 left."; String strRegex = "\\$"; String strReplacement = "£"; String output = "I gave £50 to my brother." - + "He bought candy for £35. Now he has £15 left."; + + "He bought candy for £35. Now he has £15 left."; Pattern p = Pattern.compile(strRegex); Matcher m = p.matcher(strInput); - - assertEquals(output,m.replaceAll(strReplacement)); + + assertEquals(output, m.replaceAll(strReplacement)); } } diff --git a/core-java/src/test/java/com/baeldung/scripting/NashornUnitTest.java b/core-java/src/test/java/com/baeldung/scripting/NashornUnitTest.java index fe1a7d4bd49b..7f165cec8633 100644 --- a/core-java/src/test/java/com/baeldung/scripting/NashornUnitTest.java +++ b/core-java/src/test/java/com/baeldung/scripting/NashornUnitTest.java @@ -4,7 +4,11 @@ import org.junit.Before; import org.junit.Test; -import javax.script.*; +import javax.script.Bindings; +import javax.script.Invocable; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; import java.io.InputStreamReader; import java.util.List; import java.util.Map; diff --git a/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java b/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java index 748898ff3ed1..dbcdf0ec9d59 100644 --- a/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java +++ b/core-java/src/test/java/com/baeldung/serialization/PersonUnitTest.java @@ -1,6 +1,6 @@ package com.baeldung.serialization; -import static org.junit.Assert.assertTrue; +import org.junit.Test; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -8,57 +8,57 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import org.junit.Test; +import static org.junit.Assert.assertTrue; public class PersonUnitTest { - @Test - public void whenSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { - Person p = new Person(); - p.setAge(20); - p.setName("Joe"); + @Test + public void whenSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { + Person p = new Person(); + p.setAge(20); + p.setName("Joe"); - FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt"); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); - objectOutputStream.writeObject(p); - objectOutputStream.flush(); - objectOutputStream.close(); + FileOutputStream fileOutputStream = new FileOutputStream("yofile.txt"); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + objectOutputStream.writeObject(p); + objectOutputStream.flush(); + objectOutputStream.close(); - FileInputStream fileInputStream = new FileInputStream("yofile.txt"); - ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); - Person p2 = (Person) objectInputStream.readObject(); - objectInputStream.close(); + FileInputStream fileInputStream = new FileInputStream("yofile.txt"); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + Person p2 = (Person) objectInputStream.readObject(); + objectInputStream.close(); - assertTrue(p2.getAge() == p.getAge()); - assertTrue(p2.getName().equals(p.getName())); - } + assertTrue(p2.getAge() == p.getAge()); + assertTrue(p2.getName().equals(p.getName())); + } - @Test - public void whenCustomSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { - Person p = new Person(); - p.setAge(20); - p.setName("Joe"); + @Test + public void whenCustomSerializingAndDeserializing_ThenObjectIsTheSame() throws IOException, ClassNotFoundException { + Person p = new Person(); + p.setAge(20); + p.setName("Joe"); - Address a = new Address(); - a.setHouseNumber(1); + Address a = new Address(); + a.setHouseNumber(1); - Employee e = new Employee(); - e.setPerson(p); - e.setAddress(a); + Employee e = new Employee(); + e.setPerson(p); + e.setAddress(a); - FileOutputStream fileOutputStream = new FileOutputStream("yofile2.txt"); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); - objectOutputStream.writeObject(e); - objectOutputStream.flush(); - objectOutputStream.close(); + FileOutputStream fileOutputStream = new FileOutputStream("yofile2.txt"); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); + objectOutputStream.writeObject(e); + objectOutputStream.flush(); + objectOutputStream.close(); - FileInputStream fileInputStream = new FileInputStream("yofile2.txt"); - ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); - Employee e2 = (Employee) objectInputStream.readObject(); - objectInputStream.close(); + FileInputStream fileInputStream = new FileInputStream("yofile2.txt"); + ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + Employee e2 = (Employee) objectInputStream.readObject(); + objectInputStream.close(); - assertTrue(e2.getPerson().getAge() == e.getPerson().getAge()); - assertTrue(e2.getAddress().getHouseNumber() == (e.getAddress().getHouseNumber())); - } + assertTrue(e2.getPerson().getAge() == e.getPerson().getAge()); + assertTrue(e2.getAddress().getHouseNumber() == (e.getAddress().getHouseNumber())); + } } diff --git a/core-java/src/test/java/com/baeldung/socket/EchoIntegrationTest.java b/core-java/src/test/java/com/baeldung/socket/EchoIntegrationTest.java index 7ac8e0a97afb..2bf6d142bb95 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoIntegrationTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoIntegrationTest.java @@ -1,14 +1,14 @@ package com.baeldung.socket; -import static org.junit.Assert.assertEquals; - -import java.util.concurrent.Executors; - import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import java.util.concurrent.Executors; + +import static org.junit.Assert.assertEquals; + public class EchoIntegrationTest { private static final Integer PORT = 4444; diff --git a/core-java/src/test/java/com/baeldung/stackoverflowerror/CyclicDependancyManualTest.java b/core-java/src/test/java/com/baeldung/stackoverflowerror/CyclicDependancyManualTest.java index 9b867704536c..1f1de9149a2d 100644 --- a/core-java/src/test/java/com/baeldung/stackoverflowerror/CyclicDependancyManualTest.java +++ b/core-java/src/test/java/com/baeldung/stackoverflowerror/CyclicDependancyManualTest.java @@ -1,11 +1,10 @@ package com.baeldung.stackoverflowerror; -import static org.junit.Assert.fail; import org.junit.Test; public class CyclicDependancyManualTest { @Test(expected = StackOverflowError.class) public void whenInstanciatingClassOne_thenThrowsException() { - ClassOne obj = new ClassOne(); + ClassOne obj = new ClassOne(); } } diff --git a/core-java/src/test/java/com/baeldung/stackoverflowerror/InfiniteRecursionWithTerminationConditionManualTest.java b/core-java/src/test/java/com/baeldung/stackoverflowerror/InfiniteRecursionWithTerminationConditionManualTest.java index 996d0e9017db..3530fa1c3e0d 100644 --- a/core-java/src/test/java/com/baeldung/stackoverflowerror/InfiniteRecursionWithTerminationConditionManualTest.java +++ b/core-java/src/test/java/com/baeldung/stackoverflowerror/InfiniteRecursionWithTerminationConditionManualTest.java @@ -1,9 +1,9 @@ package com.baeldung.stackoverflowerror; -import static junit.framework.TestCase.assertEquals; -import static org.junit.Assert.fail; import org.junit.Test; +import static junit.framework.TestCase.assertEquals; + public class InfiniteRecursionWithTerminationConditionManualTest { @Test public void givenPositiveIntNoOne_whenCalcFact_thenCorrectlyCalc() { @@ -23,9 +23,9 @@ public void givenPositiveIntGtOne_whenCalcFact_thenCorrectlyCalc() { @Test(expected = StackOverflowError.class) public void givenNegativeInt_whenCalcFact_thenThrowsException() { - int numToCalcFactorial = -1; - InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition(); + int numToCalcFactorial = -1; + InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition(); - irtc.calculateFactorial(numToCalcFactorial); + irtc.calculateFactorial(numToCalcFactorial); } } diff --git a/core-java/src/test/java/com/baeldung/stackoverflowerror/RecursionWithCorrectTerminationConditionManualTest.java b/core-java/src/test/java/com/baeldung/stackoverflowerror/RecursionWithCorrectTerminationConditionManualTest.java index a4269aef56f0..858cec2ffae4 100644 --- a/core-java/src/test/java/com/baeldung/stackoverflowerror/RecursionWithCorrectTerminationConditionManualTest.java +++ b/core-java/src/test/java/com/baeldung/stackoverflowerror/RecursionWithCorrectTerminationConditionManualTest.java @@ -1,9 +1,9 @@ package com.baeldung.stackoverflowerror; -import static junit.framework.TestCase.assertEquals; - import org.junit.Test; +import static junit.framework.TestCase.assertEquals; + public class RecursionWithCorrectTerminationConditionManualTest { @Test public void givenNegativeInt_whenCalcFact_thenCorrectlyCalc() { diff --git a/core-java/src/test/java/com/baeldung/stackoverflowerror/UnintendedInfiniteRecursionManualTest.java b/core-java/src/test/java/com/baeldung/stackoverflowerror/UnintendedInfiniteRecursionManualTest.java index 65126efff20f..1e1c245d4dab 100644 --- a/core-java/src/test/java/com/baeldung/stackoverflowerror/UnintendedInfiniteRecursionManualTest.java +++ b/core-java/src/test/java/com/baeldung/stackoverflowerror/UnintendedInfiniteRecursionManualTest.java @@ -6,25 +6,25 @@ public class UnintendedInfiniteRecursionManualTest { @Test(expected = StackOverflowError.class) public void givenPositiveIntNoOne_whenCalFact_thenThrowsException() { - int numToCalcFactorial= 1; + int numToCalcFactorial = 1; UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion(); - + uir.calculateFactorial(numToCalcFactorial); } - + @Test(expected = StackOverflowError.class) public void givenPositiveIntGtOne_whenCalcFact_thenThrowsException() { - int numToCalcFactorial= 2; + int numToCalcFactorial = 2; UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion(); - + uir.calculateFactorial(numToCalcFactorial); } - + @Test(expected = StackOverflowError.class) public void givenNegativeInt_whenCalcFact_thenThrowsException() { - int numToCalcFactorial= -1; + int numToCalcFactorial = -1; UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion(); - + uir.calculateFactorial(numToCalcFactorial); } } diff --git a/core-java/src/test/java/com/baeldung/strategy/StrategyDesignPatternUnitTest.java b/core-java/src/test/java/com/baeldung/strategy/StrategyDesignPatternUnitTest.java index 7ca1d000be5c..2238012e20a3 100644 --- a/core-java/src/test/java/com/baeldung/strategy/StrategyDesignPatternUnitTest.java +++ b/core-java/src/test/java/com/baeldung/strategy/StrategyDesignPatternUnitTest.java @@ -7,7 +7,9 @@ import java.util.List; import java.util.function.Function; -import static com.baeldung.strategy.Discounter.*; +import static com.baeldung.strategy.Discounter.christmas; +import static com.baeldung.strategy.Discounter.easter; +import static com.baeldung.strategy.Discounter.newYear; import static org.assertj.core.api.Assertions.assertThat; public class StrategyDesignPatternUnitTest { @@ -26,7 +28,7 @@ public void shouldDivideByTwo_WhenApplyingStaffDiscounter() { public void shouldDivideByTwo_WhenApplyingStaffDiscounterWithAnonyousTypes() { Discounter staffDiscounter = new Discounter() { @Override - public BigDecimal apply( BigDecimal amount) { + public BigDecimal apply(BigDecimal amount) { return amount.multiply(BigDecimal.valueOf(0.5)); } }; diff --git a/core-java/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java b/core-java/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java index fa482b8dfe08..84c8992557a4 100644 --- a/core-java/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java +++ b/core-java/src/test/java/com/baeldung/stream/InfiniteStreamUnitTest.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.List; -import java.util.Random; import java.util.UUID; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -22,8 +21,8 @@ public void givenInfiniteStream_whenUseIntermediateLimitMethod_thenShouldTermina //when List collect = infiniteStream - .limit(10) - .collect(Collectors.toList()); + .limit(10) + .collect(Collectors.toList()); //then assertEquals(collect, Arrays.asList(0, 2, 4, 6, 8, 10, 12, 14, 16, 18)); @@ -37,9 +36,9 @@ public void givenInfiniteStreamOfRandomInts_whenUseLimit_shouldTerminateInFinite //when List randomInts = infiniteStreamOfRandomUUID - .skip(10) - .limit(10) - .collect(Collectors.toList()); + .skip(10) + .limit(10) + .collect(Collectors.toList()); //then assertEquals(randomInts.size(), 10); diff --git a/core-java/src/test/java/com/baeldung/stream/StreamAddUnitTest.java b/core-java/src/test/java/com/baeldung/stream/StreamAddUnitTest.java index 8176d6a60c47..d0745b8bc961 100644 --- a/core-java/src/test/java/com/baeldung/stream/StreamAddUnitTest.java +++ b/core-java/src/test/java/com/baeldung/stream/StreamAddUnitTest.java @@ -1,10 +1,12 @@ package com.baeldung.stream; +import org.junit.Test; + import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; + import static org.junit.Assert.assertEquals; -import org.junit.Test; public class StreamAddUnitTest { @@ -25,7 +27,7 @@ public void givenStream_whenPrependingObject_thenPrepended() { Stream newStream = Stream.concat(Stream.of(99), anStream); assertEquals(newStream.findFirst() - .get(), (Integer) 99); + .get(), (Integer) 99); } @Test @@ -38,7 +40,7 @@ public void givenStream_whenInsertingObject_thenInserted() { assertEquals(resultList.get(3), (Double) 9.9); } - public Stream insertInStream(Stream stream, T elem, int index) { + private Stream insertInStream(Stream stream, T elem, int index) { List result = stream.collect(Collectors.toList()); result.add(index, elem); return result.stream(); diff --git a/core-java/src/test/java/com/baeldung/stream/StreamApiTest.java b/core-java/src/test/java/com/baeldung/stream/StreamApiTest.java index 68b5fc83a5fb..f4d0ac6b0834 100644 --- a/core-java/src/test/java/com/baeldung/stream/StreamApiTest.java +++ b/core-java/src/test/java/com/baeldung/stream/StreamApiTest.java @@ -20,13 +20,13 @@ public void givenList_whenGetLastElementUsingReduce_thenReturnLastElement() { assertEquals("Sean", last); } - + @Test public void givenInfiniteStream_whenGetInfiniteStreamLastElementUsingReduce_thenReturnLastElement() { int last = StreamApi.getInfiniteStreamLastElementUsingReduce(); assertEquals(19, last); } - + @Test public void givenListAndCount_whenGetLastElementUsingSkip_thenReturnLastElement() { List valueList = new ArrayList<>(); diff --git a/core-java/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java b/core-java/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java index d58c1026d00e..8901bcf9dbcc 100644 --- a/core-java/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java +++ b/core-java/src/test/java/com/baeldung/string/JoinerSplitterUnitTest.java @@ -1,68 +1,66 @@ package com.baeldung.string; -import static org.junit.Assert.*; +import org.junit.Test; import java.util.ArrayList; import java.util.List; -import org.junit.Test; - -import com.baeldung.string.JoinerSplitter; +import static org.junit.Assert.assertEquals; public class JoinerSplitterUnitTest { - @Test - public void provided_array_convert_to_stream_and_convert_to_string() { - - String[] programming_languages = {"java", "python", "nodejs", "ruby"}; - - String expectation = "java,python,nodejs,ruby"; - - String result = JoinerSplitter.join(programming_languages); - assertEquals(result, expectation); - } - - @Test - public void givenArray_transformedToStream_convertToPrefixPostfixString() { - - String[] programming_languages = {"java", "python", - "nodejs", "ruby"}; - String expectation = "[java,python,nodejs,ruby]"; - - String result = JoinerSplitter.joinWithPrefixPostFix(programming_languages); - assertEquals(result, expectation); - } - - @Test - public void givenString_transformedToStream_convertToList() { - - String programming_languages = "java,python,nodejs,ruby"; - - List expectation = new ArrayList(); - expectation.add("java"); - expectation.add("python"); - expectation.add("nodejs"); - expectation.add("ruby"); - - List result = JoinerSplitter.split(programming_languages); - - assertEquals(result, expectation); - } - - @Test - public void givenString_transformedToStream_convertToListOfChar() { - - String programming_languages = "java,python,nodejs,ruby"; - - List expectation = new ArrayList(); - char[] charArray = programming_languages.toCharArray(); - for (char c : charArray) { - expectation.add(c); - } - - List result = JoinerSplitter.splitToListOfChar(programming_languages); - assertEquals(result, expectation); - - } - + @Test + public void provided_array_convert_to_stream_and_convert_to_string() { + + String[] programming_languages = {"java", "python", "nodejs", "ruby"}; + + String expectation = "java,python,nodejs,ruby"; + + String result = JoinerSplitter.join(programming_languages); + assertEquals(result, expectation); + } + + @Test + public void givenArray_transformedToStream_convertToPrefixPostfixString() { + + String[] programming_languages = {"java", "python", + "nodejs", "ruby"}; + String expectation = "[java,python,nodejs,ruby]"; + + String result = JoinerSplitter.joinWithPrefixPostFix(programming_languages); + assertEquals(result, expectation); + } + + @Test + public void givenString_transformedToStream_convertToList() { + + String programming_languages = "java,python,nodejs,ruby"; + + List expectation = new ArrayList(); + expectation.add("java"); + expectation.add("python"); + expectation.add("nodejs"); + expectation.add("ruby"); + + List result = JoinerSplitter.split(programming_languages); + + assertEquals(result, expectation); + } + + @Test + public void givenString_transformedToStream_convertToListOfChar() { + + String programming_languages = "java,python,nodejs,ruby"; + + List expectation = new ArrayList(); + char[] charArray = programming_languages.toCharArray(); + for (char c : charArray) { + expectation.add(c); + } + + List result = JoinerSplitter.splitToListOfChar(programming_languages); + assertEquals(result, expectation); + + } + } diff --git a/core-java/src/test/java/com/baeldung/string/SplitUnitTest.java b/core-java/src/test/java/com/baeldung/string/SplitUnitTest.java index 5d8703db1a7e..83fd253b97b1 100644 --- a/core-java/src/test/java/com/baeldung/string/SplitUnitTest.java +++ b/core-java/src/test/java/com/baeldung/string/SplitUnitTest.java @@ -2,7 +2,6 @@ import com.google.common.base.Splitter; import org.apache.commons.lang.StringUtils; -import org.assertj.core.util.Lists; import org.junit.Test; import java.util.List; diff --git a/core-java/src/test/java/com/baeldung/string/StringHelperUnitTest.java b/core-java/src/test/java/com/baeldung/string/StringHelperUnitTest.java index 427f02ba1652..917ed1c93760 100644 --- a/core-java/src/test/java/com/baeldung/string/StringHelperUnitTest.java +++ b/core-java/src/test/java/com/baeldung/string/StringHelperUnitTest.java @@ -1,10 +1,11 @@ package com.baeldung.string; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import org.apache.commons.lang3.StringUtils; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + public class StringHelperUnitTest { public static final String TEST_STRING = "abcdef"; @@ -67,7 +68,7 @@ public void givenStringWithWhiteSpaceAtTheEnd_whenSubstring_thenGetStringWithout assertEquals("abc", StringHelper.removeLastCharOptional(WHITE_SPACE_AT_THE_END_STRING)); assertEquals("abc", StringHelper.removeLastCharRegexOptional(WHITE_SPACE_AT_THE_END_STRING)); } - + @Test public void givenStringWithNewLineAtTheEnd_whenSubstring_thenGetStringWithoutNewLine() { assertEquals("abc", StringHelper.removeLastChar(NEW_LINE_AT_THE_END_STRING)); @@ -78,7 +79,7 @@ public void givenStringWithNewLineAtTheEnd_whenSubstring_thenGetStringWithoutNew assertEquals("abc", StringHelper.removeLastCharOptional(NEW_LINE_AT_THE_END_STRING)); assertNotEquals("abc", StringHelper.removeLastCharRegexOptional(NEW_LINE_AT_THE_END_STRING)); } - + @Test public void givenMultiLineString_whenSubstring_thenGetStringWithoutNewLine() { assertEquals("abc\nde", StringHelper.removeLastChar(MULTIPLE_LINES_STRING)); diff --git a/core-java/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterTest.java b/core-java/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterTest.java new file mode 100644 index 000000000000..ad8de82e1fc8 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/temporaladjusters/CustomTemporalAdjusterTest.java @@ -0,0 +1,44 @@ +package com.baeldung.temporaladjusters; + +import com.baeldung.temporaladjuster.CustomTemporalAdjuster; +import org.junit.Assert; +import org.junit.Test; + +import java.time.LocalDate; +import java.time.Period; +import java.time.temporal.TemporalAdjuster; + +import static org.junit.Assert.assertEquals; + +public class CustomTemporalAdjusterTest { + + private static final TemporalAdjuster NEXT_WORKING_DAY = new CustomTemporalAdjuster(); + + @Test + public void whenAdjustAndImplementInterface_thenNextWorkingDay() { + LocalDate localDate = LocalDate.of(2017, 07, 8); + CustomTemporalAdjuster temporalAdjuster = new CustomTemporalAdjuster(); + LocalDate nextWorkingDay = localDate.with(temporalAdjuster); + + assertEquals("2017-07-10", nextWorkingDay.toString()); + } + + @Test + public void whenAdjust_thenNextWorkingDay() { + LocalDate localDate = LocalDate.of(2017, 07, 8); + LocalDate date = localDate.with(NEXT_WORKING_DAY); + + assertEquals("2017-07-10", date.toString()); + } + + @Test + public void whenAdjust_thenFourteenDaysAfterDate() { + LocalDate localDate = LocalDate.of(2017, 07, 8); + TemporalAdjuster temporalAdjuster = (t) -> t.plus(Period.ofDays(14)); + LocalDate result = localDate.with(temporalAdjuster); + + String fourteenDaysAfterDate = "2017-07-22"; + + assertEquals(fourteenDaysAfterDate, result.toString()); + } +} diff --git a/core-java/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersTest.java b/core-java/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersTest.java new file mode 100644 index 000000000000..d06da5a7827d --- /dev/null +++ b/core-java/src/test/java/com/baeldung/temporaladjusters/TemporalAdjustersTest.java @@ -0,0 +1,22 @@ +package com.baeldung.temporaladjusters; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; + +import org.junit.Assert; +import org.junit.Test; + +public class TemporalAdjustersTest { + + @Test + public void whenAdjust_thenNextSunday() { + LocalDate localDate = LocalDate.of(2017, 07, 8); + LocalDate nextSunday = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); + + String expected = "2017-07-09"; + + Assert.assertEquals(expected, nextSunday.toString()); + } + +} diff --git a/core-java/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java b/core-java/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java new file mode 100644 index 000000000000..060f17726544 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.typeerasure; + +import org.junit.Test; + +public class TypeErasureUnitTest { + + @Test(expected = ClassCastException.class) + public void givenIntegerStack_whenStringPushedAndAssignPoppedValueToInteger_shouldFail() { + IntegerStack integerStack = new IntegerStack(5); + Stack stack = integerStack; + stack.push("Hello"); + Integer data = integerStack.pop(); + } + + @Test + public void givenAnyArray_whenInvokedPrintArray_shouldSucceed() { + Integer[] scores = new Integer[] { 100, 200, 10, 99, 20 }; + ArrayContentPrintUtil.printArray(scores); + } + +} diff --git a/core-java/src/test/java/com/baeldung/unsafe/OffHeapArray.java b/core-java/src/test/java/com/baeldung/unsafe/OffHeapArray.java index f5cab88f3d2e..2f18c38bc7dc 100644 --- a/core-java/src/test/java/com/baeldung/unsafe/OffHeapArray.java +++ b/core-java/src/test/java/com/baeldung/unsafe/OffHeapArray.java @@ -15,7 +15,7 @@ private Unsafe getUnsafe() throws IllegalAccessException, NoSuchFieldException { return (Unsafe) f.get(null); } - public OffHeapArray(long size) throws NoSuchFieldException, IllegalAccessException { + OffHeapArray(long size) throws NoSuchFieldException, IllegalAccessException { this.size = size; address = getUnsafe().allocateMemory(size * BYTE); } @@ -32,7 +32,7 @@ public long size() { return size; } - public void freeMemory() throws NoSuchFieldException, IllegalAccessException { + void freeMemory() throws NoSuchFieldException, IllegalAccessException { getUnsafe().freeMemory(address); } diff --git a/ejb/README.md b/ejb/README.md index 08392bc80db2..3b729318d461 100644 --- a/ejb/README.md +++ b/ejb/README.md @@ -1,3 +1,4 @@ ## Relevant articles: - [Guide to EJB Set-up](http://www.baeldung.com/ejb-intro) +- [Java EE Session Beans](http://www.baeldung.com/ejb-session-beans) diff --git a/guava/README.md b/guava/README.md index 56d282560bd8..7ab70cb01ffa 100644 --- a/guava/README.md +++ b/guava/README.md @@ -28,3 +28,4 @@ - [Guide to Guava ClassToInstanceMap](http://www.baeldung.com/guava-class-to-instance-map) - [Guide to Guava MinMaxPriorityQueue and EvictingQueue](http://www.baeldung.com/guava-minmax-priority-queue-and-evicting-queue) - [Guide to Mathematical Utilities in Guava](http://www.baeldung.com/guava-math) +- [Bloom Filter in Java using Guava](http://www.baeldung.com/guava-bloom-filter) diff --git a/guava/src/main/java/org/baeldung/guava/CustomEvent.java b/guava/src/main/java/org/baeldung/guava/CustomEvent.java index 2d5c3382d441..8534d7da1c8e 100644 --- a/guava/src/main/java/org/baeldung/guava/CustomEvent.java +++ b/guava/src/main/java/org/baeldung/guava/CustomEvent.java @@ -3,11 +3,11 @@ public class CustomEvent { private String action; - public CustomEvent(String action) { + CustomEvent(String action) { this.action = action; } - public String getAction() { + String getAction() { return action; } diff --git a/guava/src/main/java/org/baeldung/guava/EventListener.java b/guava/src/main/java/org/baeldung/guava/EventListener.java index 438fcade631e..60beebeea51a 100644 --- a/guava/src/main/java/org/baeldung/guava/EventListener.java +++ b/guava/src/main/java/org/baeldung/guava/EventListener.java @@ -28,11 +28,11 @@ public void handleDeadEvent(DeadEvent deadEvent) { eventsHandled++; } - public int getEventsHandled() { + int getEventsHandled() { return eventsHandled; } - public void resetEventsHandled() { + void resetEventsHandled() { eventsHandled = 0; } } diff --git a/guava/src/test/java/org/baeldung/guava/BloomFilterTest.java b/guava/src/test/java/org/baeldung/guava/BloomFilterTest.java new file mode 100644 index 000000000000..d7c25b7c8de1 --- /dev/null +++ b/guava/src/test/java/org/baeldung/guava/BloomFilterTest.java @@ -0,0 +1,54 @@ +package org.baeldung.guava; + + +import com.google.common.hash.BloomFilter; +import com.google.common.hash.Funnels; +import org.junit.Test; + +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class BloomFilterTest { + + @Test + public void givenBloomFilter_whenAddNStringsToIt_thenShouldNotReturnAnyFalsePositive() { + //when + BloomFilter filter = BloomFilter.create( + Funnels.integerFunnel(), + 500, + 0.01); + + //when + filter.put(1); + filter.put(2); + filter.put(3); + + //then + // the probability that it returns true, but is actually false is 1% + assertThat(filter.mightContain(1)).isTrue(); + assertThat(filter.mightContain(2)).isTrue(); + assertThat(filter.mightContain(3)).isTrue(); + + assertThat(filter.mightContain(100)).isFalse(); + } + + @Test + public void givenBloomFilter_whenAddNStringsToItMoreThanDefinedExpectedInsertions_thenItWillReturnTrueForAlmostAllElements() { + //when + BloomFilter filter = BloomFilter.create( + Funnels.integerFunnel(), + 5, + 0.01); + + //when + IntStream.range(0, 100_000).forEach(filter::put); + + + //then + assertThat(filter.mightContain(1)).isTrue(); + assertThat(filter.mightContain(2)).isTrue(); + assertThat(filter.mightContain(3)).isTrue(); + assertThat(filter.mightContain(1_000_000)).isTrue(); + } +} diff --git a/guava/src/test/java/org/baeldung/guava/RateLimiterLongRunningUnitTest.java b/guava/src/test/java/org/baeldung/guava/RateLimiterLongRunningUnitTest.java new file mode 100644 index 000000000000..914de01a6d2a --- /dev/null +++ b/guava/src/test/java/org/baeldung/guava/RateLimiterLongRunningUnitTest.java @@ -0,0 +1,82 @@ +package org.baeldung.guava; + + +import com.google.common.util.concurrent.RateLimiter; +import org.junit.Test; + +import java.time.ZonedDateTime; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RateLimiterLongRunningUnitTest { + + @Test + public void givenLimitedResource_whenUseRateLimiter_thenShouldLimitPermits() { + //given + RateLimiter rateLimiter = RateLimiter.create(100); + + //when + long startTime = ZonedDateTime.now().getSecond(); + IntStream.range(0, 1000).forEach(i -> { + rateLimiter.acquire(); + doSomeLimitedOperation(); + }); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds >= 10); + } + + @Test + public void givenLimitedResource_whenRequestTwice_thenShouldPermitWithoutBlocking() { + //given + RateLimiter rateLimiter = RateLimiter.create(2); + + //when + long startTime = ZonedDateTime.now().getSecond(); + rateLimiter.acquire(1); + doSomeLimitedOperation(); + rateLimiter.acquire(1); + doSomeLimitedOperation(); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds <= 1); + } + + @Test + public void givenLimitedResource_whenRequestOnce_thenShouldPermitWithoutBlocking() { + //given + RateLimiter rateLimiter = RateLimiter.create(100); + + //when + long startTime = ZonedDateTime.now().getSecond(); + rateLimiter.acquire(100); + doSomeLimitedOperation(); + long elapsedTimeSeconds = ZonedDateTime.now().getSecond() - startTime; + + //then + assertThat(elapsedTimeSeconds <= 1); + } + + @Test + public void givenLimitedResource_whenTryAcquire_shouldNotBlockIndefinitely() { + //given + RateLimiter rateLimiter = RateLimiter.create(1); + + //when + rateLimiter.acquire(); + boolean result = rateLimiter.tryAcquire(2, 10, TimeUnit.MILLISECONDS); + + //then + assertThat(result).isFalse(); + + } + + private void doSomeLimitedOperation() { + //some computing + } + +} diff --git a/guava21/pom.xml b/guava21/pom.xml index d6e556e4a06c..930def2a6721 100644 --- a/guava21/pom.xml +++ b/guava21/pom.xml @@ -4,8 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.guava - tutorial + guava21 1.0-SNAPSHOT @@ -15,12 +14,17 @@ - com.google.guava guava 21.0 + + + org.jooq + jool + 0.9.12 + diff --git a/guava21/src/test/java/com.baeldung.guava.zip/ZipCollectionTest.java b/guava21/src/test/java/com.baeldung.guava.zip/ZipCollectionTest.java new file mode 100644 index 000000000000..866e09c6a0b1 --- /dev/null +++ b/guava21/src/test/java/com.baeldung.guava.zip/ZipCollectionTest.java @@ -0,0 +1,85 @@ +package com.baeldung.guava.zip; + +import com.google.common.collect.Streams; +import org.jooq.lambda.Seq; +import org.jooq.lambda.tuple.Tuple2; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static org.junit.Assert.assertEquals; + +public class ZipCollectionTest { + + private List names; + private List ages; + private List expectedOutput; + + @Before + public void setUp() throws Exception { + names = Arrays.asList("John", "Jane", "Jack", "Dennis"); + ages = Arrays.asList(24, 25, 27); + expectedOutput = Arrays.asList("John:24", "Jane:25", "Jack:27"); + } + + @Test + public void zipCollectionUsingGuava21() { + List output = Streams + .zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age) + .collect(Collectors.toList()); + + assertEquals(output, expectedOutput); + } + + @Test + public void zipCollectionUsingIntStream() { + List output = IntStream + .range(0, Math.min(names.size(), ages.size())) + .mapToObj(i -> names.get(i) + ":" + ages.get(i)) + .collect(Collectors.toList()); + + assertEquals(output, expectedOutput); + } + + @Test + public void zipCollectionUsingJool() { + Seq output = Seq + .of("John", "Jane", "Jack") + .zip(Seq.of(24, 25, 27), (x, y) -> x + ":" + y); + + assertEquals(output.toList(), expectedOutput); + } + + @Test + public void zipCollectionUsingJoolTuple() { + Seq> output = Seq + .of("John", "Jane", "Dennis") + .zip(Seq.of(24, 25, 27)); + + Tuple2 element1 = new Tuple2("John", 24); + Tuple2 element2 = new Tuple2("Jane", 25); + Tuple2 element3 = new Tuple2("Dennis", 27); + + List expectedOutput = Arrays.asList(element1, element2, element3); + assertEquals(output.collect(Collectors.toList()), expectedOutput); + } + + @Test + public void zipCollectionUsingJoolWithIndex() { + Seq> output = Seq + .of("John", "Jane", "Dennis") + .zipWithIndex(); + + Tuple2 element1 = new Tuple2<>("John", 0L); + Tuple2 element2 = new Tuple2<>("Jane", 1L); + Tuple2 element3 = new Tuple2<>("Dennis", 2L); + + List expectedOutput = Arrays.asList(element1, element2, element3); + assertEquals(output.collect(Collectors.toList()), expectedOutput); + } + +} \ No newline at end of file diff --git a/guava21/src/test/java/AtomicLongMapIntegrationTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/AtomicLongMapIntegrationTest.java similarity index 97% rename from guava21/src/test/java/AtomicLongMapIntegrationTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/AtomicLongMapIntegrationTest.java index 9024329a56e0..273683710c69 100644 --- a/guava21/src/test/java/AtomicLongMapIntegrationTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/AtomicLongMapIntegrationTest.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import com.google.common.util.concurrent.AtomicLongMap; import org.junit.Test; diff --git a/guava21/src/test/java/ComparatorsUnitTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/ComparatorsUnitTest.java similarity index 98% rename from guava21/src/test/java/ComparatorsUnitTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/ComparatorsUnitTest.java index 3d1f2e9e81ae..0183e6cf3ac6 100644 --- a/guava21/src/test/java/ComparatorsUnitTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/ComparatorsUnitTest.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import com.google.common.collect.Comparators; import org.junit.Assert; import org.junit.Test; diff --git a/guava21/src/test/java/GuavaStreamsUnitTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/GuavaStreamsUnitTest.java similarity index 50% rename from guava21/src/test/java/GuavaStreamsUnitTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/GuavaStreamsUnitTest.java index 96b4a2ffdbb4..3d3163cba6ae 100644 --- a/guava21/src/test/java/GuavaStreamsUnitTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/GuavaStreamsUnitTest.java @@ -1,21 +1,33 @@ +package com.baeldung.guava.tutorial; + import com.google.common.collect.Streams; -import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import java.util.*; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; +import java.util.OptionalDouble; +import java.util.OptionalInt; +import java.util.OptionalLong; +import java.util.stream.Collectors; import java.util.stream.DoubleStream; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; +import static com.baeldung.guava.tutorial.StreamUtility.assertStreamEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + public class GuavaStreamsUnitTest { - List numbers; + private List numbers; @Before public void setUp() { - numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20); + numbers = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList()); } @Test @@ -24,17 +36,17 @@ public void createStreamsWithCollection() { Stream streamFromCollection = Streams.stream(numbers); //Assert.assertNotNull(streamFromCollection); - StreamUtility.assertStreamEquals(streamFromCollection, numbers.stream()); + assertStreamEquals(streamFromCollection, numbers.stream()); } @Test public void createStreamsWithIterable() { - Iterable numbersIterable = (Iterable) numbers; + Iterable numbersIterable = numbers; Stream streamFromIterable = Streams.stream(numbersIterable); - Assert.assertNotNull(streamFromIterable); - StreamUtility.assertStreamEquals(streamFromIterable, numbers.stream()); + assertNotNull(streamFromIterable); + assertStreamEquals(streamFromIterable, numbers.stream()); } @Test @@ -43,8 +55,8 @@ public void createStreamsWithIterator() { Stream streamFromIterator = Streams.stream(numbersIterator); - Assert.assertNotNull(streamFromIterator); - StreamUtility.assertStreamEquals(streamFromIterator, numbers.stream()); + assertNotNull(streamFromIterator); + assertStreamEquals(streamFromIterator, numbers.stream()); } @Test @@ -52,8 +64,8 @@ public void createStreamsWithOptional() { Stream streamFromOptional = Streams.stream(Optional.of(1)); - Assert.assertNotNull(streamFromOptional); - Assert.assertEquals(streamFromOptional.count(), 1); + assertNotNull(streamFromOptional); + assertEquals(streamFromOptional.count(), 1); } @Test @@ -61,8 +73,8 @@ public void createStreamsWithOptionalLong() { LongStream streamFromOptionalLong = Streams.stream(OptionalLong.of(1)); - Assert.assertNotNull(streamFromOptionalLong); - Assert.assertEquals(streamFromOptionalLong.count(), 1); + assertNotNull(streamFromOptionalLong); + assertEquals(streamFromOptionalLong.count(), 1); } @Test @@ -71,7 +83,7 @@ public void createStreamsWithOptionalInt() { IntStream streamFromOptionalInt = Streams.stream(OptionalInt.of(1)); //Assert.assertNotNull(streamFromOptionalInt); - Assert.assertEquals(streamFromOptionalInt.count(), 1); + assertEquals(streamFromOptionalInt.count(), 1); } @Test @@ -80,63 +92,54 @@ public void createStreamsWithOptionalDouble() { DoubleStream streamFromOptionalDouble = Streams.stream(OptionalDouble.of(1.0)); //Assert.assertNotNull(streamFromOptionalDouble); - Assert.assertEquals(streamFromOptionalDouble.count(), 1); + assertEquals(streamFromOptionalDouble.count(), 1); } @Test public void concatStreamsOfSameType() { - Stream oddNumbers = Arrays - .asList(1, 3, 5, 7, 9, 11, 13, 15, 17, 19) - .stream(); - Stream evenNumbers = Arrays - .asList(2, 4, 6, 8, 10, 12, 14, 16, 18, 20) - .stream(); + List oddNumbers = Arrays + .asList(1, 3, 5, 7, 9, 11, 13, 15, 17, 19); + List evenNumbers = Arrays + .asList(2, 4, 6, 8, 10, 12, 14, 16, 18, 20); - Stream combinedStreams = Streams.concat(oddNumbers, evenNumbers); + Stream combinedStreams = Streams.concat(oddNumbers.stream(), evenNumbers.stream()); //Assert.assertNotNull(combinedStreams); - StreamUtility.assertStreamEquals(combinedStreams, Stream.concat(oddNumbers, evenNumbers)); + assertStreamEquals(combinedStreams, Stream.concat(oddNumbers.stream(), evenNumbers.stream())); } @Test public void concatStreamsOfTypeLongStream() { - LongStream firstTwenty = LongStream.range(1, 20); - LongStream nextTwenty = LongStream.range(21, 40); + LongStream combinedStreams = Streams.concat(LongStream.range(1, 21), LongStream.range(21, 40)); - LongStream combinedStreams = Streams.concat(firstTwenty, nextTwenty); - - Assert.assertNotNull(combinedStreams); - StreamUtility.assertStreamEquals(combinedStreams, LongStream.concat(firstTwenty, nextTwenty)); + assertNotNull(combinedStreams); + assertStreamEquals(combinedStreams, LongStream.range(1, 40)); } @Test public void concatStreamsOfTypeIntStream() { - IntStream firstTwenty = IntStream.range(1, 20); - IntStream nextTwenty = IntStream.range(21, 40); - - IntStream combinedStreams = Streams.concat(firstTwenty, nextTwenty); + IntStream combinedStreams = Streams.concat(IntStream.range(1, 20), IntStream.range(21, 40)); - Assert.assertNotNull(combinedStreams); - StreamUtility.assertStreamEquals(combinedStreams, IntStream.concat(firstTwenty, nextTwenty)); + assertNotNull(combinedStreams); + assertStreamEquals(combinedStreams, IntStream.concat(IntStream.range(1, 20), IntStream.range(21, 40))); } @Test public void findLastOfStream() { Optional lastElement = Streams.findLast(numbers.stream()); - Assert.assertNotNull(lastElement.get()); - Assert.assertEquals(lastElement.get(), numbers.get(20)); + assertEquals(lastElement.get(), numbers.get(19)); } @Test public void mapWithIndexTest() { - Stream stringSream = Stream.of("a", "b", "c"); + Stream stringStream = Stream.of("a", "b", "c"); - Stream mappedStream = Streams.mapWithIndex(stringSream, (str, index) -> str + ":" + index); + Stream mappedStream = Streams.mapWithIndex(stringStream, (str, index) -> str + ":" + index); //Assert.assertNotNull(mappedStream); - Assert.assertEquals(mappedStream + assertEquals(mappedStream .findFirst() .get(), "a:0"); @@ -144,12 +147,12 @@ public void mapWithIndexTest() { @Test public void streamsZipTest() { - Stream stringSream = Stream.of("a", "b", "c"); - Stream intStream = Stream.of(1, 2, 3); + Stream stringSream = Stream.of("a", "b", "c"); + Stream intStream = Stream.of(1, 2, 3); Stream mappedStream = Streams.zip(stringSream, intStream, (str, index) -> str + ":" + index); //Assert.assertNotNull(mappedStream); - Assert.assertEquals(mappedStream + assertEquals(mappedStream .findFirst() .get(), "a:1"); diff --git a/guava21/src/test/java/InternBuilderUnitTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/InternBuilderUnitTest.java similarity index 91% rename from guava21/src/test/java/InternBuilderUnitTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/InternBuilderUnitTest.java index 183e3eeb43d6..13d8f5f3b78e 100644 --- a/guava21/src/test/java/InternBuilderUnitTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/InternBuilderUnitTest.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import com.google.common.collect.Interner; import com.google.common.collect.Interners; import org.junit.Assert; diff --git a/guava21/src/test/java/MonitorUnitTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/MonitorUnitTest.java similarity index 97% rename from guava21/src/test/java/MonitorUnitTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/MonitorUnitTest.java index e29d4a1eeb42..a3a9a4f838ff 100644 --- a/guava21/src/test/java/MonitorUnitTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/MonitorUnitTest.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import com.google.common.util.concurrent.Monitor; import org.junit.Assert; import org.junit.Test; diff --git a/guava21/src/test/java/MoreCollectorsUnitTest.java b/guava21/src/test/java/com/baeldung/guava/tutorial/MoreCollectorsUnitTest.java similarity index 95% rename from guava21/src/test/java/MoreCollectorsUnitTest.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/MoreCollectorsUnitTest.java index 5950997788eb..acd03022d2d4 100644 --- a/guava21/src/test/java/MoreCollectorsUnitTest.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/MoreCollectorsUnitTest.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import com.google.common.collect.MoreCollectors; import org.junit.Assert; import org.junit.Test; diff --git a/guava21/src/test/java/StreamUtility.java b/guava21/src/test/java/com/baeldung/guava/tutorial/StreamUtility.java similarity index 97% rename from guava21/src/test/java/StreamUtility.java rename to guava21/src/test/java/com/baeldung/guava/tutorial/StreamUtility.java index 1eb866fb88df..b730fbf5589c 100644 --- a/guava21/src/test/java/StreamUtility.java +++ b/guava21/src/test/java/com/baeldung/guava/tutorial/StreamUtility.java @@ -1,3 +1,5 @@ +package com.baeldung.guava.tutorial; + import org.junit.Assert; import java.util.Iterator; diff --git a/guest/memory-leaks/src/test/java/com/baeldung/MemoryLeaksTest.java b/guest/memory-leaks/src/test/java/com/baeldung/MemoryLeaksTest.java index dd9926637628..a8a094b4dbd8 100644 --- a/guest/memory-leaks/src/test/java/com/baeldung/MemoryLeaksTest.java +++ b/guest/memory-leaks/src/test/java/com/baeldung/MemoryLeaksTest.java @@ -34,6 +34,7 @@ // for (int i = 0; i < 1000000; i++) { // list.add(random.nextDouble()); // } +// System.gc(); // Thread.sleep(10000); //to allow GC do its job // } // @@ -54,11 +55,13 @@ // // @SuppressWarnings({ "resource" }) // @Test(expected = OutOfMemoryError.class) -// public void givenLengthString_whenIntern_thenOutOfMemory() throws IOException { +// public void givenLengthString_whenIntern_thenOutOfMemory() throws IOException, InterruptedException { +// Thread.sleep(15000); // String str = new Scanner(new File("src/test/resources/large.txt"), "UTF-8").useDelimiter("\\A") // .next(); +// System.gc(); // str.intern(); -// System.out.println("Done"); +// Thread.sleep(10000); // } // // @Test(expected = OutOfMemoryError.class) diff --git a/httpclient/pom.xml b/httpclient/pom.xml index 562b3e9bcd17..b7567e0c4be4 100644 --- a/httpclient/pom.xml +++ b/httpclient/pom.xml @@ -147,7 +147,7 @@ 2.5.1 4.4.5 - 4.5.2 + 4.5.3 1.6.1 diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java index f2086f2633a7..d39697c0a9db 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java @@ -101,12 +101,7 @@ public void whenUseProxyWithHttpClient_thenCorrect() throws Exception { @Test public void whenUseSSLWithHttpAsyncClient_thenCorrect() throws Exception { - final TrustStrategy acceptingTrustStrategy = new TrustStrategy() { - @Override - public final boolean isTrusted(final X509Certificate[] certificate, final String authType) { - return true; - } - }; + final TrustStrategy acceptingTrustStrategy = (certificate, authType) -> true; final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); final CloseableHttpAsyncClient client = HttpAsyncClients.custom().setSSLHostnameVerifier(SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER).setSSLContext(sslContext).build(); @@ -160,7 +155,7 @@ static class GetThread extends Thread { private final HttpContext context; private final HttpGet request; - public GetThread(final CloseableHttpAsyncClient client, final HttpGet request) { + GetThread(final CloseableHttpAsyncClient client, final HttpGet request) { this.client = client; context = HttpClientContext.create(); this.request = request; diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientHeadersLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientHeadersLiveTest.java index ebd67512e41d..51c3817da556 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientHeadersLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientHeadersLiveTest.java @@ -1,11 +1,7 @@ package org.baeldung.httpclient; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - +import com.google.common.collect.Lists; import org.apache.http.Header; -import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; @@ -20,7 +16,8 @@ import org.junit.Before; import org.junit.Test; -import com.google.common.collect.Lists; +import java.io.IOException; +import java.util.List; public class HttpClientHeadersLiveTest { @@ -37,19 +34,7 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests - headers - deprecated diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientMultipartLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientMultipartLiveTest.java index 954236a56f69..9912e73c2b83 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientMultipartLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientMultipartLiveTest.java @@ -1,22 +1,7 @@ package org.baeldung.httpclient; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.logging.Level; -import java.util.logging.Logger; - import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; @@ -30,6 +15,20 @@ import org.junit.Before; import org.junit.Test; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + public class HttpClientMultipartLiveTest { // No longer available @@ -48,7 +47,7 @@ public class HttpClientMultipartLiveTest { @Before public final void before() { client = HttpClientBuilder.create() - .build(); + .build(); post = new HttpPost(SERVER); } @@ -67,15 +66,7 @@ public final void after() throws IllegalStateException, IOException { LOGGER.log(Level.SEVERE, e.getMessage(), e); throw e; } - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests @@ -83,8 +74,8 @@ public final void after() throws IllegalStateException, IOException { @Test public final void givenFileandMultipleTextParts_whenUploadwithAddPart_thenNoExceptions() throws IOException { final URL url = Thread.currentThread() - .getContextClassLoader() - .getResource("uploads/" + TEXTFILENAME); + .getContextClassLoader() + .getResource("uploads/" + TEXTFILENAME); final File file = new File(url.getPath()); final FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY); @@ -102,7 +93,7 @@ public final void givenFileandMultipleTextParts_whenUploadwithAddPart_thenNoExce response = client.execute(post); final int statusCode = response.getStatusLine() - .getStatusCode(); + .getStatusCode(); final String responseString = getContent(); final String contentTypeInHeader = getContentTypeHeader(); assertThat(statusCode, equalTo(HttpStatus.SC_OK)); @@ -113,10 +104,10 @@ public final void givenFileandMultipleTextParts_whenUploadwithAddPart_thenNoExce } @Test - public final void givenFileandTextPart_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoExeption() throws ClientProtocolException, IOException { + public final void givenFileandTextPart_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoExeption() throws IOException { final URL url = Thread.currentThread() - .getContextClassLoader() - .getResource("uploads/" + TEXTFILENAME); + .getContextClassLoader() + .getResource("uploads/" + TEXTFILENAME); final File file = new File(url.getPath()); final String message = "This is a multipart post"; final MultipartEntityBuilder builder = MultipartEntityBuilder.create(); @@ -127,7 +118,7 @@ public final void givenFileandTextPart_whenUploadwithAddBinaryBodyandAddTextBody post.setEntity(entity); response = client.execute(post); final int statusCode = response.getStatusLine() - .getStatusCode(); + .getStatusCode(); final String responseString = getContent(); final String contentTypeInHeader = getContentTypeHeader(); assertThat(statusCode, equalTo(HttpStatus.SC_OK)); @@ -138,13 +129,13 @@ public final void givenFileandTextPart_whenUploadwithAddBinaryBodyandAddTextBody } @Test - public final void givenFileAndInputStreamandText_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoException() throws ClientProtocolException, IOException { + public final void givenFileAndInputStreamandText_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoException() throws IOException { final URL url = Thread.currentThread() - .getContextClassLoader() - .getResource("uploads/" + ZIPFILENAME); + .getContextClassLoader() + .getResource("uploads/" + ZIPFILENAME); final URL url2 = Thread.currentThread() - .getContextClassLoader() - .getResource("uploads/" + IMAGEFILENAME); + .getContextClassLoader() + .getResource("uploads/" + IMAGEFILENAME); final InputStream inputStream = new FileInputStream(url.getPath()); final File file = new File(url2.getPath()); final String message = "This is a multipart post"; @@ -157,7 +148,7 @@ public final void givenFileAndInputStreamandText_whenUploadwithAddBinaryBodyandA post.setEntity(entity); response = client.execute(post); final int statusCode = response.getStatusLine() - .getStatusCode(); + .getStatusCode(); final String responseString = getContent(); final String contentTypeInHeader = getContentTypeHeader(); assertThat(statusCode, equalTo(HttpStatus.SC_OK)); @@ -169,7 +160,7 @@ public final void givenFileAndInputStreamandText_whenUploadwithAddBinaryBodyandA } @Test - public final void givenCharArrayandText_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoException() throws ClientProtocolException, IOException { + public final void givenCharArrayandText_whenUploadwithAddBinaryBodyandAddTextBody_ThenNoException() throws IOException { final String message = "This is a multipart post"; final byte[] bytes = "binary code".getBytes(); final MultipartEntityBuilder builder = MultipartEntityBuilder.create(); @@ -180,7 +171,7 @@ public final void givenCharArrayandText_whenUploadwithAddBinaryBodyandAddTextBod post.setEntity(entity); response = client.execute(post); final int statusCode = response.getStatusLine() - .getStatusCode(); + .getStatusCode(); final String responseString = getContent(); final String contentTypeInHeader = getContentTypeHeader(); assertThat(statusCode, equalTo(HttpStatus.SC_OK)); @@ -192,21 +183,21 @@ public final void givenCharArrayandText_whenUploadwithAddBinaryBodyandAddTextBod // UTIL - final String getContent() throws IOException { + private String getContent() throws IOException { rd = new BufferedReader(new InputStreamReader(response.getEntity() - .getContent())); + .getContent())); String body = ""; - String content = ""; + StringBuilder content = new StringBuilder(); while ((body = rd.readLine()) != null) { - content += body + "\n"; + content.append(body).append("\n"); } - return content.trim(); + return content.toString().trim(); } - final String getContentTypeHeader() throws IOException { + private String getContentTypeHeader() throws IOException { return post.getEntity() - .getContentType() - .toString(); + .getContentType() + .toString(); } } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientPostingLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientPostingLiveTest.java index ada5667f0bf6..39ed8f09efa3 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientPostingLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientPostingLiveTest.java @@ -1,20 +1,10 @@ package org.baeldung.httpclient; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.auth.AuthenticationException; import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.fluent.Form; import org.apache.http.client.fluent.Request; @@ -29,17 +19,26 @@ import org.apache.http.message.BasicNameValuePair; import org.junit.Test; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + /* * NOTE : Need module spring-rest to be running */ public class HttpClientPostingLiveTest { - private static final String SAMPLE_URL = "http://localhost:8080/spring-rest/users"; + private static final String SAMPLE_URL = "http://localhost:8082/spring-rest/users"; private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; private static final String DEFAULT_USER = "test"; private static final String DEFAULT_PASS = "test"; @Test - public void whenSendPostRequestUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public void whenSendPostRequestUsingHttpClient_thenCorrect() throws IOException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(SAMPLE_URL); @@ -54,7 +53,7 @@ public void whenSendPostRequestUsingHttpClient_thenCorrect() throws ClientProtoc } @Test - public void whenSendPostRequestWithAuthorizationUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException, AuthenticationException { + public void whenSendPostRequestWithAuthorizationUsingHttpClient_thenCorrect() throws IOException, AuthenticationException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(URL_SECURED_BY_BASIC_AUTHENTICATION); @@ -68,7 +67,7 @@ public void whenSendPostRequestWithAuthorizationUsingHttpClient_thenCorrect() th } @Test - public void whenPostJsonUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public void whenPostJsonUsingHttpClient_thenCorrect() throws IOException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(SAMPLE_URL + "/detail"); @@ -84,14 +83,14 @@ public void whenPostJsonUsingHttpClient_thenCorrect() throws ClientProtocolExcep } @Test - public void whenPostFormUsingHttpClientFluentAPI_thenCorrect() throws ClientProtocolException, IOException { + public void whenPostFormUsingHttpClientFluentAPI_thenCorrect() throws IOException { final HttpResponse response = Request.Post(SAMPLE_URL).bodyForm(Form.form().add("username", DEFAULT_USER).add("password", DEFAULT_PASS).build()).execute().returnResponse(); assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); } @Test - public void whenSendMultipartRequestUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public void whenSendMultipartRequestUsingHttpClient_thenCorrect() throws IOException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(SAMPLE_URL + "/multipart"); @@ -109,7 +108,7 @@ public void whenSendMultipartRequestUsingHttpClient_thenCorrect() throws ClientP } @Test - public void whenUploadFileUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public void whenUploadFileUsingHttpClient_thenCorrect() throws IOException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(SAMPLE_URL + "/upload"); @@ -125,7 +124,7 @@ public void whenUploadFileUsingHttpClient_thenCorrect() throws ClientProtocolExc } @Test - public void whenGetUploadFileProgressUsingHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public void whenGetUploadFileProgressUsingHttpClient_thenCorrect() throws IOException { final CloseableHttpClient client = HttpClients.createDefault(); final HttpPost httpPost = new HttpPost(SAMPLE_URL + "/upload"); @@ -133,12 +132,7 @@ public void whenGetUploadFileProgressUsingHttpClient_thenCorrect() throws Client builder.addBinaryBody("file", new File("src/test/resources/test.in"), ContentType.APPLICATION_OCTET_STREAM, "file.ext"); final HttpEntity multipart = builder.build(); - final ProgressEntityWrapper.ProgressListener pListener = new ProgressEntityWrapper.ProgressListener() { - @Override - public void progress(final float percentage) { - assertFalse(Float.compare(percentage, 100) > 0); - } - }; + final ProgressEntityWrapper.ProgressListener pListener = percentage -> assertFalse(Float.compare(percentage, 100) > 0); httpPost.setEntity(new ProgressEntityWrapper(multipart, pListener)); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientRedirectLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientRedirectLiveTest.java index 3cb02dc7675f..a501367a6b7e 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientRedirectLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientRedirectLiveTest.java @@ -1,13 +1,5 @@ package org.baeldung.httpclient; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpHead; @@ -21,6 +13,12 @@ import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.util.Arrays; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + public class HttpClientRedirectLiveTest { private CloseableHttpClient instance; @@ -34,25 +32,13 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests @Test - public final void givenRedirectsAreDisabledViaNewApi_whenConsumingUrlWhichRedirects_thenNotRedirected() throws ClientProtocolException, IOException { + public final void givenRedirectsAreDisabledViaNewApi_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException { instance = HttpClients.custom().disableRedirectHandling().build(); final HttpGet httpGet = new HttpGet("http://t.co/I5YYd9tddw"); @@ -62,7 +48,7 @@ public final void givenRedirectsAreDisabledViaNewApi_whenConsumingUrlWhichRedire } @Test - public final void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() throws ClientProtocolException, IOException { + public final void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException { instance = HttpClientBuilder.create().disableRedirectHandling().build(); response = instance.execute(new HttpGet("http://t.co/I5YYd9tddw")); assertThat(response.getStatusLine().getStatusCode(), equalTo(301)); @@ -71,26 +57,22 @@ public final void givenRedirectsAreDisabled_whenConsumingUrlWhichRedirects_thenN // redirect with POST @Test - public final void givenPostRequest_whenConsumingUrlWhichRedirects_thenNotRedirected() throws ClientProtocolException, IOException { + public final void givenPostRequest_whenConsumingUrlWhichRedirects_thenNotRedirected() throws IOException { instance = HttpClientBuilder.create().build(); response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw")); assertThat(response.getStatusLine().getStatusCode(), equalTo(301)); } @Test - public final void givenRedirectingPOSTViaPost4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws ClientProtocolException, IOException { + public final void givenRedirectingPOSTViaPost4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException { final CloseableHttpClient client = HttpClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() { /** Redirectable methods. */ - private final String[] REDIRECT_METHODS = new String[] { HttpGet.METHOD_NAME, HttpPost.METHOD_NAME, HttpHead.METHOD_NAME }; + private final String[] REDIRECT_METHODS = new String[]{HttpGet.METHOD_NAME, HttpPost.METHOD_NAME, HttpHead.METHOD_NAME}; @Override protected boolean isRedirectable(final String method) { - for (final String m : REDIRECT_METHODS) { - if (m.equalsIgnoreCase(method)) { - return true; - } - } - return false; + return Arrays.stream(REDIRECT_METHODS) + .anyMatch(m -> m.equalsIgnoreCase(method)); } }).build(); @@ -99,7 +81,7 @@ protected boolean isRedirectable(final String method) { } @Test - public final void givenRedirectingPOSTVia4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws ClientProtocolException, IOException { + public final void givenRedirectingPOSTVia4_2Api_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException { final CloseableHttpClient client = HttpClients.custom().setRedirectStrategy(new LaxRedirectStrategy()).build(); response = client.execute(new HttpPost("http://t.co/I5YYd9tddw")); @@ -107,7 +89,7 @@ public final void givenRedirectingPOSTVia4_2Api_whenConsumingUrlWhichRedirectsWi } @Test - public final void givenRedirectingPOST_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws ClientProtocolException, IOException { + public final void givenRedirectingPOST_whenConsumingUrlWhichRedirectsWithPOST_thenRedirected() throws IOException { instance = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build(); response = instance.execute(new HttpPost("http://t.co/I5YYd9tddw")); assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientTimeoutLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientTimeoutLiveTest.java index 7e7dbe2146be..74255e416c5e 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpClientTimeoutLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpClientTimeoutLiveTest.java @@ -1,13 +1,5 @@ package org.baeldung.httpclient; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -18,31 +10,24 @@ import org.junit.After; import org.junit.Test; +import java.io.IOException; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + public class HttpClientTimeoutLiveTest { private CloseableHttpResponse response; @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests @Test - public final void givenUsingNewApi_whenSettingTimeoutViaRequestConfig_thenCorrect() throws ClientProtocolException, IOException { + public final void givenUsingNewApi_whenSettingTimeoutViaRequestConfig_thenCorrect() throws IOException { final int timeout = 2; final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout * 1000).setConnectionRequestTimeout(timeout * 1000).setSocketTimeout(timeout * 1000).build(); final CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).build(); @@ -56,7 +41,7 @@ public final void givenUsingNewApi_whenSettingTimeoutViaRequestConfig_thenCorrec } @Test - public final void givenUsingNewApi_whenSettingTimeoutViaSocketConfig_thenCorrect() throws ClientProtocolException, IOException { + public final void givenUsingNewApi_whenSettingTimeoutViaSocketConfig_thenCorrect() throws IOException { final int timeout = 2; final SocketConfig config = SocketConfig.custom().setSoTimeout(timeout * 1000).build(); @@ -70,7 +55,7 @@ public final void givenUsingNewApi_whenSettingTimeoutViaSocketConfig_thenCorrect } @Test - public final void givenUsingNewApi_whenSettingTimeoutViaHighLevelApi_thenCorrect() throws ClientProtocolException, IOException { + public final void givenUsingNewApi_whenSettingTimeoutViaHighLevelApi_thenCorrect() throws IOException { final int timeout = 5; final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout * 1000).setConnectionRequestTimeout(timeout * 1000).setSocketTimeout(timeout * 1000).build(); @@ -87,7 +72,7 @@ public final void givenUsingNewApi_whenSettingTimeoutViaHighLevelApi_thenCorrect * This simulates a timeout against a domain with multiple routes/IPs to it (not a single raw IP) */ @Test(expected = HttpHostConnectException.class) - public final void givenTimeoutIsConfigured_whenTimingOut_thenTimeoutException() throws ClientProtocolException, IOException { + public final void givenTimeoutIsConfigured_whenTimingOut_thenTimeoutException() throws IOException { final int timeout = 3; final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout * 1000).setConnectionRequestTimeout(timeout * 1000).setSocketTimeout(timeout * 1000).build(); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java index 5dfecb85aa97..4eadfe24d5a4 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java @@ -1,14 +1,5 @@ package org.baeldung.httpclient; -import static org.hamcrest.CoreMatchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.security.GeneralSecurityException; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLHandshakeException; - import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ClientConnectionManager; @@ -28,6 +19,14 @@ import org.apache.http.ssl.SSLContexts; import org.junit.Test; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLHandshakeException; +import java.io.IOException; +import java.security.GeneralSecurityException; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + /** * This test requires a localhost server over HTTPS
* It should only be manually run, not part of the automated build diff --git a/httpclient/src/test/java/org/baeldung/httpclient/ProgressEntityWrapper.java b/httpclient/src/test/java/org/baeldung/httpclient/ProgressEntityWrapper.java index f0b7e0e5593e..cd00d8711a28 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/ProgressEntityWrapper.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/ProgressEntityWrapper.java @@ -10,7 +10,7 @@ public class ProgressEntityWrapper extends HttpEntityWrapper { private final ProgressListener listener; - public ProgressEntityWrapper(final HttpEntity entity, final ProgressListener listener) { + ProgressEntityWrapper(final HttpEntity entity, final ProgressListener listener) { super(entity); this.listener = listener; } @@ -20,7 +20,7 @@ public void writeTo(final OutputStream outstream) throws IOException { super.writeTo(new CountingOutputStream(outstream, listener, getContentLength())); } - public static interface ProgressListener { + public interface ProgressListener { void progress(float percentage); } @@ -30,7 +30,7 @@ public static class CountingOutputStream extends FilterOutputStream { private long transferred; private long totalBytes; - public CountingOutputStream(final OutputStream out, final ProgressListener listener, final long totalBytes) { + CountingOutputStream(final OutputStream out, final ProgressListener listener, final long totalBytes) { super(out); this.listener = listener; transferred = 0; diff --git a/httpclient/src/test/java/org/baeldung/httpclient/ResponseUtil.java b/httpclient/src/test/java/org/baeldung/httpclient/ResponseUtil.java new file mode 100644 index 000000000000..fd38b95cbef2 --- /dev/null +++ b/httpclient/src/test/java/org/baeldung/httpclient/ResponseUtil.java @@ -0,0 +1,26 @@ +package org.baeldung.httpclient; + +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; + +import java.io.IOException; + +public final class ResponseUtil { + private ResponseUtil() { + } + + public static void closeResponse(CloseableHttpResponse response) throws IOException { + if (response == null) { + return; + } + + try { + final HttpEntity entity = response.getEntity(); + if (entity != null) { + entity.getContent().close(); + } + } finally { + response.close(); + } + } +} diff --git a/httpclient/src/test/java/org/baeldung/httpclient/advancedconfig/HttpClientAdvancedConfigurationIntegrationTest.java b/httpclient/src/test/java/org/baeldung/httpclient/advancedconfig/HttpClientAdvancedConfigurationIntegrationTest.java index b5a76241d136..77d5a298c16b 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/advancedconfig/HttpClientAdvancedConfigurationIntegrationTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/advancedconfig/HttpClientAdvancedConfigurationIntegrationTest.java @@ -24,7 +24,14 @@ import java.io.IOException; -import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching; import static org.junit.Assert.assertEquals; public class HttpClientAdvancedConfigurationIntegrationTest { @@ -40,9 +47,9 @@ public void givenClientWithCustomUserAgentHeader_whenExecuteRequest_shouldReturn //given String userAgent = "BaeldungAgent/1.0"; serviceMock.stubFor(get(urlEqualTo("/detail")) - .withHeader("User-Agent", equalTo(userAgent)) - .willReturn(aResponse() - .withStatus(200))); + .withHeader("User-Agent", equalTo(userAgent)) + .willReturn(aResponse() + .withStatus(200))); HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://localhost:8089/detail"); @@ -60,10 +67,10 @@ public void givenClientThatSendDataInBody_whenSendXmlInBody_shouldReturn200() th //given String xmlBody = "1"; serviceMock.stubFor(post(urlEqualTo("/person")) - .withHeader("Content-Type", equalTo("application/xml")) - .withRequestBody(equalTo(xmlBody)) - .willReturn(aResponse() - .withStatus(200))); + .withHeader("Content-Type", equalTo("application/xml")) + .withRequestBody(equalTo(xmlBody)) + .willReturn(aResponse() + .withStatus(200))); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("http://localhost:8089/person"); @@ -83,17 +90,17 @@ public void givenClientThatSendDataInBody_whenSendXmlInBody_shouldReturn200() th public void givenServerThatIsBehindProxy_whenClientIsConfiguredToSendRequestViaProxy_shouldReturn200() throws IOException { //given proxyMock.stubFor(get(urlMatching(".*")) - .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); + .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); serviceMock.stubFor(get(urlEqualTo("/private")) - .willReturn(aResponse().withStatus(200))); + .willReturn(aResponse().withStatus(200))); HttpHost proxy = new HttpHost("localhost", 8090); DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy); HttpClient httpclient = HttpClients.custom() - .setRoutePlanner(routePlanner) - .build(); + .setRoutePlanner(routePlanner) + .build(); //when final HttpGet httpGet = new HttpGet("http://localhost:8089/private"); @@ -109,9 +116,9 @@ public void givenServerThatIsBehindProxy_whenClientIsConfiguredToSendRequestViaP public void givenServerThatIsBehindAuthorizationProxy_whenClientSendRequest_shouldAuthorizeProperly() throws IOException { //given proxyMock.stubFor(get(urlMatching("/private")) - .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); + .willReturn(aResponse().proxiedFrom("http://localhost:8089/"))); serviceMock.stubFor(get(urlEqualTo("/private")) - .willReturn(aResponse().withStatus(200))); + .willReturn(aResponse().withStatus(200))); HttpHost proxy = new HttpHost("localhost", 8090); @@ -120,7 +127,7 @@ public void givenServerThatIsBehindAuthorizationProxy_whenClientSendRequest_shou // Client credentials CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(new AuthScope(proxy), - new UsernamePasswordCredentials("username_admin", "secret_password")); + new UsernamePasswordCredentials("username_admin", "secret_password")); // Create AuthCache instance @@ -135,9 +142,9 @@ public void givenServerThatIsBehindAuthorizationProxy_whenClientSendRequest_shou HttpClient httpclient = HttpClients.custom() - .setRoutePlanner(routePlanner) - .setDefaultCredentialsProvider(credentialsProvider) - .build(); + .setRoutePlanner(routePlanner) + .setDefaultCredentialsProvider(credentialsProvider) + .build(); //when diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicLiveTest.java index 2a101ec81623..fee9dc434395 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicLiveTest.java @@ -1,13 +1,5 @@ package org.baeldung.httpclient.base; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; @@ -16,10 +8,17 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; +import org.baeldung.httpclient.ResponseUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; + public class HttpClientBasicLiveTest { private static final String SAMPLE_URL = "http://www.github.com"; @@ -35,19 +34,7 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicPostLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicPostLiveTest.java index 7eb078b18be6..fe275be082d3 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicPostLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientBasicPostLiveTest.java @@ -1,22 +1,20 @@ package org.baeldung.httpclient.base; -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; import org.apache.http.auth.AuthenticationException; import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.auth.BasicScheme; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.baeldung.httpclient.ResponseUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; + public class HttpClientBasicPostLiveTest { private static final String SAMPLE_URL = "http://www.github.com"; @@ -32,37 +30,25 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests - non-GET @Test - public final void whenExecutingPostRequest_thenNoExceptions() throws ClientProtocolException, IOException { + public final void whenExecutingPostRequest_thenNoExceptions() throws IOException { instance.execute(new HttpPost(SAMPLE_URL)); } @Test - public final void whenExecutingPostRequestWithBody_thenNoExceptions() throws ClientProtocolException, IOException { + public final void whenExecutingPostRequestWithBody_thenNoExceptions() throws IOException { final HttpPost request = new HttpPost(SAMPLE_URL); request.setEntity(new StringEntity("in the body of the POST")); instance.execute(request); } @Test - public final void givenAuth_whenExecutingPostRequestWithBody_thenNoExceptions() throws ClientProtocolException, IOException, AuthenticationException { + public final void givenAuth_whenExecutingPostRequestWithBody_thenNoExceptions() throws IOException, AuthenticationException { final HttpPost request = new HttpPost(SAMPLE_URL); request.setEntity(new StringEntity("in the body of the POST")); final UsernamePasswordCredentials creds = new UsernamePasswordCredentials("username", "password"); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java index 878d220f6712..78097227e73f 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java @@ -11,12 +11,12 @@ import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.BasicHttpClientConnectionManager; +import org.baeldung.httpclient.ResponseUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; -import java.io.InputStream; import static org.hamcrest.Matchers.emptyArray; import static org.hamcrest.Matchers.not; @@ -37,19 +37,7 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java index 40216a70a5fd..d945d075f2cf 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java @@ -1,9 +1,5 @@ package org.baeldung.httpclient.base; -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; @@ -12,8 +8,11 @@ import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.baeldung.httpclient.ResponseUtil; import org.junit.Test; +import java.io.IOException; + /* * NOTE : Need module spring-security-rest-basic-auth to be running */ @@ -32,15 +31,6 @@ public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectSt System.out.println(response.getStatusLine()); - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - // EntityUtils.consume(entity); - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java index e04cd32d657b..0f8ebefe6c07 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java @@ -1,11 +1,5 @@ package org.baeldung.httpclient.conn; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - import org.apache.http.HeaderElement; import org.apache.http.HeaderElementIterator; import org.apache.http.HttpClientConnection; @@ -36,6 +30,12 @@ import org.junit.Ignore; import org.junit.Test; +import java.io.IOException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertTrue; + public class HttpClientConnectionManagementLiveTest { private static final String SERVER1 = "http://www.petrikainulainen.net/"; private static final String SERVER7 = "http://www.baeldung.com/"; @@ -129,7 +129,7 @@ public final void whenPollingConnectionManagerIsConfiguredOnHttpClient_thenNoExc @Test // @Ignore // Example 3.2. TESTER VERSION - /*tester*/public final void whenTwoConnectionsForTwoRequests_thenTwoConnectionsAreLeased() throws InterruptedException { + /*tester*/ public final void whenTwoConnectionsForTwoRequests_thenTwoConnectionsAreLeased() throws InterruptedException { poolingConnManager = new PoolingHttpClientConnectionManager(); final CloseableHttpClient client1 = HttpClients.custom().setConnectionManager(poolingConnManager).build(); final CloseableHttpClient client2 = HttpClients.custom().setConnectionManager(poolingConnManager).build(); @@ -173,7 +173,7 @@ public final void whenIncreasingConnectionPool_thenNoEceptions() { @Test // @Ignore // 4.2 Tester Version - /*tester*/public final void whenExecutingSameRequestsInDifferentThreads_thenUseDefaultConnLimit() throws InterruptedException, IOException { + /*tester*/ public final void whenExecutingSameRequestsInDifferentThreads_thenUseDefaultConnLimit() throws InterruptedException, IOException { poolingConnManager = new PoolingHttpClientConnectionManager(); client = HttpClients.custom().setConnectionManager(poolingConnManager).build(); final TesterVersion_MultiHttpClientConnThread thread1 = new TesterVersion_MultiHttpClientConnThread(client, new HttpGet("http://www.google.com"), poolingConnManager); @@ -266,7 +266,7 @@ public final void givenBasicHttpClientConnManager_whenConnectionReuse_thenNoExce @Test // @Ignore // 6.2 TESTER VERSION - /*tester*/public final void whenConnectionsNeededGreaterThanMaxTotal_thenReuseConnections() throws InterruptedException { + /*tester*/ public final void whenConnectionsNeededGreaterThanMaxTotal_thenReuseConnections() throws InterruptedException { poolingConnManager = new PoolingHttpClientConnectionManager(); poolingConnManager.setDefaultMaxPerRoute(5); poolingConnManager.setMaxTotal(5); @@ -333,7 +333,7 @@ public final void whenHttpClientChecksStaleConns_thenNoExceptions() { @Test @Ignore("Very Long Running") // 8.2 TESTER VERSION - /*tester*/public final void whenCustomizedIdleConnMonitor_thenEliminateIdleConns() throws InterruptedException, IOException { + /*tester*/ public final void whenCustomizedIdleConnMonitor_thenEliminateIdleConns() throws InterruptedException, IOException { poolingConnManager = new PoolingHttpClientConnectionManager(); client = HttpClients.custom().setConnectionManager(poolingConnManager).build(); final IdleConnectionMonitorThread staleMonitor = new IdleConnectionMonitorThread(poolingConnManager); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/conn/IdleConnectionMonitorThread.java b/httpclient/src/test/java/org/baeldung/httpclient/conn/IdleConnectionMonitorThread.java index 2a1c419e4182..ffe4155a7882 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/conn/IdleConnectionMonitorThread.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/conn/IdleConnectionMonitorThread.java @@ -9,7 +9,7 @@ public class IdleConnectionMonitorThread extends Thread { private final HttpClientConnectionManager connMgr; private volatile boolean shutdown; - public IdleConnectionMonitorThread(final PoolingHttpClientConnectionManager connMgr) { + IdleConnectionMonitorThread(final PoolingHttpClientConnectionManager connMgr) { super(); this.connMgr = connMgr; } @@ -31,7 +31,7 @@ public final void run() { } } - public final void shutdown() { + private void shutdown() { shutdown = true; synchronized (this) { notifyAll(); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/conn/MultiHttpClientConnThread.java b/httpclient/src/test/java/org/baeldung/httpclient/conn/MultiHttpClientConnThread.java index 071b964710ad..3794943f025b 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/conn/MultiHttpClientConnThread.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/conn/MultiHttpClientConnThread.java @@ -18,23 +18,23 @@ public class MultiHttpClientConnThread extends Thread { private final HttpGet get; private PoolingHttpClientConnectionManager connManager; - public int leasedConn; + private int leasedConn; - public MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get, final PoolingHttpClientConnectionManager connManager) { + MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get, final PoolingHttpClientConnectionManager connManager) { this.client = client; this.get = get; this.connManager = connManager; leasedConn = 0; } - public MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get) { + MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get) { this.client = client; this.get = get; } // API - public final int getLeasedConn() { + final int getLeasedConn() { return leasedConn; } @@ -61,8 +61,6 @@ public final void run() { } EntityUtils.consume(response.getEntity()); - } catch (final ClientProtocolException ex) { - logger.error("", ex); } catch (final IOException ex) { logger.error("", ex); } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/conn/TesterVersion_MultiHttpClientConnThread.java b/httpclient/src/test/java/org/baeldung/httpclient/conn/TesterVersion_MultiHttpClientConnThread.java index 62cd466596ec..9cc6480e7446 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/conn/TesterVersion_MultiHttpClientConnThread.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/conn/TesterVersion_MultiHttpClientConnThread.java @@ -18,7 +18,7 @@ public class TesterVersion_MultiHttpClientConnThread extends Thread { private final HttpGet get; private PoolingHttpClientConnectionManager connManager; - public TesterVersion_MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get, final PoolingHttpClientConnectionManager connManager) { + TesterVersion_MultiHttpClientConnThread(final CloseableHttpClient client, final HttpGet get, final PoolingHttpClientConnectionManager connManager) { this.client = client; this.get = get; this.connManager = Preconditions.checkNotNull(connManager); @@ -38,8 +38,6 @@ public final void run() { logger.info("After - Leased Connections = " + connManager.getTotalStats().getLeased()); logger.info("After - Available Connections = " + connManager.getTotalStats().getAvailable()); - } catch (final ClientProtocolException ex) { - logger.error("", ex); } catch (final IOException ex) { logger.error("", ex); } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/rare/HttpClientUnshortenLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/rare/HttpClientUnshortenLiveTest.java index a185e99639fc..8fc79baed92c 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/rare/HttpClientUnshortenLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/rare/HttpClientUnshortenLiveTest.java @@ -1,12 +1,7 @@ package org.baeldung.httpclient.rare; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.apache.http.Header; @@ -20,8 +15,12 @@ import org.junit.Before; import org.junit.Test; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; public class HttpClientUnshortenLiveTest { @@ -52,7 +51,7 @@ public final void givenShortenedMultiple_whenUrlIsUnshortened_thenCorrectResult( // API - final String expand(final String urlArg) throws IOException { + private String expand(final String urlArg) throws IOException { String originalUrl = urlArg; String newUrl = expandSingleLevel(originalUrl); while (!originalUrl.equals(newUrl)) { @@ -81,7 +80,7 @@ final String expandSafe(final String urlArg) throws IOException { return newUrl; } - final Pair expandSingleLevelSafe(final String url) throws IOException { + private Pair expandSingleLevelSafe(final String url) throws IOException { HttpHead request = null; HttpEntity httpEntity = null; InputStream entityContentStream = null; @@ -95,15 +94,15 @@ final Pair expandSingleLevelSafe(final String url) throws IOExc final int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode != 301 && statusCode != 302) { - return new ImmutablePair(statusCode, url); + return new ImmutablePair<>(statusCode, url); } final Header[] headers = httpResponse.getHeaders(HttpHeaders.LOCATION); Preconditions.checkState(headers.length == 1); final String newUrl = headers[0].getValue(); - return new ImmutablePair(statusCode, newUrl); + return new ImmutablePair<>(statusCode, newUrl); } catch (final IllegalArgumentException uriEx) { - return new ImmutablePair(500, url); + return new ImmutablePair<>(500, url); } finally { if (request != null) { request.releaseConnection(); @@ -117,7 +116,7 @@ final Pair expandSingleLevelSafe(final String url) throws IOExc } } - final String expandSingleLevel(final String url) throws IOException { + private String expandSingleLevel(final String url) throws IOException { HttpHead request = null; try { @@ -130,9 +129,8 @@ final String expandSingleLevel(final String url) throws IOException { } final Header[] headers = httpResponse.getHeaders(HttpHeaders.LOCATION); Preconditions.checkState(headers.length == 1); - final String newUrl = headers[0].getValue(); - return newUrl; + return headers[0].getValue(); } catch (final IllegalArgumentException uriEx) { return url; } finally { diff --git a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java index e98dd4d14ff8..7a75729ea51a 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java @@ -1,21 +1,12 @@ package org.baeldung.httpclient.sec; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; - import org.apache.commons.codec.binary.Base64; -import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; import org.apache.http.HttpHost; import org.apache.http.HttpStatus; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -26,10 +17,17 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.protocol.HttpContext; +import org.baeldung.httpclient.ResponseUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.nio.charset.Charset; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + /* * NOTE : Need module spring-security-rest-basic-auth to be running */ @@ -51,25 +49,13 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests @Test - public final void whenExecutingBasicGetRequestWithBasicAuthenticationEnabled_thenSuccess() throws ClientProtocolException, IOException { + public final void whenExecutingBasicGetRequestWithBasicAuthenticationEnabled_thenSuccess() throws IOException { client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider()).build(); response = client.execute(new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION)); @@ -79,7 +65,7 @@ public final void whenExecutingBasicGetRequestWithBasicAuthenticationEnabled_the } @Test - public final void givenAuthenticationIsPreemptive_whenExecutingBasicGetRequestWithBasicAuthenticationEnabled_thenSuccess() throws ClientProtocolException, IOException { + public final void givenAuthenticationIsPreemptive_whenExecutingBasicGetRequestWithBasicAuthenticationEnabled_thenSuccess() throws IOException { client = HttpClientBuilder.create().build(); response = client.execute(new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION), context()); @@ -88,7 +74,7 @@ public final void givenAuthenticationIsPreemptive_whenExecutingBasicGetRequestWi } @Test - public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_thenSuccess() throws ClientProtocolException, IOException { + public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_thenSuccess() throws IOException { client = HttpClientBuilder.create().build(); final HttpGet request = new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION); @@ -100,7 +86,7 @@ public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_ } @Test - public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_thenSuccess2() throws ClientProtocolException, IOException { + public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_thenSuccess2() throws IOException { final HttpGet request = new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION); final String auth = DEFAULT_USER + ":" + DEFAULT_PASS; final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); @@ -116,14 +102,14 @@ public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_ // UTILS - private final CredentialsProvider provider() { + private CredentialsProvider provider() { final CredentialsProvider provider = new BasicCredentialsProvider(); final UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(DEFAULT_USER, DEFAULT_PASS); provider.setCredentials(AuthScope.ANY, credentials); return provider; } - private final HttpContext context() { + private HttpContext context() { final HttpHost targetHost = new HttpHost("localhost", 8080, "http"); final CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(DEFAULT_USER, DEFAULT_PASS)); @@ -141,12 +127,11 @@ private final HttpContext context() { return context; } - private final String authorizationHeader(final String username, final String password) { + private String authorizationHeader(final String username, final String password) { final String auth = username + ":" + password; final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); - final String authHeader = "Basic " + new String(encodedAuth); - return authHeader; + return "Basic " + new String(encodedAuth); } } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientCookieLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientCookieLiveTest.java index 7da9ad04e4a5..ba27aca08d34 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientCookieLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientCookieLiveTest.java @@ -1,13 +1,5 @@ package org.baeldung.httpclient.sec; -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - -import org.apache.http.HttpEntity; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -18,10 +10,16 @@ import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; +import org.baeldung.httpclient.ResponseUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + public class HttpClientCookieLiveTest { private CloseableHttpClient instance; @@ -35,25 +33,13 @@ public final void before() { @After public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } - - try { - final HttpEntity entity = response.getEntity(); - if (entity != null) { - final InputStream instream = entity.getContent(); - instream.close(); - } - } finally { - response.close(); - } + ResponseUtil.closeResponse(response); } // tests @Test - public final void whenSettingCookiesOnARequest_thenCorrect() throws ClientProtocolException, IOException { + public final void whenSettingCookiesOnARequest_thenCorrect() throws IOException { instance = HttpClientBuilder.create().build(); final HttpGet request = new HttpGet("http://www.github.com"); request.setHeader("Cookie", "JSESSIONID=1234"); @@ -64,7 +50,7 @@ public final void whenSettingCookiesOnARequest_thenCorrect() throws ClientProtoc } @Test - public final void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() throws ClientProtocolException, IOException { + public final void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_thenCorrect() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); @@ -80,7 +66,7 @@ public final void givenUsingDeprecatedApi_whenSettingCookiesOnTheHttpClient_then } @Test - public final void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() throws ClientProtocolException, IOException { + public final void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); @@ -96,7 +82,7 @@ public final void whenSettingCookiesOnTheHttpClient_thenCookieSentCorrectly() th } @Test - public final void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() throws ClientProtocolException, IOException { + public final void whenSettingCookiesOnTheRequest_thenCookieSentCorrectly() throws IOException { final BasicCookieStore cookieStore = new BasicCookieStore(); final BasicClientCookie cookie = new BasicClientCookie("JSESSIONID", "1234"); cookie.setDomain(".github.com"); diff --git a/javax-servlets/pom.xml b/javax-servlets/pom.xml index 1934102c689a..740766630949 100644 --- a/javax-servlets/pom.xml +++ b/javax-servlets/pom.xml @@ -39,7 +39,7 @@ 3.1.0 - 4.5.2 + 4.5.3 \ No newline at end of file diff --git a/javax-servlets/src/test/java/com/baeldung/servlets/FormServletLiveTest.java b/javax-servlets/src/test/java/com/baeldung/servlets/FormServletLiveTest.java index dca725ae32cd..120a555c5b77 100644 --- a/javax-servlets/src/test/java/com/baeldung/servlets/FormServletLiveTest.java +++ b/javax-servlets/src/test/java/com/baeldung/servlets/FormServletLiveTest.java @@ -1,24 +1,24 @@ package com.baeldung.servlets; -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; -import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + public class FormServletLiveTest { @Test public void whenPostRequestUsingHttpClient_thenCorrect() throws Exception { - HttpClient client = new DefaultHttpClient(); + HttpClient client = HttpClientBuilder.create().build(); HttpPost method = new HttpPost("http://localhost:8080/calculateServlet"); List nvps = new ArrayList<>(); diff --git a/jee7/pom.xml b/jee7/pom.xml index e633d2df3d7c..b5e0d80b6cb5 100644 --- a/jee7/pom.xml +++ b/jee7/pom.xml @@ -31,6 +31,7 @@ 1.0.0.Final 2.6 + 4.2.3.RELEASE @@ -136,6 +137,34 @@ standard 1.1.2
+ + + javax.mvc + javax.mvc-api + 20160715 + + + org.glassfish.ozark + ozark + 20160715 + + + + org.springframework.security + spring-security-web + ${org.springframework.security.version} + + + + org.springframework.security + spring-security-config + ${org.springframework.security.version} + + + org.springframework.security + spring-security-taglibs + ${org.springframework.security.version} +
@@ -378,4 +407,18 @@ + + + + bintray-mvc-spec-maven + bintray + http://dl.bintray.com/mvc-spec/maven + + true + + + false + + + diff --git a/jee7/src/main/java/com/baeldung/springSecurity/ApplicationConfig.java b/jee7/src/main/java/com/baeldung/springSecurity/ApplicationConfig.java new file mode 100755 index 000000000000..f8e79822537e --- /dev/null +++ b/jee7/src/main/java/com/baeldung/springSecurity/ApplicationConfig.java @@ -0,0 +1,13 @@ +package com.baeldung.springSecurity; + +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + +/** + * Application class required by JAX-RS. If you don't want to have any + * prefix in the URL, you can set the application path to "/". + */ +@ApplicationPath("/") +public class ApplicationConfig extends Application { + +} diff --git a/jee7/src/main/java/com/baeldung/springSecurity/SecurityWebApplicationInitializer.java b/jee7/src/main/java/com/baeldung/springSecurity/SecurityWebApplicationInitializer.java new file mode 100644 index 000000000000..e6a05f7b711e --- /dev/null +++ b/jee7/src/main/java/com/baeldung/springSecurity/SecurityWebApplicationInitializer.java @@ -0,0 +1,10 @@ +package com.baeldung.springSecurity; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { + + public SecurityWebApplicationInitializer() { + super(SpringSecurityConfig.class); + } +} diff --git a/jee7/src/main/java/com/baeldung/springSecurity/SpringSecurityConfig.java b/jee7/src/main/java/com/baeldung/springSecurity/SpringSecurityConfig.java new file mode 100644 index 000000000000..bda8930f36b3 --- /dev/null +++ b/jee7/src/main/java/com/baeldung/springSecurity/SpringSecurityConfig.java @@ -0,0 +1,46 @@ +package com.baeldung.springSecurity; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth + .inMemoryAuthentication() + .withUser("user1") + .password("user1Pass") + .roles("USER") + .and() + .withUser("admin") + .password("adminPass") + .roles("ADMIN"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .csrf() + .disable() + .authorizeRequests() + .antMatchers("/auth/login*") + .anonymous() + .antMatchers("/home/admin*") + .hasRole("ADMIN") + .anyRequest() + .authenticated() + .and() + .formLogin() + .loginPage("/auth/login") + .defaultSuccessUrl("/home", true) + .failureUrl("/auth/login?error=true") + .and() + .logout() + .logoutSuccessUrl("/auth/login"); + } +} \ No newline at end of file diff --git a/jee7/src/main/java/com/baeldung/springSecurity/controller/HomeController.java b/jee7/src/main/java/com/baeldung/springSecurity/controller/HomeController.java new file mode 100644 index 000000000000..53fd9f4b811f --- /dev/null +++ b/jee7/src/main/java/com/baeldung/springSecurity/controller/HomeController.java @@ -0,0 +1,28 @@ +package com.baeldung.springSecurity.controller; + +import javax.mvc.annotation.Controller; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/home") +@Controller +public class HomeController { + + @GET + public String home() { + return "home.jsp"; + } + + @GET + @Path("/user") + public String admin() { + return "user.jsp"; + } + + @GET + @Path("/admin") + public String user() { + return "admin.jsp"; + } + +} diff --git a/jee7/src/main/java/com/baeldung/springSecurity/controller/LoginController.java b/jee7/src/main/java/com/baeldung/springSecurity/controller/LoginController.java new file mode 100644 index 000000000000..a7e7bb471d39 --- /dev/null +++ b/jee7/src/main/java/com/baeldung/springSecurity/controller/LoginController.java @@ -0,0 +1,15 @@ +package com.baeldung.springSecurity.controller; + +import javax.mvc.annotation.Controller; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +@Path("/auth/login") +@Controller +public class LoginController { + + @GET + public String login() { + return "login.jsp"; + } +} diff --git a/jee7/src/main/webapp/WEB-INF/views/admin.jsp b/jee7/src/main/webapp/WEB-INF/views/admin.jsp new file mode 100644 index 000000000000..b83ea09f5bad --- /dev/null +++ b/jee7/src/main/webapp/WEB-INF/views/admin.jsp @@ -0,0 +1,12 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> + + + + +

Welcome to the ADMIN page

+ + ">Logout + + + \ No newline at end of file diff --git a/jee7/src/main/webapp/WEB-INF/views/home.jsp b/jee7/src/main/webapp/WEB-INF/views/home.jsp new file mode 100644 index 000000000000..c6e129c9ce29 --- /dev/null +++ b/jee7/src/main/webapp/WEB-INF/views/home.jsp @@ -0,0 +1,26 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> + + + + +

This is the body of the sample view

+ + + This text is only visible to a user +

+ ">Restricted Admin Page +

+
+ + + This text is only visible to an admin +
+ ">Admin Page +
+
+ + ">Logout + + + \ No newline at end of file diff --git a/jee7/src/main/webapp/WEB-INF/views/login.jsp b/jee7/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 000000000000..d6f2e56f3a2d --- /dev/null +++ b/jee7/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,26 @@ + + + + +

Login

+ +
+ + + + + + + + + + + + + +
User:
Password:
+ +
+ + + \ No newline at end of file diff --git a/jee7/src/main/webapp/WEB-INF/views/user.jsp b/jee7/src/main/webapp/WEB-INF/views/user.jsp new file mode 100644 index 000000000000..11b8155da766 --- /dev/null +++ b/jee7/src/main/webapp/WEB-INF/views/user.jsp @@ -0,0 +1,12 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %> + + + + +

Welcome to the Restricted Admin page

+ + ">Logout + + + \ No newline at end of file diff --git a/jmh/pom.xml b/jmh/pom.xml index 8ecfaa96510b..ef5c3f1bbfaa 100644 --- a/jmh/pom.xml +++ b/jmh/pom.xml @@ -1,52 +1,60 @@ - 4.0.0 - com.baeldung - jmh - jar - 1.0-SNAPSHOT - jmh - http://maven.apache.org + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + com.baeldung + jmh + jar + 1.0-SNAPSHOT + jmh + http://maven.apache.org - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + 1.6 + 1.6 + - - - org.openjdk.jmh - jmh-core - 1.19 - - - org.openjdk.jmh - jmh-generator-annprocess - 1.19 - - - junit - junit - 3.8.1 - test - - + + + org.openjdk.jmh + jmh-core + 1.19 + + + org.openjdk.jmh + jmh-generator-annprocess + 1.19 + + + junit + junit + 3.8.1 + test + - - - - org.apache.maven.plugins - maven-jar-plugin - - - - com.baeldung.Application - - - - - - + + com.google.guava + guava + 21.0 + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + com.baeldung.BenchmarkRunner + + + + + + \ No newline at end of file diff --git a/jmh/src/main/java/com/baeldung/Application.java b/jmh/src/main/java/com/baeldung/Application.java deleted file mode 100644 index 28e70740e01c..000000000000 --- a/jmh/src/main/java/com/baeldung/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung; - -import java.io.IOException; - -import org.openjdk.jmh.Main; -import org.openjdk.jmh.runner.RunnerException; - -public class Application { - - public static void main(String[] args) throws RunnerException, IOException { - Main.main(args); - } - -} diff --git a/jmh/src/main/java/com/baeldung/BenchMark.java b/jmh/src/main/java/com/baeldung/BenchMark.java index f2b984d2112e..b0e1caf4dcde 100644 --- a/jmh/src/main/java/com/baeldung/BenchMark.java +++ b/jmh/src/main/java/com/baeldung/BenchMark.java @@ -1,12 +1,48 @@ package com.baeldung; -import org.openjdk.jmh.annotations.Benchmark; +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hasher; +import com.google.common.hash.Hashing; +import org.openjdk.jmh.annotations.*; + +import java.nio.charset.Charset; public class BenchMark { - @Benchmark - public void init() { - - } + @State(Scope.Benchmark) + public static class ExecutionPlan { + + @Param({ "100", "200", "300", "500", "1000" }) + public int iterations; + + public Hasher murmur3; + + public String password = "4v3rys3kur3p455w0rd"; + + @Setup(Level.Invocation) + public void setUp() { + murmur3 = Hashing.murmur3_128().newHasher(); + } + } + + @Fork(value = 1, warmups = 1) + @Benchmark + @BenchmarkMode(Mode.Throughput) + @Warmup(iterations = 5) + public void benchMurmur3_128(ExecutionPlan plan) { + + for (int i = plan.iterations; i > 0; i--) { + plan.murmur3.putString(plan.password, Charset.defaultCharset()); + } + + plan.murmur3.hash(); + } + + @Benchmark + @Fork(value = 1, warmups = 1) + @BenchmarkMode(Mode.Throughput) + public void init() { + // Do nothing + } } diff --git a/jmh/src/main/java/com/baeldung/BenchmarkRunner.java b/jmh/src/main/java/com/baeldung/BenchmarkRunner.java new file mode 100644 index 000000000000..ed6a5bb617cb --- /dev/null +++ b/jmh/src/main/java/com/baeldung/BenchmarkRunner.java @@ -0,0 +1,9 @@ +package com.baeldung; + +public class BenchmarkRunner { + + public static void main(String[] args) throws Exception { + org.openjdk.jmh.Main.main(args); + } + +} diff --git a/jmh/src/test/java/com/baeldung/AppTest.java b/jmh/src/test/java/com/baeldung/AppTest.java deleted file mode 100644 index c9f61455bda0..000000000000 --- a/jmh/src/test/java/com/baeldung/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/json-path/pom.xml b/json-path/pom.xml index e81bc1dcf9a5..8384ba68eda6 100644 --- a/json-path/pom.xml +++ b/json-path/pom.xml @@ -23,6 +23,6 @@ - 2.2.0 + 2.4.0 \ No newline at end of file diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java index cb5c695cd81b..855f524dbe89 100644 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java +++ b/json-path/src/test/java/com/baeldung/jsonpath/introduction/OperationIntegrationTest.java @@ -1,10 +1,10 @@ package com.baeldung.jsonpath.introduction; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.not; - +import com.jayway.jsonpath.Criteria; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.Filter; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Predicate; import org.junit.Test; import java.io.InputStream; @@ -12,15 +12,14 @@ import java.util.Map; import java.util.Scanner; -import com.jayway.jsonpath.Criteria; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.Filter; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Predicate; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class OperationIntegrationTest { - InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_api.json"); - String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); + private InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_api.json"); + private String jsonDataSourceString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); @Test public void givenJsonPathWithoutPredicates_whenReading_thenCorrect() { @@ -46,12 +45,7 @@ public void givenJsonPathWithFilterPredicate_whenReading_thenCorrect() { @Test public void givenJsonPathWithCustomizedPredicate_whenReading_thenCorrect() { - Predicate expensivePredicate = new Predicate() { - public boolean apply(PredicateContext context) { - String value = context.item(Map.class).get("price").toString(); - return Float.valueOf(value) > 20.00; - } - }; + Predicate expensivePredicate = context -> Float.valueOf(context.item(Map.class).get("price").toString()) > 20.00; List> expensive = JsonPath.parse(jsonDataSourceString).read("$['book'][?]", expensivePredicate); predicateUsageAssertionHelper(expensive); } diff --git a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java index 868acac8d02f..d5cfa50e802e 100644 --- a/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java +++ b/json-path/src/test/java/com/baeldung/jsonpath/introduction/ServiceTest.java @@ -1,9 +1,9 @@ package com.baeldung.jsonpath.introduction; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.hamcrest.CoreMatchers.containsString; - +import com.jayway.jsonpath.Configuration; +import com.jayway.jsonpath.DocumentContext; +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.Option; import org.junit.Test; import java.io.InputStream; @@ -13,14 +13,13 @@ import java.util.Map; import java.util.Scanner; -import com.jayway.jsonpath.Configuration; -import com.jayway.jsonpath.DocumentContext; -import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.Option; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class ServiceTest { - InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_service.json"); - String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); + private InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("intro_service.json"); + private String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); @Test public void givenId_whenRequestingRecordData_thenSucceed() { diff --git a/junit5/README.md b/junit5/README.md index c1ff0eab6306..49cd8e61a490 100644 --- a/junit5/README.md +++ b/junit5/README.md @@ -4,3 +4,4 @@ - [Guide to Dynamic Tests in Junit 5](http://www.baeldung.com/junit5-dynamic-tests) - [A Guide to @RepeatedTest in Junit 5](http://www.baeldung.com/junit-5-repeated-test) - [Guide to Dynamic Tests in Junit 5](http://www.baeldung.com/junit5-dynamic-tests) +- [A Guied to JUnit 5 Extensions](http://www.baeldung.com/junit-5-extensions) diff --git a/junit5/pom.xml b/junit5/pom.xml index 9f06ebe6a51c..2316b034e923 100644 --- a/junit5/pom.xml +++ b/junit5/pom.xml @@ -9,7 +9,7 @@ junit5 Intro to JUnit 5 - + com.baeldung parent-modules @@ -19,14 +19,24 @@ UTF-8 1.8 - 5.0.0-M4 - 1.0.0-M4 + 5.0.0-M5 + 1.0.0-M5 + 4.12.0-M5 + 2.8.2 + 1.4.196 3.6.0 2.19.1 + 4.12 + + + src/test/resources + true + + maven-compiler-plugin @@ -47,6 +57,21 @@ + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + + java + + + + + com.baeldung.TestLauncher + + @@ -57,5 +82,35 @@ ${junit.jupiter.version} test + + org.junit.platform + junit-platform-runner + ${junit.platform.version} + test + + + org.junit.vintage + junit-vintage-engine + ${junit.vintage.version} + test + + + org.apache.logging.log4j + log4j-core + ${log4j2.version} + + + com.h2database + h2 + ${h2.version} + + + junit + junit + ${junit4.version} + test + + + \ No newline at end of file diff --git a/junit5/src/test/java/com/baeldung/EmployeesTest.java b/junit5/src/test/java/com/baeldung/EmployeesTest.java new file mode 100644 index 000000000000..1a6da37d725c --- /dev/null +++ b/junit5/src/test/java/com/baeldung/EmployeesTest.java @@ -0,0 +1,48 @@ +package com.baeldung; + +import java.sql.SQLException; + +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import com.baeldung.extensions.EmployeeDaoParameterResolver; +import com.baeldung.extensions.EmployeeDatabaseSetupExtension; +import com.baeldung.extensions.EnvironmentExtension; +import com.baeldung.extensions.IgnoreFileNotFoundExceptionExtension; +import com.baeldung.extensions.LoggingExtension; +import com.baeldung.helpers.Employee; +import com.baeldung.helpers.EmployeeJdbcDao; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith({ EnvironmentExtension.class, EmployeeDatabaseSetupExtension.class, EmployeeDaoParameterResolver.class }) +@ExtendWith(LoggingExtension.class) +@ExtendWith(IgnoreFileNotFoundExceptionExtension.class) +public class EmployeesTest { + + private EmployeeJdbcDao employeeDao; + + private Logger logger; + + public EmployeesTest(EmployeeJdbcDao employeeDao) { + this.employeeDao = employeeDao; + } + + @Test + public void whenAddEmployee_thenGetEmployee() throws SQLException { + Employee emp = new Employee(1, "john"); + employeeDao.add(emp); + assertEquals(1, employeeDao.findAll().size()); + } + + @Test + public void whenGetEmployees_thenEmptyList() throws SQLException { + assertEquals(0, employeeDao.findAll().size()); + } + + public void setLogger(Logger logger) { + this.logger = logger; + } + +} diff --git a/junit5/src/test/java/com/baeldung/TestLauncher.java b/junit5/src/test/java/com/baeldung/TestLauncher.java new file mode 100644 index 000000000000..d0354e19a974 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/TestLauncher.java @@ -0,0 +1,37 @@ +package com.baeldung; + +import org.junit.platform.launcher.LauncherDiscoveryRequest; +import org.junit.platform.launcher.TestExecutionListener; +import org.junit.platform.launcher.TestPlan; +import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; +import org.junit.platform.launcher.core.LauncherFactory; +import org.junit.platform.launcher.listeners.SummaryGeneratingListener; + +import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass; + +import java.io.PrintWriter; + +import org.junit.platform.launcher.Launcher; + +public class TestLauncher { + public static void main(String[] args) { + + //@formatter:off + LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() + .selectors(selectClass("com.baeldung.EmployeesTest")) + .configurationParameter("junit.conditions.deactivate", "com.baeldung.extensions.*") + .configurationParameter("junit.extensions.autodetection.enabled", "true") + .build(); + + //@formatter:on + + TestPlan plan = LauncherFactory.create().discover(request); + Launcher launcher = LauncherFactory.create(); + SummaryGeneratingListener summaryGeneratingListener = new SummaryGeneratingListener(); + launcher.execute(request, new TestExecutionListener[] { summaryGeneratingListener }); + launcher.execute(request); + + summaryGeneratingListener.getSummary().printTo(new PrintWriter(System.out)); + + } +} diff --git a/junit5/src/test/java/com/baeldung/extensions/EmployeeDaoParameterResolver.java b/junit5/src/test/java/com/baeldung/extensions/EmployeeDaoParameterResolver.java new file mode 100644 index 000000000000..2626266454c2 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/extensions/EmployeeDaoParameterResolver.java @@ -0,0 +1,23 @@ +package com.baeldung.extensions; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; + +import com.baeldung.helpers.EmployeeJdbcDao; +import com.baeldung.helpers.JdbcConnectionUtil; + +public class EmployeeDaoParameterResolver implements ParameterResolver { + + @Override + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return parameterContext.getParameter().getType().equals(EmployeeJdbcDao.class); + } + + @Override + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + return new EmployeeJdbcDao(JdbcConnectionUtil.getConnection()); + } + +} diff --git a/junit5/src/test/java/com/baeldung/extensions/EmployeeDatabaseSetupExtension.java b/junit5/src/test/java/com/baeldung/extensions/EmployeeDatabaseSetupExtension.java new file mode 100644 index 000000000000..69e420b28ab6 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/extensions/EmployeeDatabaseSetupExtension.java @@ -0,0 +1,46 @@ +package com.baeldung.extensions; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Savepoint; + +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import com.baeldung.helpers.EmployeeJdbcDao; +import com.baeldung.helpers.JdbcConnectionUtil; + +public class EmployeeDatabaseSetupExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback { + + private Connection con = JdbcConnectionUtil.getConnection(); + private EmployeeJdbcDao employeeDao = new EmployeeJdbcDao(con); + private Savepoint savepoint; + + @Override + public void afterAll(ExtensionContext context) throws SQLException { + if (con != null) { + con.close(); + } + } + + @Override + public void beforeAll(ExtensionContext context) throws SQLException { + employeeDao.createTable(); + + } + + @Override + public void afterEach(ExtensionContext context) throws SQLException { + con.rollback(savepoint); + } + + @Override + public void beforeEach(ExtensionContext context) throws SQLException { + con.setAutoCommit(false); + savepoint = con.setSavepoint("before"); + } + +} diff --git a/junit5/src/test/java/com/baeldung/extensions/EnvironmentExtension.java b/junit5/src/test/java/com/baeldung/extensions/EnvironmentExtension.java new file mode 100644 index 000000000000..e2c335799bf5 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/extensions/EnvironmentExtension.java @@ -0,0 +1,27 @@ +package com.baeldung.extensions; + +import java.io.IOException; +import java.util.Properties; + +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; + +public class EnvironmentExtension implements ExecutionCondition { + + @Override + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { + Properties props = new Properties(); + + try { + props.load(EnvironmentExtension.class.getResourceAsStream("application.properties")); + String env = props.getProperty("env"); + if ("qa".equalsIgnoreCase(env)) { + return ConditionEvaluationResult.disabled("Test disabled on QA environment"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return ConditionEvaluationResult.enabled("Test enabled on QA environment"); + } +} diff --git a/junit5/src/test/java/com/baeldung/extensions/IgnoreFileNotFoundExceptionExtension.java b/junit5/src/test/java/com/baeldung/extensions/IgnoreFileNotFoundExceptionExtension.java new file mode 100644 index 000000000000..7216c68c1af7 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/extensions/IgnoreFileNotFoundExceptionExtension.java @@ -0,0 +1,23 @@ +package com.baeldung.extensions; + +import java.io.FileNotFoundException; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; + +public class IgnoreFileNotFoundExceptionExtension implements TestExecutionExceptionHandler { + + Logger logger = LogManager.getLogger(IgnoreFileNotFoundExceptionExtension.class); + + @Override + public void handleTestExecutionException(ExtensionContext context, Throwable throwable) throws Throwable { + + if (throwable instanceof FileNotFoundException) { + logger.error("File not found:" + throwable.getMessage()); + return; + } + throw throwable; + } +} diff --git a/junit5/src/test/java/com/baeldung/extensions/LoggingExtension.java b/junit5/src/test/java/com/baeldung/extensions/LoggingExtension.java new file mode 100644 index 000000000000..437c5c24ded5 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/extensions/LoggingExtension.java @@ -0,0 +1,16 @@ +package com.baeldung.extensions; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.TestInstancePostProcessor; + +public class LoggingExtension implements TestInstancePostProcessor { + + @Override + public void postProcessTestInstance(Object testInstance, ExtensionContext context) throws Exception { + Logger logger = LogManager.getLogger(testInstance.getClass()); + testInstance.getClass().getMethod("setLogger", Logger.class).invoke(testInstance, logger); + } + +} diff --git a/junit5/src/test/java/com/baeldung/helpers/EmployeeJdbcDao.java b/junit5/src/test/java/com/baeldung/helpers/EmployeeJdbcDao.java new file mode 100644 index 000000000000..7600f763cdbd --- /dev/null +++ b/junit5/src/test/java/com/baeldung/helpers/EmployeeJdbcDao.java @@ -0,0 +1,51 @@ +package com.baeldung.helpers; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EmployeeJdbcDao { + + private Connection con; + + public EmployeeJdbcDao(Connection con) { + this.con = con; + } + + public void createTable() throws SQLException { + String createQuery = "CREATE TABLE employees(id long primary key, firstName varchar(50))"; + PreparedStatement pstmt = con.prepareStatement(createQuery); + + pstmt.execute(); + } + + public void add(Employee emp) throws SQLException { + String insertQuery = "INSERT INTO employees(id, firstName) VALUES(?,?)"; + PreparedStatement pstmt = con.prepareStatement(insertQuery); + pstmt.setLong(1, emp.getId()); + pstmt.setString(2, emp.getFirstName()); + + pstmt.executeUpdate(); + + } + + public List findAll() throws SQLException { + List employees = new ArrayList<>(); + String query = "SELECT * FROM employees"; + PreparedStatement pstmt = con.prepareStatement(query); + + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + Employee emp = new Employee(rs.getLong("id"), rs.getString("firstName")); + employees.add(emp); + } + + return employees; + } +} \ No newline at end of file diff --git a/junit5/src/test/java/com/baeldung/helpers/JdbcConnectionUtil.java b/junit5/src/test/java/com/baeldung/helpers/JdbcConnectionUtil.java new file mode 100644 index 000000000000..f380f9674c6d --- /dev/null +++ b/junit5/src/test/java/com/baeldung/helpers/JdbcConnectionUtil.java @@ -0,0 +1,32 @@ +package com.baeldung.helpers; + +import java.io.IOException; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Properties; + +public class JdbcConnectionUtil { + + private static Connection con; + + public static Connection getConnection() { + if (con == null) { + try { + Properties props = new Properties(); + props.load(JdbcConnectionUtil.class.getResourceAsStream("jdbc.properties")); + Class.forName(props.getProperty("jdbc.driver")); + con = DriverManager.getConnection(props.getProperty("jdbc.url"), props.getProperty("jdbc.user"), props.getProperty("jdbc.password")); + return con; + } catch (IOException exc) { + exc.printStackTrace(); + } catch (ClassNotFoundException exc) { + exc.printStackTrace(); + } catch (SQLException exc) { + exc.printStackTrace(); + } + return null; + } + return con; + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/AnnotationTestExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit4/AnnotationTestExampleTest.java new file mode 100644 index 000000000000..fd7fd93d6648 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/AnnotationTestExampleTest.java @@ -0,0 +1,23 @@ +package com.baeldung.migration.junit4; + +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.baeldung.migration.junit4.categories.Annotations; +import com.baeldung.migration.junit4.categories.JUnit4Tests; + +@Category(value = { Annotations.class, JUnit4Tests.class }) +public class AnnotationTestExampleTest { + @Test(expected = Exception.class) + public void shouldRaiseAnException() throws Exception { + throw new Exception("This is my expected exception"); + } + + @Test(timeout = 1) + @Ignore + public void shouldFailBecauseTimeout() throws InterruptedException { + Thread.sleep(10); + } + +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/AssertionsExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit4/AssertionsExampleTest.java new file mode 100644 index 000000000000..ff2a05a8c447 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/AssertionsExampleTest.java @@ -0,0 +1,28 @@ +package com.baeldung.migration.junit4; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +public class AssertionsExampleTest { + @Test + @Ignore + public void shouldFailBecauseTheNumbersAreNotEqualld() { + assertEquals("Numbers are not equal!", 2, 3); + } + + @Test + public void shouldAssertAllTheGroup() { + List list = Arrays.asList(1, 2, 3); + assertEquals("List is not incremental", list.get(0) + .intValue(), 1); + assertEquals("List is not incremental", list.get(1) + .intValue(), 2); + assertEquals("List is not incremental", list.get(2) + .intValue(), 3); + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/RuleExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit4/RuleExampleTest.java new file mode 100644 index 000000000000..10af6a925458 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/RuleExampleTest.java @@ -0,0 +1,18 @@ +package com.baeldung.migration.junit4; + +import org.junit.Rule; +import org.junit.Test; + +import com.baeldung.migration.junit4.rules.TraceUnitTestRule; + +public class RuleExampleTest { + + @Rule + public final TraceUnitTestRule traceRuleTests = new TraceUnitTestRule(); + + @Test + public void whenTracingTests() { + System.out.println("This is my test"); + /*...*/ + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/categories/Annotations.java b/junit5/src/test/java/com/baeldung/migration/junit4/categories/Annotations.java new file mode 100644 index 000000000000..a2b1b6bdd339 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/categories/Annotations.java @@ -0,0 +1,5 @@ +package com.baeldung.migration.junit4.categories; + +public interface Annotations { + +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/categories/JUnit4Tests.java b/junit5/src/test/java/com/baeldung/migration/junit4/categories/JUnit4Tests.java new file mode 100644 index 000000000000..6af63d58ab42 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/categories/JUnit4Tests.java @@ -0,0 +1,5 @@ +package com.baeldung.migration.junit4.categories; + +public interface JUnit4Tests { + +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit4/rules/TraceUnitTestRule.java b/junit5/src/test/java/com/baeldung/migration/junit4/rules/TraceUnitTestRule.java new file mode 100644 index 000000000000..5c993f17fd05 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit4/rules/TraceUnitTestRule.java @@ -0,0 +1,35 @@ +package com.baeldung.migration.junit4.rules; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.MultipleFailureException; +import org.junit.runners.model.Statement; + +public class TraceUnitTestRule implements TestRule { + + @Override + public Statement apply(Statement base, Description description) { + + return new Statement() { + @Override + public void evaluate() throws Throwable { + List errors = new ArrayList(); + + System.out.println("Starting test ... " + description.getMethodName()); + try { + base.evaluate(); + } catch (Throwable e) { + errors.add(e); + } finally { + System.out.println("... test finished. " + description.getMethodName()); + } + + MultipleFailureException.assertEmpty(errors); + } + }; + } + +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit5/AnnotationTestExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit5/AnnotationTestExampleTest.java new file mode 100644 index 000000000000..07d8ae64e440 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit5/AnnotationTestExampleTest.java @@ -0,0 +1,28 @@ +package com.baeldung.migration.junit5; + +import java.time.Duration; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.runner.RunWith; + +@Tag("annotations") +@Tag("junit5") +@RunWith(JUnitPlatform.class) +public class AnnotationTestExampleTest { + @Test + public void shouldRaiseAnException() throws Exception { + Assertions.assertThrows(Exception.class, () -> { + throw new Exception("This is my expected exception"); + }); + } + + @Test + @Disabled + public void shouldFailBecauseTimeout() throws InterruptedException { + Assertions.assertTimeout(Duration.ofMillis(1), () -> Thread.sleep(10)); + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit5/AssertionsExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit5/AssertionsExampleTest.java new file mode 100644 index 000000000000..642b7371debf --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit5/AssertionsExampleTest.java @@ -0,0 +1,39 @@ +package com.baeldung.migration.junit5; + +import java.util.Arrays; +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.runner.RunWith; + +@RunWith(JUnitPlatform.class) +public class AssertionsExampleTest { + @Test + @Disabled + public void shouldFailBecauseTheNumbersAreNotEqual() { + Assertions.assertEquals(2, 3, "Numbers are not equal!"); + } + + @Test + @Disabled + public void shouldFailBecauseItsNotTrue_overloading() { + Assertions.assertTrue(() -> { + return false; + }, () -> "It's not true!"); + } + + @Test + public void shouldAssertAllTheGroup() { + List list = Arrays.asList(1, 2, 3); + + Assertions.assertAll("List is not incremental", () -> Assertions.assertEquals(list.get(0) + .intValue(), 1), + () -> Assertions.assertEquals(list.get(1) + .intValue(), 2), + () -> Assertions.assertEquals(list.get(2) + .intValue(), 3)); + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit5/RuleExampleTest.java b/junit5/src/test/java/com/baeldung/migration/junit5/RuleExampleTest.java new file mode 100644 index 000000000000..a05360250bc0 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit5/RuleExampleTest.java @@ -0,0 +1,19 @@ +package com.baeldung.migration.junit5; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.platform.runner.JUnitPlatform; +import org.junit.runner.RunWith; + +import com.baeldung.migration.junit5.extensions.TraceUnitExtension; + +@RunWith(JUnitPlatform.class) +@ExtendWith(TraceUnitExtension.class) +public class RuleExampleTest { + + @Test + public void whenTracingTests() { + System.out.println("This is my test"); + /*...*/ + } +} diff --git a/junit5/src/test/java/com/baeldung/migration/junit5/extensions/TraceUnitExtension.java b/junit5/src/test/java/com/baeldung/migration/junit5/extensions/TraceUnitExtension.java new file mode 100644 index 000000000000..db5d3e25738d --- /dev/null +++ b/junit5/src/test/java/com/baeldung/migration/junit5/extensions/TraceUnitExtension.java @@ -0,0 +1,19 @@ +package com.baeldung.migration.junit5.extensions; + +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +public class TraceUnitExtension implements AfterEachCallback, BeforeEachCallback { + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + System.out.println("Starting test ... " + context.getDisplayName()); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + System.out.println("... test finished. " + context.getDisplayName()); + } + +} diff --git a/junit5/src/test/java/com/baeldung/suites/AllTests.java b/junit5/src/test/java/com/baeldung/suites/AllTests.java index 24af1e733b45..69f28373ebca 100644 --- a/junit5/src/test/java/com/baeldung/suites/AllTests.java +++ b/junit5/src/test/java/com/baeldung/suites/AllTests.java @@ -1,7 +1,11 @@ package com.baeldung.suites; -//@RunWith(JUnitPlatform.class) -//@SelectPackages("com.baeldung") +import org.junit.platform.runner.JUnitPlatform; +import org.junit.platform.suite.api.SelectPackages; +import org.junit.runner.RunWith; + +@RunWith(JUnitPlatform.class) +@SelectPackages("com.baeldung") //@SelectClasses({AssertionTest.class, AssumptionTest.class, ExceptionTest.class}) public class AllTests { diff --git a/junit5/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/junit5/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension new file mode 100644 index 000000000000..6bd0136b962b --- /dev/null +++ b/junit5/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension @@ -0,0 +1 @@ +com.baeldung.extensions.EmployeeDaoParameterResolver \ No newline at end of file diff --git a/junit5/src/test/resources/com/baeldung/extensions/application.properties b/junit5/src/test/resources/com/baeldung/extensions/application.properties new file mode 100644 index 000000000000..601f964ff3b7 --- /dev/null +++ b/junit5/src/test/resources/com/baeldung/extensions/application.properties @@ -0,0 +1 @@ +env=dev \ No newline at end of file diff --git a/junit5/src/test/resources/com/baeldung/helpers/jdbc.properties b/junit5/src/test/resources/com/baeldung/helpers/jdbc.properties new file mode 100644 index 000000000000..8783ea237526 --- /dev/null +++ b/junit5/src/test/resources/com/baeldung/helpers/jdbc.properties @@ -0,0 +1,5 @@ +#h2 db +jdbc.driver=org.h2.Driver +jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 +jdbc.user=sa +jdbc.password= \ No newline at end of file diff --git a/kotlin-mockito/README.md b/kotlin-mockito/README.md deleted file mode 100644 index 1408bc1ebdb5..000000000000 --- a/kotlin-mockito/README.md +++ /dev/null @@ -1,8 +0,0 @@ -## Relevant articles: - -- [Introduction to the Kotlin Language](http://www.baeldung.com/kotlin) -- [A guide to the “when{}” block in Kotlin](http://www.baeldung.com/kotlin-when) -- [Comprehensive Guide to Null Safety in Kotlin](http://www.baeldung.com/kotlin-null-safety) -- [Kotlin Java Interoperability](http://www.baeldung.com/kotlin-java-interoperability) -- [Difference Between “==” and “===” in Kotlin](http://www.baeldung.com/kotlin-equality-operators) -- [Generics in Kotlin](http://www.baeldung.com/kotlin-generics) diff --git a/kotlin-mockito/pom.xml b/kotlin-mockito/pom.xml deleted file mode 100644 index abb43f41092d..000000000000 --- a/kotlin-mockito/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - 4.0.0 - - kotlin-mockito - 1.0-SNAPSHOT - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - org.jetbrains.kotlin - kotlin-stdlib - ${kotlin.version} - - - org.mockito - mockito-core - ${mockito.version} - test - - - junit - junit - ${junit.version} - test - - - com.nhaarman - mockito-kotlin - ${mockito-kotlin.version} - test - - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/test/kotlin - - - - kotlin-maven-plugin - org.jetbrains.kotlin - ${kotlin.version} - - - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler.version} - - - - default-compile - none - - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - - - - 2.8.9 - 4.12 - 1.1.2-4 - 1.5.0 - 3.5.1 - - - diff --git a/kotlin-mockito/src/main/java/com/baeldung/java/ArrayExample.java b/kotlin-mockito/src/main/java/com/baeldung/java/ArrayExample.java deleted file mode 100644 index ef91db517b50..000000000000 --- a/kotlin-mockito/src/main/java/com/baeldung/java/ArrayExample.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.java; - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; - -public class ArrayExample { - - public int sumValues(int[] nums) { - int res = 0; - - for (int x:nums) { - res += x; - } - - return res; - } - - public void writeList() throws IOException { - File file = new File("E://file.txt"); - FileReader fr = new FileReader(file); - fr.close(); - } -} diff --git a/kotlin-mockito/src/main/java/com/baeldung/java/Customer.java b/kotlin-mockito/src/main/java/com/baeldung/java/Customer.java deleted file mode 100644 index 0156bf7b4486..000000000000 --- a/kotlin-mockito/src/main/java/com/baeldung/java/Customer.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.java; - -public class Customer { - - private String firstName; - private String lastName; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - -} diff --git a/kotlin-mockito/src/main/java/com/baeldung/java/StringUtils.java b/kotlin-mockito/src/main/java/com/baeldung/java/StringUtils.java deleted file mode 100644 index f405924cdfd9..000000000000 --- a/kotlin-mockito/src/main/java/com/baeldung/java/StringUtils.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.java; - -public class StringUtils { - public static String toUpperCase(String name) { - return name.toUpperCase(); - } -} diff --git a/kotlin-mockito/src/test/java/com/baeldung/kotlin/JavaCallToKotlinUnitTest.java b/kotlin-mockito/src/test/java/com/baeldung/kotlin/JavaCallToKotlinUnitTest.java deleted file mode 100644 index 370f24785a98..000000000000 --- a/kotlin-mockito/src/test/java/com/baeldung/kotlin/JavaCallToKotlinUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.kotlin; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class JavaCallToKotlinUnitTest { - @Test - public void givenKotlinClass_whenCallFromJava_shouldProduceResults() { - //when - int res = new MathematicsOperations().addTwoNumbers(2, 4); - - //then - assertEquals(6, res); - - } -} diff --git a/kotlin/README.md b/kotlin/README.md index 1408bc1ebdb5..6b3fb93dccc6 100644 --- a/kotlin/README.md +++ b/kotlin/README.md @@ -6,3 +6,4 @@ - [Kotlin Java Interoperability](http://www.baeldung.com/kotlin-java-interoperability) - [Difference Between “==” and “===” in Kotlin](http://www.baeldung.com/kotlin-equality-operators) - [Generics in Kotlin](http://www.baeldung.com/kotlin-generics) +- [Introduction to Kotlin Coroutines](http://www.baeldung.com/kotlin-coroutines) diff --git a/kotlin/pom.xml b/kotlin/pom.xml index bcf5b3638546..e88013ab6902 100644 --- a/kotlin/pom.xml +++ b/kotlin/pom.xml @@ -3,7 +3,6 @@ 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 kotlin 1.0-SNAPSHOT @@ -13,7 +12,6 @@ 1.0.0-SNAPSHOT - central @@ -21,7 +19,6 @@ - org.jetbrains.kotlin @@ -45,9 +42,14 @@ kotlinx-coroutines-core ${kotlinx.version} + + com.nhaarman + mockito-kotlin + ${mockito-kotlin.version} + test + - @@ -123,6 +125,7 @@ 1.1.2 1.1.2 0.15 + 1.5.0 \ No newline at end of file diff --git a/kotlin/src/main/java/com/baeldung/dataclass/Movie.java b/kotlin/src/main/java/com/baeldung/dataclass/Movie.java new file mode 100644 index 000000000000..7eac98fe2aa6 --- /dev/null +++ b/kotlin/src/main/java/com/baeldung/dataclass/Movie.java @@ -0,0 +1,88 @@ +package com.baeldung.dataclass; + +public class Movie { + + private String name; + private String studio; + private float rating; + + public Movie(String name, String studio, float rating) { + this.name = name; + this.studio = studio; + this.rating = rating; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getStudio() { + return studio; + } + + public void setStudio(String studio) { + this.studio = studio; + } + + public float getRating() { + return rating; + } + + public void setRating(float rating) { + this.rating = rating; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + + result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + Float.floatToIntBits(rating); + result = prime * result + ((studio == null) ? 0 : studio.hashCode()); + + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + + if (obj == null) + return false; + + if (getClass() != obj.getClass()) + return false; + + Movie other = (Movie) obj; + + if (name == null) { + if (other.name != null) + return false; + + } else if (!name.equals(other.name)) + return false; + + if (Float.floatToIntBits(rating) != Float.floatToIntBits(other.rating)) + return false; + + if (studio == null) { + if (other.studio != null) + return false; + + } else if (!studio.equals(other.studio)) + return false; + + return true; + } + + @Override + public String toString() { + return "Movie [name=" + name + ", studio=" + studio + ", rating=" + rating + "]"; + } +} \ No newline at end of file diff --git a/kotlin/src/main/java/com/baeldung/lazy/ClassWithHeavyInitialization.java b/kotlin/src/main/java/com/baeldung/lazy/ClassWithHeavyInitialization.java new file mode 100644 index 000000000000..273749e17e0a --- /dev/null +++ b/kotlin/src/main/java/com/baeldung/lazy/ClassWithHeavyInitialization.java @@ -0,0 +1,14 @@ +package com.baeldung.lazy; + +public class ClassWithHeavyInitialization { + private ClassWithHeavyInitialization() { + } + + private static class LazyHolder { + public static final ClassWithHeavyInitialization INSTANCE = new ClassWithHeavyInitialization(); + } + + public static ClassWithHeavyInitialization getInstance() { + return LazyHolder.INSTANCE; + } +} \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt b/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt new file mode 100644 index 000000000000..c0c15b251640 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/dataclass/Movie.kt @@ -0,0 +1,3 @@ +package com.baeldung.dataclass + +data class Movie(val name: String, val studio: String, var rating: Float) \ No newline at end of file diff --git a/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt b/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt new file mode 100644 index 000000000000..d47909bf29e1 --- /dev/null +++ b/kotlin/src/main/kotlin/com/baeldung/dataclass/Sandbox.kt @@ -0,0 +1,26 @@ +package com.baeldung.dataclass + +fun main(args: Array) { + + val movie = Movie("Whiplash", "Sony Pictures", 8.5F) + + println(movie.name) //Whiplash + println(movie.studio) //Sony Pictures + println(movie.rating) //8.5 + + movie.rating = 9F + + println(movie.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.0) + + val betterRating = movie.copy(rating = 9.5F) + println(betterRating.toString()) //Movie(name=Whiplash, studio=Sony Pictures, rating=9.5) + + movie.component1() //name + movie.component2() //studio + movie.component3() //rating + + val(name, studio, rating) = movie + + fun getMovieInfo() = movie + val(namef, studiof, ratingf) = getMovieInfo() +} \ No newline at end of file diff --git a/kotlin-mockito/src/main/kotlin/com/baeldung/kotlin/BookService.kt b/kotlin/src/main/kotlin/com/baeldung/kotlin/mockito/BookService.kt similarity index 100% rename from kotlin-mockito/src/main/kotlin/com/baeldung/kotlin/BookService.kt rename to kotlin/src/main/kotlin/com/baeldung/kotlin/mockito/BookService.kt diff --git a/kotlin-mockito/src/main/kotlin/com/baeldung/kotlin/LendBookManager.kt b/kotlin/src/main/kotlin/com/baeldung/kotlin/mockito/LendBookManager.kt similarity index 100% rename from kotlin-mockito/src/main/kotlin/com/baeldung/kotlin/LendBookManager.kt rename to kotlin/src/main/kotlin/com/baeldung/kotlin/mockito/LendBookManager.kt diff --git a/kotlin/src/test/java/com/baeldung/kotlin/LazyJavaUnitTest.java b/kotlin/src/test/java/com/baeldung/kotlin/LazyJavaUnitTest.java new file mode 100644 index 000000000000..e2fe58d5374f --- /dev/null +++ b/kotlin/src/test/java/com/baeldung/kotlin/LazyJavaUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.kotlin; + + +import com.baeldung.lazy.ClassWithHeavyInitialization; +import org.junit.Test; + +import static junit.framework.TestCase.assertTrue; + +public class LazyJavaUnitTest { + + @Test + public void giveHeavyClass_whenInitLazy_thenShouldReturnInstanceOnFirstCall() { + //when + ClassWithHeavyInitialization classWithHeavyInitialization = ClassWithHeavyInitialization.getInstance(); + ClassWithHeavyInitialization classWithHeavyInitialization2 = ClassWithHeavyInitialization.getInstance(); + + //then + assertTrue(classWithHeavyInitialization == classWithHeavyInitialization2); + } +} diff --git a/kotlin/src/test/kotlin/com/baeldung/kotlin/CollectionsTest.kt b/kotlin/src/test/kotlin/com/baeldung/kotlin/CollectionsTest.kt new file mode 100644 index 000000000000..59d6adccac89 --- /dev/null +++ b/kotlin/src/test/kotlin/com/baeldung/kotlin/CollectionsTest.kt @@ -0,0 +1,146 @@ +package com.baeldung.kotlin + +import org.junit.Test +import kotlin.test.assertTrue +import kotlin.test.assertFalse +import kotlin.test.assertEquals + +class CollectionsTest { + + @Test + fun whenUseDifferentCollections_thenSuccess () { + val theList = listOf("one", "two", "three") + assertTrue(theList.contains("two")) + + val theMutableList = mutableListOf("one", "two", "three") + theMutableList.add("four") + assertTrue(theMutableList.contains("four")) + + val theSet = setOf("one", "two", "three") + assertTrue(theSet.contains("three")) + + val theMutableSet = mutableSetOf("one", "two", "three") + theMutableSet.add("four") + assertTrue(theMutableSet.contains("four")) + + val theMap = mapOf(1 to "one", 2 to "two", 3 to "three") + assertEquals(theMap[2],"two") + + val theMutableMap = mutableMapOf(1 to "one", 2 to "two", 3 to "three") + theMutableMap[4] = "four" + assertEquals(theMutableMap[4],"four") + } + + @Test + fun whenSliceCollection_thenSuccess () { + val theList = listOf("one", "two", "three") + val resultList = theList.slice(1..2) + + assertEquals(2, resultList.size) + assertTrue(resultList.contains("two")) + } + + @Test + fun whenJoinTwoCollections_thenSuccess () { + val firstList = listOf("one", "two", "three") + val secondList = listOf("four", "five", "six") + val resultList = firstList + secondList + + assertEquals(6, resultList.size) + assertTrue(resultList.contains("two")) + assertTrue(resultList.contains("five")) + } + + @Test + fun whenFilterNullValues_thenSuccess () { + val theList = listOf("one", null, "two", null, "three") + val resultList = theList.filterNotNull() + + assertEquals(3, resultList.size) + } + + @Test + fun whenFilterNonPositiveValues_thenSuccess () { + val theList = listOf(1, 2, -3, -4, 5, -6) + val resultList = theList.filter{ it > 0} + //val resultList = theList.filter{ x -> x > 0} + + assertEquals(3, resultList.size) + assertTrue(resultList.contains(1)) + assertFalse(resultList.contains(-4)) + } + + @Test + fun whenDropFirstItems_thenRemoved () { + val theList = listOf("one", "two", "three", "four") + val resultList = theList.drop(2) + + assertEquals(2, resultList.size) + assertFalse(resultList.contains("one")) + assertFalse(resultList.contains("two")) + } + + @Test + fun whenDropFirstItemsBasedOnCondition_thenRemoved () { + val theList = listOf("one", "two", "three", "four") + val resultList = theList.dropWhile{ it.length < 4 } + + assertEquals(2, resultList.size) + assertFalse(resultList.contains("one")) + assertFalse(resultList.contains("two")) + } + + @Test + fun whenExcludeItems_thenRemoved () { + val firstList = listOf("one", "two", "three") + val secondList = listOf("one", "three") + val resultList = firstList - secondList + + assertEquals(1, resultList.size) + assertTrue(resultList.contains("two")) + } + + @Test + fun whenSearchForExistingItem_thenFound () { + val theList = listOf("one", "two", "three") + + assertTrue("two" in theList) + } + + @Test + fun whenGroupItems_thenSuccess () { + val theList = listOf(1, 2, 3, 4, 5, 6) + val resultMap = theList.groupBy{ it % 3} + + assertEquals(3, resultMap.size) + print(resultMap[1]) + assertTrue(resultMap[1]!!.contains(1)) + assertTrue(resultMap[2]!!.contains(5)) + } + + @Test + fun whenApplyFunctionToAllItems_thenSuccess () { + val theList = listOf(1, 2, 3, 4, 5, 6) + val resultList = theList.map{ it * it } + print(resultList) + assertEquals(4, resultList[1]) + assertEquals(9, resultList[2]) + } + + @Test + fun whenApplyMultiOutputFunctionToAllItems_thenSuccess () { + val theList = listOf("John", "Tom") + val resultList = theList.flatMap{ it.toLowerCase().toList()} + print(resultList) + assertEquals(7, resultList.size) + assertTrue(resultList.contains('j')) + } + + @Test + fun whenApplyFunctionToAllItemsWithStartingValue_thenSuccess () { + val theList = listOf(1, 2, 3, 4, 5, 6) + val finalResult = theList.fold( 1000, { oldResult, currentItem -> oldResult + (currentItem *currentItem)}) + print(finalResult) + assertEquals(1091, finalResult) + } +} \ No newline at end of file diff --git a/kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt b/kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt new file mode 100644 index 000000000000..9e4179f4fefc --- /dev/null +++ b/kotlin/src/test/kotlin/com/baeldung/kotlin/LazyUnitTest.kt @@ -0,0 +1,68 @@ +package com.baeldung.kotlin + +import org.junit.Test +import java.util.concurrent.CountDownLatch +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger +import kotlin.test.assertEquals + +class LazyUnitTest { + @Test + fun givenLazyValue_whenGetIt_thenShouldInitializeItOnlyOnce() { + //given + val numberOfInitializations: AtomicInteger = AtomicInteger() + val lazyValue: ClassWithHeavyInitialization by lazy { + numberOfInitializations.incrementAndGet() + ClassWithHeavyInitialization() + } + //when + println(lazyValue) + println(lazyValue) + + //then + assertEquals(numberOfInitializations.get(), 1) + } + + @Test + fun givenLazyValue_whenGetItUsingPublication_thenCouldInitializeItMoreThanOnce() { + //given + val numberOfInitializations: AtomicInteger = AtomicInteger() + val lazyValue: ClassWithHeavyInitialization by lazy(LazyThreadSafetyMode.PUBLICATION) { + numberOfInitializations.incrementAndGet() + ClassWithHeavyInitialization() + } + val executorService = Executors.newFixedThreadPool(2) + val countDownLatch = CountDownLatch(1) + //when + executorService.submit { countDownLatch.await(); println(lazyValue) } + executorService.submit { countDownLatch.await(); println(lazyValue) } + countDownLatch.countDown() + + //then + executorService.awaitTermination(1, TimeUnit.SECONDS) + executorService.shutdown() + assertEquals(numberOfInitializations.get(), 2) + } + + class ClassWithHeavyInitialization { + + } + + + lateinit var a: String + @Test + fun givenLateInitProperty_whenAccessItAfterInit_thenPass() { + //when + a = "it" + println(a) + + //then not throw + } + + @Test(expected = UninitializedPropertyAccessException::class) + fun givenLateInitProperty_whenAccessItWithoutInit_thenThrow() { + //when + println(a) + } +} \ No newline at end of file diff --git a/kotlin/src/test/kotlin/com/baeldung/kotlin/ListToMapTest.kt b/kotlin/src/test/kotlin/com/baeldung/kotlin/ListToMapTest.kt new file mode 100644 index 000000000000..e3477931bb24 --- /dev/null +++ b/kotlin/src/test/kotlin/com/baeldung/kotlin/ListToMapTest.kt @@ -0,0 +1,74 @@ +package com.baeldung.kotlin + +import org.junit.Test +import kotlin.test.assertTrue + +class ListToMapTest { + + val user1 = User("John", 18, listOf("Hiking, Swimming")) + val user2 = User("Sara", 25, listOf("Chess, Board Games")) + val user3 = User("Dave", 34, listOf("Games, Racing sports")) + val user4 = User("John", 30, listOf("Reading, Poker")) + + @Test + fun givenList_whenConvertToMap_thenResult() { + val myList = listOf(user1, user2, user3) + val myMap = myList.map { it.name to it.age }.toMap() + + assertTrue(myMap.get("John") == 18) + } + + @Test + fun givenList_whenAssociatedBy_thenResult() { + val myList = listOf(user1, user2, user3) + val myMap = myList.associateBy({ it.name }, { it.hobbies }) + + assertTrue(myMap.get("John")!!.contains("Hiking, Swimming")) + } + + @Test + fun givenStringList_whenConvertToMap_thenResult() { + val myList = listOf("a", "b", "c") + val myMap = myList.map { it to it }.toMap() + + assertTrue(myMap.get("a") == "a") + } + + @Test + fun givenStringList_whenAssociate_thenResult() { + val myList = listOf("a", "b", "c", "c", "b") + val myMap = myList.associate{ it to it } + + assertTrue(myMap.get("a") == "a") + } + + @Test + fun givenStringList_whenAssociateTo_thenResult() { + val myList = listOf("a", "b", "c", "c", "b") + val myMap = mutableMapOf() + + myList.associateTo(myMap) {it to it} + + assertTrue(myMap.get("a") == "a") + } + + @Test + fun givenStringList_whenAssociateByTo_thenResult() { + val myList = listOf(user1, user2, user3, user4) + val myMap = mutableMapOf() + + myList.associateByTo(myMap, {it.name}, {it.age}) + + assertTrue(myMap.get("Dave") == 34) + } + + @Test + fun givenStringList_whenAssociateByToUser_thenResult() { + val myList = listOf(user1, user2, user3, user4) + val myMap = mutableMapOf() + + myList.associateByTo(myMap) {it.name} + + assertTrue(myMap.get("Dave")!!.age == 34) + } +} \ No newline at end of file diff --git a/kotlin-mockito/src/test/kotlin/com/baeldung/kotlin/LendBookManagerTest.kt b/kotlin/src/test/kotlin/com/baeldung/kotlin/mockito/LendBookManagerTest.kt similarity index 100% rename from kotlin-mockito/src/test/kotlin/com/baeldung/kotlin/LendBookManagerTest.kt rename to kotlin/src/test/kotlin/com/baeldung/kotlin/mockito/LendBookManagerTest.kt diff --git a/kotlin-mockito/src/test/kotlin/com/baeldung/kotlin/LendBookManagerTestMockitoKotlin.kt b/kotlin/src/test/kotlin/com/baeldung/kotlin/mockito/LendBookManagerTestMockitoKotlin.kt similarity index 100% rename from kotlin-mockito/src/test/kotlin/com/baeldung/kotlin/LendBookManagerTestMockitoKotlin.kt rename to kotlin/src/test/kotlin/com/baeldung/kotlin/mockito/LendBookManagerTestMockitoKotlin.kt diff --git a/libraries/OpenNLP/PartOfSpeechTag.txt b/libraries/OpenNLP/PartOfSpeechTag.txt deleted file mode 100644 index fdd8238ec450..000000000000 --- a/libraries/OpenNLP/PartOfSpeechTag.txt +++ /dev/null @@ -1 +0,0 @@ -Out of the night that covers me \ No newline at end of file diff --git a/libraries/OpenNLP/doc-cat.train b/libraries/OpenNLP/doc-cat.train deleted file mode 100644 index c457221ec698..000000000000 --- a/libraries/OpenNLP/doc-cat.train +++ /dev/null @@ -1,10 +0,0 @@ -GOOD good morning / -GOOD good evening / -GOOD have a good day / -GOOD nice party! / -GOOD fine pants / -BAD nightmare volcano in the sea / -BAD darkest sky / -BAD greed and waste / -BAD army attacks / -BAD bomb explodes / \ No newline at end of file diff --git a/libraries/OpenNLP/en-chunker.bin b/libraries/OpenNLP/en-chunker.bin deleted file mode 100644 index 65d935688867..000000000000 Binary files a/libraries/OpenNLP/en-chunker.bin and /dev/null differ diff --git a/libraries/OpenNLP/en-ner-location.bin b/libraries/OpenNLP/en-ner-location.bin deleted file mode 100644 index f3788bc1f613..000000000000 Binary files a/libraries/OpenNLP/en-ner-location.bin and /dev/null differ diff --git a/libraries/OpenNLP/en-ner-person.bin b/libraries/OpenNLP/en-ner-person.bin deleted file mode 100644 index 2f68318203f2..000000000000 Binary files a/libraries/OpenNLP/en-ner-person.bin and /dev/null differ diff --git a/libraries/OpenNLP/en-pos-maxent.bin b/libraries/OpenNLP/en-pos-maxent.bin deleted file mode 100644 index c8cae23c5f88..000000000000 Binary files a/libraries/OpenNLP/en-pos-maxent.bin and /dev/null differ diff --git a/libraries/OpenNLP/en-sent.bin b/libraries/OpenNLP/en-sent.bin deleted file mode 100644 index e89076be5ab2..000000000000 Binary files a/libraries/OpenNLP/en-sent.bin and /dev/null differ diff --git a/libraries/OpenNLP/en-token.bin b/libraries/OpenNLP/en-token.bin deleted file mode 100644 index c417277ca704..000000000000 Binary files a/libraries/OpenNLP/en-token.bin and /dev/null differ diff --git a/libraries/README.md b/libraries/README.md index 293e11cf0c61..7970c0e99ec1 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -12,13 +12,20 @@ - [Introduction to Apache Commons Math](http://www.baeldung.com/apache-commons-math) - [Intro to JaVer](http://www.baeldung.com/serenity-bdd) - [Introduction to Netty](http://www.baeldung.com/netty) +- [Merging Streams in Java](http://www.baeldung.com/java-merge-streams) +- [Serenity BDD and Screenplay](http://www.baeldung.com/serenity-screenplay) +- [Introduction to Quartz](http://www.baeldung.com/quartz) +- [How to Warm Up the JVM](http://www.baeldung.com/java-jvm-warmup) +- [Apache Commons Collections SetUtils](http://www.baeldung.com/apache-commons-setutils) - [Guide to Java Data Objects](http://www.baeldung.com/jdo) - [Software Transactional Memory in Java Using Multiverse](http://www.baeldung.com/java-multiverse-stm) - [Introduction to HikariCP](http://www.baeldung.com/hikaricp) - [Serenity BDD with Spring and JBehave](http://www.baeldung.com/serenity-spring-jbehave) - [Locality-Sensitive Hashing in Java Using Java-LSH](http://www.baeldung.com/locality-sensitive-hashing) - [Apache Commons Collections OrderedMap](http://www.baeldung.com/apache-commons-ordered-map) - +- [A Guide to Apache Commons DbUtils](http://www.baeldung.com/apache-commons-dbutils) +- [Introduction to Awaitility](http://www.baeldung.com/awaitlity-testing) +- [Guide to the HyperLogLog Algorithm](http://www.baeldung.com/java-hyperloglog) The libraries module contains examples related to small libraries that are relatively easy to use and does not require any separate module of its own. diff --git a/libraries/pom.xml b/libraries/pom.xml index ee5fb2f977df..16f70cb17194 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -59,7 +59,8 @@ ${basedir}/datanucleus.properties ${basedir}/log4j.properties true - false + false + @@ -70,9 +71,78 @@ + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + false + WEB-INF/classes/VAADIN/widgetsets/WEB-INF/** + + + + com.vaadin + vaadin-maven-plugin + ${vaadin.plugin.version} + + + + update-theme + update-widgetset + compile + compile-theme + + + + + + org.apache.maven.plugins + maven-clean-plugin + 3.0.0 + + + + src/main/webapp/VAADIN/themes + + **/styles.css + **/styles.scss.cache + + + + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.version} + + 2 + true + + + - + + + + vaadin-addons + http://maven.vaadin.com/vaadin-addons + + + + + + com.vaadin + vaadin-bom + ${vaadin.version} + pom + import + + + + @@ -157,6 +227,16 @@ commons-io ${commons.io.version} + + commons-chain + commons-chain + ${commons-chain.version} + + + commons-dbutils + commons-dbutils + ${commons.dbutils.version} + org.apache.flink flink-core @@ -256,6 +336,11 @@ datanucleus-xml 5.0.0-release + + net.openhft + chronicle + 3.6.4 + org.springframework spring-web @@ -299,7 +384,7 @@ com.h2database h2 - 1.4.195 + ${h2.version} pl.pragmatists @@ -338,12 +423,6 @@ netty-all ${netty.version} - - - org.apache.opennlp - opennlp-tools - 1.8.0 - junit junit @@ -366,6 +445,105 @@ groovy-all 2.4.10 + + org.awaitility + awaitility + ${awaitility.version} + test + + + org.awaitility + awaitility-proxy + ${awaitility.version} + test + + + org.hamcrest + java-hamcrest + ${org.hamcrest.java-hamcrest.version} + test + + + + com.vaadin + vaadin-server + + + com.vaadin + vaadin-client-compiled + + + com.vaadin + vaadin-themes + + + com.vaadin + vaadin-push + + + org.seleniumhq.selenium + selenium-java + test + 3.4.0 + + + org.seleniumhq.selenium + htmlunit-driver + 2.27 + + + org.eclipse.jetty.websocket + websocket-server + ${jetty.version} + + + org.eclipse.jetty.websocket + websocket-client + ${jetty.version} + + + org.eclipse.jetty.websocket + websocket-api + ${jetty.version} + + + org.eclipse.jetty.websocket + websocket-common + ${jetty.version} + + + org.eclipse.jetty + jetty-continuation + ${jetty.version} + + + org.eclipse.jetty + jetty-util + ${jetty.version} + + + org.seleniumhq.selenium + selenium-api + 3.4.0 + test + jar + + + + net.agkn + hll + ${hll.version} + + + net.bytebuddy + byte-buddy + ${bytebuddy.version} + + + net.bytebuddy + byte-buddy-agent + ${bytebuddy.version} + 0.7.0 @@ -373,6 +551,7 @@ 3.5 1.1 1.9.3 + 1.2 1.9.2 1.2 3.21.0-GA @@ -382,6 +561,8 @@ 9.4.3.v20170317 4.5.3 2.5 + 1.6 + 1.4.196 9.4.2.v20170220 4.5.3 2.5 @@ -397,6 +578,56 @@ 4.12 0.10 3.5.0 + 3.0.0 + 2.0.0.0 + + 7.7.10 + 8.0.6 + mytheme + + 1.6.0 + 1.7.1 - + + + + vaadin-prerelease + + false + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + vaadin-prereleases + http://maven.vaadin.com/vaadin-prereleases + + + vaadin-snapshots + https://oss.sonatype.org/content/repositories/vaadin-snapshots/ + + false + + + true + + + + + + diff --git a/libraries/src/main/java/com/baeldung/awaitility/AsyncService.java b/libraries/src/main/java/com/baeldung/awaitility/AsyncService.java new file mode 100644 index 000000000000..adfa3e1fb2c9 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/awaitility/AsyncService.java @@ -0,0 +1,52 @@ +package com.baeldung.awaitility; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicLong; + +public class AsyncService { + private final int DELAY = 1000; + private final int INIT_DELAY = 2000; + + private final AtomicLong value = new AtomicLong(0); + private final Executor executor = Executors.newFixedThreadPool(4); + private volatile boolean initialized = false; + + void initialize() { + executor.execute(() -> { + sleep(INIT_DELAY); + initialized = true; + }); + } + + boolean isInitialized() { + return initialized; + } + + void addValue(long val) { + throwIfNotInitialized(); + executor.execute(() -> { + sleep(DELAY); + value.addAndGet(val); + }); + } + + public long getValue() { + throwIfNotInitialized(); + return value.longValue(); + } + + private void sleep(int delay) { + try { + Thread.sleep(delay); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + private void throwIfNotInitialized() { + if (!initialized) { + throw new IllegalStateException("Service is not initialized"); + } + } +} diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java b/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java new file mode 100644 index 000000000000..d0362a6c92b6 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java @@ -0,0 +1,16 @@ +package com.baeldung.bytebuddy; + +import net.bytebuddy.implementation.bind.annotation.BindingPriority; + +public class Bar { + + @BindingPriority(3) + public static String sayHelloBar() { return "Holla in Bar!"; } + + @BindingPriority(2) + public static String sayBar() { return "bar"; } + + public String bar() { return Bar.class.getSimpleName() + " - Bar"; } + + +} diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java b/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java new file mode 100644 index 000000000000..4be06785b1c5 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.bytebuddy; + +public class Foo { + + public String sayHelloFoo() { return "Hello in Foo!"; } + +} diff --git a/libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java b/libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java new file mode 100644 index 000000000000..b7770e0b781c --- /dev/null +++ b/libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java @@ -0,0 +1,23 @@ +package com.baeldung.chronicle.queue; + +import java.io.IOException; + +import net.openhft.chronicle.Chronicle; +import net.openhft.chronicle.ExcerptAppender; + +public class ChronicleQueue { + + public static void writeToQueue( + Chronicle chronicle, String stringValue, int intValue, long longValue, double doubleValue) + throws IOException { + ExcerptAppender appender = chronicle.createAppender(); + appender.startExcerpt(); + appender.writeUTF(stringValue); + appender.writeInt(intValue); + appender.writeLong(longValue); + appender.writeDouble(doubleValue); + appender.finish(); + appender.close(); + } + +} diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AbstractDenominationDispenser.java b/libraries/src/main/java/com/baeldung/commons/chain/AbstractDenominationDispenser.java new file mode 100644 index 000000000000..cbcf03c7d4a4 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AbstractDenominationDispenser.java @@ -0,0 +1,23 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.Command; +import org.apache.commons.chain.Context; + +import static com.baeldung.commons.chain.AtmConstants.AMOUNT_LEFT_TO_BE_WITHDRAWN; + +public abstract class AbstractDenominationDispenser implements Command { + + @Override + public boolean execute(Context context) throws Exception { + int amountLeftToBeWithdrawn = (int) context.get(AMOUNT_LEFT_TO_BE_WITHDRAWN); + if (amountLeftToBeWithdrawn >= getDenominationValue()) { + context.put(getDenominationString(), amountLeftToBeWithdrawn / getDenominationValue()); + context.put(AMOUNT_LEFT_TO_BE_WITHDRAWN, amountLeftToBeWithdrawn % getDenominationValue()); + } + return false; + } + + protected abstract String getDenominationString(); + + protected abstract int getDenominationValue(); +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AtmCatalog.java b/libraries/src/main/java/com/baeldung/commons/chain/AtmCatalog.java new file mode 100644 index 000000000000..768517e19a93 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AtmCatalog.java @@ -0,0 +1,13 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.impl.CatalogBase; + +import static com.baeldung.commons.chain.AtmConstants.ATM_WITHDRAWAL_CHAIN; + +public class AtmCatalog extends CatalogBase { + + public AtmCatalog() { + super(); + addCommand(ATM_WITHDRAWAL_CHAIN, new AtmWithdrawalChain()); + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AtmConstants.java b/libraries/src/main/java/com/baeldung/commons/chain/AtmConstants.java new file mode 100644 index 000000000000..d9425fcfacf4 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AtmConstants.java @@ -0,0 +1,10 @@ +package com.baeldung.commons.chain; + +public class AtmConstants { + public static final String TOTAL_AMOUNT_TO_BE_WITHDRAWN = "totalAmountToBeWithdrawn"; + public static final String AMOUNT_LEFT_TO_BE_WITHDRAWN = "amountLeftToBeWithdrawn"; + public static final String NO_OF_HUNDREDS_DISPENSED = "noOfHundredsDispensed"; + public static final String NO_OF_FIFTIES_DISPENSED = "noOfFiftiesDispensed"; + public static final String NO_OF_TENS_DISPENSED = "noOfTensDispensed"; + public static final String ATM_WITHDRAWAL_CHAIN = "atmWithdrawalChain"; +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AtmRequestContext.java b/libraries/src/main/java/com/baeldung/commons/chain/AtmRequestContext.java new file mode 100644 index 000000000000..ee089705ad6b --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AtmRequestContext.java @@ -0,0 +1,52 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.impl.ContextBase; + +public class AtmRequestContext extends ContextBase { + + int totalAmountToBeWithdrawn; + int noOfHundredsDispensed; + int noOfFiftiesDispensed; + int noOfTensDispensed; + int amountLeftToBeWithdrawn; + + public int getTotalAmountToBeWithdrawn() { + return totalAmountToBeWithdrawn; + } + + public void setTotalAmountToBeWithdrawn(int totalAmountToBeWithdrawn) { + this.totalAmountToBeWithdrawn = totalAmountToBeWithdrawn; + } + + public int getNoOfHundredsDispensed() { + return noOfHundredsDispensed; + } + + public void setNoOfHundredsDispensed(int noOfHundredsDispensed) { + this.noOfHundredsDispensed = noOfHundredsDispensed; + } + + public int getNoOfFiftiesDispensed() { + return noOfFiftiesDispensed; + } + + public void setNoOfFiftiesDispensed(int noOfFiftiesDispensed) { + this.noOfFiftiesDispensed = noOfFiftiesDispensed; + } + + public int getNoOfTensDispensed() { + return noOfTensDispensed; + } + + public void setNoOfTensDispensed(int noOfTensDispensed) { + this.noOfTensDispensed = noOfTensDispensed; + } + + public int getAmountLeftToBeWithdrawn() { + return amountLeftToBeWithdrawn; + } + + public void setAmountLeftToBeWithdrawn(int amountLeftToBeWithdrawn) { + this.amountLeftToBeWithdrawn = amountLeftToBeWithdrawn; + } +} diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AtmWithdrawalChain.java b/libraries/src/main/java/com/baeldung/commons/chain/AtmWithdrawalChain.java new file mode 100644 index 000000000000..fdea5e574446 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AtmWithdrawalChain.java @@ -0,0 +1,14 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.impl.ChainBase; + +public class AtmWithdrawalChain extends ChainBase { + + public AtmWithdrawalChain() { + super(); + addCommand(new HundredDenominationDispenser()); + addCommand(new FiftyDenominationDispenser()); + addCommand(new TenDenominationDispenser()); + addCommand(new AuditFilter()); + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/AuditFilter.java b/libraries/src/main/java/com/baeldung/commons/chain/AuditFilter.java new file mode 100644 index 000000000000..973e2d498e06 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/AuditFilter.java @@ -0,0 +1,18 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.Context; +import org.apache.commons.chain.Filter; + +public class AuditFilter implements Filter { + + @Override + public boolean postprocess(Context context, Exception exception) { + // Send notification to customer & bank. + return false; + } + + @Override + public boolean execute(Context context) throws Exception { + return false; + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/FiftyDenominationDispenser.java b/libraries/src/main/java/com/baeldung/commons/chain/FiftyDenominationDispenser.java new file mode 100644 index 000000000000..f0f59597649c --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/FiftyDenominationDispenser.java @@ -0,0 +1,15 @@ +package com.baeldung.commons.chain; + +import static com.baeldung.commons.chain.AtmConstants.NO_OF_FIFTIES_DISPENSED; + +public class FiftyDenominationDispenser extends AbstractDenominationDispenser { + @Override + protected String getDenominationString() { + return NO_OF_FIFTIES_DISPENSED; + } + + @Override + protected int getDenominationValue() { + return 50; + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/HundredDenominationDispenser.java b/libraries/src/main/java/com/baeldung/commons/chain/HundredDenominationDispenser.java new file mode 100644 index 000000000000..e65d0d34c913 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/HundredDenominationDispenser.java @@ -0,0 +1,15 @@ +package com.baeldung.commons.chain; + +import static com.baeldung.commons.chain.AtmConstants.NO_OF_HUNDREDS_DISPENSED; + +public class HundredDenominationDispenser extends AbstractDenominationDispenser { + @Override + protected String getDenominationString() { + return NO_OF_HUNDREDS_DISPENSED; + } + + @Override + protected int getDenominationValue() { + return 100; + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/chain/TenDenominationDispenser.java b/libraries/src/main/java/com/baeldung/commons/chain/TenDenominationDispenser.java new file mode 100644 index 000000000000..423440bc4db7 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/chain/TenDenominationDispenser.java @@ -0,0 +1,15 @@ +package com.baeldung.commons.chain; + +import static com.baeldung.commons.chain.AtmConstants.NO_OF_TENS_DISPENSED; + +public class TenDenominationDispenser extends AbstractDenominationDispenser { + @Override + protected String getDenominationString() { + return NO_OF_TENS_DISPENSED; + } + + @Override + protected int getDenominationValue() { + return 10; + } +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java b/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java new file mode 100644 index 000000000000..a1e231ec8544 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/collectionutil/Address.java @@ -0,0 +1,47 @@ +package com.baeldung.commons.collectionutil; + +public class Address { + + private String locality; + private String city; + private String zip; + + public String getLocality() { + return locality; + } + + public void setLocality(String locality) { + this.locality = locality; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Address [locality=").append(locality).append(", city=").append(city).append(", zip=").append(zip).append("]"); + return builder.toString(); + } + + public Address(String locality, String city, String zip) { + super(); + this.locality = locality; + this.city = city; + this.zip = zip; + } + +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java b/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java new file mode 100644 index 000000000000..e22f13861e70 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/collectionutil/Customer.java @@ -0,0 +1,118 @@ +package com.baeldung.commons.collectionutil; + +public class Customer implements Comparable { + + private Integer id; + private String name; + private Long phone; + private String locality; + private String city; + private String zip; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getPhone() { + return phone; + } + + public void setPhone(Long phone) { + this.phone = phone; + } + + public String getLocality() { + return locality; + } + + public void setLocality(String locality) { + this.locality = locality; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getZip() { + return zip; + } + + public void setZip(String zip) { + this.zip = zip; + } + + public Customer(Integer id, String name, Long phone, String locality, String city, String zip) { + super(); + this.id = id; + this.name = name; + this.phone = phone; + this.locality = locality; + this.city = city; + this.zip = zip; + } + + public Customer(Integer id, String name, Long phone) { + super(); + this.id = id; + this.name = name; + this.phone = phone; + } + + public Customer(String name) { + super(); + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Customer other = (Customer) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public int compareTo(Customer o) { + return this.name.compareTo(o.getName()); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Customer [id=").append(id).append(", name=").append(name).append(", phone=").append(phone).append("]"); + return builder.toString(); + } + +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/dbutils/Email.java b/libraries/src/main/java/com/baeldung/commons/dbutils/Email.java new file mode 100644 index 000000000000..c82798d52da8 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/dbutils/Email.java @@ -0,0 +1,38 @@ +package com.baeldung.commons.dbutils; + +public class Email { + private Integer id; + private Integer employeeId; + private String address; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(Integer employeeId) { + this.employeeId = employeeId; + } + + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + @Override + public String toString() { + return "Email{" + "id=" + id + ", address=" + address + '}'; + } + +} diff --git a/libraries/src/main/java/com/baeldung/commons/dbutils/Employee.java b/libraries/src/main/java/com/baeldung/commons/dbutils/Employee.java new file mode 100644 index 000000000000..e6f34c0201d7 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/dbutils/Employee.java @@ -0,0 +1,67 @@ +package com.baeldung.commons.dbutils; + +import java.util.Date; +import java.util.List; + +public class Employee { + private Integer id; + private String firstName; + private String lastName; + private Double salary; + private Date hiredDate; + private List emails; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Double getSalary() { + return salary; + } + + public void setSalary(Double salary) { + this.salary = salary; + } + + public Date getHiredDate() { + return hiredDate; + } + + public void setHiredDate(Date hiredDate) { + this.hiredDate = hiredDate; + } + + public List getEmails() { + return emails; + } + + public void setEmails(List emails) { + this.emails = emails; + } + + @Override + public String toString() { + return "Employee{" + "id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", salary=" + salary + ", hiredDate=" + hiredDate + '}'; + } + +} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/commons/dbutils/EmployeeHandler.java b/libraries/src/main/java/com/baeldung/commons/dbutils/EmployeeHandler.java new file mode 100644 index 000000000000..6f68bafe5710 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/commons/dbutils/EmployeeHandler.java @@ -0,0 +1,45 @@ +package com.baeldung.commons.dbutils; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.dbutils.BasicRowProcessor; +import org.apache.commons.dbutils.BeanProcessor; + +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; + +public class EmployeeHandler extends BeanListHandler { + + private Connection connection; + + public EmployeeHandler(Connection con) { + super(Employee.class, new BasicRowProcessor(new BeanProcessor(getColumnsToFieldsMap()))); + this.connection = con; + } + + @Override + public List handle(ResultSet rs) throws SQLException { + List employees = super.handle(rs); + + QueryRunner runner = new QueryRunner(); + BeanListHandler handler = new BeanListHandler<>(Email.class); + String query = "SELECT * FROM email WHERE employeeid = ?"; + for (Employee employee : employees) { + List emails = runner.query(connection, query, handler, employee.getId()); + employee.setEmails(emails); + } + return employees; + } + + public static Map getColumnsToFieldsMap() { + Map columnsToFieldsMap = new HashMap<>(); + columnsToFieldsMap.put("FIRST_NAME", "firstName"); + columnsToFieldsMap.put("LAST_NAME", "lastName"); + columnsToFieldsMap.put("HIRED_DATE", "hiredDate"); + return columnsToFieldsMap; + } +} diff --git a/libraries/src/main/java/com/baeldung/jetty/JettyServer.java b/libraries/src/main/java/com/baeldung/jetty/JettyServer.java index 1033a7266dbd..364b05473a44 100644 --- a/libraries/src/main/java/com/baeldung/jetty/JettyServer.java +++ b/libraries/src/main/java/com/baeldung/jetty/JettyServer.java @@ -6,11 +6,11 @@ import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.util.thread.QueuedThreadPool; -public class JettyServer { +class JettyServer { private Server server; - public void start() throws Exception { + void start() throws Exception { int maxThreads = 100; int minThreads = 10; @@ -33,7 +33,7 @@ public void start() throws Exception { } - public void stop() throws Exception { + void stop() throws Exception { server.stop(); } } diff --git a/libraries/src/main/java/com/baeldung/junitparams/SafeAdditionUtil.java b/libraries/src/main/java/com/baeldung/junitparams/SafeAdditionUtil.java index a2c1573dcafc..60436865a939 100644 --- a/libraries/src/main/java/com/baeldung/junitparams/SafeAdditionUtil.java +++ b/libraries/src/main/java/com/baeldung/junitparams/SafeAdditionUtil.java @@ -1,8 +1,8 @@ package com.baeldung.junitparams; -public class SafeAdditionUtil { +class SafeAdditionUtil { - public int safeAdd(int a, int b) { + int safeAdd(int a, int b) { long result = ((long) a) + b; if (result > Integer.MAX_VALUE) { return Integer.MAX_VALUE; diff --git a/libraries/src/main/java/com/baeldung/netty/NettyServer.java b/libraries/src/main/java/com/baeldung/netty/NettyServer.java index b9d35859d074..319829b7b662 100644 --- a/libraries/src/main/java/com/baeldung/netty/NettyServer.java +++ b/libraries/src/main/java/com/baeldung/netty/NettyServer.java @@ -13,7 +13,7 @@ public class NettyServer { private int port; - public NettyServer(int port) { + private NettyServer(int port) { this.port = port; } @@ -27,7 +27,7 @@ public static void main(String[] args) throws Exception { new NettyServer(port).run(); } - public void run() throws Exception { + private void run() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { diff --git a/libraries/src/main/java/com/baeldung/netty/RequestData.java b/libraries/src/main/java/com/baeldung/netty/RequestData.java index e7404c166339..402aa1ef9121 100644 --- a/libraries/src/main/java/com/baeldung/netty/RequestData.java +++ b/libraries/src/main/java/com/baeldung/netty/RequestData.java @@ -4,27 +4,27 @@ public class RequestData { private int intValue; private String stringValue; - public int getIntValue() { + int getIntValue() { return intValue; } - public void setIntValue(int intValue) { + void setIntValue(int intValue) { this.intValue = intValue; } - public String getStringValue() { + String getStringValue() { return stringValue; } - public void setStringValue(String stringValue) { + void setStringValue(String stringValue) { this.stringValue = stringValue; } @Override public String toString() { return "RequestData{" + - "intValue=" + intValue + - ", stringValue='" + stringValue + '\'' + - '}'; + "intValue=" + intValue + + ", stringValue='" + stringValue + '\'' + + '}'; } } diff --git a/libraries/src/main/java/com/baeldung/netty/ResponseData.java b/libraries/src/main/java/com/baeldung/netty/ResponseData.java index ce388a9a3df4..51d1adaafb3c 100644 --- a/libraries/src/main/java/com/baeldung/netty/ResponseData.java +++ b/libraries/src/main/java/com/baeldung/netty/ResponseData.java @@ -3,11 +3,11 @@ public class ResponseData { private int intValue; - public int getIntValue() { + int getIntValue() { return intValue; } - public void setIntValue(int intValue) { + void setIntValue(int intValue) { this.intValue = intValue; } diff --git a/libraries/src/main/java/com/baeldung/netty/ResponseDataDecoder.java b/libraries/src/main/java/com/baeldung/netty/ResponseDataDecoder.java index ee33679dfe0a..16e2a61bd31d 100644 --- a/libraries/src/main/java/com/baeldung/netty/ResponseDataDecoder.java +++ b/libraries/src/main/java/com/baeldung/netty/ResponseDataDecoder.java @@ -1,11 +1,11 @@ package com.baeldung.netty; -import java.util.List; - import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ReplayingDecoder; +import java.util.List; + public class ResponseDataDecoder extends ReplayingDecoder { @Override diff --git a/libraries/src/main/java/com/baeldung/opennlp/OpenNLP.java b/libraries/src/main/java/com/baeldung/opennlp/OpenNLP.java deleted file mode 100644 index dd44e96a3a4f..000000000000 --- a/libraries/src/main/java/com/baeldung/opennlp/OpenNLP.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.baeldung.opennlp; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Arrays; -import java.util.logging.Logger; - -import opennlp.tools.chunker.ChunkerME; -import opennlp.tools.chunker.ChunkerModel; -import opennlp.tools.cmdline.postag.POSModelLoader; -import opennlp.tools.doccat.DoccatFactory; -import opennlp.tools.doccat.DoccatModel; -import opennlp.tools.doccat.DocumentCategorizerME; -import opennlp.tools.doccat.DocumentSample; -import opennlp.tools.doccat.DocumentSampleStream; -import opennlp.tools.namefind.NameFinderME; -import opennlp.tools.namefind.TokenNameFinderModel; -import opennlp.tools.postag.POSModel; -import opennlp.tools.postag.POSSample; -import opennlp.tools.postag.POSTaggerME; -import opennlp.tools.sentdetect.SentenceDetectorME; -import opennlp.tools.sentdetect.SentenceModel; -import opennlp.tools.tokenize.Tokenizer; -import opennlp.tools.tokenize.TokenizerME; -import opennlp.tools.tokenize.TokenizerModel; -import opennlp.tools.tokenize.WhitespaceTokenizer; -import opennlp.tools.util.InputStreamFactory; -import opennlp.tools.util.InvalidFormatException; -import opennlp.tools.util.ObjectStream; -import opennlp.tools.util.PlainTextByLineStream; -import opennlp.tools.util.Span; -import opennlp.tools.util.TrainingParameters; - -public class OpenNLP { - - private final static Logger LOGGER = Logger.getLogger(OpenNLP.class.getName()); - private final static String text = buildString(); - private final static String sentence[] = new String[] { "James", "Jordan", "live", "in", "Oklahoma", "city", "." }; - - private DoccatModel docCatModel; - - public static void main(String[] args) { - new OpenNLP(); - } - - public static String buildString(){ - StringBuilder sb = new StringBuilder(); - sb.append("To get to the south:"); - sb.append(" Go to the store."); - sb.append(" Buy a compass."); - sb.append(" Use the compass."); - sb.append(" Then walk to the south."); - return sb.toString(); - } - - public OpenNLP() { - try { - sentenceDetector(); - tokenizer(); - nameFinder(); - locationFinder(); - trainDocumentCategorizer(); - documentCategorizer(); - partOfSpeechTagger(); - chunker(); - } catch (InvalidFormatException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void sentenceDetector() throws InvalidFormatException, IOException { - - InputStream is = new FileInputStream("OpenNLP/en-sent.bin"); - SentenceModel model = new SentenceModel(is); - SentenceDetectorME sdetector = new SentenceDetectorME(model); - String sentences[] = sdetector.sentDetect(text); - for (String sentence : sentences) { - LOGGER.info(sentence); - } - is.close(); - } - - public void tokenizer() throws InvalidFormatException, IOException { - InputStream is = new FileInputStream("OpenNLP/en-token.bin"); - TokenizerModel model = new TokenizerModel(is); - Tokenizer tokenizer = new TokenizerME(model); - String tokens[] = tokenizer.tokenize(text); - for (String token : tokens) { - LOGGER.info(token); - } - is.close(); - } - - public static void nameFinder() throws IOException { - InputStream is = new FileInputStream("OpenNLP/en-ner-person.bin"); - TokenNameFinderModel model = new TokenNameFinderModel(is); - is.close(); - NameFinderME nameFinder = new NameFinderME(model); - Span nameSpans[] = nameFinder.find(sentence); - String[] names = Span.spansToStrings(nameSpans, sentence); - Arrays.stream(names).forEach(LOGGER::info); - for (String name : names) { - LOGGER.info(name); - } - } - - public static void locationFinder() throws IOException { - InputStream is = new FileInputStream("OpenNLP/en-ner-location.bin"); - TokenNameFinderModel model = new TokenNameFinderModel(is); - is.close(); - NameFinderME nameFinder = new NameFinderME(model); - Span locationSpans[] = nameFinder.find(sentence); - String[] locations = Span.spansToStrings(locationSpans, sentence); - Arrays.stream(locations).forEach(LOGGER::info); - for (String location : locations) { - LOGGER.info(location); - } - } - - public void trainDocumentCategorizer() { - - try { - InputStreamFactory isf = new InputStreamFactory() { - public InputStream createInputStream() throws IOException { - return new FileInputStream("OpenNLP/doc-cat.train"); - } - }; - ObjectStream lineStream = new PlainTextByLineStream(isf, "UTF-8"); - ObjectStream sampleStream = new DocumentSampleStream(lineStream); - DoccatFactory docCatFactory = new DoccatFactory(); - docCatModel = DocumentCategorizerME.train("en", sampleStream, TrainingParameters.defaultParams(), docCatFactory); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public void documentCategorizer() { - DocumentCategorizerME myCategorizer = new DocumentCategorizerME(docCatModel); - double[] outcomes = myCategorizer.categorize(sentence); - String category = myCategorizer.getBestCategory(outcomes); - - if (category.equalsIgnoreCase("GOOD")) { - LOGGER.info("Document is positive :) "); - } else { - LOGGER.info("Document is negative :( "); - } - } - - public static void partOfSpeechTagger() throws IOException { - try { - POSModel posModel = new POSModelLoader().load(new File("OpenNLP/en-pos-maxent.bin")); - POSTaggerME posTaggerME = new POSTaggerME(posModel); - InputStreamFactory isf = new InputStreamFactory() { - public InputStream createInputStream() throws IOException { - return new FileInputStream("OpenNLP/PartOfSpeechTag.txt"); - } - }; - ObjectStream lineStream = new PlainTextByLineStream(isf, "UTF-8"); - String line; - while ((line = lineStream.read()) != null) { - String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize(line); - String[] tags = posTaggerME.tag(whitespaceTokenizerLine); - POSSample posSample = new POSSample(whitespaceTokenizerLine, tags); - LOGGER.info(posSample.toString()); - } - lineStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public static void chunker() throws IOException { - InputStream is = new FileInputStream("OpenNLP/en-chunker.bin"); - ChunkerModel cModel = new ChunkerModel(is); - ChunkerME chunkerME = new ChunkerME(cModel); - String[] taggedSentence = new String[] {"Out", "of", "the", "night", "that", "covers", "me"}; - String pos[] = new String[] { "IN", "IN", "DT", "NN", "WDT", "VBZ", "PRP"}; - String chunks[] = chunkerME.chunk(taggedSentence, pos); - for (String chunk : chunks) { - LOGGER.info(chunk); - } - } - -} diff --git a/libraries/src/main/java/com/baeldung/quartz/QuartzExample.java b/libraries/src/main/java/com/baeldung/quartz/QuartzExample.java index 20853aa01bd5..4757d912f83c 100644 --- a/libraries/src/main/java/com/baeldung/quartz/QuartzExample.java +++ b/libraries/src/main/java/com/baeldung/quartz/QuartzExample.java @@ -20,44 +20,44 @@ public static void main(String args[]) { Scheduler sched = schedFact.getScheduler(); JobDetail job = JobBuilder.newJob(SimpleJob.class) - .withIdentity("myJob", "group1") - .usingJobData("jobSays", "Hello World!") - .usingJobData("myFloatValue", 3.141f) - .build(); + .withIdentity("myJob", "group1") + .usingJobData("jobSays", "Hello World!") + .usingJobData("myFloatValue", 3.141f) + .build(); Trigger trigger = TriggerBuilder.newTrigger() - .withIdentity("myTrigger", "group1") - .startNow() - .withSchedule(SimpleScheduleBuilder.simpleSchedule() - .withIntervalInSeconds(40) - .repeatForever()) - .build(); - + .withIdentity("myTrigger", "group1") + .startNow() + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInSeconds(40) + .repeatForever()) + .build(); + JobDetail jobA = JobBuilder.newJob(JobA.class) - .withIdentity("jobA", "group2") - .build(); - + .withIdentity("jobA", "group2") + .build(); + JobDetail jobB = JobBuilder.newJob(JobB.class) - .withIdentity("jobB", "group2") - .build(); - + .withIdentity("jobB", "group2") + .build(); + Trigger triggerA = TriggerBuilder.newTrigger() - .withIdentity("triggerA", "group2") - .startNow() - .withPriority(15) - .withSchedule(SimpleScheduleBuilder.simpleSchedule() - .withIntervalInSeconds(40) - .repeatForever()) - .build(); - - Trigger triggerB = TriggerBuilder.newTrigger() - .withIdentity("triggerB", "group2") - .startNow() - .withPriority(10) - .withSchedule(SimpleScheduleBuilder.simpleSchedule() - .withIntervalInSeconds(20) - .repeatForever()) - .build(); + .withIdentity("triggerA", "group2") + .startNow() + .withPriority(15) + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInSeconds(40) + .repeatForever()) + .build(); + + Trigger triggerB = TriggerBuilder.newTrigger() + .withIdentity("triggerB", "group2") + .startNow() + .withPriority(10) + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInSeconds(20) + .repeatForever()) + .build(); sched.scheduleJob(job, trigger); sched.scheduleJob(jobA, triggerA); diff --git a/libraries/src/main/java/com/baeldung/quartz/SimpleJob.java b/libraries/src/main/java/com/baeldung/quartz/SimpleJob.java index 986c5e96e579..554d3b9358f3 100644 --- a/libraries/src/main/java/com/baeldung/quartz/SimpleJob.java +++ b/libraries/src/main/java/com/baeldung/quartz/SimpleJob.java @@ -9,13 +9,11 @@ public class SimpleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap dataMap = context.getJobDetail() - .getJobDataMap(); + .getJobDataMap(); String jobSays = dataMap.getString("jobSays"); float myFloatValue = dataMap.getFloat("myFloatValue"); System.out.println("Job says: " + jobSays + ", and val is: " + myFloatValue); - } - } \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/stm/Account.java b/libraries/src/main/java/com/baeldung/stm/Account.java index 734d33230896..8b17f8712011 100644 --- a/libraries/src/main/java/com/baeldung/stm/Account.java +++ b/libraries/src/main/java/com/baeldung/stm/Account.java @@ -10,20 +10,20 @@ public class Account { private final TxnLong lastUpdate; private final TxnInteger balance; - public Account(final int balance) { + Account(final int balance) { this.lastUpdate = StmUtils.newTxnLong(System.currentTimeMillis()); this.balance = StmUtils.newTxnInteger(balance); } - public Integer getBalance() { + Integer getBalance() { return balance.atomicGet(); } - public void adjustBy(final int amount) { + void adjustBy(final int amount) { adjustBy(amount, System.currentTimeMillis()); } - public void adjustBy(final int amount, final long date) { + private void adjustBy(final int amount, final long date) { StmUtils.atomic(() -> { balance.increment(amount); lastUpdate.set(date); @@ -34,7 +34,7 @@ public void adjustBy(final int amount, final long date) { }); } - public void transferTo(final Account other, final int amount) { + void transferTo(final Account other, final int amount) { StmUtils.atomic(() -> { final long date = System.currentTimeMillis(); adjustBy(-amount, date); @@ -45,6 +45,6 @@ public void transferTo(final Account other, final int amount) { @Override public String toString() { return StmUtils.atomic((TxnCallable) - txn -> "Balance: " + balance.get(txn) + " lastUpdateDate: " + lastUpdate.get(txn)); + txn -> "Balance: " + balance.get(txn) + " lastUpdateDate: " + lastUpdate.get(txn)); } } \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/vaadin/BindData.java b/libraries/src/main/java/com/baeldung/vaadin/BindData.java new file mode 100644 index 000000000000..bcdc4eee71db --- /dev/null +++ b/libraries/src/main/java/com/baeldung/vaadin/BindData.java @@ -0,0 +1,20 @@ +package com.baeldung.vaadin; + +public class BindData { + + private String bindName; + + public BindData(String bindName){ + this.bindName = bindName; + } + + public String getBindName() { + return bindName; + } + + public void setBindName(String bindName) { + this.bindName = bindName; + } + + +} diff --git a/libraries/src/main/java/com/baeldung/vaadin/VaadinUI.java b/libraries/src/main/java/com/baeldung/vaadin/VaadinUI.java new file mode 100644 index 000000000000..8343d38f6a30 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/vaadin/VaadinUI.java @@ -0,0 +1,294 @@ +package com.baeldung.vaadin; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.servlet.annotation.WebServlet; + +import com.vaadin.annotations.Push; +import com.vaadin.annotations.Theme; +import com.vaadin.annotations.VaadinServletConfiguration; +import com.vaadin.data.Validator.InvalidValueException; +import com.vaadin.data.fieldgroup.BeanFieldGroup; +import com.vaadin.data.validator.StringLengthValidator; +import com.vaadin.server.ExternalResource; +import com.vaadin.server.FontAwesome; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.VaadinServlet; +import com.vaadin.ui.Button; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.DateField; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.Grid; +import com.vaadin.ui.GridLayout; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.InlineDateField; +import com.vaadin.ui.Label; +import com.vaadin.ui.Link; +import com.vaadin.ui.ListSelect; +import com.vaadin.ui.NativeButton; +import com.vaadin.ui.NativeSelect; +import com.vaadin.ui.Panel; +import com.vaadin.ui.PasswordField; +import com.vaadin.ui.RichTextArea; +import com.vaadin.ui.TextArea; +import com.vaadin.ui.TextField; +import com.vaadin.ui.TwinColSelect; +import com.vaadin.ui.UI; +import com.vaadin.ui.VerticalLayout; + +@SuppressWarnings("serial") +@Push +@Theme("mytheme") +public class VaadinUI extends UI { + + private Label currentTime; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + protected void init(VaadinRequest vaadinRequest) { + final VerticalLayout verticalLayout = new VerticalLayout(); + verticalLayout.setSpacing(true); + verticalLayout.setMargin(true); + final GridLayout gridLayout = new GridLayout(3, 2); + gridLayout.setSpacing(true); + gridLayout.setMargin(true); + final HorizontalLayout horizontalLayout = new HorizontalLayout(); + horizontalLayout.setSpacing(true); + horizontalLayout.setMargin(true); + final FormLayout formLayout = new FormLayout(); + formLayout.setSpacing(true); + formLayout.setMargin(true); + final GridLayout buttonLayout = new GridLayout(3, 5); + buttonLayout.setMargin(true); + buttonLayout.setSpacing(true); + + final Label label = new Label(); + label.setId("Label"); + label.setValue("Label Value"); + label.setCaption("Label"); + gridLayout.addComponent(label); + + final Link link = new Link("Baeldung", new ExternalResource("http://www.baeldung.com/")); + link.setId("Link"); + link.setTargetName("_blank"); + gridLayout.addComponent(link); + + final TextField textField = new TextField(); + textField.setId("TextField"); + textField.setCaption("TextField:"); + textField.setValue("TextField Value"); + textField.setIcon(FontAwesome.USER); + gridLayout.addComponent(textField); + + final TextArea textArea = new TextArea(); + textArea.setCaption("TextArea"); + textArea.setId("TextArea"); + textArea.setValue("TextArea Value"); + gridLayout.addComponent(textArea); + + final DateField dateField = new DateField("DateField", new Date(0)); + dateField.setId("DateField"); + gridLayout.addComponent(dateField); + + final PasswordField passwordField = new PasswordField(); + passwordField.setId("PasswordField"); + passwordField.setCaption("PasswordField:"); + passwordField.setValue("password"); + gridLayout.addComponent(passwordField); + + final RichTextArea richTextArea = new RichTextArea(); + richTextArea.setCaption("Rich Text Area"); + richTextArea.setValue("

RichTextArea

"); + richTextArea.setSizeFull(); + + Panel richTextPanel = new Panel(); + richTextPanel.setContent(richTextArea); + + final InlineDateField inlineDateField = new InlineDateField(); + inlineDateField.setValue(new Date(0)); + inlineDateField.setCaption("Inline Date Field"); + horizontalLayout.addComponent(inlineDateField); + + Button normalButton = new Button("Normal Button"); + normalButton.setId("NormalButton"); + normalButton.addClickListener(e -> { + label.setValue("CLICK"); + }); + buttonLayout.addComponent(normalButton); + + Button tinyButton = new Button("Tiny Button"); + tinyButton.addStyleName("tiny"); + buttonLayout.addComponent(tinyButton); + + Button smallButton = new Button("Small Button"); + smallButton.addStyleName("small"); + buttonLayout.addComponent(smallButton); + + Button largeButton = new Button("Large Button"); + largeButton.addStyleName("large"); + buttonLayout.addComponent(largeButton); + + Button hugeButton = new Button("Huge Button"); + hugeButton.addStyleName("huge"); + buttonLayout.addComponent(hugeButton); + + Button disabledButton = new Button("Disabled Button"); + disabledButton.setDescription("This button cannot be clicked"); + disabledButton.setEnabled(false); + buttonLayout.addComponent(disabledButton); + + Button dangerButton = new Button("Danger Button"); + dangerButton.addStyleName("danger"); + buttonLayout.addComponent(dangerButton); + + Button friendlyButton = new Button("Friendly Button"); + friendlyButton.addStyleName("friendly"); + buttonLayout.addComponent(friendlyButton); + + Button primaryButton = new Button("Primary Button"); + primaryButton.addStyleName("primary"); + buttonLayout.addComponent(primaryButton); + + NativeButton nativeButton = new NativeButton("Native Button"); + buttonLayout.addComponent(nativeButton); + + Button iconButton = new Button("Icon Button"); + iconButton.setIcon(FontAwesome.ALIGN_LEFT); + buttonLayout.addComponent(iconButton); + + Button borderlessButton = new Button("BorderLess Button"); + borderlessButton.addStyleName("borderless"); + buttonLayout.addComponent(borderlessButton); + + Button linkButton = new Button("Link Button"); + linkButton.addStyleName("link"); + buttonLayout.addComponent(linkButton); + + Button quietButton = new Button("Quiet Button"); + quietButton.addStyleName("quiet"); + buttonLayout.addComponent(quietButton); + + horizontalLayout.addComponent(buttonLayout); + + final CheckBox checkbox = new CheckBox("CheckBox"); + checkbox.setValue(true); + checkbox.addValueChangeListener(e -> checkbox.setValue(!checkbox.getValue())); + formLayout.addComponent(checkbox); + + List numbers = new ArrayList(); + numbers.add("One"); + numbers.add("Ten"); + numbers.add("Eleven"); + ComboBox comboBox = new ComboBox("ComboBox"); + comboBox.addItems(numbers); + formLayout.addComponent(comboBox); + + ListSelect listSelect = new ListSelect("ListSelect"); + listSelect.addItems(numbers); + listSelect.setRows(2); + formLayout.addComponent(listSelect); + + NativeSelect nativeSelect = new NativeSelect("NativeSelect"); + nativeSelect.addItems(numbers); + formLayout.addComponent(nativeSelect); + + TwinColSelect twinColSelect = new TwinColSelect("TwinColSelect"); + twinColSelect.addItems(numbers); + + Grid grid = new Grid("Grid"); + grid.setColumns("Column1", "Column2", "Column3"); + grid.addRow("Item1", "Item2", "Item3"); + grid.addRow("Item4", "Item5", "Item6"); + + Panel panel = new Panel("Panel"); + panel.setContent(grid); + panel.setSizeUndefined(); + + Panel serverPushPanel = new Panel("Server Push"); + FormLayout timeLayout = new FormLayout(); + timeLayout.setSpacing(true); + timeLayout.setMargin(true); + currentTime = new Label("No TIME..."); + timeLayout.addComponent(currentTime); + serverPushPanel.setContent(timeLayout); + serverPushPanel.setSizeUndefined(); + new ServerPushThread().start(); + + FormLayout dataBindingLayout = new FormLayout(); + dataBindingLayout.setSpacing(true); + dataBindingLayout.setMargin(true); + + BindData bindData = new BindData("BindData"); + BeanFieldGroup beanFieldGroup = new BeanFieldGroup(BindData.class); + beanFieldGroup.setItemDataSource(bindData); + TextField bindedTextField = (TextField) beanFieldGroup.buildAndBind("BindName", "bindName"); + bindedTextField.setWidth("250px"); + dataBindingLayout.addComponent(bindedTextField); + + FormLayout validatorLayout = new FormLayout(); + validatorLayout.setSpacing(true); + validatorLayout.setMargin(true); + + HorizontalLayout textValidatorLayout = new HorizontalLayout(); + textValidatorLayout.setSpacing(true); + textValidatorLayout.setMargin(true); + + TextField stringValidator = new TextField(); + stringValidator.setNullSettingAllowed(true); + stringValidator.setNullRepresentation(""); + stringValidator.addValidator(new StringLengthValidator("String must have 2-5 characters lenght", 2, 5, true)); + stringValidator.setValidationVisible(false); + textValidatorLayout.addComponent(stringValidator); + Button buttonStringValidator = new Button("Validate String"); + buttonStringValidator.addClickListener(e -> { + try { + stringValidator.setValidationVisible(false); + stringValidator.validate(); + } catch (InvalidValueException err) { + stringValidator.setValidationVisible(true); + } + }); + textValidatorLayout.addComponent(buttonStringValidator); + + validatorLayout.addComponent(textValidatorLayout); + verticalLayout.addComponent(gridLayout); + verticalLayout.addComponent(richTextPanel); + verticalLayout.addComponent(horizontalLayout); + verticalLayout.addComponent(formLayout); + verticalLayout.addComponent(twinColSelect); + verticalLayout.addComponent(panel); + verticalLayout.addComponent(serverPushPanel); + verticalLayout.addComponent(dataBindingLayout); + verticalLayout.addComponent(validatorLayout); + setContent(verticalLayout); + } + + @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true) + @VaadinServletConfiguration(ui = VaadinUI.class, productionMode = false) + public static class MyUIServlet extends VaadinServlet { + } + + class ServerPushThread extends Thread { + @Override + public void run() { + try { + while (true) { + Thread.sleep(1000); + access(new Runnable() { + @Override + public void run() { + currentTime.setValue("Current Time : " + Instant.now()); + } + }); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/libraries/src/main/webapp/VAADIN/themes/mytheme/addons.scss b/libraries/src/main/webapp/VAADIN/themes/mytheme/addons.scss new file mode 100644 index 000000000000..a5670b70c7ea --- /dev/null +++ b/libraries/src/main/webapp/VAADIN/themes/mytheme/addons.scss @@ -0,0 +1,7 @@ +/* This file is automatically managed and will be overwritten from time to time. */ +/* Do not manually edit this file. */ + +/* Import and include this mixin into your project theme to include the addon themes */ +@mixin addons { +} + diff --git a/libraries/src/main/webapp/VAADIN/themes/mytheme/favicon.ico b/libraries/src/main/webapp/VAADIN/themes/mytheme/favicon.ico new file mode 100644 index 000000000000..ffb34a65c73e Binary files /dev/null and b/libraries/src/main/webapp/VAADIN/themes/mytheme/favicon.ico differ diff --git a/libraries/src/main/webapp/VAADIN/themes/mytheme/mytheme.scss b/libraries/src/main/webapp/VAADIN/themes/mytheme/mytheme.scss new file mode 100644 index 000000000000..2c5fb8b94425 --- /dev/null +++ b/libraries/src/main/webapp/VAADIN/themes/mytheme/mytheme.scss @@ -0,0 +1,38 @@ +// If you edit this file you need to compile the theme. See README.md for details. + +// Global variable overrides. Must be declared before importing Valo. + +// Defines the plaintext font size, weight and family. Font size affects general component sizing. +//$v-font-size: 16px; +//$v-font-weight: 300; +//$v-font-family: "Open Sans", sans-serif; + +// Defines the border used by all components. +//$v-border: 1px solid (v-shade 0.7); +//$v-border-radius: 4px; + +// Affects the color of some component elements, e.g Button, Panel title, etc +//$v-background-color: hsl(210, 0%, 98%); +// Affects the color of content areas, e.g Panel and Window content, TextField input etc +//$v-app-background-color: $v-background-color; + +// Affects the visual appearance of all components +//$v-gradient: v-linear 8%; +//$v-bevel-depth: 30%; +//$v-shadow-opacity: 5%; + +// Defines colors for indicating status (focus, success, failure) +//$v-focus-color: valo-focus-color(); // Calculates a suitable color automatically +//$v-friendly-color: #2c9720; +//$v-error-indicator-color: #ed473b; + +// For more information, see: https://vaadin.com/book/-/page/themes.valo.html +// Example variants can be copy/pasted from https://vaadin.com/wiki/-/wiki/Main/Valo+Examples + +@import "../valo/valo.scss"; + +@mixin mytheme { + @include valo; + + // Insert your own theme rules here +} diff --git a/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.css b/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.css new file mode 100644 index 000000000000..75bf26f49837 --- /dev/null +++ b/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.css @@ -0,0 +1,12986 @@ +/** + * 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/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.scss b/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.scss new file mode 100644 index 000000000000..bba1d493c0c0 --- /dev/null +++ b/libraries/src/main/webapp/VAADIN/themes/mytheme/styles.scss @@ -0,0 +1,11 @@ +@import "mytheme.scss"; +@import "addons.scss"; + +// This file prefixes all rules with the theme name to avoid causing conflicts with other themes. +// The actual styles should be defined in mytheme.scss + +.mytheme { + @include addons; + @include mytheme; + +} diff --git a/libraries/src/main/webapp/VAADIN/themes/valo/addons.scss b/libraries/src/main/webapp/VAADIN/themes/valo/addons.scss new file mode 100644 index 000000000000..a5670b70c7ea --- /dev/null +++ b/libraries/src/main/webapp/VAADIN/themes/valo/addons.scss @@ -0,0 +1,7 @@ +/* This file is automatically managed and will be overwritten from time to time. */ +/* Do not manually edit this file. */ + +/* Import and include this mixin into your project theme to include the addon themes */ +@mixin addons { +} + diff --git a/libraries/src/test/java/com/baeldung/awaitility/AsyncServiceUnitTest.java b/libraries/src/test/java/com/baeldung/awaitility/AsyncServiceUnitTest.java new file mode 100644 index 000000000000..43537965f878 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/awaitility/AsyncServiceUnitTest.java @@ -0,0 +1,84 @@ +package com.baeldung.awaitility; + +import org.awaitility.Awaitility; +import org.awaitility.Duration; +import org.junit.Before; +import org.junit.Test; + +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +import static org.awaitility.Awaitility.await; +import static org.awaitility.Awaitility.fieldIn; +import static org.awaitility.Awaitility.given; +import static org.awaitility.proxy.AwaitilityClassProxy.to; +import static org.hamcrest.Matchers.equalTo; + +public class AsyncServiceUnitTest { + private AsyncService asyncService; + + @Before + public void setUp() { + asyncService = new AsyncService(); + } + + @Test + public void givenAsyncService_whenInitialize_thenInitOccurs1() { + asyncService.initialize(); + Callable isInitialized = asyncService::isInitialized; + await().until(isInitialized); + } + + @Test + public void givenAsyncService_whenInitialize_thenInitOccurs2() { + asyncService.initialize(); + Callable isInitialized = asyncService::isInitialized; + await().atLeast(Duration.ONE_HUNDRED_MILLISECONDS) + .atMost(Duration.FIVE_SECONDS) + .with().pollInterval(Duration.ONE_HUNDRED_MILLISECONDS) + .until(isInitialized); + } + + @Test + public void givenAsyncService_whenInitialize_thenInitOccurs_withDefualts() { + Awaitility.setDefaultPollInterval(10, TimeUnit.MILLISECONDS); + Awaitility.setDefaultPollDelay(Duration.ZERO); + Awaitility.setDefaultTimeout(Duration.ONE_MINUTE); + + asyncService.initialize(); + await().until(asyncService::isInitialized); + } + + @Test + public void givenAsyncService_whenInitialize_thenInitOccurs_withProxy() { + asyncService.initialize(); + await().untilCall(to(asyncService).isInitialized(), equalTo(true)); + } + + @Test + public void givenAsyncService_whenInitialize_thenInitOccurs3() { + asyncService.initialize(); + await().until(fieldIn(asyncService) + .ofType(boolean.class) + .andWithName("initialized"), equalTo(true)); + } + + @Test + public void givenValue_whenAddValue_thenValueAdded() { + asyncService.initialize(); + await().until(asyncService::isInitialized); + long value = 5; + asyncService.addValue(value); + await().until(asyncService::getValue, equalTo(value)); + } + + @Test + public void givenAsyncService_whenGetValue_thenExceptionIgnored() { + asyncService.initialize(); + given().ignoreException(IllegalStateException.class) + .await() + .atMost(Duration.FIVE_SECONDS) + .atLeast(Duration.FIVE_HUNDRED_MILLISECONDS) + .until(asyncService::getValue, equalTo(0L)); + } +} diff --git a/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java b/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java new file mode 100644 index 000000000000..6b7364a0a5b6 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java @@ -0,0 +1,89 @@ +package com.baeldung.bytebuddy; + +import net.bytebuddy.ByteBuddy; +import net.bytebuddy.agent.ByteBuddyAgent; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; +import net.bytebuddy.dynamic.loading.ClassReloadingStrategy; +import net.bytebuddy.implementation.FixedValue; +import net.bytebuddy.implementation.MethodDelegation; +import net.bytebuddy.matcher.ElementMatchers; +import org.junit.Test; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +import static net.bytebuddy.matcher.ElementMatchers.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class ByteBuddyUnitTest { + + @Test + public void givenObject_whenToString_thenReturnHelloWorldString() throws InstantiationException, IllegalAccessException { + DynamicType.Unloaded unloadedType = new ByteBuddy() + .subclass(Object.class) + .method(ElementMatchers.isToString()) + .intercept(FixedValue.value("Hello World ByteBuddy!")) + .make(); + + Class dynamicType = unloadedType.load(getClass().getClassLoader()) + .getLoaded(); + + assertEquals(dynamicType.newInstance().toString(), "Hello World ByteBuddy!"); + } + + @Test + public void givenFoo_whenRedefined_thenReturnFooRedefined() throws Exception { + ByteBuddyAgent.install(); + new ByteBuddy() + .redefine(Foo.class) + .method(named("sayHelloFoo")) + .intercept(FixedValue.value("Hello Foo Redefined")) + .make() + .load(Foo.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent()); + Foo f = new Foo(); + assertEquals(f.sayHelloFoo(), "Hello Foo Redefined"); + } + + @Test + public void givenSayHelloFoo_whenMethodDelegation_thenSayHelloBar() throws IllegalAccessException, InstantiationException { + + String r = new ByteBuddy() + .subclass(Foo.class) + .method( + named("sayHelloFoo") + .and(isDeclaredBy(Foo.class) + .and(returns(String.class))) + ) + .intercept(MethodDelegation.to(Bar.class)) + .make() + .load(getClass().getClassLoader()) + .getLoaded() + .newInstance() + .sayHelloFoo(); + + assertEquals(r, Bar.sayHelloBar()); + } + + @Test + public void givenMethodName_whenDefineMethod_thenCreateMethod() throws Exception { + Class type = new ByteBuddy() + .subclass(Object.class) + .name("MyClassName") + .defineMethod("custom", String.class, Modifier.PUBLIC) + .intercept(MethodDelegation.to(Bar.class)) + .defineField("x", String.class, Modifier.PUBLIC) + .make() + .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) + .getLoaded(); + + Method m = type.getDeclaredMethod("custom", null); + + assertEquals(m.invoke(type.newInstance()), Bar.sayHelloBar()); + assertNotNull(type.getDeclaredField("x")); + + } + + +} diff --git a/libraries/src/test/java/com/baeldung/cglib/proxy/BeanGeneratorIntegrationTest.java b/libraries/src/test/java/com/baeldung/cglib/proxy/BeanGeneratorIntegrationTest.java index 033cc47c74f7..1224d73724d3 100644 --- a/libraries/src/test/java/com/baeldung/cglib/proxy/BeanGeneratorIntegrationTest.java +++ b/libraries/src/test/java/com/baeldung/cglib/proxy/BeanGeneratorIntegrationTest.java @@ -19,14 +19,14 @@ public void givenBeanCreator_whenAddProperty_thenClassShouldHaveFieldValue() thr beanGenerator.addProperty("name", String.class); Object myBean = beanGenerator.create(); Method setter = myBean - .getClass() - .getMethod("setName", String.class); + .getClass() + .getMethod("setName", String.class); setter.invoke(myBean, "some string value set by a cglib"); //then Method getter = myBean - .getClass() - .getMethod("getName"); + .getClass() + .getMethod("getName"); assertEquals("some string value set by a cglib", getter.invoke(myBean)); } } diff --git a/libraries/src/test/java/com/baeldung/cglib/proxy/MixinUnitTest.java b/libraries/src/test/java/com/baeldung/cglib/proxy/MixinUnitTest.java index a89d9fe2c32d..93b34bf92be4 100644 --- a/libraries/src/test/java/com/baeldung/cglib/proxy/MixinUnitTest.java +++ b/libraries/src/test/java/com/baeldung/cglib/proxy/MixinUnitTest.java @@ -1,6 +1,10 @@ package com.baeldung.cglib.proxy; -import com.baeldung.cglib.mixin.*; +import com.baeldung.cglib.mixin.Class1; +import com.baeldung.cglib.mixin.Class2; +import com.baeldung.cglib.mixin.Interface1; +import com.baeldung.cglib.mixin.Interface2; +import com.baeldung.cglib.mixin.MixinInterface; import net.sf.cglib.proxy.Mixin; import org.junit.Test; @@ -12,8 +16,8 @@ public class MixinUnitTest { public void givenTwoClasses_whenMixedIntoOne_thenMixinShouldHaveMethodsFromBothClasses() throws Exception { //when Mixin mixin = Mixin.create( - new Class[]{Interface1.class, Interface2.class, MixinInterface.class}, - new Object[]{new Class1(), new Class2()} + new Class[]{Interface1.class, Interface2.class, MixinInterface.class}, + new Object[]{new Class1(), new Class2()} ); MixinInterface mixinDelegate = (MixinInterface) mixin; diff --git a/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueTest.java b/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueTest.java new file mode 100644 index 000000000000..e64aaed544a2 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueTest.java @@ -0,0 +1,43 @@ +package com.baeldung.chronicle.queue; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +import org.junit.Test; + +import net.openhft.chronicle.Chronicle; +import net.openhft.chronicle.ChronicleQueueBuilder; +import net.openhft.chronicle.ExcerptTailer; +import net.openhft.chronicle.tools.ChronicleTools; + +public class ChronicleQueueTest { + + @Test + public void givenSetOfValues_whenWriteToQueue_thenWriteSuccesfully() throws IOException { + File queueDir = Files.createTempDirectory("chronicle-queue").toFile(); + ChronicleTools.deleteOnExit(queueDir.getPath()); + + Chronicle chronicle = ChronicleQueueBuilder.indexed(queueDir).build(); + String stringVal = "Hello World"; + int intVal = 101; + long longVal = System.currentTimeMillis(); + double doubleVal = 90.00192091d; + + ChronicleQueue.writeToQueue(chronicle, stringVal, intVal, longVal, doubleVal); + + ExcerptTailer tailer = chronicle.createTailer(); + while (tailer.nextIndex()) { + assertEquals(stringVal, tailer.readUTF()); + assertEquals(intVal, tailer.readInt()); + assertEquals(longVal, tailer.readLong()); + assertEquals((Double) doubleVal, (Double) tailer.readDouble()); + } + tailer.finish(); + tailer.close(); + chronicle.close(); + } + +} diff --git a/libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java b/libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java new file mode 100644 index 000000000000..cd9a7baaf3ed --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/chain/AtmChainTest.java @@ -0,0 +1,37 @@ +package com.baeldung.commons.chain; + +import org.apache.commons.chain.Catalog; +import org.apache.commons.chain.Command; +import org.apache.commons.chain.Context; +import org.junit.Assert; +import org.junit.Test; + +import static com.baeldung.commons.chain.AtmConstants.*; + +public class AtmChainTest { + + public static final int EXPECTED_TOTAL_AMOUNT_TO_BE_WITHDRAWN = 460; + public static final int EXPECTED_AMOUNT_LEFT_TO_BE_WITHDRAWN = 0; + public static final int EXPECTED_NO_OF_HUNDREDS_DISPENSED = 4; + public static final int EXPECTED_NO_OF_FIFTIES_DISPENSED = 1; + public static final int EXPECTED_NO_OF_TENS_DISPENSED = 1; + + @Test + public void givenInputsToContext_whenAppliedChain_thenExpectedContext() { + Context context = new AtmRequestContext(); + context.put(TOTAL_AMOUNT_TO_BE_WITHDRAWN, 460); + context.put(AMOUNT_LEFT_TO_BE_WITHDRAWN, 460); + Catalog catalog = new AtmCatalog(); + Command atmWithdrawalChain = catalog.getCommand(ATM_WITHDRAWAL_CHAIN); + try { + atmWithdrawalChain.execute(context); + } catch (Exception e) { + e.printStackTrace(); + } + Assert.assertEquals(EXPECTED_TOTAL_AMOUNT_TO_BE_WITHDRAWN, (int) context.get(TOTAL_AMOUNT_TO_BE_WITHDRAWN)); + Assert.assertEquals(EXPECTED_AMOUNT_LEFT_TO_BE_WITHDRAWN, (int) context.get(AMOUNT_LEFT_TO_BE_WITHDRAWN)); + Assert.assertEquals(EXPECTED_NO_OF_HUNDREDS_DISPENSED, (int) context.get(NO_OF_HUNDREDS_DISPENSED)); + Assert.assertEquals(EXPECTED_NO_OF_FIFTIES_DISPENSED, (int) context.get(NO_OF_FIFTIES_DISPENSED)); + Assert.assertEquals(EXPECTED_NO_OF_TENS_DISPENSED, (int) context.get(NO_OF_TENS_DISPENSED)); + } +} \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/commons/collections/BidiMapUnitTest.java b/libraries/src/test/java/com/baeldung/commons/collections/BidiMapUnitTest.java new file mode 100644 index 000000000000..e46d8654a23c --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/collections/BidiMapUnitTest.java @@ -0,0 +1,45 @@ +package com.baeldung.commons.collections; + +import org.apache.commons.collections4.BidiMap; +import org.apache.commons.collections4.bidimap.DualHashBidiMap; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class BidiMapUnitTest { + + @Test + public void givenKeyValue_whenPut_thenAddEntryToMap() { + BidiMap map = new DualHashBidiMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + assertEquals(map.size(), 2); + } + + @Test + public void whenInverseBidiMap_thenInverseKeyValue() { + BidiMap map = new DualHashBidiMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + BidiMap rMap = map.inverseBidiMap(); + assertTrue(rMap.containsKey("value1") && rMap.containsKey("value2")); + } + + @Test + public void givenValue_whenRemoveValue_thenRemoveMatchingMapEntry() { + BidiMap map = new DualHashBidiMap<>(); + map.put("key1", "value1"); + map.put("key2", "value2"); + map.removeValue("value2"); + assertFalse(map.containsKey("key2")); + } + + @Test + public void givenValue_whenGetKey_thenMappedKey() { + BidiMap map = new DualHashBidiMap<>(); + map.put("key1", "value1"); + assertEquals(map.getKey("value1"), "key1"); + } +} diff --git a/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java new file mode 100644 index 000000000000..aa8b799c9dca --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/collections/CollectionUtilsGuideTest.java @@ -0,0 +1,122 @@ +package com.baeldung.commons.collections; + + +import com.baeldung.commons.collectionutil.Address; +import com.baeldung.commons.collectionutil.Customer; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.Transformer; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class CollectionUtilsGuideTest { + + + Customer customer1 = new Customer(1, "Daniel", 123456l, "locality1", "city1", "1234"); + Customer customer4 = new Customer(4, "Bob", 456789l, "locality4", "city4", "4567"); + List list1, list2, list3, linkedList1; + + @Before + public void setup() { + Customer customer2 = new Customer(2, "Fredrik", 234567l, "locality2", "city2", "2345"); + Customer customer3 = new Customer(3, "Kyle", 345678l, "locality3", "city3", "3456"); + Customer customer5 = new Customer(5, "Cat", 567890l, "locality5", "city5", "5678"); + Customer customer6 = new Customer(6, "John", 678901l, "locality6", "city6", "6789"); + + list1 = Arrays.asList(customer1, customer2, customer3); + list2 = Arrays.asList(customer4, customer5, customer6); + list3 = Arrays.asList(customer1, customer2); + + linkedList1 = new LinkedList<>(list1); + } + + @Test + public void givenList_whenAddIgnoreNull_thenNoNullAdded() { + CollectionUtils.addIgnoreNull(list1, null); + assertFalse(list1.contains(null)); + } + + @Test + public void givenTwoSortedLists_whenCollated_thenSorted() { + List sortedList = CollectionUtils.collate(list1, list2); + + assertEquals(6, sortedList.size()); + assertTrue(sortedList.get(0).getName().equals("Bob")); + assertTrue(sortedList.get(2).getName().equals("Daniel")); + } + + @Test + public void givenListOfCustomers_whenTransformed_thenListOfAddress() { + Collection
addressCol = CollectionUtils.collect(list1, new Transformer() { + public Address transform(Customer customer) { + return new Address(customer.getLocality(), customer.getCity(), customer.getZip()); + } + }); + + List
addressList = new ArrayList<>(addressCol); + assertTrue(addressList.size() == 3); + assertTrue(addressList.get(0).getLocality().equals("locality1")); + } + + @Test + public void givenCustomerList_whenFiltered_thenCorrectSize() { + + boolean isModified = CollectionUtils.filter(linkedList1, new Predicate() { + public boolean evaluate(Customer customer) { + return Arrays.asList("Daniel", "Kyle").contains(customer.getName()); + } + }); + + //filterInverse does the opposite. It removes the element from the list if the Predicate returns true + //select and selectRejected work the same way except that they do not remove elements from the given collection and return a new collection + + assertTrue(isModified && linkedList1.size() == 2); + } + + @Test + public void givenNonEmptyList_whenCheckedIsNotEmpty_thenTrue() { + List emptyList = new ArrayList<>(); + List nullList = null; + + //Very handy at times where we want to check if a collection is not null and not empty too. + //isNotEmpty does the opposite. Handy because using ! operator on isEmpty makes it missable while reading + assertTrue(CollectionUtils.isNotEmpty(list1)); + assertTrue(CollectionUtils.isEmpty(nullList)); + assertTrue(CollectionUtils.isEmpty(emptyList)); + } + + @Test + public void givenCustomerListAndASubcollection_whenChecked_thenTrue() { + assertTrue(CollectionUtils.isSubCollection(list3, list1)); + } + + @Test + public void givenTwoLists_whenIntersected_thenCheckSize() { + Collection intersection = CollectionUtils.intersection(list1, list3); + assertTrue(intersection.size() == 2); + } + + @Test + public void givenTwoLists_whenSubtracted_thenCheckElementNotPresentInA() { + Collection result = CollectionUtils.subtract(list1, list3); + assertFalse(result.contains(customer1)); + } + + @Test + public void givenTwoLists_whenUnioned_thenCheckElementPresentInResult() { + Collection union = CollectionUtils.union(list1, list2); + assertTrue(union.contains(customer1)); + assertTrue(union.contains(customer4)); + } + +} \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java b/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java new file mode 100644 index 000000000000..10d408b467d3 --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/collections/MapUtilsTest.java @@ -0,0 +1,134 @@ +package com.baeldung.commons.collections; + +import org.apache.commons.collections4.MapIterator; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.PredicateUtils; +import org.apache.commons.collections4.TransformerUtils; +import org.junit.Before; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.HashMap; +import java.util.Map; + +import static org.hamcrest.Matchers.is; +import static org.hamcrest.collection.IsMapContaining.hasEntry; +import static org.hamcrest.collection.IsMapWithSize.aMapWithSize; +import static org.hamcrest.collection.IsMapWithSize.anEmptyMap; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +public class MapUtilsTest { + + private String[][] color2DArray = new String[][]{ + {"RED", "#FF0000"}, + {"GREEN", "#00FF00"}, + {"BLUE", "#0000FF"} + }; + private String[] color1DArray = new String[]{ + "RED", "#FF0000", + "GREEN", "#00FF00", + "BLUE", "#0000FF" + }; + private Map colorMap; + + @Before + public void createMap() { + this.colorMap = MapUtils.putAll(new HashMap(), this.color2DArray); + } + + @Test + public void whenCreateMapFrom2DArray_theMapIsCreated() { + this.colorMap = MapUtils.putAll(new HashMap(), this.color2DArray); + + assertThat(this.colorMap, is(aMapWithSize(this.color2DArray.length))); + + assertThat(this.colorMap, hasEntry("RED", "#FF0000")); + assertThat(this.colorMap, hasEntry("GREEN", "#00FF00")); + assertThat(this.colorMap, hasEntry("BLUE", "#0000FF")); + } + + @Test + public void whenCreateMapFrom1DArray_theMapIsCreated() { + this.colorMap = MapUtils.putAll(new HashMap(), this.color1DArray); + + assertThat(this.colorMap, is(aMapWithSize(this.color1DArray.length / 2))); + + assertThat(this.colorMap, hasEntry("RED", "#FF0000")); + assertThat(this.colorMap, hasEntry("GREEN", "#00FF00")); + assertThat(this.colorMap, hasEntry("BLUE", "#0000FF")); + } + + @Test + public void whenVerbosePrintMap_thenMustPrintFormattedMap() { + MapUtils.verbosePrint(System.out, "Optional Label", this.colorMap); + } + + @Test + public void whenGetKeyNotPresent_thenMustReturnDefaultValue() { + String defaultColorStr = "COLOR_NOT_FOUND"; + String color = MapUtils.getString(this.colorMap, "BLACK", defaultColorStr); + + assertEquals(color, defaultColorStr); + } + + @Test + public void whenGetOnNullMap_thenMustReturnDefaultValue() { + String defaultColorStr = "COLOR_NOT_FOUND"; + String color = MapUtils.getString(null, "RED", defaultColorStr); + + assertEquals(color, defaultColorStr); + } + + @Test + public void whenInvertMap_thenMustReturnInvertedMap() { + Map invColorMap = MapUtils.invertMap(this.colorMap); + assertEquals(this.colorMap.size(), invColorMap.size()); + + MapIterator itColorMap + = MapUtils.iterableMap(this.colorMap).mapIterator(); + + while (itColorMap.hasNext()) { + String colorMapKey = itColorMap.next(); + String colorMapValue = itColorMap.getValue(); + + String invColorMapValue = MapUtils.getString(invColorMap, colorMapValue); + + assertTrue(invColorMapValue.equals(colorMapKey)); + } + } + + @Test(expected = IllegalArgumentException.class) + public void whenCreateFixedSizedMapAndAdd_thenMustThrowException() { + Map rgbMap = MapUtils.fixedSizeMap(MapUtils.putAll( + new HashMap(), + this.color1DArray)); + + rgbMap.put("ORANGE", "#FFA500"); + } + + @Test(expected = IllegalArgumentException.class) + public void whenAddDuplicateToUniqueValuesPredicateMap_thenMustThrowException() { + Map uniqValuesMap + = MapUtils.predicatedMap(this.colorMap, null, PredicateUtils.uniquePredicate()); + + uniqValuesMap.put("NEW_RED", "#FF0000"); + } + + @Test + public void whenCreateLazyMap_theMapIsCreated() { + Map intStrMap = MapUtils.lazyMap( + new HashMap(), + TransformerUtils.stringValueTransformer()); + + assertThat(intStrMap, is(anEmptyMap())); + + intStrMap.get(1); + intStrMap.get(2); + intStrMap.get(3); + + assertThat(intStrMap, is(aMapWithSize(3))); + } +} diff --git a/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java index 4d264e3aea3d..7d214bc5c5dc 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java +++ b/libraries/src/test/java/com/baeldung/commons/collections/SetUtilsUnitTest.java @@ -11,9 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -/** - * Created by smatt on 21/06/2017. - */ public class SetUtilsUnitTest { @Test(expected = IllegalArgumentException.class) @@ -27,33 +24,33 @@ public void givenSetAndPredicate_whenPredicatedSet_thenValidateSet_and_throw_Ill @Test public void givenTwoSets_whenDifference_thenSetView() { - Set a = new HashSet<>(Arrays.asList(1,2,5)); - Set b = new HashSet<>(Arrays.asList(1,2)); + Set a = new HashSet<>(Arrays.asList(1, 2, 5)); + Set b = new HashSet<>(Arrays.asList(1, 2)); SetUtils.SetView result = SetUtils.difference(a, b); assertTrue(result.size() == 1 && result.contains(5)); } @Test public void givenTwoSets_whenUnion_thenUnionResult() { - Set a = new HashSet<>(Arrays.asList(1,2,5)); - Set b = new HashSet<>(Arrays.asList(1,2)); - Set expected = new HashSet<>(Arrays.asList(1,2,5)); + Set a = new HashSet<>(Arrays.asList(1, 2, 5)); + Set b = new HashSet<>(Arrays.asList(1, 2)); + Set expected = new HashSet<>(Arrays.asList(1, 2, 5)); SetUtils.SetView union = SetUtils.union(a, b); assertTrue(SetUtils.isEqualSet(expected, union)); } @Test public void givenTwoSets_whenIntersection_thenIntersectionResult() { - Set a = new HashSet<>(Arrays.asList(1,2,5)); - Set b = new HashSet<>(Arrays.asList(1,2)); - Set expected = new HashSet<>(Arrays.asList(1,2)); + Set a = new HashSet<>(Arrays.asList(1, 2, 5)); + Set b = new HashSet<>(Arrays.asList(1, 2)); + Set expected = new HashSet<>(Arrays.asList(1, 2)); SetUtils.SetView intersect = SetUtils.intersection(a, b); assertTrue(SetUtils.isEqualSet(expected, intersect)); } @Test public void givenSet_whenTransformedSet_thenTransformedResult() { - Set a = SetUtils.transformedSet(new HashSet<>(), (e) -> e * 2 ); + Set a = SetUtils.transformedSet(new HashSet<>(), (e) -> e * 2); a.add(2); assertEquals(a.toArray()[0], 4); @@ -65,19 +62,19 @@ public void givenSet_whenTransformedSet_thenTransformedResult() { @Test public void givenTwoSet_whenDisjunction_thenDisjunctionSet() { - Set a = new HashSet<>(Arrays.asList(1,2,5)); - Set b = new HashSet<>(Arrays.asList(1,2,3)); + Set a = new HashSet<>(Arrays.asList(1, 2, 5)); + Set b = new HashSet<>(Arrays.asList(1, 2, 3)); SetUtils.SetView result = SetUtils.disjunction(a, b); assertTrue(result.toSet().contains(5) && result.toSet().contains(3)); } @Test public void givenSet_when_OrderedSet_thenMaintainElementOrder() { - Set set = new HashSet<>(Arrays.asList(10,1,5)); + Set set = new HashSet<>(Arrays.asList(10, 1, 5)); System.out.println("unordered set: " + set); Set orderedSet = SetUtils.orderedSet(new HashSet<>()); - orderedSet.addAll(Arrays.asList(10,1,5)); + orderedSet.addAll(Arrays.asList(10, 1, 5)); System.out.println("ordered set = " + orderedSet); } } \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/commons/collections/orderedmap/OrderedMapUnitTest.java b/libraries/src/test/java/com/baeldung/commons/collections/orderedmap/OrderedMapUnitTest.java index 6b2777c28966..7a05228e5136 100644 --- a/libraries/src/test/java/com/baeldung/commons/collections/orderedmap/OrderedMapUnitTest.java +++ b/libraries/src/test/java/com/baeldung/commons/collections/orderedmap/OrderedMapUnitTest.java @@ -1,10 +1,5 @@ package com.baeldung.commons.collections.orderedmap; -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - import org.apache.commons.collections4.OrderedMap; import org.apache.commons.collections4.OrderedMapIterator; import org.apache.commons.collections4.map.LinkedMap; @@ -12,6 +7,11 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + public class OrderedMapUnitTest { private String[] names = {"Emily", "Mathew", "Rose", "John", "Anna"}; diff --git a/libraries/src/test/java/com/baeldung/commons/dbutils/DbUtilsUnitTest.java b/libraries/src/test/java/com/baeldung/commons/dbutils/DbUtilsUnitTest.java new file mode 100644 index 000000000000..bc7623589cac --- /dev/null +++ b/libraries/src/test/java/com/baeldung/commons/dbutils/DbUtilsUnitTest.java @@ -0,0 +1,163 @@ +package com.baeldung.commons.dbutils; + +import org.apache.commons.dbutils.AsyncQueryRunner; +import org.apache.commons.dbutils.DbUtils; +import org.apache.commons.dbutils.QueryRunner; +import org.apache.commons.dbutils.handlers.BeanListHandler; +import org.apache.commons.dbutils.handlers.MapListHandler; +import org.apache.commons.dbutils.handlers.ScalarHandler; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class DbUtilsUnitTest { + + private Connection connection; + + @Before + public void setupDB() throws Exception { + Class.forName("org.h2.Driver"); + String db = "jdbc:h2:mem:;INIT=runscript from 'classpath:/employees.sql'"; + connection = DriverManager.getConnection(db); + } + + @After + public void closeBD() { + DbUtils.closeQuietly(connection); + } + + @Test + public void givenResultHandler_whenExecutingQuery_thenExpectedList() throws SQLException { + MapListHandler beanListHandler = new MapListHandler(); + + QueryRunner runner = new QueryRunner(); + List> list = runner.query(connection, "SELECT * FROM employee", beanListHandler); + + assertEquals(list.size(), 5); + assertEquals(list.get(0) + .get("firstname"), "John"); + assertEquals(list.get(4) + .get("firstname"), "Christian"); + } + + @Test + public void givenResultHandler_whenExecutingQuery_thenEmployeeList() throws SQLException { + BeanListHandler beanListHandler = new BeanListHandler<>(Employee.class); + + QueryRunner runner = new QueryRunner(); + List employeeList = runner.query(connection, "SELECT * FROM employee", beanListHandler); + + assertEquals(employeeList.size(), 5); + assertEquals(employeeList.get(0) + .getFirstName(), "John"); + assertEquals(employeeList.get(4) + .getFirstName(), "Christian"); + } + + @Test + public void givenResultHandler_whenExecutingQuery_thenExpectedScalar() throws SQLException { + ScalarHandler scalarHandler = new ScalarHandler<>(); + + QueryRunner runner = new QueryRunner(); + String query = "SELECT COUNT(*) FROM employee"; + long count = runner.query(connection, query, scalarHandler); + + assertEquals(count, 5); + } + + @Test + public void givenResultHandler_whenExecutingQuery_thenEmailsSetted() throws SQLException { + EmployeeHandler employeeHandler = new EmployeeHandler(connection); + + QueryRunner runner = new QueryRunner(); + List employees = runner.query(connection, "SELECT * FROM employee", employeeHandler); + + assertEquals(employees.get(0) + .getEmails() + .size(), 2); + assertEquals(employees.get(2) + .getEmails() + .size(), 3); + assertNotNull(employees.get(0).getEmails().get(0).getEmployeeId()); + } + + @Test + public void givenResultHandler_whenExecutingQuery_thenAllPropertiesSetted() throws SQLException { + EmployeeHandler employeeHandler = new EmployeeHandler(connection); + + QueryRunner runner = new QueryRunner(); + String query = "SELECT * FROM employee_legacy"; + List employees = runner.query(connection, query, employeeHandler); + + assertEquals((int) employees.get(0).getId(), 1); + assertEquals(employees.get(0).getFirstName(), "John"); + } + + @Test + public void whenInserting_thenInserted() throws SQLException { + QueryRunner runner = new QueryRunner(); + String insertSQL = "INSERT INTO employee (firstname,lastname,salary, hireddate) VALUES (?, ?, ?, ?)"; + + int numRowsInserted = runner.update(connection, insertSQL, "Leia", "Kane", 60000.60, new Date()); + + assertEquals(numRowsInserted, 1); + } + + @Test + public void givenHandler_whenInserting_thenExpectedId() throws SQLException { + ScalarHandler scalarHandler = new ScalarHandler<>(); + + QueryRunner runner = new QueryRunner(); + String insertSQL = "INSERT INTO employee (firstname,lastname,salary, hireddate) VALUES (?, ?, ?, ?)"; + + int newId = runner.insert(connection, insertSQL, scalarHandler, "Jenny", "Medici", 60000.60, new Date()); + + assertEquals(newId, 6); + } + + @Test + public void givenSalary_whenUpdating_thenUpdated() throws SQLException { + double salary = 35000; + + QueryRunner runner = new QueryRunner(); + String updateSQL = "UPDATE employee SET salary = salary * 1.1 WHERE salary <= ?"; + int numRowsUpdated = runner.update(connection, updateSQL, salary); + + assertEquals(numRowsUpdated, 3); + } + + @Test + public void whenDeletingRecord_thenDeleted() throws SQLException { + QueryRunner runner = new QueryRunner(); + String deleteSQL = "DELETE FROM employee WHERE id = ?"; + int numRowsDeleted = runner.update(connection, deleteSQL, 3); + + assertEquals(numRowsDeleted, 1); + } + + @Test + public void givenAsyncRunner_whenExecutingQuery_thenExpectedList() throws Exception { + AsyncQueryRunner runner = new AsyncQueryRunner(Executors.newCachedThreadPool()); + + EmployeeHandler employeeHandler = new EmployeeHandler(connection); + String query = "SELECT * FROM employee"; + Future> future = runner.query(connection, query, employeeHandler); + List employeeList = future.get(10, TimeUnit.SECONDS); + + assertEquals(employeeList.size(), 5); + } + +} diff --git a/libraries/src/test/java/com/baeldung/commons/lang3/StringUtilsUnitTest.java b/libraries/src/test/java/com/baeldung/commons/lang3/StringUtilsUnitTest.java index 15620455aabb..191387d088fe 100644 --- a/libraries/src/test/java/com/baeldung/commons/lang3/StringUtilsUnitTest.java +++ b/libraries/src/test/java/com/baeldung/commons/lang3/StringUtilsUnitTest.java @@ -2,9 +2,10 @@ import org.apache.commons.lang3.StringUtils; import org.junit.Test; + import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class StringUtilsUnitTest { @Test diff --git a/libraries/src/test/java/com/baeldung/hikaricp/HikariCPUnitTest.java b/libraries/src/test/java/com/baeldung/hikaricp/HikariCPIntegrationTest.java similarity index 88% rename from libraries/src/test/java/com/baeldung/hikaricp/HikariCPUnitTest.java rename to libraries/src/test/java/com/baeldung/hikaricp/HikariCPIntegrationTest.java index 1a1c5ef868d6..80588ecc03c7 100644 --- a/libraries/src/test/java/com/baeldung/hikaricp/HikariCPUnitTest.java +++ b/libraries/src/test/java/com/baeldung/hikaricp/HikariCPIntegrationTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.assertEquals; -public class HikariCPUnitTest { +public class HikariCPIntegrationTest { @Test public void givenConnection_thenFetchDbData() { diff --git a/libraries/src/test/java/com/baeldung/hll/HLLUnitTest.java b/libraries/src/test/java/com/baeldung/hll/HLLUnitTest.java new file mode 100644 index 000000000000..8d09c99f0f1e --- /dev/null +++ b/libraries/src/test/java/com/baeldung/hll/HLLUnitTest.java @@ -0,0 +1,63 @@ +package com.baeldung.hll; + + +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; +import net.agkn.hll.HLL; +import org.assertj.core.data.Offset; +import org.junit.Test; + +import java.util.stream.LongStream; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +public class HLLUnitTest { + + @Test + public void givenHLL_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinality() { + //given + long numberOfElements = 100_000_000; + long toleratedDifference = 1_000_000; + HashFunction hashFunction = Hashing.murmur3_128(); + HLL hll = new HLL(14, 5); + + //when + LongStream.range(0, numberOfElements).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + hll.addRaw(hashedValue); + } + ); + + //then + long cardinality = hll.cardinality(); + assertThat(cardinality).isCloseTo(numberOfElements, Offset.offset(toleratedDifference)); + } + + @Test + public void givenTwoHLLs_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinalityForUnionOfHLLs() { + //given + long numberOfElements = 100_000_000; + long toleratedDifference = 1_000_000; + HashFunction hashFunction = Hashing.murmur3_128(); + HLL firstHll = new HLL(15, 5); + HLL secondHLL = new HLL(15, 5); + + //when + LongStream.range(0, numberOfElements).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + firstHll.addRaw(hashedValue); + } + ); + + LongStream.range(numberOfElements, numberOfElements * 2).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + secondHLL.addRaw(hashedValue); + } + ); + + //then + firstHll.union(secondHLL); + long cardinality = firstHll.cardinality(); + assertThat(cardinality).isCloseTo(numberOfElements * 2, Offset.offset(toleratedDifference * 2)); + } +} diff --git a/libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java b/libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java index 39d54085e292..5e65c585aaca 100644 --- a/libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java +++ b/libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java @@ -8,7 +8,9 @@ import org.junit.Ignore; import org.junit.Test; -import static junit.framework.Assert.*; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNotSame; +import static junit.framework.Assert.assertTrue; import static junit.framework.TestCase.assertEquals; public class JasyptUnitTest { @@ -30,7 +32,7 @@ public void givenTextPrivateData_whenDecrypt_thenCompareToEncrypted() { } @Test - public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswordsShouldBeSame(){ + public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswordsShouldBeSame() { String password = "secret-pass"; BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor(); String encryptedPassword = passwordEncryptor.encryptPassword(password); @@ -43,7 +45,7 @@ public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswords } @Test - public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswordsShouldNotBeSame(){ + public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswordsShouldNotBeSame() { String password = "secret-pass"; BasicPasswordEncryptor passwordEncryptor = new BasicPasswordEncryptor(); String encryptedPassword = passwordEncryptor.encryptPassword(password); @@ -56,7 +58,6 @@ public void givenTextPassword_whenOneWayEncryption_thenCompareEncryptedPasswords } - @Test @Ignore("should have installed local_policy.jar") public void givenTextPrivateData_whenDecrypt_thenCompareToEncryptedWithCustomAlgorithm() { @@ -77,7 +78,7 @@ public void givenTextPrivateData_whenDecrypt_thenCompareToEncryptedWithCustomAlg @Test @Ignore("should have installed local_policy.jar") - public void givenTextPrivateData_whenDecryptOnHighPerformance_thenDecrypt(){ + public void givenTextPrivateData_whenDecryptOnHighPerformance_thenDecrypt() { //given String privateData = "secret-data"; PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); diff --git a/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java b/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java index 578f9ff9022e..e916a229f751 100644 --- a/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java +++ b/libraries/src/test/java/com/baeldung/jdo/GuideToJDOIntegrationTest.java @@ -8,7 +8,6 @@ import javax.jdo.PersistenceManagerFactory; import javax.jdo.Query; import javax.jdo.Transaction; -import java.util.Iterator; import java.util.List; import static org.junit.Assert.assertEquals; diff --git a/libraries/src/test/java/com/baeldung/opennlp/OpenNLPTests.java b/libraries/src/test/java/com/baeldung/opennlp/OpenNLPTests.java deleted file mode 100644 index 38bc8e002b3c..000000000000 --- a/libraries/src/test/java/com/baeldung/opennlp/OpenNLPTests.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.baeldung.opennlp; - -import opennlp.tools.chunker.ChunkerME; -import opennlp.tools.chunker.ChunkerModel; -import opennlp.tools.cmdline.postag.POSModelLoader; -import opennlp.tools.doccat.DoccatFactory; -import opennlp.tools.doccat.DoccatModel; -import opennlp.tools.doccat.DocumentCategorizerME; -import opennlp.tools.doccat.DocumentSample; -import opennlp.tools.doccat.DocumentSampleStream; -import opennlp.tools.namefind.NameFinderME; -import opennlp.tools.namefind.TokenNameFinderModel; -import opennlp.tools.postag.POSModel; -import opennlp.tools.postag.POSSample; -import opennlp.tools.postag.POSTaggerME; -import opennlp.tools.sentdetect.SentenceDetectorME; -import opennlp.tools.sentdetect.SentenceModel; -import opennlp.tools.tokenize.WhitespaceTokenizer; -import opennlp.tools.util.InputStreamFactory; -import opennlp.tools.util.ObjectStream; -import opennlp.tools.util.PlainTextByLineStream; -import opennlp.tools.util.Span; -import opennlp.tools.util.TrainingParameters; -import org.junit.Test; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.Assert.assertEquals; - -public class OpenNLPTests { - - private final static String text = "To get to the south: Go to the store. Buy a compass. Use the compass. Then walk to the south."; - private final static String sentence[] = new String[]{"James", "Jordan", "live", "in", "Oklahoma", "city", "."}; - - @Test - public void givenText_WhenDetectSentences_ThenCountSentences() { - InputStream is; - SentenceModel model; - try { - is = new FileInputStream("OpenNLP/en-sent.bin"); - model = new SentenceModel(is); - SentenceDetectorME sdetector = new SentenceDetectorME(model); - String sentences[] = sdetector.sentDetect(text); - assertEquals(4, sentences.length); - is.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void givenText_WhenDetectTokens_ThenVerifyNames() { - InputStream is; - TokenNameFinderModel model; - try { - is = new FileInputStream("OpenNLP/en-ner-person.bin"); - model = new TokenNameFinderModel(is); - is.close(); - NameFinderME nameFinder = new NameFinderME(model); - Span nameSpans[] = nameFinder.find(sentence); - String[] names = Span.spansToStrings(nameSpans, sentence); - assertEquals(1, names.length); - assertEquals("James Jordan", names[0]); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void givenText_WhenDetectTokens_ThenVerifyLocations() { - InputStream is; - TokenNameFinderModel model; - try { - is = new FileInputStream("OpenNLP/en-ner-location.bin"); - model = new TokenNameFinderModel(is); - is.close(); - NameFinderME nameFinder = new NameFinderME(model); - Span locationSpans[] = nameFinder.find(sentence); - String[] locations = Span.spansToStrings(locationSpans, sentence); - assertEquals(1, locations.length); - assertEquals("Oklahoma", locations[0]); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void givenText_WhenCategorizeDocument_ThenVerifyDocumentContent() { - DoccatModel docCatModel; - try { - InputStreamFactory isf = new InputStreamFactory() { - public InputStream createInputStream() throws IOException { - return new FileInputStream("OpenNLP/doc-cat.train"); - } - }; - ObjectStream lineStream = new PlainTextByLineStream(isf, "UTF-8"); - ObjectStream sampleStream = new DocumentSampleStream(lineStream); - DoccatFactory docCatFactory = new DoccatFactory(); - docCatModel = DocumentCategorizerME.train("en", sampleStream, TrainingParameters.defaultParams(), docCatFactory); - DocumentCategorizerME myCategorizer = new DocumentCategorizerME(docCatModel); - double[] outcomes = myCategorizer.categorize(sentence); - String category = myCategorizer.getBestCategory(outcomes); - assertEquals("GOOD", category); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void givenText_WhenTagDocument_ThenVerifyTaggedString() { - try { - POSModel posModel = new POSModelLoader().load(new File("OpenNLP/en-pos-maxent.bin")); - POSTaggerME posTaggerME = new POSTaggerME(posModel); - InputStreamFactory isf = new InputStreamFactory() { - public InputStream createInputStream() throws IOException { - return new FileInputStream("OpenNLP/PartOfSpeechTag.txt"); - } - }; - ObjectStream lineStream = new PlainTextByLineStream(isf, "UTF-8"); - String line; - while ((line = lineStream.read()) != null) { - String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize(line); - String[] tags = posTaggerME.tag(whitespaceTokenizerLine); - POSSample posSample = new POSSample(whitespaceTokenizerLine, tags); - assertEquals("Out_IN of_IN the_DT night_NN that_WDT covers_VBZ me_PRP", posSample.toString()); - } - lineStream.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void givenText_WhenChunked_ThenCountChunks() { - try { - InputStream is = new FileInputStream("OpenNLP/en-chunker.bin"); - ChunkerModel cModel = new ChunkerModel(is); - ChunkerME chunkerME = new ChunkerME(cModel); - String pos[] = new String[]{"NNP", "NNP", "NNP", "POS", "NNP", "NN", "VBD"}; - String chunks[] = chunkerME.chunk(sentence, pos); - assertEquals(7, chunks.length); - } catch (IOException e) { - e.printStackTrace(); - } - } - -} diff --git a/libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java b/libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java index 2952938cd9f1..b152b229646c 100644 --- a/libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java +++ b/libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java @@ -8,7 +8,11 @@ import au.com.dius.pact.model.RequestResponsePact; import org.junit.Rule; import org.junit.Test; -import org.springframework.http.*; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.util.HashMap; @@ -20,7 +24,7 @@ public class PactConsumerDrivenContractUnitTest { @Rule public PactProviderRuleMk2 mockProvider - = new PactProviderRuleMk2("test_provider", "localhost", 8080, this); + = new PactProviderRuleMk2("test_provider", "localhost", 8080, this); @Pact(consumer = "test_consumer") public RequestResponsePact createPact(PactDslWithProvider builder) { @@ -28,25 +32,25 @@ public RequestResponsePact createPact(PactDslWithProvider builder) { headers.put("Content-Type", "application/json"); return builder - .given("test GET ") - .uponReceiving("GET REQUEST") - .path("/") - .method("GET") - .willRespondWith() - .status(200) - .headers(headers) - .body("{\"condition\": true, \"name\": \"tom\"}") - .given("test POST") - .uponReceiving("POST REQUEST") - .method("POST") - .headers(headers) - .body("{\"name\": \"Michael\"}") - .path("/create") - .willRespondWith() - .status(201) - .headers(headers) - .body("") - .toPact(); + .given("test GET ") + .uponReceiving("GET REQUEST") + .path("/") + .method("GET") + .willRespondWith() + .status(200) + .headers(headers) + .body("{\"condition\": true, \"name\": \"tom\"}") + .given("test POST") + .uponReceiving("POST REQUEST") + .method("POST") + .headers(headers) + .body("{\"name\": \"Michael\"}") + .path("/create") + .willRespondWith() + .status(201) + .headers(headers) + .body("") + .toPact(); } @@ -55,7 +59,7 @@ public RequestResponsePact createPact(PactDslWithProvider builder) { public void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody() { //when ResponseEntity response - = new RestTemplate().getForEntity(mockProvider.getUrl(), String.class); + = new RestTemplate().getForEntity(mockProvider.getUrl(), String.class); //then assertThat(response.getStatusCode().value()).isEqualTo(200); @@ -69,10 +73,10 @@ public void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody() { //when ResponseEntity postResponse = new RestTemplate().exchange( - mockProvider.getUrl() + "/create", - HttpMethod.POST, - new HttpEntity<>(jsonBody, httpHeaders), - String.class + mockProvider.getUrl() + "/create", + HttpMethod.POST, + new HttpEntity<>(jsonBody, httpHeaders), + String.class ); //then diff --git a/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java b/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java index a8dbaadc5ab7..f08b43f69b45 100644 --- a/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java +++ b/libraries/src/test/java/com/baeldung/text/StrBuilderTest.java @@ -5,12 +5,12 @@ import org.junit.Test; public class StrBuilderTest { - + @Test public void whenReplaced_thenCorrect() { StrBuilder strBuilder = new StrBuilder("example StrBuilder!"); strBuilder.replaceAll("example", "new"); - + Assert.assertEquals(new StrBuilder("new StrBuilder!"), strBuilder); } @@ -21,4 +21,4 @@ public void whenCleared_thenEmpty() { Assert.assertEquals(new StrBuilder(""), strBuilder); } -} +} \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/text/WordUtilsTest.java b/libraries/src/test/java/com/baeldung/text/WordUtilsTest.java index b9268d67b366..fafba2fbb544 100644 --- a/libraries/src/test/java/com/baeldung/text/WordUtilsTest.java +++ b/libraries/src/test/java/com/baeldung/text/WordUtilsTest.java @@ -13,11 +13,11 @@ public void whenCapitalized_thenCorrect() { Assert.assertEquals("To Be Capitalized!", result); } - + @Test public void whenContainsWords_thenCorrect() { boolean containsWords = WordUtils.containsAllWords("String to search", "to", "search"); - + Assert.assertTrue(containsWords); } } diff --git a/libraries/src/test/resources/employees.sql b/libraries/src/test/resources/employees.sql new file mode 100644 index 000000000000..c6109724cfc0 --- /dev/null +++ b/libraries/src/test/resources/employees.sql @@ -0,0 +1,43 @@ +CREATE TABLE employee( + id int NOT NULL PRIMARY KEY auto_increment, + firstname varchar(255), + lastname varchar(255), + salary double, + hireddate date +); + +CREATE TABLE email( + id int NOT NULL PRIMARY KEY auto_increment, + employeeid int, + address varchar(255) +); + +CREATE TABLE employee_legacy( + id int NOT NULL PRIMARY KEY auto_increment, + first_name varchar(255), + last_name varchar(255), + salary double, + hired_date date +); + + +INSERT INTO employee (firstname,lastname,salary,hireddate) VALUES ('John', 'Doe', 10000.10, to_date('01-01-2001','dd-mm-yyyy')); +INSERT INTO employee (firstname,lastname,salary,hireddate) VALUES ('Kevin', 'Smith', 20000.20, to_date('02-02-2002','dd-mm-yyyy')); +INSERT INTO employee (firstname,lastname,salary,hireddate) VALUES ('Kim', 'Smith', 30000.30, to_date('03-03-2003','dd-mm-yyyy')); +INSERT INTO employee (firstname,lastname,salary,hireddate) VALUES ('Stephen', 'Torvalds', 40000.40, to_date('04-04-2004','dd-mm-yyyy')); +INSERT INTO employee (firstname,lastname,salary,hireddate) VALUES ('Christian', 'Reynolds', 50000.50, to_date('05-05-2005','dd-mm-yyyy')); + +INSERT INTO employee_legacy (first_name,last_name,salary,hired_date) VALUES ('John', 'Doe', 10000.10, to_date('01-01-2001','dd-mm-yyyy')); +INSERT INTO employee_legacy (first_name,last_name,salary,hired_date) VALUES ('Kevin', 'Smith', 20000.20, to_date('02-02-2002','dd-mm-yyyy')); +INSERT INTO employee_legacy (first_name,last_name,salary,hired_date) VALUES ('Kim', 'Smith', 30000.30, to_date('03-03-2003','dd-mm-yyyy')); +INSERT INTO employee_legacy (first_name,last_name,salary,hired_date) VALUES ('Stephen', 'Torvalds', 40000.40, to_date('04-04-2004','dd-mm-yyyy')); +INSERT INTO employee_legacy (first_name,last_name,salary,hired_date) VALUES ('Christian', 'Reynolds', 50000.50, to_date('05-05-2005','dd-mm-yyyy')); + +INSERT INTO email (employeeid,address) VALUES (1, 'john@baeldung.com'); +INSERT INTO email (employeeid,address) VALUES (1, 'john@gmail.com'); +INSERT INTO email (employeeid,address) VALUES (2, 'kevin@baeldung.com'); +INSERT INTO email (employeeid,address) VALUES (3, 'kim@baeldung.com'); +INSERT INTO email (employeeid,address) VALUES (3, 'kim@gmail.com'); +INSERT INTO email (employeeid,address) VALUES (3, 'kim@outlook.com'); +INSERT INTO email (employeeid,address) VALUES (4, 'stephen@baeldung.com'); +INSERT INTO email (employeeid,address) VALUES (5, 'christian@gmail.com'); diff --git a/liquibase/README.md b/liquibase/README.md new file mode 100644 index 000000000000..0e5bfcb8a6d8 --- /dev/null +++ b/liquibase/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Liquibase Rollback](http://www.baeldung.com/liquibase-rollback) diff --git a/log-mdc/README.md b/log-mdc/README.md index be0b2670c352..38412248240d 100644 --- a/log-mdc/README.md +++ b/log-mdc/README.md @@ -2,6 +2,7 @@ - TBD - [Improved Java Logging with Mapped Diagnostic Context (MDC)](http://www.baeldung.com/mdc-in-log4j-2-logback) - [Java Logging with Nested Diagnostic Context (NDC)](http://www.baeldung.com/java-logging-ndc-log4j) +- [Drools Using Rules from Excel Files](http://www.baeldung.com/drools-excel) ### References diff --git a/metrics/README.md b/metrics/README.md index c98024c479fc..09fe925604b3 100644 --- a/metrics/README.md +++ b/metrics/README.md @@ -1,3 +1,4 @@ ## Relevant articles: - [Intro to Dropwizard Metrics](http://www.baeldung.com/dropwizard-metrics) +- [Introduction to Netflix Servo](http://www.baeldung.com/netflix-servo) diff --git a/metrics/pom.xml b/metrics/pom.xml index 794c53b15778..574c1ac132d7 100644 --- a/metrics/pom.xml +++ b/metrics/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 @@ -15,7 +15,7 @@ 3.1.2 3.1.0 - 0.12.16 + 0.12.17 @@ -44,10 +44,24 @@ javax.servlet-api ${dep.ver.servlet} + com.netflix.servo servo-core ${netflix.servo.ver} + test + + + com.netflix.servo + servo-atlas + ${netflix.servo.ver} + test + + + com.fasterxml.jackson.dataformat + jackson-dataformat-smile + 2.8.9 + test diff --git a/metrics/src/test/java/com/baeldung/metrics/servo/AtlasObserverLiveTest.java b/metrics/src/test/java/com/baeldung/metrics/servo/AtlasObserverLiveTest.java new file mode 100644 index 000000000000..cc2d3aa39318 --- /dev/null +++ b/metrics/src/test/java/com/baeldung/metrics/servo/AtlasObserverLiveTest.java @@ -0,0 +1,95 @@ +package com.baeldung.metrics.servo; + +import com.netflix.servo.DefaultMonitorRegistry; +import com.netflix.servo.monitor.BasicCounter; +import com.netflix.servo.monitor.Counter; +import com.netflix.servo.monitor.MonitorConfig; +import com.netflix.servo.publish.BasicMetricFilter; +import com.netflix.servo.publish.MonitorRegistryMetricPoller; +import com.netflix.servo.publish.PollRunnable; +import com.netflix.servo.publish.PollScheduler; +import com.netflix.servo.publish.atlas.AtlasMetricObserver; +import com.netflix.servo.publish.atlas.BasicAtlasConfig; +import com.netflix.servo.tag.BasicTagList; +import org.apache.commons.lang.math.RandomUtils; +import org.apache.http.HttpEntity; +import org.apache.http.impl.client.HttpClients; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.apache.http.client.methods.RequestBuilder.get; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; + +/** + * @author aiet + */ +public class AtlasObserverLiveTest { + + private final String atlasUri = "http://localhost:7101/api/v1"; + + @Before + public void prepareScheduler() { + System.setProperty("servo.pollers", "1000"); + System.setProperty("servo.atlas.batchSize", "1"); + System.setProperty("servo.atlas.uri", atlasUri + "/publish"); + AtlasMetricObserver observer = new AtlasMetricObserver(new BasicAtlasConfig(), BasicTagList.of("servo", "counter")); + + PollRunnable task = new PollRunnable(new MonitorRegistryMetricPoller(), new BasicMetricFilter(true), observer); + PollScheduler + .getInstance() + .start(); + PollScheduler + .getInstance() + .addPoller(task, 1, SECONDS); + } + + @After + public void stopScheduler() { + if (PollScheduler + .getInstance() + .isStarted()) { + PollScheduler + .getInstance() + .stop(); + } + } + + private String atlasValuesOfTag(String tagname) throws Exception { + HttpEntity entity = HttpClients + .createDefault() + .execute(get() + .setUri(atlasUri + "/tags/" + tagname) + .build()) + .getEntity(); + return new BufferedReader(new InputStreamReader(entity.getContent())).readLine(); + } + + @Test + public void givenAtlasAndCounter_whenRegister_thenPublishedToAtlas() throws Exception { + Counter counter = new BasicCounter(MonitorConfig + .builder("test") + .withTag("servo", "counter") + .build()); + DefaultMonitorRegistry + .getInstance() + .register(counter); + assertThat(atlasValuesOfTag("servo"), not(containsString("counter"))); + + for (int i = 0; i < 3; i++) { + counter.increment(RandomUtils.nextInt(10)); + SECONDS.sleep(1); + counter.increment(-1 * RandomUtils.nextInt(10)); + SECONDS.sleep(1); + } + + assertThat(atlasValuesOfTag("servo"), containsString("counter")); + } + +} diff --git a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorForPartialMocking.java b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorForPartialMocking.java index 771444f13d2c..9a3bc8875bb0 100644 --- a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorForPartialMocking.java +++ b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorForPartialMocking.java @@ -1,12 +1,12 @@ package com.baeldung.powermockito.introduction; -public class CollaboratorForPartialMocking { +class CollaboratorForPartialMocking { - public static String staticMethod() { + static String staticMethod() { return "Hello Baeldung!"; } - public final String finalMethod() { + final String finalMethod() { return "Hello Baeldung!"; } @@ -14,7 +14,7 @@ private String privateMethod() { return "Hello Baeldung!"; } - public String privateMethodCaller() { + String privateMethodCaller() { return privateMethod() + " Welcome to the Java world."; } } \ No newline at end of file diff --git a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithFinalMethods.java b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithFinalMethods.java index 8287454782a3..f748b6a6fc51 100644 --- a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithFinalMethods.java +++ b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithFinalMethods.java @@ -1,8 +1,8 @@ package com.baeldung.powermockito.introduction; -public class CollaboratorWithFinalMethods { +class CollaboratorWithFinalMethods { - public final String helloMethod() { + final String helloMethod() { return "Hello World!"; } diff --git a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithStaticMethods.java b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithStaticMethods.java index 2795ae97f147..1f416aefa712 100644 --- a/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithStaticMethods.java +++ b/mockito/src/test/java/com/baeldung/powermockito/introduction/CollaboratorWithStaticMethods.java @@ -1,16 +1,16 @@ package com.baeldung.powermockito.introduction; -public class CollaboratorWithStaticMethods { +class CollaboratorWithStaticMethods { - public static String firstMethod(String name) { + static String firstMethod(String name) { return "Hello " + name + " !"; } - public static String secondMethod() { + static String secondMethod() { return "Hello no one!"; } - public static String thirdMethod() { + static String thirdMethod() { return "Hello no one again!"; } } \ No newline at end of file diff --git a/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java b/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java index 4e090e66526f..5e083adbf5fa 100644 --- a/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java +++ b/mockito/src/test/java/org/baeldung/mockito/MockitoAnnotationIntegrationTest.java @@ -17,7 +17,7 @@ public class MockitoAnnotationIntegrationTest { private List mockedList; @Spy - List spiedList = new ArrayList(); + private List spiedList = new ArrayList<>(); @Before public void init() { @@ -87,6 +87,7 @@ public void whenNotUseCaptorAnnotation_thenCorrect() { } @Captor + private ArgumentCaptor argCaptor; @Test @@ -98,10 +99,10 @@ public void whenUseCaptorAnnotation_thenTheSam() { } @Mock - Map wordMap; + private Map wordMap; @InjectMocks - MyDictionary dic = new MyDictionary(); + private MyDictionary dic = new MyDictionary(); @Test public void whenUseInjectMocksAnnotation_thenCorrect() { diff --git a/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java b/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java index 6ec3b34db57a..f846907fd7a8 100644 --- a/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java +++ b/mockito/src/test/java/org/baeldung/mockito/MockitoMockIntegrationTest.java @@ -24,7 +24,7 @@ public Boolean answer(InvocationOnMock invocation) throws Throwable { } @Rule - public ExpectedException thrown = ExpectedException.none(); + private ExpectedException thrown = ExpectedException.none(); @Test public void whenUsingSimpleMock_thenCorrect() { diff --git a/mockito/src/test/java/org/baeldung/mockito/MyDictionary.java b/mockito/src/test/java/org/baeldung/mockito/MyDictionary.java index a613b28f59fb..8a0ea925024e 100644 --- a/mockito/src/test/java/org/baeldung/mockito/MyDictionary.java +++ b/mockito/src/test/java/org/baeldung/mockito/MyDictionary.java @@ -3,19 +3,19 @@ import java.util.HashMap; import java.util.Map; -public class MyDictionary { +class MyDictionary { - Map wordMap; + private Map wordMap; - public MyDictionary() { - wordMap = new HashMap(); + MyDictionary() { + wordMap = new HashMap<>(); } public void add(final String word, final String meaning) { wordMap.put(word, meaning); } - public String getMeaning(final String word) { + String getMeaning(final String word) { return wordMap.get(word); } } diff --git a/mockito/src/test/java/org/baeldung/mockito/MyList.java b/mockito/src/test/java/org/baeldung/mockito/MyList.java index 548596e6b6e1..be69ef8a8a8f 100644 --- a/mockito/src/test/java/org/baeldung/mockito/MyList.java +++ b/mockito/src/test/java/org/baeldung/mockito/MyList.java @@ -2,7 +2,7 @@ import java.util.AbstractList; -public class MyList extends AbstractList { +class MyList extends AbstractList { @Override public String get(final int index) { diff --git a/mockserver/pom.xml b/mockserver/pom.xml new file mode 100644 index 000000000000..a3ca5459c973 --- /dev/null +++ b/mockserver/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + com.baeldung + mockserver + 1.0.0-SNAPSHOT + + 3.10.8 + 4.4.1 + + + + + org.mock-server + mockserver-netty + ${mock-sever-netty-version} + + + + org.mock-server + mockserver-client-java + ${mock-sever-netty-version} + + + + org.apache.httpcomponents + httpclient + ${apche-http-version} + + + org.apache.httpcomponents + httpcore + ${apche-http-version} + + + + + \ No newline at end of file diff --git a/mockserver/src/main/java/com/baeldung/mock/server/ExpectationCallbackHandler.java b/mockserver/src/main/java/com/baeldung/mock/server/ExpectationCallbackHandler.java new file mode 100644 index 000000000000..a74dca28da1b --- /dev/null +++ b/mockserver/src/main/java/com/baeldung/mock/server/ExpectationCallbackHandler.java @@ -0,0 +1,23 @@ +package com.baeldung.mock.server; + +import org.mockserver.mock.action.ExpectationCallback; +import org.mockserver.model.HttpRequest; +import org.mockserver.model.HttpResponse; + +import static org.mockserver.model.HttpResponse.notFoundResponse; +import static org.mockserver.model.HttpResponse.response; + + +public class ExpectationCallbackHandler implements ExpectationCallback { + + public HttpResponse handle(HttpRequest httpRequest) { + if (httpRequest.getPath().getValue().endsWith("/callback")) { + return httpResponse; + } else { + return notFoundResponse(); + } + } + + public static HttpResponse httpResponse = response() + .withStatusCode(200); +} diff --git a/mockserver/src/test/java/com/baeldung/mock/server/TestMockServer.java b/mockserver/src/test/java/com/baeldung/mock/server/TestMockServer.java new file mode 100644 index 000000000000..aea1b8b278bd --- /dev/null +++ b/mockserver/src/test/java/com/baeldung/mock/server/TestMockServer.java @@ -0,0 +1,178 @@ +package com.baeldung.mock.server; + +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClientBuilder; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockserver.client.server.MockServerClient; +import org.mockserver.integration.ClientAndProxy; +import org.mockserver.integration.ClientAndServer; +import org.mockserver.model.Header; +import org.mockserver.model.HttpForward; +import org.mockserver.verify.VerificationTimes; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import static junit.framework.Assert.assertEquals; +import static org.mockserver.integration.ClientAndProxy.startClientAndProxy; +import static org.mockserver.integration.ClientAndServer.startClientAndServer; +import static org.mockserver.matchers.Times.exactly; +import static org.mockserver.model.HttpClassCallback.callback; +import static org.mockserver.model.HttpForward.forward; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; +import static org.mockserver.model.StringBody.exact; + +public class TestMockServer { + + private ClientAndProxy proxy; + private ClientAndServer mockServer; + + @Before + public void startProxy() { + mockServer = startClientAndServer(1080); + proxy = startClientAndProxy(1090); + } + + + @Test + public void whenPostRequestMockServer_thenServerReceived(){ + createExpectationForInvalidAuth(); + hitTheServerWithPostRequest(); + verifyPostRequest(); + } + + @Test + public void whenPostRequestForInvalidAuth_then401Received(){ + createExpectationForInvalidAuth(); + org.apache.http.HttpResponse response = hitTheServerWithPostRequest(); + assertEquals(401, response.getStatusLine().getStatusCode()); + } + + @Test + public void whenGetRequest_ThenForward(){ + createExpectationForForward(); + hitTheServerWithGetRequest("index.html"); + verifyGetRequest(); + + } + + @Test + public void whenCallbackRequest_ThenCallbackMethodCalled(){ + createExpectationForCallBack(); + org.apache.http.HttpResponse response= hitTheServerWithGetRequest("/callback"); + assertEquals(200,response.getStatusLine().getStatusCode()); + } + + private void verifyPostRequest() { + new MockServerClient("localhost", 1080).verify( + request() + .withMethod("POST") + .withPath("/validate") + .withBody(exact("{username: 'foo', password: 'bar'}")), + VerificationTimes.exactly(1) + ); + } + private void verifyGetRequest() { + new MockServerClient("localhost", 1080).verify( + request() + .withMethod("GET") + .withPath("/index.html"), + VerificationTimes.exactly(1) + ); + } + + private org.apache.http.HttpResponse hitTheServerWithPostRequest() { + String url = "http://127.0.0.1:1080/validate"; + HttpClient client = HttpClientBuilder.create().build(); + HttpPost post = new HttpPost(url); + post.setHeader("Content-type", "application/json"); + org.apache.http.HttpResponse response=null; + + try { + StringEntity stringEntity = new StringEntity("{username: 'foo', password: 'bar'}"); + post.getRequestLine(); + post.setEntity(stringEntity); + response=client.execute(post); + + } catch (Exception e) { + throw new RuntimeException(e); + } + return response; + } + + private org.apache.http.HttpResponse hitTheServerWithGetRequest(String page) { + String url = "http://127.0.0.1:1080/"+page; + HttpClient client = HttpClientBuilder.create().build(); + org.apache.http.HttpResponse response=null; + HttpGet get = new HttpGet(url); + try { + response=client.execute(get); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return response; + } + + private void createExpectationForInvalidAuth() { + new MockServerClient("127.0.0.1", 1080) + .when( + request() + .withMethod("POST") + .withPath("/validate") + .withHeader("\"Content-type\", \"application/json\"") + .withBody(exact("{username: 'foo', password: 'bar'}")), + exactly(1) + ) + .respond( + response() + .withStatusCode(401) + .withHeaders( + new Header("Content-Type", "application/json; charset=utf-8"), + new Header("Cache-Control", "public, max-age=86400") + ) + .withBody("{ message: 'incorrect username and password combination' }") + .withDelay(TimeUnit.SECONDS,1) + ); + } + + private void createExpectationForForward(){ + new MockServerClient("127.0.0.1", 1080) + .when( + request() + .withMethod("GET") + .withPath("/index.html"), + exactly(1) + ) + .forward( + forward() + .withHost("www.mock-server.com") + .withPort(80) + .withScheme(HttpForward.Scheme.HTTP) + ); + } + + private void createExpectationForCallBack(){ + mockServer + .when( + request() + .withPath("/callback") + ) + .callback( + callback() + .withCallbackClass("com.baeldung.mock.server.ExpectationCallbackHandler") + ); + } + + @After + public void stopProxy() { + proxy.stop(); + mockServer.stop(); + } +} diff --git a/pom.xml b/pom.xml index b20d82618b8b..f0a331e3bde9 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ + spring-activiti aws akka-streams algorithms @@ -57,6 +58,7 @@ guava guava18 guava19 + guava21 guice disruptor @@ -93,7 +95,7 @@ log4j log4j2 lombok - + mapstruct metrics mesos-marathon @@ -121,7 +123,7 @@ selenium-junit-testng solr spark-java - spring-5 + spring-5-mvc spring-akka spring-amqp @@ -140,7 +142,6 @@ spring-data-couchbase-2 spring-data-dynamodb spring-data-elasticsearch - spring-data-javaslang spring-data-mongodb spring-data-neo4j spring-data-redis @@ -192,10 +193,12 @@ spring-security-mvc-login spring-security-mvc-persisted-remember-me spring-security-mvc-session + spring-security-mvc-socket spring-security-rest-basic-auth spring-security-rest-custom spring-security-rest-full spring-security-rest + spring-security-sso spring-security-x509 spring-session spring-sleuth @@ -227,6 +230,7 @@ drools liquibase spring-boot-property-exp + mockserver diff --git a/selenium-junit-testng/README.md b/selenium-junit-testng/README.md index cc1b72828773..29393b956b76 100644 --- a/selenium-junit-testng/README.md +++ b/selenium-junit-testng/README.md @@ -1,3 +1,4 @@ ### Relevant Articles: - [Guide to Selenium with JUnit / TestNG](http://www.baeldung.com/java-selenium-with-junit-and-testng) - [Testing a Site with Selenium / Webdriver](http://www.baeldung.com) +- [Testing with Selenium/WebDriver and the Page Object Pattern](http://www.baeldung.com/selenium-webdriver-page-object) diff --git a/spring-5-mvc/README.md b/spring-5-mvc/README.md new file mode 100644 index 000000000000..c031a9d10ebd --- /dev/null +++ b/spring-5-mvc/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Spring Boot and Kotlin](http://www.baeldung.com/spring-boot-kotlin) diff --git a/spring-5/README.md b/spring-5/README.md index 510ee45f03d2..03b8121f90bc 100644 --- a/spring-5/README.md +++ b/spring-5/README.md @@ -7,4 +7,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Concurrent Test Execution in Spring 5](http://www.baeldung.com/spring-5-concurrent-tests) - [Introduction to the Functional Web Framework in Spring 5](http://www.baeldung.com/spring-5-functional-web) -- [Exploring the Spring MVC URL Matching Improvements](http://www.baeldung.com/spring-mvc-url-matching) +- [Exploring the Spring 5 MVC URL Matching Improvements](http://www.baeldung.com/spring-5-mvc-url-matching) + + diff --git a/spring-5/pom.xml b/spring-5/pom.xml index 4b373923ef35..c2c565aef698 100644 --- a/spring-5/pom.xml +++ b/spring-5/pom.xml @@ -39,6 +39,11 @@ org.springframework.boot spring-boot-starter-webflux + + org.projectreactor + reactor-spring + 1.0.1.RELEASE + diff --git a/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java b/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java new file mode 100644 index 000000000000..3a2e1b1a7598 --- /dev/null +++ b/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java @@ -0,0 +1,86 @@ +package com.baeldung.web.reactive.client; + +import org.reactivestreams.Publisher; +import org.reactivestreams.Subscriber; +import org.springframework.http.*; +import org.springframework.http.client.reactive.ClientHttpRequest; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.BodyInserter; +import org.springframework.web.reactive.function.BodyInserters; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +import java.net.URI; +import java.nio.charset.Charset; +import java.time.ZonedDateTime; +import java.util.Collections; + +@RestController +public class WebClientController { + + @ResponseStatus(HttpStatus.OK) + @GetMapping("/resource") + public void getResource() { + } + + public void demonstrateWebClient() { + // request + WebClient.UriSpec request1 = createWebClientWithServerURLAndDefaultValues().method(HttpMethod.POST); + WebClient.UriSpec request2 = createWebClientWithServerURLAndDefaultValues().post(); + + // request body specifications + WebClient.RequestBodySpec uri1 = createWebClientWithServerURLAndDefaultValues().method(HttpMethod.POST).uri("/resource"); + WebClient.RequestBodySpec uri2 = createWebClientWithServerURLAndDefaultValues().post().uri(URI.create("/resource")); + + // request header specification + WebClient.RequestHeadersSpec requestSpec1 = uri1.body(BodyInserters.fromPublisher(Mono.just("data"), String.class)); + WebClient.RequestHeadersSpec requestSpec2 = uri2.body(BodyInserters.fromObject("data")); + + // inserters + BodyInserter, ReactiveHttpOutputMessage> inserter1 = BodyInserters + .fromPublisher(Subscriber::onComplete, String.class); + + + LinkedMultiValueMap map = new LinkedMultiValueMap<>(); + map.add("key1", "value1"); + map.add("key2", "value2"); + + BodyInserter, ClientHttpRequest> inserter2 = BodyInserters.fromMultipartData(map); + BodyInserter inserter3 = BodyInserters.fromObject("body"); + + // responses + WebClient.ResponseSpec response1 = uri1 + .body(inserter3) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML) + .acceptCharset(Charset.forName("UTF-8")) + .ifNoneMatch("*") + .ifModifiedSince(ZonedDateTime.now()) + .retrieve(); + WebClient.ResponseSpec response2 = requestSpec2.retrieve(); + + } + + private WebClient createWebClient() { + return WebClient.create(); + } + + private WebClient createWebClientWithServerURL() { + return WebClient.create("http://localhost:8081"); + } + + private WebClient createWebClientWithServerURLAndDefaultValues() { + return WebClient + .builder() + .baseUrl("http://localhost:8081") + .defaultCookie("cookieKey", "cookieValue") + .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .defaultUriVariables(Collections.singletonMap("url", "http://localhost:8080")) + .build(); + } + +} diff --git a/spring-5/src/test/java/com/baeldung/web/client/WebTestClientTest.java b/spring-5/src/test/java/com/baeldung/web/client/WebTestClientTest.java new file mode 100644 index 000000000000..4127f22c01fa --- /dev/null +++ b/spring-5/src/test/java/com/baeldung/web/client/WebTestClientTest.java @@ -0,0 +1,58 @@ +package com.baeldung.web.client; + +import com.baeldung.Spring5Application; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.reactive.server.WebTestClient; +import org.springframework.web.reactive.function.server.RequestPredicates; +import org.springframework.web.reactive.function.server.RouterFunction; +import org.springframework.web.reactive.function.server.RouterFunctions; +import org.springframework.web.reactive.function.server.ServerResponse; +import org.springframework.web.server.WebHandler; +import reactor.core.publisher.Mono; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = Spring5Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class WebTestClientTest { + + @LocalServerPort + private int port; + + private final RouterFunction ROUTER_FUNCTION = RouterFunctions.route( + RequestPredicates.GET("/resource"), + request -> ServerResponse.ok().build() + ); + private final WebHandler WEB_HANDLER = exchange -> Mono.empty(); + + @Test + public void testWebTestClientWithServerWebHandler() { + WebTestClient.bindToWebHandler(WEB_HANDLER).build(); + } + + @Test + public void testWebTestClientWithRouterFunction() { + WebTestClient + .bindToRouterFunction(ROUTER_FUNCTION) + .build().get().uri("/resource") + .exchange() + .expectStatus().isOk() + .expectBody().isEmpty(); + } + + @Test + public void testWebTestClientWithServerURL() { + WebTestClient + .bindToServer() + .baseUrl("http://localhost:" + port) + .build() + .get() + .uri("/resource") + .exchange() + .expectStatus().is4xxClientError() + .expectBody(); + } + +} diff --git a/spring-activiti/pom.xml b/spring-activiti/pom.xml new file mode 100644 index 000000000000..3d2f1386df18 --- /dev/null +++ b/spring-activiti/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.example + spring-activiti + 0.0.1-SNAPSHOT + jar + + spring-activiti + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.activiti + activiti-spring-boot-starter-basic + 6.0.0 + + + org.springframework.boot + spring-boot-starter-web + + + + com.h2database + h2 + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiController.java b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiController.java new file mode 100644 index 000000000000..3924d31f681f --- /dev/null +++ b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiController.java @@ -0,0 +1,60 @@ +package com.example.activitiwithspring; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.task.Task; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ActivitiController { + private static final Logger logger = LoggerFactory.getLogger(ActivitiController.class); + @Autowired + private RuntimeService runtimeService; + + @Autowired + private TaskService taskService; + + @GetMapping("/start-process") + public String startProcess() { + runtimeService.startProcessInstanceByKey("my-process"); + return "Process started. Number of currently running process instances = " + runtimeService.createProcessInstanceQuery() + .count(); + } + + @GetMapping("/get-tasks/{processInstanceId}") + public List getTasks(@PathVariable String processInstanceId) { + List usertasks = taskService.createTaskQuery() + .processInstanceId(processInstanceId) + .list(); + + List tasks = usertasks.stream().map(task -> { + TaskRepresentation taskRepresentation = new TaskRepresentation(task.getId(), task.getName(), task.getProcessInstanceId()); + return taskRepresentation; + }).collect(Collectors.toList()); + return tasks; + } + + @GetMapping("/complete-task-A/{processInstanceId}") + public TaskRepresentation completeTaskA(@PathVariable String processInstanceId) { + Task task = taskService.createTaskQuery() + .processInstanceId(processInstanceId) + .singleResult(); + taskService.complete(task.getId()); + logger.info("Task completed"); + task = taskService.createTaskQuery() + .processInstanceId(processInstanceId) + .singleResult(); + + return new TaskRepresentation(task.getId(), task.getName(), task.getProcessInstanceId()); + } +} diff --git a/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java new file mode 100644 index 000000000000..e98b8ad7cab3 --- /dev/null +++ b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java @@ -0,0 +1,12 @@ +package com.example.activitiwithspring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ActivitiWithSpringApplication { + + public static void main(String[] args) { + SpringApplication.run(ActivitiWithSpringApplication.class, args); + } +} diff --git a/spring-activiti/src/main/java/com/example/activitiwithspring/TaskRepresentation.java b/spring-activiti/src/main/java/com/example/activitiwithspring/TaskRepresentation.java new file mode 100644 index 000000000000..bb1412b057e2 --- /dev/null +++ b/spring-activiti/src/main/java/com/example/activitiwithspring/TaskRepresentation.java @@ -0,0 +1,43 @@ +package com.example.activitiwithspring; + +class TaskRepresentation { + + private String id; + private String name; + private String processInstanceId; + + public TaskRepresentation() { + super(); + } + + public TaskRepresentation(String id, String name, String processInstanceId) { + this.id = id; + this.name = name; + this.processInstanceId = processInstanceId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getProcessInstanceId() { + return processInstanceId; + } + + public void setProcessInstanceId(String processInstanceId) { + this.processInstanceId = processInstanceId; + } + +} diff --git a/spring-activiti/src/main/resources/processes/my-process.bpmn20.xml b/spring-activiti/src/main/resources/processes/my-process.bpmn20.xml new file mode 100644 index 000000000000..3ced8d6b7cdb --- /dev/null +++ b/spring-activiti/src/main/resources/processes/my-process.bpmn20.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiControllerTest.java b/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiControllerTest.java new file mode 100644 index 000000000000..31762076643d --- /dev/null +++ b/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiControllerTest.java @@ -0,0 +1,120 @@ +package com.example.activitiwithspring; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; + +import org.activiti.engine.RuntimeService; +import org.activiti.engine.runtime.ProcessInstance; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@SpringBootTest +public class ActivitiControllerTest { + private static final Logger logger = LoggerFactory.getLogger(ActivitiControllerTest.class); + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + RuntimeService runtimeService; + + @Before + public void setUp() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac) + .build(); + + for (ProcessInstance instance : runtimeService.createProcessInstanceQuery() + .list()) { + runtimeService.deleteProcessInstance(instance.getId(), "Reset Processes"); + } + } + + @Test + public void givenProcess_whenStartProcess_thenIncreaseInProcessInstanceCount() throws Exception { + + String responseBody = this.mockMvc.perform(MockMvcRequestBuilders.get("/start-process")) + .andReturn() + .getResponse() + .getContentAsString(); + assertEquals("Process started. Number of currently running process instances = 1", responseBody); + + responseBody = this.mockMvc.perform(MockMvcRequestBuilders.get("/start-process")) + .andReturn() + .getResponse() + .getContentAsString(); + assertEquals("Process started. Number of currently running process instances = 2", responseBody); + + responseBody = this.mockMvc.perform(MockMvcRequestBuilders.get("/start-process")) + .andReturn() + .getResponse() + .getContentAsString(); + assertEquals("Process started. Number of currently running process instances = 3", responseBody); + } + + @Test + public void givenProcess_whenProcessInstance_thenReceivedRunningTask() throws Exception { + + this.mockMvc.perform(MockMvcRequestBuilders.get("/start-process")) + .andReturn() + .getResponse(); + ProcessInstance pi = runtimeService.createProcessInstanceQuery() + .orderByProcessInstanceId() + .desc() + .list() + .get(0); + + logger.info("process instance = " + pi.getId()); + String responseBody = this.mockMvc.perform(MockMvcRequestBuilders.get("/get-tasks/" + pi.getId())) + .andReturn() + .getResponse() + .getContentAsString(); + + ObjectMapper mapper = new ObjectMapper(); + List tasks = Arrays.asList(mapper.readValue(responseBody, TaskRepresentation[].class)); + assertEquals(1, tasks.size()); + assertEquals("A", tasks.get(0).getName()); + + } + + @Test + public void givenProcess_whenCompleteTaskA_thenReceivedNextTask() throws Exception { + + this.mockMvc.perform(MockMvcRequestBuilders.get("/start-process")) + .andReturn() + .getResponse(); + ProcessInstance pi = runtimeService.createProcessInstanceQuery() + .orderByProcessInstanceId() + .desc() + .list() + .get(0); + + logger.info("process instance = " + pi.getId()); + String responseBody = this.mockMvc.perform(MockMvcRequestBuilders.get("/complete-task-A/" + pi.getId())) + .andReturn() + .getResponse() + .getContentAsString(); + + ObjectMapper mapper = new ObjectMapper(); + TaskRepresentation task = mapper.readValue(responseBody, TaskRepresentation.class); + assertEquals("B", task.getName()); + + } +} diff --git a/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiWithSpringApplicationTests.java b/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiWithSpringApplicationTests.java new file mode 100644 index 000000000000..da22c6c7fa80 --- /dev/null +++ b/spring-activiti/src/test/java/com/example/activitiwithspring/ActivitiWithSpringApplicationTests.java @@ -0,0 +1,16 @@ +package com.example.activitiwithspring; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ActivitiWithSpringApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/Greeting.java b/spring-all/src/main/java/com/baeldung/contexts/Greeting.java new file mode 100644 index 000000000000..99b473c6c4fe --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/Greeting.java @@ -0,0 +1,19 @@ +package com.baeldung.contexts; + +public class Greeting { + + private String message; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return "Greeting [message=" + message + "]"; + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java b/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java new file mode 100644 index 000000000000..c3ff90cf3983 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java @@ -0,0 +1,35 @@ +package com.baeldung.contexts.config; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +@Configuration +public class ApplicationInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); + rootContext.register(RootApplicationConfig.class); + servletContext.addListener(new ContextLoaderListener(rootContext)); + + AnnotationConfigWebApplicationContext normalWebAppContext = new AnnotationConfigWebApplicationContext(); + normalWebAppContext.register(NormalWebAppConfig.class); + ServletRegistration.Dynamic normal = servletContext.addServlet("normal-webapp", new DispatcherServlet(normalWebAppContext)); + normal.setLoadOnStartup(1); + normal.addMapping("/api/*"); + + AnnotationConfigWebApplicationContext secureWebAppContext = new AnnotationConfigWebApplicationContext(); + secureWebAppContext.register(SecureWebAppConfig.class); + ServletRegistration.Dynamic secure = servletContext.addServlet("secure-webapp", new DispatcherServlet(secureWebAppContext)); + secure.setLoadOnStartup(1); + secure.addMapping("/s/api/*"); + } + +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/NormalWebAppConfig.java b/spring-all/src/main/java/com/baeldung/contexts/config/NormalWebAppConfig.java new file mode 100644 index 000000000000..c250cedc4997 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/config/NormalWebAppConfig.java @@ -0,0 +1,25 @@ +package com.baeldung.contexts.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = { "com.baeldung.contexts.normal" }) +public class NormalWebAppConfig extends WebMvcConfigurerAdapter { + + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/WEB-INF/view/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(JstlView.class); + return resolver; + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/RootApplicationConfig.java b/spring-all/src/main/java/com/baeldung/contexts/config/RootApplicationConfig.java new file mode 100644 index 000000000000..59821076d26b --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/config/RootApplicationConfig.java @@ -0,0 +1,19 @@ +package com.baeldung.contexts.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.baeldung.contexts.Greeting; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.contexts.services" }) +public class RootApplicationConfig { + + @Bean + public Greeting greeting() { + Greeting greeting = new Greeting(); + greeting.setMessage("Hello World !!"); + return greeting; + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/SecureWebAppConfig.java b/spring-all/src/main/java/com/baeldung/contexts/config/SecureWebAppConfig.java new file mode 100644 index 000000000000..f499a4ceba4a --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/config/SecureWebAppConfig.java @@ -0,0 +1,25 @@ +package com.baeldung.contexts.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = { "com.baeldung.contexts.secure" }) +public class SecureWebAppConfig extends WebMvcConfigurerAdapter { + + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver resolver = new InternalResourceViewResolver(); + resolver.setPrefix("/WEB-INF/secure/view/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(JstlView.class); + return resolver; + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java b/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java new file mode 100644 index 000000000000..dd70ce8e971b --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java @@ -0,0 +1,41 @@ +package com.baeldung.contexts.normal; + +import java.util.Arrays; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.ContextLoader; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.ModelAndView; + +import com.baeldung.contexts.services.ApplicationContextUtilService; +import com.baeldung.contexts.services.GreeterService; + +@Controller +public class HelloWorldController { + + @Autowired + WebApplicationContext webApplicationContext; + + @Autowired + private GreeterService greeterService; + + private void processContext() { + WebApplicationContext rootContext = ContextLoader.getCurrentWebApplicationContext(); + + System.out.println("root context : " + rootContext); + System.out.println("root context Beans: " + Arrays.asList(rootContext.getBeanDefinitionNames())); + + System.out.println("context : " + webApplicationContext); + System.out.println("context Beans: " + Arrays.asList(webApplicationContext.getBeanDefinitionNames())); + } + + @RequestMapping(path = "/welcome") + public ModelAndView helloWorld() { + processContext(); + String message = "
" + "

" + greeterService.greet() + "

"; + return new ModelAndView("welcome", "message", message); + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java b/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java new file mode 100644 index 000000000000..b46ace91ae97 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java @@ -0,0 +1,49 @@ +package com.baeldung.contexts.secure; + +import java.util.Arrays; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.ApplicationContext; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.ContextLoader; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.ModelAndView; + +import com.baeldung.contexts.services.ApplicationContextUtilService; +import com.baeldung.contexts.services.GreeterService; + +@Controller +public class HelloWorldSecureController { + + @Autowired + WebApplicationContext webApplicationContext; + + @Autowired + private GreeterService greeterService; + + @Autowired + @Qualifier("contextAware") + private ApplicationContextUtilService contextUtilService; + + private void processContext() { + ApplicationContext context = contextUtilService.getApplicationContext(); + System.out.println("application context : " + context); + System.out.println("application context Beans: " + Arrays.asList(context.getBeanDefinitionNames())); + + WebApplicationContext rootContext = ContextLoader.getCurrentWebApplicationContext(); + System.out.println("context : " + rootContext); + System.out.println("context Beans: " + Arrays.asList(rootContext.getBeanDefinitionNames())); + + System.out.println("context : " + webApplicationContext); + System.out.println("context Beans: " + Arrays.asList(webApplicationContext.getBeanDefinitionNames())); + } + + @RequestMapping(path = "/welcome") + public ModelAndView helloWorld() { + processContext(); + String message = "
" + "

" + greeterService.greet() + "

"; + return new ModelAndView("welcome", "message", message); + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/services/ApplicationContextUtilService.java b/spring-all/src/main/java/com/baeldung/contexts/services/ApplicationContextUtilService.java new file mode 100644 index 000000000000..332cb106207a --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/services/ApplicationContextUtilService.java @@ -0,0 +1,21 @@ +package com.baeldung.contexts.services; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + +@Service(value="contextAware") +public class ApplicationContextUtilService implements ApplicationContextAware { + + private ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + public ApplicationContext getApplicationContext() { + return applicationContext; + } +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/services/GreeterService.java b/spring-all/src/main/java/com/baeldung/contexts/services/GreeterService.java new file mode 100644 index 000000000000..f68b2fe5af20 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/services/GreeterService.java @@ -0,0 +1,19 @@ +package com.baeldung.contexts.services; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baeldung.contexts.Greeting; + +@Service +public class GreeterService { + + @Resource + private Greeting greeting; + + public String greet(){ + return greeting.getMessage(); + } + +} diff --git a/spring-all/src/main/resources/beanInjection-setter.xml b/spring-all/src/main/resources/beanInjection-setter.xml index b07826c31e16..b2d3a0559404 100644 --- a/spring-all/src/main/resources/beanInjection-setter.xml +++ b/spring-all/src/main/resources/beanInjection-setter.xml @@ -11,5 +11,4 @@ - \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/index.jsp b/spring-all/src/main/webapp/WEB-INF/index.jsp new file mode 100644 index 000000000000..c38169bb9585 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/index.jsp @@ -0,0 +1,5 @@ + + +

Hello World!

+ + diff --git a/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml b/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml new file mode 100644 index 000000000000..d358e2d62bd1 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/rootApplicationContext.xml b/spring-all/src/main/webapp/WEB-INF/rootApplicationContext.xml new file mode 100644 index 000000000000..cd79c64e7939 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/rootApplicationContext.xml @@ -0,0 +1,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml b/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml new file mode 100644 index 000000000000..5bca72467043 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml @@ -0,0 +1,19 @@ + + + + + + + + + + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/secure/view/welcome.jsp b/spring-all/src/main/webapp/WEB-INF/secure/view/welcome.jsp new file mode 100644 index 000000000000..49ca0f8e87e8 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/secure/view/welcome.jsp @@ -0,0 +1,11 @@ + + + Spring Web Contexts + + +
+
+ Secure Web Application : ${message} +
+ + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/view/welcome.jsp b/spring-all/src/main/webapp/WEB-INF/view/welcome.jsp new file mode 100644 index 000000000000..6a82fb1d5acc --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/view/welcome.jsp @@ -0,0 +1,11 @@ + + + Spring Web Contexts + + +
+
+ Normal Web Application : ${message} +
+ + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/web.xml b/spring-all/src/main/webapp/WEB-INF/web.xml index 3ac9e9ed8cd6..2050f28f810d 100644 --- a/spring-all/src/main/webapp/WEB-INF/web.xml +++ b/spring-all/src/main/webapp/WEB-INF/web.xml @@ -3,7 +3,48 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> - + + + + contextConfigLocation + /WEB-INF/rootApplicationContext.xml + + + + org.springframework.web.context.ContextLoaderListener + + + + + + secure-webapp + + org.springframework.web.servlet.DispatcherServlet + + 1 + + contextConfigLocation + /WEB-INF/secure-webapp-servlet.xml + + + + secure-webapp + /s/api/* + + + + + normal-webapp + + org.springframework.web.servlet.DispatcherServlet + + 1 + + + normal-webapp + /api/* + + test-mvc diff --git a/spring-all/src/main/webapp/index.jsp b/spring-all/src/main/webapp/index.jsp new file mode 100644 index 000000000000..c38169bb9585 --- /dev/null +++ b/spring-all/src/main/webapp/index.jsp @@ -0,0 +1,5 @@ + + +

Hello World!

+ + diff --git a/spring-boot-bootstrap/README.md b/spring-boot-bootstrap/README.md new file mode 100644 index 000000000000..75a2b35be7ec --- /dev/null +++ b/spring-boot-bootstrap/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Bootstrap a Simple Application using Spring Boot](http://www.baeldung.com/spring-boot-start) diff --git a/spring-boot/README.MD b/spring-boot/README.MD index 9a4a9f3686ab..e837c88804dc 100644 --- a/spring-boot/README.MD +++ b/spring-boot/README.MD @@ -23,4 +23,7 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Create a Custom Auto-Configuration with Spring Boot](http://www.baeldung.com/spring-boot-custom-auto-configuration) - [Testing in Spring Boot](http://www.baeldung.com/spring-boot-testing) - [Guide to @ConfigurationProperties in Spring Boot](http://www.baeldung.com/configuration-properties-in-spring-boot) +- [How to Get All Spring-Managed Beans?](http://www.baeldung.com/spring-show-all-beans) +- [A Java Client for a WebSockets API](http://www.baeldung.com/websockets-api-java-spring-client) - [Spring Boot and Togglz Aspect](http://www.baeldung.com/spring-togglz) + diff --git a/spring-boot/src/test/java/org/baeldung/boot/boottest/JsonUtil.java b/spring-boot/src/test/java/org/baeldung/boot/boottest/JsonUtil.java index 3d532ce54afb..8c7e5576ced9 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/boottest/JsonUtil.java +++ b/spring-boot/src/test/java/org/baeldung/boot/boottest/JsonUtil.java @@ -5,8 +5,8 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; -public class JsonUtil { - public static byte[] toJson(Object object) throws IOException { +class JsonUtil { + static byte[] toJson(Object object) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsBytes(object); diff --git a/spring-cloud-bus/spring-cloud-config-client/pom.xml b/spring-cloud-bus/spring-cloud-config-client/pom.xml new file mode 100644 index 000000000000..977f18b17f01 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-client + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-client + Demo Spring Cloud Config Client + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-starter-config + 1.3.1.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.5.4.RELEASE + + + + org.springframework.boot + spring-boot-starter-test + 1.5.4.RELEASE + test + + + + org.springframework.boot + spring-boot-actuator + 1.5.4.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-bus-amqp + 1.3.1.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 1.5.4.RELEASE + + + + + diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java new file mode 100644 index 000000000000..d0afd7f6bf1a --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/java/com/baeldung/SpringCloudConfigClientApplication.java @@ -0,0 +1,32 @@ +package com.baeldung; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +@RefreshScope +public class SpringCloudConfigClientApplication { + + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigClientApplication.class, args); + } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml new file mode 100644 index 000000000000..547e0284f3bf --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/application.yml @@ -0,0 +1,7 @@ +--- +spring: + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties new file mode 100644 index 000000000000..7b362614ba90 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/main/resources/bootstrap.properties @@ -0,0 +1,7 @@ +spring.application.name=config-client +spring.profiles.active=development +spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.username=root +spring.cloud.config.password=s3cr3t +spring.cloud.config.fail-fast=true +management.security.enabled=false \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java b/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java new file mode 100644 index 000000000000..3b361f385a9c --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-client/src/test/java/com/baeldung/SpringCloudConfigClientApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringCloudConfigClientApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-bus/spring-cloud-config-server/pom.xml b/spring-cloud-bus/spring-cloud-config-server/pom.xml new file mode 100644 index 000000000000..e37f601d2c83 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config-server + 0.0.1-SNAPSHOT + jar + + spring-cloud-config-server + Demo Spring Cloud Config Server + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + UTF-8 + UTF-8 + 1.8 + Dalston.SR1 + + + + + org.springframework.cloud + spring-cloud-config-server + 1.3.1.RELEASE + + + + org.springframework.boot + spring-boot-starter-security + 1.5.4.RELEASE + + + + org.springframework.boot + spring-boot-starter-test + 1.5.4.RELEASE + test + + + + org.springframework.cloud + spring-cloud-config-monitor + 1.3.1.RELEASE + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + 1.2.1.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 1.5.4.RELEASE + + + + + diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java b/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java new file mode 100644 index 000000000000..4feace7c89a4 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/java/com/baeldung/SpringCloudConfigServerApplication.java @@ -0,0 +1,14 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; + +@SpringBootApplication +@EnableConfigServer +public class SpringCloudConfigServerApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringCloudConfigServerApplication.class, args); + } +} diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties new file mode 100644 index 000000000000..4c18c192c05d --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/application.properties @@ -0,0 +1,12 @@ +server.port=8888 +spring.cloud.config.server.git.uri= +security.user.name=root +security.user.password=s3cr3t +encrypt.key-store.location=classpath:/config-server.jks +encrypt.key-store.password=my-s70r3-s3cr3t +encrypt.key-store.alias=config-server-key +encrypt.key-store.secret=my-k34-s3cr3t +spring.rabbitmq.host=localhost +spring.rabbitmq.port=5672 +spring.rabbitmq.username=guest +spring.rabbitmq.password=guest \ No newline at end of file diff --git a/spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks new file mode 100644 index 000000000000..f3dddb4a8f4c Binary files /dev/null and b/spring-cloud-bus/spring-cloud-config-server/src/main/resources/config-server.jks differ diff --git a/spring-cloud-bus/spring-cloud-config-server/src/test/java/com/baeldung/SpringCloudConfigServerApplicationTests.java b/spring-cloud-bus/spring-cloud-config-server/src/test/java/com/baeldung/SpringCloudConfigServerApplicationTests.java new file mode 100644 index 000000000000..3969c7ba2d41 --- /dev/null +++ b/spring-cloud-bus/spring-cloud-config-server/src/test/java/com/baeldung/SpringCloudConfigServerApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringCloudConfigServerApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud/spring-cloud-bootstrap/README.MD b/spring-cloud/spring-cloud-bootstrap/README.MD index a174fba3dd8a..164219c1854f 100644 --- a/spring-cloud/spring-cloud-bootstrap/README.MD +++ b/spring-cloud/spring-cloud-bootstrap/README.MD @@ -2,9 +2,9 @@ - [Spring Cloud – Bootstrapping](http://www.baeldung.com/spring-cloud-bootstrapping) - [Spring Cloud – Securing Services](http://www.baeldung.com/spring-cloud-securing-services) - [Spring Cloud – Tracing Services with Zipkin](http://www.baeldung.com/tracing-services-with-zipkin) +- [Spring Cloud Series – The Gateway Pattern](http://www.baeldung.com/spring-cloud-gateway-pattern) - [Spring Cloud – Adding Angular 4](http://www.baeldung.com/spring-cloud-angular) - - To run the project: - copy the appliction-config folder to c:\Users\{username}\ on Windows or /Users/{username}/ on *nix. Then open a git bash terminal in application-config and run: - git init diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml index 7879031a2a17..736a6114cfb1 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml @@ -1,78 +1,87 @@ - 4.0.0 + 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.spring.cloud - svc-rating - 1.0.0-SNAPSHOT + com.baeldung.spring.cloud + svc-rating + 1.0.0-SNAPSHOT - - parent-boot-4 - com.baeldung - 0.0.1-SNAPSHOT - ../../../parent-boot-4 - + + parent-boot-4 + com.baeldung + 0.0.1-SNAPSHOT + ../../../parent-boot-4 + - - - org.springframework.cloud - spring-cloud-starter-config - - - org.springframework.cloud - spring-cloud-starter-eureka - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-security - + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + - - org.springframework.session - spring-session - - - org.springframework.boot - spring-boot-starter-data-redis - + + org.springframework.session + spring-session + + + org.springframework.boot + spring-boot-starter-data-redis + - - org.springframework.boot - spring-boot-starter-data-jpa - + + org.springframework.boot + spring-boot-starter-data-jpa + - - com.h2database - h2 - runtime - + + org.springframework.cloud + spring-cloud-starter-hystrix + + + org.springframework.boot + spring-boot-starter-actuator + - - org.springframework.cloud - spring-cloud-starter-zipkin - + + com.h2database + h2 + runtime + - + + org.springframework.cloud + spring-cloud-starter-zipkin + - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud-dependencies.version} - pom - import - - - + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud-dependencies.version} + pom + import + + + + + + Brixton.SR7 + - - Brixton.SR7 - - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java index 0d85c5c8257d..31ca69c139e4 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/RatingServiceApplication.java @@ -1,21 +1,32 @@ package com.baeldung.spring.cloud.bootstrap.svcrating; -import com.netflix.appinfo.InstanceInfo; -import com.netflix.discovery.EurekaClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.sleuth.metric.SpanMetricReporter; import org.springframework.cloud.sleuth.zipkin.HttpZipkinSpanReporter; import org.springframework.cloud.sleuth.zipkin.ZipkinProperties; import org.springframework.cloud.sleuth.zipkin.ZipkinSpanReporter; +import org.springframework.context.annotation.AdviceMode; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.EurekaClient; +import com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect; + import zipkin.Span; @SpringBootApplication @EnableEurekaClient +@EnableHystrix +@EnableTransactionManagement(order=Ordered.LOWEST_PRECEDENCE, mode=AdviceMode.ASPECTJ) public class RatingServiceApplication { @Autowired private EurekaClient eurekaClient; @@ -48,4 +59,11 @@ public void report(Span span) { } }; } + + @Bean + @Primary + @Order(value=Ordered.HIGHEST_PRECEDENCE) + public HystrixCommandAspect hystrixAspect() { + return new HystrixCommandAspect(); + } } \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java index 171fbba7af55..9b6afc8059a8 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SecurityConfig.java @@ -20,17 +20,20 @@ public void configureGlobal1(AuthenticationManagerBuilder auth) throws Exception @Override protected void configure(HttpSecurity http) throws Exception { - http.httpBasic() - .disable() + http .authorizeRequests() .regexMatchers("^/ratings\\?bookId.*$").authenticated() .antMatchers(HttpMethod.POST,"/ratings").authenticated() .antMatchers(HttpMethod.PATCH,"/ratings/*").hasRole("ADMIN") .antMatchers(HttpMethod.DELETE,"/ratings/*").hasRole("ADMIN") .antMatchers(HttpMethod.GET,"/ratings").hasRole("ADMIN") + .antMatchers(HttpMethod.GET,"/hystrix").authenticated() .anyRequest().authenticated() .and() + .httpBasic().and() .csrf() .disable(); + + } } diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java index 62bc701868c7..6e8fcd10d409 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/SessionConfig.java @@ -1,10 +1,28 @@ package com.baeldung.spring.cloud.bootstrap.svcrating; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.env.Environment; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer; @Configuration @EnableRedisHttpSession public class SessionConfig extends AbstractHttpSessionApplicationInitializer { + @Autowired + Environment properties; + + @Bean + @Primary + public JedisConnectionFactory connectionFactory() { + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setHostName(properties.getProperty("spring.redis.host","localhost")); + factory.setPort(properties.getProperty("spring.redis.port", Integer.TYPE,6379)); + factory.afterPropertiesSet(); + factory.setUsePool(true); + return factory; + } } diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java index c37099f3c1c0..2c7069926c80 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/Rating.java @@ -1,22 +1,34 @@ package com.baeldung.spring.cloud.bootstrap.svcrating.rating; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.Transient; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @Entity @JsonIgnoreProperties(ignoreUnknown = true) -public class Rating { +public class Rating implements Serializable { + /** + * + */ + private static final long serialVersionUID = 3308900941650386473L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private Long bookId; private int stars; + @Transient + private boolean fromCache; + @Transient + private Long cachedTS = -1L; + public Rating() { } @@ -54,4 +66,21 @@ public int getStars() { public void setStars(int stars) { this.stars = stars; } + + public boolean isFromCache() { + return fromCache; + } + + public void setFromCache(boolean fromCache) { + this.fromCache = fromCache; + } + + public Long getCachedTS() { + return cachedTS; + } + + public void setCachedTS(Long cachedTS) { + this.cachedTS = cachedTS; + } + } diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java new file mode 100644 index 000000000000..d9f3a3584e54 --- /dev/null +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingCacheRepository.java @@ -0,0 +1,118 @@ +package com.baeldung.spring.cloud.bootstrap.svcrating.rating; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.SetOperations; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.stereotype.Repository; + +@Repository +public class RatingCacheRepository implements InitializingBean { + + @Autowired + private JedisConnectionFactory cacheConnectionFactory; + + private StringRedisTemplate redisTemplate; + private ValueOperations valueOps; + private SetOperations setOps; + + private ObjectMapper jsonMapper; + + public List findCachedRatingsByBookId(Long bookId) { + return setOps.members("book-" + bookId) + .stream() + .map(rtId -> { + try { + return jsonMapper.readValue(valueOps.get(rtId), Rating.class); + } catch (IOException ex) { + return null; + } + }) + .collect(Collectors.toList()); + } + + public Rating findCachedRatingById(Long ratingId) { + + try { + return jsonMapper.readValue(valueOps.get("rating-" + ratingId), Rating.class); + } catch (IOException e) { + return null; + } + + } + + public List findAllCachedRatings() { + List ratings = null; + + ratings = redisTemplate.keys("rating*") + .stream() + .map(rtId -> { + try { + + return jsonMapper.readValue(valueOps.get(rtId), Rating.class); + + } catch (IOException e) { + return null; + } + }) + .collect(Collectors.toList()); + + return ratings; + } + + public boolean createRating(Rating persisted) { + try { + valueOps.set("rating-" + persisted.getId(), jsonMapper.writeValueAsString(persisted)); + setOps.add("book-" + persisted.getBookId(), "rating-" + persisted.getId()); + return true; + } catch (JsonProcessingException ex) { + return false; + } + } + + public boolean updateRating(Rating persisted) { + try { + valueOps.set("rating-" + persisted.getId(), jsonMapper.writeValueAsString(persisted)); + return true; + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return false; + } + + public boolean deleteRating(Long ratingId) { + Rating toDel; + try { + + toDel = jsonMapper.readValue(valueOps.get("rating-" + ratingId), Rating.class); + setOps.remove("book-" + toDel.getBookId(), "rating-" + ratingId); + redisTemplate.delete("rating-" + ratingId); + return true; + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + + @Override + public void afterPropertiesSet() throws Exception { + + this.redisTemplate = new StringRedisTemplate(cacheConnectionFactory); + + this.valueOps = redisTemplate.opsForValue(); + this.setOps = redisTemplate.opsForSet(); + + jsonMapper = new ObjectMapper(); + jsonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + } +} \ No newline at end of file diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java index 6ab5e0acff81..395ff50bd793 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/src/main/java/com/baeldung/spring/cloud/bootstrap/svcrating/rating/RatingService.java @@ -1,14 +1,16 @@ package com.baeldung.spring.cloud.bootstrap.svcrating.rating; -import com.google.common.base.Preconditions; +import java.util.List; +import java.util.Map; +import java.util.Optional; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import com.google.common.base.Preconditions; +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @Service @Transactional(readOnly = true) @@ -17,30 +19,51 @@ public class RatingService { @Autowired private RatingRepository ratingRepository; - public Rating findRatingById(Long ratingId) { - return Optional.ofNullable(ratingRepository.findOne(ratingId)) - .orElseThrow(() -> new RatingNotFoundException("Rating not found. ID: " + ratingId)); - } + @Autowired + private RatingCacheRepository cacheRepository; + @HystrixCommand(commandKey = "ratingsByBookIdFromDB", fallbackMethod = "findCachedRatingsByBookId") public List findRatingsByBookId(Long bookId) { return ratingRepository.findRatingsByBookId(bookId); } + public List findCachedRatingsByBookId(Long bookId) { + return cacheRepository.findCachedRatingsByBookId(bookId); + } + + @HystrixCommand(commandKey = "ratingsFromDB", fallbackMethod = "findAllCachedRatings") public List findAllRatings() { return ratingRepository.findAll(); } + public List findAllCachedRatings() { + return cacheRepository.findAllCachedRatings(); + } + + @HystrixCommand(commandKey = "ratingsByIdFromDB", fallbackMethod = "findCachedRatingById", ignoreExceptions = { RatingNotFoundException.class }) + public Rating findRatingById(Long ratingId) { + return Optional.ofNullable(ratingRepository.findOne(ratingId)) + .orElseThrow(() -> new RatingNotFoundException("Rating not found. ID: " + ratingId)); + } + + public Rating findCachedRatingById(Long ratingId) { + return cacheRepository.findCachedRatingById(ratingId); + } + @Transactional(propagation = Propagation.REQUIRED) public Rating createRating(Rating rating) { - final Rating newRating = new Rating(); + Rating newRating = new Rating(); newRating.setBookId(rating.getBookId()); newRating.setStars(rating.getStars()); - return ratingRepository.save(newRating); + Rating persisted = ratingRepository.save(newRating); + cacheRepository.createRating(persisted); + return persisted; } @Transactional(propagation = Propagation.REQUIRED) public void deleteRating(Long ratingId) { ratingRepository.delete(ratingId); + cacheRepository.deleteRating(ratingId); } @Transactional(propagation = Propagation.REQUIRED) @@ -54,7 +77,9 @@ public Rating updateRating(Map updates, Long ratingId) { break; } }); - return ratingRepository.save(rating); + Rating persisted = ratingRepository.save(rating); + cacheRepository.updateRating(persisted); + return persisted; } @Transactional(propagation = Propagation.REQUIRED) @@ -64,4 +89,5 @@ public Rating updateRating(Rating rating, Long ratingId) { Preconditions.checkNotNull(ratingRepository.findOne(ratingId)); return ratingRepository.save(rating); } + } diff --git a/spring-data-javaslang/.gitignore b/spring-data-javaslang/.gitignore deleted file mode 100644 index 7ee5423d1475..000000000000 --- a/spring-data-javaslang/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/target/ -/project/ -.idea -.classpath -.eclipse diff --git a/spring-data-javaslang/pom.xml b/spring-data-javaslang/pom.xml deleted file mode 100644 index 02d214344e85..000000000000 --- a/spring-data-javaslang/pom.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - 4.0.0 - spring-data-javaslang - spring-data-javaslang - 0.0.1-SNAPSHOT - - - 2.9.1-01 - 2.3.7-01 - 2.4.8 - 2.0.5 - 1.5.1.RELEASE - 4.3.6.RELEASE - 4.3.6.RELEASE - 4.3.6.RELEASE - ${basedir}/src/test/java - - - - parent-boot-5 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-5 - - - - - test-app - - verify - - - org.springframework.boot - spring-boot-maven-plugin - - - spring-boot-run - verify - - run - - false - - - - - - - - - - - org.springframework.boot - spring-boot-devtools - true - - - - com.h2database - h2 - 1.4.193 - - - - io.javaslang - javaslang - ${javaslang.version} - - - - org.springframework.data - spring-data-jpa - 1.11.0.RELEASE - - - - org.springframework.boot - spring-boot - ${spring-boot.version} - - - - org.springframework.boot - spring-boot-starter-data-jpa - ${spring-boot.version} - - - - org.springframework.boot - spring-boot-starter-test - ${spring-boot.version} - - - - org.springframework - spring-context - ${spring-context.version} - - - - org.springframework - spring-core - ${spring-core.version} - - - - \ No newline at end of file diff --git a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/Book.java b/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/Book.java deleted file mode 100644 index 95653abb6c60..000000000000 --- a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/Book.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.spring_data.model; - -import javaslang.collection.Seq; - -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; - -@Entity -@Table(name = "book") -public class Book { - - @GeneratedValue - @Id - private Long id; - - private String title; - - private Seq authors; - - - public void setTitle(String title){ - this.title = title; - } - - public String getTitle(){ - return this.title; - } - - public Long getId(){ - return this.id; - } - - public void setAuthors(Seq authors){ - this.authors = authors; - } - - public Seq getAuthors(){ - return this.authors; - } -} diff --git a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/JavaBook.java b/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/JavaBook.java deleted file mode 100644 index ab99b0d92909..000000000000 --- a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/model/JavaBook.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.spring_data.model; - -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; - -import java.util.List; - -@Entity -@Table(name = "java_book") -public class JavaBook { - - @GeneratedValue - @Id - private Long id; - - private String title; - - @ElementCollection - private List authors; - - - public void setAuthors(List authors){ - this.authors = authors; - } - - public void setTitle(String title){ - this.title = title; - } - - public String getTitle(){ - return this.title; - } - - public Long getId(){ - return this.id; - } -} - diff --git a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/BookRepository.java b/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/BookRepository.java deleted file mode 100644 index 75b6d0b426c8..000000000000 --- a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/BookRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.spring_data.repository; - -import com.baeldung.spring_data.model.Book; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import javaslang.collection.Seq; -import javaslang.control.Option; - -@Repository -public interface BookRepository extends JpaRepository{ - Book save(Book book); - - Option findById(Long id); - - Option> findByTitleContaining(String title); - -} diff --git a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/JavaBookRepository.java b/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/JavaBookRepository.java deleted file mode 100644 index a4aeab85ee52..000000000000 --- a/spring-data-javaslang/src/main/java/com/baeldung/spring_data/repository/JavaBookRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring_data.repository; - -import com.baeldung.spring_data.model.JavaBook; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface JavaBookRepository extends JpaRepository{ - JavaBook save(JavaBook book); - - JavaBook findById(Long id); - - List findByTitleContaining(String title); -} \ No newline at end of file diff --git a/spring-data-javaslang/src/main/java/com/baeldung/spring_data_app/MainApp.java b/spring-data-javaslang/src/main/java/com/baeldung/spring_data_app/MainApp.java deleted file mode 100644 index d8a194e92e0b..000000000000 --- a/spring-data-javaslang/src/main/java/com/baeldung/spring_data_app/MainApp.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.spring_data_app; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -@Configuration -@EnableJpaRepositories("com.baeldung.spring_data.repository") -@EnableTransactionManagement -@EntityScan("com.baeldung.spring_data.model") -@SpringBootApplication -public class MainApp { - public static void main(String[] args){ - SpringApplication.run(MainApp.class, args); - } -} diff --git a/spring-data-javaslang/src/test/java/com/baeldung/spring_data_tests/SpringIntegrationTest.java b/spring-data-javaslang/src/test/java/com/baeldung/spring_data_tests/SpringIntegrationTest.java deleted file mode 100644 index 7a23fa1ef2b2..000000000000 --- a/spring-data-javaslang/src/test/java/com/baeldung/spring_data_tests/SpringIntegrationTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.baeldung.spring_data_tests; - -import com.baeldung.spring_data.model.Book; -import com.baeldung.spring_data.model.JavaBook; -import com.baeldung.spring_data.repository.BookRepository; -import com.baeldung.spring_data.repository.JavaBookRepository; -import com.baeldung.spring_data_app.MainApp; -import javaslang.collection.List; -import javaslang.collection.Seq; -import javaslang.control.Option; -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.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.junit4.SpringRunner; - -import java.util.ArrayList; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = MainApp.class,webEnvironment = WebEnvironment.NONE) -public class SpringIntegrationTest { - - @Autowired - private JavaBookRepository javaRepository; - - @Autowired - private BookRepository repository; - - @Test - public void should_return_seq(){ - Seq authors = List.of("author1","author2"); - Book testBook = new Book(); - testBook.setTitle("Javaslang in Spring Data Seq Test Return"); - testBook.setAuthors(authors); - Book book = repository.save(testBook); - Option> books = repository.findByTitleContaining("Seq Test"); - - assertThat(books).isNotEmpty(); - } - - - @Test - public void should_return_option_with_book(){ - Seq authors = List.of("author1","author2"); - Book testBook = new Book(); - testBook.setTitle("Javaslang in Spring Data"); - testBook.setAuthors(authors); - Book book = repository.save(testBook); - Option retBook = repository.findById(1L); - - assertThat(retBook.isDefined()).isTrue(); - assertThat(retBook).isNotEmpty(); - } - - @Test - public void should_return_list(){ - ArrayList authors = new ArrayList(); - authors.add("author1"); - authors.add("author2"); - JavaBook testBook = new JavaBook(); - testBook.setTitle("Javaslang in Spring Data Seq Return"); - testBook.setAuthors(authors); - JavaBook book = javaRepository.save(testBook); - java.util.List books = javaRepository.findByTitleContaining("Seq"); - assertThat(books) - .isNotEmpty() - .hasSize(1) - .extracting("title") - .contains("Javaslang in Spring Data Seq Return"); - } - - @Test - public void should_return_book(){ - ArrayList authors = new ArrayList(); - authors.add("author1"); - authors.add("author2"); - JavaBook testBook = new JavaBook(); - testBook.setTitle("Javaslang in Spring Data"); - testBook.setAuthors(authors); - JavaBook book = javaRepository.save(testBook); - JavaBook retBook = javaRepository.findById(1L); - - assertThat(retBook.getId()).isEqualTo(1L); - assertThat(retBook.getTitle()).isEqualTo("Javaslang in Spring Data"); - } -} \ No newline at end of file diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 84d49a3e351a..7060ec5b3633 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -115,7 +115,7 @@ 4.3.4.RELEASE - 1.9.6.RELEASE + 1.10.4.RELEASE 2.9.0 4.1.4 diff --git a/spring-data-mongodb/src/main/java/org/baeldung/annotation/CascadeSave.java b/spring-data-mongodb/src/main/java/org/baeldung/annotation/CascadeSave.java index 9fba40245b6a..aae0214d0937 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/annotation/CascadeSave.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/annotation/CascadeSave.java @@ -8,5 +8,4 @@ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface CascadeSave { - } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java index 6910245b2bc3..80b177f4c9ae 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/config/MongoConfig.java @@ -1,8 +1,7 @@ package org.baeldung.config; -import java.util.ArrayList; -import java.util.List; - +import com.mongodb.Mongo; +import com.mongodb.MongoClient; import org.baeldung.converter.UserWriterConverter; import org.baeldung.event.CascadeSaveMongoEventListener; import org.baeldung.event.UserCascadeSaveMongoEventListener; @@ -14,8 +13,8 @@ import org.springframework.data.mongodb.gridfs.GridFsTemplate; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -import com.mongodb.Mongo; -import com.mongodb.MongoClient; +import java.util.ArrayList; +import java.util.List; @Configuration @EnableMongoRepositories(basePackages = "org.baeldung.repository") diff --git a/spring-data-mongodb/src/main/java/org/baeldung/config/SimpleMongoConfig.java b/spring-data-mongodb/src/main/java/org/baeldung/config/SimpleMongoConfig.java index 6140382f82da..9653796d8d53 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/config/SimpleMongoConfig.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/config/SimpleMongoConfig.java @@ -1,13 +1,12 @@ package org.baeldung.config; +import com.mongodb.Mongo; +import com.mongodb.MongoClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -import com.mongodb.Mongo; -import com.mongodb.MongoClient; - @Configuration @EnableMongoRepositories(basePackages = "org.baeldung.repository") public class SimpleMongoConfig { diff --git a/spring-data-mongodb/src/main/java/org/baeldung/converter/UserWriterConverter.java b/spring-data-mongodb/src/main/java/org/baeldung/converter/UserWriterConverter.java index 2dedda46ec83..4a6970489ea7 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/converter/UserWriterConverter.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/converter/UserWriterConverter.java @@ -1,12 +1,11 @@ package org.baeldung.converter; +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; import org.baeldung.model.User; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; -import com.mongodb.BasicDBObject; -import com.mongodb.DBObject; - @Component public class UserWriterConverter implements Converter { diff --git a/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeCallback.java b/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeCallback.java index e01a1bc8c0a9..94cad4566aac 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeCallback.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeCallback.java @@ -12,7 +12,7 @@ public class CascadeCallback implements ReflectionUtils.FieldCallback { private Object source; private MongoOperations mongoOperations; - public CascadeCallback(final Object source, final MongoOperations mongoOperations) { + CascadeCallback(final Object source, final MongoOperations mongoOperations) { this.source = source; this.setMongoOperations(mongoOperations); } @@ -35,7 +35,7 @@ public void doWith(final Field field) throws IllegalArgumentException, IllegalAc } - public Object getSource() { + private Object getSource() { return source; } @@ -43,11 +43,11 @@ public void setSource(final Object source) { this.source = source; } - public MongoOperations getMongoOperations() { + private MongoOperations getMongoOperations() { return mongoOperations; } - public void setMongoOperations(final MongoOperations mongoOperations) { + private void setMongoOperations(final MongoOperations mongoOperations) { this.mongoOperations = mongoOperations; } } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeSaveMongoEventListener.java b/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeSaveMongoEventListener.java index 79840fb570c5..acc377011d0b 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeSaveMongoEventListener.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/event/CascadeSaveMongoEventListener.java @@ -3,6 +3,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; +import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent; import org.springframework.util.ReflectionUtils; public class CascadeSaveMongoEventListener extends AbstractMongoEventListener { @@ -11,7 +12,8 @@ public class CascadeSaveMongoEventListener extends AbstractMongoEventListener event) { + final Object source = event.getSource(); ReflectionUtils.doWithFields(source.getClass(), new CascadeCallback(source, mongoOperations)); } } \ No newline at end of file diff --git a/spring-data-mongodb/src/main/java/org/baeldung/event/UserCascadeSaveMongoEventListener.java b/spring-data-mongodb/src/main/java/org/baeldung/event/UserCascadeSaveMongoEventListener.java index 423df59b95bb..ade20bcc1d7e 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/event/UserCascadeSaveMongoEventListener.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/event/UserCascadeSaveMongoEventListener.java @@ -4,14 +4,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; +import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent; public class UserCascadeSaveMongoEventListener extends AbstractMongoEventListener { @Autowired private MongoOperations mongoOperations; @Override - public void onBeforeConvert(final Object source) { - if (source instanceof User && ((User) source).getEmailAddress() != null) { + public void onBeforeConvert(final BeforeConvertEvent event) { + final Object source = event.getSource(); + if ((source instanceof User) && (((User) source).getEmailAddress() != null)) { mongoOperations.save(((User) source).getEmailAddress()); } } diff --git a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java index 7d51f7b6cc1e..8e442e8b7f79 100644 --- a/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java +++ b/spring-data-mongodb/src/main/java/org/baeldung/repository/UserRepository.java @@ -1,12 +1,12 @@ package org.baeldung.repository; -import java.util.List; - import org.baeldung.model.User; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query; import org.springframework.data.querydsl.QueryDslPredicateExecutor; +import java.util.List; + public interface UserRepository extends MongoRepository, QueryDslPredicateExecutor { @Query("{ 'name' : ?0 }") List findUsersByName(String name); @@ -26,10 +26,10 @@ public interface UserRepository extends MongoRepository, QueryDslP List findByNameStartingWith(String regexp); List findByNameEndingWith(String regexp); - - @Query(value="{}", fields="{name : 1}") + + @Query(value = "{}", fields = "{name : 1}") List findNameAndId(); - - @Query(value="{}", fields="{_id : 0}") + + @Query(value = "{}", fields = "{_id : 0}") List findNameAndAgeExcludeId(); } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/aggregation/ZipsAggregationLiveTest.java b/spring-data-mongodb/src/test/java/org/baeldung/aggregation/ZipsAggregationLiveTest.java index a25a9047583e..5686465c1916 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/aggregation/ZipsAggregationLiveTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/aggregation/ZipsAggregationLiveTest.java @@ -1,17 +1,10 @@ package org.baeldung.aggregation; -import static org.junit.Assert.*; -import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; - -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.StreamSupport; - +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.util.JSON; import org.baeldung.aggregation.model.StatePopulation; import org.baeldung.config.MongoConfig; import org.junit.AfterClass; @@ -33,18 +26,30 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; -import com.mongodb.MongoClient; -import com.mongodb.util.JSON; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.group; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.limit; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.match; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.project; +import static org.springframework.data.mongodb.core.aggregation.Aggregation.sort; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MongoConfig.class) public class ZipsAggregationLiveTest { private static MongoClient client; - + @Autowired private MongoTemplate mongoTemplate; @@ -58,7 +63,7 @@ public static void setupTests() throws Exception { InputStream zipsJsonStream = ZipsAggregationLiveTest.class.getResourceAsStream("/zips.json"); BufferedReader reader = new BufferedReader(new InputStreamReader(zipsJsonStream)); reader.lines() - .forEach(line -> zipsCollection.insert((DBObject) JSON.parse(line))); + .forEach(line -> zipsCollection.insert((DBObject) JSON.parse(line))); reader.close(); } @@ -95,7 +100,7 @@ public void whenStatesHavePopGrtrThan10MillionAndSorted_thenSuccess() { * decreasing population */ List actualList = StreamSupport.stream(result.spliterator(), false) - .collect(Collectors.toList()); + .collect(Collectors.toList()); List expectedList = new ArrayList<>(actualList); Collections.sort(expectedList, (sp1, sp2) -> sp2.getStatePop() - sp1.getStatePop()); @@ -111,7 +116,7 @@ public void whenStateWithLowestAvgCityPopIsND_theSuccess() { GroupOperation averageStatePop = group("_id.state").avg("cityPop").as("avgCityPop"); SortOperation sortByAvgPopAsc = sort(new Sort(Direction.ASC, "avgCityPop")); ProjectionOperation projectToMatchModel = project().andExpression("_id").as("state") - .andExpression("avgCityPop").as("statePop"); + .andExpression("avgCityPop").as("statePop"); LimitOperation limitToOnlyFirstDoc = limit(1); Aggregation aggregation = newAggregation(sumTotalCityPop, averageStatePop, sortByAvgPopAsc, limitToOnlyFirstDoc, projectToMatchModel); @@ -121,7 +126,7 @@ public void whenStateWithLowestAvgCityPopIsND_theSuccess() { assertEquals("ND", smallestState.getState()); assertTrue(smallestState.getStatePop() - .equals(1645)); + .equals(1645)); } @Test @@ -130,8 +135,8 @@ public void whenMaxTXAndMinDC_theSuccess() { GroupOperation sumZips = group("state").count().as("zipCount"); SortOperation sortByCount = sort(Direction.ASC, "zipCount"); GroupOperation groupFirstAndLast = group().first("_id").as("minZipState") - .first("zipCount").as("minZipCount").last("_id").as("maxZipState") - .last("zipCount").as("maxZipCount"); + .first("zipCount").as("minZipCount").last("_id").as("maxZipState") + .last("zipCount").as("maxZipCount"); Aggregation aggregation = newAggregation(sumZips, sortByCount, groupFirstAndLast); diff --git a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSLiveTest.java b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSLiveTest.java index 3853a406fbe2..88205ba7fdf7 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSLiveTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSLiveTest.java @@ -1,19 +1,8 @@ package org.baeldung.gridfs; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.Matchers.nullValue; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -import org.baeldung.config.MongoConfig; +import com.mongodb.BasicDBObject; +import com.mongodb.DBObject; +import com.mongodb.gridfs.GridFSDBFile; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -27,9 +16,18 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.mongodb.BasicDBObject; -import com.mongodb.DBObject; -import com.mongodb.gridfs.GridFSDBFile; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; @ContextConfiguration("file:src/main/resources/mongoConfig.xml") @RunWith(SpringJUnit4ClassRunner.class) diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryLiveTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryLiveTest.java index df3ebcb2d25c..729b0f6dfaeb 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryLiveTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/DocumentQueryLiveTest.java @@ -1,11 +1,5 @@ package org.baeldung.mongotemplate; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; - -import java.util.Iterator; -import java.util.List; - import org.baeldung.config.MongoConfig; import org.baeldung.model.EmailAddress; import org.baeldung.model.User; @@ -23,6 +17,12 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.Iterator; +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MongoConfig.class) public class DocumentQueryLiveTest { diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateProjectionLiveTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateProjectionLiveTest.java index 61115faede68..2d2117afbbcd 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateProjectionLiveTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateProjectionLiveTest.java @@ -1,9 +1,5 @@ package org.baeldung.mongotemplate; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - import org.baeldung.config.SimpleMongoConfig; import org.baeldung.model.User; import org.junit.After; @@ -16,6 +12,10 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SimpleMongoConfig.class) public class MongoTemplateProjectionLiveTest { @@ -42,14 +42,14 @@ public void givenUserExists_whenAgeZero_thenSuccess() { final Query query = new Query(); query.fields() - .include("name"); + .include("name"); mongoTemplate.find(query, User.class) - .forEach(user -> { - assertNotNull(user.getName()); - assertTrue(user.getAge() - .equals(0)); - }); + .forEach(user -> { + assertNotNull(user.getName()); + assertTrue(user.getAge() + .equals(0)); + }); } @Test @@ -59,13 +59,13 @@ public void givenUserExists_whenIdNull_thenSuccess() { final Query query = new Query(); query.fields() - .exclude("_id"); + .exclude("_id"); mongoTemplate.find(query, User.class) - .forEach(user -> { - assertNull(user.getId()); - assertNotNull(user.getAge()); - }); + .forEach(user -> { + assertNull(user.getId()); + assertNotNull(user.getAge()); + }); } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryLiveTest.java b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryLiveTest.java index 76162c609616..b7ce0cafaee1 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryLiveTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/mongotemplate/MongoTemplateQueryLiveTest.java @@ -1,11 +1,5 @@ package org.baeldung.mongotemplate; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; -import static org.hamcrest.Matchers.nullValue; - -import java.util.List; - import org.baeldung.config.MongoConfig; import org.baeldung.model.EmailAddress; import org.baeldung.model.User; @@ -26,6 +20,12 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.List; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertThat; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MongoConfig.class) public class MongoTemplateQueryLiveTest { diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/app/ApplicationRunner.java b/spring-drools/src/main/java/com/baeldung/spring/drools/app/ApplicationRunner.java index ce4b49451a77..82b12cbc9561 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/app/ApplicationRunner.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/app/ApplicationRunner.java @@ -12,13 +12,12 @@ public class ApplicationRunner { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(TaxiFareConfiguration.class); - TaxiFareCalculatorService orderService = context.getBean(TaxiFareCalculatorService.class); - + TaxiFareCalculatorService taxiFareCalculatorService = (TaxiFareCalculatorService) context.getBean(TaxiFareCalculatorService.class); TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(true); + taxiRide.setIsNightSurcharge(true); taxiRide.setDistanceInMile(190L); Fare rideFare = new Fare(); - orderService.calculateFare(taxiRide, rideFare); + taxiFareCalculatorService.calculateFare(taxiRide, rideFare); } } diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/model/Fare.java b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Fare.java index 86044b281ad0..5a25ddc6d3dd 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/model/Fare.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/model/Fare.java @@ -29,4 +29,5 @@ public void setRideFare(Long rideFare) { public Long getTotalFare() { return nightSurcharge + rideFare; } + } diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/model/TaxiRide.java b/spring-drools/src/main/java/com/baeldung/spring/drools/model/TaxiRide.java index 6dc08bbb60fd..8dc0f373b10b 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/model/TaxiRide.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/model/TaxiRide.java @@ -1,16 +1,16 @@ package com.baeldung.spring.drools.model; public class TaxiRide { - - private Boolean bNightSurcharge; + + private Boolean isNightSurcharge; private Long distanceInMile; - public Boolean getbNightSurcharge() { - return bNightSurcharge; + public Boolean getIsNightSurcharge() { + return isNightSurcharge; } - public void setbNightSurcharge(Boolean bNightSurcharge) { - this.bNightSurcharge = bNightSurcharge; + public void setIsNightSurcharge(Boolean isNightSurcharge) { + this.isNightSurcharge = isNightSurcharge; } public Long getDistanceInMile() { diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java index 0407eff5d90c..c2c5b399df1d 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java @@ -3,17 +3,19 @@ import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import com.baeldung.spring.drools.model.Fare; import com.baeldung.spring.drools.model.TaxiRide; +@Service public class TaxiFareCalculatorService { @Autowired - private KieContainer kieContainer; + private KieContainer kContainer; public Long calculateFare(TaxiRide taxiRide, Fare rideFare) { - KieSession kieSession = kieContainer.newKieSession(); + KieSession kieSession = kContainer.newKieSession(); kieSession.setGlobal("rideFare", rideFare); kieSession.insert(taxiRide); kieSession.fireAllRules(); diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareConfiguration.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareConfiguration.java index 8da1d4b992d6..e7b614694e3b 100644 --- a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareConfiguration.java +++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareConfiguration.java @@ -5,15 +5,16 @@ import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieModule; import org.kie.api.runtime.KieContainer; -import org.kie.api.runtime.KieSession; import org.kie.internal.io.ResourceFactory; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration +@ComponentScan("com.baeldung.spring.drools.service") public class TaxiFareConfiguration { - private static final String drlFile = "TAXI_FARE_RULE.drl"; + public static final String drlFile = "TAXI_FARE_RULE.drl"; @Bean public KieContainer kieContainer() { @@ -26,10 +27,6 @@ public KieContainer kieContainer() { KieModule kieModule = kieBuilder.getKieModule(); return kieServices.newKieContainer(kieModule.getReleaseId()); - } - - @Bean - public TaxiFareCalculatorService taxiFareCalculatorService() { - return new TaxiFareCalculatorService(); + } } diff --git a/spring-drools/src/main/resources/TAXI_FARE_RULE.drl b/spring-drools/src/main/resources/TAXI_FARE_RULE.drl index 56335c08b3b2..97f40ddae263 100644 --- a/spring-drools/src/main/resources/TAXI_FARE_RULE.drl +++ b/spring-drools/src/main/resources/TAXI_FARE_RULE.drl @@ -7,7 +7,7 @@ dialect "mvel" rule "Calculate Taxi Fare - Scenario 1" when - taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile < 10); + taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile < 10); then rideFare.setNightSurcharge(0); rideFare.setRideFare(70); @@ -15,7 +15,7 @@ end rule "Calculate Taxi Fare - Scenario 2" when - taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile < 10); + taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile < 10); then rideFare.setNightSurcharge(30); rideFare.setRideFare(70); @@ -24,7 +24,7 @@ end rule "Calculate Taxi Fare - Scenario 3" when - taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile >= 10 && distanceInMile < 100); + taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile >= 10 && distanceInMile < 100); then rideFare.setNightSurcharge(0); rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile())); @@ -33,7 +33,7 @@ end rule "Calculate Taxi Fare - Scenario 4" when - taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile >= 10 && distanceInMile < 100); + taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile >= 10 && distanceInMile < 100); then rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile()); rideFare.setRideFare(70+(2*taxiRideInstance.getDistanceInMile())); @@ -42,7 +42,7 @@ end rule "Calculate Taxi Fare - Scenario 5" when - taxiRideInstance:TaxiRide(bNightSurcharge == false && distanceInMile >= 100); + taxiRideInstance:TaxiRide(isNightSurcharge == false && distanceInMile >= 100); then rideFare.setNightSurcharge(0); rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile())); @@ -50,7 +50,7 @@ end rule "Calculate Taxi Fare - Scenario 6" when - taxiRideInstance:TaxiRide(bNightSurcharge == true && distanceInMile >= 100); + taxiRideInstance:TaxiRide(isNightSurcharge == true && distanceInMile >= 100); then rideFare.setNightSurcharge(30+taxiRideInstance.getDistanceInMile()); rideFare.setRideFare(70+(1.5*taxiRideInstance.getDistanceInMile())); diff --git a/spring-drools/src/test/java/com/baeldung/spring/drools/service/TaxiFareCalculatorServiceIntegrationTest.java b/spring-drools/src/test/java/com/baeldung/spring/drools/service/TaxiFareCalculatorServiceIntegrationTest.java index 97bd44316ff3..8ecd0d59a8da 100644 --- a/spring-drools/src/test/java/com/baeldung/spring/drools/service/TaxiFareCalculatorServiceIntegrationTest.java +++ b/spring-drools/src/test/java/com/baeldung/spring/drools/service/TaxiFareCalculatorServiceIntegrationTest.java @@ -1,16 +1,17 @@ package com.baeldung.spring.drools.service; -import com.baeldung.spring.drools.model.Fare; -import com.baeldung.spring.drools.model.TaxiRide; -import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import com.baeldung.spring.drools.model.Fare; +import com.baeldung.spring.drools.model.TaxiRide; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TaxiFareConfiguration.class) @@ -20,9 +21,9 @@ public class TaxiFareCalculatorServiceIntegrationTest { private TaxiFareCalculatorService taxiFareCalculatorService; @Test - public void testCalculateFareScenario1() { + public void whenNightSurchargeFalseAndDistanceLessThan10_thenFixFareWithoutNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(false); + taxiRide.setIsNightSurcharge(false); taxiRide.setDistanceInMile(9L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); @@ -30,11 +31,11 @@ public void testCalculateFareScenario1() { assertNotNull(totalCharge); assertEquals(Long.valueOf(70), totalCharge); } - + @Test - public void testCalculateFareScenario2() { + public void whenNightSurchargeTrueAndDistanceLessThan10_thenFixFareWithNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(true); + taxiRide.setIsNightSurcharge(true); taxiRide.setDistanceInMile(5L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); @@ -44,9 +45,9 @@ public void testCalculateFareScenario2() { } @Test - public void testCalculateFareScenario3() { + public void whenNightSurchargeFalseAndDistanceLessThan100_thenDoubleFareWithoutNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(false); + taxiRide.setIsNightSurcharge(false); taxiRide.setDistanceInMile(50L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); @@ -54,11 +55,11 @@ public void testCalculateFareScenario3() { assertNotNull(totalCharge); assertEquals(Long.valueOf(170), totalCharge); } - + @Test - public void testCalculateFareScenario4() { + public void whenNightSurchargeTrueAndDistanceLessThan100_thenDoubleFareWithNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(true); + taxiRide.setIsNightSurcharge(true); taxiRide.setDistanceInMile(50L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); @@ -66,11 +67,11 @@ public void testCalculateFareScenario4() { assertNotNull(totalCharge); assertEquals(Long.valueOf(250), totalCharge); } - + @Test - public void testCalculateFareScenario5() { + public void whenNightSurchargeFalseAndDistanceGreaterThan100_thenExtraPercentFareWithoutNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(false); + taxiRide.setIsNightSurcharge(false); taxiRide.setDistanceInMile(100L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); @@ -78,11 +79,11 @@ public void testCalculateFareScenario5() { assertNotNull(totalCharge); assertEquals(Long.valueOf(220), totalCharge); } - + @Test - public void testCalculateFareScenario6() { + public void whenNightSurchargeTrueAndDistanceGreaterThan100_thenExtraPercentFareWithNightSurcharge() { TaxiRide taxiRide = new TaxiRide(); - taxiRide.setbNightSurcharge(true); + taxiRide.setIsNightSurcharge(true); taxiRide.setDistanceInMile(100L); Fare rideFare = new Fare(); Long totalCharge = taxiFareCalculatorService.calculateFare(taxiRide, rideFare); diff --git a/spring-mustache/.gitignore b/spring-mustache/.gitignore new file mode 100644 index 000000000000..2af7cefb0a3f --- /dev/null +++ b/spring-mustache/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/spring-mustache/pom.xml b/spring-mustache/pom.xml new file mode 100644 index 000000000000..45fee6b10e41 --- /dev/null +++ b/spring-mustache/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + com.baeldung + spring-mustache + 0.0.1-SNAPSHOT + jar + + spring-mustache + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.5.4.RELEASE + + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-mustache + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.webjars + bootstrap + 3.3.7 + + + org.fluttercode.datafactory + datafactory + 0.8 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-mustache/src/main/java/com/baeldung/springmustache/SpringMustacheApplication.java b/spring-mustache/src/main/java/com/baeldung/springmustache/SpringMustacheApplication.java new file mode 100644 index 000000000000..addd1fa088d8 --- /dev/null +++ b/spring-mustache/src/main/java/com/baeldung/springmustache/SpringMustacheApplication.java @@ -0,0 +1,34 @@ +package com.baeldung.springmustache; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.mustache.MustacheEnvironmentCollector; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.core.env.Environment; + +import com.samskivert.mustache.Mustache; + +@SpringBootApplication +@ComponentScan(basePackages = {"com.baeldung"}) +public class SpringMustacheApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringMustacheApplication.class, args); + } + + @Bean + public Mustache.Compiler mustacheCompiler(Mustache.TemplateLoader templateLoader, Environment environment) { + + MustacheEnvironmentCollector collector = new MustacheEnvironmentCollector(); + collector.setEnvironment(environment); + + Mustache.Compiler compiler = Mustache.compiler() + .defaultValue("Some Default Value") + .withLoader(templateLoader) + .withCollector(collector); + return compiler; + + } +} + diff --git a/spring-mustache/src/main/java/com/baeldung/springmustache/controller/ArticleController.java b/spring-mustache/src/main/java/com/baeldung/springmustache/controller/ArticleController.java new file mode 100644 index 000000000000..b24625e7d500 --- /dev/null +++ b/spring-mustache/src/main/java/com/baeldung/springmustache/controller/ArticleController.java @@ -0,0 +1,48 @@ +package com.baeldung.springmustache.controller; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.stream.IntStream; + +import org.fluttercode.datafactory.impl.DataFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import com.baeldung.springmustache.model.Article; + +@Controller +public class ArticleController { + + @RequestMapping("/article") + public ModelAndView displayArticle(Map model) { + + List
articles = new LinkedList<>(); + IntStream.range(0, 10) + .forEach(count -> { + articles.add(generateArticle("Article Title " + count)); + }); + + Map modelMap = new HashMap<>(); + modelMap.put("articles", articles); + + return new ModelAndView("index", modelMap); + } + + private Article generateArticle(String title) { + Article article = new Article(); + DataFactory factory = new DataFactory(); + article.setTitle(title); + article.setBody( + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur faucibus tempor diam. In molestie arcu eget ante facilisis sodales. Maecenas porta tellus sapien, eget rutrum nisi blandit in. Mauris tempor auctor ante, ut blandit velit venenatis id. Ut varius, augue aliquet feugiat congue, arcu ipsum finibus purus, dapibus semper velit sapien venenatis magna. Nunc quam ex, aliquet at rutrum sed, vestibulum quis libero. In laoreet libero cursus maximus vulputate. Nullam in fermentum sem. Duis aliquam ullamcorper dui, et dictum justo placerat id. Aliquam pretium orci quis sapien convallis, non blandit est tempus."); + article.setPublishDate(factory.getBirthDate().toString()); + article.setAuthor(factory.getName()); + return article; + } +} + + diff --git a/spring-mustache/src/main/java/com/baeldung/springmustache/model/Article.java b/spring-mustache/src/main/java/com/baeldung/springmustache/model/Article.java new file mode 100644 index 000000000000..78b08f877f60 --- /dev/null +++ b/spring-mustache/src/main/java/com/baeldung/springmustache/model/Article.java @@ -0,0 +1,41 @@ +package com.baeldung.springmustache.model; + +public class Article { + private String title; + private String body; + private String author; + private String publishDate; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getPublishDate() { + return publishDate; + } + + public void setPublishDate(String publishDate) { + this.publishDate = publishDate; + } + +} diff --git a/spring-mustache/src/main/resources/application.properties b/spring-mustache/src/main/resources/application.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/spring-mustache/src/main/resources/templates/error/error.html b/spring-mustache/src/main/resources/templates/error/error.html new file mode 100644 index 000000000000..fa29db41c48f --- /dev/null +++ b/spring-mustache/src/main/resources/templates/error/error.html @@ -0,0 +1,9 @@ + + + + + + Something went wrong: {{status}} {{error}} + + + \ No newline at end of file diff --git a/spring-mustache/src/main/resources/templates/index.html b/spring-mustache/src/main/resources/templates/index.html new file mode 100644 index 000000000000..bda60f9d8f73 --- /dev/null +++ b/spring-mustache/src/main/resources/templates/index.html @@ -0,0 +1,9 @@ +{{>layout/header}} + +
{{>layout/article}}
+ + + + +{{>layout/footer}} diff --git a/spring-mustache/src/main/resources/templates/layout/article.html b/spring-mustache/src/main/resources/templates/layout/article.html new file mode 100644 index 000000000000..9d573580d32f --- /dev/null +++ b/spring-mustache/src/main/resources/templates/layout/article.html @@ -0,0 +1,8 @@ +
+ {{#articles}} +

{{title}}

+

{{publishDate}}

+

{{author}}

+

{{body}}

+ {{/articles}} +
\ No newline at end of file diff --git a/spring-mustache/src/main/resources/templates/layout/footer.html b/spring-mustache/src/main/resources/templates/layout/footer.html new file mode 100644 index 000000000000..04f34cac54c0 --- /dev/null +++ b/spring-mustache/src/main/resources/templates/layout/footer.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/spring-mustache/src/main/resources/templates/layout/header.html b/spring-mustache/src/main/resources/templates/layout/header.html new file mode 100644 index 000000000000..d203ef800bfd --- /dev/null +++ b/spring-mustache/src/main/resources/templates/layout/header.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/spring-mustache/src/test/java/com/baeldung/springmustache/SpringMustacheApplicationTests.java b/spring-mustache/src/test/java/com/baeldung/springmustache/SpringMustacheApplicationTests.java new file mode 100644 index 000000000000..9138dfe92b5a --- /dev/null +++ b/spring-mustache/src/test/java/com/baeldung/springmustache/SpringMustacheApplicationTests.java @@ -0,0 +1,30 @@ +package com.baeldung.springmustache; + +import org.junit.Assert; +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.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +public class SpringMustacheApplicationTests { + + @Autowired + private TestRestTemplate restTemplate; + + @Test + public void givenIndexPageWhenContainsArticleThenTrue() { + + ResponseEntity entity = this.restTemplate.getForEntity("/article", String.class); + + Assert.assertTrue(entity.getStatusCode().equals(HttpStatus.OK)); + Assert.assertTrue(entity.getBody().contains("Article Title 0")); + } + +} diff --git a/spring-mvc-java/README.md b/spring-mvc-java/README.md index 504cfcdcc7bb..d42efa7ff6e6 100644 --- a/spring-mvc-java/README.md +++ b/spring-mvc-java/README.md @@ -23,3 +23,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Uploading and Displaying Excel Files with Spring MVC](http://www.baeldung.com/spring-mvc-excel-files) - [Spring MVC Custom Validation](http://www.baeldung.com/spring-mvc-custom-validator) - [web.xml vs Initializer with Spring](http://www.baeldung.com/spring-xml-vs-java-config) +- [The HttpMediaTypeNotAcceptableException in Spring MVC](http://www.baeldung.com/spring-httpmediatypenotacceptable) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index eb8e1455a76d..b939f0496d4c 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -5,7 +5,6 @@ spring-mvc-java 0.1-SNAPSHOT spring-mvc-java - war com.baeldung diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java index 0837100bfa53..698bae4c0f0b 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = {TestConfig.class}, loader = AnnotationConfigContextLoader.class) public class AopLoggingIntegrationTest { @Before diff --git a/spring-remoting/pom.xml b/spring-remoting/pom.xml index 0b751d1fc941..b40f77eb50f3 100644 --- a/spring-remoting/pom.xml +++ b/spring-remoting/pom.xml @@ -33,6 +33,7 @@ remoting-hessian-burlap remoting-amqp remoting-jms + spring-remoting-rmi \ No newline at end of file diff --git a/spring-remoting/spring-remoting-rmi/pom.xml b/spring-remoting/spring-remoting-rmi/pom.xml new file mode 100644 index 000000000000..723158775f93 --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/pom.xml @@ -0,0 +1,19 @@ + + + + spring-remoting + com.baeldung + 1.0-SNAPSHOT + + 4.0.0 + pom + + remoting-rmi-server + remoting-rmi-client + + spring-remoting-rmi + + + \ No newline at end of file diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml new file mode 100644 index 000000000000..003976dc7b2f --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/pom.xml @@ -0,0 +1,30 @@ + + + + spring-remoting-rmi + com.baeldung + 1.0-SNAPSHOT + + 4.0.0 + + remoting-rmi-client + + + + org.springframework.boot + spring-boot-starter-activemq + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.baeldung + api + + + \ No newline at end of file diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java new file mode 100644 index 000000000000..a568b749f917 --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-client/src/main/java/com/baeldung/client/RmiClient.java @@ -0,0 +1,26 @@ +package com.baeldung.client; + +import com.baeldung.api.Booking; +import com.baeldung.api.BookingException; +import com.baeldung.api.CabBookingService; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.remoting.rmi.RmiProxyFactoryBean; + +@SpringBootApplication public class RmiClient { + + @Bean RmiProxyFactoryBean service() { + RmiProxyFactoryBean rmiProxyFactory = new RmiProxyFactoryBean(); + rmiProxyFactory.setServiceUrl("rmi://localhost:1099/CabBookingService"); + rmiProxyFactory.setServiceInterface(CabBookingService.class); + return rmiProxyFactory; + } + + public static void main(String[] args) throws BookingException { + CabBookingService service = SpringApplication.run(RmiClient.class, args).getBean(CabBookingService.class); + Booking bookingOutcome = service.bookRide("13 Seagate Blvd, Key Largo, FL 33037"); + System.out.println(bookingOutcome); + } + +} diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml new file mode 100644 index 000000000000..5ce3f7f94935 --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/pom.xml @@ -0,0 +1,40 @@ + + + + spring-remoting-rmi + com.baeldung + 1.0-SNAPSHOT + + 4.0.0 + + remoting-rmi-server + + + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + com.baeldung + api + + + com.baeldung + api + ${project.version} + + + + \ No newline at end of file diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java new file mode 100644 index 000000000000..55ec9c5733a8 --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/CabBookingServiceImpl.java @@ -0,0 +1,16 @@ +package com.baeldung.server; + +import com.baeldung.api.Booking; +import com.baeldung.api.BookingException; +import com.baeldung.api.CabBookingService; + +import static java.lang.Math.random; +import static java.util.UUID.randomUUID; + +public class CabBookingServiceImpl implements CabBookingService { + + @Override public Booking bookRide(String pickUpLocation) throws BookingException { + if (random() < 0.3) throw new BookingException("Cab unavailable"); + return new Booking(randomUUID().toString()); + } +} diff --git a/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java new file mode 100644 index 000000000000..7778c65e855e --- /dev/null +++ b/spring-remoting/spring-remoting-rmi/remoting-rmi-server/src/main/java/com/baeldung/server/RmiServer.java @@ -0,0 +1,34 @@ +package com.baeldung.server; + +import com.baeldung.api.CabBookingService; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.remoting.rmi.RmiServiceExporter; + +@SpringBootApplication public class RmiServer { + + @Bean CabBookingService bookingService() { + return new CabBookingServiceImpl(); + } + + @Bean RmiServiceExporter exporter(CabBookingService implementation) { + + // Expose a service via RMI. Remote obect URL is: + // rmi://:/ + // 1099 is the default port + + Class serviceInterface = CabBookingService.class; + RmiServiceExporter exporter = new RmiServiceExporter(); + exporter.setServiceInterface(serviceInterface); + exporter.setService(implementation); + exporter.setServiceName(serviceInterface.getSimpleName()); + exporter.setRegistryPort(1099); + return exporter; + } + + public static void main(String[] args) { + SpringApplication.run(RmiServer.class, args); + } + +} diff --git a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java index 3661b2c5617c..f42c3cb28367 100644 --- a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java +++ b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java @@ -1,15 +1,7 @@ package org.baeldung.config; -import java.text.SimpleDateFormat; -import java.util.List; - import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; -import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @@ -26,30 +18,30 @@ public WebConfig() { } // - - @Override - public void configureMessageConverters(final List> messageConverters) { - final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); - builder.indentOutput(true) - .dateFormat(new SimpleDateFormat("dd-MM-yyyy hh:mm")); - messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build())); - // messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build())); - - // messageConverters.add(createXmlHttpMessageConverter()); - // messageConverters.add(new MappingJackson2HttpMessageConverter()); - - // messageConverters.add(new ProtobufHttpMessageConverter()); - super.configureMessageConverters(messageConverters); - } - - private HttpMessageConverter createXmlHttpMessageConverter() { - final MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter(); - - final XStreamMarshaller xstreamMarshaller = new XStreamMarshaller(); - xmlConverter.setMarshaller(xstreamMarshaller); - xmlConverter.setUnmarshaller(xstreamMarshaller); - - return xmlConverter; - } - + /* + @Override + public void configureMessageConverters(final List> messageConverters) { + final Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); + builder.indentOutput(true) + .dateFormat(new SimpleDateFormat("dd-MM-yyyy hh:mm")); + messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build())); + // messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build())); + + // messageConverters.add(createXmlHttpMessageConverter()); + // messageConverters.add(new MappingJackson2HttpMessageConverter()); + + // messageConverters.add(new ProtobufHttpMessageConverter()); + super.configureMessageConverters(messageConverters); + } + + private HttpMessageConverter createXmlHttpMessageConverter() { + final MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter(); + + final XStreamMarshaller xstreamMarshaller = new XStreamMarshaller(); + xmlConverter.setMarshaller(xstreamMarshaller); + xmlConverter.setUnmarshaller(xstreamMarshaller); + + return xmlConverter; + } + */ } diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/MyFooController.java b/spring-rest/src/main/java/org/baeldung/web/controller/MyFooController.java index 061213a3e9af..251e0b23e7b8 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/MyFooController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/MyFooController.java @@ -32,7 +32,7 @@ public MyFooController() { // API - read - @RequestMapping(method = RequestMethod.GET) + @RequestMapping(method = RequestMethod.GET, produces = { "application/json" }) @ResponseBody public Collection findAll() { return myfoos.values(); diff --git a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml index d133bcea229d..7e7d820836dc 100644 --- a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml +++ b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml @@ -19,12 +19,11 @@ --> - + + - diff --git a/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java b/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java index 2d12262e85e8..7bcaab6a0735 100644 --- a/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java @@ -42,7 +42,7 @@ public class RestTemplateBasicLiveTest { @Before public void beforeTest() { restTemplate = new RestTemplate(); - restTemplate.setMessageConverters(Arrays.asList(new MappingJackson2HttpMessageConverter())); + // restTemplate.setMessageConverters(Arrays.asList(new MappingJackson2HttpMessageConverter())); } // GET @@ -78,7 +78,6 @@ public void givenResourceUrl_whenRetrievingResource_thenCorrect() throws IOExcep @Test public void givenFooService_whenCallHeadForHeaders_thenReceiveAllHeadersForThatResource() { final HttpHeaders httpHeaders = restTemplate.headForHeaders(fooResourceUrl); - assertTrue(httpHeaders.getContentType() .includes(MediaType.APPLICATION_JSON)); } @@ -248,4 +247,5 @@ ClientHttpRequestFactory getSimpleClientHttpRequestFactory() { clientHttpRequestFactory.setConnectTimeout(timeout * 1000); return clientHttpRequestFactory; } + } diff --git a/spring-security-mvc-socket/.gitignore b/spring-security-mvc-socket/.gitignore new file mode 100644 index 000000000000..6daae96b0ba9 --- /dev/null +++ b/spring-security-mvc-socket/.gitignore @@ -0,0 +1,5 @@ +node_modules +.idea +target +*.iml +out \ No newline at end of file diff --git a/spring-security-mvc-socket/README.md b/spring-security-mvc-socket/README.md new file mode 100644 index 000000000000..5ae9d4f4cdc2 --- /dev/null +++ b/spring-security-mvc-socket/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Intro to Security and WebSockets](http://www.baeldung.com/spring-security-websockets) diff --git a/spring-security-mvc-socket/pom.xml b/spring-security-mvc-socket/pom.xml new file mode 100644 index 000000000000..c1715d36d271 --- /dev/null +++ b/spring-security-mvc-socket/pom.xml @@ -0,0 +1,181 @@ + + + 4.0.0 + com.baeldung.springsecuredsockets + spring-security-mvc-socket + war + 1.0.0 + spring-security-mvc-socket + + 4.3.8.RELEASE + 4.2.3.RELEASE + 2.8.7 + 1.7.25 + + + + + org.springframework + spring-core + ${springframework.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-web + ${springframework.version} + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${springframework.version} + + + commons-logging + commons-logging + + + + + + + org.springframework.security + spring-security-web + ${springsecurity.version} + + + org.springframework.security + spring-security-config + ${springsecurity.version} + + + + + org.springframework.data + spring-data-jpa + 1.11.3.RELEASE + + + org.hibernate + hibernate-core + 5.2.10.Final + + + com.h2database + h2 + 1.4.196 + + + + + org.springframework + spring-websocket + ${springframework.version} + + + org.springframework + spring-messaging + ${springframework.version} + + + org.springframework.security + spring-security-messaging + ${springsecurity.version} + + + + + org.slf4j + jcl-over-slf4j + ${slf4j.version} + + + ch.qos.logback + logback-classic + 1.2.3 + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + javax.servlet.jsp + javax.servlet.jsp-api + 2.3.1 + + + javax.servlet + jstl + 1.2 + + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + + + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + /spring-security-mvc-socket + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + src/main/webapp + false + + + + + spring-security-mvc-socket + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java new file mode 100644 index 000000000000..da687a328adb --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/AppConfig.java @@ -0,0 +1,56 @@ +package com.baeldung.springsecuredsockets.config; + +import org.h2.tools.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.resource.PathResourceResolver; +import org.springframework.web.servlet.view.JstlView; +import org.springframework.web.servlet.view.UrlBasedViewResolver; +import java.sql.SQLException; + +@Configuration +@EnableWebMvc +@EnableJpaRepositories +@ComponentScan("com.baeldung.springsecuredsockets") +@Import({ SecurityConfig.class, DataStoreConfig.class, SocketBrokerConfig.class, SocketSecurityConfig.class }) +public class AppConfig extends WebMvcConfigurerAdapter { + + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("index"); + registry.addViewController("/login").setViewName("login"); + registry.addViewController("/secured/socket").setViewName("socket"); + registry.addViewController("/secured/success").setViewName("success"); + registry.addViewController("/denied").setViewName("denied"); + } + + @Bean + public UrlBasedViewResolver viewResolver() { + final UrlBasedViewResolver bean = new UrlBasedViewResolver(); + bean.setPrefix("/WEB-INF/jsp/"); + bean.setSuffix(".jsp"); + bean.setViewClass(JstlView.class); + return bean; + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**") + .addResourceLocations("/", "/resources/") + .setCachePeriod(3600) + .resourceChain(true) + .addResolver(new PathResourceResolver()); + } + + // View H2 + @Bean(initMethod="start", destroyMethod="stop") + public Server h2Console () throws SQLException { + return Server.createWebServer("-web","-webAllowOthers","-webDaemon","-webPort", "8082"); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java new file mode 100644 index 000000000000..2246c0055b62 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/DataStoreConfig.java @@ -0,0 +1,69 @@ +package com.baeldung.springsecuredsockets.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.Database; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; +import java.util.Properties; + +@Configuration +@ComponentScan("com.baeldung.springsecuredsockets") +@EnableTransactionManagement +@EnableJpaRepositories("com.baeldung.springsecuredsockets.repositories") +public class DataStoreConfig { + + //Configuration for embededded data store through H2 + @Bean + public DataSource dataSource() { + return new EmbeddedDatabaseBuilder() + .setType(EmbeddedDatabaseType.H2) + .setName("socketDB") + .addScript("classpath:schema.sql") + .addScript("classpath:data.sql") + .setScriptEncoding("UTF-8") + .continueOnError(true) + .ignoreFailedDrops(true) + .build(); + } + + @Bean + public JpaVendorAdapter jpaVendorAdapter() { + final HibernateJpaVendorAdapter bean = new HibernateJpaVendorAdapter(); + bean.setDatabase(Database.H2); + bean.setGenerateDdl(true); + return bean; + } + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { + final LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean(); + bean.setDataSource(dataSource); + bean.setJpaVendorAdapter(jpaVendorAdapter()); + bean.setPackagesToScan("com.baeldung.springsecuredsockets"); + + //Set properties on Hibernate + Properties properties = new Properties(); + properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); + properties.setProperty("hibernate.hbm2ddl.auto", "update"); + bean.setJpaProperties(properties); + + return bean; + } + + @Bean + public JpaTransactionManager transactionManager(EntityManagerFactory emf) { + return new JpaTransactionManager(emf); + } + +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java new file mode 100644 index 000000000000..7006619d3538 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SecurityConfig.java @@ -0,0 +1,136 @@ +package com.baeldung.springsecuredsockets.config; + +import com.baeldung.springsecuredsockets.security.CustomAccessDeniedHandler; +import com.baeldung.springsecuredsockets.security.CustomDaoAuthenticationProvider; +import com.baeldung.springsecuredsockets.security.CustomLoginSuccessHandler; +import com.baeldung.springsecuredsockets.security.CustomLogoutSuccessHandler; +import com.baeldung.springsecuredsockets.security.CustomUserDetailsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.access.AccessDeniedHandler; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +/** + * @EnableGlobalAuthentication annotates: + * @EnableWebSecurity + * @EnableWebMvcSecurity + * @EnableGlobalMethodSecurity Passing in 'prePostEnabled = true' allows: + *

+ * Pre/Post annotations such as: + * @PreAuthorize("hasRole('ROLE_USER')") + */ + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) +@EnableWebSecurity +@ComponentScan("com.baeldung.springsecuredsockets") +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + private CustomUserDetailsService customUserDetailsService; + + /** + * Login, Logout, Success, and Access Denied beans/handlers + */ + + @Bean + public AccessDeniedHandler accessDeniedHandler() { + return new CustomAccessDeniedHandler(); + } + + @Bean + public LogoutSuccessHandler logoutSuccessHandler() { + return new CustomLogoutSuccessHandler(); + } + + @Bean + public AuthenticationSuccessHandler loginSuccessHandler() { + return new CustomLoginSuccessHandler(); + } + + /** + * Authentication beans + */ + + @Bean + public PasswordEncoder encoder() { + return new BCryptPasswordEncoder(); + } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + final DaoAuthenticationProvider bean = new CustomDaoAuthenticationProvider(); + bean.setUserDetailsService(customUserDetailsService); + bean.setPasswordEncoder(encoder()); + return bean; + } + + /** + * Order of precedence is very important. + *

+ * Matching occurs from top to bottom - so, the topmost match succeeds first. + */ + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .antMatchers("/", "/index", "/authenticate") + .permitAll() + .antMatchers("/secured/**/**", + "/secured/success", "/secured/socket", "/secured/success") + .authenticated() + .anyRequest().authenticated() + .and() + .formLogin() + .loginPage("/login").permitAll() + .usernameParameter("username") + .passwordParameter("password") + .loginProcessingUrl("/authenticate") + .successHandler(loginSuccessHandler()) + .failureUrl("/denied").permitAll() + .and() + .logout() + .logoutSuccessHandler(logoutSuccessHandler()) + .and() + /** + * Applies to User Roles - not to login failures or unauthenticated access attempts. + */ + .exceptionHandling() + .accessDeniedHandler(accessDeniedHandler()) + .and() + .authenticationProvider(authenticationProvider()); + + /** Disabled for local testing */ + http + .csrf().disable(); + + /** This is solely required to support H2 console viewing in Spring MVC with Spring Security */ + http + .headers() + .frameOptions() + .disable(); + } + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + auth.authenticationProvider(authenticationProvider()); + } + + @Override + public void configure(WebSecurity web) throws Exception { + web.ignoring().antMatchers("/resources/**"); + } + +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java new file mode 100644 index 000000000000..5affbd4c0e04 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketBrokerConfig.java @@ -0,0 +1,27 @@ +package com.baeldung.springsecuredsockets.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; + + +@Configuration +@EnableWebSocketMessageBroker +@ComponentScan("com.baeldung.springsecuredsockets.controllers") +public class SocketBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + config.enableSimpleBroker("/secured/history"); + config.setApplicationDestinationPrefixes("/spring-security-mvc-socket"); + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/secured/chat").withSockJS(); + } +} + diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketSecurityConfig.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketSecurityConfig.java new file mode 100644 index 000000000000..a37dfb767243 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/SocketSecurityConfig.java @@ -0,0 +1,21 @@ +package com.baeldung.springsecuredsockets.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.messaging.MessageSecurityMetadataSourceRegistry; +import org.springframework.security.config.annotation.web.socket.AbstractSecurityWebSocketMessageBrokerConfigurer; + +@Configuration +public class SocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer { + + @Override + protected boolean sameOriginDisabled() { + return true; + } + + @Override + protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) { + messages + .simpDestMatchers("/secured/**").authenticated() + .anyMessage().authenticated(); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java new file mode 100644 index 000000000000..20311426c750 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/config/WebAppInitializer.java @@ -0,0 +1,24 @@ +package com.baeldung.springsecuredsockets.config; + +import org.hibernate.cfg.Configuration; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +public class WebAppInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + context.register(AppConfig.class); + context.setServletContext(container); + + ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context)); + servlet.setLoadOnStartup(1); + servlet.addMapping("/"); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java new file mode 100644 index 000000000000..3d10dad391ad --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/CsrfTokenController.java @@ -0,0 +1,18 @@ +package com.baeldung.springsecuredsockets.controllers; + +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +@Controller +public class CsrfTokenController { + @GetMapping("/csrf") + public @ResponseBody + String getCsrfToken(HttpServletRequest request) { + CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); + return csrf.getToken(); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java new file mode 100644 index 000000000000..68c5e306d81c --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/controllers/SocketController.java @@ -0,0 +1,28 @@ +package com.baeldung.springsecuredsockets.controllers; + +import com.baeldung.springsecuredsockets.transfer.socket.Message; +import com.baeldung.springsecuredsockets.transfer.socket.OutputMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.stereotype.Controller; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Controller +public class SocketController { + + @Autowired + private SimpMessagingTemplate simpMessagingTemplate; + private static final Logger log = LoggerFactory.getLogger(SocketController.class); + + @MessageMapping("/secured/chat") + @SendTo("/secured/history") + public OutputMessage send(Message msg) throws Exception { + OutputMessage out = new OutputMessage(msg.getFrom(), msg.getText(), new SimpleDateFormat("HH:mm").format(new Date())); + return out; + } +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java new file mode 100644 index 000000000000..09fee9a31bfd --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/Role.java @@ -0,0 +1,51 @@ +package com.baeldung.springsecuredsockets.domain; + +import javax.persistence.*; +import java.util.Set; + +@Entity +@Table(name = "role") +public class Role { + + @Id + //Slight increase in performance over GenerationType.IDENTITY + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "role_id", updatable = false, nullable = false) + private long role_id; + + @Column(name = "role", nullable = false) + private String role; + + /** + * Many to Many Example - see Role. + *

+ * One User many have many Roles. + * Each Role may be assigned to many Users. + */ + @ManyToMany(mappedBy = "roles", fetch = FetchType.EAGER) + private Set users; + + public long getRole_id() { + return role_id; + } + + public void setRole_id(long role_id) { + this.role_id = role_id; + } + + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + } + + public Set getUsers() { + return users; + } + + public void setUsers(Set users) { + this.users = users; + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/User.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/User.java new file mode 100644 index 000000000000..8f84b2246dbd --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/domain/User.java @@ -0,0 +1,65 @@ +package com.baeldung.springsecuredsockets.domain; + +import javax.persistence.*; +import java.util.Set; + +//Custom User Model + +@Entity +@Table(name = "user") +public class User { + + @Id + //Slight increase in performance over GenerationType.IDENTITY + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "user_id", updatable = false, nullable = false) + private long user_id; + + @Column(name = "username", nullable = false) + private String username; + + @Column(name = "password", nullable = false) + private String password; + + /** + * Many to Many Example - see Role. + *

+ * One User many have many Roles. + * Each Role may be assigned to many Users. + */ + @ManyToMany(fetch = FetchType.EAGER) + @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) + private Set roles; + + public long getUser_id() { + return user_id; + } + + public void setUser_id(long user_id) { + this.user_id = user_id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/repositories/UserRepository.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/repositories/UserRepository.java new file mode 100644 index 000000000000..fae5cfac6e0b --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/repositories/UserRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.springsecuredsockets.repositories; + + +import com.baeldung.springsecuredsockets.domain.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { + User findByUsername(String username); +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java new file mode 100644 index 000000000000..0ab31a9c863b --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomAccessDeniedHandler.java @@ -0,0 +1,23 @@ +package com.baeldung.springsecuredsockets.security; + +import org.springframework.http.HttpStatus; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.security.web.access.AccessDeniedHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Applies to User Roles - not to login failures or unauthenticaed access attempts. + */ + +public class CustomAccessDeniedHandler implements AccessDeniedHandler { + + @Override + public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc) throws IOException, ServletException { + response.setStatus(HttpStatus.BAD_REQUEST.value()); + response.sendRedirect(request.getContextPath() + "/denied"); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomDaoAuthenticationProvider.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomDaoAuthenticationProvider.java new file mode 100644 index 000000000000..576495bedf37 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomDaoAuthenticationProvider.java @@ -0,0 +1,42 @@ +package com.baeldung.springsecuredsockets.security; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +public class CustomDaoAuthenticationProvider extends DaoAuthenticationProvider { + + Logger log = LoggerFactory.getLogger(CustomDaoAuthenticationProvider.class); + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + + String name = authentication.getName(); + String password = authentication.getCredentials().toString(); + UserDetails u = null; + + try { + u = getUserDetailsService().loadUserByUsername(name); + } catch (UsernameNotFoundException ex) { + log.error("User '" + name + "' not found"); + } catch (Exception e) { + log.error("Exception in CustomDaoAuthenticationProvider: " + e); + } + + if (u != null) { + if (u.getPassword().equals(password)) { + return new UsernamePasswordAuthenticationToken(u, password, u.getAuthorities()); + } + } + + throw new BadCredentialsException(messages.getMessage("CustomDaoAuthenticationProvider.badCredentials", "Bad credentials")); + + } +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java new file mode 100644 index 000000000000..281fd0f16367 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLoginSuccessHandler.java @@ -0,0 +1,25 @@ +package com.baeldung.springsecuredsockets.security; + +import com.baeldung.springsecuredsockets.domain.User; +import com.baeldung.springsecuredsockets.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.AuthenticationSuccessHandler; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class CustomLoginSuccessHandler implements AuthenticationSuccessHandler { + + @Autowired + UserRepository userRepository; + + @Override + public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException { + User user = userRepository.findByUsername(authentication.getName()); + response.setStatus(HttpStatus.OK.value()); + response.sendRedirect(request.getContextPath() + "/secured/success"); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java new file mode 100644 index 000000000000..620e75fb39c4 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomLogoutSuccessHandler.java @@ -0,0 +1,21 @@ +package com.baeldung.springsecuredsockets.security; + + +import org.springframework.http.HttpStatus; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class CustomLogoutSuccessHandler implements LogoutSuccessHandler { + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException { + + response.setStatus(HttpStatus.OK.value()); + response.sendRedirect(request.getContextPath() + "/index"); + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java new file mode 100644 index 000000000000..a0eb4d4bde08 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/CustomUserDetailsService.java @@ -0,0 +1,51 @@ +package com.baeldung.springsecuredsockets.security; + +import com.baeldung.springsecuredsockets.domain.Role; +import com.baeldung.springsecuredsockets.domain.User; +import com.baeldung.springsecuredsockets.repositories.UserRepository; +import com.baeldung.springsecuredsockets.transfer.user.CustomUserDetails; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.HashSet; + +@Service() +public class CustomUserDetailsService implements UserDetailsService { + + Logger log = LoggerFactory.getLogger(CustomUserDetailsService.class); + + @Autowired + private UserRepository userRepository; + + public CustomUserDetailsService() { + super(); + } + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + try { + User user = userRepository.findByUsername(username); + if (user != null) return new CustomUserDetails(user, getAuthorities(user)); + } catch (Exception ex) { + log.error("Exception in CustomUserDetailsService: " + ex); + } + return null; + } + + private Collection getAuthorities(User user) { + Collection authorities = new HashSet<>(); + for (Role role : user.getRoles()) { + GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(role.getRole()); + authorities.add(grantedAuthority); + } + return authorities; + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/SecurityWebApplicationInitializer.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/SecurityWebApplicationInitializer.java new file mode 100644 index 000000000000..2fcc0d254aca --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/security/SecurityWebApplicationInitializer.java @@ -0,0 +1,12 @@ +package com.baeldung.springsecuredsockets.security; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +/** + * This is required to enable springSecurityFilterChain. + * + * Remember that Spring Security utilizes filters to intercept and manage requests + * according to the specified authorization and authentication rules + */ + +public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/Message.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/Message.java new file mode 100644 index 000000000000..024b3861645f --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/Message.java @@ -0,0 +1,20 @@ +package com.baeldung.springsecuredsockets.transfer.socket; + +public class Message { + + private String from; + private String text; + + public String getFrom() { + return from; + } + public void setFrom(String from) { + this.from = from; + } + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/OutputMessage.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/OutputMessage.java new file mode 100644 index 000000000000..1bfb8eabe4a6 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/socket/OutputMessage.java @@ -0,0 +1,17 @@ +package com.baeldung.springsecuredsockets.transfer.socket; + +public class OutputMessage extends Message { + + private String time; + + public OutputMessage(final String from, final String text, final String time) { + setFrom(from); + setText(text); + this.time = time; + } + + public String getTime() { + return time; + } + public void setTime(String time) { this.time = time; } +} diff --git a/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/user/CustomUserDetails.java b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/user/CustomUserDetails.java new file mode 100644 index 000000000000..18ccbb458691 --- /dev/null +++ b/spring-security-mvc-socket/src/main/java/com/baeldung/springsecuredsockets/transfer/user/CustomUserDetails.java @@ -0,0 +1,25 @@ +package com.baeldung.springsecuredsockets.transfer.user; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.User; + +import java.util.Collection; + +public class CustomUserDetails extends User { + + private com.baeldung.springsecuredsockets.domain.User user; + + public CustomUserDetails(com.baeldung.springsecuredsockets.domain.User user, Collection authorities) { + super(user.getUsername(), user.getPassword(), authorities); + this.user = user; + } + + public CustomUserDetails(com.baeldung.springsecuredsockets.domain.User user, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired, boolean accountNonLocked, Collection authorities) { + super(user.getUsername(), user.getPassword(), enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); + this.user = user; + } + + public com.baeldung.springsecuredsockets.domain.User getUser() { + return user; + } +} \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/resources/data.sql b/spring-security-mvc-socket/src/main/resources/data.sql new file mode 100644 index 000000000000..513764660993 --- /dev/null +++ b/spring-security-mvc-socket/src/main/resources/data.sql @@ -0,0 +1,18 @@ +INSERT INTO user (user_id, username, password) +VALUES (1, 'user', 'password'); +INSERT INTO user (user_id, username, password) +VALUES (2, 'admin','password'); +INSERT INTO user (user_id, username, password) +VALUES (3, 'mary','password'); + +INSERT INTO role (role_id, role) +VALUES (1, 'USER'); +INSERT INTO role (role_id, role) +VALUES (2, 'ADMIN'); + +INSERT INTO user_role (id, user_id, role_id) +VALUES (1, 1, 1); +INSERT INTO user_role (id, user_id, role_id) +VALUES (2, 2, 2); +INSERT INTO user_role (id, user_id, role_id) +VALUES (3, 3, 1); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/resources/schema.sql b/spring-security-mvc-socket/src/main/resources/schema.sql new file mode 100644 index 000000000000..2479b1c71193 --- /dev/null +++ b/spring-security-mvc-socket/src/main/resources/schema.sql @@ -0,0 +1,26 @@ +DROP TABLE IF EXISTS user; +CREATE TABLE user ( + user_id INT(11) NOT NULL AUTO_INCREMENT, + username VARCHAR(45) NOT NULL , + password VARCHAR(45) NOT NULL , + UNIQUE KEY uni_user_username (username), + PRIMARY KEY (user_id) +); + +DROP TABLE IF EXISTS role; +CREATE TABLE role ( + role_id INT(11) NOT NULL AUTO_INCREMENT, + role VARCHAR(45) NOT NULL, + UNIQUE KEY uni_role_role (role), + PRIMARY KEY (role_id) +); + +/** JOIN TABLES */ + +DROP TABLE IF EXISTS user_role; +CREATE TABLE user_role( + id INT(11) NOT NULL AUTO_INCREMENT, + user_id INT(11) NOT NULL, + role_id INT(11) NOT NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/denied.jsp b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/denied.jsp new file mode 100644 index 000000000000..d61148b04f3e --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/denied.jsp @@ -0,0 +1,18 @@ +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> + + + + + Spring Secured Sockets + " rel="stylesheet"> + + + +

ACCESS DENIED!

+
+
+ Click to login. + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/index.jsp new file mode 100644 index 000000000000..d83338680eb5 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/index.jsp @@ -0,0 +1,30 @@ +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> + + + + + Spring Secured Sockets + " rel="stylesheet"> + + + + + + + + + + + + + +

Welcome!

+
+ {{greeting}} +
+
+ Click to login. + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/login.jsp b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 000000000000..d50059c6741f --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,45 @@ +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> + + + + + Spring Secured Sockets + " rel="stylesheet"> + + + + + + + + + + + + + + + +

JSP Login Form


+
+ + + + + + + + + + + + +
User:
Password:
+
+ + + + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/socket.jsp b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/socket.jsp new file mode 100644 index 000000000000..b5807d74a674 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/socket.jsp @@ -0,0 +1,51 @@ +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> + + + + + Spring Secured Sockets + " rel="stylesheet"> + + + + + + + + + + + + + + + +

Socket Chat

+ +
+
+ +
+
+
+ + + +
+
+
+ + +

+
+
+ +Click to go back! +Click to start over (you will still be authenticated)! + + + + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/success.jsp b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/success.jsp new file mode 100644 index 000000000000..27e8f7aa44c8 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/WEB-INF/jsp/success.jsp @@ -0,0 +1,31 @@ +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> + + + + + Spring Secured Sockets + " rel="stylesheet"> + + + + + + + + + + + + + +

Congrats! You've logged in.

+ + Click to chat! + Click to start over (you will still be authenticated)! + + + + + \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/app.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/app.js new file mode 100644 index 000000000000..71a618a6370b --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/app.js @@ -0,0 +1,5 @@ +'use strict'; + +var angularApp = angular.module('angularApp', ['ngRoute']); + + diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/indexController.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/indexController.js new file mode 100644 index 000000000000..04c02e339b2b --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/indexController.js @@ -0,0 +1,12 @@ +'use strict'; + +angularApp + .controller('indexController', function ($scope) { + $scope.greeting = ''; + + $scope.initialize = function () { + $scope.greeting = "Howdy!" + }; + + $scope.initialize(); + }); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/loginController.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/loginController.js new file mode 100644 index 000000000000..07187d5327b8 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/loginController.js @@ -0,0 +1,6 @@ +'use strict'; + +angularApp + .controller('loginController', function ($scope) { + + }); diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/socketController.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/socketController.js new file mode 100644 index 000000000000..395bf85c4ace --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/socketController.js @@ -0,0 +1,37 @@ +'use strict'; + +angularApp + .controller('socketController', function ($scope, SocketService) { + + $scope.stompClient = null; + $scope.sendEndpoint = '/secured/chat'; + $scope.subscribeEndpoint = '/secured/history'; + $scope.elems = { + connect: 'connect', + from: 'from', + text: 'text', + disconnect: 'disconnect', + conversationDiv: 'conversationDiv', + response: 'response' + }; + + $scope.connect = function (context) { + $scope.sendEndpoint = '/secured/chat'; + $scope.sendEndpoint = context + $scope.sendEndpoint ; + $scope.stompClient = SocketService.connect($scope.sendEndpoint, $scope.elems); + }; + + $scope.subscribe = function () { + $scope.stompClient.subscribe($scope.subscribeEndpoint, function (msgOut) { + SocketService.messageOut(JSON.parse(msgOut.body), $scope.elems); + }); + }; + + $scope.disconnect = function () { + SocketService.disconnect($scope.elems, $scope.stompClient); + }; + + $scope.sendMessage = function () { + SocketService.sendMessage( $scope.elems, $scope.stompClient, $scope.sendEndpoint); + }; + }); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/successController.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/successController.js new file mode 100644 index 000000000000..ccb972202d41 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/controllers/successController.js @@ -0,0 +1,13 @@ +'use strict'; + +angularApp + .controller('successController', function ($scope) { + + $scope.successMsg = ''; + + $scope.initialize = function () { + $scope.successMsg = "You've logged in!"; + }; + + $scope.initialize(); + }); diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/routes/router.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/routes/router.js new file mode 100644 index 000000000000..70644f996d77 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/routes/router.js @@ -0,0 +1,19 @@ +'use strict'; + +angularApp + .config(function ($routeProvider) { + $routeProvider + .when('/index', { + controller: 'indexController' + }) + .when('/login', { + controller: 'loginController' + }) + .when('/sockets', { + controller: 'socketController' + }) + .when('/success', { + controller: 'successController' + }) + .otherwise('/index'); + }); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/resources/scripts/services/SocketService.js b/spring-security-mvc-socket/src/main/webapp/resources/scripts/services/SocketService.js new file mode 100644 index 000000000000..56930808a3cd --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/scripts/services/SocketService.js @@ -0,0 +1,46 @@ +'use strict'; + +function SocketService() { + var that = this, + idHelper = function(context) { + return document.getElementById(context); + }; + + that.setConnected = function (elems, connected) { + idHelper(elems.connect).disabled = connected; + idHelper(elems.disconnect).disabled = !connected; + idHelper(elems.conversationDiv).style.visibility = connected ? 'visible' : 'hidden'; + idHelper(elems.response).innerHTML = ''; + }; + + that.connect = function (endpoint, elems) { + var socket = new SockJS(endpoint), stompClient = Stomp.over(socket); + stompClient.connect({}, function (frame) { + that.setConnected(elems, true); + }); + return stompClient; + }; + + that.disconnect = function (elems, stompClient) { + if (stompClient !== null && stompClient !== undefined) stompClient.disconnect(); + that.setConnected(elems, false); + }; + + that.sendMessage = function (elems, stompClient, endpoint) { + stompClient.send(endpoint, {}, + JSON.stringify({ + 'from': idHelper(elems.from).value, + 'text': idHelper(elems.text).value + })); + }; + + that.messageOut = function (msg, elems) { + var r = idHelper(elems.response), p = document.createElement('p'); + p.style.wordWrap = 'break-word'; + p.appendChild(document.createTextNode(msg.from + ': ' + msg.text + ' (' + msg.time + ')')); + r.appendChild(p); + }; +} + +angularApp + .service('SocketService', SocketService); \ No newline at end of file diff --git a/spring-security-mvc-socket/src/main/webapp/resources/styles/style.css b/spring-security-mvc-socket/src/main/webapp/resources/styles/style.css new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular-route.min.js b/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular-route.min.js new file mode 100644 index 000000000000..624dcb5d7b2d --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular-route.min.js @@ -0,0 +1,16 @@ +/* + AngularJS v1.5.7 + (c) 2010-2016 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(F,d){'use strict';function x(t,l,g){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(b,e,a,c,k){function p(){m&&(g.cancel(m),m=null);h&&(h.$destroy(),h=null);n&&(m=g.leave(n),m.then(function(){m=null}),n=null)}function A(){var a=t.current&&t.current.locals;if(d.isDefined(a&&a.$template)){var a=b.$new(),c=t.current;n=k(a,function(a){g.enter(a,null,n||e).then(function(){!d.isDefined(z)||z&&!b.$eval(z)||l()});p()});h=c.scope=a;h.$emit("$viewContentLoaded"); +h.$eval(s)}else p()}var h,n,m,z=a.autoscroll,s=a.onload||"";b.$on("$routeChangeSuccess",A);A()}}}function w(d,l,g){return{restrict:"ECA",priority:-400,link:function(b,e){var a=g.current,c=a.locals;e.html(c.$template);var k=d(e.contents());if(a.controller){c.$scope=b;var p=l(a.controller,c);a.controllerAs&&(b[a.controllerAs]=p);e.data("$ngControllerController",p);e.children().data("$ngControllerController",p)}b[a.resolveAs||"$resolve"]=c;k(b)}}}var C=d.isArray,D=d.isObject,s=d.module("ngRoute",["ng"]).provider("$route", +function(){function t(b,e){return d.extend(Object.create(b),e)}function l(b,d){var a=d.caseInsensitiveMatch,c={originalPath:b,regexp:b},g=c.keys=[];b=b.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[\?\*])?/g,function(b,a,d,c){b="?"===c||"*?"===c?"?":null;c="*"===c||"*?"===c?"*":null;g.push({name:d,optional:!!b});a=a||"";return""+(b?"":a)+"(?:"+(b?a:"")+(c&&"(.+?)"||"([^/]+)")+(b||"")+")"+(b||"")}).replace(/([\/$\*])/g,"\\$1");c.regexp=new RegExp("^"+b+"$",a?"i":"");return c}var g={};this.when= +function(b,e){var a;a=void 0;if(C(e)){a=a||[];for(var c=0,k=e.length;c").append(a).html();try{return a[0].nodeType===Na?M(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(c){return M(d)}}function zc(a){try{return decodeURIComponent(a)}catch(b){}}function Ac(a){var b={};r((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="), +-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=zc(e),x(e)&&(f=x(f)?zc(f):!0,sa.call(b,e)?J(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Tb(a){var b=[];r(a,function(a,c){J(a)?r(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}function qb(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi, +":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function fe(a,b){var d,c,e=Oa.length;for(c=0;c/,">"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=db(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,d,c){a.$apply(function(){b.data("$injector",c);d(b)(a)})}]); +return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;E&&e.test(E.name)&&(d.debugInfoEnabled=!0,E.name=E.name.replace(e,""));if(E&&!f.test(E.name))return c();E.name=E.name.replace(f,"");ea.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};z(ea.resumeDeferredBootstrap)&&ea.resumeDeferredBootstrap()}function he(){E.name="NG_ENABLE_DEBUG_INFO!"+E.name;E.location.reload()}function ie(a){a=ea.element(a).injector();if(!a)throw za("test");return a.get("$$testability")}function Cc(a, +b){b=b||"_";return a.replace(je,function(a,c){return(c?b:"")+a.toLowerCase()})}function ke(){var a;if(!Dc){var b=rb();(pa=w(b)?E.jQuery:b?E[b]:void 0)&&pa.fn.on?(B=pa,R(pa.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),a=pa.cleanData,pa.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=pa._data(f,"events"))&&c.$destroy&&pa(f).triggerHandler("$destroy");a(b)}):B=U;ea.element=B;Dc=!0}}function sb(a,b,d){if(!a)throw za("areq", +b||"?",d||"required");return a}function Qa(a,b,d){d&&J(a)&&(a=a[a.length-1]);sb(z(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ra(a,b){if("hasOwnProperty"===a)throw za("badname",b);}function Ec(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g")+c[2];for(c=c[0];c--;)d=d.lastChild;f=ab(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)}); +return e}function Pc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function U(a){if(a instanceof U)return a;var b;F(a)&&(a=W(a),b=!0);if(!(this instanceof U)){if(b&&"<"!=a.charAt(0))throw Wb("nosel");return new U(a)}if(b){b=E.document;var d;a=(d=Of.exec(a))?[b.createElement(d[1])]:(d=Oc(a,b))?d.childNodes:[]}Qc(this,a)}function Xb(a){return a.cloneNode(!0)}function wb(a,b){b||fb(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c=Ba?!1:"function"===typeof a&&/^(?:class\s|constructor\()/.test(Function.prototype.toString.call(a)+" ");return d?(c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=J(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d, +a))},get:d,annotate:db.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Sa([],!0),n={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,da(b),!1)}),constant:d(function(a,b){Ra(a,"constant");n[a]=b;s[a]=b}),decorator:function(a,b){var c=p.get(a+"Provider"),d=c.$get;c.$get=function(){var a=I.invoke(d,c);return I.invoke(b,null, +{$delegate:a})}}}},p=n.$injector=h(n,function(a,b){ea.isString(b)&&l.push(b);throw Ha("unpr",l.join(" <- "));}),s={},V=h(s,function(a,b){var c=p.get(a+"Provider",b);return I.invoke(c.$get,c,void 0,a)}),I=V;n.$injectorProvider={$get:da(V)};var q=g(a),I=V.get("$injector");I.strictDi=b;r(q,function(a){a&&I.invoke(a)});return I}function Ye(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a, +function(a){if("a"===ua(a))return b=a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;z(c)?c=c():Qb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):S(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=F(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a=== +b&&""===a||Qf(function(){c.$evalAsync(g)})});return g}]}function hb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;J(a)&&(a=a.join(" "));J(b)&&(b=b.join(" "));return a+" "+b}function Zf(a){F(a)&&(a=a.split(" "));var b=T();r(a,function(a){a.length&&(b[a]=!0)});return b}function Ia(a){return H(a)?a:{}}function $f(a,b,d,c){function e(a){try{a.apply(null,ta.call(arguments,1))}finally{if(V--,0===V)for(;I.length;)try{I.pop()()}catch(b){d.error(b)}}}function f(){y=null;g();h()}function g(){q=P(); +q=w(q)?null:q;na(q,D)&&(q=D);D=q}function h(){if(v!==k.url()||K!==q)v=k.url(),K=q,r(L,function(a){a(k.url(),q)})}var k=this,l=a.location,m=a.history,n=a.setTimeout,p=a.clearTimeout,s={};k.isMock=!1;var V=0,I=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){V++};k.notifyWhenNoOutstandingRequests=function(a){0===V?a():I.push(a)};var q,K,v=l.href,u=b.find("base"),y=null,P=c.history?function(){try{return m.state}catch(a){}}:A;g();K=q;k.url=function(b,d,e){w(e)&&(e=null);l!== +a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=K===e;if(v===b&&(!c.history||f))return k;var h=v&&Ja(v)===Ja(b);v=b;K=e;!c.history||h&&f?(h||(y=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(y=b)):(m[d?"replaceState":"pushState"](e,"",b),g(),K=q);y&&(y=b);return k}return y||l.href.replace(/%27/g,"'")};k.state=function(){return q};var L=[],C=!1,D=null;k.onUrlChange=function(b){if(!C){if(c.history)B(a).on("popstate",f);B(a).on("hashchange", +f);C=!0}L.push(b);return b};k.$$applicationDestroyed=function(){B(a).off("hashchange popstate",f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=u.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;V++;c=n(function(){delete s[c];e(a)},b||0);s[c]=!0;return c};k.defer.cancel=function(a){return s[a]?(delete s[a],p(a),e(A),!0):!1}}function ef(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new $f(a,c,b,d)}]}function ff(){this.$get= +function(){function a(a,c){function e(a){a!=n&&(p?p==a&&(p=a.n):p=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw O("$cacheFactory")("iid",a);var g=0,h=R({},c,{id:a}),k=T(),l=c&&c.capacity||Number.MAX_VALUE,m=T(),n=null,p=null;return b[a]={put:function(a,b){if(!w(b)){if(ll&&this.remove(p.key);return b}},get:function(a){if(l";b=la.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function N(a,b){try{a.addClass(b)}catch(c){}}function ba(a,b,c,d,e){a instanceof B||(a=B(a));for(var f=/\S+/,g=0,h=a.length;g< +h;g++){var k=a[g];k.nodeType===Na&&k.nodeValue.match(f)&&Pc(k,a[g]=E.document.createElement("span"))}var l=t(a,b,a,c,d,e);ba.$$addScopeClass(a);var n=null;return function(b,c,d){sb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude);n||(n=(d=d&&d[0])?"foreignobject"!==ua(d)&&ka.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==n?B(ca(n,B("
").append(a).html())): +c?Pa.clone.call(a):a;if(g)for(var h in g)d.data("$"+h+"Controller",g[h].instance);ba.$$addScopeInfo(d,b);c&&c(d,b);l&&l(b,d,d,f);return d}}function t(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,n,m,v,q;if(p)for(q=Array(c.length),n=0;nu.priority)break;if(x=u.scope)u.templateUrl||(H(x)?(X("new/isolated scope",s||v,u,N),s=u):X("new/isolated scope",s,u,N)),v=v||u;G=u.name;if(!Ca&&(u.replace&&(u.templateUrl||u.template)||u.transclude&&!u.$$tlb)){for(x=A+1;Ca=a[x++];)if(Ca.transclude&&!Ca.$$tlb||Ca.replace&& +(Ca.templateUrl||Ca.template)){wa=!0;break}Ca=!0}!u.templateUrl&&u.controller&&(x=u.controller,q=q||T(),X("'"+G+"' controllers",q[G],u,N),q[G]=u);if(x=u.transclude)if(D=!0,u.$$tlb||(X("transclusion",C,u,N),C=u),"element"==x)y=!0,p=u.priority,Q=N,N=d.$$element=B(ba.$$createComment(G,d[G])),b=N[0],da(f,ta.call(Q,0),b),Q[0].$$parentNode=Q[0].parentNode,P=ac(wa,Q,e,p,g&&g.name,{nonTlbTranscludeDirective:C});else{var M=T();Q=B(Xb(b)).contents();if(H(x)){Q=[];var S=T(),Da=T();r(x,function(a,b){var c="?"=== +a.charAt(0);a=c?a.substring(1):a;S[a]=b;M[b]=null;Da[b]=c});r(N.contents(),function(a){var b=S[xa(ua(a))];b?(Da[b]=!0,M[b]=M[b]||[],M[b].push(a)):Q.push(a)});r(Da,function(a,b){if(!a)throw fa("reqslot",b);});for(var Y in M)M[Y]&&(M[Y]=ac(wa,M[Y],e))}N.empty();P=ac(wa,Q,e,void 0,void 0,{needsNewScope:u.$$isolateScope||u.$$newScope});P.$$slots=M}if(u.template)if(I=!0,X("template",L,u,N),L=u,x=z(u.template)?u.template(N,d):u.template,x=ra(x),u.replace){g=u;Q=Vb.test(x)?$c(ca(u.templateNamespace,W(x))): +[];b=Q[0];if(1!=Q.length||1!==b.nodeType)throw fa("tplrt",G,"");da(f,N,b);E={$attr:{}};x=$b(b,[],E);var aa=a.splice(A+1,a.length-(A+1));(s||v)&&ad(x,s,v);a=a.concat(x).concat(aa);U(d,E);E=a.length}else N.html(x);if(u.templateUrl)I=!0,X("template",L,u,N),L=u,u.replace&&(g=u),m=$(a.splice(A,a.length-A),N,d,f,D&&P,h,k,{controllerDirectives:q,newScopeDirective:v!==u&&v,newIsolateScopeDirective:s,templateDirective:L,nonTlbTranscludeDirective:C}),E=a.length;else if(u.compile)try{t=u.compile(N,d,P);var Z= +u.$$originalDirective||u;z(t)?n(null,bb(Z,t),F,Ta):t&&n(bb(Z,t.pre),bb(Z,t.post),F,Ta)}catch(ea){c(ea,va(N))}u.terminal&&(m.terminal=!0,p=Math.max(p,u.priority))}m.scope=v&&!0===v.scope;m.transcludeOnThisElement=D;m.templateOnThisElement=I;m.transclude=P;l.hasElementTranscludeDirective=y;return m}function ib(a,b,c,d){var e;if(F(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h): +c.data(h)}if(!e&&!f)throw fa("ctreq",b,a);}else if(J(b))for(e=[],g=0,f=b.length;gm.priority)&&-1!=m.restrict.indexOf(g)){l&&(m=Rb(m,{$$start:l,$$end:n}));if(!m.$$bindings){var q=m,s=m,L=m.name,u={isolateScope:null,bindToController:null};H(s.scope)&&(!0===s.bindToController?(u.bindToController=d(s.scope,L,!0),u.isolateScope={}):u.isolateScope=d(s.scope,L,!1));H(s.bindToController)&&(u.bindToController= +d(s.bindToController,L,!0));if(H(u.bindToController)){var C=s.controller,D=s.controllerAs;if(!C)throw fa("noctrl",L);if(!Xc(C,D))throw fa("noident",L);}var N=q.$$bindings=u;H(N.isolateScope)&&(m.$$isolateBindings=N.isolateScope)}b.push(m);k=m}}catch(G){c(G)}}return k}function S(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d"+b+"";return c.childNodes[0].childNodes;default:return b}}function ea(a,b){if("srcdoc"==b)return L.HTML;var c=ua(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return L.RESOURCE_URL}function ia(a, +c,d,e,f){var g=ea(a,e);f=k[e]||f;var h=b(d,!0,g,f);if(h){if("multiple"===e&&"select"===ua(a))throw fa("selmulti",va(a));c.push({priority:100,compile:function(){return{pre:function(a,c,k){c=k.$$observers||(k.$$observers=T());if(m.test(e))throw fa("nodomevents");var l=k[e];l!==d&&(h=l&&b(l,!0,g,f),d=l);h&&(k[e]=h(a),(c[e]||(c[e]=[])).$$inter=!0,(k.$$observers&&k.$$observers[e].$$scope||a).$watch(h,function(a,b){"class"===e&&a!=b?k.$updateClass(a,b):k.$set(e,a)}))}}}})}}function da(a,b,c){var d=b[0], +e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g=b)return a;for(;b--;)8===a[b].nodeType&&bg.call(a,b,1);return a}function Xc(a,b){if(b&&F(b))return b;if(F(a)){var d=dd.exec(a);if(d)return d[3]}}function gf(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Ra(b,"controller");H(b)?R(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a, +b,c,d){if(!a||!H(a.$scope))throw O("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,n;h=!0===h;k&&F(k)&&(n=k);if(F(f)){k=f.match(dd);if(!k)throw cg("ctrlfmt",f);m=k[1];n=n||k[3];f=a.hasOwnProperty(m)?a[m]:Ec(g.$scope,m,!0)||(b?Ec(c,m,!0):void 0);Qa(f,m,!0)}if(h)return h=(J(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),n&&e(g,n,l,m||f.name),R(function(){var a=d.invoke(f,l,g,m);a!==l&&(H(a)||z(a))&&(l=a,n&&e(g,n,l,m||f.name));return l},{instance:l,identifier:n});l= +d.instantiate(f,g,m);n&&e(g,n,l,m||f.name);return l}}]}function hf(){this.$get=["$window",function(a){return B(a.document)}]}function jf(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function cc(a){return H(a)?ia(a)?a.toISOString():cb(a):a}function of(){this.$get=function(){return function(a){if(!a)return"";var b=[];tc(a,function(a,c){null===a||w(a)||(J(a)?r(a,function(a){b.push(ja(c)+"="+ja(cc(a)))}):b.push(ja(c)+"="+ja(cc(a))))});return b.join("&")}}}function pf(){this.$get= +function(){return function(a){function b(a,e,f){null===a||w(a)||(J(a)?r(a,function(a,c){b(a,e+"["+(H(a)?c:"")+"]")}):H(a)&&!ia(a)?tc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+"="+ja(cc(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function dc(a,b){if(F(a)){var d=a.replace(dg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(ed))||(c=(c=d.match(eg))&&fg[c[0]].test(d));c&&(a=xc(d))}}return a}function fd(a){var b=T(),d;F(a)?r(a.split("\n"),function(a){d= +a.indexOf(":");var e=M(W(a.substr(0,d)));a=W(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):H(a)&&r(a,function(a,d){var f=M(d),g=W(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function gd(a){var b;return function(d){b||(b=fd(a));return d?(d=b[M(d)],void 0===d&&(d=null),d):b}}function hd(a,b,d,c){if(z(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function nf(){var a=this.defaults={transformResponse:[dc],transformRequest:[function(a){return H(a)&&"[object File]"!==ka.call(a)&&"[object Blob]"!== +ka.call(a)&&"[object FormData]"!==ka.call(a)?cb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ga(ec),put:ga(ec),patch:ga(ec)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return x(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return x(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector", +function(e,f,g,h,k,l){function m(b){function c(a){var b=R({},a);b.data=hd(a.data,a.headers,a.status,f.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};r(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!H(b))throw O("$http")("badreq",b);if(!F(b.url))throw O("$http")("badreq",b.url);var f=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c= +a.headers,d=R({},b.headers),f,g,h,c=R({},c.common,c[M(b.method)]);a:for(f in c){g=M(f);for(h in d)if(M(h)===g)continue a;d[f]=c[f]}return e(d,ga(b))}(b);f.method=ub(f.method);f.paramSerializer=F(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=hd(b.data,gd(d),void 0,b.transformRequest);w(e)&&r(d,function(a,b){"content-type"===M(b)&&delete d[b]});w(b.withCredentials)&&!w(a.withCredentials)&&(b.withCredentials=a.withCredentials);return n(b,e).then(c, +c)},void 0],h=k.when(f);for(r(V,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b=g.shift();var m=g.shift(),h=h.then(b,m)}d?(h.success=function(a){Qa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Qa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=id("success"),h.error=id("error"));return h}function n(c,d){function g(a){if(a){var c= +{};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e){function f(){n(c,a,d,e)}D&&(200<=a&&300>a?D.put(Q,[a,c,fd(d),e]):D.remove(Q));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:gd(d),config:c,statusText:e})}function y(a){n(a.data,a.status,ga(a.headers()),a.statusText)}function V(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a, +1)}var L=k.defer(),C=L.promise,D,G,Aa=c.headers,Q=p(c.url,c.paramSerializer(c.params));m.pendingRequests.push(c);C.then(V,V);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(D=H(c.cache)?c.cache:H(a.cache)?a.cache:s);D&&(G=D.get(Q),x(G)?G&&z(G.then)?G.then(y,y):J(G)?n(G[1],G[0],ga(G[2]),G[3]):n(G,200,{},"OK"):D.put(Q,C));w(G)&&((G=jd(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(Aa[c.xsrfHeaderName||a.xsrfHeaderName]=G),e(c.method,Q,d,l,Aa,c.timeout,c.withCredentials, +c.responseType,g(c.eventHandlers),g(c.uploadEventHandlers)));return C}function p(a,b){0=l&&(v.resolve(q),I(u.$$intervalId),delete g[u.$$intervalId]);K||a.$apply()},k);g[u.$$intervalId]=v;return u}var g={};f.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return f}]}function fc(a){a=a.split("/");for(var b=a.length;b--;)a[b]= +qb(a[b]);return a.join("/")}function kd(a,b){var d=qa(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=aa(d.port)||hg[d.protocol]||null}function ld(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=qa(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=Ac(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function la(a,b){if(0===b.lastIndexOf(a,0))return b.substr(a.length)}function Ja(a){var b= +a.indexOf("#");return-1==b?a:a.substr(0,b)}function jb(a){return a.replace(/(#.+)|#$/,"$1")}function gc(a,b,d){this.$$html5=!0;d=d||"";kd(a,this);this.$$parse=function(a){var d=la(b,a);if(!F(d))throw Gb("ipthprfx",a,b);ld(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Tb(this.$$search),d=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)), +!0;var f,g;x(f=la(a,c))?(g=f,g=x(f=la(d,f))?b+(la("/",f)||f):a+g):x(f=la(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function hc(a,b,d){kd(a,this);this.$$parse=function(c){var e=la(a,c)||la(b,c),f;w(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",w(e)&&(a=c,this.replace())):(f=la(d,e),w(f)&&(f=e));ld(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.lastIndexOf(e,0)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b= +Tb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=function(b,d){return Ja(a)==Ja(b)?(this.$$parse(b),!0):!1}}function md(a,b,d){this.$$html5=!0;hc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Ja(c)?f=c:(g=la(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Tb(this.$$search), +e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=fc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Hb(a){return function(){return this[a]}}function nd(a,b){return function(d){if(w(d))return this[a];this[a]=b(d);this.$$compose();return this}}function sf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return x(b)?(a=b,this):a};this.html5Mode=function(a){return Ea(a)?(b.enabled=a,this):H(a)?(Ea(a.enabled)&&(b.enabled=a.enabled),Ea(a.requireBase)&& +(b.requireBase=a.requireBase),Ea(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var n=c.url(),p;if(b.enabled){if(!m&&b.requireBase)throw Gb("nobase");p=n.substring(0,n.indexOf("/", +n.indexOf("//")+2))+(m||"/");m=e.history?gc:md}else p=Ja(n),m=hc;var s=p.substr(0,Ja(p).lastIndexOf("/")+1);l=new m(p,s,"#"+a);l.$$parseLinkUrl(n,n);l.$$state=c.state();var r=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=B(a.target);"a"!==ua(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h= +qa(h.animVal).href);r.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});jb(l.absUrl())!=jb(n)&&c.url(l.absUrl(),!0);var I=!0;c.onUrlChange(function(a,b){w(la(s,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=jb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state= +e,h(c,!1,e)):(I=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=jb(c.url()),b=jb(l.absUrl()),f=c.state(),g=l.$$replace,n=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(I||n)I=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(n&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function tf(){var a=!0,b=this;this.debugEnabled=function(b){return x(b)? +(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||A;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];r(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"), +debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Ua(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw ca("isecfld",b);return a}function ig(a){return a+""}function ra(a,b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a.window===a)throw ca("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ca("isecdom",b);if(a===Object)throw ca("isecobj",b);}return a}function od(a, +b){if(a){if(a.constructor===a)throw ca("isecfn",b);if(a===jg||a===kg||a===lg)throw ca("isecff",b);}}function Ib(a,b){if(a&&(a===(0).constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw ca("isecaf",b);}function mg(a,b){return"undefined"!==typeof a?a:b}function pd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function $(a,b){var d,c;switch(a.type){case t.Program:d=!0;r(a.body,function(a){$(a.expression,b);d= +d&&a.expression.constant});a.constant=d;break;case t.Literal:a.constant=!0;a.toWatch=[];break;case t.UnaryExpression:$(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case t.BinaryExpression:$(a.left,b);$(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case t.LogicalExpression:$(a.left,b);$(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case t.ConditionalExpression:$(a.test, +b);$(a.alternate,b);$(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case t.Identifier:a.constant=!1;a.toWatch=[a];break;case t.MemberExpression:$(a.object,b);a.computed&&$(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case t.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];r(a.arguments,function(a){$(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)}); +a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case t.AssignmentExpression:$(a.left,b);$(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case t.ArrayExpression:d=!0;c=[];r(a.elements,function(a){$(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case t.ObjectExpression:d=!0;c=[];r(a.properties,function(a){$(a.value,b);d=d&&a.value.constant&&!a.computed;a.value.constant||c.push.apply(c,a.value.toWatch)}); +a.constant=d;a.toWatch=c;break;case t.ThisExpression:a.constant=!1;a.toWatch=[];break;case t.LocalsExpression:a.constant=!1,a.toWatch=[]}}function qd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function rd(a){return a.type===t.Identifier||a.type===t.MemberExpression}function sd(a){if(1===a.body.length&&rd(a.body[0].expression))return{type:t.AssignmentExpression,left:a.body[0].expression,right:{type:t.NGValueParameter},operator:"="}}function td(a){return 0=== +a.body.length||1===a.body.length&&(a.body[0].expression.type===t.Literal||a.body[0].expression.type===t.ArrayExpression||a.body[0].expression.type===t.ObjectExpression)}function ud(a,b){this.astBuilder=a;this.$filter=b}function vd(a,b){this.astBuilder=a;this.$filter=b}function Jb(a){return"constructor"==a}function ic(a){return z(a.valueOf)?a.valueOf():ng.call(a)}function uf(){var a=T(),b=T(),d={"true":!0,"false":!1,"null":null,undefined:void 0},c,e;this.addLiteral=function(a,b){d[a]=b};this.setIdentifierFns= +function(a,b){c=a;e=b;return this};this.$get=["$filter",function(f){function g(c,d,e){var g,k,C;e=e||K;switch(typeof c){case "string":C=c=c.trim();var D=e?b:a;g=D[C];if(!g){":"===c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2));g=e?q:I;var G=new jc(g);g=(new kc(G,f,g)).parse(c);g.constant?g.$$watchDelegate=p:k?g.$$watchDelegate=g.literal?n:m:g.inputs&&(g.$$watchDelegate=l);e&&(g=h(g));D[C]=g}return s(g,d);case "function":return s(c,d);default:return s(A,d)}}function h(a){function b(c,d,e,f){var g= +K;K=!0;try{return a(c,d,e,f)}finally{K=g}}if(!a)return a;b.$$watchDelegate=a.$$watchDelegate;b.assign=h(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&c=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;fa)for(b in l++,f)sa.call(e,b)||(q--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1r&&(w=4-r,x[w]||(x[w]=[]),x[w].push({msg:z(a.exp)? +"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:k}));else if(a===c){q=!1;break a}}catch(B){f(B)}if(!(p=y.$$watchersCount&&y.$$childHead||y!==this&&y.$$nextSibling))for(;y!==this&&!(p=y.$$nextSibling);)y=y.$parent}while(y=p);if((q||v.length)&&!r--)throw K.$$phase=null,d("infdig",b,x);}while(q||v.length);for(K.$$phase=null;PBa)throw ya("iequirks");var c=ga(ma);c.isEnabled=function(){return a}; +c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ya);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(ma,function(a,b){var d=M(b);c[eb("parse_as_"+d)]=function(b){return e(a,b)};c[eb("get_trusted_"+d)]=function(b){return f(a,b)};c[eb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function Af(){this.$get=["$window", +"$document",function(a,b){var d={},c=!(a.chrome&&a.chrome.app&&a.chrome.app.runtime)&&a.history&&a.history.pushState,e=aa((/android (\d+)/.exec(M((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h,k=/^(Moz|webkit|ms)(?=[A-Z])/,l=g.body&&g.body.style,m=!1,n=!1;if(l){for(var p in l)if(m=k.exec(p)){h=m[0];h=h[0].toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");m=!!("transition"in l||h+"Transition"in l);n=!!("animation"in l||h+"Animation"in +l);!e||m&&n||(m=F(l.webkitTransition),n=F(l.webkitAnimation))}return{history:!(!c||4>e||f),hasEvent:function(a){if("input"===a&&11>=Ba)return!1;if(w(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:Fa(),vendorPrefix:h,transitions:m,animations:n,android:e}}]}function Cf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$templateCache","$http","$q","$sce",function(b,d,c,e){function f(g,h){f.totalPendingRequests++;if(!F(g)||w(b.get(g)))g=e.getTrustedResourceUrl(g); +var k=d.defaults&&d.defaults.transformResponse;J(k)?k=k.filter(function(a){return a!==dc}):k===dc&&(k=null);return d.get(g,R({cache:b,transformResponse:k},a))["finally"](function(){f.totalPendingRequests--}).then(function(a){b.put(g,a.data);return a.data},function(a){if(!h)throw pg("tpload",g,a.status,a.statusText);return c.reject(a)})}f.totalPendingRequests=0;return f}]}function Df(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding"); +var g=[];r(a,function(a){var c=ea.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+xd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;hc&&(c=e),c+=+a.slice(e+1),a=a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)==mc;e++);if(e==(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)==mc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Hd&&(d=d.splice(0,Hd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function xg(a,b,d,c){var e=a.d,f=e.length-a.i;b=w(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0d-1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;fh;)k.unshift(0),h++;0=b.lgSize&&h.unshift(k.splice(-b.lgSize,k.length).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize,k.length).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);f.length&&(k+=c+f.join(""));e&&(k+="e+"+e)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+k+b.posSuf}function Kb(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length-d)f+=d;0===f&&-12==d&&(f=12);return Kb(f,b,c,e)}}function kb(a,b,d){return function(c,e){var f=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Id(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Jd(a){return function(b){var d=Id(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Kb(b,a)}}function nc(a, +b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Cd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=aa(b[9]+b[10]),g=aa(b[9]+b[11]));h.call(a,aa(b[1]),aa(b[2])-1,aa(b[3]));f=aa(b[4]||0)-f;g=aa(b[5]||0)-g;h=aa(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; +return function(c,d,f){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;F(c)&&(c=yg.test(c)?aa(c):b(c));S(c)&&(c=new Date(c));if(!ia(c)||!isFinite(c.getTime()))return c;for(;d;)(l=zg.exec(d))?(h=ab(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=yc(f,m),c=Sb(c,f,!0));r(h,function(b){k=Ag[b];g+=k?k(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function rg(){return function(a,b){w(b)&&(b=2);return cb(a,b)}}function sg(){return function(a, +b,d){b=Infinity===Math.abs(Number(b))?Number(b):aa(b);if(isNaN(b))return a;S(a)&&(a=a.toString());if(!oa(a))return a;d=!d||isNaN(d)?0:aa(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?oc(a,d,d+b):0===d?oc(a,b,a.length):oc(a,Math.max(0,d+b),d)}}function oc(a,b,d){return F(a)?a.slice(b,d):ta.call(a,b,d)}function Ed(a){function b(b){return b.map(function(b){var c=1,d=Ya;if(z(b))d=b;else if(F(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e= +d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,k=b.type;if(d===k){var k=a.value,l=b.value;"string"===d?(k=k.toLowerCase(),l=l.toLowerCase()):"object"===d&&(H(k)&&(k=a.index),H(l)&&(l=b.index));k!==l&&(c=kb||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut",m)}b.on("change",l);if(Md[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=this.validity,c=b.badInput,d=b.typeMismatch;k=f.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)? +"":c.$viewValue;b.val()!==a&&b.val(a)}}function Nb(a,b){return function(d,c){var e,f;if(ia(d))return d;if(F(d)){'"'==d.charAt(0)&&'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(Bg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){c=t};g.$observe("min",function(a){t=p(a);h.$validate()})}if(x(g.max)||g.ngMax){var q;h.$validators.max=function(a){return!n(a)||w(q)||d(a)<=q};g.$observe("max",function(a){q=p(a);h.$validate()})}}}function Nd(a,b,d,c){(c.$$hasNativeValidators=H(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function Od(a, +b,d,c,e){if(x(c)){a=a(c);if(!a.constant)throw nb("constexpr",d,c);return a(b)}return e}function qc(a,b){a="ngClass"+a;return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d(?:<\/\1>|)$/,Vb=/<|&#?\w+;/,Mf=/<([\w:-]+)/,Nf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ha={option:[1,'"],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ha.optgroup=ha.option;ha.tbody=ha.tfoot=ha.colgroup=ha.caption=ha.thead; +ha.th=ha.td;var Uf=E.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Pa=U.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===E.document.readyState?E.setTimeout(b):(this.on("DOMContentLoaded",b),U(E).on("load",b))},toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?B(this[a]):B(this[this.length+a])},length:0,push:Dg,sort:[].sort,splice:[].splice},Eb={};r("multiple selected checked disabled readOnly required open".split(" "), +function(a){Eb[M(a)]=a});var Vc={};r("input select option textarea button form details".split(" "),function(a){Vc[a]=!0});var cd={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};r({data:Yb,removeData:fb,hasData:function(a){for(var b in gb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b/,Xf=/^[^\(]*\(\s*([^\)]*)\)/m,Eg=/,/,Fg=/^\s*(_?)(\S+?)\1\s*$/,Vf=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ha=O("$injector");db.$$annotate= +function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw F(d)&&d||(d=a.name||Yf(a)),Ha("strictdi",d);b=Wc(a);r(b[1].split(Eg),function(a){a.replace(Fg,function(a,b,d){c.push(d)})})}a.$inject=c}}else J(a)?(b=a.length-1,Qa(a[b],"fn"),c=a.slice(0,b)):Qa(a,"fn",!0);return c};var Sd=O("$animate"),af=function(){this.$get=A},bf=function(){var a=new Sa,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=F(b)?b.split(" "):J(b)? +b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=Zf(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Bb(a,e);f&&Ab(a,f)});a.remove(b)}});b.length=0}return{enabled:A,on:A,off:A,pin:A,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.put(g, +k),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},Ze=["$provide",function(a){var b=this;this.$$registeredAnimations=Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Sd("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Sd("nongcls", +"ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h <= >= && || ! = |".split(" "),function(a){Ob[a]=!0});var Jg={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},jc=function(a){this.options=a};jc.prototype={constructor:jc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">= +a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d= +a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=x(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ca("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index","<=",">=");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*", +"/","%");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:t.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=Z(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)? +a={type:t.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:t.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:t.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:t.MemberExpression,object:a, +property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:t.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:t.Identifier,name:a.text}}, +constant:function(){return{type:t.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:t.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:t.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()): +this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:t.ObjectExpression,properties:a}},throwError:function(a,b){throw ca("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index)); +},consume:function(a){if(0===this.tokens.length)throw ca("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ca("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a= +this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:t.ThisExpression},$locals:{type:t.LocalsExpression}}};ud.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};$(c,d.$filter);var e="",f;this.stage="assign";if(f=sd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign", +"s,v,l");f=qd(c.body);d.stage="inputs";r(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue", +"ensureSafeAssignContext","ifDefined","plus","text",e))(this.$filter,Ua,ra,od,ig,Ib,mg,pd,a);this.state=this.stage=void 0;e.literal=td(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a= +[],b=this;r(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,e,f){var g,h,k=this,l,m,n;c=c||A;if(!f&&x(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case t.Program:r(a.body, +function(b,c){k.recurse(b.expression,void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case t.Literal:m=this.escape(a.value);this.assign(b,m);c(m);break;case t.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});m=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,m);c(m);break;case t.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});m="+"===a.operator? +this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case t.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case t.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case t.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(), +this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ua(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Jb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case t.MemberExpression:g= +d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){e&&1!==e&&k.addEnsureSafeAssignContext(g);if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.ensureSafeObject(k.computedMember(g,h)),k.assign(b,m),d&&(d.computed=!0,d.name=h);else{Ua(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g, +a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));m=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Jb(a.property.name))m=k.ensureSafeObject(m);k.assign(b,m);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case t.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h= +k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);r(a.arguments,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),m=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):m=h+"("+l.join(",")+")";m=k.ensureSafeObject(m);k.assign(b,m)},function(){k.assign(b,"undefined")});c(b)}));break;case t.AssignmentExpression:h=this.nextId();g= +{};if(!rd(a.left))throw ca("lval");this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);m=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;case t.ArrayExpression:l=[];r(a.elements,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(m);break;case t.ObjectExpression:l= +[];n=!1;r(a.properties,function(a){a.computed&&(n=!0)});n?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=k.nextId(),k.recurse(a.key,g)):g=a.key.type===t.Identifier?a.key.name:""+a.key.value;h=k.nextId();k.recurse(a.value,h);k.assign(k.member(b,g,a.computed),h)})):(r(a.properties,function(b){k.recurse(b.value,a.constant?void 0:k.nextId(),void 0,function(a){l.push(k.escape(b.key.type===t.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b, +m));c(b||m);break;case t.ThisExpression:this.assign(b,"s");c("s");break;case t.LocalsExpression:this.assign(b,"l");c("l");break;case t.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0)); +return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/[$_a-zA-Z][$_a-zA-Z0-9]*/.test(b)? +a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a), +";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a, +b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(F(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(S(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw ca("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}}; +vd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;$(c,d.$filter);var e,f;if(e=sd(c))f=this.recurse(e);e=qd(c.body);var g;e&&(g=[],r(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];r(c.body,function(a){h.push(d.recurse(a.expression))});e=0===c.body.length?A:1===c.body.length?h[0]:function(a,b){var c;r(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal= +td(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case t.Literal:return this.value(a.value,b);case t.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case t.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case t.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case t.ConditionalExpression:return this["ternary?:"](this.recurse(a.test), +this.recurse(a.alternate),this.recurse(a.consequent),b);case t.Identifier:return Ua(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Jb(a.name),b,d,f.expression);case t.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Ua(a.property.name,f.expression),e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case t.CallExpression:return g=[],r(a.arguments, +function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var n=[],p=0;p":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a, +b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a, +b,d,c,e){return function(f,g,h,k){f=g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:void 0;b&&ra(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var l=a(f,g,h,k),m,n;null!=l&&(m=b(f,g,h,k),m+="",Ua(m,e),c&&1!==c&&(Ib(l),l&&!l[m]&&(l[m]={})),n=l[m],ra(n,e));return d?{context:l,name:m,value:n}:n}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,l){g=a(g,h,k,l);e&&1!==e&&(Ib(g),g&&!g[b]&&(g[b]={}));h=null!=g?g[b]:void 0;(d|| +Jb(b))&&ra(h,f);return c?{context:g,name:b,value:h}:h}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var kc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new t(a,d);this.astCompiler=d.csp?new vd(this.ast,b):new ud(this.ast,b)};kc.prototype={constructor:kc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var ng=Object.prototype.valueOf,ya=O("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"}, +pg=O("$compile"),Y=E.document.createElement("a"),zd=qa(E.location.href);Ad.$inject=["$document"];Mc.$inject=["$provide"];var Hd=22,Gd=".",mc="0";Bd.$inject=["$locale"];Dd.$inject=["$locale"];var Ag={yyyy:X("FullYear",4,0,!1,!0),yy:X("FullYear",2,0,!0,!0),y:X("FullYear",1,0,!1,!0),MMMM:kb("Month"),MMM:kb("Month",!0),MM:X("Month",2,1),M:X("Month",1,1),LLLL:kb("Month",!1,!0),dd:X("Date",2),d:X("Date",1),HH:X("Hours",2),H:X("Hours",1),hh:X("Hours",2,-12),h:X("Hours",1,-12),mm:X("Minutes",2),m:X("Minutes", +1),ss:X("Seconds",2),s:X("Seconds",1),sss:X("Milliseconds",3),EEEE:kb("Day"),EEE:kb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Kb(Math[0=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},zg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,yg=/^\-?\d+$/;Cd.$inject=["$locale"]; +var tg=da(M),ug=da(ub);Ed.$inject=["$parse"];var pe=da({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===ka.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),vb={};r(Eb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=xa("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b, +e)});vb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(cd,function(a,b){vb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(Cg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=xa("ng-"+a);vb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===ka.call(c.prop("href"))&& +(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ba&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var Lb={$addControl:A,$$renameControl:function(a,b){a.$name=b},$removeControl:A,$setValidity:A,$setDirty:A,$setPristine:A,$setSubmitted:A};Kd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Td=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||A}return{name:"form",restrict:a? +"EAC":"E",require:["form","^^?form"],controller:Kd,compile:function(d,f){d.addClass(Va).addClass(ob);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var p=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",p,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",p,!1)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var s=g?c(n.$name):A;g&&(s(a,n),e.$observe(g, +function(b){n.$name!==b&&(s(a,void 0),n.$$parentForm.$$renameControl(n,b),s=c(n.$name),s(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n);s(a,void 0);R(n,Lb)})}}}}}]},qe=Td(),De=Td(!0),Bg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,Kg=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+\])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,Lg=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/, +Mg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Ud=/^(\d{4,})-(\d{2})-(\d{2})$/,Vd=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,rc=/^(\d{4,})-W(\d\d)$/,Wd=/^(\d{4,})-(\d\d)$/,Xd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Md=T();r(["date","datetime-local","month","time","week"],function(a){Md[a]=!0});var Yd={text:function(a,b,d,c,e,f){lb(a,b,d,c,e,f);pc(c)},date:mb("date",Ud,Nb(Ud,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":mb("datetimelocal",Vd,Nb(Vd,"yyyy MM dd HH mm ss sss".split(" ")), +"yyyy-MM-ddTHH:mm:ss.sss"),time:mb("time",Xd,Nb(Xd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:mb("week",rc,function(a,b){if(ia(a))return a;if(F(a)){rc.lastIndex=0;var d=rc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Id(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:mb("month",Wd,Nb(Wd,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Nd(a,b,d,c);lb(a,b,d,c,e,f);c.$$parserName= +"number";c.$parsers.push(function(a){if(c.$isEmpty(a))return null;if(Mg.test(a))return parseFloat(a)});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!S(a))throw nb("numfmt",a);a=a.toString()}return a});if(x(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)||w(g)||a>=g};d.$observe("min",function(a){x(a)&&!S(a)&&(a=parseFloat(a,10));g=S(a)&&!isNaN(a)?a:void 0;c.$validate()})}if(x(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||w(h)||a<=h};d.$observe("max", +function(a){x(a)&&!S(a)&&(a=parseFloat(a,10));h=S(a)&&!isNaN(a)?a:void 0;c.$validate()})}},url:function(a,b,d,c,e,f){lb(a,b,d,c,e,f);pc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||Kg.test(d)}},email:function(a,b,d,c,e,f){lb(a,b,d,c,e,f);pc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||Lg.test(d)}},radio:function(a,b,d,c){w(d.name)&&b.attr("name",++pb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value, +a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Od(h,a,"ngTrueValue",d.ngTrueValue,!0),l=Od(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return na(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:A,button:A,submit:A,reset:A, +file:A},Gc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Yd[M(g.type)]||Yd.text)(e,f,g,h[0],b,a,d,c)}}}}],Ng=/^(true|false|\d+)$/,Ve=function(){return{restrict:"A",priority:100,compile:function(a,b){return Ng.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},ve=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b); +return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=w(a)?"":a})}}}}],xe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=w(a)?"":a})}}}}],we=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g= +b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],Ue=da({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),ye=qc("",!0),Ae=qc("Odd",0),ze=qc("Even",1),Be=Ma({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ce=[function(){return{restrict:"A",scope:!0,controller:"@", +priority:500}}],Lc={},Og={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=xa("ng-"+a);Lc[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g=d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};Og[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Fe=["$animate","$compile",function(a, +b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var h,k,l;d.$watch(e.ngIf,function(d){d?k||g(function(d,f){k=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=tb(h.clone),a.leave(l).then(function(){l=null}),h=null))})}}}],Ge=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0, +transclude:"element",controller:ea.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,m,n,p){var s=0,r,t,q,w=function(){t&&(t.remove(),t=null);r&&(r.$destroy(),r=null);q&&(d.leave(q).then(function(){t=null}),t=q,q=null)};c.$watch(f,function(f){var m=function(){!x(h)||h&&!c.$eval(h)||b()},t=++s;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&t===s){var b=c.$new();n.template=a;a=p(b,function(a){w();d.enter(a,null,e).then(m)});r=b;q=a;r.$emit("$includeContentLoaded", +f);c.$eval(g)}},function(){c.$$destroyed||t!==s||(w(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(w(),n.template=null)})}}}}],Xe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){ka.call(d[0]).match(/SVG/)?(d.empty(),a(Oc(e.template,E.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],He=Ma({priority:450,compile:function(){return{pre:function(a, +b,d){a.$eval(d.ngInit)}}}}),Te=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?W(e):e;c.$parsers.push(function(a){if(!w(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?W(a):a)});return b}});c.$formatters.push(function(a){if(J(a))return a.join(e)});c.$isEmpty=function(a){return!a||!a.length}}}},ob="ng-valid",Pd="ng-invalid",Va="ng-pristine",Mb="ng-dirty",Rd="ng-pending",nb=O("ngModel"),Pg=["$scope", +"$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=l(d.name||"",!1)(a); +this.$$parentForm=Lb;var m=e(d.ngModel),n=m.assign,p=m,s=n,t=null,I,q=this;this.$$setOptions=function(a){if((q.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");p=function(a){var c=m(a);z(c)&&(c=b(a));return c};s=function(a,b){z(m(a))?f(a,{$$$p:b}):n(a,b)}}else if(!m.assign)throw nb("nonassign",d.ngModel,va(c));};this.$render=A;this.$isEmpty=function(a){return w(a)||""===a||null===a||a!==a};this.$$updateEmptyClasses=function(a){q.$isEmpty(a)?(f.removeClass(c,"ng-not-empty"), +f.addClass(c,"ng-empty")):(f.removeClass(c,"ng-empty"),f.addClass(c,"ng-not-empty"))};var K=0;Ld({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){q.$dirty=!1;q.$pristine=!0;f.removeClass(c,Mb);f.addClass(c,Va)};this.$setDirty=function(){q.$dirty=!0;q.$pristine=!1;f.removeClass(c,Va);f.addClass(c,Mb);q.$$parentForm.$setDirty()};this.$setUntouched=function(){q.$touched=!1;q.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")}; +this.$setTouched=function(){q.$touched=!0;q.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(t);q.$viewValue=q.$$lastCommittedViewValue;q.$render()};this.$validate=function(){if(!S(q.$modelValue)||!isNaN(q.$modelValue)){var a=q.$$rawModelValue,b=q.$valid,c=q.$modelValue,d=q.$options&&q.$options.allowInvalid;q.$$runValidators(a,q.$$lastCommittedViewValue,function(e){d||b===e||(q.$modelValue=e?a:void 0,q.$modelValue!==c&&q.$$writeModelToScope())})}}; +this.$$runValidators=function(a,b,c){function d(){var c=!0;r(q.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(r(q.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(q.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!z(h.then))throw nb("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},A):g(!0)}function f(a,b){h===K&&q.$setValidity(a,b)}function g(a){h===K&&c(a)}K++;var h= +K;(function(){var a=q.$$parserName||"parse";if(w(I))f(a,null);else return I||(r(q.$validators,function(a,b){f(b,null)}),r(q.$asyncValidators,function(a,b){f(b,null)})),f(a,I),I;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=q.$viewValue;g.cancel(t);if(q.$$lastCommittedViewValue!==a||""===a&&q.$$hasNativeValidators)q.$$updateEmptyClasses(a),q.$$lastCommittedViewValue=a,q.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=q.$$lastCommittedViewValue; +if(I=w(b)?void 0:!0)for(var c=0;ce||c.$isEmpty(b)||b.length<=e}}}}},Jc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=aa(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};E.angular.bootstrap?E.console&&console.log("WARNING: Tried to load angular more than once."):(ke(),me(ea),ea.module("ngLocale",[],["$provide",function(a){function b(a){a+= +"";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "), +WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a, +c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),B(E.document).ready(function(){ge(E.document,Bc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend(''); +//# sourceMappingURL=angular.min.js.map diff --git a/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular.min.js.map b/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular.min.js.map new file mode 100644 index 000000000000..6d34cd22b3b1 --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/vendor/angular/angular.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular.min.js", +"lineCount":315, +"mappings":"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", +"sources":["angular.js"], +"names":["window","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","isNumber","Array","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","isDefined","getPrototypeOf","isScope","$evalAsync","$watch","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","setMinutes","getMinutes","minutes","startingTag","empty","e","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","publishExternalAPI","version","uppercase","counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","jqLiteWrapNode","wrapper","parentNode","replaceChild","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","msie","Type","ctor","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","cachedState","getCurrentState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","state","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","TTL","onChangesTtl","this.onChangesTtl","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","domNode","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","attrs","linkFnFound","collectDirectives","applyDirectivesToNode","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","isNgAttr","nAttrs","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","identifier","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","$$parentNode","replaceDirective","slots","contents","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","Math","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","hasData","annotation","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","removeWatch","$watchCollection","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","str1","str2","values","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","globals","this.has","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","$httpMinErrLegacyFn","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","resolveHttpPromise","resolvePromise","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","uploadEventHandlers","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","upload","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","mustHaveExpression","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","stripBaseUrl","base","lastIndexOf","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","expensiveChecks","parsedExpression","oneTime","cacheKey","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","parser","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","inputExpressions","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatch","oneTimeListener","old","isAllDefined","allDefined","constantWatch","watchDelegate","useInputs","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$runningExpensiveChecks","$parse.$$runningExpensiveChecks","qFactory","nextTick","exceptionHandler","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","that","rejectPromise","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","resolver","resolveFn","all","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueuePosition","asyncQueue","$eval","msg","next","postDigestQueuePosition","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","hasHistoryPushState","chrome","app","runtime","pushState","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","map","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","VALIDITY_STATE_PROPERTY","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","full","major","minor","dot","codeName","expando","JQLite._data","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","trigger","fired","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","doc","hidden","_state","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","sceValueOf","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","$$updateEmptyClasses","this.$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","updateOptionElement","updateOptions","selectCtrl","readValue","groupElementMap","providedEmptyOption","emptyOption","addOption","groupElement","listFragment","optionElement","ngModelCtrl","nextValue","unknownOption","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngTranscludeMinErr","ngTranscludeCloneAttachFn","ngTranscludeSlot","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","self.addOption","removeOption","self.removeOption","self.hasOption","self.registerOption","optionScope","optionAttrs","interpolateValueFn","interpolateTextFn","valueAttributeObserveAction","interpolateWatchAction","selectPreLink","lastView","lastViewRef","selectMultipleWatch","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","pow","ONE","OTHER","$$csp","head"] +} diff --git a/spring-security-mvc-socket/src/main/webapp/resources/vendor/jquery/jquery.min.js b/spring-security-mvc-socket/src/main/webapp/resources/vendor/jquery/jquery.min.js new file mode 100644 index 000000000000..88ed04cce79e --- /dev/null +++ b/spring-security-mvc-socket/src/main/webapp/resources/vendor/jquery/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v3.0.0 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.0.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return a&&"[object Object]"===k.call(a)?(b=e(a))?(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n):!0:!1},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;d>f;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a)?(d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e):void 0},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"===c||r.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\x00-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\x00"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[0>c?c+b:c]}),even:pa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,e>i&&ya(a.slice(i,e)),f>e&&ya(a=a.slice(e)),f>e&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;d>b;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;d>b;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(f>b)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(1>=b&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){ + return j.call(r(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthf;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;g>f;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;d>c;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;o>n;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;cc;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;m>l;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;i>l;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;e>d;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;e>d;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),0>=d||null==d){if(d=Ma(a,b,f),(0>d||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){return c?!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)}):void 0},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){return b?(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px":void 0}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;e>g;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);g>f;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;e>d;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c); +}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){return r.isArray(b)?a.checked=r.inArray(r(a).val(),b)>-1:void 0}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?r.event.trigger(a,b,c,!0):void 0}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&300>b||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",0>b&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;return o.cors||Pb&&!b.crossDomain?{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}:void 0}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("