Skip to content
Snippets Groups Projects
SLRSvcImp.java 3.06 KiB
Newer Older
jaron771's avatar
jaron771 committed
package com.nju.svcrecommend.serviceImp;

import com.nju.svcrecommend.dataMapper.acm.ACMSLRMapper;
import com.nju.svcrecommend.dataMapper.ieee.IEEESLRMapper;
import com.nju.svcrecommend.domain.PaperVO;
import com.nju.svcrecommend.domain.ResponseVO;
import com.nju.svcrecommend.domain.SLRVO;
import com.nju.svcrecommend.service.SLRSvc;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;

@Service
public class SLRSvcImp implements SLRSvc {

    private final ACMSLRMapper acmslrMapper;
    private final IEEESLRMapper ieeeslrMapper;

    public SLRSvcImp(ACMSLRMapper acmslrMapper, IEEESLRMapper ieeeslrMapper) {
        this.acmslrMapper = acmslrMapper;
        this.ieeeslrMapper = ieeeslrMapper;
    }

    @Override
jaron771's avatar
jaron771 committed
    public ResponseVO getSLRRecommend(String keywords, int page, int pageSize, int sortBy, int startTime, int endTime) {
        String[] k = keywords.split(";");
        ArrayList<PaperVO> paperVOS = new ArrayList<>();
        for(String keyword: k){
            paperVOS.addAll(acmslrMapper.selectPaperVOsByKeyword("%"+keyword+"%", startTime, endTime));
            paperVOS.addAll(ieeeslrMapper.selectPaperVOsByKeyword("%"+keyword+"%", startTime, endTime));
        }
        if(paperVOS.size() == 0) {return ResponseVO.buildFailure("No result.");}
jaron771's avatar
jaron771 committed
        PaperVO[] paperVOSArray = (PaperVO[])paperVOS.toArray(new PaperVO[paperVOS.size()]);

        if (sortBy == 0) {
            Arrays.sort(paperVOSArray, new YearCmp());
        }
        else {
            Arrays.sort(paperVOSArray, new CitationsCmp());
        }

        ArrayList<PaperVO> documents = new ArrayList<>();
        //0 1 2 3 4 5 6 7 8
        for (int i = (page-1)*pageSize; i < page*pageSize; ++i){
            PaperVO paperVO = paperVOSArray[i];
            if (paperVO.getPublication() == null) {
                paperVO.setPublication("");
            }
            paperVO.setAuthors(paperVO.getDb().equals("ACM") ? acmslrMapper.selectAuthorsByDocId(paperVO.getDocId())
                    : ieeeslrMapper.selectAuthorsByDocId(paperVO.getDocId()));
            if (paperVO.getDb().equals("ACM")){
                paperVO.setKeywords(acmslrMapper.selectKeywordsByDocId(paperVO.getDocId()));
            }
            documents.add(paperVO);
        }
        SLRVO slrvo = new SLRVO(documents, paperVOS.size());
        return ResponseVO.buildSuccess(slrvo);
    }
}

class CitationsCmp implements Comparator {
    public int compare(Object arg0, Object arg1) {
        PaperVO paperVO1 = (PaperVO)arg0;
        PaperVO paperVO2 = (PaperVO)arg1;
        if (paperVO1.getCitations() == paperVO2.getCitations()) {
            return 0;
        }
        return paperVO1.getCitations() > paperVO2.getCitations() ? -1:1;
    }
}

class YearCmp implements Comparator {
    public int compare(Object arg0, Object arg1) {
        PaperVO paperVO1 = (PaperVO)arg0;
        PaperVO paperVO2 = (PaperVO)arg1;
        if (paperVO1.getYear() == paperVO2.getYear()) {
            return 0;
        }
        return paperVO1.getYear() > paperVO2.getYear() ? -1:1;
    }
}