blob: 6d4c300782f70452f8507745fed95b83d05dc5d6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.corext.fix;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpMessages;
import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileManager;
import org.eclipse.jdt.internal.ui.preferences.cleanup.CleanUpProfileVersioner;
import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.BuiltInProfile;
import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.KeySet;
import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
public class CleanUpPreferenceUtil {
public static final String SAVE_PARTICIPANT_KEY_PREFIX= "sp_"; //$NON-NLS-1$
public static Map<String, String> loadOptions(IScopeContext context) {
return loadOptions(context, CleanUpConstants.CLEANUP_PROFILE, CleanUpConstants.DEFAULT_PROFILE);
}
private static Map<String, String> loadOptions(IScopeContext context, String profileIdKey, String defaultProfileId) {
IEclipsePreferences contextNode= context.getNode(JavaUI.ID_PLUGIN);
String id= contextNode.get(profileIdKey, null);
if (id != null && ProjectScope.SCOPE.equals(context.getName())) {
return loadFromProject(context);
}
IScopeContext instanceScope= InstanceScope.INSTANCE;
if (id == null) {
if (ProjectScope.SCOPE.equals(context.getName())) {
id= instanceScope.getNode(JavaUI.ID_PLUGIN).get(profileIdKey, null);
}
if (id == null) {
id= DefaultScope.INSTANCE.getNode(JavaUI.ID_PLUGIN).get(profileIdKey, defaultProfileId);
}
}
for (Profile profile : getBuiltInProfiles()) {
if (id.equals(profile.getID()))
return profile.getSettings();
}
if (id.equals(CleanUpConstants.SAVE_PARTICIPANT_PROFILE))
return JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getMap();
CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
ProfileStore profileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner);
List<Profile> list= null;
try {
list= profileStore.readProfiles(instanceScope);
} catch (CoreException e1) {
JavaPlugin.log(e1);
}
if (list == null)
return null;
for (Profile profile : list) {
if (id.equals(profile.getID()))
return profile.getSettings();
}
return null;
}
private static Map<String, String> loadFromProject(IScopeContext context) {
final Map<String, String> profileOptions= new HashMap<>();
IEclipsePreferences uiPrefs= context.getNode(JavaUI.ID_PLUGIN);
CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
CleanUpOptions defaultOptions= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS);
boolean hasValues= false;
for (KeySet keySet : CleanUpProfileManager.KEY_SETS) {
IEclipsePreferences preferences= context.getNode(keySet.getNodeName());
for (String key : keySet.getKeys()) {
String val= preferences.get(key, null);
if (val != null) {
hasValues= true;
} else {
val= defaultOptions.getValue(key);
}
profileOptions.put(key, val);
}
}
if (!hasValues)
return null;
int version= uiPrefs.getInt(CleanUpConstants.CLEANUP_SETTINGS_VERSION_KEY, versioner.getFirstVersion());
if (version == versioner.getCurrentVersion())
return profileOptions;
CustomProfile profile= new CustomProfile("tmp", profileOptions, version, versioner.getProfileKind()); //$NON-NLS-1$
versioner.update(profile);
return profile.getSettings();
}
public static Map<String, String> loadSaveParticipantOptions(IScopeContext context) {
IEclipsePreferences node;
if (hasSettingsInScope(context)) {
node= context.getNode(JavaUI.ID_PLUGIN);
} else {
IScopeContext instanceScope= InstanceScope.INSTANCE;
if (hasSettingsInScope(instanceScope)) {
node= instanceScope.getNode(JavaUI.ID_PLUGIN);
} else {
return JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getMap();
}
}
Map<String, String> result= new HashMap<>();
for (String key : JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys()) {
result.put(key, node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, CleanUpOptions.FALSE));
}
return result;
}
public static void saveSaveParticipantOptions(IScopeContext context, Map<String, String> settings) {
IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
for (Map.Entry<String, String> entry : settings.entrySet()) {
String key = entry.getKey();
node.put(SAVE_PARTICIPANT_KEY_PREFIX + key, entry.getValue());
}
}
public static boolean hasSettingsInScope(IScopeContext context) {
IEclipsePreferences node= context.getNode(JavaUI.ID_PLUGIN);
for (String key : JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_SAVE_ACTION_OPTIONS).getKeys()) {
if (node.get(SAVE_PARTICIPANT_KEY_PREFIX + key, null) != null)
return true;
}
return false;
}
/**
* Returns a list of {@link org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile} stored in the <code>scope</code>,
* including the built-in profiles.
* @param scope the context from which to retrieve the profiles
* @return list of profiles, not null
* @since 3.3
*/
public static List<Profile> loadProfiles(IScopeContext scope) {
CleanUpProfileVersioner versioner= new CleanUpProfileVersioner();
ProfileStore profileStore= new ProfileStore(CleanUpConstants.CLEANUP_PROFILES, versioner);
List<Profile> list= null;
try {
list= profileStore.readProfiles(scope);
} catch (CoreException e1) {
JavaPlugin.log(e1);
}
if (list == null) {
list= getBuiltInProfiles();
} else {
list.addAll(getBuiltInProfiles());
}
return list;
}
/**
* Returns a list of built in clean up profiles
* @return the list of built in profiles, not null
* @since 3.3
*/
public static List<Profile> getBuiltInProfiles() {
ArrayList<Profile> result= new ArrayList<>();
Map<String, String> settings= JavaPlugin.getDefault().getCleanUpRegistry().getDefaultOptions(CleanUpConstants.DEFAULT_CLEAN_UP_OPTIONS).getMap();
final Profile eclipseProfile= new BuiltInProfile(CleanUpConstants.ECLIPSE_PROFILE, CleanUpMessages.CleanUpProfileManager_ProfileName_EclipseBuildIn, settings, 2, CleanUpProfileVersioner.CURRENT_VERSION, CleanUpProfileVersioner.PROFILE_KIND);
result.add(eclipseProfile);
return result;
}
private CleanUpPreferenceUtil() {
}
}