package org.bonitasoft.livingapps; import java.util.List; import org.bonitasoft.engine.api.ApplicationAPI; import org.bonitasoft.engine.api.PageAPI; import org.bonitasoft.engine.api.ProfileAPI; import org.bonitasoft.engine.business.application.Application; import org.bonitasoft.engine.business.application.ApplicationMenuSearchDescriptor; import org.bonitasoft.engine.business.application.ApplicationPageNotFoundException; import org.bonitasoft.engine.exception.SearchException; import org.bonitasoft.engine.page.Page; import org.bonitasoft.engine.page.PageNotFoundException; import org.bonitasoft.engine.profile.Profile; import org.bonitasoft.engine.profile.ProfileCriterion; import org.bonitasoft.engine.search.Order; import org.bonitasoft.engine.search.SearchOptionsBuilder; import org.bonitasoft.engine.session.APISession; import org.bonitasoft.livingapps.menu.Menu; import org.bonitasoft.livingapps.menu.MenuFactory; public class ApplicationModel { private final ProfileAPI profileApi; private final ApplicationAPI applicationApi; private final PageAPI pageApi; private final Application application; private final MenuFactory factory; public ApplicationModel( final ApplicationAPI applicationApi, final PageAPI pageApi, final ProfileAPI profileApi, final Application application, final MenuFactory factory) { this.applicationApi = applicationApi; this.pageApi = pageApi; this.profileApi = profileApi; this.application = application; this.factory = factory; } public long getId() { return application.getId(); } public String getApplicationLayoutName() throws PageNotFoundException { return pageApi.getPage(application.getLayoutId()).getName(); } public String getApplicationThemeName() throws PageNotFoundException { return pageApi.getPage(application.getThemeId()).getName(); } public String getApplicationHomePage() throws ApplicationPageNotFoundException { return applicationApi.getApplicationHomePage(application.getId()).getToken() + "/"; } public boolean hasPage(final String pageToken) { try { applicationApi.getApplicationPage(application.getToken(), pageToken); return true; } catch (final ApplicationPageNotFoundException e) { return false; } } public boolean authorize(final APISession session) { for (final Profile userProfile : getUserProfiles(session)) { if (userProfile.getId() == application.getProfileId()) { return true; } } return false; } public boolean hasProfileMapped() { return application.getProfileId() != null; } private List<Profile> getUserProfiles(final APISession session) { return profileApi.getProfilesForUser( session.getUserId(), 0, Integer.MAX_VALUE, ProfileCriterion.ID_ASC); } public Page getCustomPage(final String pageToken) throws ApplicationPageNotFoundException, PageNotFoundException { return pageApi.getPage(applicationApi.getApplicationPage(application.getToken(), pageToken).getPageId()); } public List<Menu> getMenuList() throws SearchException, ApplicationPageNotFoundException { return factory.create(applicationApi.searchApplicationMenus(new SearchOptionsBuilder(0, Integer.MAX_VALUE) .filter(ApplicationMenuSearchDescriptor.APPLICATION_ID, application.getId()) .sort(ApplicationMenuSearchDescriptor.INDEX, Order.ASC).done()) .getResult()); } }