package com.constellio.app.ui.pages.base;
import static com.constellio.app.ui.i18n.i18n.$;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.constellio.app.entities.navigation.NavigationConfig;
import com.constellio.app.entities.navigation.NavigationItem;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.services.extensions.ConstellioModulesManagerImpl;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.systemSetup.SystemGlobalConfigsManager;
import com.constellio.app.ui.application.ConstellioUI;
import com.constellio.app.ui.entities.UserVO;
import com.constellio.app.ui.framework.components.ComponentState;
import com.constellio.app.utils.GradleFileVersionParser;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.factories.ModelLayerFactory;
public class MainLayoutPresenter implements Serializable {
private MainLayout mainLayout;
public MainLayoutPresenter(MainLayout mainLayout) {
this.mainLayout = mainLayout;
}
public ComponentState getStateFor(NavigationItem item) {
return item.getStateFor(getUser(), mainLayout.getHeader().getConstellioFactories().getAppLayerFactory());
}
public List<NavigationItem> getNavigationItems() {
List<NavigationItem> items = new ArrayList<>();
ConstellioModulesManagerImpl manager = (ConstellioModulesManagerImpl) mainLayout.getHeader().getConstellioFactories()
.getAppLayerFactory().getModulesManager();
NavigationConfig config = manager.getNavigationConfig(mainLayout.getHeader().getCollection());
items.addAll(config.getNavigation(MainLayout.MAIN_LAYOUT_NAVIGATION));
Collections.sort(items);
return items;
}
public User getUser() {
String collection = ConstellioUI.getCurrentSessionContext().getCurrentCollection();
UserVO userVO = ConstellioUI.getCurrentSessionContext().getCurrentUser();
ModelLayerFactory modelLayerFactory = mainLayout.getHeader().getConstellioFactories().getModelLayerFactory();
AppLayerFactory appLayerFactory = mainLayout.getHeader().getConstellioFactories().getAppLayerFactory();
RMSchemasRecordsServices schemas = new RMSchemasRecordsServices(collection, appLayerFactory);
return schemas.getUser(userVO.getId());
}
public String getCurrentVersion() {
AppLayerFactory appLayerFactory = mainLayout.getHeader().getConstellioFactories().getAppLayerFactory();
String version = appLayerFactory.newApplicationService().getWarVersion();
if (version == null || version.equals("5.0.0")) {
version = GradleFileVersionParser.getVersion();
}
if (version != null) {
return toPrintableVersion(version);
} else {
return "";
}
}
public String getMessage() {
AppLayerFactory appLayerFactory = mainLayout.getHeader().getConstellioFactories().getAppLayerFactory();
SystemGlobalConfigsManager manager = appLayerFactory.getSystemGlobalConfigsManager();
if (manager.hasLastReindexingFailed()) {
ModelLayerFactory modelLayerFactory = appLayerFactory.getModelLayerFactory();
User user = new PresenterService(modelLayerFactory).getCurrentUser(ConstellioUI.getCurrentSessionContext());
return user.has(CorePermissions.MANAGE_SYSTEM_UPDATES).globally() ? $("MainLayout.reindexingFailed") : null;
}
if (manager.isReindexingRequired()) {
ModelLayerFactory modelLayerFactory = appLayerFactory.getModelLayerFactory();
User user = new PresenterService(modelLayerFactory).getCurrentUser(ConstellioUI.getCurrentSessionContext());
return user.has(CorePermissions.MANAGE_SYSTEM_UPDATES).globally() ? $("MainLayout.reindexingRequired") : null;
}
return null;
}
private String toPrintableVersion(String version) {
String[] versionSplitted = version.split("\\.");
if (versionSplitted.length == 5) {
return versionSplitted[0] + "." + versionSplitted[1] + "." + versionSplitted[2] + "." + versionSplitted[3];
}
return version;
}
}