Package org.wso2.carbon.registry.extensions.handlers

Source Code of org.wso2.carbon.registry.extensions.handlers.Axis2RepositoryHandler

/*
* Copyright (c) 2008, 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.registry.extensions.handlers;

import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.core.jdbc.handlers.Handler;
import org.wso2.carbon.registry.core.jdbc.handlers.RequestContext;
import org.wso2.carbon.registry.core.CollectionImpl;
import org.wso2.carbon.registry.core.RegistryConstants;
import org.wso2.carbon.registry.core.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* This handler implementation customizes the processing of collections of type Axis2 repository.
* These collections are used to store artifacts required by Apache Axis2. They are given a custom
* media type named application/vnd.apache.axis2 so that a media type filter can filter the
* requests.
*
* Axis2 repositories contain three top level sub collections named conf, services and modules.
* This handler creates and maintains Axis2 repository in this configuration.
*/
public class Axis2RepositoryHandler extends Handler {

    private static final Log log = LogFactory.getLog(Axis2RepositoryHandler.class);

    public Axis2RepositoryHandler() {}

    /**
     * This method adds the Axis2 repository collection in the given path and adds necessary sub
     * collections to it.
     *
     * @param requestContext Request details.
     * @throws RegistryException
     */
    public void put(RequestContext requestContext) throws RegistryException {

        String path = requestContext.getResourcePath().getPath();

        String confPath = path +
                          RegistryConstants.PATH_SEPARATOR + RegistryConstants
                .AXIS2_CONF_COLLECTION_NAME;
        CollectionImpl confCollection = new CollectionImpl();
        confCollection.setPath(confPath);
        confCollection.setMediaType(RegistryConstants.AXIS2_CONF_COLLECTION_MEDIA_TYPE);
        requestContext.getRegistry().put(confPath, confCollection);

        String servicesPath = path +
                              RegistryConstants.PATH_SEPARATOR + RegistryConstants
                .AXIS2_SERVICES_COLLECTION_NAME;
        CollectionImpl servicesCollection = new CollectionImpl();
        servicesCollection.setPath(servicesPath);
        servicesCollection.setMediaType(RegistryConstants.AXIS2_SERVICES_COLLECTION_MEDIA_TYPE);
        requestContext.getRegistry().put(servicesPath, servicesCollection);

        String modulesPath = path +
                             RegistryConstants.PATH_SEPARATOR + RegistryConstants
                .AXIS2_MODULES_COLLECTION_NAME;
        CollectionImpl modulesCollection = new CollectionImpl();
        modulesCollection.setPath(modulesPath);
        modulesCollection.setMediaType(RegistryConstants.AXIS2_MODULES_COLLECTION_MEDIA_TYPE);
        requestContext.getRegistry().put(modulesPath, modulesCollection);
    }

    /**
     * This method is invoked when it is attempted to put child resources to Axis2 repository.
     * It blocks the operation if the child resources do not belong to allowed types.
     *
     * @param requestContext Request details.
     * @throws RegistryException Throws if the child resource does not belong to allowed types.
     */
    public void putChild(RequestContext requestContext) throws RegistryException {

        Resource childResource = requestContext.getResource();
        if (childResource == null) {
            childResource = requestContext.getRegistry().
                    get(requestContext.getResourcePath().getPath());
            requestContext.setResource(childResource);
        }
        String childMediaType = requestContext.getResource().getMediaType();

        if(!(RegistryConstants.AXIS2_CONF_COLLECTION_MEDIA_TYPE.equals(childMediaType) ||
               RegistryConstants.AXIS2_SERVICES_COLLECTION_MEDIA_TYPE.equals(childMediaType) ||
               RegistryConstants.AXIS2_MODULES_COLLECTION_MEDIA_TYPE.equals(childMediaType))) {

            String msg = "Resources of type: " + childMediaType +
                    " are not allowed to add as child resources of " +
                    "the typed collection Axis2 Repository.";
            log.error(msg);
            throw new RegistryException(msg);
        }
    }
}
TOP

Related Classes of org.wso2.carbon.registry.extensions.handlers.Axis2RepositoryHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.