/*
* Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
package org.geometerplus.fbreader.network.opds;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.geometerplus.zlibrary.core.util.ZLMiscUtil;
import org.geometerplus.zlibrary.core.util.ZLNetworkUtil;
import org.geometerplus.zlibrary.core.xml.ZLStringMap;
class URLRewritingRule {
// rule types:
public static final int ADD_URL_PARAMETER = 0;
public static final int REWRITE = 1;
public static final int UNKNOWN = 2;
// apply values:
public static final int APPLY_EXTERNAL = 1;
public static final int APPLY_INTERNAL = 2;
public static final int APPLY_ALWAYS = APPLY_EXTERNAL | APPLY_INTERNAL;
private int myType = UNKNOWN;
private int myApply = APPLY_ALWAYS;
private final HashMap<String,String> myParameters = new HashMap<String,String>();
public URLRewritingRule(ZLStringMap map) {
for (int i = map.getSize() - 1; i >= 0; --i) {
final String key = map.getKey(i);
final String value = map.getValue(key);
if ("type".equals(key)) {
if ("addUrlParameter".equals(value)) {
myType = ADD_URL_PARAMETER;
} else if ("rewrite".equals(value)) {
myType = REWRITE;
}
} else if ("apply".equals(key)) {
if ("internal".equals(value)) {
myApply = APPLY_INTERNAL;
} else if ("external".equals(value)) {
myApply = APPLY_EXTERNAL;
}
} else {
myParameters.put(key, value);
}
}
}
public int whereToApply() {
return myApply;
}
public String apply(String url) {
switch (myType) {
default:
return url;
case ADD_URL_PARAMETER:
{
final String name = myParameters.get("name");
final String value = myParameters.get("value");
if (name == null || value == null) {
return url;
}
return ZLNetworkUtil.appendParameter(url, name, value);
}
case REWRITE:
{
/*
final String pattern = myParameters.get("pattern");
final String replacement = myParameters.get("replacement");
if (pattern == null || replacement == null) {
return url;
}
final Matcher matcher = Pattern.compile(pattern).matcher(url);
if (matcher.matches()) {
for (int i = matcher.groupCount(); i >= 1; --i) {
url = replacement.replace("%" + i, matcher.group(1));
}
}
*/
return url;
}
}
}
/*
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof URLRewritingRule)) {
return false;
}
final URLRewritingRule rule = (URLRewritingRule) o;
if (Type != rule.Type
|| Apply != rule.Apply
|| !ZLMiscUtil.equals(Name, rule.Name)
|| !ZLMiscUtil.equals(Value, rule.Value)) {
return false;
}
return true;
}
*/
}