com.siblinks.ws.service.impl.SubjectsServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.siblinks.ws.service.impl.SubjectsServiceImpl.java

Source

/*
 * Copyright (c) 2016-2017, Tinhvan Outsourcing JSC. All rights reserved.
 *
 * No permission to use, copy, modify and distribute this software
 * and its documentation for any purpose is granted.
 * This software is provided under applicable license agreement only.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.siblinks.ws.service.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.siblinks.ws.common.DAOException;
import com.siblinks.ws.dao.ObjectDao;
import com.siblinks.ws.filter.AuthenticationFilter;
import com.siblinks.ws.model.ManageSubjectModel;
import com.siblinks.ws.model.RequestData;
import com.siblinks.ws.response.Response;
import com.siblinks.ws.response.SimpleResponse;
import com.siblinks.ws.service.SubjectsService;
import com.siblinks.ws.util.CommonUtil;
import com.siblinks.ws.util.Parameters;
import com.siblinks.ws.util.SibConstants;

/**
 *
 * {@link SubjectsService}
 * 
 * @author hungpd
 * @version 1.0
 */
@RestController
@RequestMapping("/siblinks/services/subjects")
public class SubjectsServiceImpl implements SubjectsService {

    private final Log logger = LogFactory.getLog(getClass());

    @Autowired
    private ObjectDao dao;

    @Autowired
    private HttpServletRequest context;

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/listOfSubjects", method = RequestMethod.GET)
    public ResponseEntity<Response> listOfSubjects(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            Object[] queryParams = {};

            List<Object> readObject = dao.readObjects(SibConstants.SqlMapper.SQL_SUBJECTS_READ, queryParams);

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), readObject);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/listOfSubjectsWithTag", method = RequestMethod.POST)
    public ResponseEntity<Response> listOfSubjectsWithTag(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            Object[] queryParams = {};

            List<List<Object>> resParentObject = new ArrayList<List<Object>>();
            List<Object> readObject = dao.readObjects(SibConstants.SqlMapper.SQL_SUBJECTS_READ, queryParams);
            if (!CollectionUtils.isEmpty(readObject)) {
                for (Object object : readObject) {
                    List<Object> resChildObject = new ArrayList<Object>();
                    Map<String, Object> map1 = (Map) object;
                    String sid = map1.get(Parameters.SUBJECT_ID) + "";
                    Object[] queryParamsSid = { sid };
                    List<Object> readObject1 = dao.readObjects(SibConstants.SqlMapper.SQL_SUBJECT_GET_TAGS,
                            queryParamsSid);

                    Map<String, Object> tags = null;
                    if (!CollectionUtils.isEmpty(readObject1)) {
                        for (Object obj : readObject1) {
                            tags = (Map) obj;
                            Iterator<Entry<String, Object>> it = tags.entrySet().iterator();
                            while (it.hasNext()) {
                                Map.Entry pairs = it.next();
                                if (pairs.getKey().equals("sid")) {
                                    it.remove();
                                }
                            }
                        }
                    }

                    Map<String, Object> mymap = new HashMap<String, Object>();
                    mymap.put("tags", readObject1);
                    resChildObject.add(map1);
                    resChildObject.add(mymap);
                    resParentObject.add(resChildObject);
                }
            }

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), resParentObject);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/getAllCategory", method = RequestMethod.GET)
    public ResponseEntity<Response> getAllCategory() {
        SimpleResponse simpleResponse = null;
        try {
            Object[] queryParams = {};

            List<Object> readObject = dao.readObjects(SibConstants.SqlMapper.SQL_GET_ALL_CATEGORY_TOPIC,
                    queryParams);

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, "subjects", "getAllCategory", readObject);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, "subjects", "getAllCategory", e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/fetchSubjects", method = RequestMethod.POST)
    public ResponseEntity<Response> fetchSubjects(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            if (!AuthenticationFilter.isAuthed(context)) {
                simpleResponse = new SimpleResponse(SibConstants.FAILURE, "Authentication required.");
                return new ResponseEntity<Response>(simpleResponse, HttpStatus.FORBIDDEN);
            }

            Object[] queryParams = {};

            List<Object> readObject = dao.readObjects(SibConstants.SqlMapperBROT43.SQL_GET_SUBJECT, queryParams);

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), readObject);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/createSubject", method = RequestMethod.POST)
    public ResponseEntity<Response> createSubject(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            if (!AuthenticationFilter.isAuthed(context)) {
                simpleResponse = new SimpleResponse(SibConstants.FAILURE, "Authentication required.");
                return new ResponseEntity<Response>(simpleResponse, HttpStatus.FORBIDDEN);
            }
            List<ManageSubjectModel> newSubjectDetails = new ArrayList<ManageSubjectModel>();
            ObjectMapper mapper = new ObjectMapper();
            try {
                newSubjectDetails = mapper.readValue(request.getRequest_data().getStringJson(),
                        new TypeReference<List<ManageSubjectModel>>() {
                        });
            } catch (JsonParseException e) {
                logger.error(e);
            } catch (JsonMappingException e) {
                logger.error(e);
            } catch (IOException e) {
                logger.error(e);
            }

            String active = null;
            boolean flag = true;
            if (!CollectionUtils.isEmpty(newSubjectDetails)) {
                for (ManageSubjectModel manageSubjectModel : newSubjectDetails) {

                    if (null != manageSubjectModel.getStatus()) {
                        if (manageSubjectModel.getStatus().equalsIgnoreCase("1")) {
                            active = "Y";
                        } else {
                            active = "N";
                        }
                    }
                    Object[] queryParams = { manageSubjectModel.getName(), manageSubjectModel.getDescription(),
                            new Date(), active, "1", "1" };

                    boolean insertFlag = dao.insertUpdateObject(SibConstants.SqlMapper.SQL_SUBJECT_DATA_INSERT,
                            queryParams);
                    if (!insertFlag) {
                        flag = false;
                        break;
                    }
                }
            }

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), flag);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/deleteSubject", method = RequestMethod.POST)
    public ResponseEntity<Response> deleteSubject(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            if (!AuthenticationFilter.isAuthed(context)) {
                simpleResponse = new SimpleResponse(SibConstants.FAILURE, "Authentication required.");
                return new ResponseEntity<Response>(simpleResponse, HttpStatus.FORBIDDEN);
            }
            List<ManageSubjectModel> newSubjectDetails = null;
            ObjectMapper mapper = new ObjectMapper();
            try {
                newSubjectDetails = mapper.readValue(request.getRequest_data().getStringJson(),
                        new TypeReference<List<ManageSubjectModel>>() {
                        });
            } catch (JsonParseException e) {
                logger.error(e);
            } catch (JsonMappingException e) {
                logger.error(e);
            } catch (IOException e) {
                logger.error(e);
            }

            boolean flag = true;
            if (!CollectionUtils.isEmpty(newSubjectDetails)) {
                for (ManageSubjectModel manageSubjectModel : newSubjectDetails) {
                    Object[] queryParams = { "" + manageSubjectModel.getId() };
                    boolean insertFlag = dao.insertUpdateObject(SibConstants.SqlMapper.SQL_SUBJECT_DATA_DELETE,
                            queryParams);
                    if (!insertFlag) {
                        flag = false;
                        break;
                    }
                }
            }

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), flag);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/listOfTopics", method = RequestMethod.POST)
    public ResponseEntity<Response> listOfTopics(@RequestBody final RequestData request) {
        SimpleResponse simpleResponse = null;
        try {
            if (!AuthenticationFilter.isAuthed(context)) {
                simpleResponse = new SimpleResponse(SibConstants.FAILURE, "Authentication required.");
                return new ResponseEntity<Response>(simpleResponse, HttpStatus.FORBIDDEN);
            }

            Object[] queryParams = { request.getRequest_data().getSubjectId() };

            List<Object> readObject = dao.readObjects(SibConstants.SqlMapper.SQL_SIB_GET_VIDEO_WITH_SUBJECT,
                    queryParams);

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), readObject);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    @RequestMapping(value = "/listOfSubTopicsPn", method = RequestMethod.POST)
    public ResponseEntity<Response> listOfSubTopicsPn(@RequestBody final RequestData request) {

        SimpleResponse simpleResponse = null;
        try {
            if (!AuthenticationFilter.isAuthed(context)) {
                simpleResponse = new SimpleResponse(SibConstants.FAILURE, "Authentication required.");
                return new ResponseEntity<Response>(simpleResponse, HttpStatus.FORBIDDEN);
            }

            CommonUtil util = CommonUtil.getInstance();

            Map<String, String> map = util.getLimit(request.getRequest_data().getPageno(),
                    request.getRequest_data().getLimit());
            // Object[] queryParams = new HashMap<String, String>();
            //
            // queryParams.put("subjectId",
            // request.getRequest_data().getSubjectId());
            // queryParams.put("cid", request.getRequest_data().getCid());
            // queryParams.put("from", map.get("from"));
            // queryParams.put("to", map.get("to"));
            //
            Object[] params = { request.getRequest_data().getSubjectId(), request.getRequest_data().getCid(),
                    map.get(Parameters.FROM), map.get(Parameters.TO) };
            // System.out.println("queryParams=="+queryParams);
            List<Object> readObject = dao.readObjects(SibConstants.SqlMapper.SQL_SIB_GET_VIDEO_WITH_SUB_TOPIC,
                    params);
            String count = null;
            if ("true".equalsIgnoreCase(request.getRequest_data().getTotalCountFlag())) {
                count = dao.getCount(SibConstants.SqlMapper.SQL_SIB_GET_VIDEO_WITH_TOPICS_COUNT, params);
            }

            simpleResponse = new SimpleResponse(SibConstants.SUCCESS, request.getRequest_data_type(),
                    request.getRequest_data_method(), readObject, count);
        } catch (DAOException e) {
            e.printStackTrace();
            simpleResponse = new SimpleResponse(SibConstants.FAILURE, request.getRequest_data_type(),
                    request.getRequest_data_method(), e.getMessage());
        }
        return new ResponseEntity<Response>(simpleResponse, HttpStatus.OK);
    }

}