1 31 32 package org.opencms.util; 33 34 import java.net.URI ; 35 36 45 public class CmsUriSplitter { 46 47 48 private String m_anchor; 49 50 51 private boolean m_errorFree; 52 53 54 private String m_prefix; 55 56 57 private String m_query; 58 59 60 private String m_uri; 61 62 67 public CmsUriSplitter(String uri) { 68 69 this(uri, false); 70 } 71 72 83 public CmsUriSplitter(String uri, boolean strict) { 84 85 m_uri = uri; 86 m_errorFree = true; 87 88 if (strict) { 89 90 try { 92 URI u = new URI (uri); 93 m_prefix = ((u.getScheme() != null) ? u.getScheme() + ":" : "") + u.getRawSchemeSpecificPart(); 94 m_anchor = u.getRawFragment(); 95 m_query = u.getRawQuery(); 96 if (m_prefix != null) { 97 int i = m_prefix.indexOf('?'); 98 if (i != -1) { 99 m_query = m_prefix.substring(i + 1); 100 m_prefix = m_prefix.substring(0, i); 101 } 102 } 103 if (m_anchor != null) { 104 int i = m_anchor.indexOf('?'); 105 if (i != -1) { 106 m_query = m_anchor.substring(i + 1); 107 m_anchor = m_anchor.substring(0, i); 108 } 109 } 110 } catch (Exception exc) { 111 strict = false; 113 m_errorFree = false; 114 } 115 } 116 117 if ((!strict) && (uri != null)) { 118 119 StringBuffer prefix = new StringBuffer (uri.length()); 121 StringBuffer anchor = null; 122 StringBuffer query = null; 123 124 int len = uri.length(); 125 int cur = 0; 126 127 for (int i = 0; i < len; i++) { 128 129 char c = uri.charAt(i); 130 if (c == '#') { 131 cur = 1; 133 anchor = new StringBuffer (uri.length()); 134 continue; 135 } 136 if (c == '?') { 137 cur = 2; 139 query = new StringBuffer (uri.length()); 141 continue; 142 } 143 switch (cur) { 144 case 1: 145 anchor.append(c); 147 break; 148 case 2: 149 query.append(c); 151 break; 152 default: 153 prefix.append(c); 155 break; 156 } 157 } 158 159 if (prefix.length() > 0) { 160 m_prefix = prefix.toString(); 161 } 162 if ((anchor != null) && (anchor.length() > 0)) { 163 m_anchor = anchor.toString(); 164 } 165 if ((query != null) && (query.length() > 0)) { 166 m_query = query.toString(); 167 } 168 } 169 } 170 171 174 public boolean equals(Object obj) { 175 176 if (obj == this) { 177 return true; 178 } 179 if (obj instanceof CmsUriSplitter) { 180 CmsUriSplitter other = (CmsUriSplitter)obj; 181 if (((m_prefix == null) && (other.m_prefix != null)) && (!m_prefix.equals(other.m_prefix))) { 182 return false; 183 } 184 if (((m_anchor == null) && (other.m_anchor != null)) && (!m_anchor.equals(other.m_anchor))) { 185 return false; 186 } 187 if (((m_query == null) && (other.m_query != null)) && (!m_query.equals(other.m_query))) { 188 return false; 189 } 190 return true; 191 } 192 return false; 193 } 194 195 201 public String getAnchor() { 202 203 return m_anchor; 204 } 205 206 212 public String getPrefix() { 213 214 return m_prefix; 215 } 216 217 223 public String getQuery() { 224 225 return m_query; 226 } 227 228 233 public String getUri() { 234 235 return m_uri; 236 } 237 238 241 public int hashCode() { 242 243 int hashCode = 0; 244 if (m_prefix != null) { 245 hashCode += m_prefix.hashCode(); 246 } 247 if (m_anchor != null) { 248 hashCode += m_anchor.hashCode(); 249 } 250 if (m_query != null) { 251 hashCode += m_query.hashCode(); 252 } 253 return hashCode; 254 } 255 256 263 public boolean isErrorFree() { 264 265 return m_errorFree; 266 } 267 } | Popular Tags |