Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assignment 6 - Collection #147

Open
fitrh opened this issue Nov 23, 2021 · 2 comments
Open

Assignment 6 - Collection #147

fitrh opened this issue Nov 23, 2021 · 2 comments
Labels
Done Answers have been graded

Comments

@fitrh
Copy link
Member

fitrh commented Nov 23, 2021

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       |
 ---------------------------------------------------

@fitrh fitrh added the On Progress Work on assignments label Nov 23, 2021
@fitrh
Copy link
Member Author

fitrh commented Nov 23, 2021

Manipulasi string pada tugas ini masih menggunakan raw String, bukan StringBufer
atau StringBuilder

@fitrh
Copy link
Member Author

fitrh commented Nov 23, 2021

Untuk memudahkan manipulasi array, gunakan java.util.Arrays

fitrh added a commit that referenced this issue Nov 23, 2021
Assignment description: 1. Template Parser at #147
fitrh added a commit that referenced this issue Nov 23, 2021
Assignment description: 2. Data Manipulation Language at #147
erwinarif31 pushed a commit to erwinarif31/21-ip-assignment that referenced this issue Nov 29, 2021
Assignment description: 1. Template Parser at stdcs#147
erwinarif31 pushed a commit to erwinarif31/21-ip-assignment that referenced this issue Nov 29, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
@fitrh fitrh added the On Review Answers are being reviewed label Nov 29, 2021
sofyanox12 pushed a commit to sofyanox12/algo that referenced this issue Nov 29, 2021
Assignment description: 1. Template Parser at stdcs#147
sofyanox12 pushed a commit to sofyanox12/algo that referenced this issue Nov 29, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
rokotric pushed a commit to rokotric/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 1. Template Parser at stdcs#147
rokotric pushed a commit to rokotric/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
SyifaUrRahmi pushed a commit to SyifaUrRahmi/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 1. Template Parser at stdcs#147
SyifaUrRahmi pushed a commit to SyifaUrRahmi/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
AgungArdhiyanda pushed a commit to AgungArdhiyanda/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 1. Template Parser at stdcs#147
AgungArdhiyanda pushed a commit to AgungArdhiyanda/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
muhammadaryaramdani pushed a commit to muhammadaryaramdani/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 1. Template Parser at stdcs#147
muhammadaryaramdani pushed a commit to muhammadaryaramdani/21-ip-assignment that referenced this issue Nov 30, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
stalyaardani pushed a commit to stalyaardani/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
stalyaardani pushed a commit to stalyaardani/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
DhiyaaUnnisa pushed a commit to DhiyaaUnnisa/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
DhiyaaUnnisa pushed a commit to DhiyaaUnnisa/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
ekahanny pushed a commit to ekahanny/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
ekahanny pushed a commit to ekahanny/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
AditAngga pushed a commit to AditAngga/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
AditAngga pushed a commit to AditAngga/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
WdAnandaLesmono pushed a commit to WdAnandaLesmono/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
WdAnandaLesmono pushed a commit to WdAnandaLesmono/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
Dirgantryboro pushed a commit to Dirgantryboro/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 1. Template Parser at stdcs#147
Dirgantryboro pushed a commit to Dirgantryboro/21-ip-assignment that referenced this issue Dec 1, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
Mhmmdfhkri pushed a commit to Mhmmdfhkri/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 1. Template Parser at stdcs#147
Mhmmdfhkri pushed a commit to Mhmmdfhkri/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
AndiMuhIbnuHibbanBagoesMalolo pushed a commit to AndiMuhIbnuHibbanBagoesMalolo/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 1. Template Parser at stdcs#147
AndiMuhIbnuHibbanBagoesMalolo pushed a commit to AndiMuhIbnuHibbanBagoesMalolo/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
HasanAzyumardi pushed a commit to HasanAzyumardi/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 1. Template Parser at stdcs#147
HasanAzyumardi pushed a commit to HasanAzyumardi/21-ip-assignment that referenced this issue Dec 2, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
@fitrh fitrh removed the On Progress Work on assignments label Dec 2, 2021
firmnsyah pushed a commit to firmnsyah/21-ip-assignment that referenced this issue Dec 3, 2021
Assignment description: 1. Template Parser at stdcs#147
firmnsyah pushed a commit to firmnsyah/21-ip-assignment that referenced this issue Dec 3, 2021
Assignment description: 2. Data Manipulation Language at stdcs#147
@fitrh fitrh added Done Answers have been graded and removed On Review Answers are being reviewed labels Dec 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Done Answers have been graded
Projects
None yet
Development

No branches or pull requests

1 participant