com.liferay.document.library.jaxrs.DocumentLibraryRootResource.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.jaxrs.DocumentLibraryRootResource.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.document.library.jaxrs;

import com.liferay.document.library.jaxrs.provider.OrderByComparatorSelectorUtil;
import com.liferay.document.library.jaxrs.provider.OrderBySelector;
import com.liferay.document.library.jaxrs.provider.PageContainer;
import com.liferay.document.library.jaxrs.provider.Pagination;
import com.liferay.document.library.jaxrs.provider.VariantUtil;
import com.liferay.document.library.kernel.service.DLAppService;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.repository.RepositoryProvider;
import com.liferay.portal.kernel.service.GroupService;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.comparator.GroupFriendlyURLComparator;
import com.liferay.portal.kernel.util.comparator.GroupIdComparator;
import com.liferay.portal.kernel.util.comparator.GroupNameComparator;
import com.liferay.portal.kernel.util.comparator.GroupTypeComparator;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;
import java.util.stream.Collectors;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Carlos Sierra Andrs
 */
@Api
@Component(immediate = true, service = DocumentLibraryRootResource.class)
@Path("/")
public class DocumentLibraryRootResource {

    public static final HashMap<String, Function<Boolean, OrderByComparator<Group>>> COMPARATORS = new HashMap<String, Function<Boolean, OrderByComparator<Group>>>() {
        {
            put("name", GroupNameComparator::new);
            put("id", GroupIdComparator::new);
            put("type", GroupTypeComparator::new);
            put("url", GroupFriendlyURLComparator::new);
        }
    };

    @Path("/objects/files/{fileId}")
    public FileResource getFileResource(@PathParam("fileId") long fileId) throws PortalException {

        return new FileResource(dlAppService, uriInfo.getRequestUriBuilder(), dlAppService.getFileEntry(fileId));
    }

    @Path("/objects/folders/{folderId}")
    public FolderResource getFolderResource(@PathParam("folderId") long folderId) throws PortalException {

        UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();

        return new FolderResource(dlAppService, dlAppService.getFolder(folderId),
                baseUriBuilder.clone().path(DocumentLibraryRootResource.class, "getFolderResource"),
                baseUriBuilder.clone().path(DocumentLibraryRootResource.class, "getFileResource"));
    }

    @Path("/{groupId}")
    public DocumentLibraryGroupResource getGroupResource(@PathParam("groupId") long groupId) {

        return new DocumentLibraryGroupResource(groupId);
    }

    @ApiOperation(value = "List groups", responseContainer = "List", response = GroupRepr.class)
    @GET
    @Produces({ "application/json", "application/xml" })
    public PageContainer<List<GroupRepr>> listGroups(@Context Company company,
            @Context OrderBySelector orderBySelector, @Context Pagination pagination, @Context Request request,
            @Context UriInfo uriInfo) throws PortalException {

        Variant.VariantListBuilder variantListBuilder = Variant.VariantListBuilder.newInstance();

        variantListBuilder = variantListBuilder.languages(LanguageUtil.getAvailableLocales().toArray(new Locale[0]))
                .add();

        List<Variant> variants = variantListBuilder.build();

        Locale locale = VariantUtil.safeSelectVariant(request, variants).map(Variant::getLanguage)
                .orElse(LocaleUtil.getDefault());

        OrderByComparator<Group> groupOrderByComparator = OrderByComparatorSelectorUtil
                .select(orderBySelector, COMPARATORS).orElseGet(GroupIdComparator::new);

        List<Group> userSitesGroups = groupService.getUserSitesGroups();

        int maxSize = pagination.getEndPosition() - pagination.getStartPosition();

        UriBuilder uriBuilder = uriInfo.getBaseUriBuilder().path("{groupId}");

        return pagination.createContainer(
                userSitesGroups.stream().skip(pagination.getStartPosition()).limit(maxSize)
                        .sorted(groupOrderByComparator)
                        .map(group -> new GroupRepr(group.getGroupId(),
                                uriBuilder.build(group.getGroupId()).toString(), group.getName(locale, true),
                                group.getFriendlyURL(), group.getType()))
                        .collect(Collectors.toList()),
                userSitesGroups.size());
    }

    /**
     * @author Carlos Sierra Andrs
     */
    public class DocumentLibraryGroupResource {

        public DocumentLibraryGroupResource(long groupId) {
            _groupId = groupId;
        }

        @GET
        @Path("/")
        @Produces({ "application/json", "application/xml" })
        public List<RepositoryRepr> getDefaultRepositoryHandler() throws PortalException {

            return ListUtil.toList(repositoryProvider.getGroupRepositories(_groupId),
                    r -> RepositoryRepr.fromRepository(r, uriInfo.getRequestUriBuilder().path("{id}")));
        }

        @Path("/{repositoryId}")
        public FolderResource getRepositoryHandler(@PathParam("repositoryId") long repositoryId)
                throws PortalException {

            UriBuilder baseUriBuilder = uriInfo.getBaseUriBuilder();

            return new FolderResource(dlAppService, _groupId, repositoryProvider.getRepository(repositoryId),
                    uriInfo.getRequestUriBuilder(),
                    baseUriBuilder.clone().path(DocumentLibraryRootResource.class, "getFolderResource"),
                    baseUriBuilder.clone().path(DocumentLibraryRootResource.class, "getFileResource"));
        }

        private final long _groupId;

    }

    @Reference
    protected DLAppService dlAppService;

    @Reference
    protected GroupService groupService;

    @Reference
    protected RepositoryProvider repositoryProvider;

    @Context
    protected UriInfo uriInfo;

}