/******************************************************************************
* JBoss, a division of Red Hat *
* Copyright 2011, Red Hat Middleware, LLC, and individual *
* contributors as indicated by the @authors tag. See the *
* copyright.txt in the distribution for a full listing of *
* individual contributors. *
* *
* This is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 2.1 of *
* the License, or (at your option) any later version. *
* *
* This software 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this software; if not, write to the Free *
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
* 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
******************************************************************************/
package org.gatein.web.redirect;
import java.util.ArrayList;
import org.exoplatform.portal.config.model.DevicePropertyCondition;
import org.exoplatform.portal.config.model.PortalRedirect;
import org.exoplatform.portal.config.model.RedirectCondition;
import org.exoplatform.portal.config.model.UserAgentConditions;
/**
* @author <a href="mailto:mwringe@redhat.com">Matt Wringe</a>
* @version $Revision$
*/
public class PortalRedirectsFactory {
public static PortalRedirect createSimpleUASRedirect(String[] contains, String[] doesNotContain) {
PortalRedirect portalRedirect = createSimpleRedirect();
RedirectCondition redirectCondition = createRedirectCondition("conditionA");
redirectCondition.setUserAgentConditions(createUserAgentConditionContains(contains, doesNotContain));
ArrayList<RedirectCondition> conditions = createRedirectConditions(redirectCondition);
portalRedirect.setConditions(conditions);
return portalRedirect;
}
public static PortalRedirect createSimpleContainsRedirect(String redirectSiteName, String contains) {
PortalRedirect portalRedirect = createPortalRedirect("Redirect For " + redirectSiteName, redirectSiteName, true);
RedirectCondition redirectCondition = createRedirectCondition("conditionA");
String[] uasContains = { contains };
redirectCondition.setUserAgentConditions(createUserAgentConditionContains(uasContains, null));
ArrayList<RedirectCondition> conditions = createRedirectConditions(redirectCondition);
portalRedirect.setConditions(conditions);
return portalRedirect;
}
public static PortalRedirect createSimpleRedirectAcceptAllUAS() {
String[] contains = { ".*" };
return createSimpleUASRedirect(contains, null);
}
public static PortalRedirect createSimpleRedirectAcceptNoUASA() {
String[] contains = null;
String[] doesNotContain = { ".*" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectAcceptNoUASB() {
String[] contains = { ".*" };
String[] doesNotContain = { ".*" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectAcceptNoUASC() {
String[] contains = { "foo", "TestBrowser", "abc" };
String[] doesNotContain = { ".*" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectAcceptNoUASD() {
String[] contains = { "foo", "TestBrowser", "abc", ".*" };
String[] doesNotContain = { ".*" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectRejectTestBrowserUAS() {
String[] contains = { "foo", "TestBrowser", "abc", ".*" };
String[] doesNotContain = { "TestBrowser" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectRejectTestBrowserExactUAS() {
String[] contains = { "foo", "TestBrowser", "abc", ".*" };
// note the escaped brackets
String[] doesNotContain = { "^Mozilla/5.0 \\(X11; Linux x86_64\\) AppleWebKit/500.0 \\(KHTML, like Gecko\\) TestBrowser/1.2.3 Safari/500.0$" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectAcceptTestBrowserUAS() {
String[] contains = { "foo", "TestBrowser", "abc" };
String[] doesNotContain = { "bar", "hello", "world" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleRedirectAcceptTestBrowserExactUAS() {
// note the escaped brackets
String[] contains = { "foo", "abc",
"^Mozilla/5.0 \\(X11; Linux x86_64\\) AppleWebKit/500.0 \\(KHTML, like Gecko\\) TestBrowser/1.2.3 Safari/500.0$" };
String[] doesNotContain = { "bar", "hello", "world" };
return createSimpleUASRedirect(contains, doesNotContain);
}
public static PortalRedirect createSimpleDeviceRedirect(String propertyName, String equals, String matches,
Float greaterThan, Float lessThan) {
DevicePropertyCondition deviceProperty = createDevicePropertyCondition(propertyName, equals, matches, greaterThan,
lessThan);
return createSimpleDevicePropertiesRedirect(deviceProperty);
}
public static PortalRedirect createSimpleNullDeviceRedirect() {
return createSimpleDevicePropertiesRedirect(null);
}
public static PortalRedirect createSimpleDevicePropertiesRedirect(DevicePropertyCondition... devicePropertyConditions) {
PortalRedirect portalRedirect = createSimpleRedirect();
RedirectCondition redirectCondition = createRedirectCondition("conditionA");
String[] contains = { ".*" };
redirectCondition.setUserAgentConditions(createUserAgentConditionContains(contains, null));
ArrayList<DevicePropertyCondition> devicePropertyConditionsList = null;
if (devicePropertyConditions != null) {
devicePropertyConditionsList = new ArrayList<DevicePropertyCondition>();
for (DevicePropertyCondition deviceProperty : devicePropertyConditions) {
devicePropertyConditionsList.add(deviceProperty);
}
}
redirectCondition.setDeviceProperties(devicePropertyConditionsList);
ArrayList<RedirectCondition> conditions = createRedirectConditions(redirectCondition);
portalRedirect.setConditions(conditions);
return portalRedirect;
}
public static PortalRedirect createSimpleRedirect() {
PortalRedirect portalRedirect = createPortalRedirect("acceptAllUASPortalRedirect", "redirectSite", true);
return portalRedirect;
}
public static ArrayList<PortalRedirect> createPortalRedirects(PortalRedirect... portalRedirectValues) {
if (portalRedirectValues != null) {
ArrayList<PortalRedirect> portalRedirects = new ArrayList<PortalRedirect>();
for (PortalRedirect portalRedirect : portalRedirectValues) {
portalRedirects.add(portalRedirect);
}
return portalRedirects;
} else {
return null;
}
}
public static PortalRedirect createPortalRedirect(String name, String redirectSite, boolean enabled) {
PortalRedirect portalRedirect = new PortalRedirect();
portalRedirect.setName(name);
portalRedirect.setRedirectSite(redirectSite);
portalRedirect.setEnabled(enabled);
portalRedirect.setMappings(null);
portalRedirect.setConditions(null);
return portalRedirect;
}
public static ArrayList<RedirectCondition> createRedirectConditions(RedirectCondition... redirectConditionValues) {
if (redirectConditionValues != null) {
ArrayList<RedirectCondition> redirectConditions = new ArrayList<RedirectCondition>();
for (RedirectCondition redirectCondition : redirectConditionValues) {
redirectConditions.add(redirectCondition);
}
return redirectConditions;
} else {
return null;
}
}
public static RedirectCondition createRedirectCondition(String name) {
RedirectCondition redirectCondition = new RedirectCondition();
redirectCondition.setName(name);
redirectCondition.setDeviceProperties(null);
redirectCondition.setUserAgentConditions(null);
return redirectCondition;
}
public static UserAgentConditions createUserAgentConditionContains(String[] contains, String[] doesNotContain) {
UserAgentConditions userAgentCondition = new UserAgentConditions();
if (contains != null) {
userAgentCondition.setContains(new ArrayList<String>());
for (String value : contains) {
userAgentCondition.getContains().add(value);
}
}
if (doesNotContain != null) {
userAgentCondition.setDoesNotContain(new ArrayList<String>());
for (String value : doesNotContain) {
userAgentCondition.getDoesNotContain().add(value);
}
}
return userAgentCondition;
}
public static DevicePropertyCondition createDevicePropertyCondition(String propertyName, String equals, String matches,
Float greaterThan, Float lessThan) {
DevicePropertyCondition devicePropertyCondition = new DevicePropertyCondition();
if (propertyName != null) {
devicePropertyCondition.setPropertyName(propertyName);
}
if (equals != null) {
devicePropertyCondition.setEquals(equals);
}
if (matches != null) {
devicePropertyCondition.setMatches(matches);
}
if (greaterThan != null) {
devicePropertyCondition.setGreaterThan(greaterThan);
}
if (lessThan != null) {
devicePropertyCondition.setLessThan(lessThan);
}
return devicePropertyCondition;
}
}