package com.xxx.services.cmp.conference.utils;
import com.xxx.modules.cmp.cmp.dto.*;
import com.xxx.modules.cmp.cmp.model.NameplateImageData;
import com.xxx.modules.cmp.cmp.model.NameplateTemplateData;
import com.xxx.modules.cmp.cmp.model.NameplateTemplateDataAll;
import com.xxx.modules.cmp.cmp.model.NameplateTextData;
import com.xxx.modules.cmp.cmp.types.nameplate.NameplateImageSettingType;
import com.xxx.modules.cmp.cmp.types.nameplate.NameplateTextSettingType;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
public class AnalysisCmpNamePlateTemplateUtils {
public static List<NameplateTemplateDataDTO> analysisNamePlateTemplate(byte[] nameplateTemplate) {
if (nameplateTemplate == null) {
return null;
}
List<NameplateTemplateDataDTO> nameplateTemplateDataDTOList = new ArrayList<>();
byte templateCount = nameplateTemplate[0];
for (int i = 0; i < templateCount; i++) {
NameplateTemplateDataDTO nameplateTemplateDataDTO = new NameplateTemplateDataDTO();
NameplateTemplateData nameplateTemplateData = new NameplateTemplateData();
byte[] data = new byte[308570];
System.arraycopy(nameplateTemplate, 1 + 308570 * i, data, 0, 308570);
nameplateTemplateData.fromBytes(data);
if (nameplateTemplateData == null) {
return null;
}
nameplateTemplateDataDTO.setRevert((int) nameplateTemplateData.getRevert());
nameplateTemplateDataDTO.setResolution((int) nameplateTemplateData.getResolution());
int imageCount = nameplateTemplateData.getImageCount();
NameplateImageData[] imageData = nameplateTemplateData.getImageData();
List<NameplateImageDataDTO> nameplateImageDataDTOList = new ArrayList<>();
for (int k = 0; k < imageCount; k++) {
NameplateImageData nameplateImageData = imageData[k];
NameplateImageDataDTO nameplateImageDataDTO = analysisNameplateImageData(nameplateImageData);
nameplateImageDataDTOList.add(nameplateImageDataDTO);
}
nameplateTemplateDataDTO.setImageData(nameplateImageDataDTOList);
int textCount = nameplateTemplateData.getTextCount();
NameplateTextData[] textData = nameplateTemplateData.getTextData();
List<NameplateTextDataDTO> nameplateTextDataDTOArrayList = new ArrayList<>();
for (int j = 0; j < textCount; j++) {
NameplateTextData nameplateTextData = textData[j];
NameplateTextDataDTO nameplateTextDataDTO = analysisNameplateTextData(nameplateTextData);
nameplateTextDataDTOArrayList.add(nameplateTextDataDTO);
}
nameplateTemplateDataDTO.setTextData(nameplateTextDataDTOArrayList);
byte[] manufacturer = nameplateTemplateData.getManufacturer();
String manufacturerStr = null;
try {
manufacturerStr = new String(manufacturer, "UTF-8").trim();
nameplateTemplateDataDTO.setManufacturer(manufacturerStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] fileType = nameplateTemplateData.getFileType();
String fileTypeStr = null;
try {
fileTypeStr = new String(fileType, "UTF-8").trim();
nameplateTemplateDataDTO.setFileType(fileTypeStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] name = nameplateTemplateData.getName();
String nameStr = null;
try {
nameStr = new String(name, "UTF-8").trim();
nameplateTemplateDataDTO.setName(nameStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] version = nameplateTemplateData.getVersion();
String versionStr = null;
try {
versionStr = new String(version, "UTF-8").trim();
nameplateTemplateDataDTO.setVersion(versionStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
long backGround = nameplateTemplateData.getBackGround();
nameplateTemplateDataDTO.setBackGround(backGround);
nameplateTemplateDataDTOList.add(nameplateTemplateDataDTO);
}
return nameplateTemplateDataDTOList;
}
public static NameplateTextDataDTO analysisNameplateTextData(NameplateTextData nameplateTextData) {
if (nameplateTextData == null) {
return null;
}
NameplateTextDataDTO nameplateTextDataDTO = new NameplateTextDataDTO();
byte[] text = nameplateTextData.getText();
String textStr = null;
try {
textStr = new String(text, "UTF-8").trim();
nameplateTextDataDTO.setText(textStr);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTextDataDTO.setX(nameplateTextData.getX());
nameplateTextDataDTO.setY(nameplateTextData.getY());
nameplateTextDataDTO.setWidth(nameplateTextData.getWidth());
nameplateTextDataDTO.setHeight(nameplateTextData.getHeight());
nameplateTextDataDTO.setFontFamily(nameplateTextData.getFontFamily());
nameplateTextDataDTO.setFontSize(nameplateTextData.getFontSize());
nameplateTextDataDTO.setSettings(nameplateTextData.getSettings());
Long settings = nameplateTextDataDTO.getSettings();
if (settings != null) {
NameplateTextSettingDTO nameplateTextSettingDTO = analysisNameplateTextData(nameplateTextDataDTO.getSettings());
nameplateTextDataDTO.setSettingDetails(nameplateTextSettingDTO);
}
nameplateTextDataDTO.setOrderIndex(nameplateTextData.getOrderIndex());
return nameplateTextDataDTO;
}
public static NameplateImageDataDTO analysisNameplateImageData(NameplateImageData nameplateImageData) {
if (nameplateImageData == null) {
return null;
}
NameplateImageDataDTO nameplateImageDataDTO = new NameplateImageDataDTO();
nameplateImageDataDTO.setX(nameplateImageData.getX());
nameplateImageDataDTO.setY(nameplateImageData.getY());
nameplateImageDataDTO.setWidth(nameplateImageData.getWidth());
nameplateImageDataDTO.setHeight(nameplateImageData.getHeight());
nameplateImageDataDTO.setSettings(nameplateImageData.getSettings());
nameplateImageDataDTO.setOrderIndex(nameplateImageData.getOrderIndex());
Long settings = nameplateImageData.getSettings();
if (settings != null) {
NameplateImageSettingDTO nameplateTextSettingDTO = analysisNameplateImageData(nameplateImageData.getSettings());
nameplateImageDataDTO.setSettingDetails(nameplateTextSettingDTO);
}
byte[] image = nameplateImageData.getImage();
if (image != null) {
String base64Str = Base64.getEncoder().encodeToString(image);
nameplateImageDataDTO.setImage(base64Str);
}
return nameplateImageDataDTO;
}
public static NameplateTextSettingDTO analysisNameplateTextData(long settings) {
boolean isBold = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_BOLD, settings);
boolean isItalic = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_ITALIC, settings);
boolean isUnderline = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_UNDERLINE, settings);
boolean isStrikeOut = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_STRIKEOUT, settings);
boolean isUpper = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_UPPER, settings);
boolean isStretch = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.IS_STRETCH, settings);
boolean isRevert = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.REVERT, settings);
int textAlignment = NameplateTextSettingType.getIntValue(NameplateTextSettingType.TEXT_ALIGNMENT, settings);
int verticalAlignment = NameplateTextSettingType.getIntValue(NameplateTextSettingType.VERTICAL_ALIGNMENT, settings);
int dataSourceValue = NameplateTextSettingType.getIntValue(NameplateTextSettingType.DATA_SOURCE_VAL, settings);
boolean isAutoFontSize = NameplateTextSettingType.getBooleanValue(NameplateTextSettingType.AUTO_FIT, settings);
int spaceCount = NameplateTextSettingType.getIntValue(NameplateTextSettingType.SPACE_COUNT, settings);
boolean autoWrap = ((settings & NameplateTextSettingType.AUTO_WRAP.getCode()) >> NameplateTextSettingType.AUTO_WRAP.getPos()) == 1;
int backColor = NameplateTextSettingType.getIntValue(NameplateTextSettingType.BACK_GROUND_COLOR, settings);
int foreColor = NameplateTextSettingType.getIntValue(NameplateTextSettingType.FORE_GROUND_COLOR, settings);
NameplateTextSettingDTO nameplateTextSettingDTO = new NameplateTextSettingDTO();
nameplateTextSettingDTO.setBold(isBold);
nameplateTextSettingDTO.setItalic(isItalic);
nameplateTextSettingDTO.setUnderLine(isUnderline);
nameplateTextSettingDTO.setStrikeOut(isStrikeOut);
nameplateTextSettingDTO.setUpper(isUpper);
nameplateTextSettingDTO.setStretch(isStretch);
nameplateTextSettingDTO.setRevert(isRevert);
nameplateTextSettingDTO.setTextAlignment(textAlignment);
nameplateTextSettingDTO.setVerticalAlignment(verticalAlignment);
nameplateTextSettingDTO.setDataSourceValue(dataSourceValue);
nameplateTextSettingDTO.setAutoFit(isAutoFontSize);
nameplateTextSettingDTO.setSpaceCount(spaceCount);
nameplateTextSettingDTO.setAutoWrap(autoWrap);
nameplateTextSettingDTO.setBackgroundColor(backColor);
nameplateTextSettingDTO.setForegroundColor(foreColor);
return nameplateTextSettingDTO;
}
public static NameplateImageSettingDTO analysisNameplateImageData(long settings) {
int dataSourceValue = NameplateImageSettingType.getIntValue(NameplateImageSettingType.DATA_SOURCE_VAL, settings);
int textAlignment = NameplateImageSettingType.getIntValue(NameplateImageSettingType.TEXT_ALIGNMENT, settings);
int verticalAlignment = NameplateImageSettingType.getIntValue(NameplateImageSettingType.VERTICAL_ALIGNMENT, settings);
int stretch = NameplateImageSettingType.getIntValue(NameplateImageSettingType.IS_STRETCH, settings);
int backColor = NameplateImageSettingType.getIntValue(NameplateImageSettingType.BACK_GROUND_COLOR, settings);
NameplateImageSettingDTO nameplateImageSettingDTO = new NameplateImageSettingDTO();
nameplateImageSettingDTO.setDataSourceValue(dataSourceValue);
nameplateImageSettingDTO.setTextAlignment(textAlignment);
nameplateImageSettingDTO.setVerticalAlignment(verticalAlignment);
nameplateImageSettingDTO.setStretch(stretch);
nameplateImageSettingDTO.setBackgroundColor(backColor);
return nameplateImageSettingDTO;
}
public static byte[] analysisNameplateObject(List<NameplateTemplateDataDTO> templateDataDetails) {
if (templateDataDetails == null) {
return null;
}
byte size = (byte) templateDataDetails.size();
NameplateTemplateDataAll nameplateTemplateDataAll = new NameplateTemplateDataAll();
nameplateTemplateDataAll.setTemplateCount(size);
NameplateTemplateData[] nameplateTemplateDataArr = new NameplateTemplateData[4];
for (int i = 0; i < templateDataDetails.size(); i++) {
NameplateTemplateData nameplateTemplateData = new NameplateTemplateData();
NameplateTemplateDataDTO nameplateTemplateDataDTO = templateDataDetails.get(i);
if (nameplateTemplateDataDTO == null) {
return null;
}
if (nameplateTemplateDataDTO.getResolution() != null) {
byte resolution = (byte) nameplateTemplateDataDTO.getResolution().intValue();
nameplateTemplateData.setResolution(resolution);
}
if (nameplateTemplateDataDTO.getRevert() != null) {
byte revert = (byte) nameplateTemplateDataDTO.getRevert().intValue();
nameplateTemplateData.setRevert(revert);
}
List<NameplateTextDataDTO> textDataList = nameplateTemplateDataDTO.getTextData();
if (textDataList != null && textDataList.size() > 0) {
nameplateTemplateData = analysisTextDataObject(textDataList, nameplateTemplateData);
}
List<NameplateImageDataDTO> imageDataList = nameplateTemplateDataDTO.getImageData();
if (imageDataList != null && imageDataList.size() > 0) {
nameplateTemplateData = analysisImageDataObject(imageDataList, nameplateTemplateData);
}
String manufacturer = nameplateTemplateDataDTO.getManufacturer();
if (manufacturer != null && !"".equals(manufacturer)) {
byte[] manufacturerByte = new byte[128];
try {
manufacturerByte = manufacturer.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTemplateData.setManufacturer(manufacturerByte);
} else {
nameplateTemplateData.setManufacturer(new byte[128]);
}
String fileType = nameplateTemplateDataDTO.getFileType();
if (fileType != null && !"".equals(fileType)) {
byte[] fileTypeByte = new byte[128];
try {
fileTypeByte = fileType.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTemplateData.setFileType(fileTypeByte);
} else {
nameplateTemplateData.setFileType(new byte[128]);
}
String name = nameplateTemplateDataDTO.getName();
if (name != null && !"".equals(name)) {
byte[] nameByte = new byte[128];
try {
nameByte = name.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTemplateData.setName(nameByte);
} else {
nameplateTemplateData.setName(new byte[128]);
}
String version = nameplateTemplateDataDTO.getManufacturer();
if (version != null && !"".equals(version)) {
byte[] versionByte = new byte[128];
try {
versionByte = version.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTemplateData.setVersion(versionByte);
} else {
nameplateTemplateData.setVersion(new byte[128]);
}
Long backGround = nameplateTemplateDataDTO.getBackGround();
if (backGround != null) {
nameplateTemplateData.setBackGround(backGround);
} else {
nameplateTemplateData.setBackGround(0L);
}
nameplateTemplateDataArr[i] = nameplateTemplateData;
}
nameplateTemplateDataAll.setNameplateTemplateData(nameplateTemplateDataArr);
byte[] bytes = nameplateTemplateDataAll.toBytes();
return bytes;
}
public static long analysisTextSettingObject(NameplateTextSettingDTO settingDetails) {
long settings = 0;
if (settingDetails == null) {
return settings;
}
try {
if (settingDetails.isBold()) {
settings = settings | (0x01 << 0);
}
if (settingDetails.isItalic()) {
settings = settings | (0x01 << 1);
}
if (settingDetails.isUnderLine()) {
settings = settings | (0x01 << 2);
}
if (settingDetails.isStrikeOut()) {
settings = settings | (0x01 << 3);
}
if (settingDetails.isUpper()) {
settings = settings | (0x01 << 4);
}
if (settingDetails.isStretch()) {
settings = settings | (0x01 << 5);
}
if (settingDetails.isRevert()) {
settings = settings | (0x01 << 6);
}
settings = settings | (settingDetails.getTextAlignment() << 7);
settings = settings | (settingDetails.getVerticalAlignment() << 9);
settings = settings | (settingDetails.getDataSourceValue() << 11);
if (settingDetails.isAutoFit()) {
settings = settings | (0x01 << 16);
}
settings = settings | (settingDetails.getSpaceCount() << 17);
if (settingDetails.isAutoWrap()) {
settings = settings | (0x01 << 21);
}
settings = settings | (settingDetails.getBackgroundColor() << 22);
settings = settings | (settingDetails.getForegroundColor() << 26);
} catch (Exception e) {
return settings;
}
return settings;
}
public static long analysisImageSettingObject(NameplateImageSettingDTO settingDetails) {
long settings = 0;
if (settingDetails == null) {
return settings;
}
try {
settings = settings | (settingDetails.getDataSourceValue() << 0);
settings = settings | (settingDetails.getTextAlignment() << 4);
settings = settings | (settingDetails.getVerticalAlignment() << 6);
settings = settings | (settingDetails.getStretch() << 8);
settings = settings | (settingDetails.getBackgroundColor() << 10);
} catch (Exception e) {
return settings;
}
return settings;
}
public static NameplateTemplateData analysisTextDataObject(List<NameplateTextDataDTO> textDataList, NameplateTemplateData nameplateTemplateData) {
nameplateTemplateData.setTextCount((byte) textDataList.size());
NameplateTextData[] textData = new NameplateTextData[5];
for (int j = 0; j < 5; j++) {
NameplateTextDataDTO nameplateTextDataDTO;
try {
nameplateTextDataDTO = textDataList.get(j);
} catch (Exception ex) {
nameplateTextDataDTO = null;
}
if (nameplateTextDataDTO != null) {
NameplateTextData nameplateTextData = new NameplateTextData();
byte[] textByte = new byte[0];
try {
textByte = nameplateTextDataDTO.getText().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nameplateTextData.setText(textByte);
nameplateTextData.setX(nameplateTextDataDTO.getX());
nameplateTextData.setY(nameplateTextDataDTO.getY());
nameplateTextData.setWidth(nameplateTextDataDTO.getWidth());
nameplateTextData.setHeight(nameplateTextDataDTO.getHeight());
nameplateTextData.setFontFamily(nameplateTextDataDTO.getFontFamily());
nameplateTextData.setFontSize(nameplateTextDataDTO.getFontSize());
NameplateTextSettingDTO settingDetails = nameplateTextDataDTO.getSettingDetails();
long settings = analysisTextSettingObject(settingDetails);
nameplateTextData.setSettings(settings);
nameplateTextData.setOrderIndex(nameplateTextDataDTO.getOrderIndex());
textData[j] = nameplateTextData;
} else {
textData[j] = new NameplateTextData();
}
}
nameplateTemplateData.setTextData(textData);
return nameplateTemplateData;
}
public static NameplateTemplateData analysisImageDataObject(List<NameplateImageDataDTO> imageDataList, NameplateTemplateData nameplateTemplateData) {
nameplateTemplateData.setImageCount((byte) imageDataList.size());
NameplateImageData[] imageData = new NameplateImageData[3];
for (int k = 0; k < 3; k++) {
NameplateImageDataDTO nameplateImageDataDTO;
try {
nameplateImageDataDTO = imageDataList.get(k);
} catch (Exception ex) {
nameplateImageDataDTO = null;
}
if (nameplateImageDataDTO != null) {
NameplateImageData nameplateImageData = new NameplateImageData();
nameplateImageData.setX(nameplateImageDataDTO.getX());
nameplateImageData.setY(nameplateImageDataDTO.getY());
nameplateImageData.setWidth(nameplateImageDataDTO.getWidth());
nameplateImageData.setHeight(nameplateImageDataDTO.getHeight());
NameplateImageSettingDTO settingDetails = nameplateImageDataDTO.getSettingDetails();
long settings = analysisImageSettingObject(settingDetails);
nameplateImageData.setSettings(settings);
String image = nameplateImageDataDTO.getImage();
if (image != null) {
byte[] imageByte = Base64.getDecoder().decode(image);
nameplateImageData.setImage(imageByte);
}
nameplateImageData.setOrderIndex(nameplateImageDataDTO.getOrderIndex());
imageData[k] = nameplateImageData;
} else {
imageData[k] = new NameplateImageData();
}
}
nameplateTemplateData.setImageData(imageData);
return nameplateTemplateData;
}
}
package com.xxx.modules.cmp.cmp.model;
import com.xxx.common.structs.StructBasic;
import com.xxx.common.structs.TStruct;
import com.xxx.common.structs.TStructGlobal;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class NameplateTemplateData extends StructBasic {
public NameplateTemplateData() {
for (int i = 0; i < 5; i++) {
textData[i] = new NameplateTextData();
}
for (int i = 0; i < 3; i++) {
imageData[i] = new NameplateImageData();
}
}
@TStruct(order = 0, dataType = TStructGlobal.UINT8, dataLength = 1)
public byte resolution;
@TStruct(order = 1, dataType = TStructGlobal.UINT8, dataLength = 1)
public byte revert;
@TStruct(order = 2, dataType = TStructGlobal.UINT8, dataLength = 1)
public byte textCount;
@TStruct(order = 3, dataType = TStructGlobal.STRUCT, arrayLength = 5, dataLength = 156)
public NameplateTextData[] textData = new NameplateTextData[5];
@TStruct(order = 4, dataType = TStructGlobal.UINT8, dataLength = 1)
public byte imageCount;
@TStruct(order = 5, dataType = TStructGlobal.STRUCT, arrayLength = 3, dataLength = 102424)
public NameplateImageData[] imageData = new NameplateImageData[3];
@TStruct(order = 0, dataType = TStructGlobal.UINT8, arrayLength = 128)
public byte[] manufacturer = new byte[128];
@TStruct(order = 0, dataType = TStructGlobal.UINT8, arrayLength = 128)
public byte[] fileType = new byte[128];
@TStruct(order = 0, dataType = TStructGlobal.UINT8, arrayLength = 128)
public byte[] name = new byte[128];
@TStruct(order = 0, dataType = TStructGlobal.UINT8, arrayLength = 128)
public byte[] version = new byte[128];
@TStruct(order = 1, dataType = TStructGlobal.UINT16, dataLength = 2)
public long backGround;
@Override
public int getSize() {
return 1 * 3 + 156 * 5 + 1 + 102424 * 3 + 128 * 4 + 2;
}
}
package com.xxx.modules.cmp.cmp.dto;
import lombok.Data;
@Data
public class NameplateImageDataDTO {
private long x;
private long y;
private long width;
private long height;
private long settings;
private NameplateImageSettingDTO settingDetails;
private String image;
private long orderIndex;
}
package com.xxx.modules.cmp.cmp.dto;
import lombok.Data;
@Data
public class NameplateImageSettingDTO {
private int dataSourceValue;
private int textAlignment;
private int verticalAlignment;
private int stretch;
private int backgroundColor;
}
package com.xxx.modules.cmp.cmp.model;
import com.xxx.common.structs.StructBasic;
import com.xxx.common.structs.TStruct;
import com.xxx.common.structs.TStructGlobal;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class NameplateImageData extends StructBasic {
@TStruct(order = 0, dataType = TStructGlobal.UINT16, dataLength = 2)
public long x;
@TStruct(order = 1, dataType = TStructGlobal.UINT16, dataLength = 2)
public long y;
@TStruct(order = 2, dataType = TStructGlobal.UINT16, dataLength = 2)
public long width;
@TStruct(order = 3, dataType = TStructGlobal.UINT16, dataLength = 2)
public long height;
@TStruct(order = 4, dataType = TStructGlobal.UINT64, dataLength = 8)
public long settings;
@TStruct(order = 5, dataType = TStructGlobal.UINT8, arrayLength = 1024 * 100)
public byte[] image = new byte[1024 * 100];
@TStruct(order = 6, dataType = TStructGlobal.UINT64, dataLength = 8)
public long orderIndex;
@Override
public int getSize() {
return 2 * 4 + 8 + 1024 * 100 + 8;
}
}
package com.xxx.modules.cmp.cmp.dto;
import lombok.Data;
import java.util.List;
@Data
public class NameplateTemplateDataDTO {
private String manufacturer;
private String fileType;
private String name;
private String version;
private Long backGround;
private Integer resolution;
private Integer revert;
private List<NameplateTextDataDTO> textData;
private List<NameplateImageDataDTO> imageData;
}