Implementasi Algoritma Reverse Colussi Pada Kamus Bahasa Indonesia Karo Berbasis Android

A-1

LISTING PROGRAM

/*** UtamaActivity***/
private SearchView searchView = null;
private SearchView.OnQueryTextListener queryTextListener;
SQLiteOpenHelper helper;
SQLiteDatabase db;
Cursor cursor;
private List resultList = new ArrayList();
private ListView listView;
private CustomListAdapter adapter;
String hh = "";
int state = 1;
double startTime, finisTime, totalTime;
long comp;
String yangdicari;
int jumlahTotal;
@Override
public boolean onQueryTextSubmit(String query) {

String pat = query;
totalTime = 0;
resultList.clear();
try {
helper = new
DatabaseOpenHelper(UtamaActivity.this);
cursor = null;
comp = 0;
yangdicari = pat;
jumlahTotal = 0;
String tb_name;
if (state == 1) {
tb_name = "Indonesia";
} else {
tb_name = "Karo";
}
db = helper.getReadableDatabase();
//cursor = db.rawQuery("SELECT * FROM Bank Order by " + tb_name + " ASC
;", null);
//cursor = db.rawQuery("SELECT * FROM Bank where "+tb_name+ " like

'%"+query+"%' Order by " + tb_name + " ASC ;", null);
cursor = db.rawQuery("SELECT * FROM Bank ORDER BY LENGTH("+tb_name+") ASC
;", null);
if (cursor != null) {
cursor.moveToFirst();
do {
String indo;
String karo;
if (state == 1) {
indo = cursor.getString(1);
karo = cursor.getString(2);
} else {
indo = cursor.getString(2);
karo = cursor.getString(1);
}

Universitas Sumatera Utara

A-2


startTime = System.currentTimeMillis();
RC_start(query.toLowerCase(), indo.toLowerCase(), karo.toLowerCase());
/*Result r = new Result();
r.setIndo(indo);
r.setKaro(karo);
r.setPat(query);
r.setPos(0);
resultList.add(r);
jumlahTotal++;
*/
finisTime = System.currentTimeMillis();
totalTime = totalTime + (finisTime-startTime);
} while (cursor.moveToNext());
}
db.close();
adapter = new
CustomListAdapter(UtamaActivity.this, resultList);
listView.setAdapter(adapter);
} catch (Exception e) {
}

//totalTime = finisTime - startTime;
DialogInfo("Waktu = " + totalTime + " ms\nBanyak Komparasi = " + comp +
"\nYang didapat = " + jumlahTotal);
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
return false;
case R.id.action_putar:
if (state == 1) {
state = 2;
getSupportActionBar().setTitle("KARO-INDONESIA");
} else {

state = 1;
getSupportActionBar().setTitle("INDONESIA-KARO");
}
;
return false;
default:
break;
}
searchView.setOnQueryTextListener(queryTextListener);
return super.onOptionsItemSelected(item);
}
public void DialogInfo(String m) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Hasil Pencarian dari kata \"" + yangdicari +
"\"");
builder.setMessage(m);
builder.setPositiveButton("Ok", new

Universitas Sumatera Utara


A-3

DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
//super.onBackPressed();
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_bantuan) {
Intent inn = new Intent(UtamaActivity.this, BantuanActivity.class);

startActivity(inn);
}
else if (id == R.id.nav_info) {
Intent inf = new Intent(UtamaActivity.this, InformasiActivity.class);
startActivity(inf);
}
else if (id == R.id.nav_perpus) {
Intent i = new Intent(UtamaActivity.this, PerpustakaanActivity.class);
startActivity(i);
}
else if (id == R.id.nav_saya) {
Intent in = new Intent(UtamaActivity.this, activity_tentang.class);
startActivity(in);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

String txt;

String pat;
String karo;
char[] x;
char[] y;
int n;
int m;
int[][] rcBc = new int[256][256];
int[] rcGs = new int[256];
int[] h = new int[256];
int[] locc = new int[256];
int[] link = new int[256];
int[] hmin = new int[256];
int[] kmin = new int[256];
int[] rmin = new int[256];
public void RC_start(String getPat, String indo, String getKaro) {
txt = indo;
pat = getPat;
karo = getKaro;
x = pat.toCharArray();


Universitas Sumatera Utara

A-4

y = txt.toCharArray();
n = txt.length();
m = pat.length();
RC();
}
public void preRc() {
/* Computation of link and locc */
for (int a = 0; a < 256; ++a)
locc[a] = -1;
link[0] = -1;
for (int i = 0; i < m - 1; ++i) {
link[i + 1] = locc[x[i]];
locc[x[i]] = i;
}
/* Computation of rcBc */
int i, j;

for (int a = 0; a < 256; ++a)
for (int s = 1; s = 0)
if (i - j > s)
i = link[i + 1];
else
j = link[j + 1];
while (i - j > s)
i = link[i + 1];
rcBc[a][s] = m - i - 1;
}
/* Computation of hmin */
int k = 1;
int q;
i = m - 1;
while (k = 0 && x[i - k] == x[i])
--i;
hmin[k] = i;
q = k + 1;
while (hmin[q - k] - (q - k) > i) {
hmin[q] = hmin[q - k];

++q;
}
i += (q - k);
k = q;
if (i == m)
i = m - 1;
}

/* Computation of kmin */
for (int a = 0; a < 256; ++a)
kmin[a] = 0;

for (k = m; k > 0; --k)
kmin[hmin[k]] = k;

Universitas Sumatera Utara

A-5

/* Computation of rmin */
int r = 0;
for (i = m - 1; i >= 0; --i) {
if (hmin[i + 1] == i)
r = i + 1;
rmin[i] = r;
}

/* Computation of rcGs */
i = 1;
for (k = 1; k = 0; --j)
if (kmin[j] == 0) {
h[i] = j;
rcGs[i--] = rmin[j];
}
rcGs[m] = rmin[0];
}
public void RC() {
/* Preprocessing */
try {
preRc();
} catch (Exception e) {
//Log.d("IYU:", "recok kali pun PRERC");
}
/* Searching */
int i;
int j = 0;
int s = m;
boolean error = false;
while (j = 0) && x[h[i]] == y[j +
h[i]]; ++i) ;
} catch (Exception e) {
error = true;
}
if (!error) {
if (j = m) {

Universitas Sumatera Utara

A-6

Result r = new Result();
r.setIndo(txt);
r.setKaro(karo);
r.setPat(pat);
r.setPos(j);
resultList.add(r);
jumlahTotal++;
}
}
}
s = rcGs[i];
j += s;
}
}
}

/*** Result***/
public class Result {
String mInd, mKaro;
int pos;
String pat;
public Result() {
}
public Result(String mInd, String mKaro, int mPos, String mPat) {
this.mInd = mInd;
this.mKaro = mKaro;
this.pos = mPos;
this.pat = mPat;
}
public String getIndo() {
return mInd;
}
public void setIndo(String mIndo) {
this.mInd = mIndo;
}
public String getKaro() {
return mKaro;
}
public void setKaro(String mKaro) {
this.mKaro = mKaro;
}
public int getPos() {
return pos;
}
public void setPos(int mPos) {
this.pos = mPos;
}
public String getPat() {
return pat;
}
public void setPat(String mPat) {

Universitas Sumatera Utara

A-7

this.pat = mPat;
}

/*** CustomListAdapter***/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
String first, middle, last;
try {
if (inflater == null)
inflater = (LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_item, null);
TextView indo = (TextView)
convertView.findViewById(R.id.tv_indo);
TextView karo = (TextView)
convertView.findViewById(R.id.tv_karo);
// getting movie data for the row
Result m = resultItems.get(position);
int pos = m.getPos();
int pLength = m.getPat().length();
String h = m.getIndo();
//Log.d("IYU:", "lokasi "+position+" isi: "+h);
first = h.substring(0, pos);
//Log.d("IYU:", "first : "+first);
middle = h.substring(pos, pos + pLength);
//Log.d("IYU:", "midle :"+middle);
last = h.substring(pLength + pos);
//Log.d("IYU:", "last :"+last);
if (pLength == 0)
indo.setText(h);
else
indo.setText(Html.fromHtml(first + "" + middle + "" + last));
karo.setText(m.getKaro());
//Log.d("IYU:", "SUKSES");
} catch (Exception e) {
//Log.e("IYU:", "Fatal Error update list");
}
return convertView;
}
}

/*** CustomListAdapterPerpustakaan***/
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
try {
if (inflater == null)
inflater = (LayoutInflater)
activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_item_perpustakaan, null);
TextView indo = (TextView) convertView.findViewById(R.id.tv_indo);
TextView karo = (TextView) convertView.findViewById(R.id.tv_karo);
TextView huruf = (TextView) convertView.findViewById(R.id.tv_huruf);

Universitas Sumatera Utara

A-8

String s;
Result m = resultItems.get(position);
s = m.getIndo().substring(0,1);
indo.setText(m.getIndo());
karo.setText(m.getKaro());
huruf.setText(s.toUpperCase());

} catch (Exception e) {
Log.e("ERROR:", "Fatal Error update list");
}
return convertView;
}
}

/*** DatabaseOpenHelper***/
public class DatabaseOpenHelper extends SQLiteAssetHelper{
private static final String DATABASE_NAME = "KamusKaro.db";
private static final int DATABASE_VERSION = 2;
public DatabaseOpenHelper(Context context) {
super(context, DATABASE_NAME, null , DATABASE_VERSION);
}
}

/*** PerpustakaanActivity***/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_perpustakaan);
if (getSupportActionBar() != null){
getSupportActionBar().setTitle("Perpustakaan");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
//new StartView().execute();
listView = (ListView) findViewById(R.id.list);
adapter = new
CustomListAdapterPerpustakaan(PerpustakaanActivity.this, resultList);
listView.setAdapter(adapter);
Read_Data();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
private void Read_Data() {
helper = new DatabaseOpenHelper(this);
cursor = null;
String h = "Indonesia\n";
String h1 = "Karo\n";
//TextView tv = (TextView) findViewById(R.id.textView);
//TextView tv1 = (TextView) findViewById(R.id.textView1);
db = helper.getReadableDatabase();
//cursor = db.rawQuery("SELECT * FROM Bank ORDER BY LENGTH
("+h+") ASC;", null);

Universitas Sumatera Utara

A-9

cursor = db.rawQuery("SELECT * FROM Bank ORDER BY Indonesia
ASC;", null);
if (cursor != null) {
cursor.moveToFirst();
do {
Result r = new Result();
r.setIndo(cursor.getString(1));
r.setKaro(cursor.getString(2));
resultList.add(r);
} while (cursor.moveToNext());
}
db.close();
adapter = new
CustomListAdapterPerpustakaan(PerpustakaanActivity.this, resultList);
listView.setAdapter(adapter);
}
private class StartView extends AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(PerpustakaanActivity.this);
pDialog.setMessage("Tunggu");
pDialog.setCancelable(false);
pDialog.show();
pDialog.setProgress(0);
}
@Override
protected Void doInBackground(Void... arg0) {
Read_Data();
return null;
}
@Override
protected void onPostExecute(Void result) {
if (pDialog.isShowing())
pDialog.dismiss();
}
}
}

/*** SplashActivity***/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
getSupportActionBar().hide();
setSplash();
}
public void setSplash() {
new Thread() {
@Override
public void run() {

Universitas Sumatera Utara

A-10

try {
Thread.sleep(1500);
}
catch (Exception e) {
}
Intent i = new Intent(SplashActivity.this,
UtamaActivity.class);
SplashActivity.this.finish();
startActivity(i);
}
}.start();
}
}

/*** Activity_Tentang***/
public class activity_tentang extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity_tentang);
getSupportActionBar().setTitle("Tentang Saya");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}

/*** AndroidManifest.xml***/















Universitas Sumatera Utara

A-11






/*** Activity_Informasi.xml***/




/*** List_Item.xml***/





/*** List_Item_Perpustakaan.xml***/



Universitas Sumatera Utara

A-12












/*** Nav_Header_Utama.xml***/



Universitas Sumatera Utara

A-13





/*** Activity_Utama_drawer.xml***/









/*** Main_Menu.xml***/