//$Id: Style.java 2008-8-4 上午10:42:49 asus Exp $ /* * * Copyright c 2005-2009. * * Licensed under GNU LESSER General Public License, Version 3. * http://www.gnu.org/licenses * */ /******************************************************************************** * @author chaostone * * MODIFICATION DESCRIPTION * * Name Date Description * ============ ============ ============ *chaostone 2008-8-4 Created * ********************************************************************************/ package org.beanfuse.utils.multilevelseq; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; public class SeqPattern { private MultiLevelSeqGenerator generator; private String pattern; private int level; private SeqNumStyle seqNumStyle; private int seq = 0; private final List params = new ArrayList(); // 从模式中进行分析{} public SeqPattern(SeqNumStyle seqStyle, String pattern) { this.seqNumStyle = seqStyle; this.pattern = pattern; String remainder = pattern; while (StringUtils.isNotEmpty(remainder)) { String p = StringUtils.substringBetween(remainder, "{", "}"); if (StringUtils.isEmpty(p)) { break; } if (NumberUtils.isDigits(p)) { params.add(new Integer(p)); } remainder = StringUtils.substringAfter(remainder, "{" + p + "}"); } Collections.sort(params); this.level = ((Integer) params.get(params.size() - 1)).intValue(); params.remove(params.size() - 1); } public String curSeqText() { return seqNumStyle.build(seq); } public String next() { seq++; String text = pattern; for (Iterator iterator = params.iterator(); iterator.hasNext();) { Integer paramLevel = (Integer) iterator.next(); text = StringUtils.replace(text, "{" + paramLevel + "}", generator .getSytle(paramLevel.intValue()).curSeqText()); } return StringUtils.replace(text, "{" + level + "}", seqNumStyle .build(seq)); } public void reset() { seq = 0; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public SeqNumStyle getSeqNumStyle() { return seqNumStyle; } public void setSeqNumStyle(SeqNumStyle seqNumStyle) { this.seqNumStyle = seqNumStyle; } public void setPattern(String pattern) { this.pattern = pattern; } public String getPattern() { return this.pattern; } public MultiLevelSeqGenerator getGenerator() { return generator; } public void setGenerator(MultiLevelSeqGenerator generator) { this.generator = generator; } }