Skip to content

Assignment 6 - Collection #147

@fitrh

Description

@fitrh

Collection - Material.pdf

1. Template Parser

new String("The {alpha} {do} over the {animal}\n")
        .concat("and feels as if {who} where in {where}\n")
        .concat("of typography together with {with}.\n");

String diatas merupakan sebuah template dan setiap kata yang diapit oleh
curly braces ({}) adalah placeholder, placeholder setelah proses parsing
akan digantikan oleh nilai dari data yang memiliki identifier atau nama
variabel yang sama dengan placeholder tersebut tanpa curly braces, e.g.
{alpha} akan digantikan oleh nilai dari variabel alpha.

Buatlah sebuah program untuk melakukan template parsing dengan method
berikut:

  • List<String> parse(String template, Map<String, String> data)
    Memparsing template dan mengganti semua placeholder yang ada dengan
    nilai dari data yang sesuai, jika ada placeholder yang tidak ada didalam
    data, maka placeholder tersebut dibiarkan apa adanya. template
    dikembalikan sebagai List<String> dimana setiap elemennya merupakan hasil
    split template berdasarkan new line (\n)

  • void render(List<String> string)
    Mencetak perbaris hasil dari method parse

Contoh

Jika diberikan main method berikut

public static void main(String[] args) {
    String template = new String("The {alpha} {do} over the {animal}\n")
            .concat("and feels as if {who} where in {where}\n")
            .concat("of typography together with {with}.\n");

    Map<String, String> data = new HashMap<>();
    data.put("with", "Hermann Zapf");
    data.put("do", "jumps");
    data.put("alpha", "quick brown fox");
    data.put("animal", "lazy dog");
    data.put("where", "the seventh heaven");
    data.put("who", "he");

    render(parse(template, data));
}

Program akan menghasilkan output berikut

The quick brown fox jumps over the lazy dog
and feels as if he where in the seventh heaven
of typography together with Hermann Zapf.

2. Data Manipulation Language

Dalam Relational Database Management System, Data Manipulation Language (DML)
merupakan perintah-perintah yang digunakan untuk memanipulasi struktur data
di dalam database, 2 diantaranya adalah INSERT dan SELECT.

Buatlah sebuah program yang mensimulasikan proses INSERT dan SELECT
sederhana dengan method berikut

Placeholder file dari tugas ini hanya mendefinisikan method beserta
return type tanpa method signature (parameter)
Lengkapi method signature yang dibutuhkan sesuai deskripsi method dan
main method dibawah

  • Map<String, String> insert(/* signatures */)
    Merupakan simulasi dari perintah INSERT, perintah INSERT memiliki
    sintaks: INSERT INTO <table_name> <column(s)> VALUES (value(s)).
    Pada program ini, <table_name> direpresentasikan oleh List<Map<String, String>>
    sedangkan column(s) merupakan String dengan setiap kolomnya dipisahkan
    oleh koma (,), e.g. "id,name,address" berarti 3 kolom (id, name,
    address) dan value(s) memiliki format yang sama dengan column(s) dimana
    setiap nilainya dipasangkan tepat 1 dengan kolom pada column(s), e.g.
    "01,Fitrah,Maros" berarti id=01, name=Fitrah, dan address=Maros, hal
    ini berarti jumlah column(s) = jumlah value(s), jika jumlahnya tidak sama,
    program akan menghasilakn IllegalArgumentException

    // student merupkan <table_name>
    List<Map<String, String>> student = new ArrayList<>();
    
    // Ketiga sintaks dibawah ini valid
    // column(s) selalu menjadi lower case dan tanpa spasi
    // value(s) disimpan apa adanya namun tanpa spasi
    student.add(insert("id,first_name,last_name", "H071171504, Rabia, Adaw"));
    // spasi pada sintaks ini dihilangkan oleh method insert
    student.add(insert("id, first_name, last_name", "H071171512,Fitrah,M"));
    // UPPER CASE pada sintaks ini diganti menjadi lower case oleh method insert
    student.add(insert("ID, FIRST_NAME, LAST_NAME", "H071171510, Amalia, Dwi"));
    
    // Baris berikut menghasilkan IllegalArgumentException
    // student.add(insert("id,first_name, last_name", "H071171308,Babang,Arizk,Male"));
  • List<String> select(/* signatures */)
    Merupakan simulasi dari perintah SELECT, printah SELECT memiliki
    sintaks: SELECT <column(s)> from <table_name>.
    Pada program ini, column(s) merupakan String variadic arguments,
    <table_name> sama dengan yang ada pada method insert dan mengembalikan
    List<String> yang berisi nama kolom dan data dari setiap kolomnya dipisahkan
    oleh semi colon (;), jika ada kolom pada column(s) yang tidak terdapat didalam
    <table_name>, kolom tersebut diisi oleh nilai "NONE"

    Contoh

    // dengan asumsi baris berikut merupakan lanjutan potongan program
    // pada deskripsi method insert
    
    select(student, "first_name", "last_name").forEach(System.out::println);

    menghasilkan

    first_name;last_name
    Fitrah;M
    Amalia;Dwi
    Rabia;Adaw

    select(student, "first_name", "i").forEach(System.out::println);

    menghasilkan

    first_name;i
    Fitrah;NONE
    Amalia;NONE
    Rabia;NONE
  • void prettify(List<String> strings)
    Mencetak hasil dari method select dengan format

    • Tabel, semi colon dari select dihilangkan
    • Rata kanan sesuai elemen terpanjang
    • Setiap kolom terdapat 1 spasi di awal dan akhir
    • Nama kolom dicetak UPPER CASE
    • Baris pertama (nama kolom) dan baris terakhir memiliki separator (-)
    • separator memiliki panjang = (panjang baris) - 2
    • separator rata tengah

    Contoh

    // dengan asumsi baris berikut merupakan lanjutan potongan program
    // pada deskripsi method insert
    prettify(select(student, "id", "first_name", "last_name"));

    menghasilkan

    | ID         | FIRST_NAME | LAST_NAME  |
     --------------------------------------
    | H071171512 | Fitrah     | M          |
    | H071171510 | Amalia     | Dwi        |
    | H071171504 | Rabia      | Adaw       |
     --------------------------------------

    prettify(select(student, "id", "address", "first_name", "last_name"));

    menghasilkan

    | ID         | ADDRESS    | FIRST_NAME | LAST_NAME  |
     ---------------------------------------------------
    | H071171512 | NONE       | Fitrah     | M          |
    | H071171510 | NONE       | Amalia     | Dwi        |
    | H071171504 | NONE       | Rabia      | Adaw       |
     ---------------------------------------------------

main method berikut

public static void main(String[] args) {
    List<Map<String, String>> student = new ArrayList<>();

    student.add(insert("id, first_name, last_name, gender", "H071171512, Fitrah, Muhammad, Male"));
    student.add(insert("id, first_name, last_name, gender", "H071171510, Amalia, Dwi, Female"));
    student.add(insert("id,first_name,last_name,gender", "H071171504, Rabia,Adaw,Female"));
    student.add(insert("id,first_name, last_name, gender", "H071171308,Babang,Arizk,Male"));

    select(student, "first_name", "last_name", "i").forEach(System.out::println);
    System.out.println();
    prettify(select(student, "id", "first_name", "last_name", "gender"));

}

Menghasilakan output berikut

first_name;last_name;i
Fitrah;Muhammad;NONE
Amalia;Dwi;NONE
Rabia;Adaw;NONE
Babang;Arizk;NONE

| ID         | FIRST_NAME | LAST_NAME  | GENDER     |
 ---------------------------------------------------
| H071171512 | Fitrah     | Muhammad   | Male       |
| H071171510 | Amalia     | Dwi        | Female     |
| H071171504 | Rabia      | Adaw       | Female     |
| H071171308 | Babang     | Arizk      | Male       |
 ---------------------------------------------------

Metadata

Metadata

Assignees

No one assigned

    Labels

    DoneAnswers have been graded

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions