/** * Copyright (C) 2014 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.web.rest.server.datastore.application; import java.util.List; import java.util.Map; import org.bonitasoft.engine.api.ApplicationAPI; import org.bonitasoft.engine.api.PageAPI; import org.bonitasoft.engine.business.application.Application; import org.bonitasoft.engine.business.application.ApplicationCreator; import org.bonitasoft.engine.business.application.ApplicationPage; import org.bonitasoft.engine.business.application.ApplicationUpdater; import org.bonitasoft.engine.exception.SearchException; import org.bonitasoft.engine.page.Page; import org.bonitasoft.engine.search.SearchResult; import org.bonitasoft.engine.session.APISession; import org.bonitasoft.web.rest.model.application.ApplicationItem; import org.bonitasoft.web.rest.server.datastore.CommonDatastore; import org.bonitasoft.web.rest.server.datastore.filter.Filters; import org.bonitasoft.web.rest.server.datastore.utils.SearchOptionsCreator; import org.bonitasoft.web.rest.server.datastore.utils.Sorts; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasAdd; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasDelete; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasGet; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasSearch; import org.bonitasoft.web.rest.server.framework.api.DatastoreHasUpdate; import org.bonitasoft.web.rest.server.framework.search.ItemSearchResult; import org.bonitasoft.web.toolkit.client.common.exception.api.APIException; import org.bonitasoft.web.toolkit.client.data.APIID; /** * @author Elias Ricken de Medeiros * */ public class ApplicationDataStore extends CommonDatastore<ApplicationItem, Application> implements DatastoreHasAdd<ApplicationItem>, DatastoreHasUpdate<ApplicationItem>, DatastoreHasGet<ApplicationItem>,DatastoreHasSearch<ApplicationItem>, DatastoreHasDelete { private final ApplicationAPI applicationAPI; private final ApplicationItemConverter converter; private final PageAPI pageAPI; private static final String CUSTOMPAGE_HOME = "custompage_home"; public ApplicationDataStore(final APISession engineSession, final ApplicationAPI applicationAPI, final PageAPI pageAPI, final ApplicationItemConverter converter) { super(engineSession); this.applicationAPI = applicationAPI; this.pageAPI = pageAPI; this.converter = converter; } @Override public void delete(final List<APIID> ids) { try { for(final APIID id :ids){ applicationAPI.deleteApplication(id.toLong()); } } catch (final Exception e) { throw new APIException(e); } } @Override public ApplicationItem get(final APIID id) { try { final Application application = applicationAPI.getApplication(id.toLong()); return converter.toApplicationItem(application); } catch (final Exception e) { throw new APIException(e); } } @Override public ApplicationItem add(final ApplicationItem item) { try { final Page homePageDef = pageAPI.getPageByName(CUSTOMPAGE_HOME); final ApplicationCreator creator = converter.toApplicationCreator(item); final Application application = applicationAPI.createApplication(creator); final ApplicationPage appHomePage = applicationAPI.createApplicationPage(application.getId(), homePageDef.getId(), "home"); applicationAPI.setApplicationHomePage(application.getId(), appHomePage.getId()); return converter.toApplicationItem(application); }catch (final Exception e) { throw new APIException(e); } } @Override public ApplicationItem update(final APIID id, final Map<String, String> attributes) { try { final ApplicationUpdater applicationUpdater = converter.toApplicationUpdater(attributes); final Application application = applicationAPI.updateApplication(id.toLong(), applicationUpdater); return converter.toApplicationItem(application); } catch (final Exception e) { throw new APIException(e); } } @Override public ItemSearchResult<ApplicationItem> search(final int page, final int resultsByPage, final String search, final String orders, final Map<String, String> filters) { // Build search final SearchOptionsCreator creator = makeSearchOptionCreator(page, resultsByPage, search, orders, filters); // Run search depending on filters passed SearchResult<Application> searchResult; try { searchResult = runSearch(creator); // Convert to ConsoleItems return new ItemSearchResult<ApplicationItem>(page, resultsByPage, searchResult.getCount(), convertEngineToConsoleItemsList(searchResult.getResult())); } catch (final SearchException e) { throw new APIException(e); } } protected SearchOptionsCreator makeSearchOptionCreator(final int page, final int resultsByPage, final String search, final String orders, final Map<String, String> filters) { return new SearchOptionsCreator(page, resultsByPage, search, new Sorts(orders, getSearchDescriptorConverter()), new Filters(filters, new ApplicationFilterCreator(getSearchDescriptorConverter()))); } protected SearchResult<Application> runSearch(final SearchOptionsCreator creator) throws SearchException { return applicationAPI.searchApplications(creator.create()); } protected ApplicationSearchDescriptorConverter getSearchDescriptorConverter() { return new ApplicationSearchDescriptorConverter(); } @Override protected ApplicationItem convertEngineToConsoleItem(final Application item) { return new ApplicationItemConverter().toApplicationItem(item); } }