All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.formkiq.server.api.FoldersController Maven / Gradle / Ivy

There is a newer version: 0.6.1
Show newest version
/*
 * Copyright (C) 2016 FormKiQ Inc.
 *
 * 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 com.formkiq.server.api;

import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN;
import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static javax.servlet.http.HttpServletResponse.SC_UNAUTHORIZED;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
import static org.springframework.web.bind.annotation.RequestMethod.POST;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.formkiq.server.domain.type.FolderDTO;
import com.formkiq.server.domain.type.FolderListDTO;
import com.formkiq.server.service.FolderService;
import com.formkiq.server.service.SpringSecurityService;

import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

/**
 * FoldersController rest services.
 *
 */
@RestController
public class FoldersController extends AbstractRestController {

    /** GET url. */
    public static final String API_FOLDER_GET      = "/api/folders/get";
    /** SAVE url. */
    public static final String API_FOLDER_SAVE      = "/api/folders/save";
    /** List Folder url. */
    public static final String API_FOLDER_LIST      = "/api/folders/list";
    /** Delete Folder url. */
    public static final String API_FOLDER_DELETE      = "/api/folders/delete";

    /** FolderService. */
    @Autowired
    private FolderService folderservice;

    /** SpringSecurityService. */
    @Autowired
    private SpringSecurityService securityService;

    /**
     * Delete Folder.
     * @param request {@link HttpServletRequest}
     * @param folder {@link String}
     * @return {@link ApiMessageResponse}
     */
    @ApiOperation(value = "delete", nickname = "Folder Delete")
    @ApiResponses(value = {
            @ApiResponse(code = SC_OK, message = "Success",
                    response = ApiMessageResponse.class),
            @ApiResponse(code = SC_UNAUTHORIZED, message = "Unauthorized"),
            @ApiResponse(code = SC_FORBIDDEN, message = "Forbidden"),
            @ApiResponse(code = SC_NOT_FOUND, message = "Not Found"),
            @ApiResponse(code = SC_INTERNAL_SERVER_ERROR,
                    message = "Failure") })
    @Transactional
    @RequestMapping(value = API_FOLDER_DELETE, method = POST)
    public ApiMessageResponse deleteFolder(
            final HttpServletRequest request,
            @RequestParam(value = "folder", required = true)
            final String folder) {

        getApiVersion(request);

        UserDetails user = this.securityService.getUserDetails();
        this.folderservice.deleteFolder(user, folder);

        return new ApiMessageResponse("Folder deleted");
    }

    /**
     * Get Folder.
     * @param request {@link HttpServletRequest}
     * @param email {@link String}
     * @param folder {@link String}
     * @return {@link ApiMessageResponse}
     */
    @ApiOperation(value = "get", nickname = "Folder Get")
    @ApiResponses(value = {
            @ApiResponse(code = SC_OK, message = "Success",
                    response = FolderDTO.class),
            @ApiResponse(code = SC_UNAUTHORIZED, message = "Unauthorized"),
            @ApiResponse(code = SC_FORBIDDEN, message = "Forbidden"),
            @ApiResponse(code = SC_NOT_FOUND, message = "Not Found"),
            @ApiResponse(code = SC_INTERNAL_SERVER_ERROR,
                    message = "Failure") })

    @Transactional
    @RequestMapping(value = API_FOLDER_GET, method = GET)
    public FolderDTO get(
            final HttpServletRequest request,
            @RequestParam(value = "email", required = false)
            final String email,
            @RequestParam(value = "folder", required = true)
            final String folder) {

        getApiVersion(request);

        UserDetails user = this.securityService.getUserDetailsByEmail(email);
        return this.folderservice.findFolder(user, folder);
    }

    /**
     * Get folder list for user.
     * @param request {@link HttpServletRequest}
     * @param email {@link String}
     * @param nextToken {@link String}
     * @return {@link FolderListDTO}
     */
    @ApiOperation(value = "list", nickname = "Folder List")
    @ApiResponses(value = {
            @ApiResponse(code = SC_OK, message = "Success",
                    response = FolderListDTO.class),
            @ApiResponse(code = SC_UNAUTHORIZED, message = "Unauthorized"),
            @ApiResponse(code = SC_FORBIDDEN, message = "Forbidden"),
            @ApiResponse(code = SC_NOT_FOUND, message = "Not Found"),
            @ApiResponse(code = SC_INTERNAL_SERVER_ERROR,
                    message = "Failure") })
    @Transactional
    @RequestMapping(value = API_FOLDER_LIST, method = GET)
    public FolderListDTO list(
            final HttpServletRequest request,
            @RequestParam(value = "email", required = false)
            final String email,
            @RequestParam(value = "nexttoken", required = false)
            final String nextToken) {

        getApiVersion(request);
        // TODO add sort...
        UserDetails user = this.securityService.getUserDetailsByEmail(email);

        return this.folderservice.getFolderList(user, nextToken);
    }

    /**
     * Add Folder.
     * @param request {@link HttpServletRequest}
     * @param email {@link String}
     * @param folder {@link String}
     * @param foldername {@link String}
     * @return {@link ApiMessageResponse}
     */
    @ApiOperation(value = "save", nickname = "Folder Save")
    @ApiResponses(value = {
            @ApiResponse(code = SC_OK, message = "Success",
                    response = ApiMessageResponse.class),
            @ApiResponse(code = SC_UNAUTHORIZED, message = "Unauthorized"),
            @ApiResponse(code = SC_FORBIDDEN, message = "Forbidden"),
            @ApiResponse(code = SC_NOT_FOUND, message = "Not Found"),
            @ApiResponse(code = SC_INTERNAL_SERVER_ERROR,
                    message = "Failure") })

    @Transactional
    @RequestMapping(value = API_FOLDER_SAVE, method = POST)
    public ApiMessageResponse saveFolder(
            final HttpServletRequest request,
            @RequestParam(value = "email", required = false)
            final String email,
            @RequestParam(value = "folder", required = false)
            final String folder,
            @RequestParam(value = "foldername", required = true)
            final String foldername) {

        getApiVersion(request);

        String msg = StringUtils.isEmpty(folder) ? "Folder added"
                : "Folder updated";

        UserDetails user = this.securityService.getUserDetailsByEmail(email);

        UUID folderUUID = this.folderservice.saveFolder(user, folder,
                foldername);

        return new ApiMessageResponse(msg, folderUUID.toString());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy