/* * Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.config.xml.rest; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.SynapseException; import org.apache.synapse.rest.API; import org.apache.synapse.rest.version.ContextVersionStrategy; import org.apache.synapse.rest.version.DefaultStrategy; import org.apache.synapse.rest.version.URLBasedVersionStrategy; import org.apache.synapse.rest.version.VersionStrategy; import javax.xml.namespace.QName; public class VersionStrategyFactory { private static final Log log = LogFactory.getLog(VersionStrategyFactory.class); public static final String TYPE_URL = "url"; public static final String TYPE_NULL = ""; public static final String TYPE_CONTEXT = "context"; public static VersionStrategy createVersioningStrategy(API api, OMElement apiElt) { OMAttribute versionAtt = apiElt.getAttribute(new QName("version")); if (versionAtt == null || "".equals(versionAtt.getAttributeValue())) { // handleException("Attribute 'version' is required for an API definition"); } OMAttribute versionTypeAtt = apiElt.getAttribute(new QName("version-type")); if (versionAtt != null && (versionTypeAtt == null || "".equals(versionTypeAtt.getAttributeValue()))) { handleException("Attribute 'version-type' is required for an API definition"); } OMAttribute versionParamAtt = apiElt.getAttribute(new QName("version-param")); String version = ""; if (versionAtt != null) { version = versionAtt.getAttributeValue(); } String versionType = ""; if (versionTypeAtt != null) { versionType = versionTypeAtt.getAttributeValue(); } String versionParam = ""; if (versionParamAtt != null) { versionParam = versionParamAtt.getAttributeValue(); } return selectVersionStrategy(api, version, versionType, versionParam); } private static VersionStrategy selectVersionStrategy(API api, String version, String versionType, String versionParam) { if (versionType != null && TYPE_URL.equals(versionType.trim())) { return new URLBasedVersionStrategy(api, version, versionParam); } if (versionType != null && TYPE_CONTEXT.equals(versionType.trim())) { return new ContextVersionStrategy(api,version, versionParam); } if (versionType == null || TYPE_NULL.equals(versionType.trim())) { //no versioning supported here //intended for backward compatability with API's return new DefaultStrategy(api); } return null; } private static void handleException(String msg) { log.error(msg); throw new SynapseException(msg); } }