From 82272a9a2934dc6986d55b62213b0307611bf03c Mon Sep 17 00:00:00 2001 From: NMerz Date: Sat, 14 Nov 2020 12:46:33 -0500 Subject: [PATCH] Set permission param Ensure permssion parameter is getting set when sharing a list --- Lambdas/Lists/ListShare/src/ListSharer.java | 14 ++-- .../java/com/example/listify/ListPage.java | 19 ++---- .../ShoppingListsSwipeableAdapter.java | 2 +- .../com/example/listify/data/ListShare.java | 64 ++++++++++++++++++- 4 files changed, 76 insertions(+), 23 deletions(-) diff --git a/Lambdas/Lists/ListShare/src/ListSharer.java b/Lambdas/Lists/ListShare/src/ListSharer.java index 0997818..f5488a7 100644 --- a/Lambdas/Lists/ListShare/src/ListSharer.java +++ b/Lambdas/Lists/ListShare/src/ListSharer.java @@ -22,7 +22,7 @@ public class ListSharer implements CallHandler { } final private String CHECK_ACCESS = "SELECT * from ListSharee WHERE listID = ? AND userID = ?;"; - final private String SHARE_LIST = "INSERT INTO ListSharee(listID, userID) VALUES(?, ?);"; + final private String SHARE_LIST = "INSERT INTO ListSharee(listID, userID, permissionLevel) VALUES(?, ?, ?);"; public Object conductAction(Map bodyMap, HashMap queryString, String cognitoID) throws SQLException { PreparedStatement checkAccess = connection.prepareStatement(CHECK_ACCESS); @@ -52,15 +52,17 @@ public class ListSharer implements CallHandler { throw new InputMismatchException("Could not find specified user to share with"); } String shareWithSub = new String(invokeResult.getPayload().array()).replace("\"", ""); - checkAccess.setString(2, shareWithSub); - checkAccessRS = checkAccess.executeQuery(); - if (checkAccessRS.next()) { - throw new InputMismatchException("The specified user already has access"); - } +// checkAccess.setString(2, shareWithSub); +// checkAccessRS = checkAccess.executeQuery(); +// if (checkAccessRS.next()) { +// throw new InputMismatchException("The specified user already has access"); +// } PreparedStatement shareList = connection.prepareStatement(SHARE_LIST); shareList.setInt(1, listID); shareList.setString(2, shareWithSub); + Integer permissionLevel = Integer.parseInt(bodyMap.get("permissionLevel").toString()); + shareList.setInt(3, permissionLevel); shareList.executeUpdate(); connection.commit(); return null; diff --git a/Listify/app/src/main/java/com/example/listify/ListPage.java b/Listify/app/src/main/java/com/example/listify/ListPage.java index 1efd025..454d32a 100644 --- a/Listify/app/src/main/java/com/example/listify/ListPage.java +++ b/Listify/app/src/main/java/com/example/listify/ListPage.java @@ -5,23 +5,14 @@ import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; +import android.view.*; import android.widget.*; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; - import com.bumptech.glide.Glide; - -import com.example.listify.data.Chain; -import com.example.listify.data.Item; -import com.example.listify.data.List; -import com.example.listify.data.ListEntry; -import com.example.listify.data.ListShare; +import com.example.listify.data.*; +import org.json.JSONException; import java.io.IOException; import java.text.DecimalFormat; @@ -30,8 +21,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Properties; -import org.json.JSONException; - import static com.example.listify.MainActivity.am; public class ListPage extends AppCompatActivity implements Requestor.Receiver { @@ -125,7 +114,7 @@ public class ListPage extends AppCompatActivity implements Requestor.Receiver { public void onClick(DialogInterface dialog, int which) { EditText sharedEmailText = (EditText) codeView.findViewById(R.id.editTextTextSharedEmail); String sharedEmail = sharedEmailText.getText().toString(); - ListShare listShare = new ListShare(listID, sharedEmail); + ListShare listShare = new ListShare(listID, sharedEmail, "Read, Edit, Delete"); try { requestor.postObject(listShare); } diff --git a/Listify/app/src/main/java/com/example/listify/adapter/ShoppingListsSwipeableAdapter.java b/Listify/app/src/main/java/com/example/listify/adapter/ShoppingListsSwipeableAdapter.java index 892f2f0..9ad540a 100644 --- a/Listify/app/src/main/java/com/example/listify/adapter/ShoppingListsSwipeableAdapter.java +++ b/Listify/app/src/main/java/com/example/listify/adapter/ShoppingListsSwipeableAdapter.java @@ -129,7 +129,7 @@ public class ShoppingListsSwipeableAdapter extends BaseAdapter { public void onClick(DialogInterface dialog, int which) { EditText sharedEmailText = (EditText) codeView.findViewById(R.id.editTextTextSharedEmail); String sharedEmail = sharedEmailText.getText().toString(); - ListShare listShare = new ListShare(curList.getItemID(), sharedEmail); + ListShare listShare = new ListShare(curList.getItemID(), sharedEmail, "Read, Edit, Delete"); try { requestor.postObject(listShare); } diff --git a/Listify/app/src/main/java/com/example/listify/data/ListShare.java b/Listify/app/src/main/java/com/example/listify/data/ListShare.java index 406f286..bcc5226 100644 --- a/Listify/app/src/main/java/com/example/listify/data/ListShare.java +++ b/Listify/app/src/main/java/com/example/listify/data/ListShare.java @@ -1,12 +1,65 @@ package com.example.listify.data; +import com.example.listify.BuildConfig; + +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Map; + public class ListShare { Integer listID; String shareWithEmail; + Integer permissionLevel; - public ListShare(Integer listID, String shareWithEmail) { + private static final Map keysToPerms; + static { + //All keys should be a prime number > 1 + HashMap keysToPermsTemp = new HashMap<>(); + keysToPermsTemp.put(2, "Read"); + keysToPermsTemp.put(3, "Edit"); + keysToPermsTemp.put(5, "Delete"); + keysToPerms = Collections.unmodifiableMap(keysToPermsTemp); + } + + public ListShare(Integer listID, String shareWithEmail, Integer permissionLevel) { this.listID = listID; this.shareWithEmail = shareWithEmail; + this.permissionLevel = permissionLevel; + } + + public ListShare(Integer listID, String shareWithEmail, String permissions) { + this.listID = listID; + this.shareWithEmail = shareWithEmail; + permissionLevel = 1; + for (Map.Entry keytoPermEntry: keysToPerms.entrySet()) { + if (permissions.contains(keytoPermEntry.getValue())) { + permissionLevel *= keytoPermEntry.getKey(); + } + } + } + + @Override + public String toString() { + StringBuilder toReturn = new StringBuilder("ListShare{" + + "listID=" + listID + + ", shareWithEmail='" + shareWithEmail + '\'' + + ", permissionLevel=" + permissionLevel + + " [Permissions: "); + + int permissionLevelCopy = permissionLevel; + for (Object permissionObject : keysToPerms.keySet().stream().sorted(Comparator.reverseOrder()).toArray()) { + Integer permissionInteger = (Integer) permissionObject; + if (permissionLevelCopy % permissionInteger == 0) { + permissionLevelCopy /= permissionInteger; + toReturn.append(keysToPerms.get(permissionInteger)).append(","); + } + } + if (BuildConfig.DEBUG && permissionLevelCopy != 1) { + throw new AssertionError("Assertion failed"); + } + toReturn.append("]}"); + return toReturn.toString(); } public Integer getListID() { @@ -24,4 +77,13 @@ public class ListShare { public void setShareWithEmail(String shareWithEmail) { this.shareWithEmail = shareWithEmail; } + + public Integer getPermissionLevel() { + return permissionLevel; + } + + public void setPermissionLevel(Integer permissionLevel) { + this.permissionLevel = permissionLevel; + } + }