/* TimeDomainSampleFilterPresetManager.java created 2010-09-22 * */ package org.signalml.app.config.preset.managers; import static org.signalml.app.util.i18n.SvarogI18n._; import org.signalml.app.config.preset.Preset; import org.signalml.app.config.preset.PresetManager; import org.signalml.app.util.XMLUtils; import org.signalml.domain.tag.StyledTagSet; import org.signalml.plugin.export.signal.TagStyle; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.annotations.Annotations; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.converters.reflection.FieldDictionary; import com.thoughtworks.xstream.converters.reflection.NativeFieldKeySorter; import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer; /** * {@link PresetManager} that stores and loads {@link StyledTagSet StyledTagSets}. * StyledTagSets are saved only for the future use of {@link TagStyle TagStyles} * that are defined inside of them. * * @author Piotr Szachewicz */ @XStreamAlias("styledTagSets") public class StyledTagSetPresetManager extends AbstractPresetManager { public static String EMPTY_PRESET_NAME = _("< Empty preset - no styles defined >"); @Override public String getStandardFilename() { return "tagStyles.xml"; } @Override public Class<?> getPresetClass() { return StyledTagSet.class; } @Override public XStream getStreamer() { if (streamer == null) streamer = createStreamer(); return streamer; } /** * Creates a streamer capable of saving/loading the {@link StyledTagSet}. * @return */ private XStream createStreamer() { XStream streamer = new XStream( new PureJavaReflectionProvider(new FieldDictionary(new NativeFieldKeySorter())), new DomDriver("UTF-8", new XmlFriendlyReplacer() { // the classes in question don't have $'s in their names and the // format specifies single underscores, so disregard replacing @Override public String escapeName(String name) { return name; } @Override public String unescapeName(String name) { return name; } } )); Annotations.configureAliases(streamer, StyledTagSet.class ); XMLUtils.configureStreamerForMontage(streamer); return streamer; } /** * Returns all presets that are stored using this PresetManager plus * an empty preset in which no styles are defined. * @return empty preset plus all presets that are returned by the * {@link StyledTagSetPresetManager#getPresets()} method. */ public Preset[] getPresetsWithEmptyOption() { StyledTagSet emptyPreset = new StyledTagSet(); emptyPreset.setName(EMPTY_PRESET_NAME); Preset[] nonEmptyPresets = getPresets(); Preset[] allPresets = new Preset[nonEmptyPresets.length + 1]; allPresets[0] = emptyPreset; for (int i = 0; i < nonEmptyPresets.length; i++) allPresets[i + 1] = nonEmptyPresets[i]; return allPresets; } }