wiki:Grits_ProjectPreferenceStore

Version 8 (modified by shan, 5 years ago) (diff)

--

Project Preference Store ( A Local Preference Store for Project)


ProjectPreferenceStore is a local store for storing preference values related to project, e.g. preference for project's Task information. This local store caches the preference values in maps (map key is the id of the preference variable). It calls GritsPreferenceStore only if the value is not found in its map.

Major Advantages:

  1. Currently the central GritsPreferenceStore does not store any preference value in maps and reads from file each time a preference value is read. This local preference store minimizes multiple read from file by keeping a cache of preference values in memory that have been read once.
  1. Currently preference values are stored as string in the preference file. Each time a preference is read, a generic PreferenceEntity object is created by GritsPreference store. This PreferenceEntity object is later converted to more specific preference object for getting preference values. ProjectPreferenceStore reduces multiple unnecessary de-serialization of preference values from strings stored in file.
    For example, if there were four tasks, ProjectPreferenceStore would cache a list of four tasks (along with its default information) which would be otherwise each time read as string from file, unmarshalled to PreferenceEntity object and then converted to list of tasks.

These advantages are general for any similar local preference store in GRITS and are recommended for plugins that would be using preferences.

Code Snippet

public class ProjectPreferenceStore
{
	@Inject private static IGritsPreferenceStore gritsPreferenceStore;
	private static Map<String, SingleChoicePreference> singleSelectionTypeMap =
			new HashMap<String, SingleChoicePreference>();
	private static Map<String, MultiChoicePreference<?>> multiSelectionTypeMap =
			new HashMap<String, MultiChoicePreference<?>>();

	public static SingleChoicePreference getSingleChoicePreference(Preference preference)
	{
		String preferenceName = preference.getPreferenceName();
		logger.info("Getting preference : " + preferenceName);
		SingleChoicePreference preferenceObject = singleSelectionTypeMap.get(preferenceName);
		if(preferenceObject == null)
		{
			preferenceObject = new SingleChoicePreference(gritsPreferenceStore, preference);
			singleSelectionTypeMap.put(preferenceName, preferenceObject);
		}
		return preferenceObject;
	}

	@SuppressWarnings("unchecked")
	public static <T> MultiChoicePreference <T> getMultiChoicePreference(
			ParameterizedPreference parameterizedPreference)
	{
		String preferenceName = parameterizedPreference.getPreferenceName();
		logger.info("Getting preference : " + preferenceName);
		MultiChoicePreference<T> preferenceObject = (MultiChoicePreference<T>) multiSelectionTypeMap.get(preferenceName);
		if(preferenceObject == null)
		{
			preferenceObject = new MultiChoicePreference<T>(gritsPreferenceStore, parameterizedPreference);
			multiSelectionTypeMap.put(preferenceName, preferenceObject);
		}
		return preferenceObject;
	}

....
}

Class Diagram for Project Preference Store



Class Diagram for Project Preference Store as a whole



Attachments (5)

Download all attachments as: .zip