package com.constellio.app.ui.framework.data;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.entities.AuthorizationVO;
import com.constellio.app.ui.framework.builders.AuthorizationToVOBuilder;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.security.Authorization;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.security.AuthorizationsServices;
public class AuthorizationVODataProvider extends AbstractDataProvider {
transient RecordServices recordServices;
transient AuthorizationsServices authorizationsServices;
transient List<AuthorizationVO> authorizationVOs;
AuthorizationToVOBuilder voBuilder;
String recordId;
transient Integer size;
public AuthorizationVODataProvider(AuthorizationToVOBuilder voBuilder, ModelLayerFactory modelLayerFactory, String recordId) {
this.voBuilder = voBuilder;
init(modelLayerFactory, recordId);
}
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
ConstellioFactories constellioFactories = ConstellioFactories.getInstance();
init(constellioFactories.getModelLayerFactory(), recordId);
}
void init(ModelLayerFactory modelLayerFactory, String recordId) {
authorizationsServices = modelLayerFactory.newAuthorizationsServices();
recordServices = modelLayerFactory.newRecordServices();
authorizationVOs = listAuthorizationVOs(recordId);
}
public List<AuthorizationVO> listAuthorizationVOs(String recordId) {
authorizationVOs = new ArrayList<>();
Record record = recordServices.getDocumentById(recordId);
List<Authorization> authorizations = authorizationsServices.getRecordAuthorizations(record);
for (Authorization authorization : authorizations) {
AuthorizationVO authorizationVO = voBuilder.build(authorization);
authorizationVOs.add(authorizationVO);
}
return authorizationVOs;
}
public AuthorizationVO getAuthorizationVO(Integer index) {
AuthorizationVO authorizationVO = authorizationVOs.get(index);
return authorizationVO != null ? authorizationVO : null;
}
public int size() {
if (size == null) {
size = authorizationVOs.size();
}
return size;
}
public List<Integer> list() {
List<Integer> indexes = new ArrayList<>();
for (int i = 0; i < authorizationVOs.size(); i++) {
AuthorizationVO authorizationVO = authorizationVOs.get(i);
if (authorizationVO != null) {
indexes.add(i);
}
}
return indexes;
}
}