/**
* Copyright (C) 2013 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.bpm.process;
import static org.bonitasoft.web.rest.model.bpm.process.ProcessConnectorDependencyItem.ATTRIBUTE_CONNECTOR_NAME;
import static org.bonitasoft.web.rest.model.bpm.process.ProcessConnectorDependencyItem.ATTRIBUTE_CONNECTOR_VERSION;
import static org.bonitasoft.web.rest.model.bpm.process.ProcessConnectorDependencyItem.ATTRIBUTE_PROCESS_ID;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.bonitasoft.console.common.server.utils.ListUtil;
import org.bonitasoft.engine.api.ProcessAPI;
import org.bonitasoft.engine.api.TenantAPIAccessor;
import org.bonitasoft.engine.bpm.connector.ConnectorImplementationDescriptor;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.web.rest.model.bpm.process.ProcessConnectorDependencyItem;
import org.bonitasoft.web.rest.server.datastore.CommonDatastore;
import org.bonitasoft.web.rest.server.framework.api.DatastoreHasSearch;
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.common.util.MapUtil;
/**
* @author Séverin Moussel
*
*/
public class ProcessConnectorDependencyDatastore extends CommonDatastore<ProcessConnectorDependencyItem, ConnectorImplementationDescriptor> implements
DatastoreHasSearch<ProcessConnectorDependencyItem>
{
public ProcessConnectorDependencyDatastore(final APISession engineSession) {
super(engineSession);
}
protected ProcessAPI getProcessAPI() {
try {
return TenantAPIAccessor.getProcessAPI(getEngineSession());
} catch (Exception e) {
throw new APIException(e);
}
}
@Override
@SuppressWarnings("unchecked")
public ItemSearchResult<ProcessConnectorDependencyItem> search(final int page, final int resultsByPage,
final String search, final String orders, final Map<String, String> filters) {
try {
final Long processId = MapUtil.getValueAsLong(filters, ATTRIBUTE_PROCESS_ID);
final String connectorName = filters.get(ATTRIBUTE_CONNECTOR_NAME);
final String connectorVersion = filters.get(ATTRIBUTE_CONNECTOR_VERSION);
// Get connector definition
final ConnectorImplementationDescriptor connectorImplementation =
getProcessAPI().getConnectorImplementation(processId, connectorName, connectorVersion);
// If connector definition doesn't exists returns an empty resultset
if (connectorImplementation == null) {
return new ItemSearchResult<ProcessConnectorDependencyItem>(page, 0, 0, new ArrayList<ProcessConnectorDependencyItem>());
}
// Get Jar from definition and Simulate pagination
final List<String> jarDependencies = connectorImplementation.getJarDependencies();
final List<String> dependencies = (List<String>) ListUtil.paginate(jarDependencies, page, resultsByPage);
// Convert to consoleItem
final List<ProcessConnectorDependencyItem> results =
convertEngineToConsoleItems(processId, connectorName, connectorVersion, dependencies);
return new ItemSearchResult<ProcessConnectorDependencyItem>(page, results.size(), jarDependencies.size(), results);
} catch (final Exception e) {
throw new APIException(e);
}
}
private List<ProcessConnectorDependencyItem> convertEngineToConsoleItems(final Long processId,
final String connectorName, final String connectorVersion, final List<String> dependencies) {
final List<ProcessConnectorDependencyItem> results = new ArrayList<ProcessConnectorDependencyItem>();
for (final String filename : dependencies) {
final ProcessConnectorDependencyItem dependencyItem =
convertEngineToConsoleItem(processId, connectorName, connectorVersion, filename);
results.add(dependencyItem);
}
return results;
}
private ProcessConnectorDependencyItem convertEngineToConsoleItem(final Long processId, final String connectorName,
final String connectorVersion, final String filename) {
final ProcessConnectorDependencyItem dependencyItem = new ProcessConnectorDependencyItem();
dependencyItem.setProcessId(processId);
dependencyItem.setConnectorName(connectorName);
dependencyItem.setConnectorVersion(connectorVersion);
dependencyItem.setFilename(filename);
return dependencyItem;
}
@Override
protected ProcessConnectorDependencyItem convertEngineToConsoleItem(final ConnectorImplementationDescriptor item) {
// Not used. Engine item is not fully populated
return null;
}
}