package com.constellio.app.ui.pages.management.facet;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.List;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.components.MetadataDisplayFactory;
import com.constellio.app.ui.framework.components.RecordDisplay;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.structures.MapStringStringStructure;
import com.vaadin.data.Item;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.Table;
import com.vaadin.ui.VerticalLayout;
public class DisplayFacetConfigurationViewImpl extends BaseViewImpl implements DisplayFacetConfigurationView {
private DisplayFacetConfigurationPresenter presenter;
public DisplayFacetConfigurationViewImpl() {
presenter = new DisplayFacetConfigurationPresenter(this);
}
@Override
protected String getTitle() {
return $("DisplayFacetConfigurationView.viewTitle");
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
VerticalLayout mainLayout = new VerticalLayout();
mainLayout.setSizeFull();
mainLayout.setSpacing(true);
RecordDisplay display = new RecordDisplay(presenter.getDisplayRecordVO(), new FacetMetadataDisplayFactory());
mainLayout.addComponent(display);
mainLayout.addComponent(createValuesTable());
return mainLayout;
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
@Override
public List<Button> buildActionMenuButtons(ViewChangeEvent event) {
List<Button> result = super.buildActionMenuButtons(event);
Button edit = new Button($("DisplayFacetConfiguration.edit"));
edit.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.editButtonClicked();
}
});
Button delete = new Button($("DisplayFacetConfiguration.delete"));
delete.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.deleteButtonClicked();
}
});
Button activate = new Button($("DisplayFacetConfiguration.activate"));
activate.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.activate();
}
});
activate.setVisible(!presenter.isActive());
Button deactivate = new Button($("DisplayFacetConfiguration.deactivate"));
deactivate.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.deactivate();
}
});
deactivate.setVisible(presenter.isActive());
result.add(edit);
result.add(delete);
result.add(activate);
result.add(deactivate);
return result;
}
private Component createValuesTable() {
Table table = new Table($("DisplayFacetConfiguration.tableTitle"));
table.addContainerProperty("label", String.class, null);
table.addContainerProperty("value", String.class, null);
table.setColumnHeader("label", $("DisplayFacetConfiguration.values.label." + presenter.getTypePostfix()));
table.setColumnHeader("value", $("DisplayFacetConfiguration.values.value." + presenter.getTypePostfix()));
table.setWidth("100%");
table.setPageLength(table.getItemIds().size());
MapStringStringStructure values = presenter.getValues();
if (values != null) {
for (String key : values.keySet()) {
Item row1 = table.addItem(key);
row1.getItemProperty("value").setValue(key);
row1.getItemProperty("label").setValue(values.get(key));
}
}
return table;
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
if (!event.getParameters().isEmpty()) {
presenter.setDisplayRecordVO(event.getParameters());
}
}
public class FacetMetadataDisplayFactory extends MetadataDisplayFactory {
@Override
public Component buildSingleValue(RecordVO recordVO, MetadataVO metadata, Object displayValue) {
if (metadata.getCode().endsWith(Facet.ORDER)) {
return null;
} else {
return super.buildSingleValue(recordVO, metadata, displayValue);
}
}
}
}