package org.xcolab.view.config.rewrite; import org.ocpsoft.rewrite.config.ConditionBuilder; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.config.Direction; import org.ocpsoft.rewrite.servlet.config.Path; import org.ocpsoft.rewrite.servlet.config.Redirect; import org.springframework.util.Assert; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class SimpleRewriteBuilder { private final ConfigurationBuilder configurationBuilder; private SimpleRewriteBuilder(ConfigurationBuilder configurationBuilder) { this.configurationBuilder = configurationBuilder; } public static SimpleRewriteBuilder of(ConfigurationBuilder configurationBuilder) { return new SimpleRewriteBuilder(configurationBuilder); } public SimpleRewriteBuilder redirect(String from, String to) { configurationBuilder.addRule() .when(Direction.isInbound().and(Path.matches(from))) .perform(Redirect.permanent(to)); return this; } public SimpleRewriteBuilder redirect(List<String> fromList, String to) { Assert.notEmpty(fromList); Iterator<String> fromIt = fromList.iterator(); ConditionBuilder condition = Path.matches(fromIt.next()); while (fromIt.hasNext()) { condition = condition.or(Path.matches(fromIt.next())); } configurationBuilder.addRule() .when(Direction.isInbound().and(condition)) .perform(Redirect.permanent(to)); return this; } public FromStep redirectFrom(String from) { return new FromStep(from); } public class FromStep { private final List<String> fromList = new ArrayList<>(); private FromStep(String from) { fromList.add(from); } public FromStep andFrom(String from) { fromList.add(from); return this; } public SimpleRewriteBuilder to(String to) { return redirect(fromList, to); } } }