From 83536a6857c256c6da5f053724a1504e9b11abae Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Wed, 2 Jan 2019 21:47:04 +0800 Subject: [PATCH] implemented OSS download and binary fetch --- .../decoder/businesslogic/DecodeLogic.java | 44 +++++++++++-------- .../decoder/businesslogic/IndexLogic.java | 8 +++- .../IDecodeSessionRepository.java | 2 +- .../IIRBinaryRepository.java | 2 +- .../impl/DecodeSessionRepositoryImpl.java | 4 +- .../impl/IRBinaryRepositoryImpl.java | 8 ++-- .../decoder/mapper/RemoteIndexMapper.java | 6 ++- .../decoder/service/IRDecodeService.java | 23 +++++++--- .../decoder/mapper/RemoteIndexMapper.xml | 34 ++++++++++++++ 9 files changed, 97 insertions(+), 34 deletions(-) rename src/main/java/net/irext/decoder/{redisrepo => cache}/IDecodeSessionRepository.java (93%) rename src/main/java/net/irext/decoder/{redisrepo => cache}/IIRBinaryRepository.java (93%) rename src/main/java/net/irext/decoder/{redisrepo => cache}/impl/DecodeSessionRepositoryImpl.java (93%) rename src/main/java/net/irext/decoder/{redisrepo => cache}/impl/IRBinaryRepositoryImpl.java (87%) create mode 100644 src/main/resources/net/irext/decoder/mapper/RemoteIndexMapper.xml diff --git a/src/main/java/net/irext/decoder/businesslogic/DecodeLogic.java b/src/main/java/net/irext/decoder/businesslogic/DecodeLogic.java index 396d1b7..9fd69c3 100644 --- a/src/main/java/net/irext/decoder/businesslogic/DecodeLogic.java +++ b/src/main/java/net/irext/decoder/businesslogic/DecodeLogic.java @@ -3,12 +3,11 @@ package net.irext.decoder.businesslogic; import net.irext.decoder.alioss.OSSHelper; import net.irext.decoder.model.IRBinary; import net.irext.decoder.model.RemoteIndex; -import net.irext.decoder.redisrepo.IIRBinaryRepository; +import net.irext.decoder.cache.IIRBinaryRepository; import net.irext.decoder.utils.FileUtil; +import net.irext.decoder.utils.LoggerUtil; import net.irext.decoder.utils.MD5Util; import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import javax.servlet.ServletContext; import java.io.File; @@ -26,17 +25,15 @@ import java.security.MessageDigest; * Revision log: * 2018-12-08: created by strawmanbobi */ -@Controller public class DecodeLogic { + private static final String TAG = DecodeLogic.class.getSimpleName(); + private static final String IR_BIN_FILE_PREFIX = "irda_"; private static final String IR_BIN_FILE_SUFFIX = ".bin"; private static DecodeLogic decodeLogic; - @Autowired - private ServletContext context; - public static DecodeLogic getInstance() { if (null == decodeLogic) { decodeLogic = new DecodeLogic(); @@ -48,7 +45,8 @@ public class DecodeLogic { } - public byte[] openIRBinary(IIRBinaryRepository irBinaryRepository, RemoteIndex remoteIndex) { + public byte[] openIRBinary(ServletContext context, IIRBinaryRepository irBinaryRepository, + RemoteIndex remoteIndex) { if (null == remoteIndex) { return null; } @@ -56,6 +54,9 @@ public class DecodeLogic { String checksum = remoteIndex.getBinaryMd5().toUpperCase(); String remoteMap = remoteIndex.getRemoteMap(); + LoggerUtil.getInstance().trace(TAG, "checksum for remoteIndex " + + remoteIndex.getId() + " = " + checksum); + IRBinary irBinary = irBinaryRepository.find(remoteIndex.getId()); if (null != irBinary) { byte[] binaries = irBinary.getBinary(); @@ -63,7 +64,8 @@ public class DecodeLogic { System.out.println("binary content fetched from redis : " + binaries.length); // validate binary content String cachedChecksum = - MD5Util.byteArrayToHexString(MessageDigest.getInstance("MD5").digest(binaries)).toUpperCase(); + MD5Util.byteArrayToHexString(MessageDigest.getInstance("MD5") + .digest(binaries)).toUpperCase(); if (cachedChecksum.equals(checksum)) { return binaries; } @@ -71,17 +73,21 @@ public class DecodeLogic { } // otherwise, read from file or OSS - String downloadPath = context.getRealPath("") + "bin_cache" + File.separator; - String fileName = IR_BIN_FILE_PREFIX + remoteMap + IR_BIN_FILE_SUFFIX; - String localFilePath = downloadPath + fileName; + if (null != context) { + String downloadPath = context.getRealPath("") + "bin_cache" + File.separator; + String fileName = IR_BIN_FILE_PREFIX + remoteMap + IR_BIN_FILE_SUFFIX; + String localFilePath = downloadPath + fileName; - File binFile = new File(localFilePath); - FileInputStream fin = getFile(binFile, downloadPath, fileName, checksum); - if (null != fin) { - byte[] binaries = IOUtils.toByteArray(fin); - System.out.println("binary content get, save it to redis"); - irBinaryRepository.add(new IRBinary(remoteIndex.getId(), binaries)); - return binaries; + File binFile = new File(localFilePath); + FileInputStream fin = getFile(binFile, downloadPath, fileName, checksum); + if (null != fin) { + byte[] binaries = IOUtils.toByteArray(fin); + System.out.println("binary content get, save it to redis"); + irBinaryRepository.add(new IRBinary(remoteIndex.getId(), binaries)); + return binaries; + } + } else { + LoggerUtil.getInstance().trace(TAG, "servlet context is null"); } } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/main/java/net/irext/decoder/businesslogic/IndexLogic.java b/src/main/java/net/irext/decoder/businesslogic/IndexLogic.java index 3f66b60..b0afd2f 100644 --- a/src/main/java/net/irext/decoder/businesslogic/IndexLogic.java +++ b/src/main/java/net/irext/decoder/businesslogic/IndexLogic.java @@ -4,6 +4,8 @@ import net.irext.decoder.mapper.RemoteIndexMapper; import net.irext.decoder.model.RemoteIndex; import org.springframework.stereotype.Controller; +import java.util.List; + /** * Filename: CollectCodeLogic * Revised: Date: 2018-12-08 @@ -33,6 +35,10 @@ public class IndexLogic { } public RemoteIndex getRemoteIndex(int indexId) { - return remoteIndexMapper.getRemoteIndexById(indexId); + List remoteIndexList = remoteIndexMapper.getRemoteIndexById(indexId); + if (null != remoteIndexList && remoteIndexList.size() > 0) { + return remoteIndexList.get(0); + } + return null; } } diff --git a/src/main/java/net/irext/decoder/redisrepo/IDecodeSessionRepository.java b/src/main/java/net/irext/decoder/cache/IDecodeSessionRepository.java similarity index 93% rename from src/main/java/net/irext/decoder/redisrepo/IDecodeSessionRepository.java rename to src/main/java/net/irext/decoder/cache/IDecodeSessionRepository.java index 477c3f4..120570f 100644 --- a/src/main/java/net/irext/decoder/redisrepo/IDecodeSessionRepository.java +++ b/src/main/java/net/irext/decoder/cache/IDecodeSessionRepository.java @@ -1,4 +1,4 @@ -package net.irext.decoder.redisrepo; +package net.irext.decoder.cache; import net.irext.decoder.model.DecodeSession; diff --git a/src/main/java/net/irext/decoder/redisrepo/IIRBinaryRepository.java b/src/main/java/net/irext/decoder/cache/IIRBinaryRepository.java similarity index 93% rename from src/main/java/net/irext/decoder/redisrepo/IIRBinaryRepository.java rename to src/main/java/net/irext/decoder/cache/IIRBinaryRepository.java index 54d8977..d4fc7b8 100644 --- a/src/main/java/net/irext/decoder/redisrepo/IIRBinaryRepository.java +++ b/src/main/java/net/irext/decoder/cache/IIRBinaryRepository.java @@ -1,4 +1,4 @@ -package net.irext.decoder.redisrepo; +package net.irext.decoder.cache; import net.irext.decoder.model.IRBinary; diff --git a/src/main/java/net/irext/decoder/redisrepo/impl/DecodeSessionRepositoryImpl.java b/src/main/java/net/irext/decoder/cache/impl/DecodeSessionRepositoryImpl.java similarity index 93% rename from src/main/java/net/irext/decoder/redisrepo/impl/DecodeSessionRepositoryImpl.java rename to src/main/java/net/irext/decoder/cache/impl/DecodeSessionRepositoryImpl.java index 300e7b6..1895533 100644 --- a/src/main/java/net/irext/decoder/redisrepo/impl/DecodeSessionRepositoryImpl.java +++ b/src/main/java/net/irext/decoder/cache/impl/DecodeSessionRepositoryImpl.java @@ -1,7 +1,7 @@ -package net.irext.decoder.redisrepo.impl; +package net.irext.decoder.cache.impl; import net.irext.decoder.model.DecodeSession; -import net.irext.decoder.redisrepo.IDecodeSessionRepository; +import net.irext.decoder.cache.IDecodeSessionRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; diff --git a/src/main/java/net/irext/decoder/redisrepo/impl/IRBinaryRepositoryImpl.java b/src/main/java/net/irext/decoder/cache/impl/IRBinaryRepositoryImpl.java similarity index 87% rename from src/main/java/net/irext/decoder/redisrepo/impl/IRBinaryRepositoryImpl.java rename to src/main/java/net/irext/decoder/cache/impl/IRBinaryRepositoryImpl.java index a0e7184..8584a64 100644 --- a/src/main/java/net/irext/decoder/redisrepo/impl/IRBinaryRepositoryImpl.java +++ b/src/main/java/net/irext/decoder/cache/impl/IRBinaryRepositoryImpl.java @@ -1,13 +1,14 @@ -package net.irext.decoder.redisrepo.impl; +package net.irext.decoder.cache.impl; import net.irext.decoder.model.IRBinary; -import net.irext.decoder.redisrepo.IIRBinaryRepository; +import net.irext.decoder.cache.IIRBinaryRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Repository; import javax.annotation.PostConstruct; +import javax.annotation.Resource; import java.util.Map; /** @@ -22,8 +23,9 @@ import java.util.Map; */ @Repository public class IRBinaryRepositoryImpl implements IIRBinaryRepository { - private static final String KEY = "SESSION_KEY"; + private static final String KEY = "BINARY_KEY"; + @Resource(name="redisTemplate") private RedisTemplate redisTemplate; private HashOperations hashOperations; diff --git a/src/main/java/net/irext/decoder/mapper/RemoteIndexMapper.java b/src/main/java/net/irext/decoder/mapper/RemoteIndexMapper.java index 4ed58d7..a5c429c 100644 --- a/src/main/java/net/irext/decoder/mapper/RemoteIndexMapper.java +++ b/src/main/java/net/irext/decoder/mapper/RemoteIndexMapper.java @@ -2,8 +2,11 @@ package net.irext.decoder.mapper; import net.irext.decoder.model.RemoteIndex; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.ResultMap; import org.apache.ibatis.annotations.Select; +import java.util.List; + /** * Filename: RemoteIndexMapper.java * Revised: Date: 2018-12-08 @@ -18,5 +21,6 @@ import org.apache.ibatis.annotations.Select; public interface RemoteIndexMapper { @Select("SELECT * FROM remote_index WHERE id = #{id}") - RemoteIndex getRemoteIndexById(int id); + @ResultMap("BaseResultMap") + List getRemoteIndexById(int id); } diff --git a/src/main/java/net/irext/decoder/service/IRDecodeService.java b/src/main/java/net/irext/decoder/service/IRDecodeService.java index b82dc0c..d48413e 100644 --- a/src/main/java/net/irext/decoder/service/IRDecodeService.java +++ b/src/main/java/net/irext/decoder/service/IRDecodeService.java @@ -4,8 +4,8 @@ import net.irext.decoder.businesslogic.DecodeLogic; import net.irext.decoder.businesslogic.IndexLogic; import net.irext.decoder.mapper.RemoteIndexMapper; import net.irext.decoder.model.RemoteIndex; -import net.irext.decoder.redisrepo.IDecodeSessionRepository; -import net.irext.decoder.redisrepo.IIRBinaryRepository; +import net.irext.decoder.cache.IDecodeSessionRepository; +import net.irext.decoder.cache.IIRBinaryRepository; import net.irext.decoder.request.CloseRequest; import net.irext.decoder.request.DecodeRequest; import net.irext.decoder.request.OpenRequest; @@ -16,11 +16,12 @@ import net.irext.decoder.service.base.AbstractBaseService; import net.irext.decoder.utils.LoggerUtil; import net.irext.decodesdk.bean.ACStatus; import net.irext.decodesdk.utils.Constants; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.*; +import javax.servlet.ServletContext; + /** * Filename: IRDecodeService.java * Revised: Date: 2018-12-16 @@ -33,12 +34,16 @@ import org.springframework.web.bind.annotation.*; */ @RestController @RequestMapping("/irext") +@Service("IRDecodeService") public class IRDecodeService extends AbstractBaseService { private static final String TAG = IRDecodeService.class.getSimpleName(); private RemoteIndexMapper remoteIndexMapper; + @Autowired + private ServletContext context; + @Autowired private IIRBinaryRepository irBinaryRepository; @@ -61,10 +66,16 @@ public class IRDecodeService extends AbstractBaseService { if (null == remoteIndex) { response.setStatus(new Status(Constants.ERROR_CODE_NETWORK_ERROR, "")); return response; + } else { + LoggerUtil.getInstance().trace(TAG, "remoteIndex get : " + remoteIndex.getId() + ", " + + remoteIndex.getRemoteMap()); } - byte []binaryContent = DecodeLogic.getInstance().openIRBinary(irBinaryRepository, remoteIndex); - System.out.println("binary content fetched : " + binaryContent.length); + byte []binaryContent = DecodeLogic.getInstance().openIRBinary(context, irBinaryRepository, remoteIndex); + if (null != binaryContent) { + LoggerUtil.getInstance().trace(TAG,"binary content fetched : " + binaryContent.length); + } + response.setStatus(new Status(Constants.ERROR_CODE_SUCCESS, "")); return response; } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/resources/net/irext/decoder/mapper/RemoteIndexMapper.xml b/src/main/resources/net/irext/decoder/mapper/RemoteIndexMapper.xml new file mode 100644 index 0000000..8d50f1f --- /dev/null +++ b/src/main/resources/net/irext/decoder/mapper/RemoteIndexMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file