data.services.SequenceService.java Source code

Java tutorial

Introduction

Here is the source code for data.services.SequenceService.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package data.services;

import data.dao.SequenceDao;
import data.dao.SequenceValueRangeDao;
import data.entity.BaseParam;
import data.entity.Scene;
import data.entity.Sequence;
import data.entity.SequenceValueRange;
import data.entity.ValueRange;
import data.services.parent.PrimService;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import logic.AStrategy1;
import logic.AStrategy2;
import logic.BStrategy1;
import logic.BStrategy2;
import logic.CanonicalRadix;
import logic.ResourceProfitability;
import logic.ResourceStaticType;
import logic.ToxicParamType;
import logic.ToxicValueType;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import support.StringAdapter;

/**
 *
 * @author bezdatiuzer
 */
@Service
@Transactional
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class SequenceService extends PrimService {

    @Autowired
    private SequenceDao sequenceDao;
    @Autowired
    private BaseParamService baseParamService;
    @Autowired
    private SequenceValueRangeService sequenceValueRangeService;

    public List<Sequence> getSequences() {
        return sequenceDao.getAllAsc("radCore");
    }

    public void delete(Long sequenceId) {
        Sequence sec = sequenceDao.find(sequenceId);
        if (sec != null) {
            for (SequenceValueRange svr : sec.getSequenceValueRanges()) {
                sequenceValueRangeService.delete(svr.getId());
            }
            sequenceDao.delete(sec);
        }
    }

    public void create(Sequence sec) throws Exception {
        if (sequenceDao.find(sec).isEmpty()) {
            if (validate(sec)) {
                sequenceDao.save(sec);
            }
        } else {
            addError("? ??  ??");
        }
    }

    public Sequence find(Long sequenceId) {
        return sequenceDao.find(sequenceId);
    }

    /*public StrategyBeforeStatic getStrategyBeforeStatic(Scene sc, String radix) throws Exception {
    return getSequence(sc, radix).getSel1();
    }
        
    public StrategyAfterStatic getStrategyAfterStatic(Scene sc, String radix) throws Exception {
    return getSequence(sc, radix).getSel2();
    }*/

    public void updateSequenceByScene(Sequence seq, Scene sc) {
        List<Scene> scLs = seq.getScenes();
        scLs.add(sc);
        seq.setScenes(scLs);
        sequenceDao.update(seq);
    }

    public void deleteSequenceByScene(Sequence seq, Scene sc) {
        List<Scene> scLs = seq.getScenes();
        List<Scene> neqscLs = new ArrayList();
        for (Scene scen : scLs) {
            if (!scen.getSceneId().equals(sc.getSceneId())) {
                neqscLs.add(scen);
            }
        }
        seq.setScenes(neqscLs);
        sequenceDao.update(seq);
    }

    public Sequence getSequenceFromSceneAndRadx(Scene sc, String radix) throws Exception {
        //  ?
        List<Sequence> slist = sequenceDao.findBySceneId(sc);
        Sequence scs = getSequenceFromList(slist, radix);
        if (scs != null) {
            return scs;
        }
        //?  ?   -  ?
        List<Sequence> withoutlist = sequenceDao.findWithoutScenes();
        scs = getSequenceFromList(withoutlist, radix);
        if (scs != null) {
            return scs;
        }
        return getDefault();
    }

    private Sequence getDefault() {
        Sequence seq = new Sequence();
        /*sc.setSel1(StrategyBeforeStatic.AMINBMIN);
        sc.setSel2(StrategyAfterStatic.NOONE);*/
        seq.setRadCore("default");
        seq.setAStrat1(AStrategy1.AMIN);
        seq.setBStrat1(BStrategy1.BMIN);
        seq.setResourceType(ResourceStaticType.FREEONLY);
        seq.setParamTox1(ToxicParamType.EXTRACLEAR);
        seq.setValueTox1(ToxicValueType.EXTRACLEAR);
        seq.setResourceProf(ResourceProfitability.NONE);
        seq.setAStrat2(AStrategy2.AMAX);
        seq.setBStrat2(BStrategy2.NONE);
        seq.setParamTox2(ToxicParamType.EXTRACLEAR);
        seq.setValueTox2(ToxicValueType.EXTRACLEAR);
        return seq;
    }

    private Sequence getSequenceFromList(List<Sequence> secList, String radix) throws Exception {
        CanonicalRadix evCr = new CanonicalRadix(radix.trim());
        /*addError("RC = " + radix+"; ");
        addError("1 - " + evCr.first+"; ");
        addError("2 - " + evCr.second+"; ");
        addError("3 - " + evCr.third+"; ");*/
        if (!secList.isEmpty()) {

            for (Sequence se : secList) {
                CanonicalRadix seqCr = new CanonicalRadix(se.getRadCore());
                if (seqCr.first.equals(evCr.first) && seqCr.second.equals(evCr.second)
                        && seqCr.third.equals(evCr.third)) {
                    return se;
                }
            }
            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals(evCr.first) && crList.second.equals(evCr.second)
                        && crList.third.equals("*")) {
                    return se;
                }
            }
            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals(evCr.first) && crList.second.equals("*") && crList.third.equals("*")) {
                    return se;
                }
            }

            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals("*") && crList.second.equals(evCr.second)
                        && crList.third.equals(evCr.third)) {
                    return se;
                }
            }

            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals("*") && crList.second.equals(evCr.second) && crList.third.equals("*")) {
                    return se;
                }
            }

            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals("*") && crList.second.equals("*") && crList.third.equals(evCr.third)) {
                    return se;
                }
            }

            for (Sequence se : secList) {
                CanonicalRadix crList = new CanonicalRadix(se.getRadCore());
                if (crList.first.equals("*") && crList.second.equals("*") && crList.third.equals("*")) {
                    return se;
                }
            }
        }
        //throw new Exception("null");
        return null;
    }

    public HSSFWorkbook getXls(Long seqId) throws Exception {
        Sequence seq = sequenceDao.find(seqId);
        if (seq != null) {
            Logger log = Logger.getLogger(this.getClass());
            try {
                HSSFWorkbook workbook = new HSSFWorkbook();
                List<SequenceValueRange> svrList = seq.getSequenceValueRanges();
                HSSFSheet sheet = workbook.createSheet("FirstSheet");
                HSSFRow rowhead = sheet.createRow((short) 0);
                rowhead.createCell(0).setCellValue("UID");
                rowhead.createCell(1).setCellValue("? ?");
                rowhead.createCell(2).setCellValue("?");
                rowhead.createCell(3).setCellValue("?");
                rowhead.createCell(4).setCellValue("? ?");
                int n = 1;
                if (!svrList.isEmpty()) {
                    for (SequenceValueRange vr : svrList) {
                        //BaseParam bp = baseParamService.getBaseParam(vr.getUid().trim());
                        HSSFRow rowbody = sheet.createRow((short) n);
                        rowbody.createCell(0).setCellValue(StringAdapter.getString(vr.getUid()));
                        rowbody.createCell(1).setCellValue(StringAdapter.getString(vr.getAmin()));
                        rowbody.createCell(2).setCellValue(StringAdapter.getString(vr.getValueMin()));
                        rowbody.createCell(3).setCellValue(StringAdapter.getString(vr.getValueMax()));
                        rowbody.createCell(4).setCellValue(StringAdapter.getString(vr.getAmax()));
                        n++;
                    }
                    ;
                }
                return workbook;
            } catch (Exception e) {
                throw new Exception(e);
            }
        } else {
            throw new Exception("?  . ");
        }
        //return null;
    }

    public void updateFromXml(File fl, Long seqId) throws Exception {
        try {
            Sequence seq = sequenceDao.find(seqId);
            if (seq != null) {
                FileInputStream fi = new FileInputStream(fl);
                int i = 0;
                int m = 1;
                try {
                    List<SequenceValueRange> newSVrList = new ArrayList();

                    HSSFWorkbook workbook = new HSSFWorkbook(fi);
                    HSSFSheet sheet = workbook.getSheetAt(0);
                    Iterator<Row> it = sheet.iterator();
                    it.next();
                    while (it.hasNext()) {
                        m++;
                        Row row = it.next();
                        Cell uidc = row.getCell(0);
                        String uid = "";
                        if (uidc != null) {
                            uid = StringAdapter.HSSFSellValue(uidc).replace(" ", "").trim();
                            if (uid.contains(".")) {
                                int point = uid.indexOf(".");
                                uid = uid.substring(0, point);
                            }
                        }

                        Cell aminCell = row.getCell(1);
                        Long amin = null;
                        if (aminCell != null) {
                            String supstr = StringAdapter.HSSFSellValue(aminCell);
                            if (supstr.contains(".")) {
                                int point = supstr.indexOf(".");
                                supstr = supstr.substring(0, point);
                            }
                            if (!supstr.equals("")) {
                                amin = StringAdapter.toLong(supstr);
                            }
                        }
                        Cell minCell = row.getCell(2);
                        Long min = null;
                        if (minCell != null) {
                            String supstr = StringAdapter.HSSFSellValue(minCell);
                            if (supstr.contains(".")) {
                                int point = supstr.indexOf(".");
                                supstr = supstr.substring(0, point);
                            }
                            if (!supstr.equals("")) {
                                min = StringAdapter.toLong(supstr);
                            }
                        }
                        Cell maxCell = row.getCell(3);
                        Long max = null;
                        if (maxCell != null) {
                            String supstr = StringAdapter.HSSFSellValue(maxCell);
                            if (supstr.contains(".")) {
                                int point = supstr.indexOf(".");
                                supstr = supstr.substring(0, point);
                            }
                            if (!supstr.equals("")) {
                                max = StringAdapter.toLong(supstr);
                            }
                        }
                        Cell amaxCell = row.getCell(4);
                        Long amax = null;
                        if (amaxCell != null) {
                            String supstr = StringAdapter.HSSFSellValue(amaxCell);
                            if (supstr.contains(".")) {
                                int point = supstr.indexOf(".");
                                supstr = supstr.substring(0, point);
                            }
                            if (!supstr.equals("")) {
                                amax = StringAdapter.toLong(supstr);
                            }
                        }

                        BaseParam bp = baseParamService.getBaseParam(uid);
                        if (bp != null) {
                            SequenceValueRange vr = new SequenceValueRange();
                            vr.setUid(uid);
                            vr.setName(bp.getName());
                            vr.setAmin(amin);
                            vr.setValueMin(min);
                            vr.setValueMax(max);
                            vr.setAmax(amax);
                            vr.setSequence(seq);
                            if (validate(vr,
                                    "??? , ? " + m + "; ")) {
                                newSVrList.add(vr);
                            }
                        }
                    }
                    List<SequenceValueRange> oldSVrList = seq.getSequenceValueRanges();
                    for (SequenceValueRange vr : oldSVrList) {
                        sequenceValueRangeService.delete(vr.getId());
                    }
                    for (SequenceValueRange vr : newSVrList) {
                        sequenceValueRangeService.create(vr);
                    }
                    workbook.close();
                } catch (Exception e) {
                    //addError(StringAdapter.getStackTraceException(e) + "str:"+i+"; ");
                    throw new Exception(StringAdapter.getStackTraceException(e) + "str: " + m + "; ");
                }
                fi.close();
            }
        } catch (Exception e) {
            //addError("  xml");
            //addError(e.getMessage());
            throw new Exception(StringAdapter.getStackTraceException(e));
        }

    }

}