Added coupon use case for view, update and delete

This commit is contained in:
Gilbert Kimutai 2019-02-18 05:26:10 +03:00
parent 17177d07e0
commit 5ca1540974
15 changed files with 417 additions and 190 deletions

View File

@ -12,6 +12,16 @@
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity
android:name=".ui.coupon.CouponActivity"
android:label="@string/title_activity_coupon"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".ui.coupon.CouponsActivity"
android:label="@string/title_activity_coupons"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity <activity
android:name=".ui.coupon.AddCouponActivity" android:name=".ui.coupon.AddCouponActivity"
android:label="@string/title_activity_add_coupon" android:label="@string/title_activity_add_coupon"
@ -22,11 +32,6 @@
android:label="@string/title_activity_menu" android:label="@string/title_activity_menu"
android:theme="@style/AppTheme.NoActionBar"> android:theme="@style/AppTheme.NoActionBar">
</activity> </activity>
<activity
android:name=".ui.coupon.CouponActivity"
android:label="@string/title_activity_coupon"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity <activity
android:name=".ui.ShopActivity" android:name=".ui.ShopActivity"
android:label="@string/title_activity_shop" android:label="@string/title_activity_shop"

View File

@ -1,11 +1,13 @@
package me.gilo.wc.adapter.viewholder package me.gilo.wc.adapter.viewholder
import android.content.Context import android.content.Context
import android.content.Intent
import android.support.v7.widget.RecyclerView import android.support.v7.widget.RecyclerView
import android.text.Html import android.text.Html
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
import me.gilo.wc.R import me.gilo.wc.R
import me.gilo.wc.ui.coupon.CouponActivity
import me.gilo.woodroid.models.Coupon import me.gilo.woodroid.models.Coupon
class CouponViewHolder(val context: Context, itemView: View) : class CouponViewHolder(val context: Context, itemView: View) :
@ -17,6 +19,13 @@ class CouponViewHolder(val context: Context, itemView: View) :
tvTitle.text = coupon.code.toUpperCase() tvTitle.text = coupon.code.toUpperCase()
tvDescription.text = Html.fromHtml(coupon.description) tvDescription.text = Html.fromHtml(coupon.description)
itemView.setOnClickListener{
val intent = Intent(context, CouponActivity::class.java)
intent.putExtra("couponId", coupon.id)
context.startActivity(intent)
}
} }

View File

@ -6,7 +6,7 @@ import android.support.v7.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import me.gilo.wc.R; import me.gilo.wc.R;
import me.gilo.wc.ui.coupon.CouponActivity; import me.gilo.wc.ui.coupon.CouponsActivity;
import me.gilo.wc.ui.ShopActivity; import me.gilo.wc.ui.ShopActivity;
public class MenuViewHolder extends RecyclerView.ViewHolder { public class MenuViewHolder extends RecyclerView.ViewHolder {
@ -37,7 +37,7 @@ public class MenuViewHolder extends RecyclerView.ViewHolder {
context.startActivity(intent); context.startActivity(intent);
break; break;
case "Coupons": case "Coupons":
intent = new Intent(context, CouponActivity.class); intent = new Intent(context, CouponsActivity.class);
context.startActivity(intent); context.startActivity(intent);
break; break;
} }

View File

@ -4,11 +4,20 @@ import android.content.Context
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import io.github.inflationx.viewpump.ViewPumpContextWrapper import io.github.inflationx.viewpump.ViewPumpContextWrapper
import me.gilo.wc.ui.state.ProgressDialogFragment import me.gilo.wc.ui.state.ProgressDialogFragment
import me.gilo.woodroid.Woocommerce
open class BaseActivity : AppCompatActivity() { open class BaseActivity : AppCompatActivity() {
private lateinit var progressDialog : ProgressDialogFragment private lateinit var progressDialog : ProgressDialogFragment
val woocommerce = Woocommerce.Builder()
.setSiteUrl("http://157.230.131.179")
.setApiVersion(Woocommerce.API_V2)
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
.build()
override fun attachBaseContext(newBase: Context) { override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
} }
@ -20,6 +29,10 @@ open class BaseActivity : AppCompatActivity() {
progressDialog.show(manager, "progress") progressDialog.show(manager, "progress")
} }
fun showLoading() {
showLoading("This will only take a sec", "Loading")
}
fun stopShowingLoading() { fun stopShowingLoading() {
progressDialog.dismiss() progressDialog.dismiss()
} }

View File

@ -5,7 +5,6 @@ import kotlinx.android.synthetic.main.activity_add_coupon.*
import kotlinx.android.synthetic.main.content_add_coupon.* import kotlinx.android.synthetic.main.content_add_coupon.*
import me.gilo.wc.R import me.gilo.wc.R
import me.gilo.wc.ui.BaseActivity import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.models.Coupon import me.gilo.woodroid.models.Coupon
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
@ -13,13 +12,20 @@ import retrofit2.Response
class AddCouponActivity : BaseActivity() { class AddCouponActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_coupon) setContentView(R.layout.activity_add_coupon)
setSupportActionBar(toolbar) setSupportActionBar(toolbar)
title = "Add Coupon"
bCreate.setOnClickListener { submit() } bCreate.setOnClickListener { submit() }
} }
private fun submit() { private fun submit() {
@ -36,13 +42,6 @@ class AddCouponActivity : BaseActivity() {
private fun createCoupon(coupon: Coupon) { private fun createCoupon(coupon: Coupon) {
showLoading("Loading", "This won't take long") showLoading("Loading", "This won't take long")
val woocommerce = Woocommerce.Builder()
.setSiteUrl("http://157.230.131.179")
.setApiVersion(Woocommerce.API_V2)
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
.build()
woocommerce.Coupon().create(coupon).enqueue(object : Callback<Coupon> { woocommerce.Coupon().create(coupon).enqueue(object : Callback<Coupon> {
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) { override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
val couponResponse = response.body() val couponResponse = response.body()

View File

@ -1,26 +1,20 @@
package me.gilo.wc.ui.coupon package me.gilo.wc.ui.coupon
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager import android.widget.Toast
import kotlinx.android.synthetic.main.activity_coupon.* import kotlinx.android.synthetic.main.activity_coupon.*
import kotlinx.android.synthetic.main.content_coupon.* import kotlinx.android.synthetic.main.content_coupon.*
import me.gilo.wc.R import me.gilo.wc.R
import me.gilo.wc.adapter.CouponAdapter
import me.gilo.wc.ui.BaseActivity import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.Woocommerce
import me.gilo.woodroid.models.Coupon import me.gilo.woodroid.models.Coupon
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import java.util.*
class CouponActivity : BaseActivity() { class CouponActivity : BaseActivity() {
lateinit var adapter : CouponAdapter
lateinit var coupons: ArrayList<Coupon>
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_coupon) setContentView(R.layout.activity_coupon)
@ -28,44 +22,89 @@ class CouponActivity : BaseActivity() {
title = "Coupon" title = "Coupon"
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false) val couponId = intent.getIntExtra("couponId", 0)
rvCoupons.layoutManager = layoutManager
rvCoupons.isNestedScrollingEnabled = false
coupons = ArrayList() if (couponId != 0){
getCoupon(couponId)
adapter = CouponAdapter(coupons) bDelete.setOnClickListener{delete(couponId)}
rvCoupons.adapter = adapter bUpdate.setOnClickListener{
val coupon = Coupon()
coupon.id = couponId
coupon.code = etCode.text.toString()
coupon.description = etDescription.text.toString()
coupons() update(coupon)
}
fab.setOnClickListener{ }else{
startActivity(Intent(baseContext, AddCouponActivity::class.java)) Toast.makeText(baseContext, "You did not pass coupon id", Toast.LENGTH_LONG).show()
} }
} }
//Not best practise, but works for purposes of demo private fun getCoupon(couponId: Int) {
private fun coupons() { showLoading()
val woocommerce = Woocommerce.Builder()
.setSiteUrl("http://157.230.131.179")
.setApiVersion(Woocommerce.API_V2)
.setConsumerKey("ck_26c61abd7eeff238d87dc56585bf26cb2d1a1ec3")
.setConsumerSecret("cs_062e8e3a7ae0ce08fdebc0c39f8f834d5e87598e")
.build()
woocommerce.Coupon().coupons().enqueue(object : Callback<List<Coupon>> { woocommerce.Coupon().coupon(couponId).enqueue(object : Callback<Coupon> {
override fun onResponse(call: Call<List<Coupon>>, response: Response<List<Coupon>>) { override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
val couponResponse = response.body() val coupon = response.body()!!
for (coupon in couponResponse!!) {
coupons.add(coupon) etCode.setText(coupon.code.toUpperCase())
etDescription.setText(coupon.description)
stopShowingLoading()
} }
adapter.notifyDataSetChanged() override fun onFailure(call: Call<Coupon>, t: Throwable) {
stopShowingLoading()
}
})
} }
override fun onFailure(call: Call<List<Coupon>>, t: Throwable) { private fun delete(couponId: Int) {
showLoading()
woocommerce.Coupon().delete(couponId).enqueue(object : Callback<Coupon> {
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
if (response.isSuccessful) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etDescription.setText(coupon.description)
finish()
}else{
Toast.makeText(this@CouponActivity, "" + response.code() + " : " + response.message(), Toast.LENGTH_SHORT).show()
}
stopShowingLoading()
}
override fun onFailure(call: Call<Coupon>, t: Throwable) {
stopShowingLoading()
}
})
}
private fun update(coupon: Coupon) {
showLoading()
woocommerce.Coupon().update(coupon.id, coupon).enqueue(object : Callback<Coupon> {
override fun onResponse(call: Call<Coupon>, response: Response<Coupon>) {
val coupon = response.body()!!
etCode.setText(coupon.code.toUpperCase())
etDescription.setText(coupon.description)
stopShowingLoading()
finish()
}
override fun onFailure(call: Call<Coupon>, t: Throwable) {
stopShowingLoading()
} }
}) })
} }

View File

@ -0,0 +1,65 @@
package me.gilo.wc.ui.coupon
import android.content.Intent
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_coupons.*
import kotlinx.android.synthetic.main.content_coupons.*
import me.gilo.wc.R
import me.gilo.wc.adapter.CouponAdapter
import me.gilo.wc.ui.BaseActivity
import me.gilo.woodroid.models.Coupon
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.util.*
class CouponsActivity : BaseActivity() {
lateinit var adapter : CouponAdapter
lateinit var coupons: ArrayList<Coupon>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_coupons)
setSupportActionBar(toolbar)
title = "Coupons"
val layoutManager = LinearLayoutManager(baseContext, LinearLayoutManager.VERTICAL, false)
rvCoupons.layoutManager = layoutManager
rvCoupons.isNestedScrollingEnabled = false
coupons = ArrayList()
adapter = CouponAdapter(coupons)
rvCoupons.adapter = adapter
coupons()
fab.setOnClickListener{
startActivity(Intent(baseContext, AddCouponActivity::class.java))
}
}
//Not best practise, but works for purposes of demo
private fun coupons() {
woocommerce.Coupon().coupons().enqueue(object : Callback<List<Coupon>> {
override fun onResponse(call: Call<List<Coupon>>, response: Response<List<Coupon>>) {
val couponResponse = response.body()
for (coupon in couponResponse!!) {
coupons.add(coupon)
}
adapter.notifyDataSetChanged()
}
override fun onFailure(call: Call<List<Coupon>>, t: Throwable) {
}
})
}
}

View File

@ -23,14 +23,4 @@
<include layout="@layout/content_coupon"/> <include layout="@layout/content_coupon"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@drawable/baseline_add_black_18dp"
android:tint="#ffffff"
android:layout_margin="16dp" />
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.coupon.CouponsActivity">
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_coupons"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@drawable/baseline_add_black_18dp"
android:tint="#ffffff"
android:layout_margin="16dp" />
</android.support.design.widget.CoordinatorLayout>

View File

@ -24,63 +24,27 @@
android:background="@drawable/rect_white" android:background="@drawable/rect_white"
android:orientation="vertical"> android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="17dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="Create a coupon"
android:textColor="#9298a4"
android:textSize="16sp"
tools:ignore="MissingPrefix"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="0dp"
android:background="@drawable/rect_white"
android:elevation="2dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp">
<android.support.v7.widget.AppCompatEditText <android.support.v7.widget.AppCompatEditText
android:id="@+id/etCode" android:id="@+id/etCode"
android:layout_width="360dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:cursorVisible="false" android:cursorVisible="true"
android:hint="Coupon code" android:hint="Coupon code"
android:paddingLeft="8dp" android:paddingLeft="8dp"
android:paddingTop="8dp" android:paddingTop="8dp"
android:paddingRight="8dp" android:paddingRight="8dp"
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:textSize="18sp" android:textSize="18sp"
app:backgroundTint="#ffffff"/> />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/rect_white"
android:elevation="2dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp">
<android.support.v7.widget.AppCompatEditText <android.support.v7.widget.AppCompatEditText
android:id="@+id/etDescription" android:id="@+id/etDescription"
android:layout_width="360dp" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:cursorVisible="false" android:cursorVisible="true"
android:gravity="top|left" android:gravity="top|left"
android:hint="Enter text here" android:hint="Enter text here"
android:minLines="3" android:minLines="3"
@ -89,9 +53,7 @@
android:paddingRight="8dp" android:paddingRight="8dp"
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:textSize="18sp" android:textSize="18sp"
app:backgroundTint="#ffffff"/> />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1,20 +1,107 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" android:background="@color/bg"
android:orientation="vertical"
tools:showIn="@layout/activity_coupon" tools:showIn="@layout/activity_coupon"
tools:context=".ui.coupon.CouponActivity"> tools:context=".ui.coupon.AddCouponActivity"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<android.support.v7.widget.RecyclerView <android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginLeft="8dp" android:layout_margin="16dp"
android:layout_marginRight="8dp" android:padding="16dp"
android:id="@+id/rvCoupons" android:background="@drawable/rect_white"
></android.support.v7.widget.RecyclerView> android:orientation="vertical">
</android.support.constraint.ConstraintLayout> <android.support.v7.widget.AppCompatEditText
android:id="@+id/etCode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:cursorVisible="true"
android:hint="Coupon code"
android:paddingLeft="8dp"
android:paddingTop="8dp"
android:paddingRight="8dp"
android:paddingBottom="8dp"
android:textSize="18sp"
/>
<android.support.v7.widget.AppCompatEditText
android:id="@+id/etDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:cursorVisible="true"
android:gravity="top|left"
android:hint="Enter text here"
android:minLines="3"
android:paddingLeft="8dp"
android:paddingTop="8dp"
android:paddingRight="8dp"
android:paddingBottom="8dp"
android:textSize="18sp"
/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<Button
android:id="@+id/bDelete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="16dp"
android:background="@color/text_black_5"
android:text="Delete"
android:layout_weight="1"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
/>
<Button
android:id="@+id/bUpdate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:layout_weight="1"
android:background="@color/colorPrimary"
android:text="Update"
android:textAllCaps="false"
android:textColor="#ffffff"
android:textSize="18sp"
/>
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_coupons"
tools:context=".ui.coupon.CouponsActivity">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:id="@+id/rvCoupons"
></android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>

View File

@ -9,5 +9,6 @@
<string name="font_medium">fonts/GT-America-Medium.otf</string> <string name="font_medium">fonts/GT-America-Medium.otf</string>
<string name="font_regular">fonts/GT-America-Regular.otf</string> <string name="font_regular">fonts/GT-America-Regular.otf</string>
<string name="title_activity_add_coupon">AddCouponActivity</string> <string name="title_activity_add_coupon">AddCouponActivity</string>
<string name="title_activity_coupons">CouponsActivity</string>
</resources> </resources>

View File

@ -19,6 +19,7 @@ allprojects {
repositories { repositories {
google() google()
jcenter() jcenter()
maven { url 'https://jitpack.io' }
} }
} }

View File

@ -17,7 +17,7 @@ public class Coupon implements Serializable{
private int usage_limit_per_user; private int usage_limit_per_user;
private int limit_usage_to_x_items; private int limit_usage_to_x_items;
private String[] meta_data; private String[] meta_data;
private String id; private int id;
private String date_modified_gmt; private String date_modified_gmt;
private String amount; private String amount;
private String date_created; private String date_created;
@ -136,11 +136,11 @@ public class Coupon implements Serializable{
this.meta_data = meta_data; this.meta_data = meta_data;
} }
public String getId() { public int getId() {
return id; return id;
} }
public void setId(String id) { public void setId(int id) {
this.id = id; this.id = id;
} }