diff --git a/app/src/main/java/com/example/petstoremobile/adapters/ChatAdapter.java b/app/src/main/java/com/example/petstoremobile/adapters/ChatAdapter.java new file mode 100644 index 00000000..93e6d902 --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/adapters/ChatAdapter.java @@ -0,0 +1,59 @@ +package com.example.petstoremobile.adapters; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.example.petstoremobile.R; +import com.example.petstoremobile.models.Chat; + +import java.util.List; + +public class ChatAdapter extends RecyclerView.Adapter { + + private List chatList; + private OnChatClickListener listener; + + public interface OnChatClickListener { + void onChatClick(Chat chat); + } + + public ChatAdapter(List chatList, OnChatClickListener listener) { + this.chatList = chatList; + this.listener = listener; + } + + @NonNull + @Override + public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_chat, parent, false); + return new ChatViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull ChatViewHolder holder, int position) { + Chat chat = chatList.get(position); + holder.tvCustomerName.setText(chat.getCustomerName()); + holder.tvLastMessage.setText(chat.getLastMessage()); + holder.itemView.setOnClickListener(v -> listener.onChatClick(chat)); + } + + @Override + public int getItemCount() { + return chatList.size(); + } + + public static class ChatViewHolder extends RecyclerView.ViewHolder { + TextView tvCustomerName, tvLastMessage; + + public ChatViewHolder(@NonNull View itemView) { + super(itemView); + tvCustomerName = itemView.findViewById(R.id.tvCustomerName); + tvLastMessage = itemView.findViewById(R.id.tvLastMessage); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/adapters/PetAdapter.java b/app/src/main/java/com/example/petstoremobile/adapters/PetAdapter.java index 5fb6ce0e..c78cc7cc 100644 --- a/app/src/main/java/com/example/petstoremobile/adapters/PetAdapter.java +++ b/app/src/main/java/com/example/petstoremobile/adapters/PetAdapter.java @@ -8,12 +8,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.petstoremobile.R; -import com.example.petstoremobile.models.Pet; +import com.example.petstoremobile.dtos.PetDTO; import java.util.List; public class PetAdapter extends RecyclerView.Adapter { - private List petList; + private List petList; private OnPetClickListener petClickListener; // Interface for pet click on recycler view @@ -22,7 +22,7 @@ public class PetAdapter extends RecyclerView.Adapter { } //Constructor - public PetAdapter(List petList, OnPetClickListener petClickListener) { + public PetAdapter(List petList, OnPetClickListener petClickListener) { this.petList = petList; this.petClickListener = petClickListener; } @@ -52,16 +52,23 @@ public class PetAdapter extends RecyclerView.Adapter { //populate the row with pet data @Override public void onBindViewHolder(@NonNull PetViewHolder holder, int position) { - Pet pet = petList.get(position); + PetDTO pet = petList.get(position); holder.tvPetName.setText(pet.getPetName()); holder.tvPetSpeciesBreed.setText(pet.getPetSpecies() + " - " + pet.getPetBreed()); holder.tvPetAge.setText("Age: " + pet.getPetAge() + " yr(s)"); - holder.tvPetPrice.setText("$" + String.format("%.2f", pet.getPetPrice())); + + try { + double price = Double.parseDouble(pet.getPetPrice()); + holder.tvPetPrice.setText("$" + String.format("%.2f", price)); + } catch (Exception e) { + holder.tvPetPrice.setText("$" + pet.getPetPrice()); + } + holder.tvPetStatus.setText(pet.getPetStatus()); //Set the status color depending on availability. If available, green, otherwise red - if (pet.getPetStatus().equals("Available")) { + if (pet.getPetStatus() != null && pet.getPetStatus().equals("Available")) { holder.tvPetStatus.setBackgroundColor(Color.parseColor("#4CAF50")); } else { holder.tvPetStatus.setBackgroundColor(Color.parseColor("#F44336")); diff --git a/app/src/main/java/com/example/petstoremobile/adapters/ServiceAdapter.java b/app/src/main/java/com/example/petstoremobile/adapters/ServiceAdapter.java index 83450f56..e3cc6d1c 100644 --- a/app/src/main/java/com/example/petstoremobile/adapters/ServiceAdapter.java +++ b/app/src/main/java/com/example/petstoremobile/adapters/ServiceAdapter.java @@ -7,12 +7,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.petstoremobile.R; -import com.example.petstoremobile.models.Service; +import com.example.petstoremobile.dtos.ServiceDTO; import java.util.List; public class ServiceAdapter extends RecyclerView.Adapter { - private List serviceList; + private List serviceList; private OnServiceClickListener serviceClickListener; // Interface for service click on recycler view @@ -21,7 +21,7 @@ public class ServiceAdapter extends RecyclerView.Adapter serviceList, OnServiceClickListener serviceClickListener) { + public ServiceAdapter(List serviceList, OnServiceClickListener serviceClickListener) { this.serviceList = serviceList; this.serviceClickListener = serviceClickListener; } @@ -50,7 +50,7 @@ public class ServiceAdapter extends RecyclerView.Adapter { - private List supplierList; + private List supplierList; private OnSupplierClickListener supplierClickListener; // Interface for supplier click on recycler view @@ -21,7 +21,7 @@ public class SupplierAdapter extends RecyclerView.Adapter supplierList, OnSupplierClickListener supplierClickListener) { + public SupplierAdapter(List supplierList, OnSupplierClickListener supplierClickListener) { this.supplierList = supplierList; this.supplierClickListener = supplierClickListener; } @@ -50,7 +50,7 @@ public class SupplierAdapter extends RecyclerView.Adapter> getAllConversations(); + + @GET("v1/chat/conversations/{conversationId}") + Call getConversationById(@Path("conversationId") Long conversationId); + + @GET("v1/chat/conversations/{conversationId}/messages") + Call> getMessages(@Path("conversationId") Long conversationId); + + @POST("v1/chat/conversations/{conversationId}/messages") + Call sendMessage(@Path("conversationId") Long conversationId, @Body MessageDTO message); +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/api/CustomerApi.java b/app/src/main/java/com/example/petstoremobile/api/CustomerApi.java new file mode 100644 index 00000000..6f7d2a14 --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/api/CustomerApi.java @@ -0,0 +1,20 @@ +package com.example.petstoremobile.api; + +import com.example.petstoremobile.dtos.CustomerDTO; +import com.example.petstoremobile.dtos.PageResponse; + +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface CustomerApi { + + @GET("v1/customers") + Call> getAllCustomers(@Query("page") int page, @Query("size") int size); + + @GET("v1/customers/{customerId}") + Call getCustomerById(@Path("customerId") Long customerId); +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/api/RetrofitClient.java b/app/src/main/java/com/example/petstoremobile/api/RetrofitClient.java index eeb04fe2..ccdcf696 100644 --- a/app/src/main/java/com/example/petstoremobile/api/RetrofitClient.java +++ b/app/src/main/java/com/example/petstoremobile/api/RetrofitClient.java @@ -12,8 +12,8 @@ import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { //base URL - public static final String BASE_URL = "http://10.0.2.2:8080/api/"; //for emulator testing -// public static final String BASE_URL = "http://10.0.0.200:8080/api/"; //for hardware testing change to computer ip if using hardware to test +// public static final String BASE_URL = "http://10.0.2.2:8080/api/"; //for emulator testing + public static final String BASE_URL = "http://10.0.0.200:8080/api/"; //for hardware testing change to computer ip if using hardware to test private static Retrofit retrofit = null; @@ -54,4 +54,12 @@ public class RetrofitClient { return getClient(context).create(AuthApi.class); } -} + public static ChatApi getChatApi(Context context) { + return getClient(context).create(ChatApi.class); + } + + public static CustomerApi getCustomerApi(Context context) { + return getClient(context).create(CustomerApi.class); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/dtos/ConversationDTO.java b/app/src/main/java/com/example/petstoremobile/dtos/ConversationDTO.java new file mode 100644 index 00000000..316aa467 --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/dtos/ConversationDTO.java @@ -0,0 +1,78 @@ +package com.example.petstoremobile.dtos; + +public class ConversationDTO { + private Long id; + private Long customerId; + private Long staffId; + private String status; + private String mode; + private String lastMessage; + private String createdAt; + private String updatedAt; + + public ConversationDTO() {} + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public Long getStaffId() { + return staffId; + } + + public void setStaffId(Long staffId) { + this.staffId = staffId; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public String getLastMessage() { + return lastMessage; + } + + public void setLastMessage(String lastMessage) { + this.lastMessage = lastMessage; + } + + public String getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + + public String getUpdatedAt() { + return updatedAt; + } + + public void setUpdatedAt(String updatedAt) { + this.updatedAt = updatedAt; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/dtos/CustomerDTO.java b/app/src/main/java/com/example/petstoremobile/dtos/CustomerDTO.java new file mode 100644 index 00000000..1a135a6d --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/dtos/CustomerDTO.java @@ -0,0 +1,59 @@ +package com.example.petstoremobile.dtos; + +import com.google.gson.annotations.SerializedName; + +public class CustomerDTO { + @SerializedName("customerId") + private Long customerId; + + private String firstName; + private String lastName; + private String email; + private String phone; + + public CustomerDTO() {} + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getFullName() { + return (firstName != null ? firstName : "") + " " + (lastName != null ? lastName : ""); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/dtos/MessageDTO.java b/app/src/main/java/com/example/petstoremobile/dtos/MessageDTO.java new file mode 100644 index 00000000..e1300608 --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/dtos/MessageDTO.java @@ -0,0 +1,46 @@ +package com.example.petstoremobile.dtos; + +public class MessageDTO { + private String id; + private String content; + private String senderId; + private long timestamp; + + public MessageDTO() {} + + public MessageDTO(String content) { + this.content = content; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getSenderId() { + return senderId; + } + + public void setSenderId(String senderId) { + this.senderId = senderId; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/fragments/ChatFragment.java b/app/src/main/java/com/example/petstoremobile/fragments/ChatFragment.java index a99bc740..863aa0eb 100644 --- a/app/src/main/java/com/example/petstoremobile/fragments/ChatFragment.java +++ b/app/src/main/java/com/example/petstoremobile/fragments/ChatFragment.java @@ -2,35 +2,156 @@ package com.example.petstoremobile.fragments; import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.view.GravityCompat; +import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; +import android.widget.Toast; import com.example.petstoremobile.R; +import com.example.petstoremobile.adapters.ChatAdapter; +import com.example.petstoremobile.api.ChatApi; +import com.example.petstoremobile.api.CustomerApi; +import com.example.petstoremobile.api.RetrofitClient; +import com.example.petstoremobile.dtos.ConversationDTO; +import com.example.petstoremobile.dtos.CustomerDTO; +import com.example.petstoremobile.dtos.PageResponse; +import com.example.petstoremobile.models.Chat; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; -public class ChatFragment extends Fragment { +public class ChatFragment extends Fragment implements ChatAdapter.OnChatClickListener { private LinearLayout chatContainer; private EditText etMessage; private ScrollView scrollView; private Button btnSend; + private ImageButton hamburger; + private DrawerLayout drawerLayout; + private RecyclerView rvChatList; + private ChatAdapter chatAdapter; + private List chatList = new ArrayList<>(); + private ChatApi chatApi; + private CustomerApi customerApi; + private Map customerNames = new HashMap<>(); - //TODO: Add functionality for sending messages @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_chat, container, false); + chatApi = RetrofitClient.getChatApi(requireContext()); + customerApi = RetrofitClient.getCustomerApi(requireContext()); + + drawerLayout = view.findViewById(R.id.chatDrawerLayout); + hamburger = view.findViewById(R.id.btnHamburger); + rvChatList = view.findViewById(R.id.rvChatList); + + setupRecyclerView(); + loadInitialData(); + + // Open the local chat drawer when hamburger is clicked + hamburger.setOnClickListener(v -> { + if (drawerLayout != null) { + drawerLayout.openDrawer(GravityCompat.START); + } + }); + return view; } + private void setupRecyclerView() { + chatAdapter = new ChatAdapter(chatList, this); + rvChatList.setLayoutManager(new LinearLayoutManager(getContext())); + rvChatList.setAdapter(chatAdapter); + } + + private void loadInitialData() { + // Fetch all customers (first page, large size to get many) + customerApi.getAllCustomers(0, 100).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful() && response.body() != null) { + for (CustomerDTO customer : response.body().getContent()) { + customerNames.put(customer.getCustomerId(), customer.getFullName()); + } + } + // Then load conversations + loadConversations(); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("ChatFragment", "Error loading customers", t); + loadConversations(); // Try loading conversations anyway + } + }); + } + + private void loadConversations() { + chatApi.getAllConversations().enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if (response.isSuccessful() && response.body() != null) { + chatList.clear(); + List loadedChats = response.body().stream() + .map(dto -> { + String name = customerNames.getOrDefault(dto.getCustomerId(), "Customer #" + dto.getCustomerId()); + return new Chat( + String.valueOf(dto.getId()), + name, + dto.getLastMessage()); + }) + .collect(Collectors.toList()); + chatList.addAll(loadedChats); + chatAdapter.notifyDataSetChanged(); + } else { + Log.e("ChatFragment", "Failed to load conversations: " + response.message()); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("ChatFragment", "Error loading conversations", t); + Toast.makeText(getContext(), "Error loading chats", Toast.LENGTH_SHORT).show(); + } + }); + } + + @Override + public void onChatClick(Chat chat) { + // Handle chat selection + Toast.makeText(getContext(), "Selected chat: " + chat.getCustomerName(), Toast.LENGTH_SHORT).show(); + + // Close drawer after selection + if (drawerLayout != null) { + drawerLayout.closeDrawer(GravityCompat.START); + } + + // TODO: Load actual messages for the selected chat + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java index fee68f02..6448b5f3 100644 --- a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java +++ b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/PetFragment.java @@ -26,7 +26,6 @@ import com.example.petstoremobile.dtos.PetDTO; import com.example.petstoremobile.fragments.ListFragment; import com.example.petstoremobile.fragments.listfragments.detailfragments.PetDetailFragment; import com.example.petstoremobile.fragments.listfragments.listprofilefragments.PetProfileFragment; -import com.example.petstoremobile.models.Pet; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; @@ -37,8 +36,8 @@ import retrofit2.Callback; import retrofit2.Response; public class PetFragment extends Fragment implements PetAdapter.OnPetClickListener { - private List petList = new ArrayList<>(); - private List filteredList = new ArrayList<>(); + private List petList = new ArrayList<>(); + private List filteredList = new ArrayList<>(); private ImageButton hamburger; private PetAdapter adapter; private PetApi api; @@ -95,7 +94,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen filteredList.addAll(petList); } else { String lower = query.toLowerCase(); - for (Pet p : petList) { + for (PetDTO p : petList) { if (p.getPetName().toLowerCase().contains(lower) || p.getPetSpecies().toLowerCase().contains(lower) || p.getPetBreed().toLowerCase().contains(lower)) { @@ -119,14 +118,19 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen //Make a bundle to pass data to the profile fragment Bundle args = new Bundle(); - Pet pet = filteredList.get(position); - args.putInt("petId", pet.getPetId()); + PetDTO pet = filteredList.get(position); + args.putInt("petId", pet.getPetId().intValue()); args.putString("petName", pet.getPetName()); args.putString("petSpecies", pet.getPetSpecies()); args.putString("petBreed", pet.getPetBreed()); args.putInt("petAge", pet.getPetAge()); args.putString("petStatus", pet.getPetStatus()); - args.putDouble("petPrice", pet.getPetPrice()); + + try { + args.putDouble("petPrice", Double.parseDouble(pet.getPetPrice())); + } catch (Exception e) { + args.putDouble("petPrice", 0.0); + } //send the bundle to the profile fragment to display profileFragment.setArguments(args); @@ -142,7 +146,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen private void openPetDetails(int position) { PetDetailFragment detailFragment = new PetDetailFragment(); - //get ListFragment to load the the detail view + //get ListFragment to load the detail view ListFragment listFragment = (ListFragment) getParentFragment(); if (listFragment != null) { listFragment.loadFragment(detailFragment); @@ -168,14 +172,7 @@ public class PetFragment extends Fragment implements PetAdapter.OnPetClickListen } if (response.isSuccessful() && response.body() != null) { petList.clear(); - - // Convert to pets - List pets = response.body().getContent() - .stream() - .map(Pet::new) - .collect(java.util.stream.Collectors.toList()); - - petList.addAll(pets); + petList.addAll(response.body().getContent()); filterPets(etSearch.getText().toString()); } else { diff --git a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/ServiceFragment.java b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/ServiceFragment.java index 24266527..1f204114 100644 --- a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/ServiceFragment.java +++ b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/ServiceFragment.java @@ -25,7 +25,6 @@ import com.example.petstoremobile.dtos.PageResponse; import com.example.petstoremobile.dtos.ServiceDTO; import com.example.petstoremobile.fragments.ListFragment; import com.example.petstoremobile.fragments.listfragments.detailfragments.ServiceDetailFragment; -import com.example.petstoremobile.models.Service; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; @@ -37,8 +36,8 @@ import retrofit2.Response; public class ServiceFragment extends Fragment implements ServiceAdapter.OnServiceClickListener { - private List serviceList = new ArrayList<>(); - private List filteredList = new ArrayList<>(); + private List serviceList = new ArrayList<>(); + private List filteredList = new ArrayList<>(); private ServiceAdapter adapter; private ImageButton hamburger; private ServiceApi api; @@ -92,7 +91,7 @@ public class ServiceFragment extends Fragment implements ServiceAdapter.OnServic filteredList.addAll(serviceList); } else { String lower = query.toLowerCase(); - for (Service s : serviceList) { + for (ServiceDTO s : serviceList) { if (s.getServiceName().toLowerCase().contains(lower) || s.getServiceDesc().toLowerCase().contains(lower)) { filteredList.add(s); @@ -119,8 +118,8 @@ public class ServiceFragment extends Fragment implements ServiceAdapter.OnServic //if editing a service, add the service data to the bundle if (position != -1) { - Service service = filteredList.get(position); - args.putInt("serviceId", service.getServiceId()); + ServiceDTO service = filteredList.get(position); + args.putInt("serviceId", service.getServiceId().intValue()); args.putString("serviceName", service.getServiceName()); args.putString("serviceDesc", service.getServiceDesc()); args.putInt("serviceDuration", service.getServiceDuration()); @@ -158,14 +157,7 @@ public class ServiceFragment extends Fragment implements ServiceAdapter.OnServic } if (response.isSuccessful() && response.body() != null) { serviceList.clear(); - - // Convert to services - List services = response.body().getContent() - .stream() - .map(Service::new) - .collect(java.util.stream.Collectors.toList()); - - serviceList.addAll(services); + serviceList.addAll(response.body().getContent()); filterServices(etSearch.getText().toString()); } else { diff --git a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java index 545aa026..0d75da78 100644 --- a/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java +++ b/app/src/main/java/com/example/petstoremobile/fragments/listfragments/SupplierFragment.java @@ -25,7 +25,6 @@ import com.example.petstoremobile.dtos.PageResponse; import com.example.petstoremobile.dtos.SupplierDTO; import com.example.petstoremobile.fragments.ListFragment; import com.example.petstoremobile.fragments.listfragments.detailfragments.SupplierDetailFragment; -import com.example.petstoremobile.models.Supplier; import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.util.ArrayList; @@ -37,8 +36,8 @@ import retrofit2.Response; public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupplierClickListener { - private List supplierList = new ArrayList<>(); - private List filteredList = new ArrayList<>(); + private List supplierList = new ArrayList<>(); + private List filteredList = new ArrayList<>(); private SupplierAdapter adapter; private ImageButton hamburger; private SupplierApi api; @@ -92,7 +91,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp filteredList.addAll(supplierList); } else { String lower = query.toLowerCase(); - for (Supplier s : supplierList) { + for (SupplierDTO s : supplierList) { if (s.getSupCompany().toLowerCase().contains(lower) || s.getSupContactFirstName().toLowerCase().contains(lower) || s.getSupContactLastName().toLowerCase().contains(lower)) { @@ -120,8 +119,8 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp //if editing a supplier, add the supplier data to the bundle if (position != -1) { - Supplier supplier = filteredList.get(position); - args.putInt("supId", supplier.getSupId()); + SupplierDTO supplier = filteredList.get(position); + args.putInt("supId", supplier.getSupId().intValue()); args.putString("supCompany", supplier.getSupCompany()); args.putString("supContactFirstName", supplier.getSupContactFirstName()); args.putString("supContactLastName", supplier.getSupContactLastName()); @@ -161,14 +160,7 @@ public class SupplierFragment extends Fragment implements SupplierAdapter.OnSupp } if (response.isSuccessful() && response.body() != null) { supplierList.clear(); - - // Convert to suppliers - List suppliers = response.body().getContent() - .stream() - .map(Supplier::new) - .collect(java.util.stream.Collectors.toList()); - - supplierList.addAll(suppliers); + supplierList.addAll(response.body().getContent()); filterSuppliers(etSearch.getText().toString()); } else { diff --git a/app/src/main/java/com/example/petstoremobile/models/Adoption.java b/app/src/main/java/com/example/petstoremobile/models/Adoption.java index 1f7452ca..e227bc9b 100644 --- a/app/src/main/java/com/example/petstoremobile/models/Adoption.java +++ b/app/src/main/java/com/example/petstoremobile/models/Adoption.java @@ -25,6 +25,10 @@ public class Adoption { return adoptionId; } + public void setAdoptionId(int adoptionId) { + this.adoptionId = adoptionId; + } + public String getAdopterName() { return adopterName; } diff --git a/app/src/main/java/com/example/petstoremobile/models/Chat.java b/app/src/main/java/com/example/petstoremobile/models/Chat.java new file mode 100644 index 00000000..bbc5ac26 --- /dev/null +++ b/app/src/main/java/com/example/petstoremobile/models/Chat.java @@ -0,0 +1,25 @@ +package com.example.petstoremobile.models; + +public class Chat { + private String chatId; + private String customerName; + private String lastMessage; + + public Chat(String chatId, String customerName, String lastMessage) { + this.chatId = chatId; + this.customerName = customerName; + this.lastMessage = lastMessage; + } + + public String getChatId() { + return chatId; + } + + public String getCustomerName() { + return customerName; + } + + public String getLastMessage() { + return lastMessage; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/petstoremobile/models/Pet.java b/app/src/main/java/com/example/petstoremobile/models/Pet.java deleted file mode 100644 index 4d605944..00000000 --- a/app/src/main/java/com/example/petstoremobile/models/Pet.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.example.petstoremobile.models; - -import com.example.petstoremobile.dtos.PetDTO; - -public class Pet { - private int petId; - private String petName; - private String petSpecies; - private String petBreed; - private int petAge; - private String petStatus; - private double petPrice; - - //constructor - public Pet(int petId, String petName, String petSpecies, String petBreed, int petAge, String petStatus, double petPrice) { - this.petId = petId; - this.petName = petName; - this.petSpecies = petSpecies; - this.petBreed = petBreed; - this.petAge = petAge; - this.petStatus = petStatus; - this.petPrice = petPrice; - } - - //contructor to convert PetDTO to Pet - public Pet(PetDTO dto) { - this.petId = dto.getPetId().intValue(); - this.petName = dto.getPetName(); - this.petSpecies = dto.getPetSpecies(); - this.petBreed = dto.getPetBreed(); - this.petAge = dto.getPetAge(); - this.petStatus = dto.getPetStatus(); - this.petPrice = Double.parseDouble(dto.getPetPrice()); - } - - //getter and setters - public int getPetId() { - return petId; - } - -// public void setPetId(int petId) { -// this.petId = petId; -// } - - public String getPetName() { - return petName; - } - - public void setPetName(String petName) { - this.petName = petName; - } - - public String getPetSpecies() { - return petSpecies; - } - - public void setPetSpecies(String petSpecies) { - this.petSpecies = petSpecies; - } - - public String getPetBreed() { - return petBreed; - } - - public void setPetBreed(String petBreed) { - this.petBreed = petBreed; - } - - public int getPetAge() { - return petAge; - } - - public void setPetAge(int petAge) { - this.petAge = petAge; - } - - public String getPetStatus() { - return petStatus; - } - - public void setPetStatus(String petStatus) { - this.petStatus = petStatus; - } - - public double getPetPrice() { - return petPrice; - } - - public void setPetPrice(double petPrice) { - this.petPrice = petPrice; - } -} diff --git a/app/src/main/java/com/example/petstoremobile/models/Service.java b/app/src/main/java/com/example/petstoremobile/models/Service.java deleted file mode 100644 index 3a935117..00000000 --- a/app/src/main/java/com/example/petstoremobile/models/Service.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.example.petstoremobile.models; - -import com.example.petstoremobile.dtos.ServiceDTO; - -public class Service { - private int serviceId; - private String serviceName; - private String serviceDesc; - private int serviceDuration; - private double servicePrice; - - // Constructor - public Service(int serviceId, String serviceName, String serviceDesc, int serviceDuration, double servicePrice) { - this.serviceId = serviceId; - this.serviceName = serviceName; - this.serviceDesc = serviceDesc; - this.serviceDuration = serviceDuration; - this.servicePrice = servicePrice; - } - - public Service(ServiceDTO dto) { - this.serviceId = dto.getServiceId().intValue(); - this.serviceName = dto.getServiceName(); - this.serviceDesc = dto.getServiceDesc(); - this.serviceDuration = dto.getServiceDuration(); - this.servicePrice = dto.getServicePrice(); - } - - //getter and setters - public int getServiceId() { - return serviceId; - } - - public String getServiceName() { - return serviceName; - } - - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - - public String getServiceDesc() { - return serviceDesc; - } - - public void setServiceDesc(String serviceDesc) { - this.serviceDesc = serviceDesc; - } - - public int getServiceDuration() { - return serviceDuration; - } - - public void setServiceDuration(int serviceDuration) { - this.serviceDuration = serviceDuration; - } - - public double getServicePrice() { - return servicePrice; - } - - public void setServicePrice(double servicePrice) { - this.servicePrice = servicePrice; - } -} diff --git a/app/src/main/java/com/example/petstoremobile/models/Supplier.java b/app/src/main/java/com/example/petstoremobile/models/Supplier.java deleted file mode 100644 index 8b899c6f..00000000 --- a/app/src/main/java/com/example/petstoremobile/models/Supplier.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.example.petstoremobile.models; - -import com.example.petstoremobile.dtos.SupplierDTO; - -public class Supplier { - private int supId; - private String supCompany; - private String supContactFirstName; - private String supContactLastName; - private String supEmail; - private String supPhone; - - // Constructor - public Supplier(int supId, String supCompany, String supContactFirstName, String supContactLastName, String supEmail, String supPhone) { - this.supId = supId; - this.supCompany = supCompany; - this.supContactFirstName = supContactFirstName; - this.supContactLastName = supContactLastName; - this.supEmail = supEmail; - this.supPhone = supPhone; - } - - public Supplier(SupplierDTO dto) { - this.supId = dto.getSupId().intValue(); - this.supCompany = dto.getSupCompany(); - this.supContactFirstName = dto.getSupContactFirstName(); - this.supContactLastName = dto.getSupContactLastName(); - this.supEmail = dto.getSupEmail(); - this.supPhone = dto.getSupPhone(); - } - - //getter and setters - - public int getSupId() { - return supId; - } - - public String getSupCompany() { - return supCompany; - } - - public void setSupCompany(String supCompany) { - this.supCompany = supCompany; - } - - public String getSupContactFirstName() { - return supContactFirstName; - } - - public void setSupContactFirstName(String supContactFirstName) { - this.supContactFirstName = supContactFirstName; - } - - public String getSupContactLastName() { - return supContactLastName; - } - - public void setSupContactLastName(String supContactLastName) { - this.supContactLastName = supContactLastName; - } - - public String getSupEmail() { - return supEmail; - } - - public void setSupEmail(String supEmail) { - this.supEmail = supEmail; - } - - public String getSupPhone() { - return supPhone; - } - - public void setSupPhone(String supPhone) { - this.supPhone = supPhone; - } -} diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml index 63344d00..839337e5 100644 --- a/app/src/main/res/layout/fragment_chat.xml +++ b/app/src/main/res/layout/fragment_chat.xml @@ -1,69 +1,110 @@ - + android:layout_height="match_parent"> + + + + + + + + + + + + + + + + + + + +