Commit 599cf024 by WeiCong

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

parent d8ac5a73
...@@ -9,6 +9,15 @@ public abstract class AbstractMessageArea implements MessageArea { ...@@ -9,6 +9,15 @@ public abstract class AbstractMessageArea implements MessageArea {
private String name; private String name;
private String anlyReg; private String anlyReg;
private String desp; 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() { public String getDesp() {
return desp; return desp;
} }
...@@ -18,7 +27,7 @@ public abstract class AbstractMessageArea implements MessageArea { ...@@ -18,7 +27,7 @@ public abstract class AbstractMessageArea implements MessageArea {
} }
public void toSwfMessage(StringBuilder sb) { public void toSwfMessage(StringBuilder sb) {
for(MessageArea field : fields) for (MessageArea field : fields)
field.toSwfMessage(sb); field.toSwfMessage(sb);
} }
...@@ -26,36 +35,36 @@ public abstract class AbstractMessageArea implements MessageArea { ...@@ -26,36 +35,36 @@ public abstract class AbstractMessageArea implements MessageArea {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return name; return name;
} }
public void setName(String name)
{ public void setName(String name) {
this.name = name; this.name = name;
} }
public List<MessageArea> getFields()
{ public List<MessageArea> getFields() {
return fields; return fields;
} }
public void addSubArea(MessageArea sub) { public void addSubArea(MessageArea sub) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
fields.add(sub); fields.add(sub);
} }
public MessageArea clone()
{ public MessageArea clone() {
return null; return null;
} }
public boolean isEnd()
{ public boolean isEnd() {
return false; return false;
} }
private MessageArea pattern;
public void setPattern(MessageArea pattern) public MessageArea getPattern() {
{
this.pattern = pattern;
}
public MessageArea getPattern()
{
return this.pattern; return this.pattern;
} }
public void setPattern(MessageArea pattern) {
this.pattern = pattern;
}
public String getAnlyReg() { public String getAnlyReg() {
return anlyReg; return anlyReg;
} }
......
...@@ -7,17 +7,18 @@ public class CYC extends AbstractMessageArea { ...@@ -7,17 +7,18 @@ public class CYC extends AbstractMessageArea {
public MessageArea clone() { public MessageArea clone() {
CYC cp =new CYC(); CYC cp = new CYC();
cp.setName(this.getName()); cp.setName(this.getName());
List<MessageArea> fields = this.getFields(); List<MessageArea> fields = this.getFields();
for(MessageArea field : fields) for (MessageArea field : fields)
cp.addSubArea(field.clone()); cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg()); cp.setAnlyReg(this.getAnlyReg());
cp.begNo = this.begNo;
cp.endNo = this.endNo;
return cp; return cp;
} }
public int getType() { public int getType() {
return type; return type;
} }
......
...@@ -3,17 +3,19 @@ package com.brilliace.swifteditor.tag.message; ...@@ -3,17 +3,19 @@ package com.brilliace.swifteditor.tag.message;
import java.util.List; import java.util.List;
public class SEQ extends AbstractMessageArea{ public class SEQ extends AbstractMessageArea {
private final int type = SEQ; private final int type = SEQ;
public MessageArea clone() { public MessageArea clone() {
SEQ cp =new SEQ(); SEQ cp = new SEQ();
cp.setName(this.getName()); cp.setName(this.getName());
List<MessageArea> fields = this.getFields(); List<MessageArea> fields = this.getFields();
for(MessageArea field : fields) for (MessageArea field : fields)
cp.addSubArea(field.clone()); cp.addSubArea(field.clone());
cp.setAnlyReg(this.getAnlyReg()); cp.setAnlyReg(this.getAnlyReg());
cp.begNo = this.begNo;
cp.endNo = this.endNo;
return cp; return cp;
} }
......
...@@ -289,6 +289,9 @@ public class SWFMessage extends AbstractMessageArea { ...@@ -289,6 +289,9 @@ public class SWFMessage extends AbstractMessageArea {
return true; return true;
} }
} else { } else {
if ((item.getType() == MessageArea.CYCLIST || item.getType() == MessageArea.SEQLIST) && !((AbstractMessageArea) item).withIn(ano)) {
continue;
}
if (parent.getType() == MessageArea.SEQ ? if (parent.getType() == MessageArea.SEQ ?
setGenericRepetitive((AbstractMessageArea) item, index, ano, (List) rs.get(cnt), 0) setGenericRepetitive((AbstractMessageArea) item, index, ano, (List) rs.get(cnt), 0)
: setGenericRepetitive((AbstractMessageArea) item, index, ano, rs, cnt)) { : setGenericRepetitive((AbstractMessageArea) item, index, ano, rs, cnt)) {
...@@ -296,7 +299,8 @@ public class SWFMessage extends AbstractMessageArea { ...@@ -296,7 +299,8 @@ public class SWFMessage extends AbstractMessageArea {
} }
} }
} }
} else if (parent.getType() == MessageArea.CYCLIST) { } else if (parent.getType() == MessageArea.CYCLIST || parent.getType() == MessageArea.SEQLIST) {
if (((AbstractMessageArea) parent).withIn(ano)) {
MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项 MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项
do { do {
setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++); setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++);
...@@ -310,22 +314,8 @@ public class SWFMessage extends AbstractMessageArea { ...@@ -310,22 +314,8 @@ public class SWFMessage extends AbstractMessageArea {
} }
} }
while (true); 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);
} }
} }
while (true);
}
return false; return false;
} }
...@@ -452,7 +442,10 @@ public class SWFMessage extends AbstractMessageArea { ...@@ -452,7 +442,10 @@ public class SWFMessage extends AbstractMessageArea {
} else if (((TagLine) item).getTno() > ano) { } else if (((TagLine) item).getTno() > ano) {
break; 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) { if (parent.getType() == MessageArea.SEQ) {
List<Object> sec = new LinkedList<>(); List<Object> sec = new LinkedList<>();
rs.add(sec); rs.add(sec);
......
...@@ -37,6 +37,7 @@ public class ParseSwiftTest extends TestCase { ...@@ -37,6 +37,7 @@ public class ParseSwiftTest extends TestCase {
System.out.println("获取3域第二部分(不可循环的Sequence A的28D域)=" + swf.getGenericByNo("3.1")); System.out.println("获取3域第二部分(不可循环的Sequence A的28D域)=" + swf.getGenericByNo("3.1"));
System.out.println("获取10域(循环的Sequence B的21域)=" + swf.getGenericByNo("10")); System.out.println("获取10域(循环的Sequence B的21域)=" + swf.getGenericByNo("10"));
System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)=" + swf.getGenericByNo("12")); System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)=" + swf.getGenericByNo("12"));
System.out.println("获取13域(循环的Sequence B的32B域)=" + swf.getGenericByNo("13"));
} }
public void testGetGenericByTag() { public void testGetGenericByTag() {
...@@ -54,6 +55,7 @@ public class ParseSwiftTest extends TestCase { ...@@ -54,6 +55,7 @@ public class ParseSwiftTest extends TestCase {
assertEquals(swf.getGenericByTag("21"), swf.getGenericByNo("10")); assertEquals(swf.getGenericByTag("21"), swf.getGenericByNo("10"));
assertEquals(swf.getGenericByTag("23E"), swf.getGenericByNo("12")); assertEquals(swf.getGenericByTag("23E"), swf.getGenericByNo("12"));
assertEquals(swf.getGenericByTag("59"), swf.getGenericByNo("19")); assertEquals(swf.getGenericByTag("59"), swf.getGenericByNo("19"));
assertEquals(swf.getGenericByTag("32B"), swf.getGenericByNo("13"));
} }
public void testGetGenericByNoWithIndexs() { public void testGetGenericByNoWithIndexs() {
...@@ -68,6 +70,8 @@ public class ParseSwiftTest extends TestCase { ...@@ -68,6 +70,8 @@ public class ParseSwiftTest extends TestCase {
System.out.println("获取10域(循环的Sequence B的21域)的第一个Sequence部分=" + swf.getGenericByNo("10", 0)); System.out.println("获取10域(循环的Sequence B的21域)的第一个Sequence部分=" + swf.getGenericByNo("10", 0));
System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)的第二个sequence的第三个成员=" System.out.println("获取12域(循环的Sequence B下的循环部分的23E域)的第二个sequence的第三个成员="
+ swf.getGenericByNo("12", 1, 2)); + swf.getGenericByNo("12", 1, 2));
System.out.println("获取Sequence B下的循环部分的32B域的第一个sequence成员的第一个币种部分="
+ swf.getGenericByTag("32B.0", 0));
} }
public void testGetGenericByTagWithIndexs() { public void testGetGenericByTagWithIndexs() {
...@@ -138,6 +142,11 @@ public class ParseSwiftTest extends TestCase { ...@@ -138,6 +142,11 @@ public class ParseSwiftTest extends TestCase {
comList.add(one); comList.add(one);
swf.setGenericByNo("12", comList); swf.setGenericByNo("12", comList);
assertEquals(swf.getGenericByNo("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() { public void testSetGenericByTag() {
...@@ -196,5 +205,10 @@ public class ParseSwiftTest extends TestCase { ...@@ -196,5 +205,10 @@ public class ParseSwiftTest extends TestCase {
comList.add(one); comList.add(one);
swf.setGenericByTag("23E", comList); swf.setGenericByTag("23E", comList);
assertEquals(swf.getGenericByTag("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