Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package cn.gjing.tools.excel.write.resolver;
import cn.gjing.tools.excel.Excel;
import cn.gjing.tools.excel.metadata.ExcelFieldProperty;
import cn.gjing.tools.excel.metadata.ExecType;
import cn.gjing.tools.excel.metadata.aware.ExcelWorkbookAware;
import cn.gjing.tools.excel.metadata.aware.ExcelWriteContextAware;
import cn.gjing.tools.excel.metadata.listener.DefaultExcelStyleListener;
import cn.gjing.tools.excel.metadata.listener.DefaultMultiHeadListener;
import cn.gjing.tools.excel.metadata.listener.ExcelWriteListener;
import cn.gjing.tools.excel.read.resolver.ExcelBindReader;
import cn.gjing.tools.excel.util.BeanUtils;
import cn.gjing.tools.excel.util.ParamUtils;
import cn.gjing.tools.excel.write.BigTitle;
import cn.gjing.tools.excel.write.ExcelWriterContext;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Excel bind mode writer.
* The writer needs a mapping entity to correspond to it
*
* @author Gjing
* @see Excel
**/
public final class ExcelBindWriter extends ExcelBaseWriter {
public ExcelBindWriter(ExcelWriterContext context, Excel excel, HttpServletResponse response, boolean initDefaultStyle) {
super(context, excel.windowSize(), response, initDefaultStyle, ExecType.BIND);
}
@Override
protected void initStyle() {
this.addListener(new DefaultExcelStyleListener());
}
/**
* To write
*
* @param data data
* @return this
*/
public ExcelBindWriter write(List> data) {
return this.write(data, this.defaultSheetName, true, null);
}
/**
* To write
*
* @param data data
* @param sheetName sheet name
* @return this
*/
public ExcelBindWriter write(List> data, String sheetName) {
return this.write(data, sheetName, true, null);
}
/**
* To write
*
* @param data data
* @param needHead Whether need excel head
* @return this
*/
public ExcelBindWriter write(List> data, boolean needHead) {
return this.write(data, this.defaultSheetName, needHead, null);
}
/**
* To write
*
* @param data data
* @param sheetName sheet name
* @param needHead Whether need excel head
* @return this
*/
public ExcelBindWriter write(List> data, String sheetName, boolean needHead) {
return this.write(data, sheetName, needHead, null);
}
/**
* To write
*
* @param data data
* @param boxValues dropdown box values
* @return this
*/
public ExcelBindWriter write(List> data, Map boxValues) {
return this.write(data, this.defaultSheetName, true, boxValues);
}
/**
* To write
*
* @param data data
* @param sheetName sheet name
* @param boxValues dropdown box values
* @return this
*/
public ExcelBindWriter write(List> data, String sheetName, Map boxValues) {
return this.write(data, sheetName, true, boxValues);
}
/**
* To write
*
* @param data data
* @param boxValues dropdown box values
* @param needHead Whether need excel head
* @return this
*/
public ExcelBindWriter write(List> data, boolean needHead, Map boxValues) {
return this.write(data, this.defaultSheetName, needHead, boxValues);
}
/**
* To write
*
* @param data data
* @param sheetName sheet name
* @param boxValues dropdown box values
* @param needHead Whether need excel head
* @return this
*/
public ExcelBindWriter write(List> data, String sheetName, boolean needHead, Map boxValues) {
this.createSheet(sheetName);
if (data == null) {
this.context.setTemplate(true);
this.writerResolver.writeHead(needHead, boxValues);
} else {
this.writerResolver.writeHead(needHead, boxValues)
.write(data);
}
return this;
}
/**
* Write an Excel header that does not trigger a row callback or cell callback
*
* @param bigTitle Big title
* @return this
*/
public ExcelBindWriter writeTitle(BigTitle bigTitle) {
return this.writeTitle(bigTitle, this.defaultSheetName);
}
/**
* Write an Excel header that does not trigger a row listener or cell listener
*
* @param bigTitle Big title
* @param sheetName Sheet name
* @return this
*/
public ExcelBindWriter writeTitle(BigTitle bigTitle, String sheetName) {
if (bigTitle != null) {
this.createSheet(sheetName);
this.writerResolver.writeTitle(bigTitle);
}
return this;
}
/**
* Reset Excel mapped entity, Excel file name and file type are not reset
*
* @param excelClass Excel mapped entity
* @param ignores The exported field is to be ignored
* @return this
*/
public ExcelBindWriter resetExcelClass(Class> excelClass, String... ignores) {
return this.resetExcelClass(excelClass, false, false, ignores);
}
/**
* Reset Excel mapped entity, Excel file name and file type are not reset
*
* @param excelClass Excel mapped entity
* @param ignores The exported field is to be ignored
* @param resetListener Clear all listener caches, but do not clear listeners flagged by @ListenerNative
* @param resetAll Whether to delete all listeners. If false, the listeners annotated by @ListenerNative will be retained
* @return this
*/
public ExcelBindWriter resetExcelClass(Class> excelClass, boolean resetListener, boolean resetAll, String... ignores) {
Excel excel = excelClass.getAnnotation(Excel.class);
ParamUtils.requireNonNull(excel, "Failed to reset Excel class, the @Excel annotation was not found on the " + excelClass);
List properties = new ArrayList<>();
this.context.setExcelFields(BeanUtils.getExcelFields(excelClass, ignores, properties));
if (resetListener) {
this.context.setExcelClass(excelClass, resetAll);
} else {
this.context.setExcelClass(excelClass);
}
this.context.setFieldProperties(properties);
this.context.setBodyHeight(excel.bodyHeight());
this.context.setHeaderHeight(excel.headerHeight());
this.context.setHeaderSeries(properties.get(0).getValue().length);
return this;
}
/**
* Enable validation annotations
*
* @param enable Whether validation annotations are enabled
* @return this
*/
public ExcelBindWriter valid(boolean enable) {
this.context.setNeedValid(enable);
return this;
}
/**
* Enable multi excel head
*
* @param enable Whether enable multi excel head
* @return this
*/
public ExcelBindWriter multiHead(boolean enable) {
this.context.setMultiHead(enable);
if (enable) {
return this.addListener(new DefaultMultiHeadListener());
}
return this;
}
/**
* Enable multi excel head
*
* @return this
*/
public ExcelBindWriter multiHead() {
return this.multiHead(true);
}
/**
* Bind the exported Excel file to the currently set unique key,
*
* @param enable Whether enable bind, default true
* @return this
* @deprecated Please use {@link #bind(String)}
*/
@Deprecated
public ExcelBindWriter bind(boolean enable) {
this.context.setBind(enable);
return this;
}
/**
* Bind the exported Excel file to the currently set unique key,
* Can be used to {@link ExcelBindReader#check} for a match with an entity class when a file is imported.
*
* @param key Unique key ,Each exported file recommends that the key be set to be unique
* @return this
*/
public ExcelBindWriter bind(String key) {
if (!StringUtils.isEmpty(key)) {
this.context.setBind(true);
this.context.setUniqueKey(key);
}
return this;
}
/**
* Unbind the unique key of the file
*
* @return this
*/
public ExcelBindWriter unbind() {
this.context.setBind(false);
return this;
}
/**
* Whether to set the exported file as a template file when the data is null
*
* @param isTemp True means to set the exported file to a template file
* @return this
*/
public ExcelBindWriter temp(boolean isTemp) {
super.nullIsTemp = isTemp;
return this;
}
/**
* Add write listener
*
* @param listener Write listener
* @return this
*/
public ExcelBindWriter addListener(ExcelWriteListener listener) {
this.context.addListener(listener);
if (listener instanceof ExcelWriteContextAware) {
((ExcelWriteContextAware) listener).setContext(this.context);
}
if (listener instanceof ExcelWorkbookAware) {
((ExcelWorkbookAware) listener).setWorkbook(this.context.getWorkbook());
}
return this;
}
/**
* Add write listeners
*
* @param listeners Write listener list
* @return this
*/
public ExcelBindWriter addListener(List extends ExcelWriteListener> listeners) {
if (listeners != null) {
listeners.forEach(this::addListener);
}
return this;
}
}