blob: d5424454518f640f585c534c66fcc92d8000af68 [file] [log] [blame]
package org.eclipse.osbp.dsl.dto.lib.services.impl;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import javax.persistence.LockModeType;
import org.eclipse.osbp.jpa.services.filters.LAnd;
import org.eclipse.osbp.jpa.services.filters.LCompare;
import org.eclipse.osbp.runtime.common.annotations.DtoUtils;
import org.eclipse.osbp.runtime.common.filter.IJPQL;
import org.eclipse.osbp.runtime.common.filter.ILFilter;
import org.eclipse.osbp.runtime.common.filter.IQuery;
public abstract class AbstractDTOHistorizedService<DTO, ENTITY> extends AbstractDTOService<DTO, ENTITY>
implements org.eclipse.osbp.runtime.common.filter.IDTOHistorizedService<DTO> {
protected boolean ignoreHistorizedFilter = false;
public boolean isIgnoreHistorizedFilter() {
return ignoreHistorizedFilter;
}
public void setIgnoreHistorizedFilter(boolean ignoreHistorizedFilter) {
this.ignoreHistorizedFilter = ignoreHistorizedFilter;
}
@Override
public DTO get(final Object id, Object ui, LockModeType lockModeType) {
DTO dto = super.get(id, ui, lockModeType);
if(dto != null && DtoUtils.isHistCurrent(dto)) {
return dto;
}
return null;
}
@Override
public DTO get(final Object id) {
DTO dto = super.get(id);
if(dto != null && DtoUtils.isHistCurrent(dto)) {
return dto;
}
return null;
}
private List<DTO> filterHistCollection(Collection<DTO> collection) {
return collection.stream().filter(dto->dto != null && (ignoreHistorizedFilter || DtoUtils.isHistCurrent(dto))).collect(Collectors.toList());
// List<DTO> result = new ArrayList<DTO>();
// for(DTO dto:collection) {
// if(dto != null && DtoUtils.isHistCurrent(dto)) {
// result.add(dto);
// }
// }
// return result;
}
@Override
public Collection<DTO> find(IQuery query, Object ui, LockModeType lockModeType) {
return filterHistCollection(super.find(query, ui, lockModeType));
}
@Override
public Collection<DTO> find(IQuery query) {
return filterHistCollection(super.find(query));
}
@Override
public Collection<DTO> find(IQuery query, int startIndex, Object ui, LockModeType lockModeType) {
return filterHistCollection(super.find(query, startIndex, ui, lockModeType));
}
@Override
public Collection<DTO> find(IQuery query, int startIndex) {
return filterHistCollection(super.find(query, startIndex));
}
@Override
public Collection<DTO> findDtos(IJPQL jpql) {
return filterHistCollection(super.findDtos(jpql));
}
private IQuery filterHistQuery(IQuery query) {
if(ignoreHistorizedFilter) {
return query;
}
Field currentHistField = DtoUtils.getHistCurrentField(getDtoClass());
ILFilter histFilter = new LCompare.Equal(currentHistField.getName(), 1);
ILFilter filter = query.getFilter();
if (filter == null) {
query.replaceFilter(histFilter);
}
else {
query.replaceFilter(new LAnd(histFilter, filter));
}
return query;
}
@Override
public int size(IQuery query) {
return super.size(filterHistQuery(query));
}
@Override
public int size(IQuery query, Object ui, LockModeType lockModeType) {
return super.size(filterHistQuery(query), ui, lockModeType);
}
@Override
public boolean contains(Object dto, IQuery query) {
return super.contains(dto, filterHistQuery(query));
}
@Override
public boolean contains(Object dto, IQuery query, Object ui, LockModeType lockModeType) {
return super.contains(dto, filterHistQuery(query), ui, lockModeType);
}
@Override
public boolean contains(IQuery query) {
return super.contains(filterHistQuery(query));
}
@Override
public boolean contains(IQuery query, Object ui, LockModeType lockModeType) {
return super.contains(filterHistQuery(query), ui, lockModeType);
}
@Override
public DTO getNext(DTO dto, IQuery query) {
return super.getNext(dto, filterHistQuery(query));
}
@Override
public DTO getNext(DTO dto, IQuery query, Object ui, LockModeType lockModeType) {
return super.getNext(dto, filterHistQuery(query), ui, lockModeType);
}
@Override
public DTO getPrevious(DTO dto, IQuery query) {
return super.getPrevious(dto, filterHistQuery(query));
}
@Override
public DTO getPrevious(DTO dto, IQuery query, Object ui, LockModeType lockModeType) {
return super.getNext(dto, filterHistQuery(query), ui, lockModeType);
}
@Override
public DTO getFirst(IQuery query) {
return super.getFirst(filterHistQuery(query));
}
@Override
public DTO getFirst(IQuery query, Object ui, LockModeType lockModeType) {
return super.getFirst(filterHistQuery(query), ui, lockModeType);
}
@Override
public DTO getLast(IQuery query) {
return super.getLast(filterHistQuery(query));
}
@Override
public DTO getLast(IQuery query, Object ui, LockModeType lockModeType) {
return super.getLast(filterHistQuery(query), ui, lockModeType);
}
@Override
public boolean isFirst(DTO dto, IQuery query) {
return super.isFirst(dto, filterHistQuery(query));
}
@Override
public boolean isFirst(DTO dto, IQuery query, Object ui, LockModeType lockModeType) {
return super.isFirst(dto, filterHistQuery(query), ui, lockModeType);
}
@Override
public boolean isLast(DTO dto, IQuery query) {
return super.isLast(dto, filterHistQuery(query));
}
@Override
public boolean isLast(DTO dto, IQuery query, Object ui, LockModeType lockModeType) {
return super.isLast(dto, filterHistQuery(query), ui, lockModeType);
}
@Override
public int indexOf(DTO dto, IQuery query) {
return super.indexOf(dto, filterHistQuery(query));
}
@Override
public DTO getByIndex(int index, IQuery query) {
return super.getByIndex(index, filterHistQuery(query));
}
@Override
public DTO getByIndex(int index, IQuery query, Object ui, LockModeType lockModeType) {
return super.getByIndex(index, filterHistQuery(query), ui, lockModeType);
}
@Override
public List<DTO> getByIndex(int startIndex, int numberOfItems, IQuery query) {
return super.getByIndex(startIndex, numberOfItems, filterHistQuery(query));
}
@Override
public List<DTO> getByIndex(int startIndex, int numberOfItems, IQuery query, Object ui, LockModeType lockModeType) {
return super.getByIndex(startIndex, numberOfItems, filterHistQuery(query), ui, lockModeType);
}
/**
* Enhance filter.
*
* @param query
* the query
*/
@SuppressWarnings("unchecked")
@Override
protected void enhanceFilter(IQuery query) {
super.enhanceFilter(filterHistQuery(query));
}
}