package com.constellio.app.ui.pages.management.schemas.type;
import java.util.Map;
import com.constellio.app.extensions.AppLayerCollectionExtensions;
import com.constellio.app.services.metadata.AppSchemasServices;
import com.constellio.app.ui.application.NavigatorConfigurationService;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder;
import com.constellio.app.ui.framework.data.SchemaVODataProvider;
import com.constellio.app.ui.pages.base.SingleSchemaBasePresenter;
import com.constellio.app.ui.params.ParamUtils;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.records.wrappers.User;
import static com.constellio.app.ui.i18n.i18n.$;
public class ListSchemaPresenter extends SingleSchemaBasePresenter<ListSchemaView> {
private Map<String, String> parameters;
private String schemaTypeCode;
AppLayerCollectionExtensions collectionExtensions = appLayerFactory.getExtensions().forCollection(collection);
public ListSchemaPresenter(ListSchemaView view) {
super(view);
}
@Override
protected boolean hasPageAccess(String params, User user) {
return user.has(CorePermissions.MANAGE_METADATASCHEMAS).globally();
}
public SchemaVODataProvider getDataProvider() {
return new SchemaVODataProvider(new MetadataSchemaToVOBuilder(), modelLayerFactory, collection, schemaTypeCode,
view.getSessionContext());
}
public void setSchemaTypeCode(String schemaTypeCode) {
this.schemaTypeCode = schemaTypeCode;
}
public void setParameters(Map<String, String> params) {
this.parameters = params;
}
public void editButtonClicked(MetadataSchemaVO schemaVO) {
parameters.put("schemaCode", schemaVO.getCode());
String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_SCHEMA, parameters);
view.navigate().to().editSchema(params);
}
public void editMetadataButtonClicked(MetadataSchemaVO schemaVO) {
parameters.put("schemaCode", schemaVO.getCode());
String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_SCHEMA_METADATA, parameters);
view.navigate().to().listSchemaMetadata(params);
}
public void addButtonClicked() {
parameters.put("schemaCode", "");
String params = ParamUtils.addParams(NavigatorConfigurationService.ADD_EDIT_SCHEMA, parameters);
view.navigate().to().addSchema(params);
}
public void formButtonClicked(MetadataSchemaVO schemaVO) {
parameters.put("schemaCode", schemaVO.getCode());
String params = ParamUtils.addParams(NavigatorConfigurationService.EDIT_DISPLAY_FORM, parameters);
view.navigate().to().editDisplayForm(params);
}
public void orderButtonClicked(MetadataSchemaVO schemaVO) {
parameters.put("schemaCode", schemaVO.getCode());
String params = ParamUtils.addParams(NavigatorConfigurationService.FORM_DISPLAY_FORM, parameters);
view.navigate().to().formDisplayForm(params);
}
public void searchButtonClicked(MetadataSchemaVO schemaVO) {
parameters.put("schemaCode", schemaVO.getCode());
String params = ParamUtils.addParams(NavigatorConfigurationService.SEARCH_DISPLAY_FORM, parameters);
view.navigate().to().searchDisplayForm(params);
}
public void tableButtonClicked() {
parameters.put("schemaCode", schemaTypeCode + "_default");
String params = ParamUtils.addParams(NavigatorConfigurationService.TABLE_DISPLAY_FORM, parameters);
view.navigate().to().tableDisplayForm(params);
}
public void backButtonClicked() {
view.navigate().to().listSchemaTypes();
}
boolean isDeletePossible(String schemaCode) {
AppSchemasServices appSchemasServices = new AppSchemasServices(appLayerFactory);
return appSchemasServices.isSchemaDeletable(collection, schemaCode);
}
public void deleteButtonClicked(String schemaCode) {
if (isDeletePossible(schemaCode)) {
AppSchemasServices appSchemasServices = new AppSchemasServices(appLayerFactory);
if (collectionExtensions.lockedRecords.contains($("ListSchemaTypeView.schemaCode"), schemaCode.split("_")[1])) {
view.showMessage($("ListSchemaTypeView.message"));
} else {
appSchemasServices.deleteSchemaCode(collection, schemaCode);
view.navigate().to().listSchema(ParamUtils.addParams("", parameters));
}
}
}
public boolean isDeleteButtonVisible(String schemaCode) {
return isDeletePossible(schemaCode);
}
}