001: /*
002: * Copyright (c) JForum Team
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms,
006: * with or without modification, are permitted provided
007: * that the following conditions are met:
008: *
009: * 1) Redistributions of source code must retain the above
010: * copyright notice, this list of conditions and the
011: * following disclaimer.
012: * 2) Redistributions in binary form must reproduce the
013: * above copyright notice, this list of conditions and
014: * the following disclaimer in the documentation and/or
015: * other materials provided with the distribution.
016: * 3) Neither the name of "Rafael Steil" nor
017: * the names of its contributors may be used to endorse
018: * or promote products derived from this software without
019: * specific prior written permission.
020: *
021: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
022: * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
023: * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
024: * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
025: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
026: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
027: * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
028: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
029: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
030: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
031: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
032: * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
033: * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
034: * IN CONTRACT, STRICT LIABILITY, OR TORT
035: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
036: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
037: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
038: *
039: *
040: * The JForum Project
041: * http://www.jforum.net
042: */
043: package net.jforum;
044:
045: /**
046: * URL Patterns keeper.
047: * Represents a single URL pattern. Each pattern is composed
048: * by a name, the pattern itself, the pattern's size and the
049: * splited variables. <br><br>
050: *
051: * The pattern is expected in the form <i>var1, var2, varN</i>, in the
052: * correct order. This means that if <i>var1</i> comes first, it <b>must</b>
053: * come first in the URL. The same is valid to others.<br><br>
054: *
055: * Please note that "first" here is "first" after regular URL, which is
056: * composed by server and servlet name, in the most simple case.<br><br>
057: *
058: * <b>Example:</b><br>
059: *
060: * URL: <i>http://localhost:8080/webappName/someDir/myServlet/news/view/3.page<i>.
061: * <br>
062: * In this case, <i>http://localhost:8080/webappName/someDir/myServlet/</i> is the
063: * regular URL, the part that we don't care about. We only want the part
064: * <i>news/view/3.page</i> ( where .page is the servlet extension ).
065: * <br>For this URL, we could make the following pattern:<br><br>
066: *
067: * <i>news.view.1 = news_id</i><br><br>
068: *
069: * Here, <i>news.view.1</i> is the pattern's name, and <i>news_id</i> is
070: * the patterns itself. <br>
071: * Another example:<br><br>
072: *
073: * <i>news.view.2 = page, news_id</i><br><br>
074: *
075: * In this case we have a new var called <i>page</i>, that represents the page being seen.<br>
076: * Each entry is composed in the form:<br><br>
077: *
078: * <i><moduleName>.<actionName>.<numberOfParameters> = <var 1>,<var n></i>
079: * <br><br>
080: *
081: * Please note that module and action's name aren't pattern's composition, so
082: * don't put them there. The system will consider that the pattern only contains
083: * the variables diferent to each request ( e.g, id's ). If the pattern you're
084: * constructing doesn't have any variable, just leave it blank, like<br><br>
085: *
086: * <i>myModule.myAction.0 = </i><br><br>
087: *
088: * @author Rafael Steil
089: * @version $Id: UrlPattern.java,v 1.1 2006/08/23 02:13:49 rafaelsteil Exp $
090: */
091: public class UrlPattern {
092: private String name;
093: private String value;
094: private int size;
095: private String[] vars;
096:
097: public UrlPattern(String name, String value) {
098: this .name = name;
099: this .value = value;
100:
101: this .processPattern();
102: }
103:
104: private void processPattern() {
105: String[] p = this .value.split(",");
106:
107: this .vars = new String[p.length];
108: this .size = ((((p[0]).trim()).equals("")) ? 0 : p.length);
109:
110: for (int i = 0; i < this .size; i++) {
111: this .vars[i] = (p[i]).trim();
112: }
113: }
114:
115: /**
116: * Gets the pattern name
117: *
118: * @return String with the pattern name
119: */
120: public String getName() {
121: return this .name;
122: }
123:
124: /**
125: * Get pattern's total vars
126: *
127: * @return The total
128: */
129: public int getSize() {
130: return this .size;
131: }
132:
133: /**
134: * Gets the vars.
135: * The URL variables are in the correct order, which means
136: * that the first position always will be "something1", the
137: * second "something2" and so on. The system expects this
138: * order never changes from requisition to requisition.
139: *
140: * @return The vars
141: */
142: public String[] getVars() {
143: return this.vars;
144: }
145: }
|