commit
						12f0cbb696
					
				
							
								
								
									
										44
									
								
								algorithms/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								algorithms/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
						xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
						<groupId>com.baeldung</groupId>
 | 
				
			||||||
 | 
						<artifactId>algorithms</artifactId>
 | 
				
			||||||
 | 
						<version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<properties>
 | 
				
			||||||
 | 
							<junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
							<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
 | 
							<exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
 | 
				
			||||||
 | 
						</properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<dependencies>
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>junit</groupId>
 | 
				
			||||||
 | 
								<artifactId>junit</artifactId>
 | 
				
			||||||
 | 
								<version>${junit.version}</version>
 | 
				
			||||||
 | 
								<scope>test</scope>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
 | 
						</dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<build>
 | 
				
			||||||
 | 
							<defaultGoal>install</defaultGoal>
 | 
				
			||||||
 | 
							<pluginManagement>
 | 
				
			||||||
 | 
								<plugins>
 | 
				
			||||||
 | 
									<plugin>
 | 
				
			||||||
 | 
										<groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
 | 
										<artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
 | 
										<version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
 | 
										<configuration>
 | 
				
			||||||
 | 
											<source>1.8</source>
 | 
				
			||||||
 | 
											<target>1.8</target>
 | 
				
			||||||
 | 
										</configuration>
 | 
				
			||||||
 | 
									</plugin>
 | 
				
			||||||
 | 
									<plugin>
 | 
				
			||||||
 | 
										<groupId>org.codehaus.mojo</groupId>
 | 
				
			||||||
 | 
										<artifactId>exec-maven-plugin</artifactId>
 | 
				
			||||||
 | 
										<version>${exec-maven-plugin.version}</version>
 | 
				
			||||||
 | 
									</plugin>
 | 
				
			||||||
 | 
								</plugins>
 | 
				
			||||||
 | 
							</pluginManagement>
 | 
				
			||||||
 | 
						</build>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.dijkstra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					import java.util.LinkedList;
 | 
				
			||||||
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Dijkstra {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static Graph calculateShortestPathFromSource(Graph graph, Node source) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        source.setDistance(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<Node> settledNodes = new HashSet<>();
 | 
				
			||||||
 | 
					        Set<Node> unsettledNodes = new HashSet<>();
 | 
				
			||||||
 | 
					        unsettledNodes.add(source);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while (unsettledNodes.size() != 0) {
 | 
				
			||||||
 | 
					            Node currentNode = getLowestDistanceNode(unsettledNodes);
 | 
				
			||||||
 | 
					            unsettledNodes.remove(currentNode);
 | 
				
			||||||
 | 
					            for (Entry<Node, Integer> adjacencyPair : currentNode
 | 
				
			||||||
 | 
					              .getAdjacentNodes()
 | 
				
			||||||
 | 
					              .entrySet()) {
 | 
				
			||||||
 | 
					                Node adjacentNode = adjacencyPair.getKey();
 | 
				
			||||||
 | 
					                Integer edgeWeigh = adjacencyPair.getValue();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!settledNodes.contains(adjacentNode)) {
 | 
				
			||||||
 | 
					                    CalculateMinimumDistance(adjacentNode, edgeWeigh, currentNode);
 | 
				
			||||||
 | 
					                    unsettledNodes.add(adjacentNode);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            settledNodes.add(currentNode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return graph;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static void CalculateMinimumDistance(Node evaluationNode, Integer edgeWeigh, Node sourceNode) {
 | 
				
			||||||
 | 
					        Integer sourceDistance = sourceNode.getDistance();
 | 
				
			||||||
 | 
					        if (sourceDistance + edgeWeigh < evaluationNode.getDistance()) {
 | 
				
			||||||
 | 
					            evaluationNode.setDistance(sourceDistance + edgeWeigh);
 | 
				
			||||||
 | 
					            LinkedList<Node> shortestPath = new LinkedList<>(sourceNode.getShortestPath());
 | 
				
			||||||
 | 
					            shortestPath.add(sourceNode);
 | 
				
			||||||
 | 
					            evaluationNode.setShortestPath(shortestPath);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static Node getLowestDistanceNode(Set<Node> unsettledNodes) {
 | 
				
			||||||
 | 
					        Node lowestDistanceNode = null;
 | 
				
			||||||
 | 
					        int lowestDistance = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					        for (Node node : unsettledNodes) {
 | 
				
			||||||
 | 
					            int nodeDistance = node.getDistance();
 | 
				
			||||||
 | 
					            if (nodeDistance < lowestDistance) {
 | 
				
			||||||
 | 
					                lowestDistance = nodeDistance;
 | 
				
			||||||
 | 
					                lowestDistanceNode = node;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return lowestDistanceNode;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.dijkstra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Graph {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Set<Node> nodes = new HashSet<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void addNode(Node nodeA) {
 | 
				
			||||||
 | 
					        nodes.add(nodeA);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Set<Node> getNodes() {
 | 
				
			||||||
 | 
					        return nodes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setNodes(Set<Node> nodes) {
 | 
				
			||||||
 | 
					        this.nodes = nodes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.dijkstra;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.LinkedList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Node {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private LinkedList<Node> shortestPath = new LinkedList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Integer distance = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private Map<Node, Integer> adjacentNodes = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Node(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void addDestination(Node destination, int distance) {
 | 
				
			||||||
 | 
					        adjacentNodes.put(destination, distance);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getName() {
 | 
				
			||||||
 | 
					        return name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Map<Node, Integer> getAdjacentNodes() {
 | 
				
			||||||
 | 
					        return adjacentNodes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setAdjacentNodes(Map<Node, Integer> adjacentNodes) {
 | 
				
			||||||
 | 
					        this.adjacentNodes = adjacentNodes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Integer getDistance() {
 | 
				
			||||||
 | 
					        return distance;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setDistance(Integer distance) {
 | 
				
			||||||
 | 
					        this.distance = distance;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public List<Node> getShortestPath() {
 | 
				
			||||||
 | 
					        return shortestPath;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setShortestPath(LinkedList<Node> shortestPath) {
 | 
				
			||||||
 | 
					        this.shortestPath = shortestPath;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					package algorithms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.dijkstra.Dijkstra;
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.dijkstra.Graph;
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.dijkstra.Node;
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertTrue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class DijkstraAlgorithmTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenSPPSolved_thenCorrect() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Node nodeA = new Node("A");
 | 
				
			||||||
 | 
					        Node nodeB = new Node("B");
 | 
				
			||||||
 | 
					        Node nodeC = new Node("C");
 | 
				
			||||||
 | 
					        Node nodeD = new Node("D");
 | 
				
			||||||
 | 
					        Node nodeE = new Node("E");
 | 
				
			||||||
 | 
					        Node nodeF = new Node("F");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nodeA.addDestination(nodeB, 10);
 | 
				
			||||||
 | 
					        nodeA.addDestination(nodeC, 15);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nodeB.addDestination(nodeD, 12);
 | 
				
			||||||
 | 
					        nodeB.addDestination(nodeF, 15);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nodeC.addDestination(nodeE, 10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nodeD.addDestination(nodeE, 2);
 | 
				
			||||||
 | 
					        nodeD.addDestination(nodeF, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        nodeF.addDestination(nodeE, 5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Graph graph = new Graph();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        graph.addNode(nodeA);
 | 
				
			||||||
 | 
					        graph.addNode(nodeB);
 | 
				
			||||||
 | 
					        graph.addNode(nodeC);
 | 
				
			||||||
 | 
					        graph.addNode(nodeD);
 | 
				
			||||||
 | 
					        graph.addNode(nodeE);
 | 
				
			||||||
 | 
					        graph.addNode(nodeF);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        graph = Dijkstra.calculateShortestPathFromSource(graph, nodeA);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        List<Node> shortestPathForNodeB = Arrays.asList(nodeA);
 | 
				
			||||||
 | 
					        List<Node> shortestPathForNodeC = Arrays.asList(nodeA);
 | 
				
			||||||
 | 
					        List<Node> shortestPathForNodeD = Arrays.asList(nodeA, nodeB);
 | 
				
			||||||
 | 
					        List<Node> shortestPathForNodeE = Arrays.asList(nodeA, nodeB, nodeD);
 | 
				
			||||||
 | 
					        List<Node> shortestPathForNodeF = Arrays.asList(nodeA, nodeB, nodeD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (Node node : graph.getNodes()) {
 | 
				
			||||||
 | 
					            switch (node.getName()) {
 | 
				
			||||||
 | 
					            case "B":
 | 
				
			||||||
 | 
					                assertTrue(node
 | 
				
			||||||
 | 
					                  .getShortestPath()
 | 
				
			||||||
 | 
					                  .equals(shortestPathForNodeB));
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "C":
 | 
				
			||||||
 | 
					                assertTrue(node
 | 
				
			||||||
 | 
					                  .getShortestPath()
 | 
				
			||||||
 | 
					                  .equals(shortestPathForNodeC));
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "D":
 | 
				
			||||||
 | 
					                assertTrue(node
 | 
				
			||||||
 | 
					                  .getShortestPath()
 | 
				
			||||||
 | 
					                  .equals(shortestPathForNodeD));
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "E":
 | 
				
			||||||
 | 
					                assertTrue(node
 | 
				
			||||||
 | 
					                  .getShortestPath()
 | 
				
			||||||
 | 
					                  .equals(shortestPathForNodeE));
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "F":
 | 
				
			||||||
 | 
					                assertTrue(node
 | 
				
			||||||
 | 
					                  .getShortestPath()
 | 
				
			||||||
 | 
					                  .equals(shortestPathForNodeF));
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -15,7 +15,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <auto-service.version>1.0-rc2</auto-service.version>
 | 
					        <auto-service.version>1.0-rc2</auto-service.version>
 | 
				
			||||||
        <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <artifactId>annotation-user</artifactId>
 | 
					    <artifactId>annotation-user</artifactId>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <properties>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>        
 | 
				
			||||||
 | 
					    </properties>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
@ -24,7 +29,7 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
            <version>4.12</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -37,7 +42,7 @@
 | 
				
			|||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                <artifactId>maven-compiler-plugin</artifactId>
 | 
					                <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
                <version>3.5.1</version>
 | 
					                <version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <source>1.8</source>
 | 
					                    <source>1.8</source>
 | 
				
			||||||
                    <target>1.8</target>
 | 
					                    <target>1.8</target>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								apache-cxf/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apache-cxf/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					## Relevant Articles:
 | 
				
			||||||
 | 
					- [Introduction to Apache CXF Aegis Data Binding](http://www.baeldung.com/aegis-data-binding-in-apache-cxf)
 | 
				
			||||||
							
								
								
									
										20
									
								
								apache-cxf/cxf-aegis/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								apache-cxf/cxf-aegis/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
					    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
				
			||||||
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
					    <artifactId>cxf-aegis</artifactId>
 | 
				
			||||||
 | 
					    <parent>
 | 
				
			||||||
 | 
					        <groupId>com.baeldung</groupId>
 | 
				
			||||||
 | 
					        <artifactId>apache-cxf</artifactId>
 | 
				
			||||||
 | 
					        <version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					    </parent>
 | 
				
			||||||
 | 
					    <properties>
 | 
				
			||||||
 | 
					        <cxf.version>3.1.8</cxf.version>        
 | 
				
			||||||
 | 
					    </properties>
 | 
				
			||||||
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.apache.cxf</groupId>
 | 
				
			||||||
 | 
					            <artifactId>cxf-rt-databinding-aegis</artifactId>
 | 
				
			||||||
 | 
					            <version>${cxf.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					package com.baeldung.cxf.aegis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Course {
 | 
				
			||||||
 | 
					    private int id;
 | 
				
			||||||
 | 
					    private String name;
 | 
				
			||||||
 | 
					    private String instructor;
 | 
				
			||||||
 | 
					    private Date enrolmentDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setId(int id) {
 | 
				
			||||||
 | 
					        this.id = id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getName() {
 | 
				
			||||||
 | 
					        return name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getInstructor() {
 | 
				
			||||||
 | 
					        return instructor;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setInstructor(String instructor) {
 | 
				
			||||||
 | 
					        this.instructor = instructor;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Date getEnrolmentDate() {
 | 
				
			||||||
 | 
					        return enrolmentDate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setEnrolmentDate(Date enrolmentDate) {
 | 
				
			||||||
 | 
					        this.enrolmentDate = enrolmentDate;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					package com.baeldung.cxf.aegis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface CourseRepo {
 | 
				
			||||||
 | 
					    String getGreeting();
 | 
				
			||||||
 | 
					    void setGreeting(String greeting);
 | 
				
			||||||
 | 
					    Map<Integer, Course> getCourses();
 | 
				
			||||||
 | 
					    void setCourses(Map<Integer, Course> courses);
 | 
				
			||||||
 | 
					    void addCourse(Course course);  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					package com.baeldung.cxf.aegis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class CourseRepoImpl implements CourseRepo {
 | 
				
			||||||
 | 
					    private String greeting;
 | 
				
			||||||
 | 
					    private Map<Integer, Course> courses = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public String getGreeting() {
 | 
				
			||||||
 | 
					        return greeting;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setGreeting(String greeting) {
 | 
				
			||||||
 | 
					        this.greeting = greeting;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Map<Integer, Course> getCourses() {
 | 
				
			||||||
 | 
					        return courses;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setCourses(Map<Integer, Course> courses) {
 | 
				
			||||||
 | 
					        this.courses = courses;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void addCourse(Course course) {
 | 
				
			||||||
 | 
					        courses.put(course.getId(), course);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					<mappings>
 | 
				
			||||||
 | 
					    <mapping>
 | 
				
			||||||
 | 
					        <property name="instructor" ignore="true"/>
 | 
				
			||||||
 | 
					    </mapping>
 | 
				
			||||||
 | 
					</mappings>
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					<mappings xmlns:ns="http://courserepo.baeldung.com">
 | 
				
			||||||
 | 
					    <mapping name="ns:Baeldung">
 | 
				
			||||||
 | 
					        <property name="greeting" style="attribute"/>
 | 
				
			||||||
 | 
					    </mapping>
 | 
				
			||||||
 | 
					</mappings>
 | 
				
			||||||
@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					package com.baeldung.cxf.aegis;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertEquals;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.FileInputStream;
 | 
				
			||||||
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
 | 
					import java.lang.reflect.Type;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					import javax.xml.namespace.QName;
 | 
				
			||||||
 | 
					import javax.xml.stream.XMLInputFactory;
 | 
				
			||||||
 | 
					import javax.xml.stream.XMLOutputFactory;
 | 
				
			||||||
 | 
					import javax.xml.stream.XMLStreamReader;
 | 
				
			||||||
 | 
					import javax.xml.stream.XMLStreamWriter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.cxf.aegis.AegisContext;
 | 
				
			||||||
 | 
					import org.apache.cxf.aegis.AegisReader;
 | 
				
			||||||
 | 
					import org.apache.cxf.aegis.AegisWriter;
 | 
				
			||||||
 | 
					import org.apache.cxf.aegis.type.AegisType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class BaeldungTest {
 | 
				
			||||||
 | 
					    private AegisContext context;
 | 
				
			||||||
 | 
					    private String fileName = "baeldung.xml";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenMarshalingAndUnmarshalingCourseRepo_thenCorrect() throws Exception {
 | 
				
			||||||
 | 
					        initializeContext();
 | 
				
			||||||
 | 
					        CourseRepo inputRepo = initCourseRepo();
 | 
				
			||||||
 | 
					        marshalCourseRepo(inputRepo);
 | 
				
			||||||
 | 
					        CourseRepo outputRepo = unmarshalCourseRepo();
 | 
				
			||||||
 | 
					        Course restCourse = outputRepo.getCourses().get(1);
 | 
				
			||||||
 | 
					        Course securityCourse = outputRepo.getCourses().get(2);
 | 
				
			||||||
 | 
					        assertEquals("Welcome to Beldung!", outputRepo.getGreeting());
 | 
				
			||||||
 | 
					        assertEquals("REST with Spring", restCourse.getName());
 | 
				
			||||||
 | 
					        assertEquals(new Date(1234567890000L), restCourse.getEnrolmentDate());
 | 
				
			||||||
 | 
					        assertNull(restCourse.getInstructor());
 | 
				
			||||||
 | 
					        assertEquals("Learn Spring Security", securityCourse.getName());
 | 
				
			||||||
 | 
					        assertEquals(new Date(1456789000000L), securityCourse.getEnrolmentDate());
 | 
				
			||||||
 | 
					        assertNull(securityCourse.getInstructor());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private void initializeContext() {
 | 
				
			||||||
 | 
					        context = new AegisContext();
 | 
				
			||||||
 | 
					        Set<Type> rootClasses = new HashSet<Type>();
 | 
				
			||||||
 | 
					        rootClasses.add(CourseRepo.class);
 | 
				
			||||||
 | 
					        context.setRootClasses(rootClasses);
 | 
				
			||||||
 | 
					        Map<Class<?>, String> beanImplementationMap = new HashMap<>();
 | 
				
			||||||
 | 
					        beanImplementationMap.put(CourseRepoImpl.class, "CourseRepo");
 | 
				
			||||||
 | 
					        context.setBeanImplementationMap(beanImplementationMap);
 | 
				
			||||||
 | 
					        context.setWriteXsiTypes(true);
 | 
				
			||||||
 | 
					        context.initialize();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private CourseRepoImpl initCourseRepo() {
 | 
				
			||||||
 | 
					        Course restCourse = new Course();
 | 
				
			||||||
 | 
					        restCourse.setId(1);
 | 
				
			||||||
 | 
					        restCourse.setName("REST with Spring");
 | 
				
			||||||
 | 
					        restCourse.setInstructor("Eugen");
 | 
				
			||||||
 | 
					        restCourse.setEnrolmentDate(new Date(1234567890000L));
 | 
				
			||||||
 | 
					        Course securityCourse = new Course();
 | 
				
			||||||
 | 
					        securityCourse.setId(2);
 | 
				
			||||||
 | 
					        securityCourse.setName("Learn Spring Security");
 | 
				
			||||||
 | 
					        securityCourse.setInstructor("Eugen");
 | 
				
			||||||
 | 
					        securityCourse.setEnrolmentDate(new Date(1456789000000L));
 | 
				
			||||||
 | 
					        CourseRepoImpl courseRepo = new CourseRepoImpl();
 | 
				
			||||||
 | 
					        courseRepo.setGreeting("Welcome to Beldung!");
 | 
				
			||||||
 | 
					        courseRepo.addCourse(restCourse);
 | 
				
			||||||
 | 
					        courseRepo.addCourse(securityCourse);
 | 
				
			||||||
 | 
					        return courseRepo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private void marshalCourseRepo(CourseRepo courseRepo) throws Exception {
 | 
				
			||||||
 | 
					        AegisWriter<XMLStreamWriter> writer = context.createXMLStreamWriter();
 | 
				
			||||||
 | 
					        AegisType aegisType = context.getTypeMapping().getType(CourseRepo.class);
 | 
				
			||||||
 | 
					        XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileOutputStream(fileName));
 | 
				
			||||||
 | 
					        writer.write(courseRepo, new QName("http://aegis.cxf.baeldung.com", "baeldung"), false, xmlWriter, aegisType);
 | 
				
			||||||
 | 
					        xmlWriter.close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private CourseRepo unmarshalCourseRepo() throws Exception {       
 | 
				
			||||||
 | 
					        AegisReader<XMLStreamReader> reader = context.createXMLStreamReader();
 | 
				
			||||||
 | 
					        XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(fileName));
 | 
				
			||||||
 | 
					        CourseRepo courseRepo = (CourseRepo) reader.read(xmlReader, context.getTypeMapping().getType(CourseRepo.class));
 | 
				
			||||||
 | 
					        xmlReader.close();
 | 
				
			||||||
 | 
					        return courseRepo;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -4,15 +4,18 @@
 | 
				
			|||||||
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
					    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
				
			||||||
    <modelVersion>4.0.0</modelVersion>
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
    <artifactId>cxf-introduction</artifactId>
 | 
					    <artifactId>cxf-introduction</artifactId>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <parent>
 | 
					    <parent>
 | 
				
			||||||
        <groupId>com.baeldung</groupId>
 | 
					        <groupId>com.baeldung</groupId>
 | 
				
			||||||
        <artifactId>apache-cxf</artifactId>
 | 
					        <artifactId>apache-cxf</artifactId>
 | 
				
			||||||
        <version>0.0.1-SNAPSHOT</version>
 | 
					        <version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
    </parent>
 | 
					    </parent>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <cxf.version>3.1.6</cxf.version>
 | 
					        <cxf.version>3.1.8</cxf.version>
 | 
				
			||||||
        <surefire.version>2.19.1</surefire.version>        
 | 
					        <surefire.version>2.19.1</surefire.version>        
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
        <plugins>
 | 
					        <plugins>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
@ -24,7 +27,7 @@
 | 
				
			|||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <artifactId>maven-surefire-plugin</artifactId>
 | 
					                <artifactId>maven-surefire-plugin</artifactId>
 | 
				
			||||||
                <version>2.19.1</version>
 | 
					                <version>${surefire.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <excludes>
 | 
					                    <excludes>
 | 
				
			||||||
                        <exclude>**/*LiveTest.java</exclude>
 | 
					                        <exclude>**/*LiveTest.java</exclude>
 | 
				
			||||||
@ -33,6 +36,7 @@
 | 
				
			|||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
        </plugins>
 | 
					        </plugins>
 | 
				
			||||||
    </build>
 | 
					    </build>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.apache.cxf</groupId>
 | 
					            <groupId>org.apache.cxf</groupId>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								apache-cxf/cxf-jaxrs-implementation/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apache-cxf/cxf-jaxrs-implementation/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [Apache CXF Support for RESTful Web Services](http://www.baeldung.com/apache-cxf-rest-api)
 | 
				
			||||||
@ -4,17 +4,20 @@
 | 
				
			|||||||
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
					    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
				
			||||||
    <modelVersion>4.0.0</modelVersion>
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
    <artifactId>cxf-jaxrs-implementation</artifactId>
 | 
					    <artifactId>cxf-jaxrs-implementation</artifactId>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <parent>
 | 
					    <parent>
 | 
				
			||||||
        <groupId>com.baeldung</groupId>
 | 
					        <groupId>com.baeldung</groupId>
 | 
				
			||||||
        <artifactId>apache-cxf</artifactId>
 | 
					        <artifactId>apache-cxf</artifactId>
 | 
				
			||||||
        <version>0.0.1-SNAPSHOT</version>
 | 
					        <version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
    </parent>
 | 
					    </parent>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
					        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
				
			||||||
        <cxf.version>3.1.7</cxf.version>
 | 
					        <cxf.version>3.1.8</cxf.version>
 | 
				
			||||||
        <httpclient.version>4.5.2</httpclient.version>
 | 
					        <httpclient.version>4.5.2</httpclient.version>
 | 
				
			||||||
        <surefire.version>2.19.1</surefire.version>        
 | 
					        <surefire.version>2.19.1</surefire.version>        
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
        <plugins>
 | 
					        <plugins>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
@ -26,7 +29,7 @@
 | 
				
			|||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <artifactId>maven-surefire-plugin</artifactId>
 | 
					                <artifactId>maven-surefire-plugin</artifactId>
 | 
				
			||||||
                <version>2.19.1</version>
 | 
					                <version>${surefire.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <excludes>
 | 
					                    <excludes>
 | 
				
			||||||
                        <exclude>**/*LiveTest.java</exclude>
 | 
					                        <exclude>**/*LiveTest.java</exclude>
 | 
				
			||||||
@ -35,6 +38,7 @@
 | 
				
			|||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
        </plugins>
 | 
					        </plugins>
 | 
				
			||||||
    </build>
 | 
					    </build>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.apache.cxf</groupId>
 | 
					            <groupId>org.apache.cxf</groupId>
 | 
				
			||||||
 | 
				
			|||||||
@ -33,7 +33,7 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>javax.servlet</groupId>
 | 
					            <groupId>javax.servlet</groupId>
 | 
				
			||||||
            <artifactId>javax.servlet-api</artifactId>
 | 
					            <artifactId>javax.servlet-api</artifactId>
 | 
				
			||||||
            <version>3.1.0</version>
 | 
					            <version>${javax.servlet-api.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -41,7 +41,7 @@
 | 
				
			|||||||
        <plugins>
 | 
					        <plugins>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <artifactId>maven-war-plugin</artifactId>
 | 
					                <artifactId>maven-war-plugin</artifactId>
 | 
				
			||||||
                <version>2.6</version>
 | 
					                <version>${maven-war-plugin.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <failOnMissingWebXml>false</failOnMissingWebXml>
 | 
					                    <failOnMissingWebXml>false</failOnMissingWebXml>
 | 
				
			||||||
                </configuration>
 | 
					                </configuration>
 | 
				
			||||||
@ -66,7 +66,7 @@
 | 
				
			|||||||
                    <plugin>
 | 
					                    <plugin>
 | 
				
			||||||
                        <groupId>org.codehaus.cargo</groupId>
 | 
					                        <groupId>org.codehaus.cargo</groupId>
 | 
				
			||||||
                        <artifactId>cargo-maven2-plugin</artifactId>
 | 
					                        <artifactId>cargo-maven2-plugin</artifactId>
 | 
				
			||||||
                        <version>1.4.19</version>
 | 
					                        <version>${cargo-maven2-plugin.version}</version>
 | 
				
			||||||
                        <configuration>
 | 
					                        <configuration>
 | 
				
			||||||
                            <container>
 | 
					                            <container>
 | 
				
			||||||
                                <containerId>tomcat8x</containerId>
 | 
					                                <containerId>tomcat8x</containerId>
 | 
				
			||||||
@ -121,9 +121,13 @@
 | 
				
			|||||||
    </profiles>
 | 
					    </profiles>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <cxf.version>3.1.6</cxf.version>
 | 
					        <cxf.version>3.1.8</cxf.version>
 | 
				
			||||||
        <spring.version>4.3.1.RELEASE</spring.version>
 | 
					        <spring.version>4.3.4.RELEASE</spring.version>
 | 
				
			||||||
 | 
					        <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        <maven-war-plugin.version>2.6</maven-war-plugin.version>        
 | 
				
			||||||
        <surefire.version>2.19.1</surefire.version>
 | 
					        <surefire.version>2.19.1</surefire.version>
 | 
				
			||||||
 | 
					        <cargo-maven2-plugin.version>1.6.1</cargo-maven2-plugin.version>        
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
 | 
				
			|||||||
@ -5,19 +5,29 @@
 | 
				
			|||||||
    <artifactId>apache-cxf</artifactId>
 | 
					    <artifactId>apache-cxf</artifactId>
 | 
				
			||||||
    <version>0.0.1-SNAPSHOT</version>
 | 
					    <version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
    <packaging>pom</packaging>
 | 
					    <packaging>pom</packaging>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <modules>
 | 
					    <modules>
 | 
				
			||||||
        <module>cxf-introduction</module>
 | 
					        <module>cxf-introduction</module>
 | 
				
			||||||
        <module>cxf-spring</module>
 | 
					        <module>cxf-spring</module>
 | 
				
			||||||
        <module>cxf-jaxrs-implementation</module>
 | 
					        <module>cxf-jaxrs-implementation</module>
 | 
				
			||||||
 | 
					        <module>cxf-aegis</module>
 | 
				
			||||||
    </modules>
 | 
					    </modules>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <properties>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
 | 
					        <exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
 | 
				
			||||||
 | 
					    </properties>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
            <version>4.12</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
        <defaultGoal>install</defaultGoal>
 | 
					        <defaultGoal>install</defaultGoal>
 | 
				
			||||||
        <pluginManagement>
 | 
					        <pluginManagement>
 | 
				
			||||||
@ -25,7 +35,7 @@
 | 
				
			|||||||
                <plugin>
 | 
					                <plugin>
 | 
				
			||||||
                    <groupId>org.apache.maven.plugins</groupId>
 | 
					                    <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                    <artifactId>maven-compiler-plugin</artifactId>
 | 
					                    <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
                    <version>3.5.1</version>
 | 
					                    <version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
                    <configuration>
 | 
					                    <configuration>
 | 
				
			||||||
                        <source>1.8</source>
 | 
					                        <source>1.8</source>
 | 
				
			||||||
                        <target>1.8</target>
 | 
					                        <target>1.8</target>
 | 
				
			||||||
@ -34,7 +44,7 @@
 | 
				
			|||||||
                <plugin>
 | 
					                <plugin>
 | 
				
			||||||
                    <groupId>org.codehaus.mojo</groupId>
 | 
					                    <groupId>org.codehaus.mojo</groupId>
 | 
				
			||||||
                    <artifactId>exec-maven-plugin</artifactId>
 | 
					                    <artifactId>exec-maven-plugin</artifactId>
 | 
				
			||||||
                    <version>1.5.0</version>
 | 
					                    <version>${exec-maven-plugin.version}</version>
 | 
				
			||||||
                </plugin>
 | 
					                </plugin>
 | 
				
			||||||
            </plugins>
 | 
					            </plugins>
 | 
				
			||||||
        </pluginManagement>
 | 
					        </pluginManagement>
 | 
				
			||||||
 | 
				
			|||||||
@ -67,7 +67,7 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>org.apache.xmlgraphics</groupId>
 | 
								<groupId>org.apache.xmlgraphics</groupId>
 | 
				
			||||||
			<artifactId>fop</artifactId>
 | 
								<artifactId>fop</artifactId>
 | 
				
			||||||
			<version>1.1</version>
 | 
								<version>${fop.version}</version>
 | 
				
			||||||
			<exclusions>
 | 
								<exclusions>
 | 
				
			||||||
				<exclusion>
 | 
									<exclusion>
 | 
				
			||||||
					<groupId>org.apache.avalon.framework</groupId>
 | 
										<groupId>org.apache.avalon.framework</groupId>
 | 
				
			||||||
@ -83,18 +83,18 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>avalon-framework</groupId>
 | 
								<groupId>avalon-framework</groupId>
 | 
				
			||||||
			<artifactId>avalon-framework-api</artifactId>
 | 
								<artifactId>avalon-framework-api</artifactId>
 | 
				
			||||||
			<version>4.2.0</version>
 | 
								<version>${avalon-framework.version}</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>avalon-framework</groupId>
 | 
								<groupId>avalon-framework</groupId>
 | 
				
			||||||
			<artifactId>avalon-framework-impl</artifactId>
 | 
								<artifactId>avalon-framework-impl</artifactId>
 | 
				
			||||||
			<version>4.2.0</version>
 | 
								<version>${avalon-framework.version}</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>org.dbdoclet</groupId>
 | 
								<groupId>org.dbdoclet</groupId>
 | 
				
			||||||
			<artifactId>dbdoclet</artifactId>
 | 
								<artifactId>dbdoclet</artifactId>
 | 
				
			||||||
			<version>8.0.2</version>
 | 
								<version>${dbdoclet.version}</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
@ -108,7 +108,7 @@
 | 
				
			|||||||
		<dependency>
 | 
							<dependency>
 | 
				
			||||||
			<groupId>net.sf.jtidy</groupId>
 | 
								<groupId>net.sf.jtidy</groupId>
 | 
				
			||||||
			<artifactId>jtidy</artifactId>
 | 
								<artifactId>jtidy</artifactId>
 | 
				
			||||||
			<version>r938</version>
 | 
								<version>${jtidy.version}</version>
 | 
				
			||||||
		</dependency>
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</dependencies>
 | 
						</dependencies>
 | 
				
			||||||
@ -187,40 +187,22 @@
 | 
				
			|||||||
    </profiles>
 | 
					    </profiles>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
	<properties>
 | 
						<properties>
 | 
				
			||||||
		<!-- persistence -->
 | 
						    <fop.version>1.1</fop.version> 
 | 
				
			||||||
		<hibernate.version>4.3.11.Final</hibernate.version>
 | 
						    <avalon-framework.version>4.3</avalon-framework.version>
 | 
				
			||||||
		<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
 | 
						    <dbdoclet.version>8.0.2</dbdoclet.version>
 | 
				
			||||||
 | 
						    <jtidy.version>r938</jtidy.version>
 | 
				
			||||||
		<!-- marshalling -->
 | 
					 | 
				
			||||||
		<jackson.version>2.7.2</jackson.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<!-- logging -->
 | 
							<!-- logging -->
 | 
				
			||||||
		<org.slf4j.version>1.7.9</org.slf4j.version>
 | 
							<org.slf4j.version>1.7.21</org.slf4j.version>
 | 
				
			||||||
		<logback.version>1.1.2</logback.version>
 | 
							<logback.version>1.1.7</logback.version>
 | 
				
			||||||
 | 
					 | 
				
			||||||
		<!-- various -->
 | 
					 | 
				
			||||||
		<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<!-- util -->
 | 
					 | 
				
			||||||
		<guava.version>19.0</guava.version>
 | 
					 | 
				
			||||||
		<commons-lang3.version>3.3.2</commons-lang3.version>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<!-- testing -->
 | 
							<!-- testing -->
 | 
				
			||||||
		<org.hamcrest.version>1.3</org.hamcrest.version>
 | 
							<org.hamcrest.version>1.3</org.hamcrest.version>
 | 
				
			||||||
		<junit.version>4.12</junit.version>
 | 
							<junit.version>4.12</junit.version>
 | 
				
			||||||
		<mockito.version>1.10.19</mockito.version>
 | 
							<mockito.version>1.10.19</mockito.version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<httpcore.version>4.4</httpcore.version>
 | 
					 | 
				
			||||||
		<httpclient.version>4.4</httpclient.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<rest-assured.version>2.9.0</rest-assured.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<!-- maven plugins -->
 | 
							<!-- maven plugins -->
 | 
				
			||||||
		<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
 | 
							<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
		<maven-war-plugin.version>2.6</maven-war-plugin.version>
 | 
					 | 
				
			||||||
		<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
 | 
							<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
 | 
				
			||||||
		<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
 | 
					 | 
				
			||||||
		<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	</properties>
 | 
						</properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								apache-poi/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								apache-poi/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					*.docx
 | 
				
			||||||
							
								
								
									
										2
									
								
								apache-poi/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apache-poi/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [Microsoft Word Processing in Java with Apache POI](http://www.baeldung.com/java-microsoft-word-with-apache-poi)
 | 
				
			||||||
							
								
								
									
										41
									
								
								apache-poi/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								apache-poi/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
					    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
					    <groupId>com.baeldung</groupId>
 | 
				
			||||||
 | 
					    <artifactId>apache-poi</artifactId>
 | 
				
			||||||
 | 
					    <version>0.0.1-SNAPSHOT</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <properties>
 | 
				
			||||||
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
					        <poi.version>3.15</poi.version>
 | 
				
			||||||
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <build>
 | 
				
			||||||
 | 
					        <plugins>
 | 
				
			||||||
 | 
					            <plugin>
 | 
				
			||||||
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
 | 
					                <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
 | 
					                <version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
 | 
					                <configuration>
 | 
				
			||||||
 | 
					                    <source>1.8</source>
 | 
				
			||||||
 | 
					                    <target>1.8</target>
 | 
				
			||||||
 | 
					                </configuration>
 | 
				
			||||||
 | 
					            </plugin>
 | 
				
			||||||
 | 
					        </plugins>
 | 
				
			||||||
 | 
					    </build>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
 | 
					            <scope>test</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.apache.poi</groupId>
 | 
				
			||||||
 | 
					            <artifactId>poi-ooxml</artifactId>
 | 
				
			||||||
 | 
					            <version>${poi.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					package com.baeldung.poi.word;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.poi.util.Units;
 | 
				
			||||||
 | 
					import org.apache.poi.xwpf.usermodel.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.net.URISyntaxException;
 | 
				
			||||||
 | 
					import java.nio.file.Files;
 | 
				
			||||||
 | 
					import java.nio.file.Path;
 | 
				
			||||||
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class WordDocument {
 | 
				
			||||||
 | 
					    public static String logo = "logo-leaf.png";
 | 
				
			||||||
 | 
					    public static String paragraph1 = "poi-word-para1.txt";
 | 
				
			||||||
 | 
					    public static String paragraph2 = "poi-word-para2.txt";
 | 
				
			||||||
 | 
					    public static String paragraph3 = "poi-word-para3.txt";
 | 
				
			||||||
 | 
					    public static String output = "rest-with-spring.docx";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void handleSimpleDoc() throws Exception {
 | 
				
			||||||
 | 
					        XWPFDocument document = new XWPFDocument();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph title = document.createParagraph();
 | 
				
			||||||
 | 
					        title.setAlignment(ParagraphAlignment.CENTER);
 | 
				
			||||||
 | 
					        XWPFRun titleRun = title.createRun();
 | 
				
			||||||
 | 
					        titleRun.setText("Build Your REST API with Spring");
 | 
				
			||||||
 | 
					        titleRun.setColor("009933");
 | 
				
			||||||
 | 
					        titleRun.setBold(true);
 | 
				
			||||||
 | 
					        titleRun.setFontFamily("Courier");
 | 
				
			||||||
 | 
					        titleRun.setFontSize(20);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph subTitle = document.createParagraph();
 | 
				
			||||||
 | 
					        subTitle.setAlignment(ParagraphAlignment.CENTER);
 | 
				
			||||||
 | 
					        XWPFRun subTitleRun = subTitle.createRun();
 | 
				
			||||||
 | 
					        subTitleRun.setText("from HTTP fundamentals to API Mastery");
 | 
				
			||||||
 | 
					        subTitleRun.setColor("00CC44");
 | 
				
			||||||
 | 
					        subTitleRun.setFontFamily("Courier");
 | 
				
			||||||
 | 
					        subTitleRun.setFontSize(16);
 | 
				
			||||||
 | 
					        subTitleRun.setTextPosition(20);
 | 
				
			||||||
 | 
					        subTitleRun.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph image = document.createParagraph();
 | 
				
			||||||
 | 
					        image.setAlignment(ParagraphAlignment.CENTER);
 | 
				
			||||||
 | 
					        XWPFRun imageRun = image.createRun();
 | 
				
			||||||
 | 
					        imageRun.setTextPosition(20);
 | 
				
			||||||
 | 
					        Path imagePath = Paths.get(ClassLoader.getSystemResource(logo).toURI());
 | 
				
			||||||
 | 
					        imageRun.addPicture(Files.newInputStream(imagePath), XWPFDocument.PICTURE_TYPE_PNG, imagePath.getFileName().toString(), Units.toEMU(50), Units.toEMU(50));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph sectionTitle = document.createParagraph();
 | 
				
			||||||
 | 
					        XWPFRun sectionTRun = sectionTitle.createRun();
 | 
				
			||||||
 | 
					        sectionTRun.setText("What makes a good API?");
 | 
				
			||||||
 | 
					        sectionTRun.setColor("00CC44");
 | 
				
			||||||
 | 
					        sectionTRun.setBold(true);
 | 
				
			||||||
 | 
					        sectionTRun.setFontFamily("Courier");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph para1 = document.createParagraph();
 | 
				
			||||||
 | 
					        para1.setAlignment(ParagraphAlignment.BOTH);
 | 
				
			||||||
 | 
					        String string1 = convertTextFileToString(paragraph1);
 | 
				
			||||||
 | 
					        XWPFRun para1Run = para1.createRun();
 | 
				
			||||||
 | 
					        para1Run.setText(string1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph para2 = document.createParagraph();
 | 
				
			||||||
 | 
					        para2.setAlignment(ParagraphAlignment.RIGHT);
 | 
				
			||||||
 | 
					        String string2 = convertTextFileToString(paragraph2);
 | 
				
			||||||
 | 
					        XWPFRun para2Run = para2.createRun();
 | 
				
			||||||
 | 
					        para2Run.setText(string2);
 | 
				
			||||||
 | 
					        para2Run.setItalic(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph para3 = document.createParagraph();
 | 
				
			||||||
 | 
					        para3.setAlignment(ParagraphAlignment.LEFT);
 | 
				
			||||||
 | 
					        String string3 = convertTextFileToString(paragraph3);
 | 
				
			||||||
 | 
					        XWPFRun para3Run = para3.createRun();
 | 
				
			||||||
 | 
					        para3Run.setText(string3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        FileOutputStream out = new FileOutputStream(output);
 | 
				
			||||||
 | 
					        document.write(out);
 | 
				
			||||||
 | 
					        out.close();
 | 
				
			||||||
 | 
					        document.close();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String convertTextFileToString(String fileName) {
 | 
				
			||||||
 | 
					        try (Stream<String> stream = Files.lines(Paths.get(ClassLoader.getSystemResource(fileName).toURI()))) {
 | 
				
			||||||
 | 
					            return stream.collect(Collectors.joining(" "));
 | 
				
			||||||
 | 
					        } catch (IOException | URISyntaxException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								apache-poi/src/main/resources/logo-leaf.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								apache-poi/src/main/resources/logo-leaf.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 782 B  | 
							
								
								
									
										1
									
								
								apache-poi/src/main/resources/poi-word-para1.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								apache-poi/src/main/resources/poi-word-para1.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					I published the first REST with Spring tutorials over four years ago, and after 300,000 readers and over a thousand personal questions over email, I am finally realizing that there is a huge education gap in the ecosystem.
 | 
				
			||||||
							
								
								
									
										2
									
								
								apache-poi/src/main/resources/poi-word-para2.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								apache-poi/src/main/resources/poi-word-para2.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					I had to learn what makes a good API is the hard way, and I couldn’t find anything out there to help me speed things up.
 | 
				
			||||||
 | 
					It took me 3 years, more than 10 production grade APIs built from scratch and a decent number of mistakes to get to a mature understanding of how an API should really be done well.
 | 
				
			||||||
							
								
								
									
										3
									
								
								apache-poi/src/main/resources/poi-word-para3.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								apache-poi/src/main/resources/poi-word-para3.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					Sure, there were tutorials and random code samples out there, but nothing coherent.
 | 
				
			||||||
 | 
					Nothing start to finish to act as a guide through the challenges of building a mature API with Spring.
 | 
				
			||||||
 | 
					The educational gap between beginner and the API professional remains vast.
 | 
				
			||||||
							
								
								
									
										47
									
								
								apache-poi/src/test/java/com/baeldung/poi/word/WordTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								apache-poi/src/test/java/com/baeldung/poi/word/WordTest.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					package com.baeldung.poi.word;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertEquals;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertTrue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.nio.file.Files;
 | 
				
			||||||
 | 
					import java.nio.file.Path;
 | 
				
			||||||
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.poi.xwpf.usermodel.XWPFDocument;
 | 
				
			||||||
 | 
					import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 | 
				
			||||||
 | 
					import org.apache.poi.xwpf.usermodel.XWPFRun;
 | 
				
			||||||
 | 
					import org.junit.BeforeClass;
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class WordTest {
 | 
				
			||||||
 | 
					    static WordDocument wordDocument;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @BeforeClass
 | 
				
			||||||
 | 
					    public static void generateMSWordFile() throws Exception {
 | 
				
			||||||
 | 
					        WordTest.wordDocument = new WordDocument();
 | 
				
			||||||
 | 
					        wordDocument.handleSimpleDoc();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenParsingOutputDocument_thenCorrect() throws Exception {
 | 
				
			||||||
 | 
					        Path msWordPath = Paths.get(WordDocument.output);
 | 
				
			||||||
 | 
					        XWPFDocument document = new XWPFDocument(Files.newInputStream(msWordPath));
 | 
				
			||||||
 | 
					        List<XWPFParagraph> paragraphs = document.getParagraphs();
 | 
				
			||||||
 | 
					        document.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        XWPFParagraph title = paragraphs.get(0);
 | 
				
			||||||
 | 
					        XWPFRun titleRun = title.getRuns().get(0);
 | 
				
			||||||
 | 
					        assertEquals("Build Your REST API with Spring", title.getText());
 | 
				
			||||||
 | 
					        assertEquals("009933", titleRun.getColor());
 | 
				
			||||||
 | 
					        assertTrue(titleRun.isBold());
 | 
				
			||||||
 | 
					        assertEquals("Courier", titleRun.getFontFamily());
 | 
				
			||||||
 | 
					        assertEquals(20, titleRun.getFontSize());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("from HTTP fundamentals to API Mastery", paragraphs.get(1).getText());
 | 
				
			||||||
 | 
					        assertEquals("What makes a good API?", paragraphs.get(3).getText());
 | 
				
			||||||
 | 
					        assertEquals(wordDocument.convertTextFileToString(WordDocument.paragraph1), paragraphs.get(4).getText());
 | 
				
			||||||
 | 
					        assertEquals(wordDocument.convertTextFileToString(WordDocument.paragraph2), paragraphs.get(5).getText());
 | 
				
			||||||
 | 
					        assertEquals(wordDocument.convertTextFileToString(WordDocument.paragraph3), paragraphs.get(6).getText());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								aspectj/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								aspectj/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [Intro to AspectJ](http://www.baeldung.com/aspectj)
 | 
				
			||||||
@ -45,6 +45,36 @@
 | 
				
			|||||||
            <version>${junit.version}</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>org.springframework</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>spring-context</artifactId>
 | 
				
			||||||
 | 
					        	<version>4.3.4.RELEASE</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>org.springframework</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>spring-beans</artifactId>
 | 
				
			||||||
 | 
					        	<version>4.3.4.RELEASE</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>org.springframework</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>spring-core</artifactId>
 | 
				
			||||||
 | 
					        	<version>4.3.4.RELEASE</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>cglib</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>cglib</artifactId>
 | 
				
			||||||
 | 
					        	<version>3.2.4</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>org.springframework</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>spring-aop</artifactId>
 | 
				
			||||||
 | 
					        	<version>4.3.4.RELEASE</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					        	<groupId>log4j</groupId>
 | 
				
			||||||
 | 
					        	<artifactId>log4j</artifactId>
 | 
				
			||||||
 | 
					        	<version>1.2.17</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
@ -104,7 +134,8 @@
 | 
				
			|||||||
                </executions>
 | 
					                </executions>
 | 
				
			||||||
           </plugin>
 | 
					           </plugin>
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            <!-- <plugin>
 | 
					            <!-- 
 | 
				
			||||||
 | 
					            <plugin>
 | 
				
			||||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                <artifactId>maven-surefire-plugin</artifactId>
 | 
					                <artifactId>maven-surefire-plugin</artifactId>
 | 
				
			||||||
                <version>2.10</version>
 | 
					                <version>2.10</version>
 | 
				
			||||||
@ -113,18 +144,18 @@
 | 
				
			|||||||
                    <useSystemClassLoader>true</useSystemClassLoader>
 | 
					                    <useSystemClassLoader>true</useSystemClassLoader>
 | 
				
			||||||
                    <forkMode>always</forkMode>
 | 
					                    <forkMode>always</forkMode>
 | 
				
			||||||
                </configuration>
 | 
					                </configuration>
 | 
				
			||||||
            </plugin>   -->
 | 
					            </plugin>
 | 
				
			||||||
 | 
					             -->
 | 
				
			||||||
        </plugins>
 | 
					        </plugins>
 | 
				
			||||||
    </build>
 | 
					    </build>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <source.version>1.8</source.version>
 | 
					        <source.version>1.8</source.version>
 | 
				
			||||||
        <aspectj.version>1.6.11</aspectj.version>
 | 
					 | 
				
			||||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
					        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
				
			||||||
        <aspectj.version>1.8.9</aspectj.version>
 | 
					        <aspectj.version>1.8.9</aspectj.version>
 | 
				
			||||||
        <org.slf4j.version>1.7.21</org.slf4j.version>
 | 
					        <org.slf4j.version>1.7.21</org.slf4j.version>
 | 
				
			||||||
        <logback.version>1.1.7</logback.version>
 | 
					        <logback.version>1.1.7</logback.version>
 | 
				
			||||||
        <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
        <junit.version>4.12</junit.version>
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,10 +4,10 @@ public class Account {
 | 
				
			|||||||
    int balance = 20;
 | 
					    int balance = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean withdraw(int amount) {
 | 
					    public boolean withdraw(int amount) {
 | 
				
			||||||
        if (balance - amount > 0) {
 | 
					        if (balance < amount) {
 | 
				
			||||||
            balance = balance - amount;
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        } else
 | 
					 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        balance = balance - amount;
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,12 +16,11 @@ public aspect AccountAspect {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    boolean around(int amount, Account account) : callWithDraw(amount, account) {
 | 
					    boolean around(int amount, Account account) : callWithDraw(amount, account) {
 | 
				
			||||||
        if (account.balance - amount >= MIN_BALANCE)
 | 
					        if (account.balance < amount) {
 | 
				
			||||||
            return proceed(amount, account);
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            logger.info("Withdrawal Rejected!");
 | 
					            logger.info("Withdrawal Rejected!");
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        return proceed(amount, account);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    after(int amount, Account balance) : callWithDraw(amount, balance) {
 | 
					    after(int amount, Account balance) : callWithDraw(amount, balance) {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					package com.baeldung.performancemonitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDate;
 | 
				
			||||||
 | 
					import java.time.Month;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.aspectj.lang.annotation.Pointcut;
 | 
				
			||||||
 | 
					import org.springframework.aop.Advisor;
 | 
				
			||||||
 | 
					import org.springframework.aop.aspectj.AspectJExpressionPointcut;
 | 
				
			||||||
 | 
					import org.springframework.aop.interceptor.PerformanceMonitorInterceptor;
 | 
				
			||||||
 | 
					import org.springframework.aop.support.DefaultPointcutAdvisor;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.EnableAspectJAutoProxy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Configuration
 | 
				
			||||||
 | 
					@EnableAspectJAutoProxy
 | 
				
			||||||
 | 
					public class AopConfiguration {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Pointcut("execution(public String com.baeldung.performancemonitor.PersonService.getFullName(..))")
 | 
				
			||||||
 | 
					    public void monitor() { }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Pointcut("execution(public int com.baeldung.performancemonitor.PersonService.getAge(..))")
 | 
				
			||||||
 | 
					    public void myMonitor() { }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public PerformanceMonitorInterceptor performanceMonitorInterceptor() {
 | 
				
			||||||
 | 
					        return new PerformanceMonitorInterceptor(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public Advisor performanceMonitorAdvisor() {
 | 
				
			||||||
 | 
					        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
 | 
				
			||||||
 | 
					        pointcut.setExpression("com.baeldung.performancemonitor.AopConfiguration.monitor()");
 | 
				
			||||||
 | 
					        return new DefaultPointcutAdvisor(pointcut, performanceMonitorInterceptor());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public Person person(){
 | 
				
			||||||
 | 
					        return new Person("John","Smith", LocalDate.of(1980, Month.JANUARY, 12));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public PersonService personService(){
 | 
				
			||||||
 | 
					        return new PersonService();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public MyPerformanceMonitorInterceptor myPerformanceMonitorInterceptor() {
 | 
				
			||||||
 | 
					        return new MyPerformanceMonitorInterceptor(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public Advisor myPerformanceMonitorAdvisor() {
 | 
				
			||||||
 | 
					        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
 | 
				
			||||||
 | 
					        pointcut.setExpression("com.baeldung.performancemonitor.AopConfiguration.myMonitor()");
 | 
				
			||||||
 | 
					        return new DefaultPointcutAdvisor(pointcut, myPerformanceMonitorInterceptor());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					package com.baeldung.performancemonitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.aopalliance.intercept.MethodInvocation;
 | 
				
			||||||
 | 
					import org.apache.commons.logging.Log;
 | 
				
			||||||
 | 
					import org.springframework.aop.interceptor.AbstractMonitoringInterceptor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MyPerformanceMonitorInterceptor extends AbstractMonitoringInterceptor {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public MyPerformanceMonitorInterceptor() {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public MyPerformanceMonitorInterceptor(boolean useDynamicLogger) {
 | 
				
			||||||
 | 
					            setUseDynamicLogger(useDynamicLogger);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected Object invokeUnderTrace(MethodInvocation invocation, Log log) throws Throwable {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        String name = createInvocationTraceName(invocation);
 | 
				
			||||||
 | 
					        long start = System.currentTimeMillis();
 | 
				
			||||||
 | 
					        log.info("Method "+name+" execution started at:"+new Date());
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            return invocation.proceed();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        finally {
 | 
				
			||||||
 | 
					            long end = System.currentTimeMillis();
 | 
				
			||||||
 | 
					            long time = end - start;
 | 
				
			||||||
 | 
					            log.info("Method "+name+" execution lasted:"+time+" ms");
 | 
				
			||||||
 | 
					            log.info("Method "+name+" execution ended at:"+new Date());
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if (time > 10){
 | 
				
			||||||
 | 
					                log.warn("Method execution longer than 10 ms!");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					package com.baeldung.performancemonitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.context.ApplicationContext;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class PerfomanceApp {
 | 
				
			||||||
 | 
					    public static void main(String[] args) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ApplicationContext context = new AnnotationConfigApplicationContext(AopConfiguration.class);
 | 
				
			||||||
 | 
					        Person person = (Person) context.getBean("person");
 | 
				
			||||||
 | 
					        PersonService personService = (PersonService) context.getBean("personService");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        System.out.println("Name is:"+personService.getFullName(person));
 | 
				
			||||||
 | 
					        System.out.println("Age is:"+personService.getAge(person));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					package com.baeldung.performancemonitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Person {
 | 
				
			||||||
 | 
					    private String lastName;
 | 
				
			||||||
 | 
					    private String firstName;
 | 
				
			||||||
 | 
					    private LocalDate dateOfBirth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Person() {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Person(String firstName, String lastName, LocalDate dateOfBirth) {
 | 
				
			||||||
 | 
					        this.firstName = firstName;
 | 
				
			||||||
 | 
					        this.lastName = lastName;
 | 
				
			||||||
 | 
					        this.dateOfBirth = dateOfBirth;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public LocalDate getDateOfBirth() {
 | 
				
			||||||
 | 
					        return dateOfBirth;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setDateOfBirth(LocalDate dateOfBirth) {
 | 
				
			||||||
 | 
					        this.dateOfBirth = dateOfBirth;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getLastName() {
 | 
				
			||||||
 | 
					        return lastName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setLastName(String lastName) {
 | 
				
			||||||
 | 
					        this.lastName = lastName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getFirstName() {
 | 
				
			||||||
 | 
					        return firstName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setFirstName(String firstName) {
 | 
				
			||||||
 | 
					        this.firstName = firstName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					package com.baeldung.performancemonitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.time.LocalDate;
 | 
				
			||||||
 | 
					import java.time.Period;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class PersonService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getFullName(Person person){
 | 
				
			||||||
 | 
					        return person.getLastName()+" "+person.getFirstName();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public int getAge(Person person){
 | 
				
			||||||
 | 
					        Period p = Period.between(person.getDateOfBirth(), LocalDate.now());
 | 
				
			||||||
 | 
					        return p.getYears();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								aspectj/src/main/resources/log4j.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								aspectj/src/main/resources/log4j.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					log4j.rootLogger=TRACE, stdout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Redirect log messages to console
 | 
				
			||||||
 | 
					log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 | 
				
			||||||
 | 
					log4j.appender.stdout.Target=System.out
 | 
				
			||||||
 | 
					log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 | 
				
			||||||
 | 
					log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					log4j.logger.org.springframework.aop.interceptor.PerformanceMonitorInterceptor=TRACE, stdout
 | 
				
			||||||
 | 
					log4j.logger.com.baeldung.performancemonitor.MyPerformanceMonitorInterceptor=INFO, stdout
 | 
				
			||||||
@ -23,13 +23,13 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
            <version>4.12</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.assertj</groupId>
 | 
					            <groupId>org.assertj</groupId>
 | 
				
			||||||
            <artifactId>assertj-core</artifactId>
 | 
					            <artifactId>assertj-core</artifactId>
 | 
				
			||||||
            <version>3.5.1</version>
 | 
					            <version>${assertj-core.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,7 +40,7 @@
 | 
				
			|||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                <artifactId>maven-compiler-plugin</artifactId>
 | 
					                <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
                <version>3.3</version>
 | 
					                <version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <source>1.8</source>
 | 
					                    <source>1.8</source>
 | 
				
			||||||
                    <target>1.8</target>
 | 
					                    <target>1.8</target>
 | 
				
			||||||
@ -51,6 +51,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <guava.version>19.0</guava.version>
 | 
					        <guava.version>19.0</guava.version>
 | 
				
			||||||
 | 
					        <assertj-guava.version>3.1.0</assertj-guava.version>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
					        <assertj-core.version>3.6.1</assertj-core.version>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
@ -2,15 +2,16 @@
 | 
				
			|||||||
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
					    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 | 
				
			||||||
    <modelVersion>4.0.0</modelVersion>
 | 
					    <modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
    <groupId>com.baeldung</groupId>
 | 
					    <groupId>com.baeldung</groupId>
 | 
				
			||||||
    <artifactId>autovalue-tutorial</artifactId>
 | 
					    <artifactId>autovalue</artifactId>
 | 
				
			||||||
    <version>1.0</version>
 | 
					    <version>1.0</version>
 | 
				
			||||||
    <name>AutoValue</name>
 | 
					    <name>autovalue</name>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <build>
 | 
					    <build>
 | 
				
			||||||
        <plugins>
 | 
					        <plugins>
 | 
				
			||||||
            <plugin>
 | 
					            <plugin>
 | 
				
			||||||
                <groupId>org.apache.maven.plugins</groupId>
 | 
					                <groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
                <artifactId>maven-compiler-plugin</artifactId>
 | 
					                <artifactId>maven-compiler-plugin</artifactId>
 | 
				
			||||||
                <version>3.3</version>
 | 
					                <version>${maven-compiler-plugin.version}</version>
 | 
				
			||||||
                <configuration>
 | 
					                <configuration>
 | 
				
			||||||
                    <source>7</source>
 | 
					                    <source>7</source>
 | 
				
			||||||
                    <target>7</target>
 | 
					                    <target>7</target>
 | 
				
			||||||
@ -19,19 +20,26 @@
 | 
				
			|||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
        </plugins>
 | 
					        </plugins>
 | 
				
			||||||
    </build>
 | 
					    </build>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.google.auto.value</groupId>
 | 
					            <groupId>com.google.auto.value</groupId>
 | 
				
			||||||
            <artifactId>auto-value</artifactId>
 | 
					            <artifactId>auto-value</artifactId>
 | 
				
			||||||
            <version>1.2</version>
 | 
					            <version>${auto-value.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
            <version>4.3</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <properties>
 | 
				
			||||||
 | 
					        <auto-value.version>1.3</auto-value.version>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
 | 
					    </properties>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ import static org.junit.Assert.*;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.junit.Test;
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class MoneyTest {
 | 
					public class MoneyUnitTest {
 | 
				
			||||||
	@Test
 | 
						@Test
 | 
				
			||||||
	public void givenTwoSameValueMoneyObjects_whenEqualityTestFails_thenCorrect() {
 | 
						public void givenTwoSameValueMoneyObjects_whenEqualityTestFails_thenCorrect() {
 | 
				
			||||||
		MutableMoney m1 = new MutableMoney(10000, "USD");
 | 
							MutableMoney m1 = new MutableMoney(10000, "USD");
 | 
				
			||||||
							
								
								
									
										1
									
								
								aws/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								aws/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					/target/
 | 
				
			||||||
							
								
								
									
										44
									
								
								aws/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								aws/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
							 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
				
			||||||
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
 | 
						<groupId>com.baeldung</groupId>
 | 
				
			||||||
 | 
						<artifactId>aws</artifactId>
 | 
				
			||||||
 | 
						<version>0.1.0-SNAPSHOT</version>
 | 
				
			||||||
 | 
						<packaging>jar</packaging>
 | 
				
			||||||
 | 
						<name>aws</name>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<dependencies>
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>com.amazonaws</groupId>
 | 
				
			||||||
 | 
								<artifactId>aws-lambda-java-core</artifactId>
 | 
				
			||||||
 | 
								<version>1.1.0</version>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<dependency>
 | 
				
			||||||
 | 
								<groupId>commons-io</groupId>
 | 
				
			||||||
 | 
								<artifactId>commons-io</artifactId>
 | 
				
			||||||
 | 
								<version>2.5</version>
 | 
				
			||||||
 | 
							</dependency>
 | 
				
			||||||
 | 
						</dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<build>
 | 
				
			||||||
 | 
							<plugins>
 | 
				
			||||||
 | 
								<plugin>
 | 
				
			||||||
 | 
									<groupId>org.apache.maven.plugins</groupId>
 | 
				
			||||||
 | 
									<artifactId>maven-shade-plugin</artifactId>
 | 
				
			||||||
 | 
									<version>2.3</version>
 | 
				
			||||||
 | 
									<configuration>
 | 
				
			||||||
 | 
										<createDependencyReducedPom>false</createDependencyReducedPom>
 | 
				
			||||||
 | 
									</configuration>
 | 
				
			||||||
 | 
									<executions>
 | 
				
			||||||
 | 
										<execution>
 | 
				
			||||||
 | 
											<phase>package</phase>
 | 
				
			||||||
 | 
											<goals>
 | 
				
			||||||
 | 
												<goal>shade</goal>
 | 
				
			||||||
 | 
											</goals>
 | 
				
			||||||
 | 
										</execution>
 | 
				
			||||||
 | 
									</executions>
 | 
				
			||||||
 | 
								</plugin>
 | 
				
			||||||
 | 
							</plugins>
 | 
				
			||||||
 | 
						</build>
 | 
				
			||||||
 | 
					</project>
 | 
				
			||||||
@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					package com.baeldung.lambda;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.amazonaws.services.lambda.runtime.Context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class LambdaMethodHandler {
 | 
				
			||||||
 | 
					    public String handleRequest(String input, Context context) {
 | 
				
			||||||
 | 
					        context.getLogger().log("Input: " + input);
 | 
				
			||||||
 | 
					        return "Hello World - " + input;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					package com.baeldung.lambda;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.amazonaws.services.lambda.runtime.Context;
 | 
				
			||||||
 | 
					import com.amazonaws.services.lambda.runtime.RequestHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class LambdaRequestHandler implements RequestHandler<String, String> {
 | 
				
			||||||
 | 
					    public String handleRequest(String input, Context context) {
 | 
				
			||||||
 | 
					        context.getLogger().log("Input: " + input);
 | 
				
			||||||
 | 
					        return "Hello World - " + input;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					package com.baeldung.lambda;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.amazonaws.services.lambda.runtime.Context;
 | 
				
			||||||
 | 
					import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
 | 
				
			||||||
 | 
					import org.apache.commons.io.IOUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.InputStream;
 | 
				
			||||||
 | 
					import java.io.OutputStream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class LambdaRequestStreamHandler implements RequestStreamHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
 | 
				
			||||||
 | 
					        String input = IOUtils.toString(inputStream, "UTF-8");
 | 
				
			||||||
 | 
					        outputStream.write(("Hello World - " + input).getBytes());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								cdi/pom.xml
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								cdi/pom.xml
									
									
									
									
									
								
							@ -22,18 +22,18 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.aspectj</groupId>
 | 
					            <groupId>org.aspectj</groupId>
 | 
				
			||||||
            <artifactId>aspectjweaver</artifactId>
 | 
					            <artifactId>aspectjweaver</artifactId>
 | 
				
			||||||
            <version>1.8.9</version>
 | 
					            <version>${aspectjweaver.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.jboss.weld.se</groupId>
 | 
					            <groupId>org.jboss.weld.se</groupId>
 | 
				
			||||||
            <artifactId>weld-se-core</artifactId>
 | 
					            <artifactId>weld-se-core</artifactId>
 | 
				
			||||||
            <version>2.3.5.Final</version>
 | 
					            <version>${weld-se-core.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
            <version>4.12</version>
 | 
					            <version>${junit.version}</version>
 | 
				
			||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
@ -97,7 +97,10 @@
 | 
				
			|||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
    </profiles>
 | 
					    </profiles>
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <spring.version>4.3.1.RELEASE</spring.version>
 | 
					        <spring.version>4.3.4.RELEASE</spring.version>
 | 
				
			||||||
 | 
					        <aspectjweaver.version>1.8.9</aspectjweaver.version>
 | 
				
			||||||
 | 
					        <weld-se-core.version>2.4.1.Final</weld-se-core.version>
 | 
				
			||||||
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>        
 | 
					        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>        
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3,3 +3,6 @@
 | 
				
			|||||||
## Core Java 9  Examples
 | 
					## Core Java 9  Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Java 9 New Features](http://www.baeldung.com/new-java-9)
 | 
					[Java 9 New Features](http://www.baeldung.com/new-java-9)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [Java 9 Stream API Improvements](http://www.baeldung.com/java-9-stream-api)
 | 
				
			||||||
 | 
				
			|||||||
@ -76,9 +76,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	<properties>
 | 
						<properties>
 | 
				
			||||||
		<!-- logging -->
 | 
							<!-- logging -->
 | 
				
			||||||
		<org.slf4j.version>1.7.13</org.slf4j.version>
 | 
							<org.slf4j.version>1.7.21</org.slf4j.version>
 | 
				
			||||||
		<logback.version>1.0.13</logback.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		<!-- maven plugins -->
 | 
							<!-- maven plugins -->
 | 
				
			||||||
		<maven-compiler-plugin.version>3.6-jigsaw-SNAPSHOT</maven-compiler-plugin.version>	
 | 
							<maven-compiler-plugin.version>3.6-jigsaw-SNAPSHOT</maven-compiler-plugin.version>	
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								core-java/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								core-java/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -14,3 +14,5 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Files generated by integration tests
 | 
					# Files generated by integration tests
 | 
				
			||||||
*.txt
 | 
					*.txt
 | 
				
			||||||
 | 
					/bin/
 | 
				
			||||||
 | 
					/temp
 | 
				
			||||||
 | 
				
			|||||||
@ -38,3 +38,18 @@
 | 
				
			|||||||
- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
 | 
					- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
 | 
				
			||||||
- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
 | 
					- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
 | 
				
			||||||
- [How to Convert String to different data types in Java](http://www.baeldung.com/java-string-conversions)
 | 
					- [How to Convert String to different data types in Java](http://www.baeldung.com/java-string-conversions)
 | 
				
			||||||
 | 
					- [Introduction to Java Generics](http://www.baeldung.com/java-generics)
 | 
				
			||||||
 | 
					- [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode)
 | 
				
			||||||
 | 
					- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java)
 | 
				
			||||||
 | 
					- [Sorting in Java](http://www.baeldung.com/java-sorting)
 | 
				
			||||||
 | 
					- [Getting Started with Java Properties](http://www.baeldung.com/java-properties)
 | 
				
			||||||
 | 
					- [Grep in Java](http://www.baeldung.com/grep-in-java)
 | 
				
			||||||
 | 
					- [Java - Combine Multiple Collections](http://www.baeldung.com/java-combine-multiple-collections)
 | 
				
			||||||
 | 
					- [Simulated Annealing for Travelling Salesman Problem](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman)
 | 
				
			||||||
 | 
					- [Slope One Algorithm: Collaborative Filtering Recommendation Systems](http://www.baeldung.com/java-collaborative-filtering-recommendations)
 | 
				
			||||||
 | 
					- [Differences Between the Java WatchService API and the Apache Commons IO Monitor Library](http://www.baeldung.com/java-watchservice-vs-apache-commons-io-monitor-library)
 | 
				
			||||||
 | 
					- [Pattern Search with Grep in Java](http://www.baeldung.com/grep-in-java)
 | 
				
			||||||
 | 
					- [URL Encoding and Decoding in Java](http://www.baeldung.com/java-url-encoding-decoding)
 | 
				
			||||||
 | 
					- [Calculate the Size of a File in Java](http://www.baeldung.com/java-file-size)
 | 
				
			||||||
 | 
					- [The Basics of Java Generics](http://www.baeldung.com/java-generics)
 | 
				
			||||||
 | 
					- [The Traveling Salesman Problem in Java](http://www.baeldung.com/java-simulated-annealing-for-traveling-salesman)
 | 
				
			||||||
 | 
				
			|||||||
@ -14,7 +14,7 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>net.sourceforge.collections</groupId>
 | 
					            <groupId>net.sourceforge.collections</groupId>
 | 
				
			||||||
            <artifactId>collections-generic</artifactId>
 | 
					            <artifactId>collections-generic</artifactId>
 | 
				
			||||||
			<version>4.01</version>
 | 
					            <version>${collections-generic.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.google.guava</groupId>
 | 
					            <groupId>com.google.guava</groupId>
 | 
				
			||||||
@ -25,13 +25,13 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.apache.commons</groupId>
 | 
					            <groupId>org.apache.commons</groupId>
 | 
				
			||||||
            <artifactId>commons-collections4</artifactId>
 | 
					            <artifactId>commons-collections4</artifactId>
 | 
				
			||||||
			<version>4.0</version>
 | 
					            <version>${commons-collections4.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>commons-io</groupId>
 | 
					            <groupId>commons-io</groupId>
 | 
				
			||||||
            <artifactId>commons-io</artifactId>
 | 
					            <artifactId>commons-io</artifactId>
 | 
				
			||||||
			<version>2.4</version>
 | 
					            <version>${commons-io.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
@ -43,13 +43,25 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.apache.commons</groupId>
 | 
					            <groupId>org.apache.commons</groupId>
 | 
				
			||||||
            <artifactId>commons-math3</artifactId>
 | 
					            <artifactId>commons-math3</artifactId>
 | 
				
			||||||
			<version>3.3</version>
 | 
					            <version>${commons-math3.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.bouncycastle</groupId>
 | 
					            <groupId>org.bouncycastle</groupId>
 | 
				
			||||||
            <artifactId>bcprov-jdk15on</artifactId>
 | 
					            <artifactId>bcprov-jdk15on</artifactId>
 | 
				
			||||||
			<version>1.55</version>
 | 
					            <version>${bouncycastle.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.unix4j</groupId>
 | 
				
			||||||
 | 
					            <artifactId>unix4j-command</artifactId>
 | 
				
			||||||
 | 
					            <version>${unix4j.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.googlecode.grep4j</groupId>
 | 
				
			||||||
 | 
					            <artifactId>grep4j</artifactId>
 | 
				
			||||||
 | 
					            <version>${grep4j.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
        <!-- web -->
 | 
					        <!-- web -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -85,9 +97,22 @@
 | 
				
			|||||||
            <artifactId>log4j-over-slf4j</artifactId>
 | 
					            <artifactId>log4j-over-slf4j</artifactId>
 | 
				
			||||||
            <version>${org.slf4j.version}</version>
 | 
					            <version>${org.slf4j.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.projectlombok</groupId>
 | 
				
			||||||
 | 
					            <artifactId>lombok</artifactId>
 | 
				
			||||||
 | 
					            <version>${lombok.version}</version>
 | 
				
			||||||
 | 
					            <scope>provided</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- test scoped -->
 | 
					        <!-- test scoped -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.hamcrest</groupId>
 | 
				
			||||||
 | 
					            <artifactId>hamcrest-all</artifactId>
 | 
				
			||||||
 | 
					            <version>1.3</version>
 | 
				
			||||||
 | 
					            <scope>test</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>junit</groupId>
 | 
					            <groupId>junit</groupId>
 | 
				
			||||||
            <artifactId>junit</artifactId>
 | 
					            <artifactId>junit</artifactId>
 | 
				
			||||||
@ -122,8 +147,6 @@
 | 
				
			|||||||
            <scope>test</scope>
 | 
					            <scope>test</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.mockito</groupId>
 | 
					            <groupId>org.mockito</groupId>
 | 
				
			||||||
            <artifactId>mockito-core</artifactId>
 | 
					            <artifactId>mockito-core</artifactId>
 | 
				
			||||||
@ -134,7 +157,7 @@
 | 
				
			|||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>commons-codec</groupId>
 | 
					            <groupId>commons-codec</groupId>
 | 
				
			||||||
            <artifactId>commons-codec</artifactId>
 | 
					            <artifactId>commons-codec</artifactId>
 | 
				
			||||||
			<version>1.10</version>
 | 
					            <version>${commons-codec.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
@ -170,6 +193,7 @@
 | 
				
			|||||||
                        <exclude>**/*LongRunningUnitTest.java</exclude>
 | 
					                        <exclude>**/*LongRunningUnitTest.java</exclude>
 | 
				
			||||||
                        <exclude>**/*ManualTest.java</exclude>
 | 
					                        <exclude>**/*ManualTest.java</exclude>
 | 
				
			||||||
                    </excludes>
 | 
					                    </excludes>
 | 
				
			||||||
 | 
					                    <testFailureIgnore>true</testFailureIgnore>
 | 
				
			||||||
                </configuration>
 | 
					                </configuration>
 | 
				
			||||||
            </plugin>
 | 
					            </plugin>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -238,8 +262,7 @@
 | 
				
			|||||||
                        <configuration>
 | 
					                        <configuration>
 | 
				
			||||||
                            <shadedArtifactAttached>true</shadedArtifactAttached>
 | 
					                            <shadedArtifactAttached>true</shadedArtifactAttached>
 | 
				
			||||||
                            <transformers>
 | 
					                            <transformers>
 | 
				
			||||||
								<transformer
 | 
					                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
 | 
				
			||||||
									implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
 | 
					 | 
				
			||||||
                                    <mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
 | 
					                                    <mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
 | 
				
			||||||
                                </transformer>
 | 
					                                </transformer>
 | 
				
			||||||
                            </transformers>
 | 
					                            </transformers>
 | 
				
			||||||
@ -321,42 +344,36 @@
 | 
				
			|||||||
    </profiles>
 | 
					    </profiles>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
		<!-- persistence -->
 | 
					 | 
				
			||||||
		<hibernate.version>4.3.11.Final</hibernate.version>
 | 
					 | 
				
			||||||
		<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <!-- marshalling -->
 | 
					        <!-- marshalling -->
 | 
				
			||||||
		<jackson.version>2.7.8</jackson.version>
 | 
					        <jackson.version>2.8.5</jackson.version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- logging -->
 | 
					        <!-- logging -->
 | 
				
			||||||
		<org.slf4j.version>1.7.13</org.slf4j.version>
 | 
					        <org.slf4j.version>1.7.21</org.slf4j.version>
 | 
				
			||||||
		<logback.version>1.1.3</logback.version>
 | 
					        <logback.version>1.1.7</logback.version>
 | 
				
			||||||
 | 
					 | 
				
			||||||
		<!-- various -->
 | 
					 | 
				
			||||||
		<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- util -->
 | 
					        <!-- util -->
 | 
				
			||||||
        <guava.version>19.0</guava.version>
 | 
					        <guava.version>19.0</guava.version>
 | 
				
			||||||
		<commons-lang3.version>3.4</commons-lang3.version>
 | 
					        <commons-lang3.version>3.5</commons-lang3.version>
 | 
				
			||||||
 | 
					        <bouncycastle.version>1.55</bouncycastle.version>
 | 
				
			||||||
 | 
					        <commons-codec.version>1.10</commons-codec.version>
 | 
				
			||||||
 | 
					        <commons-math3.version>3.6.1</commons-math3.version>
 | 
				
			||||||
 | 
					        <commons-io.version>2.5</commons-io.version>
 | 
				
			||||||
 | 
					        <commons-collections4.version>4.1</commons-collections4.version>
 | 
				
			||||||
 | 
					        <collections-generic.version>4.01</collections-generic.version>
 | 
				
			||||||
 | 
					        <unix4j.version>0.4</unix4j.version>
 | 
				
			||||||
 | 
					        <grep4j.version>1.8.7</grep4j.version>
 | 
				
			||||||
 | 
					        <lombok.version>1.16.12</lombok.version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- testing -->
 | 
					        <!-- testing -->
 | 
				
			||||||
        <org.hamcrest.version>1.3</org.hamcrest.version>
 | 
					        <org.hamcrest.version>1.3</org.hamcrest.version>
 | 
				
			||||||
        <junit.version>4.12</junit.version>
 | 
					        <junit.version>4.12</junit.version>
 | 
				
			||||||
        <mockito.version>1.10.19</mockito.version>
 | 
					        <mockito.version>1.10.19</mockito.version>
 | 
				
			||||||
		<testng.version>6.8</testng.version>
 | 
					        <testng.version>6.10</testng.version>
 | 
				
			||||||
		<assertj.version>3.5.1</assertj.version>
 | 
					        <assertj.version>3.6.1</assertj.version>
 | 
				
			||||||
 | 
					 | 
				
			||||||
		<httpcore.version>4.4.1</httpcore.version>
 | 
					 | 
				
			||||||
		<httpclient.version>4.5</httpclient.version>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<rest-assured.version>2.9.0</rest-assured.version>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- maven plugins -->
 | 
					        <!-- maven plugins -->
 | 
				
			||||||
		<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
 | 
					        <maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version>
 | 
				
			||||||
		<maven-war-plugin.version>2.6</maven-war-plugin.version>
 | 
					 | 
				
			||||||
        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
 | 
					        <maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
 | 
				
			||||||
		<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
 | 
					 | 
				
			||||||
		<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								core-java/src/main/java/com/baeldung/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java/src/main/java/com/baeldung/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [SHA-256 Hashing in Java](http://www.baeldung.com/sha-256-hashing-java)
 | 
				
			||||||
@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Scanner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.annealing.SimulatedAnnealing;
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.slope_one.SlopeOne;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class RunAlgorithm {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static void main(String[] args) {
 | 
				
			||||||
 | 
							Scanner in = new Scanner(System.in);
 | 
				
			||||||
 | 
							System.out.println("Run algorithm:");
 | 
				
			||||||
 | 
							System.out.println("1 - Simulated Annealing");
 | 
				
			||||||
 | 
							System.out.println("2 - Slope One");
 | 
				
			||||||
 | 
							int decision = in.nextInt();
 | 
				
			||||||
 | 
							switch (decision) {
 | 
				
			||||||
 | 
							case 1:
 | 
				
			||||||
 | 
								System.out.println(
 | 
				
			||||||
 | 
										"Optimized distance for travel: " + SimulatedAnnealing.simulateAnnealing(10, 10000, 0.9995));
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case 2:
 | 
				
			||||||
 | 
								SlopeOne.slopeOne(3);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								System.out.println("Unknown option");
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							in.close();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.annealing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					public class City {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private int x;
 | 
				
			||||||
 | 
						private int y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public City() {
 | 
				
			||||||
 | 
							this.x = (int) (Math.random() * 500);
 | 
				
			||||||
 | 
							this.y = (int) (Math.random() * 500);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public double distanceToCity(City city) {
 | 
				
			||||||
 | 
							int x = Math.abs(getX() - city.getX());
 | 
				
			||||||
 | 
							int y = Math.abs(getY() - city.getY());
 | 
				
			||||||
 | 
							return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.annealing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SimulatedAnnealing {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static Travel travel = new Travel(10);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static double simulateAnnealing(double startingTemperature, int numberOfIterations, double coolingRate) {
 | 
				
			||||||
 | 
					        System.out.println("Starting SA with temperature: " + startingTemperature + ", # of iterations: " + numberOfIterations + " and colling rate: " + coolingRate);
 | 
				
			||||||
 | 
					        double t = startingTemperature;
 | 
				
			||||||
 | 
					        travel.generateInitialTravel();
 | 
				
			||||||
 | 
					        double bestDistance = travel.getDistance();
 | 
				
			||||||
 | 
					        System.out.println("Initial distance of travel: " + bestDistance);
 | 
				
			||||||
 | 
					        Travel bestSolution = travel;
 | 
				
			||||||
 | 
					        Travel currentSolution = bestSolution;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (int i = 0; i < numberOfIterations; i++) {
 | 
				
			||||||
 | 
					            if (t > 0.1) {
 | 
				
			||||||
 | 
					                currentSolution.swapCities();
 | 
				
			||||||
 | 
					                double currentDistance = currentSolution.getDistance();
 | 
				
			||||||
 | 
					                if (currentDistance < bestDistance) {
 | 
				
			||||||
 | 
					                    bestDistance = currentDistance;
 | 
				
			||||||
 | 
					                } else if (Math.exp((bestDistance - currentDistance) / t) < Math.random()) {
 | 
				
			||||||
 | 
					                    currentSolution.revertSwap();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                t *= coolingRate;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					            	continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (i % 100 == 0) {
 | 
				
			||||||
 | 
					                System.out.println("Iteration #" + i);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return bestDistance;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.annealing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Collections;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					public class Travel {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private ArrayList<City> travel = new ArrayList<>();
 | 
				
			||||||
 | 
					    private ArrayList<City> previousTravel = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Travel(int numberOfCities) {
 | 
				
			||||||
 | 
					        for (int i = 0; i < numberOfCities; i++) {
 | 
				
			||||||
 | 
					            travel.add(new City());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void generateInitialTravel() {
 | 
				
			||||||
 | 
					        if (travel.isEmpty())
 | 
				
			||||||
 | 
					            new Travel(10);
 | 
				
			||||||
 | 
					        Collections.shuffle(travel);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void swapCities() {
 | 
				
			||||||
 | 
					        int a = generateRandomIndex();
 | 
				
			||||||
 | 
					        int b = generateRandomIndex();
 | 
				
			||||||
 | 
					        previousTravel = travel;
 | 
				
			||||||
 | 
					        City x = travel.get(a);
 | 
				
			||||||
 | 
					        City y = travel.get(b);
 | 
				
			||||||
 | 
					        travel.set(a, y);
 | 
				
			||||||
 | 
					        travel.set(b, x);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void revertSwap() {
 | 
				
			||||||
 | 
					        travel = previousTravel;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private int generateRandomIndex() {
 | 
				
			||||||
 | 
					        return (int) (Math.random() * travel.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public City getCity(int index) {
 | 
				
			||||||
 | 
					        return travel.get(index);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getDistance() {
 | 
				
			||||||
 | 
					        int distance = 0;
 | 
				
			||||||
 | 
					        for (int index = 0; index < travel.size(); index++) {
 | 
				
			||||||
 | 
					            City starting = getCity(index);
 | 
				
			||||||
 | 
					            City destination;
 | 
				
			||||||
 | 
					            if (index + 1 < travel.size()) {
 | 
				
			||||||
 | 
					                destination = getCity(index + 1);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                destination = getCity(0);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            distance += starting.distanceToCity(destination);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return distance;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.slope_one;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.HashSet;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					public class InputData {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						protected static List<Item> items = Arrays.asList(new Item("Candy"), new Item("Drink"), new Item("Soda"), new Item("Popcorn"),
 | 
				
			||||||
 | 
								new Item("Snacks"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static Map<User, HashMap<Item, Double>> initializeData(int numberOfUsers) {
 | 
				
			||||||
 | 
							Map<User, HashMap<Item, Double>> data = new HashMap<>();
 | 
				
			||||||
 | 
							HashMap<Item, Double> newUser;
 | 
				
			||||||
 | 
							Set<Item> newRecommendationSet;
 | 
				
			||||||
 | 
							for (int i = 0; i < numberOfUsers; i++) {
 | 
				
			||||||
 | 
								newUser = new HashMap<Item, Double>();
 | 
				
			||||||
 | 
								newRecommendationSet = new HashSet<>();
 | 
				
			||||||
 | 
								for (int j = 0; j < 3; j++) {
 | 
				
			||||||
 | 
									newRecommendationSet.add(items.get((int) (Math.random() * 5)));
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for (Item item : newRecommendationSet) {
 | 
				
			||||||
 | 
									newUser.put(item, Math.random());
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								data.put(new User("User " + i), newUser);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return data;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.slope_one;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.AllArgsConstructor;
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					import lombok.NoArgsConstructor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					@NoArgsConstructor
 | 
				
			||||||
 | 
					@AllArgsConstructor
 | 
				
			||||||
 | 
					public class Item {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private String itemName;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.slope_one;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.text.DecimalFormat;
 | 
				
			||||||
 | 
					import java.text.NumberFormat;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Slope One algorithm implementation
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class SlopeOne {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static Map<Item, Map<Item, Double>> diff = new HashMap<>();
 | 
				
			||||||
 | 
						private static Map<Item, Map<Item, Integer>> freq = new HashMap<>();
 | 
				
			||||||
 | 
						private static Map<User, HashMap<Item, Double>> inputData;
 | 
				
			||||||
 | 
						private static Map<User, HashMap<Item, Double>> outputData = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static void slopeOne(int numberOfUsers) {
 | 
				
			||||||
 | 
							inputData = InputData.initializeData(numberOfUsers);
 | 
				
			||||||
 | 
							System.out.println("Slope One - Before the Prediction\n");
 | 
				
			||||||
 | 
							buildDifferencesMatrix(inputData);
 | 
				
			||||||
 | 
							System.out.println("\nSlope One - With Predictions\n");
 | 
				
			||||||
 | 
							predict(inputData);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Based on the available data, calculate the relationships between the
 | 
				
			||||||
 | 
						 * items and number of occurences
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param data
 | 
				
			||||||
 | 
						 *            existing user data and their items' ratings
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private static void buildDifferencesMatrix(Map<User, HashMap<Item, Double>> data) {
 | 
				
			||||||
 | 
							for (HashMap<Item, Double> user : data.values()) {
 | 
				
			||||||
 | 
								for (Entry<Item, Double> e : user.entrySet()) {
 | 
				
			||||||
 | 
									if (!diff.containsKey(e.getKey())) {
 | 
				
			||||||
 | 
										diff.put(e.getKey(), new HashMap<Item, Double>());
 | 
				
			||||||
 | 
										freq.put(e.getKey(), new HashMap<Item, Integer>());
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									for (Entry<Item, Double> e2 : user.entrySet()) {
 | 
				
			||||||
 | 
										int oldCount = 0;
 | 
				
			||||||
 | 
										if (freq.get(e.getKey()).containsKey(e2.getKey())) {
 | 
				
			||||||
 | 
											oldCount = freq.get(e.getKey()).get(e2.getKey()).intValue();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										double oldDiff = 0.0;
 | 
				
			||||||
 | 
										if (diff.get(e.getKey()).containsKey(e2.getKey())) {
 | 
				
			||||||
 | 
											oldDiff = diff.get(e.getKey()).get(e2.getKey()).doubleValue();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										double observedDiff = e.getValue() - e2.getValue();
 | 
				
			||||||
 | 
										freq.get(e.getKey()).put(e2.getKey(), oldCount + 1);
 | 
				
			||||||
 | 
										diff.get(e.getKey()).put(e2.getKey(), oldDiff + observedDiff);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for (Item j : diff.keySet()) {
 | 
				
			||||||
 | 
								for (Item i : diff.get(j).keySet()) {
 | 
				
			||||||
 | 
									double oldValue = diff.get(j).get(i).doubleValue();
 | 
				
			||||||
 | 
									int count = freq.get(j).get(i).intValue();
 | 
				
			||||||
 | 
									diff.get(j).put(i, oldValue / count);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							printData(data);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Based on existing data predict all missing ratings. If prediction is not
 | 
				
			||||||
 | 
						 * possible, the value will be equal to -1
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param data
 | 
				
			||||||
 | 
						 *            existing user data and their items' ratings
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private static void predict(Map<User, HashMap<Item, Double>> data) {
 | 
				
			||||||
 | 
							HashMap<Item, Double> uPred = new HashMap<Item, Double>();
 | 
				
			||||||
 | 
							HashMap<Item, Integer> uFreq = new HashMap<Item, Integer>();
 | 
				
			||||||
 | 
							for (Item j : diff.keySet()) {
 | 
				
			||||||
 | 
								uFreq.put(j, 0);
 | 
				
			||||||
 | 
								uPred.put(j, 0.0);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							for (Entry<User, HashMap<Item, Double>> e : data.entrySet()) {
 | 
				
			||||||
 | 
								for (Item j : e.getValue().keySet()) {
 | 
				
			||||||
 | 
									for (Item k : diff.keySet()) {
 | 
				
			||||||
 | 
										try {
 | 
				
			||||||
 | 
											double predictedValue = diff.get(k).get(j).doubleValue() + e.getValue().get(j).doubleValue();
 | 
				
			||||||
 | 
											double finalValue = predictedValue * freq.get(k).get(j).intValue();
 | 
				
			||||||
 | 
											uPred.put(k, uPred.get(k) + finalValue);
 | 
				
			||||||
 | 
											uFreq.put(k, uFreq.get(k) + freq.get(k).get(j).intValue());
 | 
				
			||||||
 | 
										} catch (NullPointerException e1) {
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								HashMap<Item, Double> clean = new HashMap<Item, Double>();
 | 
				
			||||||
 | 
								for (Item j : uPred.keySet()) {
 | 
				
			||||||
 | 
									if (uFreq.get(j) > 0) {
 | 
				
			||||||
 | 
										clean.put(j, uPred.get(j).doubleValue() / uFreq.get(j).intValue());
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for (Item j : InputData.items) {
 | 
				
			||||||
 | 
									if (e.getValue().containsKey(j)) {
 | 
				
			||||||
 | 
										clean.put(j, e.getValue().get(j));
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										clean.put(j, -1.0);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								outputData.put(e.getKey(), clean);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							printData(outputData);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static void printData(Map<User, HashMap<Item, Double>> data) {
 | 
				
			||||||
 | 
							for (User user : data.keySet()) {
 | 
				
			||||||
 | 
								System.out.println(user.getUsername() + ":");
 | 
				
			||||||
 | 
								print(data.get(user));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static void print(HashMap<Item, Double> hashMap) {
 | 
				
			||||||
 | 
							NumberFormat formatter = new DecimalFormat("#0.000");
 | 
				
			||||||
 | 
							for (Item j : hashMap.keySet()) {
 | 
				
			||||||
 | 
								System.out.println(" " + j.getItemName() + " --> " + formatter.format(hashMap.get(j).doubleValue()));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms.slope_one;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.AllArgsConstructor;
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					import lombok.NoArgsConstructor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					@NoArgsConstructor
 | 
				
			||||||
 | 
					@AllArgsConstructor
 | 
				
			||||||
 | 
					public class User {
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						private String username;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					package com.baeldung.dirmonitoring;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.apache.commons.io.monitor.FileAlterationListener;
 | 
				
			||||||
 | 
					import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
 | 
				
			||||||
 | 
					import org.apache.commons.io.monitor.FileAlterationMonitor;
 | 
				
			||||||
 | 
					import org.apache.commons.io.monitor.FileAlterationObserver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class DirectoryMonitoringExample {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static final int POLL_INTERVAL = 500;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void main(String[] args) throws Exception {
 | 
				
			||||||
 | 
					        FileAlterationObserver observer = new FileAlterationObserver(System.getProperty("user.home"));
 | 
				
			||||||
 | 
					        FileAlterationMonitor monitor = new FileAlterationMonitor(POLL_INTERVAL);
 | 
				
			||||||
 | 
					        FileAlterationListener listener = new FileAlterationListenerAdaptor() {
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onFileCreate(File file) {
 | 
				
			||||||
 | 
					                System.out.println("File: " + file.getName() + " created");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onFileDelete(File file) {
 | 
				
			||||||
 | 
					                System.out.println("File: " + file.getName() + " deleted");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void onFileChange(File file) {
 | 
				
			||||||
 | 
					                System.out.println("File: " + file.getName() + " changed");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        observer.addListener(listener);
 | 
				
			||||||
 | 
					        monitor.addObserver(observer);
 | 
				
			||||||
 | 
					        monitor.start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								core-java/src/main/java/com/baeldung/generics/Building.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								core-java/src/main/java/com/baeldung/generics/Building.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					package com.baeldung.generics;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Building {
 | 
				
			||||||
 | 
					    private static final Logger LOGGER = LoggerFactory.getLogger(Building.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void paint() {
 | 
				
			||||||
 | 
					        LOGGER.info("Painting Building");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										31
									
								
								core-java/src/main/java/com/baeldung/generics/Generics.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								core-java/src/main/java/com/baeldung/generics/Generics.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package com.baeldung.generics;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.function.Function;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Generics {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // definition of a generic method
 | 
				
			||||||
 | 
					    public static <T> List<T> fromArrayToList(T[] a) {
 | 
				
			||||||
 | 
					        return Arrays.stream(a).collect(Collectors.toList());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // definition of a generic method
 | 
				
			||||||
 | 
					    public static <T, G> List<G> fromArrayToList(T[] a, Function<T, G> mapperFunction) {
 | 
				
			||||||
 | 
					        return Arrays.stream(a).map(mapperFunction).collect(Collectors.toList());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // example of a generic method that has Number as an upper bound for T
 | 
				
			||||||
 | 
					    public static <T extends Number> List<T> fromArrayToListWithUpperBound(T[] a) {
 | 
				
			||||||
 | 
					        return Arrays.stream(a).collect(Collectors.toList());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // example of a generic method with a wild card, this method can be used
 | 
				
			||||||
 | 
					    // with a list of any subtype of Building
 | 
				
			||||||
 | 
					    public static void paintAllBuildings(List<? extends Building> buildings) {
 | 
				
			||||||
 | 
					        buildings.forEach(Building::paint);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								core-java/src/main/java/com/baeldung/generics/House.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								core-java/src/main/java/com/baeldung/generics/House.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					package com.baeldung.generics;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.slf4j.Logger;
 | 
				
			||||||
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class House extends Building {
 | 
				
			||||||
 | 
					    private static final Logger LOGGER = LoggerFactory.getLogger(House.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void paint() {
 | 
				
			||||||
 | 
					        LOGGER.info("Painting House");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,6 +1,5 @@
 | 
				
			|||||||
package com.baeldung.hashing;
 | 
					package com.baeldung.hashing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.google.common.hash.Hashing;
 | 
					import com.google.common.hash.Hashing;
 | 
				
			||||||
import org.apache.commons.codec.digest.DigestUtils;
 | 
					import org.apache.commons.codec.digest.DigestUtils;
 | 
				
			||||||
import org.bouncycastle.util.encoders.Hex;
 | 
					import org.bouncycastle.util.encoders.Hex;
 | 
				
			||||||
@ -11,17 +10,14 @@ import java.security.NoSuchAlgorithmException;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class SHA256Hashing {
 | 
					public class SHA256Hashing {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static String HashWithJavaMessageDigest(final String originalString)
 | 
					    public static String HashWithJavaMessageDigest(final String originalString) throws NoSuchAlgorithmException {
 | 
				
			||||||
            throws NoSuchAlgorithmException {
 | 
					 | 
				
			||||||
        final MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
					        final MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
				
			||||||
        final byte[] encodedhash = digest.digest(
 | 
					        final byte[] encodedhash = digest.digest(originalString.getBytes(StandardCharsets.UTF_8));
 | 
				
			||||||
                originalString.getBytes(StandardCharsets.UTF_8));
 | 
					 | 
				
			||||||
        return bytesToHex(encodedhash);
 | 
					        return bytesToHex(encodedhash);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static String HashWithGuava(final String originalString) {
 | 
					    public static String HashWithGuava(final String originalString) {
 | 
				
			||||||
        final String sha256hex = Hashing.sha256().hashString(
 | 
					        final String sha256hex = Hashing.sha256().hashString(originalString, StandardCharsets.UTF_8).toString();
 | 
				
			||||||
                originalString, StandardCharsets.UTF_8).toString();
 | 
					 | 
				
			||||||
        return sha256hex;
 | 
					        return sha256hex;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -30,11 +26,9 @@ public class SHA256Hashing {
 | 
				
			|||||||
        return sha256hex;
 | 
					        return sha256hex;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static String HashWithBouncyCastle(final String originalString)
 | 
					    public static String HashWithBouncyCastle(final String originalString) throws NoSuchAlgorithmException {
 | 
				
			||||||
            throws NoSuchAlgorithmException {
 | 
					 | 
				
			||||||
        final MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
					        final MessageDigest digest = MessageDigest.getInstance("SHA-256");
 | 
				
			||||||
        final byte[] hash = digest.digest(
 | 
					        final byte[] hash = digest.digest(originalString.getBytes(StandardCharsets.UTF_8));
 | 
				
			||||||
                originalString.getBytes(StandardCharsets.UTF_8));
 | 
					 | 
				
			||||||
        final String sha256hex = new String(Hex.encode(hash));
 | 
					        final String sha256hex = new String(Hex.encode(hash));
 | 
				
			||||||
        return sha256hex;
 | 
					        return sha256hex;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -43,7 +37,8 @@ public class SHA256Hashing {
 | 
				
			|||||||
        StringBuffer hexString = new StringBuffer();
 | 
					        StringBuffer hexString = new StringBuffer();
 | 
				
			||||||
        for (int i = 0; i < hash.length; i++) {
 | 
					        for (int i = 0; i < hash.length; i++) {
 | 
				
			||||||
            String hex = Integer.toHexString(0xff & hash[i]);
 | 
					            String hex = Integer.toHexString(0xff & hash[i]);
 | 
				
			||||||
            if(hex.length() == 1) hexString.append('0');
 | 
					            if (hex.length() == 1)
 | 
				
			||||||
 | 
					                hexString.append('0');
 | 
				
			||||||
            hexString.append(hex);
 | 
					            hexString.append(hex);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return hexString.toString();
 | 
					        return hexString.toString();
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										59
									
								
								core-java/src/main/java/com/baeldung/java/map/MyKey.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								core-java/src/main/java/com/baeldung/java/map/MyKey.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MyKey {
 | 
				
			||||||
 | 
					    private String name;
 | 
				
			||||||
 | 
					    private int id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public MyKey(int id, String name) {
 | 
				
			||||||
 | 
					        this.id = id;
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getName() {
 | 
				
			||||||
 | 
					        return name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public int getId() {
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setId(int id) {
 | 
				
			||||||
 | 
					        this.id = id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public int hashCode() {
 | 
				
			||||||
 | 
					        System.out.println("Calling hashCode()");
 | 
				
			||||||
 | 
					        return id;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public String toString() {
 | 
				
			||||||
 | 
					        return "MyKey [name=" + name + ", id=" + id + "]";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean equals(Object obj) {
 | 
				
			||||||
 | 
					        System.out.println("Calling equals() for key: " + obj);
 | 
				
			||||||
 | 
					        if (this == obj)
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        if (obj == null)
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        if (getClass() != obj.getClass())
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        MyKey other = (MyKey) obj;
 | 
				
			||||||
 | 
					        if (id != other.id)
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        if (name == null) {
 | 
				
			||||||
 | 
					            if (other.name != null)
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					        } else if (!name.equals(other.name))
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.LinkedHashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MyLinkedHashMap<K, V> extends LinkedHashMap<K, V> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static final long serialVersionUID = 1L;
 | 
				
			||||||
 | 
					    private static final int MAX_ENTRIES = 5;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public MyLinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) {
 | 
				
			||||||
 | 
					        super(initialCapacity, loadFactor, accessOrder);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected boolean removeEldestEntry(Map.Entry eldest) {
 | 
				
			||||||
 | 
					        return size() > MAX_ENTRIES;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [A Guide To UDP In Java](http://www.baeldung.com/udp-in-java)
 | 
				
			||||||
 | 
					- [A Guide To HTTP Cookies In Java](http://www.baeldung.com/cookies-java)
 | 
				
			||||||
 | 
					- [A Guide to the Java URL](http://www.baeldung.com/java-url)
 | 
				
			||||||
 | 
					- [Working with Network Interfaces in Java](http://www.baeldung.com/java-network-interfaces)
 | 
				
			||||||
@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					###Relevant Articles:
 | 
				
			||||||
 | 
					- [Introduction to the Java NIO Selector](http://www.baeldung.com/java-nio-selector)
 | 
				
			||||||
@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.nio2.visitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.nio.file.*;
 | 
				
			||||||
 | 
					import java.nio.file.attribute.BasicFileAttributes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static java.nio.file.FileVisitResult.CONTINUE;
 | 
				
			||||||
 | 
					import static java.nio.file.FileVisitResult.TERMINATE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class FileSearchExample implements FileVisitor<Path> {
 | 
				
			||||||
 | 
					    private final String fileName;
 | 
				
			||||||
 | 
					    private final Path startDir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public FileSearchExample(String fileName, Path startingDir) {
 | 
				
			||||||
 | 
					        this.fileName = fileName;
 | 
				
			||||||
 | 
					        startDir = startingDir;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
 | 
				
			||||||
 | 
					        return CONTINUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
 | 
				
			||||||
 | 
					        String fileName = file.getFileName().toString();
 | 
				
			||||||
 | 
					        if (this.fileName.equals(fileName)) {
 | 
				
			||||||
 | 
					            System.out.println("File found: " + file.toString());
 | 
				
			||||||
 | 
					            return TERMINATE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return CONTINUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
 | 
				
			||||||
 | 
					        System.out.println("Failed to access file: " + file.toString());
 | 
				
			||||||
 | 
					        return CONTINUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
 | 
				
			||||||
 | 
					        boolean finishedSearch = Files.isSameFile(dir, startDir);
 | 
				
			||||||
 | 
					        if (finishedSearch) {
 | 
				
			||||||
 | 
					            System.out.println("File:" + fileName + " not found");
 | 
				
			||||||
 | 
					            return TERMINATE;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return CONTINUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void main(String[] args) throws IOException {
 | 
				
			||||||
 | 
					        Path startingDir = Paths.get("C:/Users/new/Desktop");
 | 
				
			||||||
 | 
					        FileSearchExample crawler = new FileSearchExample("hibernate.txt", startingDir);
 | 
				
			||||||
 | 
					        Files.walkFileTree(startingDir, crawler);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.nio2.visitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.nio.file.FileVisitResult;
 | 
				
			||||||
 | 
					import java.nio.file.FileVisitor;
 | 
				
			||||||
 | 
					import java.nio.file.Path;
 | 
				
			||||||
 | 
					import java.nio.file.attribute.BasicFileAttributes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class FileVisitorImpl implements FileVisitor<Path> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult visitFileFailed(Path file, IOException exc) {
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.nio2.watcher;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.nio.file.FileSystems;
 | 
				
			||||||
 | 
					import java.nio.file.Path;
 | 
				
			||||||
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
 | 
					import java.nio.file.StandardWatchEventKinds;
 | 
				
			||||||
 | 
					import java.nio.file.WatchEvent;
 | 
				
			||||||
 | 
					import java.nio.file.WatchKey;
 | 
				
			||||||
 | 
					import java.nio.file.WatchService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class DirectoryWatcherExample {
 | 
				
			||||||
 | 
					    public static void main(String[] args) throws IOException, InterruptedException {
 | 
				
			||||||
 | 
					        WatchService watchService = FileSystems.getDefault().newWatchService();
 | 
				
			||||||
 | 
					        Path path = Paths.get(System.getProperty("user.home"));
 | 
				
			||||||
 | 
					        path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
 | 
				
			||||||
 | 
					        WatchKey key;
 | 
				
			||||||
 | 
					        while ((key = watchService.take()) != null) {
 | 
				
			||||||
 | 
					            for (WatchEvent<?> event : key.pollEvents()) {
 | 
				
			||||||
 | 
					                System.out.println("Event kind:" + event.kind() + ". File affected: " + event.context() + ".");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            key.reset();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								core-java/src/main/java/com/baeldung/jmx/Game.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								core-java/src/main/java/com/baeldung/jmx/Game.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					package com.baeldung.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Game implements GameMBean {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String playerName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void playFootball(String clubName) {
 | 
				
			||||||
 | 
					        System.out.println(this.playerName + " playing football for " + clubName);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public String getPlayerName() {
 | 
				
			||||||
 | 
					        System.out.println("Return playerName " + this.playerName);
 | 
				
			||||||
 | 
					        return playerName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void setPlayerName(String playerName) {
 | 
				
			||||||
 | 
					        System.out.println("Set playerName to value " + playerName);
 | 
				
			||||||
 | 
					        this.playerName = playerName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										11
									
								
								core-java/src/main/java/com/baeldung/jmx/GameMBean.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								core-java/src/main/java/com/baeldung/jmx/GameMBean.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					package com.baeldung.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface GameMBean {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void playFootball(String clubName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getPlayerName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setPlayerName(String playerName);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					package com.baeldung.jmx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.lang.management.ManagementFactory;
 | 
				
			||||||
 | 
					import javax.management.InstanceAlreadyExistsException;
 | 
				
			||||||
 | 
					import javax.management.MBeanRegistrationException;
 | 
				
			||||||
 | 
					import javax.management.MBeanServer;
 | 
				
			||||||
 | 
					import javax.management.MalformedObjectNameException;
 | 
				
			||||||
 | 
					import javax.management.NotCompliantMBeanException;
 | 
				
			||||||
 | 
					import javax.management.ObjectName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class JMXTutorialMainlauncher {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static void main(String[] args) {
 | 
				
			||||||
 | 
					        // TODO Auto-generated method stub
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("This is basic JMX tutorial");
 | 
				
			||||||
 | 
					        ObjectName objectName = null;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game");
 | 
				
			||||||
 | 
					        } catch (MalformedObjectNameException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
 | 
				
			||||||
 | 
					        Game gameObj = new Game();
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            server.registerMBean(gameObj, objectName);
 | 
				
			||||||
 | 
					        } catch (InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        System.out.println("Registration for Game mbean with the platform server is successfull");
 | 
				
			||||||
 | 
					        System.out.println("Please open jconsole to access Game mbean");
 | 
				
			||||||
 | 
					        while (true) {
 | 
				
			||||||
 | 
					            // to ensure application does not terminate
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								core-java/src/main/java/com/baeldung/optional/Modem.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								core-java/src/main/java/com/baeldung/optional/Modem.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					package com.baeldung.optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Modem {
 | 
				
			||||||
 | 
					    private Double price;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Modem(Double price) {
 | 
				
			||||||
 | 
					        this.price = price;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Double getPrice() {
 | 
				
			||||||
 | 
					        return price;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								core-java/src/main/java/com/baeldung/optional/Person.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								core-java/src/main/java/com/baeldung/optional/Person.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					package com.baeldung.optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Optional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Person {
 | 
				
			||||||
 | 
					    private String name;
 | 
				
			||||||
 | 
					    private int age;
 | 
				
			||||||
 | 
					    private String password;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Person(String name, int age) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					        this.age = age;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Optional<String> getName() {
 | 
				
			||||||
 | 
					        return Optional.ofNullable(name);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setName(String name) {
 | 
				
			||||||
 | 
					        this.name = name;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Optional<Integer> getAge() {
 | 
				
			||||||
 | 
					        return Optional.ofNullable(age);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setAge(int age) {
 | 
				
			||||||
 | 
					        this.age = age;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setPassword(String password) {
 | 
				
			||||||
 | 
					        this.password = password;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public Optional<String> getPassword() {
 | 
				
			||||||
 | 
					        return Optional.ofNullable(password);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
 | 
				
			||||||
@ -16,10 +16,10 @@ public class ExitingExecutorServiceExample {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public static void main(String... args) {
 | 
					    public static void main(String... args) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
 | 
					        final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(5);
 | 
				
			||||||
        ExecutorService executorService = MoreExecutors.getExitingExecutorService(executor, 100, TimeUnit.MILLISECONDS);
 | 
					        final ExecutorService executorService = MoreExecutors.getExitingExecutorService(executor, 100, TimeUnit.MILLISECONDS);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        executorService.submit(() -> {
 | 
					        executorService.submit((Runnable) () -> {
 | 
				
			||||||
            while (true) {
 | 
					            while (true) {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								core-java/src/main/resources/js/bind.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								core-java/src/main/resources/js/bind.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					var first = {
 | 
				
			||||||
 | 
					    name: "Whiskey",
 | 
				
			||||||
 | 
					    age: 5
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var second = {
 | 
				
			||||||
 | 
					    volume: 100
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Object.bindProperties(first, second);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print(first.volume);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					second.volume = 1000;
 | 
				
			||||||
 | 
					print(first.volume);
 | 
				
			||||||
							
								
								
									
										1
									
								
								core-java/src/main/resources/js/locations.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java/src/main/resources/js/locations.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					print(__FILE__, __LINE__, __DIR__);
 | 
				
			||||||
							
								
								
									
										19
									
								
								core-java/src/main/resources/js/math_module.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								core-java/src/main/resources/js/math_module.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					var math = {
 | 
				
			||||||
 | 
					    increment: function (num) {
 | 
				
			||||||
 | 
					        return ++num;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    failFunc: function () {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            throw "BOOM";
 | 
				
			||||||
 | 
					        } catch (e if typeof e === 'string') {
 | 
				
			||||||
 | 
					            print("String thrown: " + e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        catch (e) {
 | 
				
			||||||
 | 
					            print("this shouldn't happen!");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					math;
 | 
				
			||||||
							
								
								
									
										11
									
								
								core-java/src/main/resources/js/no_such.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								core-java/src/main/resources/js/no_such.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					var demo = {
 | 
				
			||||||
 | 
					    __noSuchProperty__: function (propName) {
 | 
				
			||||||
 | 
					        print("Accessed non-existing property: " + propName);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    __noSuchMethod__: function (methodName) {
 | 
				
			||||||
 | 
					        print("Invoked non-existing method: " + methodName);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					demo;
 | 
				
			||||||
							
								
								
									
										1
									
								
								core-java/src/main/resources/js/script.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								core-java/src/main/resources/js/script.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					function increment(num) ++num;
 | 
				
			||||||
							
								
								
									
										2
									
								
								core-java/src/main/resources/js/trim.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								core-java/src/main/resources/js/trim.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					print("   hello world".trimLeft());
 | 
				
			||||||
 | 
					print("hello world     ".trimRight());
 | 
				
			||||||
							
								
								
									
										9
									
								
								core-java/src/main/resources/js/typed_arrays.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								core-java/src/main/resources/js/typed_arrays.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					function arrays(arr) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var javaIntArray = Java.to(arr, "int[]");
 | 
				
			||||||
 | 
					    print(javaIntArray[0]);
 | 
				
			||||||
 | 
					    print(javaIntArray[1]);
 | 
				
			||||||
 | 
					    print(javaIntArray[2]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					arrays([100, "1654", true]);
 | 
				
			||||||
@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					package com.baeldung.algorithms;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Assert;
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baeldung.algorithms.annealing.SimulatedAnnealing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SimulatedAnnealingTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void testSimulateAnnealing() {
 | 
				
			||||||
 | 
					        Assert.assertTrue(SimulatedAnnealing.simulateAnnealing(10, 1000, 0.9) > 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -42,80 +42,116 @@ public class Java8CollectorsUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToList_shouldCollectToList() throws Exception {
 | 
					    public void whenCollectingToList_shouldCollectToList() throws Exception {
 | 
				
			||||||
        final List<String> result = givenList.stream().collect(toList());
 | 
					        final List<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toList());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsAll(givenList);
 | 
					        assertThat(result).containsAll(givenList);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToList_shouldCollectToSet() throws Exception {
 | 
					    public void whenCollectingToList_shouldCollectToSet() throws Exception {
 | 
				
			||||||
        final Set<String> result = givenList.stream().collect(toSet());
 | 
					        final Set<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toSet());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsAll(givenList);
 | 
					        assertThat(result).containsAll(givenList);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToCollection_shouldCollectToCollection() throws Exception {
 | 
					    public void whenCollectingToCollection_shouldCollectToCollection() throws Exception {
 | 
				
			||||||
        final List<String> result = givenList.stream().collect(toCollection(LinkedList::new));
 | 
					        final List<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toCollection(LinkedList::new));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsAll(givenList).isInstanceOf(LinkedList.class);
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsAll(givenList)
 | 
				
			||||||
 | 
					          .isInstanceOf(LinkedList.class);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToImmutableCollection_shouldThrowException() throws Exception {
 | 
					    public void whenCollectingToImmutableCollection_shouldThrowException() throws Exception {
 | 
				
			||||||
        assertThatThrownBy(() -> {
 | 
					        assertThatThrownBy(() -> {
 | 
				
			||||||
            givenList.stream().collect(toCollection(ImmutableList::of));
 | 
					            givenList
 | 
				
			||||||
 | 
					              .stream()
 | 
				
			||||||
 | 
					              .collect(toCollection(ImmutableList::of));
 | 
				
			||||||
        }).isInstanceOf(UnsupportedOperationException.class);
 | 
					        }).isInstanceOf(UnsupportedOperationException.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToMap_shouldCollectToMap() throws Exception {
 | 
					    public void whenCollectingToMap_shouldCollectToMap() throws Exception {
 | 
				
			||||||
        final Map<String, Integer> result = givenList.stream().collect(toMap(Function.identity(), String::length));
 | 
					        final Map<String, Integer> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toMap(Function.identity(), String::length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsEntry("a", 1).containsEntry("bb", 2).containsEntry("ccc", 3).containsEntry("dd", 2);
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsEntry("a", 1)
 | 
				
			||||||
 | 
					          .containsEntry("bb", 2)
 | 
				
			||||||
 | 
					          .containsEntry("ccc", 3)
 | 
				
			||||||
 | 
					          .containsEntry("dd", 2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingToMap_shouldCollectToMapMerging() throws Exception {
 | 
					    public void whenCollectingToMap_shouldCollectToMapMerging() throws Exception {
 | 
				
			||||||
        final Map<String, Integer> result = givenList.stream().collect(toMap(Function.identity(), String::length, (i1, i2) -> i1));
 | 
					        final Map<String, Integer> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toMap(Function.identity(), String::length, (i1, i2) -> i1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsEntry("a", 1).containsEntry("bb", 2).containsEntry("ccc", 3).containsEntry("dd", 2);
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsEntry("a", 1)
 | 
				
			||||||
 | 
					          .containsEntry("bb", 2)
 | 
				
			||||||
 | 
					          .containsEntry("ccc", 3)
 | 
				
			||||||
 | 
					          .containsEntry("dd", 2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCollectingAndThen_shouldCollect() throws Exception {
 | 
					    public void whenCollectingAndThen_shouldCollect() throws Exception {
 | 
				
			||||||
        final List<String> result = givenList.stream().collect(collectingAndThen(toList(), ImmutableList::copyOf));
 | 
					        final List<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(collectingAndThen(toList(), ImmutableList::copyOf));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsAll(givenList).isInstanceOf(ImmutableList.class);
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsAll(givenList)
 | 
				
			||||||
 | 
					          .isInstanceOf(ImmutableList.class);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenJoining_shouldJoin() throws Exception {
 | 
					    public void whenJoining_shouldJoin() throws Exception {
 | 
				
			||||||
        final String result = givenList.stream().collect(joining());
 | 
					        final String result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(joining());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo("abbcccdd");
 | 
					        assertThat(result).isEqualTo("abbcccdd");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenJoiningWithSeparator_shouldJoinWithSeparator() throws Exception {
 | 
					    public void whenJoiningWithSeparator_shouldJoinWithSeparator() throws Exception {
 | 
				
			||||||
        final String result = givenList.stream().collect(joining(" "));
 | 
					        final String result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(joining(" "));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo("a bb ccc dd");
 | 
					        assertThat(result).isEqualTo("a bb ccc dd");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenJoiningWithSeparatorAndPrefixAndPostfix_shouldJoinWithSeparatorPrePost() throws Exception {
 | 
					    public void whenJoiningWithSeparatorAndPrefixAndPostfix_shouldJoinWithSeparatorPrePost() throws Exception {
 | 
				
			||||||
        final String result = givenList.stream().collect(joining(" ", "PRE-", "-POST"));
 | 
					        final String result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(joining(" ", "PRE-", "-POST"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo("PRE-a bb ccc dd-POST");
 | 
					        assertThat(result).isEqualTo("PRE-a bb ccc dd-POST");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenPartitioningBy_shouldPartition() throws Exception {
 | 
					    public void whenPartitioningBy_shouldPartition() throws Exception {
 | 
				
			||||||
        final Map<Boolean, List<String>> result = givenList.stream().collect(partitioningBy(s -> s.length() > 2));
 | 
					        final Map<Boolean, List<String>> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(partitioningBy(s -> s.length() > 2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsKeys(true, false).satisfies(booleanListMap -> {
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsKeys(true, false)
 | 
				
			||||||
 | 
					          .satisfies(booleanListMap -> {
 | 
				
			||||||
              assertThat(booleanListMap.get(true)).contains("ccc");
 | 
					              assertThat(booleanListMap.get(true)).contains("ccc");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              assertThat(booleanListMap.get(false)).contains("a", "bb", "dd");
 | 
					              assertThat(booleanListMap.get(false)).contains("a", "bb", "dd");
 | 
				
			||||||
@ -124,14 +160,18 @@ public class Java8CollectorsUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCounting_shouldCount() throws Exception {
 | 
					    public void whenCounting_shouldCount() throws Exception {
 | 
				
			||||||
        final Long result = givenList.stream().collect(counting());
 | 
					        final Long result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(counting());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo(4);
 | 
					        assertThat(result).isEqualTo(4);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenSummarizing_shouldSummarize() throws Exception {
 | 
					    public void whenSummarizing_shouldSummarize() throws Exception {
 | 
				
			||||||
        final DoubleSummaryStatistics result = givenList.stream().collect(summarizingDouble(String::length));
 | 
					        final DoubleSummaryStatistics result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(summarizingDouble(String::length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result.getAverage()).isEqualTo(2);
 | 
					        assertThat(result.getAverage()).isEqualTo(2);
 | 
				
			||||||
        assertThat(result.getCount()).isEqualTo(4);
 | 
					        assertThat(result.getCount()).isEqualTo(4);
 | 
				
			||||||
@ -142,37 +182,55 @@ public class Java8CollectorsUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenAveraging_shouldAverage() throws Exception {
 | 
					    public void whenAveraging_shouldAverage() throws Exception {
 | 
				
			||||||
        final Double result = givenList.stream().collect(averagingDouble(String::length));
 | 
					        final Double result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(averagingDouble(String::length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo(2);
 | 
					        assertThat(result).isEqualTo(2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenSumming_shouldSum() throws Exception {
 | 
					    public void whenSumming_shouldSum() throws Exception {
 | 
				
			||||||
        final Double result = givenList.stream().collect(summingDouble(String::length));
 | 
					        final Double result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .filter(i -> true)
 | 
				
			||||||
 | 
					          .collect(summingDouble(String::length));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isEqualTo(8);
 | 
					        assertThat(result).isEqualTo(8);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenMaxingBy_shouldMaxBy() throws Exception {
 | 
					    public void whenMaxingBy_shouldMaxBy() throws Exception {
 | 
				
			||||||
        final Optional<String> result = givenList.stream().collect(maxBy(Comparator.naturalOrder()));
 | 
					        final Optional<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(maxBy(Comparator.naturalOrder()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isPresent().hasValue("dd");
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .isPresent()
 | 
				
			||||||
 | 
					          .hasValue("dd");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenGroupingBy_shouldGroupBy() throws Exception {
 | 
					    public void whenGroupingBy_shouldGroupBy() throws Exception {
 | 
				
			||||||
        final Map<Integer, Set<String>> result = givenList.stream().collect(groupingBy(String::length, toSet()));
 | 
					        final Map<Integer, Set<String>> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(groupingBy(String::length, toSet()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).containsEntry(1, newHashSet("a")).containsEntry(2, newHashSet("bb", "dd")).containsEntry(3, newHashSet("ccc"));
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .containsEntry(1, newHashSet("a"))
 | 
				
			||||||
 | 
					          .containsEntry(2, newHashSet("bb", "dd"))
 | 
				
			||||||
 | 
					          .containsEntry(3, newHashSet("ccc"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void whenCreatingCustomCollector_shouldCollect() throws Exception {
 | 
					    public void whenCreatingCustomCollector_shouldCollect() throws Exception {
 | 
				
			||||||
        final ImmutableSet<String> result = givenList.stream().collect(toImmutableSet());
 | 
					        final ImmutableSet<String> result = givenList
 | 
				
			||||||
 | 
					          .stream()
 | 
				
			||||||
 | 
					          .collect(toImmutableSet());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertThat(result).isInstanceOf(ImmutableSet.class).contains("a", "bb", "ccc", "dd");
 | 
					        assertThat(result)
 | 
				
			||||||
 | 
					          .isInstanceOf(ImmutableSet.class)
 | 
				
			||||||
 | 
					          .contains("a", "bb", "ccc", "dd");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,20 +7,20 @@ import org.slf4j.Logger;
 | 
				
			|||||||
import org.slf4j.LoggerFactory;
 | 
					import org.slf4j.LoggerFactory;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.UnsupportedEncodingException;
 | 
					import java.io.UnsupportedEncodingException;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.*;
 | 
				
			||||||
import java.net.URLDecoder;
 | 
					 | 
				
			||||||
import java.net.URLEncoder;
 | 
					 | 
				
			||||||
import java.nio.charset.StandardCharsets;
 | 
					import java.nio.charset.StandardCharsets;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.Arrays;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static java.util.stream.Collectors.joining;
 | 
					import static java.util.stream.Collectors.joining;
 | 
				
			||||||
 | 
					import static org.hamcrest.CoreMatchers.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class EncoderDecoderUnitTest {
 | 
					public class EncoderDecoderUnitTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger LOGGER = LoggerFactory.getLogger(EncoderDecoderUnitTest.class);
 | 
					    private static final Logger LOGGER = LoggerFactory.getLogger(EncoderDecoderUnitTest.class);
 | 
				
			||||||
    private static final String testUrl = "http://www.baeldung.com?key1=value+1&key2=value%40%21%242&key3=value%253";
 | 
					    private static final String testUrl = "http://www.baeldung.com?key1=value+1&key2=value%40%21%242&key3=value%253";
 | 
				
			||||||
 | 
					    private static final String testUrlWithPath = "http://www.baeldung.com/path+1?key1=value+1&key2=value%40%21%242&key3=value%253";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private String encodeValue(String value) {
 | 
					    private String encodeValue(String value) {
 | 
				
			||||||
        String encoded = null;
 | 
					        String encoded = null;
 | 
				
			||||||
@ -46,9 +46,9 @@ public class EncoderDecoderUnitTest {
 | 
				
			|||||||
    public void givenURL_whenAnalyze_thenCorrect() throws Exception {
 | 
					    public void givenURL_whenAnalyze_thenCorrect() throws Exception {
 | 
				
			||||||
        URL url = new URL(testUrl);
 | 
					        URL url = new URL(testUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Assert.assertThat(url.getProtocol(), CoreMatchers.is("http"));
 | 
					        Assert.assertThat(url.getProtocol(), is("http"));
 | 
				
			||||||
        Assert.assertThat(url.getHost(), CoreMatchers.is("www.baeldung.com"));
 | 
					        Assert.assertThat(url.getHost(), is("www.baeldung.com"));
 | 
				
			||||||
        Assert.assertThat(url.getQuery(), CoreMatchers.is("key1=value+1&key2=value%40%21%242&key3=value%253"));
 | 
					        Assert.assertThat(url.getQuery(), is("key1=value+1&key2=value%40%21%242&key3=value%253"));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@ -60,7 +60,7 @@ public class EncoderDecoderUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        String encodedURL = requestParams.keySet().stream().map(key -> key + "=" + encodeValue(requestParams.get(key))).collect(joining("&", "http://www.baeldung.com?", ""));
 | 
					        String encodedURL = requestParams.keySet().stream().map(key -> key + "=" + encodeValue(requestParams.get(key))).collect(joining("&", "http://www.baeldung.com?", ""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Assert.assertThat(testUrl, CoreMatchers.is(encodedURL));
 | 
					        Assert.assertThat(testUrl, is(encodedURL));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@ -74,4 +74,35 @@ public class EncoderDecoderUnitTest {
 | 
				
			|||||||
        Assert.assertEquals("http://www.baeldung.com?key1=value 1&key2=value@!$2&key3=value%3", url.getProtocol() + "://" + url.getHost() + "?" + decodedQuery);
 | 
					        Assert.assertEquals("http://www.baeldung.com?key1=value 1&key2=value@!$2&key3=value%3", url.getProtocol() + "://" + url.getHost() + "?" + decodedQuery);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private String encodePath(String path) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            path = new URI(null, null, path, null).getPath();
 | 
				
			||||||
 | 
					        } catch (URISyntaxException e) {
 | 
				
			||||||
 | 
					            LOGGER.error("Error encoding parameter {}", e.getMessage(), e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return path;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenPath_thenEncodeDecodePath() throws URISyntaxException {
 | 
				
			||||||
 | 
					        URI uri = new URI(null, null, "/Path 1/Path+2", null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Assert.assertEquals("/Path 1/Path+2", uri.getPath());
 | 
				
			||||||
 | 
					        Assert.assertEquals("/Path%201/Path+2", uri.getRawPath());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenPathAndRequestParam_whenUTF8Scheme_thenEncode() throws Exception {
 | 
				
			||||||
 | 
					        Map<String, String> requestParams = new HashMap<>();
 | 
				
			||||||
 | 
					        requestParams.put("key1", "value 1");
 | 
				
			||||||
 | 
					        requestParams.put("key2", "value@!$2");
 | 
				
			||||||
 | 
					        requestParams.put("key3", "value%3");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String path = "path+1";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String encodedURL = requestParams.keySet().stream().map(key -> key + "=" + encodeValue(requestParams.get(key))).collect(joining("&", "http://www.baeldung.com/" + encodePath(path) + "?", ""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Assert.assertThat(testUrlWithPath, is(encodedURL));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,12 @@
 | 
				
			|||||||
package com.baeldung.file;
 | 
					package com.baeldung.file;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.BufferedReader;
 | 
					import org.apache.commons.io.FileUtils;
 | 
				
			||||||
import java.io.File;
 | 
					import org.hamcrest.CoreMatchers;
 | 
				
			||||||
import java.io.FileInputStream;
 | 
					import org.hamcrest.Matchers;
 | 
				
			||||||
import java.io.IOException;
 | 
					import org.junit.Assert;
 | 
				
			||||||
import java.io.InputStream;
 | 
					import org.junit.Test;
 | 
				
			||||||
import java.io.InputStreamReader;
 | 
					
 | 
				
			||||||
 | 
					import java.io.*;
 | 
				
			||||||
import java.net.URISyntaxException;
 | 
					import java.net.URISyntaxException;
 | 
				
			||||||
import java.net.URL;
 | 
					import java.net.URL;
 | 
				
			||||||
import java.net.URLConnection;
 | 
					import java.net.URLConnection;
 | 
				
			||||||
@ -14,12 +15,6 @@ import java.nio.file.Path;
 | 
				
			|||||||
import java.nio.file.Paths;
 | 
					import java.nio.file.Paths;
 | 
				
			||||||
import java.util.stream.Stream;
 | 
					import java.util.stream.Stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.apache.commons.io.FileUtils;
 | 
					 | 
				
			||||||
import org.hamcrest.CoreMatchers;
 | 
					 | 
				
			||||||
import org.hamcrest.Matchers;
 | 
					 | 
				
			||||||
import org.junit.Assert;
 | 
					 | 
				
			||||||
import org.junit.Test;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class FileOperationsUnitTest {
 | 
					public class FileOperationsUnitTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
@ -58,9 +53,9 @@ public class FileOperationsUnitTest {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void givenURLName_whenUsingURL_thenFileData() throws IOException {
 | 
					    public void givenURLName_whenUsingURL_thenFileData() throws IOException {
 | 
				
			||||||
        String expectedData = "Baeldung";
 | 
					        String expectedData = "Example Domain";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        URL urlObject = new URL("http://www.baeldung.com/");
 | 
					        URL urlObject = new URL("http://www.example.com/");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        URLConnection urlConnection = urlObject.openConnection();
 | 
					        URLConnection urlConnection = urlObject.openConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					package com.baeldung.generics;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.hamcrest.CoreMatchers.hasItems;
 | 
				
			||||||
 | 
					import static org.hamcrest.MatcherAssert.assertThat;
 | 
				
			||||||
 | 
					import static org.junit.Assert.fail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class GenericsTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // testing the generic method with Integer
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenArrayOfIntegers_thanListOfIntegersReturnedOK() {
 | 
				
			||||||
 | 
					        Integer[] intArray = { 1, 2, 3, 4, 5 };
 | 
				
			||||||
 | 
					        List<Integer> list = Generics.fromArrayToList(intArray);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(list, hasItems(intArray));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // testing the generic method with Integer and String type
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenArrayOfIntegers_thanListOfStringReturnedOK() {
 | 
				
			||||||
 | 
					        Integer[] intArray = { 1, 2, 3, 4, 5 };
 | 
				
			||||||
 | 
					        List<String> stringList = Generics.fromArrayToList(intArray, Object::toString);
 | 
				
			||||||
 | 
					        assertThat(stringList, hasItems("1", "2", "3", "4", "5"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // testing the generic method with String
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenArrayOfStrings_thanListOfStringsReturnedOK() {
 | 
				
			||||||
 | 
					        String[] stringArray = { "hello1", "hello2", "hello3", "hello4", "hello5" };
 | 
				
			||||||
 | 
					        List<String> list = Generics.fromArrayToList(stringArray);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(list, hasItems(stringArray));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // testing the generic method with Number as upper bound with Integer
 | 
				
			||||||
 | 
					    // if we test fromArrayToListWithUpperBound with any type that doesn't
 | 
				
			||||||
 | 
					    // extend Number it will fail to compile
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenArrayOfIntegersAndNumberUpperBound_thanListOfIntegersReturnedOK() {
 | 
				
			||||||
 | 
					        Integer[] intArray = { 1, 2, 3, 4, 5 };
 | 
				
			||||||
 | 
					        List<Integer> list = Generics.fromArrayToListWithUpperBound(intArray);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertThat(list, hasItems(intArray));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // testing paintAllBuildings method with a subtype of Building, the method
 | 
				
			||||||
 | 
					    // will work with all subtypes of Building
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenSubTypeOfWildCardBoundedGenericType_thanPaintingOK() {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            List<Building> subBuildingsList = new ArrayList<>();
 | 
				
			||||||
 | 
					            subBuildingsList.add(new Building());
 | 
				
			||||||
 | 
					            subBuildingsList.add(new House());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // prints
 | 
				
			||||||
 | 
					            // Painting Building
 | 
				
			||||||
 | 
					            // Painting House
 | 
				
			||||||
 | 
					            Generics.paintAllBuildings(subBuildingsList);
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            fail();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					package com.baeldung.grep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Before;
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					import org.unix4j.Unix4j;
 | 
				
			||||||
 | 
					import static org.unix4j.Unix4j.*;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertEquals;
 | 
				
			||||||
 | 
					import org.unix4j.line.Line;
 | 
				
			||||||
 | 
					import static org.unix4j.unix.Grep.*;
 | 
				
			||||||
 | 
					import static org.unix4j.unix.cut.CutOption.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class GrepWithUnix4JTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private File fileToGrep;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Before
 | 
				
			||||||
 | 
					    public void init() {
 | 
				
			||||||
 | 
					        final String separator = File.separator;
 | 
				
			||||||
 | 
					        final String filePath = String.join(separator, new String[] { "src", "test", "resources", "dictionary.in" });
 | 
				
			||||||
 | 
					        fileToGrep = new File(filePath);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenGrepWithSimpleString_thenCorrect() {
 | 
				
			||||||
 | 
					        int expectedLineCount = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // grep "NINETEEN" dictionary.txt
 | 
				
			||||||
 | 
					        List<Line> lines = Unix4j.grep("NINETEEN", fileToGrep).toLineList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(expectedLineCount, lines.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenInverseGrepWithSimpleString_thenCorrect() {
 | 
				
			||||||
 | 
					        int expectedLineCount = 178687;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // grep -v "NINETEEN" dictionary.txt
 | 
				
			||||||
 | 
					        List<Line> lines = grep(Options.v, "NINETEEN", fileToGrep).toLineList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(expectedLineCount, lines.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenGrepWithRegex_thenCorrect() {
 | 
				
			||||||
 | 
					        int expectedLineCount = 151;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // grep -c ".*?NINE.*?" dictionary.txt
 | 
				
			||||||
 | 
					        String patternCount = grep(Options.c, ".*?NINE.*?", fileToGrep).cut(fields, ":", 1).toStringResult();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(expectedLineCount, Integer.parseInt(patternCount));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -4,12 +4,10 @@ import org.junit.Test;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import static org.junit.Assert.*;
 | 
					import static org.junit.Assert.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class SHA256HashingTest {
 | 
					public class SHA256HashingTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static String originalValue = "abc123";
 | 
					    private static String originalValue = "abc123";
 | 
				
			||||||
    private static String hashedValue =
 | 
					    private static String hashedValue = "6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090";
 | 
				
			||||||
            "6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    public void testHashWithJavaMessageDigest() throws Exception {
 | 
					    public void testHashWithJavaMessageDigest() throws Exception {
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					### Relevant Articles:
 | 
				
			||||||
 | 
					- [Convert Hex to ASCII in Java](http://www.baeldung.com/java-convert-hex-to-ascii)
 | 
				
			||||||
@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					Relevant Articles:
 | 
				
			||||||
 | 
					- [Java String Conversions](http://www.baeldung.com/java-string-conversions)
 | 
				
			||||||
@ -119,8 +119,7 @@ public class StringConversionTest {
 | 
				
			|||||||
        int afterConvCalendarDay = 03;
 | 
					        int afterConvCalendarDay = 03;
 | 
				
			||||||
        Month afterConvCalendarMonth = Month.DECEMBER;
 | 
					        Month afterConvCalendarMonth = Month.DECEMBER;
 | 
				
			||||||
        int afterConvCalendarYear = 2007;
 | 
					        int afterConvCalendarYear = 2007;
 | 
				
			||||||
        LocalDateTime afterConvDate 
 | 
					        LocalDateTime afterConvDate = new UseLocalDateTime().getLocalDateTimeUsingParseMethod(str);
 | 
				
			||||||
          = new UseLocalDateTime().getLocalDateTimeUsingParseMethod(str);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assertEquals(afterConvDate.getDayOfMonth(), afterConvCalendarDay);
 | 
					        assertEquals(afterConvDate.getDayOfMonth(), afterConvCalendarDay);
 | 
				
			||||||
        assertEquals(afterConvDate.getMonth(), afterConvCalendarMonth);
 | 
					        assertEquals(afterConvDate.getMonth(), afterConvCalendarMonth);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										350
									
								
								core-java/src/test/java/com/baeldung/java/map/MapTest.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								core-java/src/test/java/com/baeldung/java/map/MapTest.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,350 @@
 | 
				
			|||||||
 | 
					package com.baeldung.java.map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertEquals;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertFalse;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertNull;
 | 
				
			||||||
 | 
					import static org.junit.Assert.assertTrue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.Comparator;
 | 
				
			||||||
 | 
					import java.util.ConcurrentModificationException;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import java.util.LinkedHashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Map.Entry;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					import java.util.TreeMap;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.junit.Test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class MapTest {
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenHashMap_whenRetrievesKeyset_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<String> keys = map.keySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(2, keys.size());
 | 
				
			||||||
 | 
					        assertTrue(keys.contains("name"));
 | 
				
			||||||
 | 
					        assertTrue(keys.contains("type"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenHashMap_whenRetrievesValues_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Collection<String> values = map.values();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(2, values.size());
 | 
				
			||||||
 | 
					        assertTrue(values.contains("baeldung"));
 | 
				
			||||||
 | 
					        assertTrue(values.contains("blog"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenHashMap_whenRetrievesEntries_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<Entry<String, String>> entries = map.entrySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(2, entries.size());
 | 
				
			||||||
 | 
					        for (Entry<String, String> e : entries) {
 | 
				
			||||||
 | 
					            String key = e.getKey();
 | 
				
			||||||
 | 
					            String val = e.getValue();
 | 
				
			||||||
 | 
					            assertTrue(key.equals("name") || key.equals("type"));
 | 
				
			||||||
 | 
					            assertTrue(val.equals("baeldung") || val.equals("blog"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenKeySet_whenChangeReflectsInMap_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(2, map.size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<String> keys = map.keySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        keys.remove("name");
 | 
				
			||||||
 | 
					        assertEquals(1, map.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test(expected = ConcurrentModificationException.class)
 | 
				
			||||||
 | 
					    public void givenIterator_whenFailsFastOnModification_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<String> keys = map.keySet();
 | 
				
			||||||
 | 
					        Iterator<String> it = keys.iterator();
 | 
				
			||||||
 | 
					        map.remove("type");
 | 
				
			||||||
 | 
					        while (it.hasNext()) {
 | 
				
			||||||
 | 
					            String key = it.next();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void givenIterator_whenRemoveWorks_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("name", "baeldung");
 | 
				
			||||||
 | 
					        map.put("type", "blog");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Set<String> keys = map.keySet();
 | 
				
			||||||
 | 
					        Iterator<String> it = keys.iterator();
 | 
				
			||||||
 | 
					        while (it.hasNext()) {
 | 
				
			||||||
 | 
					            it.next();
 | 
				
			||||||
 | 
					            it.remove();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        assertEquals(0, map.size());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenHashCodeIsCalledOnPut_thenCorrect() {
 | 
				
			||||||
 | 
					        MyKey key = new MyKey(1, "name");
 | 
				
			||||||
 | 
					        Map<MyKey, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put(key, "val");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenHashCodeIsCalledOnGet_thenCorrect() {
 | 
				
			||||||
 | 
					        MyKey key = new MyKey(1, "name");
 | 
				
			||||||
 | 
					        Map<MyKey, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put(key, "val");
 | 
				
			||||||
 | 
					        map.get(key);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenGetWorks_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("key", "val");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String val = map.get("key");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("val", val);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenNewKey_whenPutReturnsNull_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String rtnVal = map.put("key1", "val1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(rtnVal);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenUnmappedKey_whenGetReturnsNull_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String rtnVal = map.get("key1");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(rtnVal);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenNullVal_whenPutReturnsNull_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String rtnVal = map.put("key1", null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(rtnVal);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenNullKeyAndVal_whenAccepts_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        map.put(null, null);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenNullVal_whenRetrieves_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("key", null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String val = map.get("key");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(val);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenContainsDistinguishesNullValues_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String val1 = map.get("key");
 | 
				
			||||||
 | 
					        boolean valPresent = map.containsKey("key");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(val1);
 | 
				
			||||||
 | 
					        assertFalse(valPresent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        map.put("key", null);
 | 
				
			||||||
 | 
					        String val = map.get("key");
 | 
				
			||||||
 | 
					        valPresent = map.containsKey("key");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertNull(val);
 | 
				
			||||||
 | 
					        assertTrue(valPresent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenPutReturnsPrevValue_thenCorrect() {
 | 
				
			||||||
 | 
					        Map<String, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        map.put("key1", "val1");
 | 
				
			||||||
 | 
					        String rtnVal = map.put("key1", "val2");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("val1", rtnVal);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void whenCallsEqualsOnCollision_thenCorrect() {
 | 
				
			||||||
 | 
					        HashMap<MyKey, String> map = new HashMap<>();
 | 
				
			||||||
 | 
					        MyKey k1 = new MyKey(1, "firstKey");
 | 
				
			||||||
 | 
					        MyKey k2 = new MyKey(2, "secondKey");
 | 
				
			||||||
 | 
					        MyKey k3 = new MyKey(2, "thirdKey");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("storing value for k1");
 | 
				
			||||||
 | 
					        map.put(k1, "firstValue");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("storing value for k2");
 | 
				
			||||||
 | 
					        map.put(k2, "secondValue");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("storing value for k3");
 | 
				
			||||||
 | 
					        map.put(k3, "thirdValue");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("retrieving value for k1");
 | 
				
			||||||
 | 
					        String v1 = map.get(k1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("retrieving value for k2");
 | 
				
			||||||
 | 
					        String v2 = map.get(k2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        System.out.println("retrieving value for k3");
 | 
				
			||||||
 | 
					        String v3 = map.get(k3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("firstValue", v1);
 | 
				
			||||||
 | 
					        assertEquals("secondValue", v2);
 | 
				
			||||||
 | 
					        assertEquals("thirdValue", v3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenLinkedHashMap_whenGetsOrderedKeyset_thenCorrect() {
 | 
				
			||||||
 | 
					        LinkedHashMap<Integer, String> map = new LinkedHashMap<>();
 | 
				
			||||||
 | 
					        map.put(1, null);
 | 
				
			||||||
 | 
					        map.put(2, null);
 | 
				
			||||||
 | 
					        map.put(3, null);
 | 
				
			||||||
 | 
					        map.put(4, null);
 | 
				
			||||||
 | 
					        map.put(5, null);
 | 
				
			||||||
 | 
					        Set<Integer> keys = map.keySet();
 | 
				
			||||||
 | 
					        Integer[] arr = keys.toArray(new Integer[0]);
 | 
				
			||||||
 | 
					        for (int i = 0; i < arr.length; i++) {
 | 
				
			||||||
 | 
					            assertEquals(new Integer(i + 1), arr[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenLinkedHashMap_whenAccessOrderWorks_thenCorrect() {
 | 
				
			||||||
 | 
					        LinkedHashMap<Integer, String> map = new LinkedHashMap<>(16, .75f, true);
 | 
				
			||||||
 | 
					        map.put(1, null);
 | 
				
			||||||
 | 
					        map.put(2, null);
 | 
				
			||||||
 | 
					        map.put(3, null);
 | 
				
			||||||
 | 
					        map.put(4, null);
 | 
				
			||||||
 | 
					        map.put(5, null);
 | 
				
			||||||
 | 
					        Set<Integer> keys = map.keySet();
 | 
				
			||||||
 | 
					        assertEquals("[1, 2, 3, 4, 5]", keys.toString());
 | 
				
			||||||
 | 
					        map.get(4);
 | 
				
			||||||
 | 
					        assertEquals("[1, 2, 3, 5, 4]", keys.toString());
 | 
				
			||||||
 | 
					        map.get(1);
 | 
				
			||||||
 | 
					        assertEquals("[2, 3, 5, 4, 1]", keys.toString());
 | 
				
			||||||
 | 
					        map.get(3);
 | 
				
			||||||
 | 
					        assertEquals("[2, 5, 4, 1, 3]", keys.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenLinkedHashMap_whenRemovesEldestEntry_thenCorrect() {
 | 
				
			||||||
 | 
					        LinkedHashMap<Integer, String> map = new MyLinkedHashMap<>(16, .75f, true);
 | 
				
			||||||
 | 
					        map.put(1, null);
 | 
				
			||||||
 | 
					        map.put(2, null);
 | 
				
			||||||
 | 
					        map.put(3, null);
 | 
				
			||||||
 | 
					        map.put(4, null);
 | 
				
			||||||
 | 
					        map.put(5, null);
 | 
				
			||||||
 | 
					        Set<Integer> keys = map.keySet();
 | 
				
			||||||
 | 
					        assertEquals("[1, 2, 3, 4, 5]", keys.toString());
 | 
				
			||||||
 | 
					        map.put(6, null);
 | 
				
			||||||
 | 
					        assertEquals("[2, 3, 4, 5, 6]", keys.toString());
 | 
				
			||||||
 | 
					        map.put(7, null);
 | 
				
			||||||
 | 
					        assertEquals("[3, 4, 5, 6, 7]", keys.toString());
 | 
				
			||||||
 | 
					        map.put(8, null);
 | 
				
			||||||
 | 
					        assertEquals("[4, 5, 6, 7, 8]", keys.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenTreeMap_whenOrdersEntriesNaturally_thenCorrect() {
 | 
				
			||||||
 | 
					        TreeMap<Integer, String> map = new TreeMap<>();
 | 
				
			||||||
 | 
					        map.put(3, "val");
 | 
				
			||||||
 | 
					        map.put(2, "val");
 | 
				
			||||||
 | 
					        map.put(1, "val");
 | 
				
			||||||
 | 
					        map.put(5, "val");
 | 
				
			||||||
 | 
					        map.put(4, "val");
 | 
				
			||||||
 | 
					        assertEquals("[1, 2, 3, 4, 5]", map.keySet().toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenTreeMap_whenOrdersEntriesNaturally_thenCorrect2() {
 | 
				
			||||||
 | 
					        TreeMap<String, String> map = new TreeMap<>();
 | 
				
			||||||
 | 
					        map.put("c", "val");
 | 
				
			||||||
 | 
					        map.put("b", "val");
 | 
				
			||||||
 | 
					        map.put("a", "val");
 | 
				
			||||||
 | 
					        map.put("e", "val");
 | 
				
			||||||
 | 
					        map.put("d", "val");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("[a, b, c, d, e]", map.keySet().toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenTreeMap_whenOrdersEntriesByComparator_thenCorrect() {
 | 
				
			||||||
 | 
					        TreeMap<Integer, String> map = new TreeMap<>(new Comparator<Integer>() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public int compare(Integer o1, Integer o2) {
 | 
				
			||||||
 | 
					                return o2 - o1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        map.put(3, "val");
 | 
				
			||||||
 | 
					        map.put(2, "val");
 | 
				
			||||||
 | 
					        map.put(1, "val");
 | 
				
			||||||
 | 
					        map.put(5, "val");
 | 
				
			||||||
 | 
					        map.put(4, "val");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals("[5, 4, 3, 2, 1]", map.keySet().toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    public void givenTreeMap_whenPerformsQueries_thenCorrect() {
 | 
				
			||||||
 | 
					        TreeMap<Integer, String> map = new TreeMap<>();
 | 
				
			||||||
 | 
					        map.put(3, "val");
 | 
				
			||||||
 | 
					        map.put(2, "val");
 | 
				
			||||||
 | 
					        map.put(1, "val");
 | 
				
			||||||
 | 
					        map.put(5, "val");
 | 
				
			||||||
 | 
					        map.put(4, "val");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        Integer highestKey = map.lastKey();
 | 
				
			||||||
 | 
					        Integer lowestKey = map.firstKey();
 | 
				
			||||||
 | 
					        Set<Integer> keysLessThan3 = map.headMap(3).keySet();
 | 
				
			||||||
 | 
					        Set<Integer> keysGreaterThanEqTo3 = map.tailMap(3).keySet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        assertEquals(new Integer(5), highestKey);
 | 
				
			||||||
 | 
					        assertEquals(new Integer(1), lowestKey);
 | 
				
			||||||
 | 
					        assertEquals("[1, 2]", keysLessThan3.toString());
 | 
				
			||||||
 | 
					        assertEquals("[3, 4, 5]", keysGreaterThanEqTo3.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user