package femr.ui.controllers.superuser; import com.google.inject.Inject; import femr.business.services.core.ISessionService; import femr.business.services.core.ITabService; import femr.common.dtos.CurrentUser; import femr.common.dtos.ServiceResponse; import femr.common.models.TabFieldItem; import femr.common.models.TabItem; import femr.data.models.mysql.Roles; import femr.ui.helpers.security.AllowedRoles; import femr.ui.helpers.security.FEMRAuthenticated; import femr.ui.models.superuser.ContentViewModelGet; import femr.ui.models.superuser.ContentViewModelPost; import femr.ui.models.superuser.TabsViewModelGet; import femr.ui.models.superuser.TabsViewModelPost; import femr.util.stringhelpers.StringUtils; import play.data.Form; import play.data.FormFactory; import play.mvc.Controller; import play.mvc.Result; import play.mvc.Security; import femr.ui.views.html.superuser.tabs.manage; import femr.ui.views.html.superuser.tabs.fields; import java.util.List; @Security.Authenticated(FEMRAuthenticated.class) @AllowedRoles({Roles.SUPERUSER}) public class TabController extends Controller { private final FormFactory formFactory; private final ITabService tabService; private final ISessionService sessionService; @Inject public TabController(FormFactory formFactory, ITabService tabService, ISessionService sessionService) { this.formFactory = formFactory; this.tabService = tabService; this.sessionService = sessionService; } public Result manageGet() { CurrentUser currentUser = sessionService.retrieveCurrentUserSession(); ServiceResponse<List<TabItem>> response; response = tabService.retrieveCustomTabs(false); if (response.hasErrors()) { throw new RuntimeException(); } TabsViewModelGet viewModelGet = new TabsViewModelGet(); viewModelGet.setCurrentTabs(response.getResponseObject()); //get deleted tabs response = tabService.retrieveCustomTabs(true); if (response.hasErrors()) { throw new RuntimeException(); } viewModelGet.setDeletedTabs(response.getResponseObject()); return ok(manage.render(currentUser, viewModelGet)); } public Result managePost() { CurrentUser currentUser = sessionService.retrieveCurrentUserSession(); final Form<TabsViewModelPost> TabsViewModelForm = formFactory.form(TabsViewModelPost.class); TabsViewModelPost viewModelPost = TabsViewModelForm.bindFromRequest().get(); //becomes new or edit if (StringUtils.isNotNullOrWhiteSpace(viewModelPost.getAddTabName())) { TabItem tabItem = new TabItem(); //new if (!tabService.doesTabExist(viewModelPost.getAddTabName()).getResponseObject()) { tabItem.setName(viewModelPost.getAddTabName()); if (viewModelPost.getAddTabLeft() != null) tabItem.setLeftColumnSize(viewModelPost.getAddTabLeft()); if (viewModelPost.getAddTabRight() != null) tabItem.setRightColumnSize(viewModelPost.getAddTabRight()); ServiceResponse<TabItem> response = tabService.createTab(tabItem, currentUser.getId()); if (response.hasErrors()) { throw new RuntimeException(); } } else {//edit if (viewModelPost.getAddTabLeft() == null) tabItem.setLeftColumnSize(0); else tabItem.setLeftColumnSize(viewModelPost.getAddTabLeft()); if (viewModelPost.getAddTabRight() == null) tabItem.setRightColumnSize(0); else tabItem.setRightColumnSize(viewModelPost.getAddTabRight()); tabItem.setName(viewModelPost.getAddTabName()); ServiceResponse<TabItem> response = tabService.updateTab(tabItem, currentUser.getId()); if (response.hasErrors()) { throw new RuntimeException(); } } } //becomes toggle if (StringUtils.isNotNullOrWhiteSpace(viewModelPost.getDeleteTab())) { ServiceResponse<TabItem> response = tabService.toggleTab(viewModelPost.getDeleteTab()); if (response.hasErrors()) { throw new RuntimeException(); } } return redirect("/superuser/tabs"); } //name = tab name public Result fieldsGet(String name) { CurrentUser currentUser = sessionService.retrieveCurrentUserSession(); ContentViewModelGet viewModelGet = new ContentViewModelGet(); viewModelGet.setName(name); //get current custom fields ServiceResponse<List<TabFieldItem>> currentFieldItemsResponse = tabService.retrieveTabFieldsByTabName(name, false); if (currentFieldItemsResponse.hasErrors()) { throw new RuntimeException(); } viewModelGet.setCurrentCustomFieldItemList(currentFieldItemsResponse.getResponseObject()); //get removed custom fields ServiceResponse<List<TabFieldItem>> removedFieldItemsResponse = tabService.retrieveTabFieldsByTabName(name, true); if (currentFieldItemsResponse.hasErrors()) { throw new RuntimeException(); } viewModelGet.setRemovedCustomFieldItemList(removedFieldItemsResponse.getResponseObject()); //get available field types ServiceResponse<List<String>> fieldTypesResponse = tabService.retrieveTypes(); if (fieldTypesResponse.hasErrors()) { throw new RuntimeException(); } viewModelGet.setCustomFieldTypes(fieldTypesResponse.getResponseObject()); //get available fields sizes ServiceResponse<List<String>> fieldSizesResponse = tabService.retrieveSizes(); if (fieldSizesResponse.hasErrors()) { throw new RuntimeException(); } viewModelGet.setCustomFieldSizes(fieldSizesResponse.getResponseObject()); return ok(fields.render(currentUser, viewModelGet)); } //name = tab name public Result fieldsPost(String name) { CurrentUser currentUser = sessionService.retrieveCurrentUserSession(); final Form<ContentViewModelPost> ContentViewModelForm = formFactory.form(ContentViewModelPost.class); ContentViewModelPost viewModelPost = ContentViewModelForm.bindFromRequest().get(); //adding/editing a field if (StringUtils.isNotNullOrWhiteSpace(viewModelPost.getAddName()) && StringUtils.isNotNullOrWhiteSpace(viewModelPost.getAddSize()) && StringUtils.isNotNullOrWhiteSpace(viewModelPost.getAddType())) { TabFieldItem tabFieldItem = new TabFieldItem(); tabFieldItem.setName(viewModelPost.getAddName()); tabFieldItem.setSize(viewModelPost.getAddSize().toLowerCase()); tabFieldItem.setType(viewModelPost.getAddType().toLowerCase()); tabFieldItem.setOrder(viewModelPost.getAddOrder()); tabFieldItem.setPlaceholder(viewModelPost.getAddPlaceholder()); //edit if (tabService.doesTabFieldExist(viewModelPost.getAddName()).getResponseObject()) { tabService.updateTabField(tabFieldItem); } else { ServiceResponse<TabFieldItem> response = tabService.createTabField(tabFieldItem, currentUser.getId(), name); if (response.hasErrors()) { throw new RuntimeException(); } } } //deactivating a field if (StringUtils.isNotNullOrWhiteSpace(viewModelPost.getToggleName())) { ServiceResponse<TabFieldItem> response = tabService.toggleTabField(viewModelPost.getToggleName(), name); if (response.hasErrors()) { throw new RuntimeException(); } } return redirect("/superuser/tabs/" + name); } }