Package org.wso2.carbon.registry.resource.services.utils

Source Code of org.wso2.carbon.registry.resource.services.utils.MetadataPopulator

/*
* Copyright (c) 2006, 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.resource.services.utils;

import org.wso2.carbon.registry.core.*;
import org.wso2.carbon.registry.core.session.UserRegistry;
import org.wso2.carbon.registry.resource.beans.MetadataBean;
import org.wso2.carbon.registry.common.WebResourcePath;
import org.wso2.carbon.registry.common.utils.CommonUtil;
import org.wso2.carbon.user.core.AuthorizationManager;


import java.util.ArrayList;
import java.util.List;

public class MetadataPopulator {

    public static MetadataBean populate(String purePath, UserRegistry registry) throws Exception {

        ResourcePath path = new ResourcePath(purePath);
        Resource resource = registry.get(path.getPathWithVersion());
        MetadataBean bean = new MetadataBean();

        bean.setAuthor(resource.getAuthorUserName());
        bean.setCollection(resource instanceof Collection);
        bean.setDescription(resource.getDescription());
        bean.setLastUpdater(resource.getLastUpdaterUserName());
        bean.setMediaType(resource.getMediaType());
        bean.setPath(resource.getPath());

        bean.setFormattedCreatedOn(CommonUtil.formatDate(resource.getCreatedTime()));
        bean.setFormattedLastModified(CommonUtil.formatDate(resource.getLastModified()));

        bean.setActiveResourcePath(path.getPath());

        if (path.parameterExists("version")) {
            bean.setVersionView(true);
            bean.setPermalink(path.getCompletePath());
        } else {
            bean.setVersionView(false);
            bean.setPermalink(resource.getPermanentPath());
        }
        if ((resource.getProperty("registry.link") != null) || (resource.getProperty("registry.mount") != null)) {
            bean.setPermalink("hide");
         }

        bean.setNavigatablePaths(constructNavigatablePaths(path.getCompletePath()));
        bean.setContentPath(path.getCompletePath());
        bean.setServerBaseURL("carbon registry base URL.");

        String versionPath;
        if (path.parameterExists("version")) {
            versionPath = path.getPath() + RegistryConstants.URL_SEPARATOR + "version" +
                    RegistryConstants.URL_PARAMETER_SEPARATOR + path.getParameterValue("version");
        } else {
            versionPath = path.getPath();
        }
        bean.setPathWithVersion(versionPath);

        String userName = registry.getUserName();
        AuthorizationManager authorizer = registry.getUserRealm().getAuthorizationManager();
        boolean putAllowed = authorizer.
                isUserAuthorized(userName, path.getPath(), ActionConstants.PUT);
        bean.setPutAllowed(putAllowed);

        return bean;
    }

    private static WebResourcePath[] constructNavigatablePaths(String rawPath) {

        List <WebResourcePath> navigatablePaths = new ArrayList<WebResourcePath>();

        if (rawPath.equals(RegistryConstants.ROOT_PATH)) {

            WebResourcePath webPath = new WebResourcePath();
            webPath.setNavigateName("/");
            webPath.setNavigatePath("#");

            navigatablePaths.add(webPath);

        } else {

            // first add the root path
            WebResourcePath rootPath = new WebResourcePath();
            rootPath.setNavigateName("/");
            rootPath.setNavigatePath(RegistryConstants.ROOT_PATH);
            navigatablePaths.add(rootPath);

            String preparedPath = rawPath;
            if (preparedPath.startsWith(RegistryConstants.PATH_SEPARATOR)) {
                preparedPath = preparedPath.substring(RegistryConstants.PATH_SEPARATOR.length());
            }

            if (preparedPath.endsWith(RegistryConstants.PATH_SEPARATOR)) {
                preparedPath = preparedPath.
                        substring(0, preparedPath.length() - RegistryConstants.PATH_SEPARATOR.length());
            }

            String[] parts = preparedPath.split(RegistryConstants.PATH_SEPARATOR);
            for (int i = 0; i < parts.length; i++) {
                WebResourcePath resourcePath = new WebResourcePath();

                if (i == parts.length - 1) {
                    String[] q = parts[i].split(RegistryConstants.URL_SEPARATOR);
                    if (q.length == 2) {
                        if (q[1].startsWith("version:")) {
                            String versionNumber = q[1].substring("version:".length());
                            String navName = q[0] + " (version " + versionNumber + ")";
                            resourcePath.setNavigateName(navName);
                        } else {
                            resourcePath.setNavigateName(parts[i]);
                        }
                    } else {
                        resourcePath.setNavigateName(parts[i]);
                    }
                } else {
                    resourcePath.setNavigateName(parts[i]);
                }

                StringBuffer tempPath = new StringBuffer();
                for (int j = 0; j < i + 1; j++) {
                    tempPath.append(RegistryConstants.PATH_SEPARATOR).append(parts[j]);
                }
                resourcePath.setNavigatePath(tempPath.toString());
                navigatablePaths.add(resourcePath);
            }
        }

        return navigatablePaths.toArray(new WebResourcePath[navigatablePaths.size()]);
    }
}
TOP

Related Classes of org.wso2.carbon.registry.resource.services.utils.MetadataPopulator

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.