/**
* Copyright (C) 2012 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;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.bonitasoft.engine.search.SearchOptionsBuilder;
import org.bonitasoft.engine.search.SearchResult;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.web.rest.server.framework.api.Datastore;
import org.bonitasoft.web.rest.server.framework.api.EnumConverter;
import org.bonitasoft.web.rest.server.framework.search.ItemSearchResult;
import org.bonitasoft.web.toolkit.client.data.item.IItem;
/**
* @author Julien Mege
*/
public abstract class CommonDatastore<C extends IItem, E extends Serializable> extends Datastore {
private APISession engineSession;
/**
* Default Constructor.
*
* @param engineSession
* The session that will allow to access the engine SDK
*/
public CommonDatastore(final APISession engineSession) {
this.engineSession = engineSession;
}
/**
* @return the engineSession
*/
protected final APISession getEngineSession() {
return this.engineSession;
}
public final void setEngineSession(final APISession engineSession) {
this.engineSession = engineSession;
}
/**
* @param filters
* @param builder
* @param filterName
* @param engineAttributeName
*/
protected void addStringFilterToSearchBuilder(final Map<String, String> filters, final SearchOptionsBuilder builder, final String filterName,
final String engineAttributeName) {
if (filters != null && filters.containsKey(filterName)) {
final String filterValue = filters.get(filterName);
if (filterValue != null) {
if (filterValue.startsWith(">")) {
builder.greaterThan(engineAttributeName, getFilterValueWithoutFirstCharacter(filterValue));
} else if (filterValue.startsWith("<")) {
builder.lessThan(engineAttributeName, getFilterValueWithoutFirstCharacter(filterValue));
} else {
builder.filter(engineAttributeName, filterValue);
}
}
}
}
private String getFilterValueWithoutFirstCharacter(final String filterValue) {
return filterValue.substring(1).trim();
}
protected void addLongFilterToSearchBuilder(final Map<String, String> filters, final SearchOptionsBuilder builder, final String filterName,
final String engineAttributeName) {
if (filters != null && filters.containsKey(filterName)) {
final String filterValue = filters.get(filterName);
if (filterValue != null) {
if (filterValue.startsWith(">")) {
builder.greaterThan(engineAttributeName, Long.valueOf(getFilterValueWithoutFirstCharacter(filterValue)));
} else if (filterValue.startsWith("<")) {
builder.lessThan(engineAttributeName, Long.valueOf(getFilterValueWithoutFirstCharacter(filterValue)));
} else {
builder.filter(engineAttributeName, Long.valueOf(filterValue));
}
}
}
}
protected void addFilterToSearchBuilder(final Map<String, String> filters, final SearchOptionsBuilder builder, final String filterName,
final String engineAttributeName, final EnumConverter<?> converter) {
if (filters.containsKey(filterName)) {
builder.filter(engineAttributeName, converter.convert(filters.get(filterName)));
}
}
protected abstract C convertEngineToConsoleItem(E item);
protected ItemSearchResult<C> convertEngineToConsoleSearch(final int page, final int resultsByPage, final SearchResult<E> engineSearchResults) {
return new ItemSearchResult<C>(
page,
resultsByPage,
engineSearchResults.getCount(),
convertEngineToConsoleItemsList(engineSearchResults.getResult()));
}
protected List<C> convertEngineToConsoleItemsList(final List<E> engineSearchResults) {
final List<C> consoleSearchResults = new ArrayList<C>();
for (final E engineItem : engineSearchResults) {
consoleSearchResults.add(convertEngineToConsoleItem(engineItem));
}
return consoleSearchResults;
}
}