From 6349212fe9420ff6c207aed769676b085f9d1568 Mon Sep 17 00:00:00 2001 From: deepcloudlabs Date: Thu, 21 Jul 2022 21:36:57 +0300 Subject: [PATCH] initial commit --- .../.classpath | 0 study-annotations-and-reflection-api/.project | 17 +++++++ .../org.eclipse.core.resources.prefs | 0 .../.settings/org.eclipse.jdt.core.prefs | 0 .../lottery/application/LotteryApp.java | 15 +++++++ .../lottery/model/LotteryViewModel.java | 15 +++++++ .../example/lottery/service/RandomNumber.java | 22 ++++++++++ .../service/RandomNumberGeneratorService.java | 33 ++++++++++++++ study-interfaces/.classpath | 10 +++++ .../.project | 0 .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 14 ++++++ .../src/com/example/Exercise01.java | 0 .../src/com/example/Exercise02.java | 0 .../src/com/example/Exercise03.java | 0 study-utility-classes/.classpath | 10 +++++ study-utility-classes/.project | 17 +++++++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 14 ++++++ .../src/com/example/StudyCollation.java | 44 +++++++++++++++++++ .../src/com/example/StudyDynamicString.java | 20 +++++++++ .../src/com/example/StudyString.java | 39 ++++++++++++++++ .../src/messages_en_US.properties | 1 + .../src/messages_tr_TR.properties | 1 + 24 files changed, 276 insertions(+) rename {StudyInterfaces => study-annotations-and-reflection-api}/.classpath (100%) create mode 100644 study-annotations-and-reflection-api/.project rename {StudyInterfaces => study-annotations-and-reflection-api}/.settings/org.eclipse.core.resources.prefs (100%) rename {StudyInterfaces => study-annotations-and-reflection-api}/.settings/org.eclipse.jdt.core.prefs (100%) create mode 100644 study-annotations-and-reflection-api/src/com/example/lottery/application/LotteryApp.java create mode 100644 study-annotations-and-reflection-api/src/com/example/lottery/model/LotteryViewModel.java create mode 100644 study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumber.java create mode 100644 study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumberGeneratorService.java create mode 100644 study-interfaces/.classpath rename {StudyInterfaces => study-interfaces}/.project (100%) create mode 100644 study-interfaces/.settings/org.eclipse.core.resources.prefs create mode 100644 study-interfaces/.settings/org.eclipse.jdt.core.prefs rename {StudyInterfaces => study-interfaces}/src/com/example/Exercise01.java (100%) rename {StudyInterfaces => study-interfaces}/src/com/example/Exercise02.java (100%) rename {StudyInterfaces => study-interfaces}/src/com/example/Exercise03.java (100%) create mode 100644 study-utility-classes/.classpath create mode 100644 study-utility-classes/.project create mode 100644 study-utility-classes/.settings/org.eclipse.core.resources.prefs create mode 100644 study-utility-classes/.settings/org.eclipse.jdt.core.prefs create mode 100644 study-utility-classes/src/com/example/StudyCollation.java create mode 100644 study-utility-classes/src/com/example/StudyDynamicString.java create mode 100644 study-utility-classes/src/com/example/StudyString.java create mode 100644 study-utility-classes/src/messages_en_US.properties create mode 100644 study-utility-classes/src/messages_tr_TR.properties diff --git a/StudyInterfaces/.classpath b/study-annotations-and-reflection-api/.classpath similarity index 100% rename from StudyInterfaces/.classpath rename to study-annotations-and-reflection-api/.classpath diff --git a/study-annotations-and-reflection-api/.project b/study-annotations-and-reflection-api/.project new file mode 100644 index 0000000..616f812 --- /dev/null +++ b/study-annotations-and-reflection-api/.project @@ -0,0 +1,17 @@ + + + study-annotations-and-reflection-api + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/StudyInterfaces/.settings/org.eclipse.core.resources.prefs b/study-annotations-and-reflection-api/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from StudyInterfaces/.settings/org.eclipse.core.resources.prefs rename to study-annotations-and-reflection-api/.settings/org.eclipse.core.resources.prefs diff --git a/StudyInterfaces/.settings/org.eclipse.jdt.core.prefs b/study-annotations-and-reflection-api/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from StudyInterfaces/.settings/org.eclipse.jdt.core.prefs rename to study-annotations-and-reflection-api/.settings/org.eclipse.jdt.core.prefs diff --git a/study-annotations-and-reflection-api/src/com/example/lottery/application/LotteryApp.java b/study-annotations-and-reflection-api/src/com/example/lottery/application/LotteryApp.java new file mode 100644 index 0000000..4f22ed4 --- /dev/null +++ b/study-annotations-and-reflection-api/src/com/example/lottery/application/LotteryApp.java @@ -0,0 +1,15 @@ +package com.example.lottery.application; + +import com.example.lottery.model.LotteryViewModel; +import com.example.lottery.service.RandomNumberGeneratorService; + +public class LotteryApp { + + public static void main(String[] args) { + var lotteryModel = new LotteryViewModel(); + var service = new RandomNumberGeneratorService(); + service.generate(lotteryModel); + System.out.println(lotteryModel.getNumbers()); + } + +} diff --git a/study-annotations-and-reflection-api/src/com/example/lottery/model/LotteryViewModel.java b/study-annotations-and-reflection-api/src/com/example/lottery/model/LotteryViewModel.java new file mode 100644 index 0000000..125beaa --- /dev/null +++ b/study-annotations-and-reflection-api/src/com/example/lottery/model/LotteryViewModel.java @@ -0,0 +1,15 @@ +package com.example.lottery.model; + +import java.util.List; + +import com.example.lottery.service.RandomNumber; + +public class LotteryViewModel { + @RandomNumber(min = 1, max = 60, distinct = true, sorted = true, size = 6) + private List numbers; + + public List getNumbers() { + return numbers; + } + +} diff --git a/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumber.java b/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumber.java new file mode 100644 index 0000000..cbca84d --- /dev/null +++ b/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumber.java @@ -0,0 +1,22 @@ +package com.example.lottery.service; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface RandomNumber { + + int min(); + + int max(); + + boolean distinct(); + + boolean sorted(); + + int size(); + +} diff --git a/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumberGeneratorService.java b/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumberGeneratorService.java new file mode 100644 index 0000000..5050078 --- /dev/null +++ b/study-annotations-and-reflection-api/src/com/example/lottery/service/RandomNumberGeneratorService.java @@ -0,0 +1,33 @@ +package com.example.lottery.service; + +import java.util.concurrent.ThreadLocalRandom; + +public class RandomNumberGeneratorService { + + public void generate(Object o) { + var clazz = o.getClass(); + for (var field : clazz.getDeclaredFields()) { + if (field.isAnnotationPresent(RandomNumber.class)) { + var randomNumberAnnotation = field.getAnnotation(RandomNumber.class); + var min = randomNumberAnnotation.min(); + var max = randomNumberAnnotation.max(); + var size = randomNumberAnnotation.size(); + var streamOfNumbers = ThreadLocalRandom.current().ints(min, max); + if (randomNumberAnnotation.distinct()) + streamOfNumbers = streamOfNumbers.distinct(); + + streamOfNumbers = streamOfNumbers.limit(size); + if (randomNumberAnnotation.sorted()) + streamOfNumbers = streamOfNumbers.sorted(); + var numbers = streamOfNumbers.boxed().toList(); + try { + field.setAccessible(true); + field.set(o, numbers); + field.setAccessible(false); + } catch (IllegalArgumentException | IllegalAccessException e) { + System.err.println("Error: %s".formatted(e.getMessage())); + } + } + } + } +} diff --git a/study-interfaces/.classpath b/study-interfaces/.classpath new file mode 100644 index 0000000..57bca72 --- /dev/null +++ b/study-interfaces/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/StudyInterfaces/.project b/study-interfaces/.project similarity index 100% rename from StudyInterfaces/.project rename to study-interfaces/.project diff --git a/study-interfaces/.settings/org.eclipse.core.resources.prefs b/study-interfaces/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/study-interfaces/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/study-interfaces/.settings/org.eclipse.jdt.core.prefs b/study-interfaces/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/study-interfaces/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/StudyInterfaces/src/com/example/Exercise01.java b/study-interfaces/src/com/example/Exercise01.java similarity index 100% rename from StudyInterfaces/src/com/example/Exercise01.java rename to study-interfaces/src/com/example/Exercise01.java diff --git a/StudyInterfaces/src/com/example/Exercise02.java b/study-interfaces/src/com/example/Exercise02.java similarity index 100% rename from StudyInterfaces/src/com/example/Exercise02.java rename to study-interfaces/src/com/example/Exercise02.java diff --git a/StudyInterfaces/src/com/example/Exercise03.java b/study-interfaces/src/com/example/Exercise03.java similarity index 100% rename from StudyInterfaces/src/com/example/Exercise03.java rename to study-interfaces/src/com/example/Exercise03.java diff --git a/study-utility-classes/.classpath b/study-utility-classes/.classpath new file mode 100644 index 0000000..57bca72 --- /dev/null +++ b/study-utility-classes/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/study-utility-classes/.project b/study-utility-classes/.project new file mode 100644 index 0000000..2842767 --- /dev/null +++ b/study-utility-classes/.project @@ -0,0 +1,17 @@ + + + study-utility-classes + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/study-utility-classes/.settings/org.eclipse.core.resources.prefs b/study-utility-classes/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/study-utility-classes/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/study-utility-classes/.settings/org.eclipse.jdt.core.prefs b/study-utility-classes/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8c9943d --- /dev/null +++ b/study-utility-classes/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=17 diff --git a/study-utility-classes/src/com/example/StudyCollation.java b/study-utility-classes/src/com/example/StudyCollation.java new file mode 100644 index 0000000..9b48124 --- /dev/null +++ b/study-utility-classes/src/com/example/StudyCollation.java @@ -0,0 +1,44 @@ +package com.example; + +import java.text.Collator; +import java.text.ParseException; +import java.text.RuleBasedCollator; +import java.util.ArrayList; +import java.util.Locale; + +public class StudyCollation { + + public static void main(String[] args) throws ParseException { + var name1 = "müller"; + var name2 = "mueller"; + System.out.println(name1.equals(name2)); + var names = new ArrayList(); + names.add("şule"); + names.add("şima"); + names.add("sema"); + names.add("ayşegül"); + names.add("zehra"); + names.add("ali"); + names.add("veli"); + System.out.println(names); + names.sort(String::compareTo); + System.out.println(names); + // şule == schule + System.out.println("şule".equals("schule")); + // şima == shema + System.out.println("şima".equals("shema")); + String basicRules= "< z < b < c < ç < d < e < f < g < ğ < h "+ + "< ı < i < j < k < l < m < n < o < ö < p "+ + "< r < s < ş < t < u < ü < v < y < a "; + String trExpension= "& şi ; she & ş ; sch & s ; ş & u ; ü & i ; ı " + + "& c ; ç & o ; ö & ğ ; g" ; + final Collator collator= new RuleBasedCollator(basicRules + trExpension); + Collator.getInstance(new Locale("tr","TR")); + collator.setStrength(Collator.PRIMARY); + System.out.println(collator.equals("şule","schule")); + System.out.println(collator.equals("şima","shema")); + names.sort(collator::compare); + System.out.println(names); + } + +} diff --git a/study-utility-classes/src/com/example/StudyDynamicString.java b/study-utility-classes/src/com/example/StudyDynamicString.java new file mode 100644 index 0000000..e52fc77 --- /dev/null +++ b/study-utility-classes/src/com/example/StudyDynamicString.java @@ -0,0 +1,20 @@ +package com.example; + +public class StudyDynamicString { + + @SuppressWarnings("unused") + public static void main(String[] args) { + String name = "jack"; // immutable + int result = 42; + // StringBuilder: not thread-safe + // StringBuffer: thread-safe + StringBuffer message = new StringBuffer(388888890); + var start = System.currentTimeMillis(); + for (var i=0;i<50_000_000;++i) + message.append(i); + var stop = System.currentTimeMillis(); + System.out.println(message.length()); + System.err.println("Duration: %d".formatted(stop-start)); + } + +} diff --git a/study-utility-classes/src/com/example/StudyString.java b/study-utility-classes/src/com/example/StudyString.java new file mode 100644 index 0000000..ad555ad --- /dev/null +++ b/study-utility-classes/src/com/example/StudyString.java @@ -0,0 +1,39 @@ +package com.example; + +import java.text.DecimalFormat; +import java.text.MessageFormat; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; +import java.util.Locale; +import java.util.ResourceBundle; + +public class StudyString { + + public static void main(String[] args) { + System.setProperty("user.language", "tr"); // ISO2 + System.setProperty("user.country", "TR"); + System.getenv().forEach((key,value) -> System.out.println("%s: %s".formatted(key,value))); + System.getProperties().forEach((key,value) -> System.out.println("%s: %s".formatted(key,value))); + String city = "izmir"; + Locale tr_TR= new Locale("tr", "TR"); + System.out.println(city.toUpperCase(tr_TR)); + + var now = ZonedDateTime.now(); + DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL) + .withLocale(Locale.GERMAN); + System.out.println(dtf.format(now)); + + double money = 12_345.67; + DecimalFormat df = (DecimalFormat) DecimalFormat.getCurrencyInstance(Locale.CHINA); + System.out.println(df.format(money)); + + String fullname= "Jack Bauer"; + var resourceBundle= ResourceBundle.getBundle("messages",Locale.US); + var helloTemplate = resourceBundle.getString("hello"); + var formatter = new MessageFormat(helloTemplate, tr_TR); + + System.out.println(formatter.format(new Object[] {fullname})); + } + +} diff --git a/study-utility-classes/src/messages_en_US.properties b/study-utility-classes/src/messages_en_US.properties new file mode 100644 index 0000000..ce6bf53 --- /dev/null +++ b/study-utility-classes/src/messages_en_US.properties @@ -0,0 +1 @@ +hello:Hello, {0}! \ No newline at end of file diff --git a/study-utility-classes/src/messages_tr_TR.properties b/study-utility-classes/src/messages_tr_TR.properties new file mode 100644 index 0000000..d035351 --- /dev/null +++ b/study-utility-classes/src/messages_tr_TR.properties @@ -0,0 +1 @@ +hello=Merhaba, {0}! \ No newline at end of file