Merge branch 'master' into lor6-patch-3
This commit is contained in:
commit
777e10776c
|
@ -140,3 +140,4 @@
|
||||||
- [Introduction to SSL in Java](http://www.baeldung.com/java-ssl)
|
- [Introduction to SSL in Java](http://www.baeldung.com/java-ssl)
|
||||||
- [Java KeyStore API](http://www.baeldung.com/java-keystore)
|
- [Java KeyStore API](http://www.baeldung.com/java-keystore)
|
||||||
- [Using Java Assertions](http://www.baeldung.com/java-assert)
|
- [Using Java Assertions](http://www.baeldung.com/java-assert)
|
||||||
|
- [Guide to Java Clock Class](http://www.baeldung.com/java-clock)
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
package com.baeldung.stringisnumeric;
|
package com.baeldung.stringisnumeric;
|
||||||
|
|
||||||
import static com.baeldung.designpatterns.util.LogerUtil.LOG;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
public class IsNumericDriver {
|
public class IsNumericDriver {
|
||||||
private static IsNumeric isNumeric;
|
private static IsNumeric isNumeric;
|
||||||
|
private static Logger LOG = Logger.getLogger(IsNumericDriver.class);
|
||||||
static {
|
static {
|
||||||
isNumeric =new IsNumeric();
|
isNumeric =new IsNumeric();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
|
@ -680,6 +680,12 @@
|
||||||
<version>${unirest.version}</version>
|
<version>${unirest.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- javalin -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.javalin</groupId>
|
||||||
|
<artifactId>javalin</artifactId>
|
||||||
|
<version>1.6.0</version>
|
||||||
|
</dependency>
|
||||||
<!-- Atlassian Fugue -->
|
<!-- Atlassian Fugue -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.atlassian.fugue</groupId>
|
<groupId>io.atlassian.fugue</groupId>
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.javalin;
|
||||||
|
|
||||||
|
import com.baeldung.javalin.User.UserController;
|
||||||
|
import io.javalin.Javalin;
|
||||||
|
|
||||||
|
public class JavalinApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Javalin app = Javalin.create()
|
||||||
|
.port(7000)
|
||||||
|
.start();
|
||||||
|
|
||||||
|
app.get("/hello", ctx -> ctx.html("Hello, Javalin!"));
|
||||||
|
app.get("/users", UserController.fetchAllUsernames);
|
||||||
|
app.get("/users/:id", UserController.fetchById);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.baeldung.javalin.User;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
public final int id;
|
||||||
|
public final String name;
|
||||||
|
|
||||||
|
public User(int id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.javalin.User;
|
||||||
|
|
||||||
|
import io.javalin.Handler;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class UserController {
|
||||||
|
public static Handler fetchAllUsernames = ctx -> {
|
||||||
|
UserDao dao = UserDao.instance();
|
||||||
|
Iterable<String> allUsers = dao.getAllUsernames();
|
||||||
|
ctx.json(allUsers);
|
||||||
|
};
|
||||||
|
|
||||||
|
public static Handler fetchById = ctx -> {
|
||||||
|
int id = Integer.parseInt(Objects.requireNonNull(ctx.param("id")));
|
||||||
|
UserDao dao = UserDao.instance();
|
||||||
|
User user = dao.getUserById(id);
|
||||||
|
if (user == null) {
|
||||||
|
ctx.html("Not Found");
|
||||||
|
} else {
|
||||||
|
ctx.json(user);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package com.baeldung.javalin.User;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
class UserDao {
|
||||||
|
|
||||||
|
private final List<User> users = Arrays.asList(
|
||||||
|
new User(0, "Steve Rogers"),
|
||||||
|
new User(1, "Tony Stark"),
|
||||||
|
new User(2, "Carol Danvers")
|
||||||
|
);
|
||||||
|
|
||||||
|
private static UserDao userDao = null;
|
||||||
|
|
||||||
|
private UserDao() {
|
||||||
|
}
|
||||||
|
|
||||||
|
static UserDao instance() {
|
||||||
|
if (userDao == null) {
|
||||||
|
userDao = new UserDao();
|
||||||
|
}
|
||||||
|
return userDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<User> getUserById(int id) { return users.stream().filter(u -> u.id == id).findFirst(); }
|
||||||
|
|
||||||
|
Iterable<String> getAllUsernames() {
|
||||||
|
return users.stream().map(user -> user.name).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.baeldung.propertyeditor;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class PropertyEditorApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(PropertyEditorApplication.class, args);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
package com.baeldung.propertyeditor;
|
||||||
|
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.web.bind.WebDataBinder;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.InitBinder;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import com.baeldung.propertyeditor.creditcard.CreditCard;
|
||||||
|
import com.baeldung.propertyeditor.exotictype.editor.CustomExoticTypeEditor;
|
||||||
|
import com.baeldung.propertyeditor.exotictype.model.ExoticType;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(value = "/property-editor")
|
||||||
|
public class PropertyEditorRestController {
|
||||||
|
|
||||||
|
@GetMapping(value = "/credit-card/{card-no}",
|
||||||
|
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
||||||
|
public CreditCard parseCreditCardNumber(@PathVariable("card-no") CreditCard creditCard) {
|
||||||
|
return creditCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = "/exotic-type/{value}",
|
||||||
|
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
||||||
|
public ExoticType parseExoticType(@PathVariable("value") ExoticType exoticType) {
|
||||||
|
return exoticType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@InitBinder
|
||||||
|
public void initBinder(WebDataBinder binder) {
|
||||||
|
binder.registerCustomEditor(ExoticType.class, new CustomExoticTypeEditor());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.propertyeditor.creditcard;
|
||||||
|
|
||||||
|
public class CreditCard {
|
||||||
|
|
||||||
|
private String rawCardNumber;
|
||||||
|
|
||||||
|
private Integer bankIdNo;
|
||||||
|
|
||||||
|
private Integer accountNo;
|
||||||
|
|
||||||
|
private Integer checkCode;
|
||||||
|
|
||||||
|
public String getRawCardNumber() {
|
||||||
|
return rawCardNumber;
|
||||||
|
}
|
||||||
|
public void setRawCardNumber(String rawCardNumber) {
|
||||||
|
this.rawCardNumber = rawCardNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getBankIdNo() {
|
||||||
|
return bankIdNo;
|
||||||
|
}
|
||||||
|
public void setBankIdNo(Integer bankIdNo) {
|
||||||
|
this.bankIdNo = bankIdNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getAccountNo() {
|
||||||
|
return accountNo;
|
||||||
|
}
|
||||||
|
public void setAccountNo(Integer accountNo) {
|
||||||
|
this.accountNo = accountNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCheckCode() {
|
||||||
|
return checkCode;
|
||||||
|
}
|
||||||
|
public void setCheckCode(Integer checkCode) {
|
||||||
|
this.checkCode = checkCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.baeldung.propertyeditor.creditcard;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
public class CreditCardEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsText() {
|
||||||
|
CreditCard creditCard = (CreditCard) getValue();
|
||||||
|
|
||||||
|
return creditCard == null ? "" : creditCard.getRawCardNumber();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
if (StringUtils.isEmpty(text)) {
|
||||||
|
setValue(null);
|
||||||
|
} else {
|
||||||
|
CreditCard creditCard = new CreditCard();
|
||||||
|
creditCard.setRawCardNumber(text);
|
||||||
|
|
||||||
|
String cardNo = text.replaceAll("-", "");
|
||||||
|
if (cardNo.length() != 16)
|
||||||
|
throw new IllegalArgumentException("Credit card format should be xxxx-xxxx-xxxx-xxxx");
|
||||||
|
|
||||||
|
try {
|
||||||
|
creditCard.setBankIdNo( Integer.valueOf(cardNo.substring(0, 6)) );
|
||||||
|
creditCard.setAccountNo( Integer.valueOf(cardNo.substring(6, cardNo.length() - 1)) );
|
||||||
|
creditCard.setCheckCode( Integer.valueOf(cardNo.substring(cardNo.length() - 1)) );
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
throw new IllegalArgumentException(nfe);
|
||||||
|
}
|
||||||
|
|
||||||
|
setValue(creditCard);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.propertyeditor.exotictype.editor;
|
||||||
|
|
||||||
|
import java.beans.PropertyEditorSupport;
|
||||||
|
|
||||||
|
import com.baeldung.propertyeditor.exotictype.model.ExoticType;
|
||||||
|
|
||||||
|
public class CustomExoticTypeEditor extends PropertyEditorSupport {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsText() {
|
||||||
|
ExoticType exoticType = (ExoticType) getValue();
|
||||||
|
|
||||||
|
return exoticType == null ? "" : exoticType.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAsText(String text) throws IllegalArgumentException {
|
||||||
|
ExoticType exoticType = new ExoticType();
|
||||||
|
exoticType.setName(text.toUpperCase());
|
||||||
|
|
||||||
|
setValue(exoticType);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.baeldung.propertyeditor.exotictype.model;
|
||||||
|
|
||||||
|
public class ExoticType {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.propertyeditor.creditcard;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.runners.MockitoJUnitRunner;
|
||||||
|
|
||||||
|
import com.baeldung.propertyeditor.creditcard.CreditCard;
|
||||||
|
import com.baeldung.propertyeditor.creditcard.CreditCardEditor;
|
||||||
|
|
||||||
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
|
public class CreditCardEditorTest {
|
||||||
|
|
||||||
|
private CreditCardEditor creditCardEditor;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
creditCardEditor = new CreditCardEditor();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected=IllegalArgumentException.class)
|
||||||
|
public void whenInvalidCardNoWithLessDigits_thenThrowsException() {
|
||||||
|
creditCardEditor.setAsText("123-123-123-123");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected=IllegalArgumentException.class)
|
||||||
|
public void whenInvalidCardNoWithNonDigits_thenThrowsException() {
|
||||||
|
creditCardEditor.setAsText("1234-1234-xxxx-yyyy");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCardNoWithNonDigits_parseCreditCard() {
|
||||||
|
creditCardEditor.setAsText("1234-5678-9123-4560");
|
||||||
|
|
||||||
|
CreditCard creditCard = (CreditCard) creditCardEditor.getValue();
|
||||||
|
Assert.assertNotNull(creditCard);
|
||||||
|
|
||||||
|
Assert.assertEquals(123456, creditCard.getBankIdNo().intValue());
|
||||||
|
Assert.assertEquals(789123456, creditCard.getAccountNo().intValue());
|
||||||
|
Assert.assertEquals(0, creditCard.getCheckCode().intValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue