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 |
---------------------------------------------------
Collection - Material.pdf
1. Template Parser
String diatas merupakan sebuah template dan setiap kata yang diapit oleh
curly braces (
{}) adalah placeholder, placeholder setelah proses parsingakan 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 variabelalpha.Buatlah sebuah program untuk melakukan template parsing dengan method
berikut:
List<String> parse(String template, Map<String, String> data)Memparsing
templatedan mengganti semua placeholder yang ada dengannilai dari
datayang sesuai, jika ada placeholder yang tidak ada didalamdata, maka placeholder tersebut dibiarkan apa adanya.templatedikembalikan sebagai
List<String>dimana setiap elemennya merupakan hasilsplit
templateberdasarkan new line (\n)void render(List<String> string)Mencetak perbaris hasil dari method
parseContoh
Jika diberikan
mainmethod berikutProgram akan menghasilkan output berikut
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
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 olehList<Map<String, String>>sedangkan
column(s)merupakanStringdengan setiap kolomnya dipisahkanoleh koma (
,), e.g."id,name,address"berarti 3 kolom (id,name,address) danvalue(s)memiliki format yang sama dengancolumn(s)dimanasetiap nilainya dipasangkan tepat 1 dengan kolom pada
column(s), e.g."01,Fitrah,Maros"berartiid=01,name=Fitrah, danaddress=Maros, halini berarti jumlah
column(s)= jumlahvalue(s), jika jumlahnya tidak sama,program akan menghasilakn
IllegalArgumentExceptionList<String> select(/* signatures */)Merupakan simulasi dari perintah SELECT, printah SELECT memiliki
sintaks:
SELECT <column(s)> from <table_name>.Pada program ini,
column(s)merupakanString variadic arguments,<table_name>sama dengan yang ada pada methodinsertdan mengembalikanList<String>yang berisi nama kolom dan data dari setiap kolomnya dipisahkanoleh semi colon (
;), jika ada kolom padacolumn(s)yang tidak terdapat didalam<table_name>, kolom tersebut diisi oleh nilai"NONE"Contoh
menghasilkan
menghasilkan
void prettify(List<String> strings)Mencetak hasil dari method
selectdengan format-)Contoh
menghasilkan
menghasilkan
mainmethod berikutMenghasilakan output berikut