package com.constellio.app.ui.framework.data;
import static com.constellio.app.services.factories.ConstellioFactories.getInstance;
import static com.constellio.app.ui.application.ConstellioUI.getCurrentSessionContext;
import java.util.HashMap;
import java.util.Map;
import com.constellio.app.ui.framework.components.fields.lookup.LookupField.LookupTreeDataProvider;
import com.constellio.app.ui.framework.components.fields.lookup.LookupField.TextInputDataProvider;
import com.constellio.app.ui.framework.data.trees.LinkableRecordTreeNodesDataProvider;
import com.constellio.app.ui.framework.data.trees.RecordTreeNodesDataProvider;
import com.constellio.model.services.taxonomies.TaxonomySearchRecord;
public class RecordLookupTreeDataProvider extends BaseRecordTreeDataProvider implements LookupTreeDataProvider<String> {
private String schemaTypeCode;
private Map<String, Boolean> selectableCache = new HashMap<>();
private boolean ignoreLinkability;
private boolean writeAccess;
public RecordLookupTreeDataProvider(String schemaTypeCode, String taxonomyCode, boolean writeAccess) {
super(new LinkableRecordTreeNodesDataProvider(taxonomyCode, schemaTypeCode, writeAccess));
this.writeAccess = writeAccess;
this.schemaTypeCode = schemaTypeCode;
ignoreLinkability = false;
}
public RecordLookupTreeDataProvider(String schemaTypeCode, boolean writeAccess,
RecordTreeNodesDataProvider recordTreeNodesDataProvider) {
super(recordTreeNodesDataProvider);
this.writeAccess = writeAccess;
this.schemaTypeCode = schemaTypeCode;
ignoreLinkability = false;
}
protected void saveResultInCache(TaxonomySearchRecord searchRecord) {
super.saveResultInCache(searchRecord);
boolean selectable = ignoreLinkability || searchRecord.isLinkable();
selectableCache.put(searchRecord.getId(), selectable);
}
@Override
public boolean isSelectable(String selection) {
return selectableCache.get(selection);
}
@Override
public TextInputDataProvider<String> search() {
return new RecordTextInputDataProvider(getInstance(), getCurrentSessionContext(), schemaTypeCode, writeAccess);
}
public void setIgnoreLinkability(boolean ignoreLinkability) {
this.ignoreLinkability = ignoreLinkability;
if (nodesDataProvider instanceof LinkableRecordTreeNodesDataProvider) {
((LinkableRecordTreeNodesDataProvider) nodesDataProvider).setIgnoreLinkability(ignoreLinkability);
}
}
}