forked from p81075629/datagear
完善导入、导出功能:默认格式、输入框提示等
This commit is contained in:
parent
0f61a09d0c
commit
3e74ffa0ac
|
@ -28,9 +28,13 @@ import org.datagear.util.expression.ExpressionResolver;
|
|||
*/
|
||||
public class DataFormatContext
|
||||
{
|
||||
public static final String EXP_START_IDENTIFIER = ExpressionResolver.DEFAULT_START_IDENTIFIER_DOLLAR;
|
||||
|
||||
public static final String EXP_END_IDENTIFIER = ExpressionResolver.DEFAULT_END_IDENTIFIER;
|
||||
|
||||
private DataFormat dataFormat;
|
||||
|
||||
private ExpressionResolver expressionResolver = new ExpressionResolver();
|
||||
private ExpressionResolver expressionResolver = new DataFormatExpressionResolver();
|
||||
|
||||
private Expression _dateExpression;
|
||||
private Expression _timeExpression;
|
||||
|
@ -594,4 +598,25 @@ public class DataFormatContext
|
|||
|
||||
return Base64.decodeBase64(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将指定格式字符串包裹为表达式。
|
||||
*
|
||||
* @param pattern
|
||||
* @return
|
||||
*/
|
||||
public static String wrapToExpression(String pattern)
|
||||
{
|
||||
return EXP_START_IDENTIFIER + pattern + EXP_END_IDENTIFIER;
|
||||
}
|
||||
|
||||
public static class DataFormatExpressionResolver extends ExpressionResolver
|
||||
{
|
||||
public DataFormatExpressionResolver()
|
||||
{
|
||||
super();
|
||||
super.setStartIdentifier(EXP_START_IDENTIFIER);
|
||||
super.setEndIdentifier(EXP_END_IDENTIFIER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -181,38 +181,41 @@ public abstract class AbstractDevotedDatabaseInfoResolver implements DevotedData
|
|||
|
||||
for (int i = 0; i < tables.length; i++)
|
||||
{
|
||||
String[] importedTables = null;
|
||||
String[] importedTables = EMPTY_STRING_ARRAY;
|
||||
|
||||
// 处理重复表
|
||||
for (int k = 0; i < i; k++)
|
||||
if (tables[i] != null && !tables[i].isEmpty())
|
||||
{
|
||||
if (tables[k].equals(tables[i]))
|
||||
// 处理重复表
|
||||
for (int k = 0; i < i; k++)
|
||||
{
|
||||
importedTables = importedTabless[k];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (importedTables == null)
|
||||
{
|
||||
ImportedKeyInfo[] importedKeyInfos = getImportedKeyInfos(cn, metaData, schema, tables[i]);
|
||||
|
||||
if (importedKeyInfos == null || importedKeyInfos.length == 0)
|
||||
importedTables = EMPTY_STRING_ARRAY;
|
||||
else
|
||||
{
|
||||
List<String> importedTableList = new ArrayList<String>(2);
|
||||
|
||||
for (int j = 0; j < importedKeyInfos.length; j++)
|
||||
if (tables[k].equals(tables[i]))
|
||||
{
|
||||
String importedTable = importedKeyInfos[j].getPkTableName();
|
||||
|
||||
if (!importedTableList.contains(importedTable))
|
||||
importedTableList.add(importedTable);
|
||||
importedTables = importedTabless[k];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
importedTables = new String[importedTableList.size()];
|
||||
importedTableList.toArray(importedTables);
|
||||
if (importedTables == null)
|
||||
{
|
||||
ImportedKeyInfo[] importedKeyInfos = getImportedKeyInfos(cn, metaData, schema, tables[i]);
|
||||
|
||||
if (importedKeyInfos == null || importedKeyInfos.length == 0)
|
||||
importedTables = EMPTY_STRING_ARRAY;
|
||||
else
|
||||
{
|
||||
List<String> importedTableList = new ArrayList<String>(2);
|
||||
|
||||
for (int j = 0; j < importedKeyInfos.length; j++)
|
||||
{
|
||||
String importedTable = importedKeyInfos[j].getPkTableName();
|
||||
|
||||
if (!importedTableList.contains(importedTable))
|
||||
importedTableList.add(importedTable);
|
||||
}
|
||||
|
||||
importedTables = new String[importedTableList.size()];
|
||||
importedTableList.toArray(importedTables);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ public interface DatabaseInfoResolver
|
|||
/**
|
||||
* 获取指定表的导入表(外键依赖表)。
|
||||
* <p>
|
||||
* 如果某个索引的表没有导入表,返回数组相应位置将是空数组。
|
||||
* 如果某个索引的表不存在或者没有导入表,返回数组相应位置将是空数组。
|
||||
* </p>
|
||||
*
|
||||
* @param cn
|
||||
|
|
|
@ -42,6 +42,7 @@ import org.datagear.dataexchange.ConnectionFactory;
|
|||
import org.datagear.dataexchange.DataExchange;
|
||||
import org.datagear.dataexchange.DataExchangeService;
|
||||
import org.datagear.dataexchange.DataFormat;
|
||||
import org.datagear.dataexchange.DataFormatContext;
|
||||
import org.datagear.dataexchange.DataImportOption;
|
||||
import org.datagear.dataexchange.DataSourceConnectionFactory;
|
||||
import org.datagear.dataexchange.FileOutputStreamResourceFactory;
|
||||
|
@ -296,7 +297,7 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
}
|
||||
}.execute();
|
||||
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers, "");
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers);
|
||||
|
||||
Set<SubDataExchange> subDataExchangeSet = new HashSet<SubDataExchange>(subDataExchangeIds.length);
|
||||
Collections.addAll(subDataExchangeSet, subDataExchanges);
|
||||
|
@ -351,8 +352,7 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
@ResponseBody
|
||||
public ResponseEntity<OperationMessage> imptSqlDoImport(HttpServletRequest request, HttpServletResponse response,
|
||||
@PathVariable("schemaId") String schemaId, @RequestParam("dataExchangeId") String dataExchangeId,
|
||||
SqlFileBatchDataImportForm dataImportForm,
|
||||
@RequestParam(value = "dependentNumberNone", required = false) String dependentNumberNone) throws Exception
|
||||
SqlFileBatchDataImportForm dataImportForm) throws Exception
|
||||
{
|
||||
if (dataImportForm == null || isEmpty(dataImportForm.getSubDataExchangeIds())
|
||||
|| isEmpty(dataImportForm.getFileNames()) || isEmpty(dataImportForm.getFileEncoding())
|
||||
|
@ -403,7 +403,7 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
subDataExchanges[i] = subDataExchange;
|
||||
}
|
||||
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers, dependentNumberNone);
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers);
|
||||
|
||||
Set<SubDataExchange> subDataExchangeSet = new HashSet<SubDataExchange>(subDataExchangeIds.length);
|
||||
Collections.addAll(subDataExchangeSet, subDataExchanges);
|
||||
|
@ -521,7 +521,7 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
}
|
||||
}.execute();
|
||||
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers, "");
|
||||
resolveSubDataExchangeDependencies(subDataExchanges, numbers, dependentNumbers);
|
||||
|
||||
Set<SubDataExchange> subDataExchangeSet = new HashSet<SubDataExchange>(subDataExchangeIds.length);
|
||||
Collections.addAll(subDataExchangeSet, subDataExchanges);
|
||||
|
@ -846,6 +846,11 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
}.execute();
|
||||
|
||||
DataFormat defaultDataFormat = new DataFormat();
|
||||
defaultDataFormat.setDateFormat("'" + DataFormatContext.wrapToExpression(DataFormat.DEFAULT_DATE_FORMAT) + "'");
|
||||
defaultDataFormat.setTimeFormat("'" + DataFormatContext.wrapToExpression(DataFormat.DEFAULT_TIME_FORMAT) + "'");
|
||||
defaultDataFormat.setTimestampFormat(
|
||||
"'" + DataFormatContext.wrapToExpression(DataFormat.DEFAULT_TIMESTAMP_FORMAT) + "'");
|
||||
defaultDataFormat.setBinaryFormat("0x" + DataFormatContext.wrapToExpression(DataFormat.BINARY_FORMAT_HEX));
|
||||
|
||||
String dataExchangeId = IDUtil.uuid();
|
||||
|
||||
|
@ -1034,10 +1039,9 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
* @param subDataExchanges
|
||||
* @param numbers
|
||||
* @param dependentNumbers
|
||||
* @param dependentNumberNone
|
||||
*/
|
||||
protected void resolveSubDataExchangeDependencies(SubDataExchange[] subDataExchanges, String[] numbers,
|
||||
String[] dependentNumbers, String dependentNumberNone)
|
||||
String[] dependentNumbers)
|
||||
{
|
||||
for (int i = 0; i < subDataExchanges.length; i++)
|
||||
{
|
||||
|
@ -1049,7 +1053,7 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
|
||||
dependentNumber = dependentNumber.trim();
|
||||
|
||||
if (isEmpty(dependentNumber) || dependentNumber.equals(dependentNumberNone))
|
||||
if (isEmpty(dependentNumber))
|
||||
continue;
|
||||
|
||||
String[] myDependentNumbers = dependentNumber.split(",");
|
||||
|
@ -1112,6 +1116,10 @@ public class DataExchangeController extends AbstractSchemaConnController
|
|||
}
|
||||
else
|
||||
{
|
||||
int extIndex = rawFileName.lastIndexOf('.');
|
||||
if (extIndex >= 0 && extIndex < rawFileName.length() - 1)
|
||||
serverFileName += "." + rawFileName.substring(extIndex + 1);
|
||||
|
||||
File importFile = FileUtil.getFile(directory, serverFileName);
|
||||
|
||||
InputStream in = null;
|
||||
|
|
|
@ -483,6 +483,7 @@ dataImport.number=\u7F16\u53F7
|
|||
dataImport.dependentNumber=\u524D\u7F6E\u7F16\u53F7
|
||||
dataImport.dependentNumber.none=\u65E0
|
||||
dataImport.dependentNumber.auto=\u81EA\u52A8
|
||||
dataImport.excel.importTableInput.placeholder=\u5DE5\u4F5C\u8868\u540D
|
||||
|
||||
dataExport.dataExport=\u5BFC\u51FA\u6570\u636E
|
||||
dataExport.selectDataType=\u8BF7\u9009\u62E9\u5BFC\u51FA\u6570\u636E\u7C7B\u578B
|
||||
|
|
|
@ -109,6 +109,9 @@ Schema schema 数据库,不允许为null
|
|||
<script type="text/javascript">
|
||||
(function(po)
|
||||
{
|
||||
po.element(".binaryFormatSetButtonHex").attr("value", "0x"+"$"+"{Hex}");
|
||||
po.element(".binaryFormatSetButtonBase64").attr("value", "'"+"$"+"{Base64}'");
|
||||
|
||||
po.postBuildSubDataExchange = function(subDataExchange, tableName)
|
||||
{
|
||||
subDataExchange.tableName = tableName;
|
||||
|
|
|
@ -130,6 +130,8 @@ Schema schema 数据库,不允许为null
|
|||
<script type="text/javascript">
|
||||
(function(po)
|
||||
{
|
||||
po.dependentNumberInputPlaceholder = "<@spring.message code='dataImport.dependentNumber.none' />";
|
||||
|
||||
po.postBuildSubDataExchange = function(subDataExchange)
|
||||
{
|
||||
subDataExchange.dependentNumber = "<@spring.message code='dataImport.dependentNumber.auto' />";
|
||||
|
|
|
@ -132,6 +132,8 @@ Schema schema 数据库,不允许为null
|
|||
<script type="text/javascript">
|
||||
(function(po)
|
||||
{
|
||||
po.dependentNumberInputPlaceholder = "<@spring.message code='dataImport.dependentNumber.none' />";
|
||||
|
||||
po.postBuildSubDataExchange = function(subDataExchange)
|
||||
{
|
||||
subDataExchange.dependentNumber = "<@spring.message code='dataImport.dependentNumber.auto' />";
|
||||
|
@ -152,7 +154,7 @@ Schema schema 数据库,不允许为null
|
|||
data : "tableName",
|
||||
render : function(data, type, row, meta)
|
||||
{
|
||||
return "<input type='text' name='tableNames' value='"+$.escapeHtml(data)+"' class='table-name-input ui-widget ui-widget-content' style='width:90%' />";
|
||||
return "<input type='text' name='tableNames' value='"+$.escapeHtml(data)+"' placeholder='<@spring.message code='dataImport.excel.importTableInput.placeholder' />' class='table-name-input ui-widget ui-widget-content' style='width:90%' />";
|
||||
},
|
||||
defaultContent: "",
|
||||
width : "20%"
|
||||
|
|
|
@ -25,7 +25,6 @@ Schema schema 数据库,不允许为null
|
|||
<div class="content">
|
||||
<form id="${pageId}-form" action="${contextPath}/dataexchange/${schema.id}/import/sql/doImport" method="POST">
|
||||
<input type="hidden" name="dataExchangeId" value="${dataExchangeId}" />
|
||||
<input type="hidden" name="dependentNumberNone" value="<@spring.message code='dataImport.dependentNumber.none' />" />
|
||||
<div class="form-content form-content-wizard">
|
||||
<h3><@spring.message code='dataImport.setDataFormat' /></h3>
|
||||
<div>
|
||||
|
@ -110,6 +109,8 @@ Schema schema 数据库,不允许为null
|
|||
<script type="text/javascript">
|
||||
(function(po)
|
||||
{
|
||||
po.dependentNumberInputPlaceholder = "<@spring.message code='dataImport.dependentNumber.none' />";
|
||||
|
||||
po.cometdInitIfNot();
|
||||
po.initDataImportSteps();
|
||||
po.initDataExchangeUIs();
|
||||
|
|
|
@ -4,35 +4,35 @@ DataFormat defaultDataFormat 默认数据格式,不允许为null
|
|||
<div class="form-item">
|
||||
<div class="form-item-label"><@spring.message code='dataExchange.dataFormat.dateFormat' /></div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataFormat.dateFormat" value="${defaultDataFormat.dateFormat}" class="ui-widget ui-widget-content" />
|
||||
<input type="text" name="dataFormat.dateFormat" value="${(defaultDataFormat.dateFormat)!''?html}" class="ui-widget ui-widget-content" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label"><@spring.message code='dataExchange.dataFormat.timeFormat' /></div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataFormat.timeFormat" value="${defaultDataFormat.timeFormat}" class="ui-widget ui-widget-content" />
|
||||
<input type="text" name="dataFormat.timeFormat" value="${(defaultDataFormat.timeFormat)!''?html}" class="ui-widget ui-widget-content" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label"><@spring.message code='dataExchange.dataFormat.timestampFormat' /></div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataFormat.timestampFormat" value="${defaultDataFormat.timestampFormat}" class="ui-widget ui-widget-content" />
|
||||
<input type="text" name="dataFormat.timestampFormat" value="${(defaultDataFormat.timestampFormat)!''?html}" class="ui-widget ui-widget-content" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item">
|
||||
<div class="form-item-label"><@spring.message code='dataExchange.dataFormat.numberFormat' /></div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataFormat.numberFormat" value="${defaultDataFormat.numberFormat}" class="ui-widget ui-widget-content" />
|
||||
<input type="text" name="dataFormat.numberFormat" value="${(defaultDataFormat.numberFormat)!''?html}" class="ui-widget ui-widget-content" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-item form-item-binaryFormat">
|
||||
<div class="form-item-label"><@spring.message code='dataExchange.dataFormat.binaryFormat' /></div>
|
||||
<div class="form-item-value">
|
||||
<input type="text" name="dataFormat.binaryFormat" value="${defaultDataFormat.binaryFormat}" class="input-binaryFormat ui-widget ui-widget-content" />
|
||||
<input type="text" name="dataFormat.binaryFormat" value="${(defaultDataFormat.binaryFormat)!''?html}" class="input-binaryFormat ui-widget ui-widget-content" />
|
||||
<div id="${pageId}-binaryFormat">
|
||||
<button type="button" class="binaryFormatSetButton" value="Hex"><@spring.message code='dataExchange.dataFormat.binaryFormat.HEX' /></button>
|
||||
<button type="button" class="binaryFormatSetButton" value="Base4"><@spring.message code='dataExchange.dataFormat.binaryFormat.Base64' /></button>
|
||||
<button type="button" class="binaryFormatSetButton" value="NULL"><@spring.message code='dataExchange.dataFormat.binaryFormat.NULL' /></button>
|
||||
<button type="button" class="binaryFormatSetButton binaryFormatSetButtonHex" value="Hex"><@spring.message code='dataExchange.dataFormat.binaryFormat.HEX' /></button>
|
||||
<button type="button" class="binaryFormatSetButton binaryFormatSetButtonBase64" value="Base64"><@spring.message code='dataExchange.dataFormat.binaryFormat.Base64' /></button>
|
||||
<button type="button" class="binaryFormatSetButton binaryFormatSetButtonNULL" value="NULL"><@spring.message code='dataExchange.dataFormat.binaryFormat.NULL' /></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -434,7 +434,6 @@ po.subDataExchangeStatusColumnIndex 子数据交换表格中状态列索引
|
|||
{
|
||||
po.element("input[name='dataFormat.binaryFormat']").val($(this).attr("value"));
|
||||
});
|
||||
$(po.element(".binaryFormatSetButton")[0]).click();
|
||||
};
|
||||
|
||||
po.initDataExchangeActions = function()
|
||||
|
|
|
@ -12,6 +12,7 @@ dataExchange_js.ftl
|
|||
(function(po)
|
||||
{
|
||||
po.dataExchangeChannelId = "${dataExchangeChannelId}";
|
||||
po.dependentNumberInputPlaceholder = "";
|
||||
|
||||
po.addSubDataExchangesForFileInfos = function(fileInfos)
|
||||
{
|
||||
|
@ -22,7 +23,7 @@ dataExchange_js.ftl
|
|||
{
|
||||
fileInfos[i].subDataExchangeId = po.nextSubDataExchangeId();
|
||||
fileInfos[i].number = po.currentSubDataExchangeId();
|
||||
fileInfos[i].dependentNumber = "<@spring.message code='dataImport.dependentNumber.none' />";
|
||||
fileInfos[i].dependentNumber = "";
|
||||
|
||||
po.postBuildSubDataExchange(fileInfos[i]);
|
||||
}
|
||||
|
@ -81,7 +82,9 @@ dataExchange_js.ftl
|
|||
data : "dependentNumber",
|
||||
render : function(data, type, row, meta)
|
||||
{
|
||||
return "<input type='text' name='dependentNumbers' value='"+$.escapeHtml(data)+"' class='table-dependent-number-input ui-widget ui-widget-content' style='width:90%' />";
|
||||
return "<input type='text' name='dependentNumbers' value='"+$.escapeHtml(data)+"' "
|
||||
+ (po.dependentNumberInputPlaceholder ? "placeholder='"+$.escapeHtml(po.dependentNumberInputPlaceholder)+"'" : "")
|
||||
+ " class='table-dependent-number-input ui-widget ui-widget-content' style='width:90%' />";
|
||||
},
|
||||
defaultContent: "",
|
||||
width : "10%"
|
||||
|
|
Loading…
Reference in New Issue