diff --git a/app/build.gradle b/app/build.gradle index e49dcf1..382436f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -59,6 +59,8 @@ android { includeNoLocationClasses = true } } + + unitTests.returnDefaultValues = true } lintOptions { abortOnError false diff --git a/app/src/main/java/fga/mds/gpp/trezentos/Controller/UserClassControl.java b/app/src/main/java/fga/mds/gpp/trezentos/Controller/UserClassControl.java index 7b3069c..301755d 100644 --- a/app/src/main/java/fga/mds/gpp/trezentos/Controller/UserClassControl.java +++ b/app/src/main/java/fga/mds/gpp/trezentos/Controller/UserClassControl.java @@ -2,33 +2,37 @@ import android.content.Context; +import android.widget.Toast; + import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; +import java.util.Collection; import java.util.concurrent.ExecutionException; import fga.mds.gpp.trezentos.DAO.getAllClassRequest; +import fga.mds.gpp.trezentos.DAO.AddStudentToClassRequest; import fga.mds.gpp.trezentos.DAO.getClassRequest; import fga.mds.gpp.trezentos.DAO.CreateClassPost; +import fga.mds.gpp.trezentos.Exception.UserClassException; import fga.mds.gpp.trezentos.Exception.UserException; import fga.mds.gpp.trezentos.Model.UserClass; +import fga.mds.gpp.trezentos.R; public class UserClassControl { private static UserClassControl instance; final Context context; - public UserClassControl(final Context context){ - + private UserClassControl(final Context context) { this.context = context; } + public static UserClassControl getInstance(final Context context) { - public static UserClassControl getInstance(final Context context){ - - if(instance == null){ + if (instance == null) { instance = new UserClassControl(context); } @@ -37,15 +41,15 @@ public static UserClassControl getInstance(final Context context){ public void validateCreateClass(String className, String institution, Float cutOff, String password, Float addition, - Integer sizeGroups, String email) throws UserException{ + Integer sizeGroups, String email) throws UserException { - try{ + try { UserClass userClass = new UserClass(className, institution, cutOff, password, addition, sizeGroups); CreateClassPost createClassPost = new CreateClassPost(userClass, email); createClassPost.execute(); - }catch (UserException userException){ + } catch (UserException userException) { userException.printStackTrace(); } @@ -55,10 +59,10 @@ public void validateCreateClass(String className, String institution, public String validateInformation(String className, String institution, String cutOff, String password, - String addition, String sizeGroups) throws UserException{ + String addition, String sizeGroups) throws UserException { String erro; - try{ + try { UserClass userClass = new UserClass(className, institution, Float.parseFloat(cutOff), password, Float.parseFloat(addition), Integer.parseInt(sizeGroups)); @@ -66,11 +70,11 @@ public String validateInformation(String className, String institution, System.out.println(userClass.getClassName()); erro = "Sucesso"; return erro; - }catch (UserException userException){ - erro = userException.getMessage(); - return erro; + } catch (UserException userException) { + erro = userException.getMessage(); + return erro; + } } -} public ArrayList getClasses() { @@ -109,17 +113,17 @@ public ArrayList getClassesFromUser(String email) { try { serverResponse = classRequest.execute().get(); - }catch (InterruptedException e){ + } catch (InterruptedException e) { e.printStackTrace(); - }catch (ExecutionException e){ + } catch (ExecutionException e) { e.printStackTrace(); } ArrayList userClasses = new ArrayList(); - try{ + try { userClasses = getArrayList(serverResponse); - }catch (JSONException e){ + } catch (JSONException e) { e.printStackTrace(); } @@ -127,19 +131,19 @@ public ArrayList getClassesFromUser(String email) { } - private ArrayList getArrayList(String serverResponse) throws JSONException{ + private ArrayList getArrayList(String serverResponse) throws JSONException { JSONArray array = null; - try{ + try { array = new JSONArray(serverResponse); - }catch (JSONException e){ + } catch (JSONException e) { e.printStackTrace(); } ArrayList userClasses = new ArrayList<>(); - for(int i = 0; i < array.length(); i++){ + for (int i = 0; i < array.length(); i++) { UserClass userClass = getUserClassFromJson(array.getJSONObject(i)); userClasses.add(userClass); } @@ -147,7 +151,7 @@ private ArrayList getArrayList(String serverResponse) throws JSONExce return userClasses; } - private UserClass getUserClassFromJson(JSONObject jsonObject){ + private UserClass getUserClassFromJson(JSONObject jsonObject) { UserClass userClass = new UserClass(); try { @@ -158,15 +162,31 @@ private UserClass getUserClassFromJson(JSONObject jsonObject){ userClass.setPassword(jsonObject.getString("password")); userClass.setSizeGroups(Integer.parseInt(jsonObject.getString("numberOfStudentsPerGroup"))); userClass.setOwnerEmail(jsonObject.getString("ownerEmail")); - userClass.setStudents(jsonObject.getJSONArray("students")); + userClass.setStudents(new ArrayList<>((Collection) jsonObject.getJSONArray("students"))); - }catch (JSONException e){ + } catch (JSONException e) { e.printStackTrace(); - }catch (UserException e){ + } catch (UserException e) { e.printStackTrace(); } return userClass; } + public String validateJoinClass(UserClass userClass, String password, String studentEmail) throws UserClassException, ExecutionException, InterruptedException { + String serverResponse; + if (!password.isEmpty()){ + if(password.equals(userClass.getPassword())){ + AddStudentToClassRequest addStudentToClassRequest = new AddStudentToClassRequest(userClass, studentEmail); + serverResponse = addStudentToClassRequest.execute().get(); + } else { + throw new UserClassException(context.getString(R.string.join_class_wrong_password_error)); + } + } else { + throw new UserClassException(context.getString(R.string.join_class_null_password_error)); + } + + return serverResponse; + } + } diff --git a/app/src/main/java/fga/mds/gpp/trezentos/DAO/AddStudentToClassRequest.java b/app/src/main/java/fga/mds/gpp/trezentos/DAO/AddStudentToClassRequest.java new file mode 100644 index 0000000..ac57d34 --- /dev/null +++ b/app/src/main/java/fga/mds/gpp/trezentos/DAO/AddStudentToClassRequest.java @@ -0,0 +1,59 @@ +package fga.mds.gpp.trezentos.DAO; + +import android.os.AsyncTask; +import android.util.Log; + +import java.io.IOException; + +import fga.mds.gpp.trezentos.Model.UserAccount; +import fga.mds.gpp.trezentos.Model.UserClass; + +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class AddStudentToClassRequest extends AsyncTask{ + private final String student; + private UserClass userClass; + + private String url = "https://trezentos-api.herokuapp.com/api/class/user/student"; + + public AddStudentToClassRequest (UserClass userClass, String student){ + this.userClass = userClass; + this.student = student; + } + + @Override + protected String doInBackground(String... params){ + OkHttpClient client = new OkHttpClient(); + + String urlWithParameters = getUrlWithParameters(); + + RequestBody body = RequestBody.create(null, ""); + Request request = new Request.Builder() + .url(urlWithParameters) + .put(body) + .build(); + + try{ + Response response = client.newCall(request).execute(); + return response.body().string(); + }catch (IOException e){ + e.printStackTrace(); + Log.i("LOG", "IOException in doInBackground method"); + } + return null; + } + + private String getUrlWithParameters(){ + HttpUrl.Builder builder = HttpUrl.parse(url).newBuilder(); + + builder.addQueryParameter("email", userClass.getOwnerEmail()); + builder.addQueryParameter("name", userClass.getClassName()); + builder.addQueryParameter("student", student); + + return builder.build().toString(); + } +} \ No newline at end of file diff --git a/app/src/main/java/fga/mds/gpp/trezentos/Exception/UserClassException.java b/app/src/main/java/fga/mds/gpp/trezentos/Exception/UserClassException.java new file mode 100644 index 0000000..93a48e0 --- /dev/null +++ b/app/src/main/java/fga/mds/gpp/trezentos/Exception/UserClassException.java @@ -0,0 +1,10 @@ +package fga.mds.gpp.trezentos.Exception; + + +public class UserClassException extends Exception{ + + public UserClassException(String message){ + super(message); + } + +} diff --git a/app/src/main/java/fga/mds/gpp/trezentos/Model/UserClass.java b/app/src/main/java/fga/mds/gpp/trezentos/Model/UserClass.java index 08c7e0c..290be23 100644 --- a/app/src/main/java/fga/mds/gpp/trezentos/Model/UserClass.java +++ b/app/src/main/java/fga/mds/gpp/trezentos/Model/UserClass.java @@ -6,6 +6,7 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.StringTokenizer; import fga.mds.gpp.trezentos.Exception.UserException; @@ -17,8 +18,8 @@ public class UserClass implements Serializable { private String password; private float addition; private int sizeGroups; - private String ownerEmail; private ArrayList students; + private String ownerEmail; public UserClass(){ //An empty constructor is needed to create a new instance of object, @@ -136,20 +137,8 @@ public ArrayList getStudents(){ return students; } - public void setStudents(JSONArray jArray){ - - ArrayList tempList = new ArrayList(); - - if (jArray != null) { - for(int i = 0;i < jArray.length(); i++){ - try { - tempList.add(jArray.getString(i)); - } catch (JSONException e) { - e.printStackTrace(); - } - } - } - this.students = tempList; + public void setStudents(ArrayList students){ + this.students = students; } public String getOwnerEmail(){ diff --git a/app/src/main/java/fga/mds/gpp/trezentos/View/ClassFragment.java b/app/src/main/java/fga/mds/gpp/trezentos/View/ClassFragment.java index b663bb1..c13bcfe 100644 --- a/app/src/main/java/fga/mds/gpp/trezentos/View/ClassFragment.java +++ b/app/src/main/java/fga/mds/gpp/trezentos/View/ClassFragment.java @@ -12,6 +12,8 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; +import android.widget.Toast; + import java.util.ArrayList; import fga.mds.gpp.trezentos.Controller.UserClassControl; @@ -24,7 +26,6 @@ public class ClassFragment extends Fragment{ public ArrayList userClasses; private static CustomAdapter adapter; private FloatingActionButton floatingActionButton; - private FragmentTransaction fragmentTransaction; public ListView listView; @Override @@ -93,7 +94,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) UserClass userClassCalled = (UserClass) listView.getItemAtPosition(position); goClass.putExtra("Class", userClassCalled); - startActivity(goClass); + startActivity(goClass); } }); diff --git a/app/src/main/java/fga/mds/gpp/trezentos/View/JoinClassFragment.java b/app/src/main/java/fga/mds/gpp/trezentos/View/JoinClassFragment.java new file mode 100644 index 0000000..f9920a5 --- /dev/null +++ b/app/src/main/java/fga/mds/gpp/trezentos/View/JoinClassFragment.java @@ -0,0 +1,97 @@ +package fga.mds.gpp.trezentos.View; + +import android.app.Dialog; +import android.app.Fragment; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v4.app.DialogFragment; +import android.support.v4.app.ShareCompat; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import java.util.concurrent.ExecutionException; + +import fga.mds.gpp.trezentos.Controller.UserClassControl; +import fga.mds.gpp.trezentos.Exception.UserClassException; +import fga.mds.gpp.trezentos.Model.UserClass; +import fga.mds.gpp.trezentos.R; + +import static com.facebook.FacebookSdk.getApplicationContext; + +public class JoinClassFragment extends DialogFragment implements View.OnClickListener { + + private UserClass userClass; + private UserClassControl userClassControl; + + @Override + public void onCreate(Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState){ + userClass = (UserClass) getArguments().getSerializable("userClass"); + getDialog().setTitle(userClass.getClassName()); + + final View view = inflater.inflate(R.layout.fragment_join_class, container, false); + + Button button = (Button) view.findViewById(R.id.join_class_button); + button.setOnClickListener(this); + + userClassControl = UserClassControl.getInstance(getActivity()); + + return view; + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.join_class_button: + validatePasswordAndJoinStudent(); + break; + } + } + + private void validatePasswordAndJoinStudent() { + EditText password = (EditText) getView().findViewById(R.id.join_password_editText); + + try { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + String email = preferences.getString("userEmail", null); + + String result = userClassControl.validateJoinClass(userClass, password.getText().toString(), email); + Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show(); + if (result.contains("true")) { + Toast.makeText(getActivity(), getActivity().getString(R.string.join_class_success), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getActivity(), getActivity().getString(R.string.join_class_failed), Toast.LENGTH_SHORT).show(); + } + getDialog().dismiss(); + } catch (UserClassException e) { + password.setError(e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + } catch (ExecutionException e) { + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show(); + e.printStackTrace(); + } + } +} + +// to properly open dialog +// +// Bundle bundle = new Bundle(); +// bundle.putSerializable("userClass", userClassCalled); +// +// FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); +// JoinClassFragment joinClassFragment = new JoinClassFragment(); +// joinClassFragment.setArguments(bundle); +// joinClassFragment.show(fragmentTransaction, "joinClass"); diff --git a/app/src/main/res/layout/fragment_join_class.xml b/app/src/main/res/layout/fragment_join_class.xml new file mode 100644 index 0000000..25046a4 --- /dev/null +++ b/app/src/main/res/layout/fragment_join_class.xml @@ -0,0 +1,40 @@ + + + + + + + + + +