Merge pull request #71 from eugenp/master

update
This commit is contained in:
Maiklins 2020-09-11 00:26:41 +02:00 committed by GitHub
commit 2003c72124
14 changed files with 341 additions and 42 deletions

View File

@ -0,0 +1,37 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.Date;
public class Tweet {
private String email;
private String tweetText;
private Date dateCreated;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTweetText() {
return tweetText;
}
public void setTweetText(String tweetText) {
this.tweetText = tweetText;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
}

View File

@ -0,0 +1,9 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.List;
public interface TweetDao {
List<Tweet> fetchTweets(String email);
}

View File

@ -0,0 +1,17 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.ArrayList;
import java.util.List;
public class TweetDaoImpl implements TweetDao {
@Override
public List<Tweet> fetchTweets(String email) {
List<Tweet> tweets = new ArrayList<Tweet>();
//call Twitter API and prepare Tweet object
return tweets;
}
}

View File

@ -0,0 +1,51 @@
package com.baeldung.repositoryvsdaopattern;
public class User {
private Long id;
private String userName;
private String firstName;
private String lastName;
private String email;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

View File

@ -0,0 +1,13 @@
package com.baeldung.repositoryvsdaopattern;
public interface UserDao {
void create(User user);
User read(Long id);
void update(User user);
void delete(String userName);
}

View File

@ -0,0 +1,33 @@
package com.baeldung.repositoryvsdaopattern;
import javax.persistence.EntityManager;
public class UserDaoImpl implements UserDao {
private final EntityManager entityManager;
public UserDaoImpl(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public void create(User user) {
entityManager.persist(user);
}
@Override
public User read(Long id) {
return entityManager.find(User.class, id);
}
@Override
public void update(User user) {
}
@Override
public void delete(String userName) {
}
}

View File

@ -0,0 +1,21 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.List;
public interface UserRepository {
User get(Long id);
void add(User user);
void update(User user);
void remove(User user);
User findByUserName(String userName);
User findByEmail(String email);
List<Tweet> fetchTweets(User user);
}

View File

@ -0,0 +1,51 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.List;
public class UserRepositoryImpl implements UserRepository {
private UserDaoImpl userDaoImpl;
private TweetDaoImpl tweetDaoImpl;
@Override
public User get(Long id) {
UserSocialMedia user = (UserSocialMedia) userDaoImpl.read(id);
List<Tweet> tweets = tweetDaoImpl.fetchTweets(user.getEmail());
user.setTweets(tweets);
return user;
}
@Override
public void add(User user) {
userDaoImpl.create(user);
}
@Override
public void remove(User user) {
}
@Override
public void update(User user) {
}
@Override
public List<Tweet> fetchTweets(User user) {
return tweetDaoImpl.fetchTweets(user.getEmail());
}
@Override
public User findByUserName(String userName) {
return null;
}
@Override
public User findByEmail(String email) {
return null;
}
}

View File

@ -0,0 +1,17 @@
package com.baeldung.repositoryvsdaopattern;
import java.util.List;
public class UserSocialMedia extends User {
private List<Tweet> tweets;
public List<Tweet> getTweets() {
return tweets;
}
public void setTweets(List<Tweet> tweets) {
this.tweets = tweets;
}
}

View File

@ -10,7 +10,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
@Configuration @Configuration
@ComponentScan("com.baeldung.spring.jdbc") @ComponentScan("com.baeldung.spring.jdbc.template.guide")
public class SpringJdbcConfig { public class SpringJdbcConfig {
@Bean @Bean

View File

@ -7,7 +7,7 @@ import restx.tests.RestxSpecTestsRunner;
@RunWith(RestxSpecTestsRunner.class) @RunWith(RestxSpecTestsRunner.class)
@FindSpecsIn("specs/hello") @FindSpecsIn("specs/hello")
public class HelloResourceSpecUnitTest { public class HelloResourceSpecIntegrationTest {
/** /**
* Useless, thanks to both @RunWith(RestxSpecTestsRunner.class) & @FindSpecsIn() * Useless, thanks to both @RunWith(RestxSpecTestsRunner.class) & @FindSpecsIn()

View File

@ -9,9 +9,9 @@
<parent> <parent>
<groupId>com.baeldung</groupId> <groupId>com.baeldung</groupId>
<artifactId>parent-spring-4</artifactId> <artifactId>parent-spring-5</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-spring-4</relativePath> <relativePath>../../parent-spring-5</relativePath>
</parent> </parent>
<dependencies> <dependencies>
@ -21,17 +21,17 @@
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId> <artifactId>spring-security-web</artifactId>
<version>${org.springframework.security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId> <artifactId>spring-security-config</artifactId>
<version>${org.springframework.security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.security</groupId> <groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId> <artifactId>spring-security-taglibs</artifactId>
<version>${org.springframework.security.version}</version> <version>${spring-security.version}</version>
</dependency> </dependency>
<!-- Spring --> <!-- Spring -->
@ -39,33 +39,33 @@
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId> <artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId> <artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId> <artifactId>spring-beans</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId> <artifactId>spring-aop</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId> <artifactId>spring-web</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId> <artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version> <version>${spring.version}</version>
</dependency> </dependency>
<!-- web --> <!-- web -->
@ -163,11 +163,64 @@
</build> </build>
<properties> <profiles>
<!-- Spring --> <profile>
<org.springframework.version>4.3.6.RELEASE</org.springframework.version> <id>default-first</id>
<org.springframework.security.version>4.2.1.RELEASE</org.springframework.security.version>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<executions>
<execution>
<id>install node and npm</id>
<phase>none</phase>
</execution>
<execution>
<id>npm install</id>
<phase>none</phase>
</execution>
<execution>
<id>npm run build</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>default-second</id>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<executions>
<execution>
<id>install node and npm</id>
<phase>none</phase>
</execution>
<execution>
<id>npm install</id>
<phase>none</phase>
</execution>
<execution>
<id>npm run build</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<properties>
<!-- util --> <!-- util -->
<guava.version>19.0</guava.version> <guava.version>19.0</guava.version>
@ -179,7 +232,5 @@
<!-- frontend --> <!-- frontend -->
<node.version>v8.11.3</node.version> <node.version>v8.11.3</node.version>
<npm.version>6.1.0</npm.version> <npm.version>6.1.0</npm.version>
</properties> </properties>
</project> </project>

View File

@ -10,9 +10,9 @@
<parent> <parent>
<groupId>com.baeldung</groupId> <groupId>com.baeldung</groupId>
<artifactId>parent-spring-4</artifactId> <artifactId>parent-spring-5</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<relativePath>../../parent-spring-4</relativePath> <relativePath>../../parent-spring-5</relativePath>
</parent> </parent>
<dependencies> <dependencies>
@ -182,7 +182,6 @@
<properties> <properties>
<hibernate-core.version>5.2.10.Final</hibernate-core.version> <hibernate-core.version>5.2.10.Final</hibernate-core.version>
<spring-security.version>4.2.3.RELEASE</spring-security.version>
<spring-data-jpa.version>1.11.3.RELEASE</spring-data-jpa.version> <spring-data-jpa.version>1.11.3.RELEASE</spring-data-jpa.version>
<logback-classic.version>1.2.3</logback-classic.version> <logback-classic.version>1.2.3</logback-classic.version>
<spring-boot-starter-test.version>1.5.10.RELEASE</spring-boot-starter-test.version> <spring-boot-starter-test.version>1.5.10.RELEASE</spring-boot-starter-test.version>

View File

@ -2,63 +2,63 @@
<head> <head>
<title>Chat WebSocket</title> <title>Chat WebSocket</title>
<script src="./js/sockjs-0.3.4.js"></script> <script src="resources/js/sockjs-0.3.4.js"></script>
<script src="./js/stomp.js"></script> <script src="resources/js/stomp.js"></script>
<script type="text/javascript"> <script type="text/javascript">
var stompClient = null; var stompClient = null;
function setConnected(connected) { function setConnected(connected) {
document.getElementById('connect').disabled = connected; document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected; document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden'; document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = ''; document.getElementById('response').innerHTML = '';
} }
function connect() { function connect() {
var socket = new SockJS('/spring-mvc-java/chat'); var socket = new SockJS('/chat');
stompClient = Stomp.over(socket); stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) { stompClient.connect({}, function(frame) {
setConnected(true); setConnected(true);
console.log('Connected: ' + frame); console.log('Connected: ' + frame);
stompClient.subscribe('/topic/messages', function(messageOutput) { stompClient.subscribe('/topic/messages', function(messageOutput) {
showMessageOutput(JSON.parse(messageOutput.body)); showMessageOutput(JSON.parse(messageOutput.body));
}); });
}); });
} }
function disconnect() { function disconnect() {
if(stompClient != null) { if(stompClient != null) {
stompClient.disconnect(); stompClient.disconnect();
} }
setConnected(false); setConnected(false);
console.log("Disconnected"); console.log("Disconnected");
} }
function sendMessage() { function sendMessage() {
var from = document.getElementById('from').value; var from = document.getElementById('from').value;
var text = document.getElementById('text').value; var text = document.getElementById('text').value;
stompClient.send("/app/chat", {}, JSON.stringify({'from':from, 'text':text})); stompClient.send("/app/chat", {}, JSON.stringify({'from':from, 'text':text}));
} }
function showMessageOutput(messageOutput) { function showMessageOutput(messageOutput) {
var response = document.getElementById('response'); var response = document.getElementById('response');
var p = document.createElement('p'); var p = document.createElement('p');
p.style.wordWrap = 'break-word'; p.style.wordWrap = 'break-word';
p.appendChild(document.createTextNode(messageOutput.from + ": " + messageOutput.text + " (" + messageOutput.time + ")")); p.appendChild(document.createTextNode(messageOutput.from + ": " + messageOutput.text + " (" + messageOutput.time + ")"));
response.appendChild(p); response.appendChild(p);
} }
</script> </script>
</head> </head>