/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.synapse.mediators.transform.url; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.util.xpath.SynapseXPath; import org.apache.synapse.MessageContext; import java.net.URISyntaxException; import java.net.URI; /** * Represents a URL rewrite action. The action could be rewriting the entire URL * or rewriting a fragment of the URL. */ public class RewriteAction { private static final Log log = LogFactory.getLog(RewriteAction.class); public static final int ACTION_SET = 0; public static final int ACTION_APPEND = 1; public static final int ACTION_PREPEND = 2; public static final int ACTION_REPLACE = 3; public static final int ACTION_REMOVE = 4; private String value; private SynapseXPath xpath; private String regex; private int fragmentIndex = URIFragments.FULL_URI; private int actionType = ACTION_SET; public void execute(URIFragments fragments, MessageContext messageContext) throws URISyntaxException { String result; if (xpath != null) { result = xpath.stringValueOf(messageContext); } else { result = value; } if (fragmentIndex == URIFragments.FULL_URI) { URI uri; if (result != null) { uri = new URI(result); if (log.isTraceEnabled()) { log.trace("Setting the URI to: " + result); } } else { uri = new URI(""); } // Since the entire URL has been rewritten we need to reinit all the fragments fragments.setFragments(uri); } else if (fragmentIndex == URIFragments.PORT) { // When setting the port we must first convert the value into an integer if (result != null) { fragments.setPort(Integer.parseInt(result)); } else { fragments.setPort(-1); } } else { String str; String currentValue = fragments.getStringFragment(fragmentIndex); if (currentValue == null) { currentValue = ""; } switch (actionType) { case ACTION_PREPEND: str = result.concat(currentValue); break; case ACTION_APPEND: if (result != null) { str = currentValue.concat(result); } else { str = ""; } break; case ACTION_REPLACE: if (result != null) { str = currentValue.replaceAll(regex, result); } else { str = ""; } break; case ACTION_REMOVE: str = null; break; default: str = result; } fragments.setStringFragment(fragmentIndex, str); } } public int getFragmentIndex() { return fragmentIndex; } public void setFragmentIndex(int fragmentIndex) { this.fragmentIndex = fragmentIndex; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public SynapseXPath getXpath() { return xpath; } public void setXpath(SynapseXPath xpath) { this.xpath = xpath; } public String getRegex() { return regex; } public void setRegex(String regex) { this.regex = regex; } public int getActionType() { return actionType; } public void setActionType(int actionType) { this.actionType = actionType; } }