com.catalog.core.Api.java Source code

Java tutorial

Introduction

Here is the source code for com.catalog.core.Api.java

Source

/*
 * Copyright (C) 2013 Catalog Online Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.catalog.core;

import java.util.ArrayList;

import org.springframework.http.HttpAuthentication;
import org.springframework.http.HttpBasicAuthentication;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import android.util.Log;

import com.catalog.helper.Constants;
import com.catalog.model.Attendance;
import com.catalog.model.GradesAttendForSubject;
import com.catalog.model.LoginCredentials;
import com.catalog.model.Semester;
import com.catalog.model.StudentMark;
import com.catalog.model.TimetableDays;
import com.catalog.model.views.AttendanceSingleVM;
import com.catalog.model.views.CloseClassSituationVM;
import com.catalog.model.views.GradesAttendForSubjectVM;
import com.catalog.model.views.MasterClassVM;
import com.catalog.model.views.MotivateIntervalVM;
import com.catalog.model.views.SemesterVM;
import com.catalog.model.views.StudentFinalScoresForAllSemestersVM;
import com.catalog.model.views.StudentMarkVM;
import com.catalog.model.views.StudentsVM;
import com.catalog.model.views.SubjectClassesVM;
import com.catalog.model.views.SubjectTeacherForClassVM;
import com.catalog.model.views.TeacherVM;
import com.catalog.model.views.TimetableVM;
import com.catalog.model.views.UserVM;

public class Api implements Api_I {

    private static Api API;
    private long startTime;

    private static final int SUCCESS = Constants.SUCCESS;
    private static final int FAIL = Constants.FAIL;
    private static final int BAD_CONNECTION = Constants.BAD_CONNECTION;
    private static final int UNAUTHORIZED = Constants.UNAUTHORIZED;
    private static String IP_EXTERNAL = "www.e-racovita.ro:8033/";

    //   private static String IP_EXTERNAL = "10.0.3.2:8080/";

    private static String IP_INTERNAL = "192.168.31.6:8080/";
    private static String EXTENSION_EXTERNAL = "catalog-online";
    private static String EXTENSION_INTERNAL = "catalog-online";

    private String IP = "";
    private String EXTENSION = "";

    private Api(boolean isExternal) {
        if (isExternal) {
            IP = IP_EXTERNAL;
            EXTENSION = EXTENSION_EXTERNAL;
        } else {
            IP = IP_INTERNAL;
            EXTENSION = EXTENSION_INTERNAL;
        }
    };

    public static Api getInstance(boolean isExternal) {
        if (API == null)
            API = new Api(isExternal);
        return API;
    }

    @Override
    public int login(String username, String password) {
        setStartTime();

        String url = "http://" + IP + EXTENSION + "/resources/j_spring_security_check";

        // Set the username and password for creating a Basic Auth request
        HttpAuthentication authHeader = new HttpBasicAuthentication(username, password);
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAuthorization(authHeader);
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        // Create a new RestTemplate instance
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        // Make the HTTP GET request, marshaling the response from JSON to
        // an array of Events
        try {
            restTemplate.exchange(url, HttpMethod.GET, requestEntity, Object.class);

        } catch (Exception e) {
            // Unauthorized, probably.
            // maybe check for network status?
            e.printStackTrace();
            if (e.getMessage().contains("Unauthorized"))
                return UNAUTHORIZED;

            return BAD_CONNECTION;
        }
        // everything went fine
        setLoginCredentials(username, password);
        getElapsedTime("login - ");
        return SUCCESS;

    }

    @Override
    public boolean changePassword(String newPassword) {

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/changePasswordT/" + newPassword + ".json";
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<UserVM> responseEntity;
        UserVM user = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, UserVM.class);
            user = responseEntity.getBody();

        } catch (RestClientException e) {
            return false;
        }

        Log.d("TAAAG", user.toString());
        getElapsedTime("changePassword - ");
        if (user.getStatus().equals("OK"))
            return true;
        else
            return false;
    }

    @Override
    public MasterClassVM getMasterClass(int id) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();
        String url = "http://" + IP + EXTENSION + "/teacher/masterClassT";
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<MasterClassVM> responseEntity = null;
        MasterClassVM masterClass = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, MasterClassVM.class);
            masterClass = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", masterClass.toString());

        getElapsedTime("getMasterClass - ");

        return masterClass;
    }

    @Override
    public StudentsVM getStudentsForClass(int id) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();
        String url = "http://" + IP + EXTENSION + "/teacher/classStudentsT/" + id + ".json";
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<StudentsVM> responseEntity = null;
        StudentsVM students = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, StudentsVM.class);
            students = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", students.toString());

        getElapsedTime("getStudentsForClass - ");

        return students;
    }

    @Override
    public StudentMark addStudentMark(int studentId, int stfcId, int grade, boolean finalExam, long date) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        restTemplate.getMessageConverters().add(new FormHttpMessageConverter());

        int finalExamInt = finalExam ? 1 : 0;
        String url = "http://" + IP + EXTENSION + "/teacher/formStudentMarkT/" + studentId + "," + stfcId + ","
                + grade + "," + finalExamInt + "," + date + ".json";

        ResponseEntity<StudentMarkVM> responseEntity = null;

        StudentMarkVM response = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, StudentMarkVM.class);
            response = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", response.toString());
        getElapsedTime("addStudentMark - ");
        return response.getStudentMark();
    }

    @Override
    public StudentMark editStudentMark(int markId, int newMark, long date) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ResourceHttpMessageConverter());

        String url = "http://" + IP + EXTENSION + "/teacher/editStudentMarkT/" + markId + "," + newMark + "," + date
                + ".json";

        ResponseEntity<StudentMarkVM> responseEntity = null;
        StudentMarkVM response = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, StudentMarkVM.class);
            response = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", response.toString());
        getElapsedTime("editStudentMark - ");
        return response.getStudentMark();
    }

    @Override
    public Attendance addAttendance(int studentId, int stfcId, long date) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ResourceHttpMessageConverter());

        String url = "http://" + IP + EXTENSION + "/teacher/formAttendanceT/" + studentId + "," + stfcId + ","
                + date + ".json";

        ResponseEntity<AttendanceSingleVM> responseEntity = null;
        AttendanceSingleVM response = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, AttendanceSingleVM.class);
            response = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", response.toString());

        getElapsedTime("addAttendance - ");
        return response.getAttendance();
    }

    @Override
    public Attendance editAttendance(int attendanceId, boolean motivated) {
        setStartTime();
        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
        restTemplate.getMessageConverters().add(new ResourceHttpMessageConverter());

        String url = "http://" + IP + EXTENSION + "/teacher/editAttendanceT/" + attendanceId + ".json";

        ResponseEntity<AttendanceSingleVM> responseEntity = null;
        AttendanceSingleVM response = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, AttendanceSingleVM.class);
            response = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", response.toString());
        getElapsedTime("editAttendance - ");
        return response.getAttendance();
    }

    @Override
    public TeacherVM getTeacher() {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();
        String url = "http://" + IP + EXTENSION + "/teacher/getCurrentT";
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<TeacherVM> responseEntity = null;
        TeacherVM teacher = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, TeacherVM.class);
            teacher = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", teacher.toString());

        getElapsedTime("getTeacher - ");
        return teacher;
    }

    @Override
    public SubjectTeacherForClassVM getSubjectTeacherForClass(int subjectId, int teacherId, int classGroupId) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/findByClassSubjectTeacherT/" + classGroupId + ","
                + subjectId + "," + teacherId + ".json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<SubjectTeacherForClassVM> responseEntity = null;
        SubjectTeacherForClassVM stfc = null;

        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity,
                    SubjectTeacherForClassVM.class);
            stfc = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", stfc.toString());

        getElapsedTime("getSubjectTeacherForClass - ");
        return stfc;
    }

    @Override
    public SubjectClassesVM getSubjectsForTeacherSubjects() {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/classesForTeacherSubjectsT.json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        ResponseEntity<SubjectClassesVM> responseEntity = null;
        SubjectClassesVM cfast = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, SubjectClassesVM.class);
            cfast = responseEntity.getBody();
        } catch (RestClientException e) {
            return null;
        }

        Log.d("TAAAG", cfast.toString());

        getElapsedTime("getSubjectsForTeacherSubjects - ");

        return cfast;
    }

    @Override
    public ArrayList<GradesAttendForSubject> getGradesAttendForSubjectList(int studentId, Semester semester) {
        setStartTime();
        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/gradesForStudentT/" + studentId + ".json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<GradesAttendForSubjectVM> responseEntity = null;
        GradesAttendForSubjectVM allGradesAndAbsences = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity,
                    GradesAttendForSubjectVM.class);
            allGradesAndAbsences = responseEntity.getBody();
            // TODO: fix
            if (semester != null)
                trimForSemester(allGradesAndAbsences, semester);
        } catch (RestClientException e) {
            return null;
        }

        getElapsedTime("getGradesAttendForSubjectList - ");
        return allGradesAndAbsences.getGradesAttendForSubjectList();
    }

    private void trimForSemester(GradesAttendForSubjectVM gradesAbsences, Semester semester) {
        ArrayList<StudentMark> marks = new ArrayList<StudentMark>();
        ArrayList<Attendance> attendances = new ArrayList<Attendance>();

        for (GradesAttendForSubject gradesAttendForSubject : gradesAbsences.getGradesAttendForSubjectList()) {
            for (StudentMark sm : gradesAttendForSubject.getMarks()) {
                if (!sm.getSemester().getName().equals(semester.getName()))
                    marks.add(sm);
            }
            for (Attendance sm : gradesAttendForSubject.getAttendaces()) {
                if (!sm.getSemester().getName().equals(semester.getName()))
                    attendances.add(sm);
            }
        }

        for (StudentMark s : marks) {
            for (GradesAttendForSubject gradesAttendForSubject : gradesAbsences.getGradesAttendForSubjectList()) {
                gradesAttendForSubject.getMarks().remove(s);
            }
        }

        for (Attendance s : attendances) {
            for (GradesAttendForSubject gradesAttendForSubject : gradesAbsences.getGradesAttendForSubjectList()) {
                gradesAttendForSubject.getAttendaces().remove(s);
            }
        }
    }

    @Override
    public ArrayList<TimetableDays> getTeacherTimetable() {
        setStartTime();
        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/getTeacherTimetableT.json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<TimetableVM> responseEntity;
        TimetableVM timetable = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, TimetableVM.class);
            timetable = responseEntity.getBody();

        } catch (Exception e) {
            return null;
        }

        getElapsedTime("getTeacherTimetable - ");
        return timetable.getTimetableDaysList();
    }

    @Override
    public SemesterVM getSemestersInfo() {
        setStartTime();
        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/getCurrentSemesterT.json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<SemesterVM> responseEntity;
        SemesterVM semester = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, SemesterVM.class);
            semester = responseEntity.getBody();

        } catch (Exception e) {
            return null;
        }

        getElapsedTime("getSemester - ");
        return semester;
    }

    @Override
    public MotivateIntervalVM motivateInterval(int studentId, int teacherId, int classGroupId, long date1,
            long date2) {
        setStartTime();
        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/motivateIntervalT/" + studentId + "," + date1 + ","
                + date2 + ".json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<MotivateIntervalVM> responseEntity;
        MotivateIntervalVM motivateIntervalVM = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, MotivateIntervalVM.class);
            motivateIntervalVM = responseEntity.getBody();

        } catch (Exception e) {
            return null;
        }

        getElapsedTime("motivateInterval - ");
        return motivateIntervalVM;

    }

    @Override
    public StudentFinalScoresForAllSemestersVM getFinalScoresForStudent(int studentId) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/getFinalReportForStudent/" + studentId + ".json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<StudentFinalScoresForAllSemestersVM> responseEntity;
        StudentFinalScoresForAllSemestersVM studentFinalScoresForAllSemestersVM = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity,
                    StudentFinalScoresForAllSemestersVM.class);
            studentFinalScoresForAllSemestersVM = responseEntity.getBody();

        } catch (Exception e) {
            return null;
        }

        getElapsedTime("getFinalScoresForStudent - ");

        return studentFinalScoresForAllSemestersVM;
    }

    @Override
    public CloseClassSituationVM closeClassSituation(int classGroupId, int semesterId) {
        setStartTime();

        HttpEntity<?> requestEntity = getAuthHttpEntity();

        RestTemplate restTemplate = new RestTemplate();

        String url = "http://" + IP + EXTENSION + "/teacher/closeClassSituationT/" + classGroupId + "," + semesterId
                + ".json";

        // Add the Jackson message converter
        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<CloseClassSituationVM> responseEntity;
        CloseClassSituationVM closeClassSituation = null;
        try {
            responseEntity = restTemplate.exchange(url, HttpMethod.GET, requestEntity, CloseClassSituationVM.class);
            closeClassSituation = responseEntity.getBody();

        } catch (Exception e) {
            return null;
        }

        getElapsedTime("closeClassSituation - ");
        return closeClassSituation;
    }

    private HttpEntity<?> getAuthHttpEntity() {
        LoginCredentials loginCred = getLoginCredentials();
        if (loginCred == null)
            return null;

        HttpAuthentication authHeader = new HttpBasicAuthentication(loginCred.getUsername(),
                loginCred.getPassword());
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(new MediaType("application", "json"));

        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
        requestHeaders.setAuthorization(authHeader);
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        return requestEntity;
    }

    private void setLoginCredentials(String username, String password) {
        AppPreferences ap = AppPreferences.getInstance(null);
        if (ap != null) {
            ap.saveLoginCredentials(username, password);
        }
    }

    private LoginCredentials getLoginCredentials() {
        AppPreferences ap = AppPreferences.getInstance(null);
        if (ap != null) {
            LoginCredentials loginCred = ap.getLoginCredentials();

            if (!loginCred.getUsername().equals("") && !loginCred.getPassword().equals(""))
                return loginCred;
            else
                return null;
        } else
            return null;
    }

    @Override
    public void setStartTime() {
        this.startTime = System.currentTimeMillis();
        System.setProperty("http.keepAlive", "false");
    }

    @Override
    public long getElapsedTime(String callingMethod) {
        long elapsedTime = System.currentTimeMillis() - this.startTime;
        Log.d(callingMethod, String.valueOf(elapsedTime));
        return elapsedTime;
    }

}