package com.constellio.app.ui.framework.components.tree;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.framework.components.converters.TaxonomyCodeToCaptionConverter;
import com.constellio.app.ui.framework.data.RecordLazyTreeDataProvider;
import com.constellio.app.ui.pages.base.PresenterService;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TabSheet;
public class RecordLazyTreeTabSheet extends TabSheet {
private int bufferSize;
private List<RecordLazyTreeDataProvider> dataProviders;
private TaxonomyCodeToCaptionConverter captionConverter = new TaxonomyCodeToCaptionConverter();
private static int getBufferSizeFromConfig() {
ConstellioFactories constellioFactories = ConstellioFactories.getInstance();
ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory();
return modelLayerFactory.getSystemConfigs().getLazyTreeBufferSize();
}
public RecordLazyTreeTabSheet(String[] taxonomyCodes) {
this(taxonomyCodes, getBufferSizeFromConfig());
}
public RecordLazyTreeTabSheet(String[] taxonomyCodes, int bufferSize) {
this(toDataProviders(taxonomyCodes), bufferSize);
}
public RecordLazyTreeTabSheet(List<RecordLazyTreeDataProvider> dataProviders) {
this(dataProviders, getBufferSizeFromConfig());
}
public RecordLazyTreeTabSheet(List<RecordLazyTreeDataProvider> dataProviders, int bufferSize) {
this.dataProviders = dataProviders;
this.bufferSize = bufferSize;
int selectedTab = -1;
int configDefaultTab = -1;
PresenterService presenterService = new PresenterService(ConstellioFactories.getInstance().getModelLayerFactory());
User currentUser = presenterService.getCurrentUser(ConstellioUI.getCurrentSessionContext());
String userDefaultTaxonomy = currentUser.getDefaultTaxonomy();
String configDefaultTaxonomy = presenterService.getSystemConfigs().getDefaultTaxonomy();
// PlaceHolder firstPlaceHolder = null;
for (int i = 0; i < dataProviders.size(); i++) {
RecordLazyTreeDataProvider dataProvider = dataProviders.get(i);
String taxonomyCode = dataProvider.getTaxonomyCode();
String lazyTreeCaption = getCaptionForTaxonomyCode(taxonomyCode);
if (taxonomyCode.equals(userDefaultTaxonomy)) {
selectedTab = i;
}
if (taxonomyCode.equals(configDefaultTaxonomy)) {
configDefaultTab = selectedTab;
}
PlaceHolder placeHolder = new PlaceHolder();
// if (i == 0) {
// firstPlaceHolder = placeHolder;
// }
addTab(placeHolder, lazyTreeCaption);
}
if (selectedTab == -1 && configDefaultTab != -1) {
selectedTab = configDefaultTab;
}
addSelectedTabChangeListener(new SelectedTabChangeListener() {
@Override
public void selectedTabChange(SelectedTabChangeEvent event) {
selectTab(getTab(getSelectedTab()));
}
});
}
private void selectTab(Tab tab) {
if (tab == null) {
return;
}
int position = getTabPosition(tab);
setSelectedTab(position);
PlaceHolder tabComponent = (PlaceHolder) getSelectedTab();
if (tabComponent.getComponentCount() == 0) {
tabComponent.setCompositionRoot(newLazyTree(dataProviders.get(position), bufferSize));
}
}
@Override
public void attach() {
super.attach();
PlaceHolder tabComponent = (PlaceHolder) getSelectedTab();
if (tabComponent.getComponentCount() == 0) {
Tab tab = getTab(tabComponent);
int position = getTabPosition(tab);
tabComponent.setCompositionRoot(newLazyTree(dataProviders.get(position), bufferSize));
}
}
private static List<RecordLazyTreeDataProvider> toDataProviders(String[] taxonomyCodes) {
List<RecordLazyTreeDataProvider> dataProviders = new ArrayList<>();
for (String taxonomyCode : taxonomyCodes) {
RecordLazyTreeDataProvider dataProvider = new RecordLazyTreeDataProvider(taxonomyCode);
dataProviders.add(dataProvider);
}
return dataProviders;
}
protected RecordLazyTree newLazyTree(RecordLazyTreeDataProvider dataProvider, int bufferSize) {
return new RecordLazyTree(dataProvider, bufferSize);
}
protected String getCaptionForTaxonomyCode(String taxonomyCode) {
return captionConverter.convertToPresentation(taxonomyCode, String.class, getLocale());
}
private static class PlaceHolder extends CustomComponent {
@Override
public void setCompositionRoot(Component compositionRoot) {
super.setCompositionRoot(compositionRoot);
}
}
}