package com.constellio.app.ui.pages.management.collections;
import com.constellio.app.modules.rm.ConstellioRMModule;
import com.constellio.app.ui.framework.components.BaseForm;
import com.constellio.app.ui.framework.data.CollectionVODataProvider.CollectionVO;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.params.ParamUtils;
import com.constellio.model.frameworks.validation.ValidationException;
import com.vaadin.data.Validator;
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.Component;
import com.vaadin.ui.OptionGroup;
import com.vaadin.ui.TextField;
import java.util.Map;
import static com.constellio.app.ui.i18n.i18n.$;
public class AddEditCollectionViewImpl extends BaseViewImpl implements AddEditCollectionView {
public static final String CODE_FIELD_STYLE = "seleniumCodeFieldStyle";
public static final String NAME_FIELD_STYLE = "seleniumNameFieldStyle";
public static final String BASE_FORM_STYLE = "seleniumBaseFormStyle";
private AddEditCollectionPresenter presenter;
private CollectionVO collectionVO;
@PropertyId("code")
private TextField code;
@PropertyId("name")
private TextField name;
@PropertyId("conservationCalendarNumber")
private TextField conservationCalendarNumber;
@PropertyId("organizationNumber")
private TextField organizationNumber;
@PropertyId("modules")
private OptionGroup modules;
@PropertyId("supportedLanguages")
private OptionGroup supportedLanguages;
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
setupParamsAndVO(event);
}
private void setupParamsAndVO(ViewChangeEvent event) {
String parameters = event.getParameters();
Map<String, String> paramsMap = ParamUtils.getParamsMap(parameters);
String code = paramsMap.get("collectionCode");
this.presenter = new AddEditCollectionPresenter(this, code);
collectionVO = presenter.getCollectionVO();
}
@Override
protected String getTitle() {
return $("AddEditCollectionView.viewTitle");
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClick();
}
};
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
code = new TextField($("AddEditCollectionView.code"));
code.addStyleName(CODE_FIELD_STYLE);
code.setRequired(true);
code.setNullRepresentation("");
code.setId("code");
code.addStyleName("code");
code.addStyleName("code-" + collectionVO.getCode());
code.setEnabled(!presenter.getActionEdit());
code.addValidator(new Validator() {
@Override
public void validate(Object value)
throws InvalidValueException {
if (code.getValue() != null && code.getValue().contains("-")) {
throw new InvalidValueException($("AddEditCollectionView.validate.invalidCode"));
}
}
});
name = new TextField($("AddEditCollectionView.name"));
name.addStyleName(NAME_FIELD_STYLE);
name.setNullRepresentation("");
name.setId("name");
name.addStyleName("name");
name.addStyleName("name-" + collectionVO.getName());
organizationNumber = new TextField($("AddEditCollectionView.organizationNumber"));
organizationNumber.setNullRepresentation("");
organizationNumber.setId("organizationNumber");
organizationNumber.setVisible(collectionVO.getModules() != null && collectionVO.getModules().contains(ConstellioRMModule.ID));
conservationCalendarNumber = new TextField($("AddEditCollectionView.conservationCalendarNumber"));
conservationCalendarNumber.setNullRepresentation("");
conservationCalendarNumber.setId("conservationCalendarNumber");
conservationCalendarNumber.setVisible(collectionVO.getModules() != null && collectionVO.getModules().contains(ConstellioRMModule.ID));
supportedLanguages = new OptionGroup($("AddEditCollectionView.language"));
supportedLanguages.setMultiSelect(true);
supportedLanguages.setRequired(true);
for (String languageCode : presenter.getAllLanguages()) {
supportedLanguages.addItem(languageCode);
supportedLanguages.setItemEnabled(languageCode, presenter.isLanguageEnabled(languageCode));
supportedLanguages.setItemCaption(languageCode, $("Language." + languageCode));
}
supportedLanguages.setEnabled(!presenter.getActionEdit());
modules = new OptionGroup($("AddEditCollectionView.modules"));
modules.setMultiSelect(true);
for (String module : presenter.getAvailableModules()) {
modules.addItem(module);
modules.setItemEnabled(module, !presenter.isModuleSelected(module, collectionVO));
modules.setItemCaption(module, presenter.getModuleCaption(module));
}
//modules.setEnabled(!presenter.getActionEdit());
BaseForm<CollectionVO> baseFormComponent = new BaseForm<CollectionVO>(collectionVO, this, code, name, organizationNumber, conservationCalendarNumber,
supportedLanguages, modules) {
@Override
protected void saveButtonClick(CollectionVO viewObject)
throws ValidationException {
try {
presenter.saveButtonClicked(collectionVO);
} catch (AddEditCollectionPresenterException addEditCollectionPresenterException) {
showErrorMessage(addEditCollectionPresenterException.getMessage());
}
}
@Override
protected void cancelButtonClick(CollectionVO viewObject) {
presenter.cancelButtonClicked();
}
};
baseFormComponent.addStyleName(BASE_FORM_STYLE);
return baseFormComponent;
}
}