package com.hundsun.jresplus.web.velocity.resolver; /** * * @author LeoHu copy by sagahl copy by fish * */ public final class LayoutFinder { private static final int Seq = '/'; private char[] layoutName; private char[] sameNameLayoutUrl; private int lastSeq; public LayoutFinder(String screenUrl, char[] layoutPrefix, char[] screenPrefix, char[] defaultLayoutName) { this.layoutName = defaultLayoutName; int layoutPrefixLen = layoutPrefix.length; int len = layoutPrefixLen + screenUrl.length() - screenPrefix.length; this.sameNameLayoutUrl = new char[len]; System.arraycopy(layoutPrefix, 0, this.sameNameLayoutUrl, 0, layoutPrefixLen); int pos = layoutPrefixLen; for (int i = screenPrefix.length; i < screenUrl.length(); i++, pos++) { this.sameNameLayoutUrl[pos] = screenUrl.charAt(i); } this.lastSeq = lastIndexOf(len); } private final int lastIndexOf(int last) { for (int i = last - 1; i >= 0; i--) { if (sameNameLayoutUrl[i] == Seq) { return i; } } return -1; } public String getSameNameLayoutUrl() { return new String(sameNameLayoutUrl); } public String getLayoutUrl() { if (lastSeq == -1) { return null; } int newLen = lastSeq + 1 + this.layoutName.length; char[] newChar = new char[newLen]; System.arraycopy(this.sameNameLayoutUrl, 0, newChar, 0, lastSeq + 1); System.arraycopy(this.layoutName, 0, newChar, lastSeq + 1, this.layoutName.length); lastSeq = lastIndexOf(lastSeq); return new String(newChar); } }