/** * Copyright (c) 2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * Licensed 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.wso2.carbon.sequences.ui.util.ns; import org.apache.axiom.om.xpath.AXIOMXPath; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.synapse.config.xml.XMLConfigConstants; import org.wso2.carbon.mediator.service.util.MediatorProperty; import org.wso2.carbon.sequences.ui.util.SequenceEditorHelper; import javax.servlet.http.HttpSession; import javax.xml.namespace.QName; import java.util.Iterator; import java.util.List; /** * */ @SuppressWarnings({"UnusedDeclaration"}) public class NameSpacesRegistrar { private static final Log log = LogFactory.getLog(NameSpacesRegistrar.class); private final static NameSpacesRegistrar ourInstance = new NameSpacesRegistrar(); public static NameSpacesRegistrar getInstance() { return ourInstance; } private NameSpacesRegistrar() { } @Deprecated public void addNameSpace(String prefix, String uri, String id, HttpSession httpSession) { if (!assertIDNotEmpty(id)) { return; } NameSpacesInformationRepository repository = getNameSpacesInformationRepository(httpSession); NameSpacesInformation information = getNameSpacesInformation( SequenceEditorHelper.getEditingMediatorPosition(httpSession), id, repository); addNameSpace(prefix, uri, information); logOnSuccess(information, id); } public void registerNameSpaces(AXIOMXPath xPath, String id, HttpSession httpSession) { if (id == null || "".equals(id)) { if (log.isDebugEnabled()) { log.debug("Provided id is empty or null," + " to register NameSpace there must be a id "); } return; } if (xPath == null) { if (log.isDebugEnabled()) { log.debug("Provided XPath for id ' " + id + " ' is null "); } return; } NameSpacesInformationRepository repository = getNameSpacesInformationRepository(httpSession); NameSpacesInformation information = getNameSpacesInformation( SequenceEditorHelper.getEditingMediatorPosition(httpSession), id, repository); for (Object prefixObject : xPath.getNamespaces().keySet()) { if (prefixObject != null) { String prefix = (String) prefixObject; String uri = xPath.getNamespaceContext().translateNamespacePrefixToUri(prefix); addNameSpace(prefix, uri, information); } } logOnSuccess(information, id); } public void registerNameSpaces(List<MediatorProperty> properties, String baseId, HttpSession httpSession) { if (properties == null) { if (log.isDebugEnabled()) { log.debug("Provided MediatorProperty list is null, " + "returning without registering NameSpaces"); } return; } if (baseId == null || "".equals(baseId)) { if (log.isDebugEnabled()) { log.debug("Provided baseId is empty or null, " + "to register NameSpace there must be a id "); } return; } registerNameSpaces(properties.iterator(), baseId, httpSession); } public void registerNameSpaces(Iterator<MediatorProperty> properties, String baseId, HttpSession httpSession) { if (properties == null) { if (log.isDebugEnabled()) { log.debug("Provided MediatorProperty list iterator is null, " + "returning without registering NameSpaces"); } return; } if (baseId == null || "".equals(baseId)) { if (log.isDebugEnabled()) { log.debug("Provided baseId is empty or null, " + "to register NameSpace there must be a id "); } return; } int i = 0; while (properties.hasNext()) { MediatorProperty property = properties.next(); if (property != null) { AXIOMXPath xPath = property.getExpression(); if (xPath != null) { registerNameSpaces(xPath, baseId + String.valueOf(i), httpSession); } } i++; } } public void registerNameSpaces(QName qName, String id, HttpSession httpSession) { if (qName == null) { if (log.isDebugEnabled()) { log.debug("Provide QName is null. returning without registering NameSpaces"); } return; } NameSpacesInformationRepository repository = getNameSpacesInformationRepository(httpSession); NameSpacesInformation information = getNameSpacesInformation( SequenceEditorHelper.getEditingMediatorPosition(httpSession), id, repository); addNameSpace(qName.getPrefix(), qName.getNamespaceURI(), information); logOnSuccess(information, id); } public void unRegisterNameSpaces(HttpSession httpSession) { NameSpacesInformationRepository repository = (NameSpacesInformationRepository) httpSession.getAttribute( NameSpacesInformationRepository.NAMESPACES_INFORMATION_REPOSITORY); if (repository != null) { repository.removeAllNameSpacesInformation( SequenceEditorHelper.getEditingMediatorPosition(httpSession)); } } private NameSpacesInformationRepository getNameSpacesInformationRepository( HttpSession httpSession) { NameSpacesInformationRepository repository = (NameSpacesInformationRepository) httpSession.getAttribute( NameSpacesInformationRepository.NAMESPACES_INFORMATION_REPOSITORY); if (repository == null) { repository = new NameSpacesInformationRepository(); httpSession.setAttribute( NameSpacesInformationRepository.NAMESPACES_INFORMATION_REPOSITORY, repository); } return repository; } private NameSpacesInformation getNameSpacesInformation( String ownerID, String id, NameSpacesInformationRepository repository) { NameSpacesInformation information = repository.getNameSpacesInformation(ownerID, id); if (information != null) { information.removeAllNameSpaces(); } if (information == null) { information = new NameSpacesInformation(); repository.addNameSpacesInformation(ownerID, id, information); } return information; } private void addNameSpace(String prefix, String uri, NameSpacesInformation information) { if (uri == null || "".equals(uri) || prefix == null || "".equals(prefix)) { if (log.isDebugEnabled()) { log.debug("Provided uri or prefix is empty or null , " + "to register NameSpace there must be a valid uri and a prefix "); } return; } if (!XMLConfigConstants.SYNAPSE_NAMESPACE.equals(uri)) { information.addNameSpace(prefix, uri); } } private boolean assertIDNotEmpty(String id) { if (id == null || "".equals(id)) { if (log.isDebugEnabled()) { log.debug("Provided id is empty or null, " + "to register NameSpace there must be a id "); } return false; } return true; } private void logOnSuccess(NameSpacesInformation information, String id) { if (log.isDebugEnabled()) { log.debug("Registered NameSpaces :" + information + " with id :" + id); } } }