Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
swifteditor_java
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fukai
swifteditor_java
Commits
04562783
Commit
04562783
authored
Nov 26, 2019
by
WeiCong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加通用API为具体域填充值
parent
f9e08bdc
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
129 additions
and
4 deletions
+129
-4
SWFMessage.java
...ava/com/brilliace/swifteditor/tag/message/SWFMessage.java
+98
-4
ParseSwiftTest.java
src/test/java/com/brilliace/swifteditor/ParseSwiftTest.java
+31
-0
No files found.
src/main/java/com/brilliace/swifteditor/tag/message/SWFMessage.java
View file @
04562783
...
...
@@ -13,6 +13,8 @@ import java.io.Writer;
import
java.util.*
;
import
java.util.regex.Pattern
;
import
static
java
.
util
.
Arrays
.
asList
;
public
class
SWFMessage
extends
AbstractMessageArea
{
final
Pattern
CHECKPATH
=
Pattern
.
compile
(
"^\\d+(\\.\\d)?$"
);
Map
<
String
,
Object
>
genericCache
=
new
HashMap
<>();
...
...
@@ -276,9 +278,9 @@ public class SWFMessage extends AbstractMessageArea {
}
/**
* 根据指定域名(.域块号),填充具体域或者域块的值
* 根据指定域名(.域块号)
表达式
,填充具体域或者域块的值
*
* @param tagExp 域名(.域块号)
* @param tagExp 域名(.域块号)
表达式
* @param val 待填充得数据
* 待填充的数据类型有三种:<br/>
* 1.填充唯一域数据类型是String<br/>
...
...
@@ -342,6 +344,98 @@ public class SWFMessage extends AbstractMessageArea {
return
false
;
}
/**
* 根据指定域名(.域块号)表达式和索引,进行值得填充
*
* @param tagExp 域名(.域块号)表达式
* @param val 待填充的值
* @param indexes 索引
*/
public
void
setGenericByTag
(
String
tagExp
,
String
val
,
Integer
...
indexes
)
{
Assert
.
notNull
(
tagExp
,
"域名(.域块号)表达式不能为空"
);
Assert
.
notNull
(
val
,
"待填充的值不能为空"
);
Object
item
=
findMessageAreaByTag
(
tagExp
,
indexes
);
if
(
item
instanceof
TagLine
)
{
TagLine
tmp
=
(
TagLine
)
item
;
tmp
.
setValue
(
val
);
}
else
{
TagCell
tmp
=
(
TagCell
)
item
;
tmp
.
setValue
(
val
);
}
}
/**
* 根据指定域名(.域块号)和索引,获取指定的域或域块对象
*
* @param tagExp 域名(.域块号)表达式
* @param indexes 索引
* @return 域或域块对象
*/
public
Object
findMessageAreaByTag
(
String
tagExp
,
Integer
...
indexes
)
{
String
path
=
checkTag
(
tagExp
);
int
index
=
tagExp
.
indexOf
(
"."
);
return
findMessageArea
(
path
,
index
==
-
1
?
tagExp
:
tagExp
.
substring
(
0
,
index
),
indexes
);
}
private
Object
findMessageArea
(
String
path
,
String
tagName
,
Integer
...
indexes
)
{
checkPath
(
path
);
int
index
=
path
.
indexOf
(
"."
);
TagLine
tagLine
=
this
.
flatModel
.
get
(
index
!=
-
1
?
Integer
.
valueOf
(
path
.
substring
(
0
,
index
))
:
Integer
.
valueOf
(
path
));
Assert
.
notNull
(
tagLine
,
"不存在["
+
tagName
+
"]对应的域"
);
Object
rs
=
null
;
if
(
tagLine
.
parent
!=
null
)
{
rs
=
findTagLine
((
AbstractMessageArea
)
tagLine
.
parent
,
tagLine
.
getTno
(),
asList
(
indexes
),
tagName
,
0
);
}
if
(
index
!=
-
1
)
{
int
part
=
Integer
.
parseInt
(
path
.
substring
(
index
+
1
))
+
1
;
tagLine
=
(
TagLine
)
rs
;
for
(
TagCell
cell
:
tagLine
.
cellList
)
{
if
(
cell
.
cnt
==
part
)
{
rs
=
cell
;
break
;
}
}
}
return
rs
;
}
private
TagLine
findTagLine
(
AbstractMessageArea
parent
,
int
ano
,
List
<
Integer
>
cntLst
,
String
tagName
,
int
num
)
{
if
(
parent
.
getType
()
==
MessageArea
.
CYC
||
parent
.
getType
()
==
MessageArea
.
SEQ
)
{
for
(
int
i
=
0
;
i
<
parent
.
getFields
().
size
();
i
++)
{
MessageArea
item
=
parent
.
getFields
().
get
(
i
);
if
(
item
.
getType
()
==
MessageArea
.
TAG
)
{
if
(((
TagLine
)
item
).
getTno
()
==
ano
)
{
checkTagLine
((
TagLine
)
item
,
tagName
);
return
(
TagLine
)
item
;
}
}
else
{
if
((
item
.
getType
()
==
MessageArea
.
CYCLIST
||
item
.
getType
()
==
MessageArea
.
SEQLIST
)
&&
!((
AbstractMessageArea
)
item
).
withIn
(
ano
))
{
continue
;
}
return
findTagLine
((
AbstractMessageArea
)
item
,
ano
,
cntLst
,
tagName
,
num
);
}
}
}
else
if
(
parent
.
getType
()
==
MessageArea
.
CYCLIST
||
parent
.
getType
()
==
MessageArea
.
SEQLIST
)
{
if
(((
AbstractMessageArea
)
parent
).
withIn
(
ano
))
{
Integer
cnt
=
cntLst
.
get
(
num
++);
if
(
parent
.
getType
()
==
MessageArea
.
SEQLIST
&&
((
SEQList
)
parent
).
getCyc
()
==
0
){
Assert
.
state
(
cnt
==
0
,
"不能从非循环型Sequence获取索引大于0的对象"
);
}
MessageArea
cp
=
null
;
for
(
int
i
=
0
;
i
<=
cnt
;
i
++)
{
try
{
cp
=
((
AbstractMessageArea
)
parent
).
getFields
().
get
(
i
);
}
catch
(
Exception
e
)
{
cp
=
((
AbstractMessageArea
)
parent
).
getPattern
().
clone
();
parent
.
addSubArea
(
cp
);
}
}
return
findTagLine
((
AbstractMessageArea
)
cp
,
ano
,
cntLst
,
tagName
,
num
);
}
}
return
null
;
}
private
void
checkTagLine
(
TagLine
tag
,
String
tagName
)
{
if
(
tag
.
getName
().
endsWith
(
"a"
))
{
Assert
.
notNull
(
tagName
,
"多选报文域["
+
tag
.
getName
()
+
"]需要提供指定域选项"
);
...
...
@@ -554,7 +648,7 @@ public class SWFMessage extends AbstractMessageArea {
sb
.
write
(
getLogicalTerminalAddress
(
rcvbic
,
"2"
));
sb
.
write
(
"N"
);
sb
.
write
(
"}"
);
if
(
mtType
.
endsWith
(
"COV"
))
{
if
(
mtType
.
endsWith
(
"COV"
))
{
sb
.
write
(
"{3:{119:COV}}"
);
}
sb
.
write
(
"{4:"
);
...
...
@@ -596,7 +690,7 @@ public class SWFMessage extends AbstractMessageArea {
return
bic
;
}
throw
new
IllegalStateException
(
"第"
+
field
+
"部分的bic码["
+
bic
+
"]不符合规范,需满足8、11或12位长度"
);
throw
new
IllegalStateException
(
"第"
+
field
+
"部分的bic码["
+
bic
+
"]不符合规范,需满足8、11或12位长度"
);
}
private
void
printMsgBody
(
AbstractMessageArea
ma
,
SwtBufferedWriter
sb
)
throws
IOException
{
...
...
src/test/java/com/brilliace/swifteditor/ParseSwiftTest.java
View file @
04562783
...
...
@@ -316,4 +316,35 @@ public class ParseSwiftTest extends TestCase {
System
.
out
.
println
(
swf
.
getMsg
());
System
.
out
.
println
(
"结束生成101报文"
);
}
public
void
testSetGenericByTagAdv
()
{
SWFMessage
swf
=
MessageFormat
.
getSWFMessage
(
"101"
);
swf
.
setGenericByTag
(
"20"
,
"STMMDL129058636E"
);
swf
.
setGenericByTag
(
"28D.0"
,
"1"
);
swf
.
setGenericByTag
(
"28D.1"
,
"10"
);
swf
.
setGenericByTag
(
"30"
,
"191111"
);
swf
.
setGenericByTag
(
"21"
,
"101651ATT000005W"
,
0
);
swf
.
setGenericByTag
(
"21"
,
"321651ATT000005Z"
,
1
);
swf
.
setGenericByTag
(
"23E"
,
"CHQB/HELLO"
,
0
,
0
);
swf
.
setGenericByTag
(
"23E"
,
"CHQB/WORLD"
,
0
,
1
);
swf
.
setGenericByTag
(
"23E"
,
"CHQB/MY"
,
1
,
0
);
swf
.
setGenericByTag
(
"23E"
,
"CHQB/NAME"
,
1
,
1
);
swf
.
setGenericByTag
(
"23E"
,
"CHQB/IS"
,
1
,
2
);
swf
.
setGenericByTag
(
"32B.0"
,
"USD"
,
0
);
swf
.
setGenericByTag
(
"32B.0"
,
"USD"
,
1
);
swf
.
setGenericByTag
(
"32B.1"
,
"80000"
,
0
);
swf
.
setGenericByTag
(
"32B.1"
,
"12322.11"
,
1
);
swf
.
setGenericByTag
(
"59.0"
,
"/22222222222"
,
0
);
swf
.
setGenericByTag
(
"59.0"
,
"/11111111111"
,
1
);
swf
.
setGenericByTag
(
"59.1"
,
"STRIX LIMITED\r\nFORREST HOUSE RONALDSWAY BALLASALLA\r\nISLE OF MAN UK"
,
0
);
swf
.
setGenericByTag
(
"59.1"
,
"HOLLW LSHIUHIWA\r\nWZDESSS HOUSE WAWAZDR\r\nDEDFFF OF EE ZK"
,
1
);
swf
.
setGenericByTag
(
"71A"
,
"BEN"
,
0
);
swf
.
setGenericByTag
(
"71A"
,
"OUR"
,
1
);
//设置收发报行
swf
.
setSndbic
(
"NYCBCNSH"
);
swf
.
setRcvbic
(
"ICBKGB2LAAAA"
);
System
.
out
.
println
(
"开始生成101报文"
);
System
.
out
.
println
(
swf
.
getMsg
());
System
.
out
.
println
(
"结束生成101报文"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment