package com.constellio.model.services.taxonomies;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.security.Role;
import com.constellio.model.services.search.StatusFilter;
import com.constellio.model.services.search.query.ReturnedMetadatasFilter;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
public class TaxonomiesSearchOptions {
ReturnedMetadatasFilter returnedMetadatasFilter = ReturnedMetadatasFilter.idVersionSchemaTitlePath();
private int rows = 100;
private int startRow = 0;
private StatusFilter includeStatus = StatusFilter.ACTIVES;
//Only supported in the "visible" services
private boolean alwaysReturnTaxonomyConceptsWithReadAccess = false;
private String requiredAccess = Role.READ;
private boolean hasChildrenFlagCalculated = true;
private boolean showInvisibleRecordsInLinkingMode = true;
private FastContinueInfos fastContinueInfos;
private TaxonomiesSearchFilter filter;
public TaxonomiesSearchOptions() {
super();
}
public TaxonomiesSearchOptions(int rows, int startRow, StatusFilter includeStatus) {
super();
this.rows = rows;
this.startRow = startRow;
setIncludeStatus(includeStatus);
}
public TaxonomiesSearchOptions(TaxonomiesSearchOptions cloned) {
super();
this.hasChildrenFlagCalculated = cloned.hasChildrenFlagCalculated;
this.alwaysReturnTaxonomyConceptsWithReadAccess = cloned.alwaysReturnTaxonomyConceptsWithReadAccess;
this.rows = cloned.rows;
this.startRow = cloned.startRow;
this.includeStatus = cloned.includeStatus;
this.requiredAccess = cloned.requiredAccess;
this.returnedMetadatasFilter = cloned.returnedMetadatasFilter;
this.showInvisibleRecordsInLinkingMode = cloned.showInvisibleRecordsInLinkingMode;
this.fastContinueInfos = cloned.fastContinueInfos;
this.filter = cloned.filter;
}
public TaxonomiesSearchOptions(StatusFilter includeLogicallyDeleted) {
super();
this.includeStatus = includeLogicallyDeleted;
}
public FastContinueInfos getFastContinueInfos() {
return fastContinueInfos;
}
public TaxonomiesSearchOptions setFastContinueInfos(
FastContinueInfos fastContinueInfos) {
this.fastContinueInfos = fastContinueInfos;
return this;
}
public boolean isShowInvisibleRecordsInLinkingMode() {
return showInvisibleRecordsInLinkingMode;
}
public TaxonomiesSearchOptions setShowInvisibleRecordsInLinkingMode(boolean showInvisibleRecordsInLinkingMode) {
this.showInvisibleRecordsInLinkingMode = showInvisibleRecordsInLinkingMode;
return this;
}
public boolean isHasChildrenFlagCalculated() {
return hasChildrenFlagCalculated;
}
public TaxonomiesSearchOptions setHasChildrenFlagCalculated(boolean hasChildrenFlagCalculated) {
this.hasChildrenFlagCalculated = hasChildrenFlagCalculated;
return this;
}
public int getRows() {
return rows;
}
public TaxonomiesSearchOptions setRows(int rows) {
if (rows > 10000) {
throw new IllegalArgumentException("Rows cannot be higher than 10000");
}
this.rows = rows;
return this;
}
public int getStartRow() {
return startRow;
}
public int getEndRow() {
return startRow + rows;
}
public TaxonomiesSearchOptions setStartRow(int startRow) {
this.startRow = startRow;
return this;
}
public String getRequiredAccess() {
return requiredAccess;
}
public TaxonomiesSearchOptions setRequiredAccess(String requiredAccess) {
this.requiredAccess = requiredAccess;
return this;
}
public StatusFilter getIncludeStatus() {
return includeStatus;
}
public void setIncludeStatus(StatusFilter includeStatus) {
if (includeStatus == null) {
this.includeStatus = StatusFilter.ALL;
} else {
this.includeStatus = includeStatus;
}
}
public ReturnedMetadatasFilter getReturnedMetadatasFilter() {
return returnedMetadatasFilter;
}
public TaxonomiesSearchOptions setReturnedMetadatasFilter(ReturnedMetadatasFilter returnedMetadatasFilter) {
this.returnedMetadatasFilter = returnedMetadatasFilter;
return this;
}
public boolean isAlwaysReturnTaxonomyConceptsWithReadAccess() {
return alwaysReturnTaxonomyConceptsWithReadAccess;
}
public TaxonomiesSearchOptions setAlwaysReturnTaxonomyConceptsWithReadAccess(
boolean alwaysReturnTaxonomyConceptsWithReadAccess) {
this.alwaysReturnTaxonomyConceptsWithReadAccess = alwaysReturnTaxonomyConceptsWithReadAccess;
return this;
}
public TaxonomiesSearchOptions cloneAddingReturnedField(Metadata metadata) {
TaxonomiesSearchOptions clonedOptions = new TaxonomiesSearchOptions(this);
clonedOptions.setReturnedMetadatasFilter(returnedMetadatasFilter.withIncludedMetadata(metadata));
return clonedOptions;
}
public TaxonomiesSearchOptions(ReturnedMetadatasFilter returnedMetadatasFilter) {
this.returnedMetadatasFilter = returnedMetadatasFilter;
}
public TaxonomiesSearchFilter getFilter() {
return filter;
}
public TaxonomiesSearchOptions setFilter(TaxonomiesSearchFilter filter) {
this.filter = filter;
return this;
}
}