/**
* 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.applicationmenu;
import java.util.List;
import java.util.Map;
import org.bonitasoft.engine.api.ApplicationAPI;
import org.bonitasoft.engine.business.application.ApplicationMenu;
import org.bonitasoft.engine.exception.SearchException;
import org.bonitasoft.engine.search.SearchResult;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.web.rest.model.applicationmenu.ApplicationMenuItem;
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 Julien Mege
*
*/
public class ApplicationMenuDataStore extends CommonDatastore<ApplicationMenuItem, ApplicationMenu> implements DatastoreHasAdd<ApplicationMenuItem>,
DatastoreHasUpdate<ApplicationMenuItem>,
DatastoreHasGet<ApplicationMenuItem>, DatastoreHasSearch<ApplicationMenuItem>, DatastoreHasDelete {
private final ApplicationAPI applicationAPI;
private final ApplicationMenuItemConverter converter;
public ApplicationMenuDataStore(final APISession engineSession, final ApplicationAPI applicationAPI, final ApplicationMenuItemConverter converter) {
super(engineSession);
this.applicationAPI = applicationAPI;
this.converter = converter;
}
@Override
public ApplicationMenuItem add(final ApplicationMenuItem item) {
try {
final ApplicationMenu applicationMenu = applicationAPI.createApplicationMenu(converter.toApplicationMenuCreator(item));
return converter.toApplicationMenuItem(applicationMenu);
} catch (final Exception e) {
throw new APIException(e);
}
}
@Override
public ApplicationMenuItem update(final APIID id, final Map<String, String> attributes) {
try {
final ApplicationMenu applicationMenu = applicationAPI.updateApplicationMenu(id.toLong(), converter.toApplicationMenuUpdater(attributes));
return converter.toApplicationMenuItem(applicationMenu);
} catch (final Exception e) {
throw new APIException(e);
}
}
@Override
public ApplicationMenuItem get(final APIID id) {
try {
final ApplicationMenu applicationMenu = applicationAPI.getApplicationMenu(id.toLong());
return converter.toApplicationMenuItem(applicationMenu);
} catch (final Exception e) {
throw new APIException(e);
}
}
@Override
public void delete(final List<APIID> ids) {
try {
for (final APIID id : ids) {
applicationAPI.deleteApplicationMenu(id.toLong());
}
} catch (final Exception e) {
throw new APIException(e);
}
}
protected ApplicationMenuSearchDescriptorConverter getSearchDescriptorConverter() {
return new ApplicationMenuSearchDescriptorConverter();
}
@Override
protected ApplicationMenuItem convertEngineToConsoleItem(final ApplicationMenu item) {
return new ApplicationMenuItemConverter().toApplicationMenuItem(item);
}
@Override
public ItemSearchResult<ApplicationMenuItem> search(final int page, final int resultsByPage, final String search, final String orders,
final Map<String, String> filters) {
final SearchOptionsCreator creator = makeSearchOptionCreator(page, resultsByPage, search, orders, filters);
try {
final SearchResult<ApplicationMenu> searchResult = runSearch(creator);
final List<ApplicationMenuItem> appMenuItems = convertEngineToConsoleItemsList(searchResult.getResult());
return new ItemSearchResult<ApplicationMenuItem>(page, resultsByPage, searchResult.getCount(),
appMenuItems);
} 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 ApplicationMenuFilterCreator(getSearchDescriptorConverter())));
}
protected SearchResult<ApplicationMenu> runSearch(final SearchOptionsCreator creator) throws SearchException {
return applicationAPI.searchApplicationMenus(creator.create());
}
}