Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
deepcloudlabs committed Jul 22, 2022
1 parent e690be9 commit 219f075
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 3 deletions.
1 change: 1 addition & 0 deletions lottery-module/src/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
random.service=CHEAP
19 changes: 17 additions & 2 deletions lottery-module/src/com/example/lottery/application/LotteryApp.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,31 @@
package com.example.lottery.application;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import java.util.ServiceLoader;
import java.util.ServiceLoader.Provider;

import com.example.lottery.service.business.StandardLotterService;
import com.example.random.service.QoS;
import com.example.random.service.QualityLevel;
import com.example.random.service.RandomNumberService;

public class LotteryApp {

public static void main(String[] args) {
public static void main(String[] args) throws Exception {
var props = new Properties();
props.load(new FileInputStream(new File("src","application.properties")));
var qualityLevel = QualityLevel.valueOf(props.getProperty("random.service"));
var lotteryService = new StandardLotterService();
var services = ServiceLoader.load(RandomNumberService.class);
lotteryService.setRandomNumberService(services.findFirst().get());
var service = services.stream()
.map(Provider::get)
.filter(srv -> srv.getClass().isAnnotationPresent(QoS.class))
.filter(srv -> srv.getClass().getAnnotation(QoS.class).value()==qualityLevel)
.findFirst()
.orElseThrow();
lotteryService.setRandomNumberService(service);
lotteryService.getLotteryNumbers(60, 6, 10)
.forEach(System.out::println);
}
Expand Down
12 changes: 12 additions & 0 deletions random-module/src/com/example/random/service/QoS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.example.random.service;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface QoS {
QualityLevel value();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.example.random.service;

public enum QualityLevel {
FAST, SECURE, CHEAP
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.random.service.business;

import com.example.random.service.QoS;
import com.example.random.service.QualityLevel;
import com.example.random.service.RandomNumberService;

@QoS(QualityLevel.CHEAP)
public class CheapRandomNumberService implements RandomNumberService {
private static int counter = 0;
@Override
public int generate(int min, int max) {
System.err.println("CheapRandomNumberService::generate");
counter++;
return min + (counter % (max-min+1) );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

import java.util.concurrent.ThreadLocalRandom;

import com.example.random.service.QoS;
import com.example.random.service.QualityLevel;
import com.example.random.service.RandomNumberService;

@QoS(QualityLevel.FAST)
public class FastRandomNumberService implements RandomNumberService {

@Override
public int generate(int min, int max) {
System.err.println("FastRandomNumberService::generate");
return ThreadLocalRandom.current().nextInt(min, max);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@

import java.security.SecureRandom;

import com.example.random.service.QoS;
import com.example.random.service.QualityLevel;
import com.example.random.service.RandomNumberService;

@QoS(QualityLevel.SECURE)
public class SecureRandomNumberService implements RandomNumberService {

private SecureRandom random = new SecureRandom();

@Override
public int generate(int min, int max) {
System.err.println("SecureRandomNumberService::generate");
return random.nextInt(min, max);
}

Expand Down
3 changes: 2 additions & 1 deletion random-module/src/module-info.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import com.example.random.service.RandomNumberService;
import com.example.random.service.business.CheapRandomNumberService;
import com.example.random.service.business.FastRandomNumberService;
import com.example.random.service.business.SecureRandomNumberService;

module com.example.random {
exports com.example.random.service;
provides RandomNumberService with FastRandomNumberService,SecureRandomNumberService;
provides RandomNumberService with FastRandomNumberService,SecureRandomNumberService,CheapRandomNumberService;
}

0 comments on commit 219f075

Please sign in to comment.