Commit 599cf024 by WeiCong

优化性能减少不必要的判断;修复循环域之后的域的值填充

parent d8ac5a73
......@@ -5,63 +5,72 @@ import java.util.List;
public abstract class AbstractMessageArea implements MessageArea {
private List<MessageArea> fields = new ArrayList<MessageArea>();
private String name;
private String anlyReg;
private String desp;
public String getDesp() {
return desp;
}
public void setDesp(String desp) {
this.desp = desp;
}
public void toSwfMessage(StringBuilder sb) {
for(MessageArea field : fields)
field.toSwfMessage(sb);
}
public String getName() {
// TODO Auto-generated method stub
return name;
}
public void setName(String name)
{
this.name = name;
}
public List<MessageArea> getFields()
{
return fields;
}
public void addSubArea(MessageArea sub) {
// TODO Auto-generated method stub
fields.add(sub);
}
public MessageArea clone()
{
return null;
}
public boolean isEnd()
{
return false;
}
private MessageArea pattern;
public void setPattern(MessageArea pattern)
{
this.pattern = pattern;
}
public MessageArea getPattern()
{
return this.pattern;
}
public String getAnlyReg() {
return anlyReg;
}
public void setAnlyReg(String anlyReg) {
this.anlyReg = anlyReg;
}
private List<MessageArea> fields = new ArrayList<MessageArea>();
private String name;
private String anlyReg;
private String desp;
private MessageArea pattern;
public int begNo=Integer.MAX_VALUE;
public int endNo=Integer.MIN_VALUE;
public boolean withIn(int index){
AbstractMessageArea ama=((AbstractMessageArea)this.fields.get(0));
return index>=ama.begNo && index<=ama.endNo;
}
public String getDesp() {
return desp;
}
public void setDesp(String desp) {
this.desp = desp;
}
public void toSwfMessage(StringBuilder sb) {
for (MessageArea field : fields)
field.toSwfMessage(sb);
}
public String getName() {
// TODO Auto-generated method stub
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MessageArea> getFields() {
return fields;
}
public void addSubArea(MessageArea sub) {
// TODO Auto-generated method stub
fields.add(sub);
}
public MessageArea clone() {
return null;
}
public boolean isEnd() {
return false;
}
public MessageArea getPattern() {
return this.pattern;
}
public void setPattern(MessageArea pattern) {
this.pattern = pattern;
}
public String getAnlyReg() {
return anlyReg;
}
public void setAnlyReg(String anlyReg) {
this.anlyReg = anlyReg;
}
}
......@@ -3,22 +3,23 @@ package com.brilliace.swifteditor.tag.message;
import java.util.List;
public class CYC extends AbstractMessageArea {
private final int type = CYC;
private final int type = CYC;
public MessageArea clone() {
CYC cp =new CYC();
cp.setName(this.getName());
List<MessageArea> fields = this.getFields();
for(MessageArea field : fields)
cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg());
return cp;
}
public MessageArea clone() {
CYC cp = new CYC();
cp.setName(this.getName());
List<MessageArea> fields = this.getFields();
for (MessageArea field : fields)
cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg());
cp.begNo = this.begNo;
cp.endNo = this.endNo;
return cp;
}
public int getType() {
return type;
}
public int getType() {
return type;
}
}
......@@ -3,21 +3,23 @@ package com.brilliace.swifteditor.tag.message;
import java.util.List;
public class SEQ extends AbstractMessageArea{
private final int type = SEQ;
public class SEQ extends AbstractMessageArea {
public MessageArea clone() {
SEQ cp =new SEQ();
cp.setName(this.getName());
List<MessageArea> fields = this.getFields();
for(MessageArea field : fields)
cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg());
return cp;
}
private final int type = SEQ;
public int getType() {
return type;
}
public MessageArea clone() {
SEQ cp = new SEQ();
cp.setName(this.getName());
List<MessageArea> fields = this.getFields();
for (MessageArea field : fields)
cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg());
cp.begNo = this.begNo;
cp.endNo = this.endNo;
return cp;
}
public int getType() {
return type;
}
}
......@@ -289,6 +289,9 @@ public class SWFMessage extends AbstractMessageArea {
return true;
}
} else {
if ((item.getType() == MessageArea.CYCLIST || item.getType() == MessageArea.SEQLIST) && !((AbstractMessageArea) item).withIn(ano)) {
continue;
}
if (parent.getType() == MessageArea.SEQ ?
setGenericRepetitive((AbstractMessageArea) item, index, ano, (List) rs.get(cnt), 0)
: setGenericRepetitive((AbstractMessageArea) item, index, ano, rs, cnt)) {
......@@ -296,35 +299,22 @@ public class SWFMessage extends AbstractMessageArea {
}
}
}
} else if (parent.getType() == MessageArea.CYCLIST) {
MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项
do {
setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++);
if (rs.size() <= cnt)
return true;
try {
cp = ((AbstractMessageArea) parent).getFields().get(cnt);
} catch (Exception e) {
cp = ((AbstractMessageArea) parent).getPattern().clone();
parent.addSubArea(cp);
}
}
while (true);
} else if (parent.getType() == MessageArea.SEQLIST) {
MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项
do {
SEQList tmp = (SEQList) parent;
setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt);
if (rs.size() <= ++cnt)
return true;
try {
cp = ((AbstractMessageArea) parent).getFields().get(cnt);
} catch (Exception e) {
cp = ((AbstractMessageArea) parent).getPattern().clone();
parent.addSubArea(cp);
} else if (parent.getType() == MessageArea.CYCLIST || parent.getType() == MessageArea.SEQLIST) {
if (((AbstractMessageArea) parent).withIn(ano)) {
MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项
do {
setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++);
if (rs.size() <= cnt)
return true;
try {
cp = ((AbstractMessageArea) parent).getFields().get(cnt);
} catch (Exception e) {
cp = ((AbstractMessageArea) parent).getPattern().clone();
parent.addSubArea(cp);
}
}
while (true);
}
while (true);
}
return false;
}
......@@ -452,7 +442,10 @@ public class SWFMessage extends AbstractMessageArea {
} else if (((TagLine) item).getTno() > ano) {
break;
}
} else if (item.getType() == MessageArea.CYCLIST) {
} else if (item.getType() == MessageArea.CYCLIST || item.getType() == MessageArea.SEQLIST) {
if (!((AbstractMessageArea) item).withIn(ano)) {
continue;
}
if (parent.getType() == MessageArea.SEQ) {
List<Object> sec = new LinkedList<>();
rs.add(sec);
......
......@@ -37,6 +37,7 @@ public class ParseSwiftTest extends TestCase {
System.out.println("获取3域第二部分(不可循环的Sequence A的28D域)=" + swf.getGenericByNo("3.1"));
System.out.println("获取10域(循环的Sequence B的21域)=" + swf.getGenericByNo("10"));
System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)=" + swf.getGenericByNo("12"));
System.out.println("获取13域(循环的Sequence B的32B域)=" + swf.getGenericByNo("13"));
}
public void testGetGenericByTag() {
......@@ -54,6 +55,7 @@ public class ParseSwiftTest extends TestCase {
assertEquals(swf.getGenericByTag("21"), swf.getGenericByNo("10"));
assertEquals(swf.getGenericByTag("23E"), swf.getGenericByNo("12"));
assertEquals(swf.getGenericByTag("59"), swf.getGenericByNo("19"));
assertEquals(swf.getGenericByTag("32B"), swf.getGenericByNo("13"));
}
public void testGetGenericByNoWithIndexs() {
......@@ -68,6 +70,8 @@ public class ParseSwiftTest extends TestCase {
System.out.println("获取10域(循环的Sequence B的21域)的第一个Sequence部分=" + swf.getGenericByNo("10", 0));
System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)的第二个sequence的第三个成员="
+ swf.getGenericByNo("12", 1, 2));
System.out.println("获取Sequence B下的循环部分的32B域的第一个sequence成员的第一个币种部分="
+ swf.getGenericByTag("32B.0", 0));
}
public void testGetGenericByTagWithIndexs() {
......@@ -138,6 +142,11 @@ public class ParseSwiftTest extends TestCase {
comList.add(one);
swf.setGenericByNo("12", comList);
assertEquals(swf.getGenericByNo("12"), comList);
comList = new LinkedList<>();
comList.add("USD80000,");
comList.add("USD12322,11");
swf.setGenericByNo("13", comList);
assertEquals(swf.getGenericByNo("13"), comList);
}
public void testSetGenericByTag() {
......@@ -196,5 +205,10 @@ public class ParseSwiftTest extends TestCase {
comList.add(one);
swf.setGenericByTag("23E", comList);
assertEquals(swf.getGenericByTag("23E"), comList);
comList = new LinkedList<>();
comList.add("USD80000,");
comList.add("USD12322,11");
swf.setGenericByTag("32B", comList);
assertEquals(swf.getGenericByTag("32B"), comList);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment