package com.constellio.app.ui.pages.management.valueDomains;
import com.constellio.app.modules.rm.services.ValueListServices;
import com.constellio.app.ui.entities.MetadataSchemaTypeVO;
import com.constellio.app.ui.framework.builders.MetadataSchemaTypeToVOBuilder;
import com.constellio.app.ui.pages.base.BasePresenter;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.services.schemas.MetadataSchemasManagerException.OptimisticLocking;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
import static com.constellio.app.ui.i18n.i18n.$;
public class ListValueDomainPresenter extends BasePresenter<ListValueDomainView> {
private List<String> labels;
public ListValueDomainPresenter(ListValueDomainView view) {
super(view);
}
public void valueDomainCreationRequested(String valueDomain) {
valueDomain = valueDomain.trim();
boolean canCreate = canCreate(valueDomain);
if (canCreate) {
valueListServices().createValueDomain(valueDomain);
view.refreshTable();
labels.add(valueDomain);
}
}
public void displayButtonClicked(MetadataSchemaTypeVO schemaType) {
view.navigate().to().listSchemaRecords(schemaType.getCode() + "_default");
}
public void editButtonClicked(MetadataSchemaTypeVO schemaTypeVO, String newLabel) {
if (!verifyIfExists(newLabel)) {
MetadataSchemaTypesBuilder metadataSchemaTypesBuilder = modelLayerFactory.getMetadataSchemasManager()
.modify(view.getCollection());
Language language = Language.withCode(view.getSessionContext().getCurrentLocale().getLanguage());
metadataSchemaTypesBuilder.getSchemaType(schemaTypeVO.getCode()).addLabel(language, newLabel);
metadataSchemaTypesBuilder.getSchemaType(schemaTypeVO.getCode()).getDefaultSchema().addLabel(language, newLabel);
try {
modelLayerFactory.getMetadataSchemasManager().saveUpdateSchemaTypes(metadataSchemaTypesBuilder);
} catch (OptimisticLocking optimistickLocking) {
throw new RuntimeException(optimistickLocking);
}
view.refreshTable();
} else if (newLabel != null && !newLabel.equals(schemaTypeVO.getLabel(view.getSessionContext().getCurrentLocale()))) {
view.showErrorMessage($("ListValueDomainView.existingValueDomain", newLabel));
}
}
public List<MetadataSchemaTypeVO> getDomainValues() {
labels = new ArrayList<>();
MetadataSchemaTypeToVOBuilder builder = newMetadataSchemaTypeToVOBuilder();
List<MetadataSchemaTypeVO> result = new ArrayList<>();
for (MetadataSchemaType schemaType : valueListServices().getValueDomainTypes()) {
result.add(builder.build(schemaType));
labels.add(schemaType.getLabel(Language.withCode(view.getSessionContext().getCurrentLocale().getLanguage())).trim());
}
return result;
}
MetadataSchemaTypeToVOBuilder newMetadataSchemaTypeToVOBuilder() {
return new MetadataSchemaTypeToVOBuilder();
}
ValueListServices valueListServices() {
return new ValueListServices(appLayerFactory, view.getCollection());
}
boolean canCreate(String valueDomain) {
valueDomain = valueDomain.trim();
boolean canCreate = false;
if (StringUtils.isNotBlank(valueDomain)) {
boolean exist = verifyIfExists(valueDomain);
canCreate = !exist;
}
return canCreate;
}
private boolean verifyIfExists(String valueDomain) {
if (labels == null) {
getDomainValues();
}
boolean exits = false;
for (String label : labels) {
if (label.equals(valueDomain)) {
exits = true;
}
}
return exits;
}
public void backButtonClicked() {
view.navigate().to().adminModule();
}
@Override
protected boolean hasPageAccess(String params, User user) {
return user.has(CorePermissions.MANAGE_VALUELIST).globally();
}
}