├── .gitignore
├── .idea
├── .gitignore
├── misc.xml
└── modules.xml
├── README.md
├── belajar-java-oop.iml
└── src
├── Employee.java
├── Manager.java
├── ManagerApp.java
├── Parent.java
├── ParentApp.java
├── Person.java
├── PersonApp.java
├── PolymorphismApp.java
├── Shape.java
├── ShapeApp.java
├── VicePresident.java
└── programmer
└── zaman
└── now
├── annotation
├── Fancy.java
└── NotBlank.java
├── application
├── AnimalApp.java
├── Application.java
├── CarApp.java
├── CategoryApp.java
├── CompanyApp.java
├── DatabaseApp.java
├── EnumApp.java
├── EqualsApp.java
├── HelloWorldApp.java
├── LocationApp.java
├── ReadApp.java
├── RecordApp.java
├── ReflectionApp.java
├── StackTraceApp.java
├── StaticApp.java
└── ValidationApp.java
├── data
├── Animal.java
├── Application.java
├── Avanza.java
├── Bus.java
├── Car.java
├── Cat.java
├── Category.java
├── City.java
├── Company.java
├── Constant.java
├── Country.java
├── CreateUserRequest.java
├── Customer.java
├── Data.java
├── HasBrand.java
├── HelloWorld.java
├── IsMaintenance.java
├── Level.java
├── Location.java
├── LoginRequest.java
├── Product.java
├── ProductApp.java
└── SocialMedia.java
├── error
├── BlankException.java
├── DatabaseError.java
└── ValidationException.java
└── util
├── MathUtil.java
└── ValidationUtil.java
/.gitignore:
--------------------------------------------------------------------------------
1 | out
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Belajar Java Dasar
2 |
3 | Ini adalah project belajar java dasar di channel :
4 |
5 | Programmer Zaman Now
--------------------------------------------------------------------------------
/belajar-java-oop.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/Employee.java:
--------------------------------------------------------------------------------
1 | class Employee {
2 |
3 | String name;
4 |
5 | Employee(String name) {
6 | this.name = name;
7 | }
8 |
9 | void sayHello(String name) {
10 | System.out.println("Hi " + name + ", My Name Is Employee " + this.name);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/Manager.java:
--------------------------------------------------------------------------------
1 | class Manager extends Employee {
2 |
3 | String company;
4 |
5 | Manager(String name) {
6 | super(name);
7 | }
8 |
9 | Manager(String name, String company) {
10 | super(name);
11 | this.company = company;
12 | }
13 |
14 | void sayHello(String name) {
15 | System.out.println("Hi " + name + ", My Name Is Manager " + this.name);
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/src/ManagerApp.java:
--------------------------------------------------------------------------------
1 | public class ManagerApp {
2 | public static void main(String[] args) {
3 |
4 |
5 | var manager = new Manager("Eko");
6 | manager.sayHello("Budi");
7 |
8 | var vp = new VicePresident("Joko");
9 | vp.sayHello("Budi");
10 |
11 | System.out.println(manager);
12 | System.out.println(manager.toString());
13 | System.out.println(vp);
14 | System.out.println(vp.toString());
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/Parent.java:
--------------------------------------------------------------------------------
1 | class Parent {
2 | String name;
3 | void doIt(){
4 | System.out.println("Do it in parent");
5 | }
6 | }
7 |
8 | class Child extends Parent{
9 | String name;
10 | void doIt(){
11 | System.out.println("Do it in child");
12 | System.out.println("Parent name is " + super.name);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/ParentApp.java:
--------------------------------------------------------------------------------
1 | public class ParentApp {
2 | public static void main(String[] args) {
3 |
4 |
5 | Child child = new Child();
6 | child.name = "Eko";
7 | child.doIt();
8 | System.out.println(child.name);
9 |
10 | Parent parent = (Parent) child;
11 | parent.doIt();
12 | System.out.println(parent.name);
13 |
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/Person.java:
--------------------------------------------------------------------------------
1 | class Person {
2 | String name;
3 | String address;
4 | final String country = "Indonesia";
5 |
6 | Person(String name, String address){
7 | this.name = name;
8 | this.address = address;
9 | }
10 |
11 | Person(String paramName){
12 | this(paramName, null);
13 | }
14 |
15 | Person(){
16 | this(null);
17 | }
18 |
19 | void sayHello(String name){
20 | System.out.println("Hello " + name + ", My Name is " + this.name);
21 | }
22 | }
--------------------------------------------------------------------------------
/src/PersonApp.java:
--------------------------------------------------------------------------------
1 | public class PersonApp {
2 | public static void main(String[] args) {
3 |
4 | var person1 = new Person("Eko", "Subang");
5 |
6 | System.out.println(person1.name);
7 | System.out.println(person1.address);
8 | System.out.println(person1.country);
9 |
10 | person1.sayHello("Budi");
11 |
12 | Person person2 = new Person("Budi");
13 |
14 | Person person3;
15 | person3 = new Person();
16 | person3.name = "Joko";
17 | person3.sayHello("Budi");
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/PolymorphismApp.java:
--------------------------------------------------------------------------------
1 | public class PolymorphismApp {
2 | public static void main(String[] args) {
3 |
4 |
5 | Employee employee = new Employee("EKo");
6 | employee.sayHello("Budi");
7 |
8 | employee = new Manager("Eko");
9 | employee.sayHello("Budi");
10 |
11 | employee = new VicePresident("Eko");
12 | employee.sayHello("Budi");
13 |
14 | sayHello(new Employee("Eko"));
15 | sayHello(new Manager("Joko"));
16 | sayHello(new VicePresident("Budi"));
17 | }
18 |
19 | static void sayHello(Employee employee) {
20 | if (employee instanceof VicePresident) {
21 | VicePresident vicePresident = (VicePresident) employee;
22 | System.out.println("Hello VP " + vicePresident.name);
23 | } else if (employee instanceof Manager) {
24 | Manager manager = (Manager) employee;
25 | System.out.println("Hello Manager " + manager.name);
26 | } else {
27 | System.out.println("Hello " + employee.name);
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/Shape.java:
--------------------------------------------------------------------------------
1 | class Shape {
2 |
3 | int getCorner(){
4 | return 0;
5 | }
6 |
7 | }
8 |
9 | class Rectangle extends Shape {
10 |
11 | int getCorner(){
12 | return 4;
13 | }
14 |
15 | int getParentCorner(){
16 | return super.getCorner();
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/ShapeApp.java:
--------------------------------------------------------------------------------
1 | public class ShapeApp {
2 | public static void main(String[] args) {
3 |
4 |
5 | var shape = new Shape();
6 | System.out.println(shape.getCorner());
7 |
8 | var rectangle = new Rectangle();
9 | System.out.println(rectangle.getCorner());
10 | System.out.println(rectangle.getParentCorner());
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/VicePresident.java:
--------------------------------------------------------------------------------
1 | class VicePresident extends Manager {
2 |
3 | VicePresident(String name){
4 | super(name);
5 | }
6 |
7 | void sayHello(String name){
8 | System.out.println("Hi " + name + ", My Name Is VP " + this.name);
9 | }
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/annotation/Fancy.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.TYPE, ElementType.METHOD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface Fancy {
11 |
12 | String name();
13 |
14 | String[] tags() default {};
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/annotation/NotBlank.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.annotation;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Target({ElementType.FIELD})
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface NotBlank {
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/AnimalApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.annotation.Fancy;
4 | import programmer.zaman.now.data.Animal;
5 | import programmer.zaman.now.data.Cat;
6 |
7 | @Fancy(name = "AnimalApp", tags = {"application", "java"})
8 | public class AnimalApp {
9 | public static void main(String[] args) {
10 |
11 |
12 | Animal animal = new Cat();
13 | animal.name = "Puss";
14 | animal.run();
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/Application.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.*;
4 |
5 | public class Application {
6 | public static void main(String[] args) {
7 |
8 | Product product = new Product("Mac Book Pro", 30_000_000);
9 | System.out.println(product.name);
10 | System.out.println(product.price);
11 |
12 | Data data = new Data();
13 |
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/CarApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.Avanza;
4 | import programmer.zaman.now.data.Car;
5 |
6 | public class CarApp {
7 | public static void main(String[] args) {
8 |
9 | Car car = new Avanza();
10 | System.out.println(car.getTier());
11 | car.drive();
12 |
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/CategoryApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.Category;
4 |
5 | public class CategoryApp {
6 | public static void main(String[] args) {
7 |
8 |
9 | var category = new Category();
10 | category.setId("ID");
11 | category.setId(null);
12 |
13 | System.out.println(category.getId());
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/CompanyApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.Company;
4 |
5 | public class CompanyApp {
6 | public static void main(String[] args) {
7 |
8 |
9 | Company company = new Company();
10 | company.setName("Programmer Zaman Now");
11 |
12 | Company.Employee employee = company.new Employee();
13 | employee.setName("Eko");
14 |
15 | System.out.println(employee.getName());
16 | System.out.println(employee.getCompany());
17 |
18 | Company company2 = new Company();
19 | company2.setName("Belum Ada");
20 |
21 | Company.Employee employee2 = company2.new Employee();
22 | employee2.setName("Budi");
23 |
24 | System.out.println(employee2.getName());
25 | System.out.println(employee2.getCompany());
26 |
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/DatabaseApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.error.DatabaseError;
4 |
5 | public class DatabaseApp {
6 | public static void main(String[] args) {
7 | connectDatabase("eko", null);
8 | System.out.println("Sukses");
9 | }
10 |
11 | public static void connectDatabase(String username, String password) {
12 | if (username == null || password == null) {
13 | throw new DatabaseError("Tidak bisa konek ke database");
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/EnumApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.Customer;
4 | import programmer.zaman.now.data.Level;
5 |
6 | public class EnumApp {
7 | public static void main(String[] args) {
8 |
9 | Customer customer = new Customer();
10 | customer.setName("Eko");
11 | customer.setLevel(Level.PREMIUM);
12 |
13 | System.out.println(customer.getName());
14 | System.out.println(customer.getLevel());
15 | System.out.println(customer.getLevel().getDescription());
16 |
17 | String levelName = Level.VIP.name();
18 | System.out.println(levelName);
19 |
20 | Level level = Level.valueOf("PREMIUM");
21 | System.out.println(level);
22 |
23 | System.out.println("Print Level");
24 | for (var value : Level.values()) {
25 | System.out.println(value);
26 | }
27 |
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/EqualsApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | public class EqualsApp {
4 | public static void main(String[] args) {
5 |
6 |
7 | String first = "Eko";
8 | first = first + " " + "Khannedy";
9 |
10 | System.out.println(first);
11 |
12 | String second = "Eko Khannedy";
13 | System.out.println(second);
14 |
15 | System.out.println(first == second);
16 | System.out.println(first.equals(second));
17 |
18 | String third = "Eko Khannedy";
19 |
20 | System.out.println(second == third);
21 | System.out.println(second.equals(third));
22 |
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/HelloWorldApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.HelloWorld;
4 |
5 | public class HelloWorldApp {
6 | public static void main(String[] args) {
7 |
8 |
9 | HelloWorld english = new HelloWorld(){
10 |
11 | public void sayHello() {
12 | System.out.println("Hello");
13 | }
14 |
15 | public void sayHello(String name) {
16 | System.out.println("Hello " + name);
17 | }
18 | };
19 |
20 | HelloWorld indonesia = new HelloWorld(){
21 |
22 | public void sayHello() {
23 | System.out.println("Halo");
24 | }
25 |
26 | public void sayHello(String name) {
27 | System.out.println("Halo " + name);
28 | }
29 | };
30 |
31 | english.sayHello();
32 | english.sayHello("Eko");
33 |
34 | indonesia.sayHello();
35 | indonesia.sayHello("Eko");
36 |
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/LocationApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.City;
4 | import programmer.zaman.now.data.Location;
5 |
6 | public class LocationApp {
7 | public static void main(String[] args) {
8 |
9 | // var location = new Location(); // ERROR
10 | var city = new City();
11 | city.name = "Jakarta";
12 |
13 | System.out.println(city.name);
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/ReadApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.FileReader;
5 | import java.io.IOException;
6 |
7 | public class ReadApp {
8 | public static void main(String[] args) {
9 |
10 | try (BufferedReader reader = new BufferedReader(new FileReader("README.md"))) {
11 |
12 | while (true) {
13 | String line = reader.readLine();
14 | if (line == null) {
15 | break;
16 | }
17 | System.out.println(line);
18 | }
19 |
20 | } catch (Throwable throwable) {
21 | System.out.println("Error membaca file " + throwable.getMessage());
22 | }
23 |
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/RecordApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.LoginRequest;
4 |
5 | public class RecordApp {
6 | public static void main(String[] args) {
7 |
8 | LoginRequest loginRequest = new LoginRequest("eko", "rahasia");
9 |
10 | System.out.println(loginRequest.username());
11 | System.out.println(loginRequest.password());
12 | System.out.println(loginRequest);
13 |
14 | System.out.println(new LoginRequest());
15 | System.out.println(new LoginRequest("eko"));
16 | System.out.println(new LoginRequest("eko", "rahasia"));
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/ReflectionApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.data.CreateUserRequest;
4 | import programmer.zaman.now.util.ValidationUtil;
5 |
6 | public class ReflectionApp {
7 | public static void main(String[] args) {
8 |
9 | CreateUserRequest request = new CreateUserRequest();
10 | request.setUsername("eko");
11 | request.setPassword("eko");
12 | request.setName("eko");
13 |
14 | ValidationUtil.validationReflection(request);
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/StackTraceApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | public class StackTraceApp {
4 | public static void main(String[] args) {
5 |
6 | try {
7 | sampleError();
8 | } catch (RuntimeException exception) {
9 | exception.printStackTrace();
10 | }
11 |
12 | }
13 |
14 | public static void sampleError() {
15 | try {
16 | String[] names = {
17 | "Eko", "Kurniawan", "Khannedy"
18 | };
19 |
20 | System.out.println(names[100]);
21 | } catch (Throwable throwable) {
22 | throw new RuntimeException(throwable);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/StaticApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import static programmer.zaman.now.data.Application.PROCESSORS;
4 | import static programmer.zaman.now.data.Constant.*;
5 | import programmer.zaman.now.data.Country;
6 | import programmer.zaman.now.util.MathUtil;
7 |
8 | public class StaticApp {
9 | public static void main(String[] args) {
10 |
11 | System.out.println(APPLICATION);
12 | System.out.println(VERSION);
13 |
14 | System.out.println(
15 | MathUtil.sum(1,1,1,1,1)
16 | );
17 |
18 | Country.City city = new Country.City();
19 | city.setName("Subang");
20 |
21 | System.out.println(city.getName());
22 |
23 | System.out.println(PROCESSORS);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/application/ValidationApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.application;
2 |
3 | import programmer.zaman.now.annotation.Fancy;
4 | import programmer.zaman.now.data.LoginRequest;
5 | import programmer.zaman.now.error.ValidationException;
6 | import programmer.zaman.now.util.ValidationUtil;
7 |
8 | public class ValidationApp {
9 |
10 | @Fancy(name = "AnimalApp", tags = {"application", "java"})
11 | public static void main(String[] args) {
12 |
13 | LoginRequest loginRequest = new LoginRequest("eko", "rahasia");
14 |
15 | try {
16 | ValidationUtil.validate(loginRequest);
17 | System.out.println("Data valid");
18 | } catch (ValidationException | NullPointerException exception) {
19 | System.out.println("Data tidak valid : " + exception.getMessage());
20 | } finally {
21 | System.out.println("Selalu di eksekusi");
22 | }
23 |
24 |
25 | LoginRequest loginRequest2 = new LoginRequest(null, null);
26 | ValidationUtil.validateRuntime(loginRequest2);
27 | System.out.println("Sukses");
28 |
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Animal.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public abstract class Animal {
4 |
5 | public String name;
6 |
7 | public abstract void run();
8 | }
9 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Application.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Application {
4 |
5 | public static final int PROCESSORS;
6 |
7 | static {
8 | System.out.println("Mengakses class Application");
9 | PROCESSORS = Runtime.getRuntime().availableProcessors();
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Avanza.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Avanza implements Car{
4 |
5 | public void drive() {
6 | System.out.println("Avanza drive");
7 | }
8 |
9 | public int getTier() {
10 | return 4;
11 | }
12 |
13 | public String getBrand() {
14 | return "Toyota";
15 | }
16 |
17 | public boolean isMaintenance() {
18 | return false;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Bus.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Bus implements Car{
4 | public void drive() {
5 | System.out.println("Bus drive");
6 | }
7 |
8 | public int getTier() {
9 | return 8;
10 | }
11 |
12 | public String getBrand() {
13 | return "HINO";
14 | }
15 |
16 | public boolean isMaintenance() {
17 | return false;
18 | }
19 |
20 | public boolean isBig() {
21 | return true;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Car.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | import programmer.zaman.now.annotation.Fancy;
4 |
5 | @Fancy(name = "Car", tags = {"application", "java"})
6 | public interface Car extends HasBrand, IsMaintenance {
7 |
8 | void drive();
9 |
10 | int getTier();
11 |
12 | default boolean isBig() {
13 | return false;
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Cat.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Cat extends Animal {
4 |
5 | public void run() {
6 | System.out.println("Cat " + name + " is run");
7 | }
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Category.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Category {
4 |
5 | private String id;
6 |
7 | private boolean expensive;
8 |
9 | public String getId() {
10 | return id;
11 | }
12 |
13 | public void setId(String id) {
14 | if(id != null){
15 | this.id = id;
16 | }
17 | }
18 |
19 | public boolean isExpensive() {
20 | return expensive;
21 | }
22 |
23 | public void setExpensive(boolean expensive) {
24 | this.expensive = expensive;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/City.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class City extends Location {
4 | }
5 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Company.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Company {
4 |
5 | private String name;
6 |
7 | public String getName() {
8 | return name;
9 | }
10 |
11 | public void setName(String name) {
12 | this.name = name;
13 | }
14 |
15 | public class Employee {
16 |
17 | private String name;
18 |
19 | public String getCompany() {
20 | return Company.this.name;
21 | }
22 |
23 | public String getName() {
24 | return name;
25 | }
26 |
27 | public void setName(String name) {
28 | this.name = name;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Constant.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Constant {
4 |
5 | public static final String APPLICATION = "Belajar Java";
6 | public static final int VERSION = 1;
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Country.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Country {
4 |
5 | private String name;
6 |
7 | public String getName() {
8 | return name;
9 | }
10 |
11 | public void setName(String name) {
12 | this.name = name;
13 | }
14 |
15 | public static class City {
16 |
17 | private String name;
18 |
19 | public String getName() {
20 | return name;
21 | }
22 |
23 | public void setName(String name) {
24 | this.name = name;
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/CreateUserRequest.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | import programmer.zaman.now.annotation.NotBlank;
4 |
5 | public class CreateUserRequest {
6 |
7 | @NotBlank
8 | private String username;
9 |
10 | @NotBlank
11 | private String password;
12 |
13 | @NotBlank
14 | private String name;
15 |
16 | public String getName() {
17 | return name;
18 | }
19 |
20 | public void setName(String name) {
21 | this.name = name;
22 | }
23 |
24 | public String getUsername() {
25 | return username;
26 | }
27 |
28 | public void setUsername(String username) {
29 | this.username = username;
30 | }
31 |
32 | public String getPassword() {
33 | return password;
34 | }
35 |
36 | public void setPassword(String password) {
37 | this.password = password;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Customer.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Customer {
4 |
5 | private String name;
6 |
7 | private Level level;
8 |
9 | public String getName() {
10 | return name;
11 | }
12 |
13 | public void setName(String name) {
14 | this.name = name;
15 | }
16 |
17 | public Level getLevel() {
18 | return level;
19 | }
20 |
21 | public void setLevel(Level level) {
22 | this.level = level;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Data.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Data {
4 | }
5 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/HasBrand.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public interface HasBrand {
4 |
5 | String getBrand();
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/HelloWorld.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public interface HelloWorld {
4 |
5 | void sayHello();
6 |
7 | void sayHello(String name);
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/IsMaintenance.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public interface IsMaintenance {
4 |
5 | boolean isMaintenance();
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Level.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | import programmer.zaman.now.annotation.Fancy;
4 |
5 | @Fancy(name = "AnimalApp", tags = {"application", "java"})
6 | public enum Level {
7 | STANDARD("Standard Level"),
8 | PREMIUM("Premium Level"),
9 | VIP("VIP Level");
10 |
11 | private String description;
12 |
13 | Level(String description){
14 | this.description = description;
15 | }
16 |
17 | public String getDescription() {
18 | return description;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Location.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public abstract class Location {
4 |
5 | public String name;
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/LoginRequest.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public record LoginRequest(String username, String password) {
4 |
5 | public LoginRequest {
6 | System.out.println("Membuat object LoginRequest");
7 | }
8 |
9 | public LoginRequest(String username) {
10 | this(username, "");
11 | }
12 |
13 | public LoginRequest() {
14 | this("", "");
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/Product.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class Product {
4 |
5 | public String name;
6 | public int price;
7 |
8 | public Product(String name, int price) {
9 | this.name = name;
10 | this.price = price;
11 | }
12 |
13 | public String toString() {
14 | return "Product name:" + name + ", price:" + price;
15 | }
16 |
17 | @Override
18 | public boolean equals(Object o) {
19 | if (this == o) return true;
20 | if (o == null || getClass() != o.getClass()) return false;
21 |
22 | Product product = (Product) o;
23 |
24 | if (price != product.price) return false;
25 | return name != null ? name.equals(product.name) : product.name == null;
26 | }
27 |
28 | @Override
29 | public int hashCode() {
30 | int result = name != null ? name.hashCode() : 0;
31 | result = 31 * result + price;
32 | return result;
33 | }
34 |
35 | // public boolean equals(Object o) {
36 | // if (o == this) {
37 | // return true;
38 | // }
39 | //
40 | // if (!(o instanceof Product)) {
41 | // return false;
42 | // }
43 | //
44 | // Product product = (Product) o;
45 | //
46 | // if (this.price != product.price) {
47 | // return false;
48 | // }
49 | //
50 | // if (this.name != null) {
51 | // return this.name.equals(product.name);
52 | // } else {
53 | // return product.name == null;
54 | // }
55 | // }
56 | }
57 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/ProductApp.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | public class ProductApp {
4 | public static void main(String[] args) {
5 |
6 | Product product = new Product("Mac Book Pro", 30000000);
7 |
8 | System.out.println(product.name);
9 | System.out.println(product.price);
10 |
11 | System.out.println(product);
12 |
13 | Product product2 = new Product("Mac Book Pro", 30000000);
14 |
15 | System.out.println(product.equals(product2));
16 | System.out.println(product.hashCode() == product2.hashCode());
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/data/SocialMedia.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.data;
2 |
3 | class SocialMedia {
4 | String name;
5 | }
6 |
7 | class Facebook extends SocialMedia {
8 |
9 | final void login(String username, String password){
10 | // isi method
11 | }
12 |
13 | }
14 |
15 | class FakeFacebook extends Facebook {
16 |
17 | // ERROR
18 | // void login(String username, String password){
19 | // isi method
20 | // }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/error/BlankException.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.error;
2 |
3 | public class BlankException extends RuntimeException {
4 |
5 | public BlankException(String message) {
6 | super(message);
7 | }
8 |
9 | @Override
10 | public String getMessage() {
11 | return super.getMessage();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/error/DatabaseError.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.error;
2 |
3 | public class DatabaseError extends Error {
4 |
5 | public DatabaseError(String message) {
6 | super(message);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/error/ValidationException.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.error;
2 |
3 | public class ValidationException extends Throwable {
4 |
5 | public ValidationException(String message) {
6 | super(message);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/util/MathUtil.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.util;
2 |
3 | public class MathUtil {
4 |
5 | public static int sum(int... values) {
6 | int total = 0;
7 | for (var value : values) {
8 | total += value;
9 | }
10 | return total;
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/programmer/zaman/now/util/ValidationUtil.java:
--------------------------------------------------------------------------------
1 | package programmer.zaman.now.util;
2 |
3 | import programmer.zaman.now.annotation.NotBlank;
4 | import programmer.zaman.now.data.LoginRequest;
5 | import programmer.zaman.now.error.BlankException;
6 | import programmer.zaman.now.error.ValidationException;
7 |
8 | import java.lang.reflect.Field;
9 |
10 | public class ValidationUtil {
11 |
12 | public static void validate(LoginRequest loginRequest) throws ValidationException, NullPointerException {
13 | if (loginRequest.username() == null) {
14 | throw new NullPointerException("Username is null");
15 | } else if (loginRequest.username().isBlank()) {
16 | throw new ValidationException("Username is blank");
17 | } else if (loginRequest.password() == null) {
18 | throw new NullPointerException("Password is null");
19 | } else if (loginRequest.password().isBlank()) {
20 | throw new ValidationException("Password is blank");
21 | }
22 | }
23 |
24 | public static void validateRuntime(LoginRequest loginRequest) {
25 | if (loginRequest.username() == null) {
26 | throw new NullPointerException("Username is null");
27 | } else if (loginRequest.username().isBlank()) {
28 | throw new BlankException("Username is blank");
29 | } else if (loginRequest.password() == null) {
30 | throw new NullPointerException("Password is null");
31 | } else if (loginRequest.password().isBlank()) {
32 | throw new BlankException("Password is blank");
33 | }
34 | }
35 |
36 | public static void validationReflection(Object object) {
37 | Class aClass = object.getClass();
38 | Field[] fields = aClass.getDeclaredFields();
39 |
40 | for (var field : fields) {
41 | field.setAccessible(true);
42 |
43 | if (field.getAnnotation(NotBlank.class) != null) {
44 | // validated
45 | try {
46 | String value = (String) field.get(object);
47 |
48 | if (value == null || value.isBlank()) {
49 | throw new BlankException("Field " + field.getName() + " is blank ");
50 | }
51 |
52 | } catch (IllegalAccessException exception) {
53 | System.out.println("Tidak bisa mengakses field " + field.getName());
54 | }
55 | }
56 |
57 | }
58 | }
59 |
60 | }
61 |
--------------------------------------------------------------------------------