diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/BronzeJobCard.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/BronzeJobCard.java new file mode 100644 index 0000000000..cb8d7e8422 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/BronzeJobCard.java @@ -0,0 +1,21 @@ +package com.baeldung.reflection.createobject.basic; + +import java.lang.reflect.InvocationTargetException; + +public class BronzeJobCard { + private Object jobType; + public void setJobType(String jobType) throws ClassNotFoundException, + NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + Class jobTypeClass = Class.forName(jobType); + this.jobType = jobTypeClass.getDeclaredConstructor().newInstance(); + } + public String startJob() { + if(this.jobType instanceof RepairJob) { + return "Start Bronze " + ((RepairJob) this.jobType).getJobType(); + } + if(this.jobType instanceof MaintenanceJob) { + return "Start Bronze " + ((MaintenanceJob) this.jobType).getJobType(); + } + return "Bronze Job Failed"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/GoldJobCard.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/GoldJobCard.java new file mode 100644 index 0000000000..f6b14b9355 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/GoldJobCard.java @@ -0,0 +1,17 @@ +package com.baeldung.reflection.createobject.basic; + +import java.lang.reflect.InvocationTargetException; + +public class GoldJobCard { + private T jobType; + + public void setJobType(Class jobTypeClass) throws + NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + this.jobType = jobTypeClass.getDeclaredConstructor().newInstance(); + } + + public String startJob() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + return "Start Gold " + this.jobType.getClass().getMethod("getJobType") + .invoke(this.jobType).toString(); + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/MaintenanceJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/MaintenanceJob.java new file mode 100644 index 0000000000..8c268f0491 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/MaintenanceJob.java @@ -0,0 +1,7 @@ +package com.baeldung.reflection.createobject.basic; + +public class MaintenanceJob { + public String getJobType() { + return "Maintenance Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/PaintJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/PaintJob.java new file mode 100644 index 0000000000..74e6e2ccd2 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/PaintJob.java @@ -0,0 +1,7 @@ +package com.baeldung.reflection.createobject.basic; + +public class PaintJob { + public String getJobType() { + return "Paint Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/RepairJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/RepairJob.java new file mode 100644 index 0000000000..22fe8e3742 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/RepairJob.java @@ -0,0 +1,7 @@ +package com.baeldung.reflection.createobject.basic; + +public class RepairJob { + public String getJobType() { + return "Repair Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/SilverJobCard.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/SilverJobCard.java new file mode 100644 index 0000000000..231924bbaa --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/basic/SilverJobCard.java @@ -0,0 +1,22 @@ +package com.baeldung.reflection.createobject.basic; + +import java.lang.reflect.InvocationTargetException; + +public class SilverJobCard { + private Object jobType; + + public void setJobType(Class jobTypeClass) throws + NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + this.jobType = jobTypeClass.getDeclaredConstructor().newInstance(); + } + + public String startJob() { + if (this.jobType instanceof RepairJob) { + return "Start Silver " + ((RepairJob) this.jobType).getJobType(); + } + if (this.jobType instanceof MaintenanceJob) { + return "Start Silver " + ((MaintenanceJob) this.jobType).getJobType(); + } + return "Silver Job Failed"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/Job.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/Job.java new file mode 100644 index 0000000000..4fbf00e775 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/Job.java @@ -0,0 +1,5 @@ +package com.baeldung.reflection.createobject.special; + +public interface Job { + String getJobType(); +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/MaintenanceJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/MaintenanceJob.java new file mode 100644 index 0000000000..d93c20a09a --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/MaintenanceJob.java @@ -0,0 +1,7 @@ +package com.baeldung.reflection.createobject.special; + +public class MaintenanceJob implements Job { + public String getJobType() { + return "Maintenance Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PaintJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PaintJob.java new file mode 100644 index 0000000000..3eae7cb0c6 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PaintJob.java @@ -0,0 +1,8 @@ +package com.baeldung.reflection.createobject.special; + +public class PaintJob implements Job { + @Override + public String getJobType() { + return "Paint Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PlatinumJobCard.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PlatinumJobCard.java new file mode 100644 index 0000000000..4dd71e7fea --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/PlatinumJobCard.java @@ -0,0 +1,16 @@ +package com.baeldung.reflection.createobject.special; + +import java.lang.reflect.InvocationTargetException; + +public class PlatinumJobCard { + private T jobType; + + public void setJobType(Class jobTypeClass) throws + NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + this.jobType = jobTypeClass.getDeclaredConstructor().newInstance(); + } + + public String startJob() { + return "Start Platinum " + this.jobType.getJobType(); + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/RepairJob.java b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/RepairJob.java new file mode 100644 index 0000000000..985160fe48 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/java/com/baeldung/reflection/createobject/special/RepairJob.java @@ -0,0 +1,7 @@ +package com.baeldung.reflection.createobject.special; + +public class RepairJob implements Job { + public String getJobType() { + return "Repair Job"; + } +} diff --git a/core-java-modules/core-java-reflection-2/src/main/resources/Bronze.puml b/core-java-modules/core-java-reflection-2/src/main/resources/Bronze.puml new file mode 100644 index 0000000000..21f05fe52b --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/resources/Bronze.puml @@ -0,0 +1,20 @@ +@startuml +'https://plantuml.com/class-diagram + +class BronzeJobCard { + -Object jobType + +setJobType(String jobType) + +startJob() +} + +class MaintenanceJob { + +getJobType() +} +class RepairJob { + +getJobType() +} +BronzeJobCard -left-> MaintenanceJob:creates +BronzeJobCard -right-> RepairJob:creates + + +@enduml \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/src/main/resources/Gold.puml b/core-java-modules/core-java-reflection-2/src/main/resources/Gold.puml new file mode 100644 index 0000000000..2055154c21 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/resources/Gold.puml @@ -0,0 +1,20 @@ +@startuml +'https://plantuml.com/class-diagram + +class GoldJobCard { + -T jobType + +setJobType(Class jobTypeClass) + +startJob() +} + +class MaintenanceJob { + +getJobType() +} +class RepairJob { + +getJobType() +} +GoldJobCard -left-> MaintenanceJob:creates +GoldJobCard -right-> RepairJob:creates + + +@enduml \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/src/main/resources/Platinum.puml b/core-java-modules/core-java-reflection-2/src/main/resources/Platinum.puml new file mode 100644 index 0000000000..d9dc9b028d --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/resources/Platinum.puml @@ -0,0 +1,25 @@ +@startuml +'https://plantuml.com/class-diagram +interface Job { ++getJobType +} +class PlatinumJobCard { + +setJobType(Class jobTypeClass) + +startJob() +} + +class MaintenanceJob implements Job { + +getJobType() +} +class RepairJob implements Job { + +getJobType() +} +class PaintJob implements Job { + +getJobType() +} +PlatinumJobCard -up-> MaintenanceJob:creates +PlatinumJobCard -up-> RepairJob:creates +PlatinumJobCard -up-> PaintJob:creates + + +@enduml \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/src/main/resources/Silver.puml b/core-java-modules/core-java-reflection-2/src/main/resources/Silver.puml new file mode 100644 index 0000000000..46a9c88295 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/main/resources/Silver.puml @@ -0,0 +1,20 @@ +@startuml +'https://plantuml.com/class-diagram + +class SilverJobCard { + -Object jobType + +setJobType(Class jobTypeClass); + +startJob(); +} + +class MaintenanceJob { + +getJobType(); +} +class RepairJob { + +getJobType(); +} +SilverJobCard -left-> MaintenanceJob:creates +SilverJobCard -right-> RepairJob:creates + + +@enduml \ No newline at end of file diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectBasicUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectBasicUnitTest.java new file mode 100644 index 0000000000..c8dcabf190 --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectBasicUnitTest.java @@ -0,0 +1,67 @@ +package com.baeldung.reflection.createobject; + +import com.baeldung.reflection.createobject.basic.*; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationTargetException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CreateObjectBasicUnitTest { + @Test + public void givenBronzeJobCard_whenJobTypeRepairAndMaintenance_thenStartJob() throws ClassNotFoundException, + InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + + BronzeJobCard bronzeJobCard1 = new BronzeJobCard(); + bronzeJobCard1.setJobType("com.baeldung.reflection.createobject.basic.RepairJob"); + assertEquals("Start Bronze Repair Job", bronzeJobCard1.startJob()); + + BronzeJobCard bronzeJobCard2 = new BronzeJobCard(); + bronzeJobCard2.setJobType("com.baeldung.reflection.createobject.basic.MaintenanceJob"); + assertEquals("Start Bronze Maintenance Job", bronzeJobCard2.startJob()); + } + @Test + public void givenBronzeJobCard_whenJobTypePaint_thenFailJob() throws ClassNotFoundException, + InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + + BronzeJobCard bronzeJobCard = new BronzeJobCard(); + bronzeJobCard.setJobType("com.baeldung.reflection.createobject.basic.PaintJob"); + assertEquals("Bronze Job Failed", bronzeJobCard.startJob()); + } + @Test + public void givenSilverJobCard_whenJobTypeRepairAndMaintenance_thenStartJob() throws InvocationTargetException, + NoSuchMethodException, InstantiationException, IllegalAccessException { + + SilverJobCard silverJobCard1 = new SilverJobCard(); + silverJobCard1.setJobType(RepairJob.class); + assertEquals("Start Silver Repair Job", silverJobCard1.startJob()); + + SilverJobCard silverJobCard2 = new SilverJobCard(); + silverJobCard2.setJobType(MaintenanceJob.class); + assertEquals("Start Silver Maintenance Job", silverJobCard2.startJob()); + } + @Test + public void givenSilverJobCard_whenJobTypePaint_thenFailJob() throws ClassNotFoundException, + InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + + SilverJobCard silverJobCard = new SilverJobCard(); + silverJobCard.setJobType(PaintJob.class); + assertEquals("Silver Job Failed", silverJobCard.startJob()); + } + @Test + public void givenGoldJobCard_whenJobTypeRepairMaintenanceAndPaint_thenStartJob() throws InvocationTargetException, + NoSuchMethodException, InstantiationException, IllegalAccessException { + + GoldJobCard goldJobCard1 = new GoldJobCard(); + goldJobCard1.setJobType(RepairJob.class); + assertEquals("Start Gold Repair Job", goldJobCard1.startJob()); + + GoldJobCard goldJobCard2 = new GoldJobCard(); + goldJobCard2.setJobType(MaintenanceJob.class); + assertEquals("Start Gold Maintenance Job", goldJobCard2.startJob()); + + GoldJobCard goldJobCard3 = new GoldJobCard(); + goldJobCard3.setJobType(PaintJob.class); + assertEquals("Start Gold Paint Job", goldJobCard3.startJob()); + } +} diff --git a/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectSpecialUnitTest.java b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectSpecialUnitTest.java new file mode 100644 index 0000000000..99fdf7be2d --- /dev/null +++ b/core-java-modules/core-java-reflection-2/src/test/java/com/baeldung/reflection/createobject/CreateObjectSpecialUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.reflection.createobject; + +import com.baeldung.reflection.createobject.special.MaintenanceJob; +import com.baeldung.reflection.createobject.special.PaintJob; +import com.baeldung.reflection.createobject.special.PlatinumJobCard; +import com.baeldung.reflection.createobject.special.RepairJob; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationTargetException; + +public class CreateObjectSpecialUnitTest { + @Test + public void givenPlatinumJobCard_whenJobTypeRepairMaintenanceAndPaint_thenStartJob() throws InvocationTargetException, + NoSuchMethodException, InstantiationException, IllegalAccessException { + + PlatinumJobCard platinumJobCard1 = new PlatinumJobCard(); + platinumJobCard1.setJobType(RepairJob.class); + assertEquals("Start Platinum Repair Job", platinumJobCard1.startJob()); + + PlatinumJobCard platinumJobCard2 = new PlatinumJobCard(); + platinumJobCard2.setJobType(MaintenanceJob.class); + assertEquals("Start Platinum Maintenance Job", platinumJobCard2.startJob()); + + PlatinumJobCard platinumJobCard3 = new PlatinumJobCard(); + platinumJobCard3.setJobType(PaintJob.class); + assertEquals("Start Platinum Paint Job", platinumJobCard3.startJob()); + } +}