/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.gecko.sync.stage; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; public interface GlobalSyncStage { public static enum Stage { idle, // Start state. checkPreconditions, // Preparation of the basics. TODO: clear status ensureClusterURL, // Setting up where we talk to. fetchInfoCollections, // Take a look at timestamps. fetchMetaGlobal, ensureKeysStage, /* ensureSpecialRecords, updateEngineTimestamps, */ syncClientsEngine(SyncClientsEngineStage.STAGE_NAME), /* processFirstSyncPref, processClientCommands, updateEnabledEngines, */ syncTabs("tabs"), syncPasswords("passwords"), syncBookmarks("bookmarks"), syncHistory("history"), syncFormHistory("forms"), uploadMetaGlobal, completed; // Maintain a mapping from names ("bookmarks") to Stage enumerations (syncBookmarks). private static final Map<String, Stage> named = new HashMap<String, Stage>(); static { for (Stage s : EnumSet.allOf(Stage.class)) { if (s.getRepositoryName() != null) { named.put(s.getRepositoryName(), s); } } } public static Stage byName(final String name) { if (name == null) { return null; } return named.get(name); } /** * @return an immutable collection of Stages. */ public static Collection<Stage> getNamedStages() { return Collections.unmodifiableCollection(named.values()); } // Each Stage tracks its repositoryName. private final String repositoryName; public String getRepositoryName() { return repositoryName; } private Stage() { this.repositoryName = null; } private Stage(final String name) { this.repositoryName = name; } } public void execute() throws NoSuchStageException; public void resetLocal(); public void wipeLocal() throws Exception; /** * What storage version number this engine supports. * <p> * Used to generate a fresh meta/global record for upload. * @return a version number or <code>null</code> to never include this engine in a fresh meta/global record. */ public Integer getStorageVersion(); }