/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.admin.user.tools; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.olat.core.configuration.AbstractSpringModule; import org.olat.core.extensions.ExtManager; import org.olat.core.extensions.Extension; import org.olat.core.extensions.ExtensionElement; import org.olat.core.gui.UserRequest; import org.olat.core.gui.WindowManager; import org.olat.core.util.StringHelper; import org.olat.core.util.coordinate.CoordinatorManager; import org.olat.core.util.prefs.Preferences; import org.olat.home.HomeMainController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * * Initial date: 16.05.2014<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ @Service("userToolsModule") public class UserToolsModule extends AbstractSpringModule { private static final String CONFIG_USER_TOOLS = "availableUserTools"; private static final String CONFIG_PRESET_USERTOOLES = "presetUserTools"; private String availableUserTools; private String defaultPresetOfUserTools; @Autowired private ExtManager extManager; @Autowired public UserToolsModule(CoordinatorManager coordinatorManager) { super(coordinatorManager); } @Override public void init() { String aToolsObj = getStringPropertyValue(CONFIG_USER_TOOLS, true); if(StringHelper.containsNonWhitespace(aToolsObj)) { availableUserTools = aToolsObj; } String presetToolsObj = getStringPropertyValue(CONFIG_PRESET_USERTOOLES, true); if(StringHelper.containsNonWhitespace(presetToolsObj)) { defaultPresetOfUserTools = presetToolsObj; } } @Override protected void initFromChangedProperties() { init(); } public String getUserTools(Preferences prefs) { String selectedToolV2s = (String)prefs.get(WindowManager.class, "user-tools-v2"); if(!StringHelper.containsNonWhitespace(selectedToolV2s)) { String selectedTools = (String)prefs.get(WindowManager.class, "user-tools"); if(StringHelper.containsNonWhitespace(selectedTools)) { //upgrade StringBuilder selectedToolSb = new StringBuilder(selectedTools); String[] newPresets = new String[]{ "org.olat.home.HomeMainController:org.olat.gui.control.PrintUserToolExtension", "org.olat.home.HomeMainController:org.olat.gui.control.HelpUserToolExtension", "org.olat.home.HomeMainController:org.olat.instantMessaging.ui.ImpressumMainController" }; for(String newPreset:newPresets) { if(selectedToolSb.indexOf(newPreset) < 0) { if(selectedToolSb.length() > 0) selectedToolSb.append(","); selectedToolSb.append(newPreset); } } prefs.put(WindowManager.class, "user-tools-v2", selectedToolSb.toString()); prefs.save(); selectedToolV2s = selectedToolSb.toString(); } } return selectedToolV2s; } public void setUserTools(Preferences prefs, String settings) { prefs.put(WindowManager.class, "user-tools-v2", settings); prefs.save(); } public List<UserToolExtension> getUserToolExtensions(UserRequest ureq) { List<UserToolExtension> tools = new ArrayList<>(); if(!isUserToolsDisabled()) { List<UserToolExtension> extensions = getAllUserToolExtensions(ureq); Set<String> availableToolSet = getAvailableUserToolSet(); for(UserToolExtension extension:extensions) { if(extension.isEnabled() && (availableToolSet.isEmpty() || availableToolSet.contains(extension.getUniqueExtensionID()))) { tools.add(extension); } } } return tools; } public List<UserToolExtension> getAllUserToolExtensions(UserRequest ureq) { List<UserToolExtension> userTools = new ArrayList<>(); for (Extension anExt : extManager.getExtensions()) { if(anExt.isEnabled()){ ExtensionElement ae = anExt.getExtensionFor(HomeMainController.class.getName(), ureq); if (ae != null && ae instanceof UserToolExtension) { UserToolExtension gAe = (UserToolExtension) ae; userTools.add(gAe); } } } return userTools; } public boolean isUserToolsDisabled() { return "none".equals(availableUserTools); } public String getAvailableUserTools() { return availableUserTools; } /** * Empty set is the same as all tools are available. * @return */ public Set<String> getAvailableUserToolSet() { Set<String> toolSet = new HashSet<>(); if(StringHelper.containsNonWhitespace(availableUserTools)) { String[] tools = availableUserTools.split(","); for(String tool:tools) { toolSet.add(stripToolKey(tool)); } } return toolSet; } public static String stripToolKey(String uniqueExtensionId) { String toolKey = uniqueExtensionId; if(toolKey.startsWith("org.olat.home.HomeMainController")) { int nextIndex = toolKey.indexOf(":", "org.olat.home.HomeMainController".length() + 2); if(nextIndex > 0) { toolKey = toolKey.substring(0, nextIndex); } } return toolKey; } public void setAvailableUserTools(String tools) { availableUserTools = tools; setStringProperty(CONFIG_USER_TOOLS, tools, true); } public String getDefaultPresetOfUserTools() { return defaultPresetOfUserTools; } public Set<String> getDefaultPresetOfUserToolSet() { Set<String> toolSet = new HashSet<>(); if(StringHelper.containsNonWhitespace(defaultPresetOfUserTools)) { String[] tools = defaultPresetOfUserTools.split(","); for(String tool:tools) { toolSet.add(stripToolKey(tool)); } } return toolSet; } public void setDefaultPresetOfUserTools(String preset) { defaultPresetOfUserTools = preset; setStringProperty(CONFIG_PRESET_USERTOOLES, preset, true); } }