/*******************************************************************************
* Copyright (C) 2014 BonitaSoft S.A.
* BonitaSoft is a trademark of BonitaSoft SA.
* This software file is BONITASOFT CONFIDENTIAL. Not For Distribution.
* For commercial licensing information, contact:
* BonitaSoft, 32 rue Gustave Eiffel – 38000 Grenoble
* or BonitaSoft US, 51 Federal Street, Suite 305, San Francisco, CA 94107
*******************************************************************************/
package org.bonitasoft.web.rest.server.api.tenant;
import java.io.File;
import java.io.IOException;
import org.bonitasoft.console.common.server.utils.UnauthorizedFolderException;
import org.bonitasoft.engine.io.IOUtil;
import org.bonitasoft.web.rest.model.tenant.BusinessDataModelDefinition;
import org.bonitasoft.web.rest.model.tenant.BusinessDataModelItem;
import org.bonitasoft.web.rest.server.api.ConsoleAPI;
import org.bonitasoft.web.rest.server.engineclient.EngineAPIAccessor;
import org.bonitasoft.web.rest.server.engineclient.EngineClientFactory;
import org.bonitasoft.web.rest.server.engineclient.TenantManagementEngineClient;
import org.bonitasoft.web.rest.server.framework.api.APIHasAdd;
import org.bonitasoft.web.toolkit.client.common.exception.api.APIException;
import org.bonitasoft.web.toolkit.client.common.exception.api.APIForbiddenException;
import org.bonitasoft.web.toolkit.client.data.item.ItemDefinition;
public class APIBusinessDataModel extends ConsoleAPI<BusinessDataModelItem> implements APIHasAdd<BusinessDataModelItem> {
/**
* protected for testing
*/
protected TenantManagementEngineClient getTenantManagementEngineClient() {
return new EngineClientFactory(new EngineAPIAccessor(getEngineSession())).createTenantManagementEngineClient();
}
@Override
public BusinessDataModelItem add(final BusinessDataModelItem businessDataModel) {
final byte[] businessDataModelContent = getBusinessDataModelContent(businessDataModel);
getTenantManagementEngineClient().uninstallBusinessDataModel();
getTenantManagementEngineClient().installBusinessDataModel(businessDataModelContent);
// return myself because get is not implemented in engine
return businessDataModel;
}
private byte[] getBusinessDataModelContent(final BusinessDataModelItem item) {
try {
return IOUtil.getAllContentFrom(new File(getCompleteTempFilePath(item.getFileUploadPath())));
} catch (final UnauthorizedFolderException e) {
throw new APIForbiddenException(e.getMessage());
} catch (final IOException e) {
throw new APIException("Can't read business data model file", e);
}
}
@Override
protected ItemDefinition<BusinessDataModelItem> defineItemDefinition() {
return new BusinessDataModelDefinition();
}
}