/******************************************************************************* * Copyright (c) 2015 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.views.sections; import java.util.Comparator; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.springframework.ide.eclipse.boot.dash.BootDashActivator; /** * Table section column model backed by plug-in preferences. * Might need a super abstract class or interface in the near future. * * @author Alex Boyko * */ public class BootDashColumnModel { public static final Comparator<BootDashColumnModel> INDEX_COMPARATOR = new Comparator<BootDashColumnModel>() { @Override public int compare(BootDashColumnModel o1, BootDashColumnModel o2) { return o1.getIndex() - o2.getIndex(); } }; public static final Comparator<BootDashColumnModel> DEFAULT_INDEX_COMPARATOR = new Comparator<BootDashColumnModel>() { @Override public int compare(BootDashColumnModel o1, BootDashColumnModel o2) { return o1.getDefaultIndex() - o2.getDefaultIndex(); } }; private static final String PREF_KEY_SEPARATOR = "___"; private static final String PREF_KEY_WIDTH_SUFFIX = "width"; private static final String PREF_KEY_VISIBILITY_SUFFIX = "visibility"; private static final String PREF_KEY_ORDER_SUFFIX = "index"; private final BootDashColumn feature; private final int allignment; private final EditingSupportFactory editingSupport; private final BootDashActionFactory singleClickAction; private final IPreferenceStore prefStore; private final String prefKeysPrefix; public BootDashColumnModel(BootDashColumn feature, int defaultWidth, boolean defaultVisible, int defaultIndex, IPreferenceStore prefStore, String prefKeysPrefix, EditingSupportFactory editingSupport, BootDashActionFactory singleClickAction, int alignment ) { super(); this.feature = feature; this.allignment = alignment; this.editingSupport = editingSupport; this.singleClickAction = singleClickAction; this.prefStore = prefStore; this.prefKeysPrefix = prefKeysPrefix == null ? "" : prefKeysPrefix; if (prefStore != null) { prefStore.setDefault(getWidthPrefKey(), defaultWidth); prefStore.setDefault(getVisibilityPrefKey(), defaultVisible); prefStore.setDefault(getIndexKey(), defaultIndex); } } public BootDashColumnModel(BootDashColumn feature, int defaultWidth, boolean defaultVisible, int defaultIndex, IPreferenceStore prefStore, String prefKeysPrefix, EditingSupportFactory editingSupport, BootDashActionFactory singleClickAction ) { this(feature, defaultWidth, defaultVisible, defaultIndex, prefStore, prefKeysPrefix, editingSupport, singleClickAction, SWT.LEFT); } public BootDashColumnModel(BootDashColumn feature, int defaultWidth, boolean defaultVisible, int defaultIndex, String prefKeysPrefix ) { this(feature, defaultWidth, defaultVisible, defaultIndex, prefKeysPrefix, feature.getEditingSupport(), feature.getSingleClickAction()); } public BootDashColumnModel(BootDashColumn column, boolean defaultVisible, int defaultIndex, String prefKeysPrefix) { this(column, column.getDefaultWidth(), defaultVisible, defaultIndex, prefKeysPrefix); } public BootDashColumnModel(BootDashColumn feature, int defaultWidth, boolean defaultVisible, int defaultIndex, String prefKeysPrefix, EditingSupportFactory editingSupport, BootDashActionFactory singleClickAction ) { this(feature, defaultWidth, defaultVisible, defaultIndex, BootDashActivator.getDefault().getPreferenceStore(), prefKeysPrefix, editingSupport, singleClickAction); } public String getWidthPrefKey() { return getKey(prefKeysPrefix, feature.toString(), PREF_KEY_WIDTH_SUFFIX); } public String getVisibilityPrefKey() { return getKey(prefKeysPrefix, feature.toString(), PREF_KEY_VISIBILITY_SUFFIX); } public String getIndexKey() { return getKey(prefKeysPrefix, feature.toString(), PREF_KEY_ORDER_SUFFIX); } private static String getKey(String... tokens) { StringBuilder sb = new StringBuilder(); if (tokens.length > 0) { sb.append(tokens[0]); for (int i = 1; i < tokens.length; i++) { sb.append(PREF_KEY_SEPARATOR); sb.append(tokens[i]); } } return sb.toString(); } public int getWidth() { return prefStore.getInt(getWidthPrefKey()); } public void setWidth(int width) { prefStore.setValue(getWidthPrefKey(), width); } public boolean getVisibility() { return prefStore.getBoolean(getVisibilityPrefKey()); } public void setVisibility(boolean visibility) { prefStore.setValue(getVisibilityPrefKey(), visibility); } public String getLabel() { return feature.getLabel(); } public int getDefaultWidth() { return prefStore.getDefaultInt(getWidthPrefKey()); } public boolean getDefaultVisibility() { return prefStore.getDefaultBoolean(getVisibilityPrefKey()); } public int getDefaultIndex() { return prefStore.getDefaultInt(getIndexKey()); } public int getAllignment() { return allignment; } public EditingSupportFactory getEditingSupport() { return editingSupport; } public BootDashActionFactory getSingleClickActionFactory() { return singleClickAction; } public int getIndex() { return prefStore.getInt(getIndexKey()); } public void setIndex(int index) { prefStore.setValue(getIndexKey(), index); } public BootDashColumn getType() { return feature; } public void restoreDefaults() { setWidth(getDefaultWidth()); setIndex(getDefaultIndex()); setVisibility(getDefaultVisibility()); } }