package org.bonitasoft.livingapps;
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.ApplicationSearchDescriptor;
import org.bonitasoft.engine.exception.SearchException;
import org.bonitasoft.engine.search.SearchOptionsBuilder;
import org.bonitasoft.engine.search.SearchResult;
import org.bonitasoft.livingapps.exception.CreationException;
import org.bonitasoft.livingapps.menu.MenuFactory;
public class ApplicationModelFactory {
private final ApplicationAPI applicationApi;
private final PageAPI customPageApi;
private final ProfileAPI profileApi;
public ApplicationModelFactory(final ApplicationAPI applicationApi, final PageAPI customPageApi, final ProfileAPI profileApi) {
this.applicationApi = applicationApi;
this.customPageApi = customPageApi;
this.profileApi = profileApi;
}
public ApplicationModel createApplicationModel(final String name) throws CreationException {
try {
final SearchResult<Application> result = applicationApi.searchApplications(
new SearchOptionsBuilder(0, 1)
.filter(ApplicationSearchDescriptor.TOKEN, name)
.done());
if (result.getCount() == 0) {
throw new CreationException("No application found with name " + name);
}
return new ApplicationModel(
applicationApi,
customPageApi,
profileApi,
result.getResult().get(0),
new MenuFactory(applicationApi));
} catch (final SearchException e) {
throw new CreationException("Error while searching for the application " + name, e);
}
}
}