com.oneops.cms.ws.rest.MdRestController.java Source code

Java tutorial

Introduction

Here is the source code for com.oneops.cms.ws.rest.MdRestController.java

Source

/*******************************************************************************
 *  
 *   Copyright 2015 Walmart, 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.oneops.cms.ws.rest;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import com.oneops.cms.exceptions.CIValidationException;
import com.oneops.cms.exceptions.MDException;
import com.oneops.cms.md.domain.CmsClazz;
import com.oneops.cms.md.domain.CmsRelation;
import com.oneops.cms.md.service.CmsMdManager;
import com.oneops.cms.util.CmsError;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
public class MdRestController extends AbstractRestController {

    private CmsMdManager mdManager;

    public void setMdManager(CmsMdManager mdManager) {
        this.mdManager = mdManager;
    }

    @ExceptionHandler(MDException.class)
    public void handleDJExceptions(MDException e, HttpServletResponse response) throws IOException {
        sendError(response, HttpServletResponse.SC_BAD_REQUEST, e);
    }

    @ExceptionHandler(CIValidationException.class)
    public void handleCIValidationExceptions(CIValidationException e, HttpServletResponse response)
            throws IOException {
        sendError(response, HttpServletResponse.SC_BAD_REQUEST, e);
    }

    @RequestMapping(value = "/md/classes/id/{clazzId}", method = RequestMethod.GET)
    @ResponseBody
    public CmsClazz getClassById(@PathVariable int clazzId,
            @RequestParam(value = "eager", required = false) Boolean eager) {

        CmsClazz clazz = null;

        if (eager == null) {
            clazz = mdManager.getClazz(clazzId);
        } else {
            clazz = mdManager.getClazz(clazzId, eager);
        }
        if (clazz == null) {
            throw new MDException(CmsError.MD_NO_CLASS_WITH_GIVEN_ID_ERROR, "there is no class with id " + clazzId);
        }
        //reset flags so they should not be used back on update
        clazz.setFlagsToNull();
        return clazz;
    }

    @RequestMapping(value = "/md/classes", method = RequestMethod.GET)
    @ResponseBody
    public List<CmsClazz> getClasses(@RequestParam(value = "package", required = false) String packagePrefix) {
        List<CmsClazz> result = null;
        if (packagePrefix == null) {
            result = mdManager.getClazzes();
        } else {
            result = mdManager.getClazzesByPackage(packagePrefix);
        }
        for (CmsClazz clazz : result) {
            //reset flags so they should not be used back on update
            clazz.setFlagsToNull();
        }
        return result;
    }

    @RequestMapping(value = "/md/classes/{clazzName}", method = RequestMethod.GET)
    @ResponseBody
    public CmsClazz getClassByName(@PathVariable String clazzName,
            @RequestParam(value = "includeActions", required = false) Boolean includeActions) {

        CmsClazz clazz = null;

        if (includeActions != null && includeActions) {
            clazz = mdManager.getClazz(clazzName, includeActions);
        } else {
            clazz = mdManager.getClazz(clazzName);
        }

        if (clazz == null) {
            throw new MDException(CmsError.MD_NO_CLASS_WITH_GIVEN_NAME_ERROR,
                    "there is no class with name " + clazzName);
        }
        //reset flags so they should not be used back on update
        clazz.setFlagsToNull();
        return clazz;
    }

    @RequestMapping(method = RequestMethod.POST, value = "/md/classes")
    @ResponseBody
    public CmsClazz createClazz(@RequestBody CmsClazz clazz) {

        CmsClazz createdClazz = mdManager.createClazz(clazz);
        logger.debug(createdClazz.getClassId());
        return createdClazz;
    }

    @RequestMapping(method = RequestMethod.PUT, value = "/md/classes/{clazzName}")
    @ResponseBody
    public CmsClazz updateClass(@PathVariable String clazzName, @RequestBody CmsClazz clazz) {
        logger.debug(clazz.getClassName());
        CmsClazz updatedClazz = mdManager.updateClazz(clazz);
        return updatedClazz;

    }

    @RequestMapping(method = RequestMethod.DELETE, value = "/md/classes/{clazzName}")
    @ResponseBody
    public String deleteClazz(@PathVariable String clazzName) {
        mdManager.deleteClazz(clazzName, false);
        return "{\"deleted\"}";
    }

    @RequestMapping(method = RequestMethod.DELETE, value = "/md/classes/{clazzName}/{deleteAll}")
    @ResponseBody
    public String deleteClazz(@PathVariable String clazzName, @PathVariable boolean deleteAll) {
        mdManager.deleteClazz(clazzName, deleteAll);
        return "{\"deleted\"}";
    }

    @RequestMapping(method = RequestMethod.POST, value = "/md/relations")
    @ResponseBody
    public CmsRelation createRelation(@RequestBody CmsRelation relation) {
        CmsRelation createdRelation = mdManager.createRelation(relation);
        logger.debug(createdRelation.getRelationId());
        return createdRelation;
    }

    @RequestMapping(method = RequestMethod.PUT, value = "/md/relations/{relationName}")
    @ResponseBody
    public CmsRelation updateRelation(@PathVariable String relationName, @RequestBody CmsRelation relation) {
        logger.debug(relation.getRelationName());
        CmsRelation updatedRelation = mdManager.updateRelation(relation);
        return updatedRelation;

    }

    @RequestMapping(method = RequestMethod.DELETE, value = "/md/relations/{relationName}")
    @ResponseBody
    public String deleteRelation(@PathVariable String relationName) {
        mdManager.deleteRelation(relationName, false);
        return "{\"deleted\"}";

    }

    @RequestMapping(method = RequestMethod.DELETE, value = "/md/relations/{relationName}/{deleteAll}")
    @ResponseBody
    public String deleteRelationEx(@PathVariable String relationName, @PathVariable boolean deleteAll) {
        mdManager.deleteRelation(relationName, deleteAll);
        return "{\"deleted\"}";
    }

    @RequestMapping(value = "/md/relations/{relationName}", method = RequestMethod.GET)
    @ResponseBody
    public CmsRelation getRelationByName(@PathVariable String relationName) {
        CmsRelation relation = mdManager.getRelation(relationName);
        if (relation == null) {
            throw new MDException(CmsError.MD_NO_RELATION_WITH_GIVEN_NAME_ERROR,
                    "there is no relation with name " + relationName);
        }
        return relation;
    }

    @RequestMapping(value = "/md/relations", method = RequestMethod.GET)
    @ResponseBody
    public List<CmsRelation> getAllRelations() {
        return mdManager.getAllRelations();
    }

    @RequestMapping(value = "/md/cache", method = RequestMethod.GET)
    @ResponseBody
    public String getAllRelations(@RequestParam("flush") String flush) {
        if (flush != null) {
            mdManager.flushCache();
            return "{\"deleted\"}";
        }
        return "";
    }

    @RequestMapping(value = "/strtest/{str}", method = RequestMethod.GET)
    @ResponseBody
    public String get(@PathVariable String str) {
        return str;
    }

}