package com.intrbiz.bergamot.ui.api; import java.util.UUID; import com.intrbiz.balsa.engine.route.Router; import com.intrbiz.balsa.metadata.WithDataAdapter; import com.intrbiz.bergamot.config.model.ServiceCfg; import com.intrbiz.bergamot.data.BergamotDB; import com.intrbiz.bergamot.metadata.IgnoreBinding; import com.intrbiz.bergamot.metadata.IsaObjectId; import com.intrbiz.bergamot.model.Service; import com.intrbiz.bergamot.model.Site; import com.intrbiz.bergamot.model.message.ServiceMO; import com.intrbiz.bergamot.model.message.state.CheckStateMO; import com.intrbiz.bergamot.ui.BergamotApp; import com.intrbiz.metadata.Get; import com.intrbiz.metadata.JSON; import com.intrbiz.metadata.Prefix; import com.intrbiz.metadata.RequireValidPrincipal; import com.intrbiz.metadata.Var; import com.intrbiz.metadata.XML; @Prefix("/api/service") @RequireValidPrincipal() public class ServiceAPIRouter extends Router<BergamotApp> { @Get("/name/:host/:name") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public ServiceMO getServiceByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Service service = notNull(db.getServiceOnHostByName(site.getId(), hostName, name)); require(permission("read", service)); return service.toMO(currentPrincipal()); } @Get("/id/:id") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public ServiceMO getService(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("read", service)); return service.toMO(currentPrincipal()); } @Get("/id/:id/state") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public CheckStateMO getServiceState(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("read", service)); return service.getState().toMO(currentPrincipal()); } @Get("/name/:host/:name/state") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public CheckStateMO getServiceStateByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Service service = notNull(db.getServiceOnHostByName(site.getId(), hostName, name)); require(permission("read", service)); return service.getState().toMO(currentPrincipal()); } @Get("/id/:id/execute") @JSON() @WithDataAdapter(BergamotDB.class) public String executeService(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("execute", service)); action("execute-check", service); return "Ok"; } @Get("/id/:id/suppress") @JSON() @WithDataAdapter(BergamotDB.class) public String suppressService(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("suppress", service)); action("suppress-check", service); return "Ok"; } @Get("/id/:id/unsuppress") @JSON() @WithDataAdapter(BergamotDB.class) public String unsuppressService(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("unsuppress", service)); action("unsuppress-check", service); return "Ok"; } @Get("/name/:host/:name/config.xml") @XML(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) @IgnoreBinding public ServiceCfg getServiceConfigByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Service service = notNull(db.getServiceOnHostByName(site.getId(), hostName, name)); require(permission("read.config", service)); return service.getConfiguration(); } @Get("/id/:id/config.xml") @XML(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) @IgnoreBinding public ServiceCfg getServiceConfig(BergamotDB db, @IsaObjectId() UUID id) { Service service = notNull(db.getService(id)); require(permission("read.config", service)); return service.getConfiguration(); } }