package com.constellio.app.ui.pages.management.extractors;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.ui.entities.MetadataExtractorVO;
import com.constellio.app.ui.entities.MetadataSchemaTypeVO;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.entities.MetadataVO;
import com.constellio.app.ui.framework.components.BaseForm;
import com.constellio.app.ui.framework.components.fields.list.ListAddRemoveTextField;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.pages.management.extractors.fields.ListAddRemoveRegexConfigField;
import com.constellio.model.frameworks.validation.ValidationException;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.fieldgroup.PropertyId;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
public class AddEditMetadataExtractorViewImpl extends BaseViewImpl implements AddEditMetadataExtractorView {
private MetadataExtractorVO metadataExtractorVO;
private List<MetadataSchemaTypeVO> schemaTypeOptions = new ArrayList<>();
private boolean schemaTypeFieldVisible;
private boolean schemaFieldVisible;
private boolean metadataFieldEnabled;
private BaseForm<MetadataExtractorVO> baseForm;
private ComboBox schemaTypeField;
private ComboBox schemaField;
@PropertyId("metadataVO")
private ComboBox metadataField;
@PropertyId("styles")
private ListAddRemoveTextField stylesField;
@PropertyId("properties")
private ListAddRemoveTextField propertiesField;
@PropertyId("regexes")
private ListAddRemoveRegexConfigField regexesField;
private AddEditMetadataExtractorPresenter presenter;
public AddEditMetadataExtractorViewImpl() {
this.presenter = new AddEditMetadataExtractorPresenter(this);
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
presenter.forParams(event.getParameters());
}
@Override
protected void afterViewAssembled(ViewChangeEvent event) {
presenter.afterViewAssembled();
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
schemaTypeField = new ComboBox($("AddEditMetadataExtractorView.schemaType")) {
@Override
public String getItemCaption(Object itemId) {
MetadataSchemaTypeVO schemaTypeVO = (MetadataSchemaTypeVO) itemId;
return schemaTypeVO.getLabel(getLocale());
}
};
schemaTypeField.addItems(schemaTypeOptions);
schemaTypeField.setVisible(schemaTypeFieldVisible);
schemaTypeField.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
MetadataSchemaTypeVO schemaTypeVO = (MetadataSchemaTypeVO) event.getProperty().getValue();
presenter.schemaTypeSelected(schemaTypeVO);
}
});
schemaTypeField.setNullSelectionAllowed(false);
schemaField = new ComboBox($("AddEditMetadataExtractorView.schema")) {
@Override
public String getItemCaption(Object itemId) {
MetadataSchemaVO schemaVO = (MetadataSchemaVO) itemId;
return schemaVO.getLabel(getLocale());
}
};
schemaField.setVisible(schemaFieldVisible);
schemaField.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
MetadataSchemaVO schemaVO = (MetadataSchemaVO) event.getProperty().getValue();
presenter.schemaSelected(schemaVO);
}
});
schemaField.setNullSelectionAllowed(false);
metadataField = new ComboBox($("AddEditMetadataExtractorView.metadata")) {
@Override
public String getItemCaption(Object itemId) {
MetadataVO metadataVO = (MetadataVO) itemId;
return metadataVO.getLabel(getLocale());
}
};
metadataField.setEnabled(metadataFieldEnabled);
if (metadataExtractorVO.getMetadataVO() != null) {
metadataField.addItem(metadataExtractorVO.getMetadataVO());
}
metadataField.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
if (metadataField.getValue() != null && schemaField.getValue() != null) {
MetadataSchemaVO schemaVO = (MetadataSchemaVO) schemaField.getValue();
presenter.setMetadataVOsForRegexes(schemaVO.getCode(), (MetadataVO) metadataField.getValue());
}
}
});
metadataField.setNullSelectionAllowed(false);
stylesField = new ListAddRemoveTextField();
stylesField.setCaption($("AddEditMetadataExtractorView.styles"));
propertiesField = new ListAddRemoveTextField();
propertiesField.setCaption($("AddEditMetadataExtractorView.properties"));
regexesField = new ListAddRemoveRegexConfigField();
regexesField.setCaption($("AddEditMetadataExtractorView.regexes"));
baseForm = new BaseForm<MetadataExtractorVO>(metadataExtractorVO, this, schemaTypeField, schemaField,
metadataField,
stylesField, propertiesField, regexesField) {
@Override
protected void saveButtonClick(MetadataExtractorVO viewObject)
throws ValidationException {
presenter.saveButtonClicked();
}
@Override
protected void cancelButtonClick(MetadataExtractorVO viewObject) {
presenter.cancelButtonClicked();
}
};
return baseForm;
}
@Override
protected String getTitle() {
return $("AddEditMetadataExtractorView.viewTitle");
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
@Override
public void setMetadataExtractorVO(MetadataExtractorVO metadataExtractorVO) {
this.metadataExtractorVO = metadataExtractorVO;
}
@Override
public void setSchemaTypeOptions(List<MetadataSchemaTypeVO> schemaTypeVOs) {
this.schemaTypeOptions = schemaTypeVOs;
}
@Override
public void setSchemaOptions(List<MetadataSchemaVO> schemaVOs) {
schemaField.removeAllItems();
schemaField.addItems(schemaVOs);
}
@Override
public void setMetadataOptions(List<MetadataVO> metadataVOs) {
metadataField.removeAllItems();
metadataField.addItems(metadataVOs);
}
@Override
public void setRegexMetadataOptions(List<MetadataVO> metadataVOs) {
regexesField.setMetadataOptions(metadataVOs);
}
@Override
public void setSchemaTypeFieldVisible(boolean visible) {
this.schemaTypeFieldVisible = visible;
}
@Override
public void setSchemaFieldVisible(boolean visible) {
this.schemaFieldVisible = visible;
}
@Override
public void setMetadataFieldEnabled(boolean enabled) {
this.metadataFieldEnabled = enabled;
}
}