Commit 599cf024 by WeiCong

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

parent d8ac5a73
...@@ -5,63 +5,72 @@ import java.util.List; ...@@ -5,63 +5,72 @@ import java.util.List;
public abstract class AbstractMessageArea implements MessageArea { public abstract class AbstractMessageArea implements MessageArea {
private List<MessageArea> fields = new ArrayList<MessageArea>(); private List<MessageArea> fields = new ArrayList<MessageArea>();
private String name; private String name;
private String anlyReg; private String anlyReg;
private String desp; private String desp;
public String getDesp() { private MessageArea pattern;
return desp; public int begNo=Integer.MAX_VALUE;
} public int endNo=Integer.MIN_VALUE;
public void setDesp(String desp) { public boolean withIn(int index){
this.desp = desp; AbstractMessageArea ama=((AbstractMessageArea)this.fields.get(0));
} return index>=ama.begNo && index<=ama.endNo;
}
public void toSwfMessage(StringBuilder sb) {
for(MessageArea field : fields) public String getDesp() {
field.toSwfMessage(sb); return desp;
} }
public String getName() { public void setDesp(String desp) {
// TODO Auto-generated method stub this.desp = desp;
return name; }
}
public void setName(String name) public void toSwfMessage(StringBuilder sb) {
{ for (MessageArea field : fields)
this.name = name; field.toSwfMessage(sb);
} }
public List<MessageArea> getFields()
{ public String getName() {
return fields; // TODO Auto-generated method stub
} return name;
public void addSubArea(MessageArea sub) { }
// TODO Auto-generated method stub
fields.add(sub); public void setName(String name) {
} this.name = name;
public MessageArea clone() }
{
return null; public List<MessageArea> getFields() {
} return fields;
public boolean isEnd() }
{
return false; public void addSubArea(MessageArea sub) {
} // TODO Auto-generated method stub
private MessageArea pattern; fields.add(sub);
public void setPattern(MessageArea pattern) }
{
this.pattern = pattern; public MessageArea clone() {
} return null;
public MessageArea getPattern() }
{
return this.pattern; public boolean isEnd() {
} return false;
}
public String getAnlyReg() {
return anlyReg; public MessageArea getPattern() {
} return this.pattern;
}
public void setAnlyReg(String anlyReg) {
this.anlyReg = anlyReg; 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; ...@@ -3,22 +3,23 @@ package com.brilliace.swifteditor.tag.message;
import java.util.List; import java.util.List;
public class CYC extends AbstractMessageArea { public class CYC extends AbstractMessageArea {
private final int type = CYC; private final int type = CYC;
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());
return cp; cp.begNo = this.begNo;
} cp.endNo = this.endNo;
return cp;
}
public int getType() { public int getType() {
return type; return type;
} }
} }
...@@ -3,21 +3,23 @@ package com.brilliace.swifteditor.tag.message; ...@@ -3,21 +3,23 @@ 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;
public MessageArea clone() { private final int type = SEQ;
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;
}
public int getType() { public MessageArea clone() {
return type; 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 { ...@@ -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,35 +299,22 @@ public class SWFMessage extends AbstractMessageArea { ...@@ -296,35 +299,22 @@ public class SWFMessage extends AbstractMessageArea {
} }
} }
} }
} else if (parent.getType() == MessageArea.CYCLIST) { } else if (parent.getType() == MessageArea.CYCLIST || parent.getType() == MessageArea.SEQLIST) {
MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项 if (((AbstractMessageArea) parent).withIn(ano)) {
do { MessageArea cp = ((AbstractMessageArea) parent).getFields().get(0);//默认有一个组项
setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++); do {
if (rs.size() <= cnt) setGenericRepetitive((AbstractMessageArea) cp, index, ano, rs, cnt++);
return true; if (rs.size() <= cnt)
try { return true;
cp = ((AbstractMessageArea) parent).getFields().get(cnt); try {
} catch (Exception e) { cp = ((AbstractMessageArea) parent).getFields().get(cnt);
cp = ((AbstractMessageArea) parent).getPattern().clone(); } catch (Exception e) {
parent.addSubArea(cp); 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);
} }
while (true);
} }
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