package com.constellio.app.ui.pages.management.extractors; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import java.util.Locale; import org.vaadin.dialogs.ConfirmDialog; import com.constellio.app.ui.entities.MetadataExtractorVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.framework.buttons.AddButton; import com.constellio.app.ui.framework.buttons.DeleteButton; import com.constellio.app.ui.framework.buttons.EditButton; import com.constellio.app.ui.framework.containers.ButtonsContainer; import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.constellio.app.ui.pages.management.extractors.entities.RegexConfigVO; import com.vaadin.data.Item; import com.vaadin.data.util.IndexedContainer; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Alignment; 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.Label; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; public class ListMetadataExtractorsViewImpl extends BaseViewImpl implements ListMetadataExtractorsView { private static final String SCHEMA_PROPERTY = "schema"; private static final String METADATA_PROPERTY = "metadata"; private static final String STYLES_PROPERTY = "styles"; private static final String PROPERTIES_PROPERTY = "properties"; private static final String REGEXES_PROPERTY = "regexes"; private List<MetadataExtractorVO> metadataExtractorVOs; private VerticalLayout mainLayout; private Button addButton; private Table table; private ListMetadataExtractorsPresenter presenter; public ListMetadataExtractorsViewImpl() { presenter = new ListMetadataExtractorsPresenter(this); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected Component buildMainComponent(ViewChangeEvent event) { mainLayout = new VerticalLayout(); mainLayout.setSizeFull(); mainLayout.setSpacing(true); addButton = new AddButton() { @Override protected void buttonClick(ClickEvent event) { presenter.addButtonClicked(); } }; table = new Table($("ListMetadataExtractorsView.table.title", metadataExtractorVOs.size())); table.setWidth("100%"); table.setPageLength(Math.min(15, metadataExtractorVOs.size())); table.addContainerProperty(SCHEMA_PROPERTY, String.class, null); table.addContainerProperty(METADATA_PROPERTY, String.class, null); table.addContainerProperty(STYLES_PROPERTY, Label.class, null); table.addContainerProperty(PROPERTIES_PROPERTY, Label.class, null); table.addContainerProperty(REGEXES_PROPERTY, Label.class, null); table.setColumnHeader(SCHEMA_PROPERTY, $("ListMetadataExtractorsView.table.schema")); table.setColumnHeader(METADATA_PROPERTY, $("ListMetadataExtractorsView.table.metadata")); table.setColumnHeader(STYLES_PROPERTY, $("ListMetadataExtractorsView.table.styles")); table.setColumnHeader(PROPERTIES_PROPERTY, $("ListMetadataExtractorsView.table.properties")); table.setColumnHeader(REGEXES_PROPERTY, $("ListMetadataExtractorsView.table.regexes")); table.setColumnHeader(ButtonsContainer.DEFAULT_BUTTONS_PROPERTY_ID, ""); table.setColumnExpandRatio(METADATA_PROPERTY, 1); ButtonsContainer<IndexedContainer> buttonsContainer = new ButtonsContainer<>( (IndexedContainer) table.getContainerDataSource()); table.setContainerDataSource(buttonsContainer); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new EditButton() { @Override protected void buttonClick(ClickEvent event) { MetadataExtractorVO metadataExtractorVO = (MetadataExtractorVO) itemId; presenter.editButtonClicked(metadataExtractorVO); } }; } }); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new DeleteButton() { @Override protected void confirmButtonClick(ConfirmDialog dialog) { MetadataExtractorVO metadataExtractorVO = (MetadataExtractorVO) itemId; presenter.deleteButtonClicked(metadataExtractorVO); } }; } }); for (MetadataExtractorVO metadataExtractorVO : metadataExtractorVOs) { MetadataVO metadataVO = metadataExtractorVO.getMetadataVO(); Locale locale = getLocale(); String schemaLabel = metadataVO.getSchema().getLabel(locale); String metadataLabel = metadataVO.getLabel(locale); StringBuffer stylesSB = new StringBuffer(); for (String style : metadataExtractorVO.getStyles()) { if (stylesSB.length() > 0) { stylesSB.append("<br />"); } stylesSB.append(style); } StringBuffer propertiesSB = new StringBuffer(); for (String property : metadataExtractorVO.getProperties()) { if (propertiesSB.length() > 0) { propertiesSB.append("<br />"); } propertiesSB.append(property); } StringBuffer regexSB = new StringBuffer(); for (RegexConfigVO regexConfigVO : metadataExtractorVO.getRegexes()) { if (regexSB.length() > 0) { regexSB.append("<br />"); } regexSB.append(regexConfigVO.getInputMetadata() + " - "); regexSB.append(regexConfigVO.getRegex() + " - "); regexSB.append($("RegexConfigField.RegexConfigType." + regexConfigVO.getRegexConfigType()) + " - "); regexSB.append(regexConfigVO.getValue()); } Item item = table.addItem(metadataExtractorVO); item.getItemProperty(SCHEMA_PROPERTY).setValue(schemaLabel); item.getItemProperty(METADATA_PROPERTY).setValue(metadataLabel); item.getItemProperty(STYLES_PROPERTY).setValue(new Label(stylesSB.toString(), ContentMode.HTML)); item.getItemProperty(PROPERTIES_PROPERTY).setValue(new Label(propertiesSB.toString(), ContentMode.HTML)); item.getItemProperty(REGEXES_PROPERTY).setValue(new Label(regexSB.toString(), ContentMode.HTML)); } mainLayout.addComponents(addButton, table); mainLayout.setExpandRatio(table, 1); mainLayout.setComponentAlignment(addButton, Alignment.TOP_RIGHT); return mainLayout; } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.backButtonClicked(); } }; } @Override protected String getTitle() { return $("ListMetadataExtractorsView.viewTitle"); } @Override public void setMetadataExtractorVOs(List<MetadataExtractorVO> metadataExtractorVOs) { this.metadataExtractorVOs = metadataExtractorVOs; } @Override public void removeMetadataExtractorVO(MetadataExtractorVO metadataExtractorVO) { table.removeItem(metadataExtractorVO); metadataExtractorVOs.remove(metadataExtractorVO); table.setCaption($("ListMetadataExtractorsView.table.title", metadataExtractorVOs.size())); } }