All Downloads are FREE. Search and download functionalities are using the official Maven repository.

enterprises.orbital.evekit.model.CapsuleerSynchronizer Maven / Gradle / Ivy

package enterprises.orbital.evekit.model;

import java.io.IOException;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import enterprises.orbital.base.OrbitalProperties;
import enterprises.orbital.evekit.account.SynchronizedEveAccount;
import enterprises.orbital.evekit.model.SynchronizerUtil.SyncStatus;
import enterprises.orbital.evekit.model.character.Capsuleer;
import enterprises.orbital.evekit.model.character.sync.CharacterAccountBalanceSync;
import enterprises.orbital.evekit.model.character.sync.CharacterAccountStatusSync;
import enterprises.orbital.evekit.model.character.sync.CharacterAssetsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterBlueprintsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterBookmarksSync;
import enterprises.orbital.evekit.model.character.sync.CharacterCalendarEventAttendeeSync;
import enterprises.orbital.evekit.model.character.sync.CharacterChatChannelsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterContactListSync;
import enterprises.orbital.evekit.model.character.sync.CharacterContactNotificationSync;
import enterprises.orbital.evekit.model.character.sync.CharacterContractBidsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterContractItemsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterContractsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterFacWarStatsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterIndustryJobsHistorySync;
import enterprises.orbital.evekit.model.character.sync.CharacterIndustryJobsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterKillLogSync;
import enterprises.orbital.evekit.model.character.sync.CharacterLocationsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterMailMessageBodiesSync;
import enterprises.orbital.evekit.model.character.sync.CharacterMailMessageSync;
import enterprises.orbital.evekit.model.character.sync.CharacterMailingListSync;
import enterprises.orbital.evekit.model.character.sync.CharacterMarketOrderSync;
import enterprises.orbital.evekit.model.character.sync.CharacterMedalSync;
import enterprises.orbital.evekit.model.character.sync.CharacterNotificationSync;
import enterprises.orbital.evekit.model.character.sync.CharacterNotificationTextSync;
import enterprises.orbital.evekit.model.character.sync.CharacterPlanetaryColoniesSync;
import enterprises.orbital.evekit.model.character.sync.CharacterResearchAgentSync;
import enterprises.orbital.evekit.model.character.sync.CharacterSheetSync;
import enterprises.orbital.evekit.model.character.sync.CharacterSkillInQueueSync;
import enterprises.orbital.evekit.model.character.sync.CharacterSkillInTrainingSync;
import enterprises.orbital.evekit.model.character.sync.CharacterSkillsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterStandingSync;
import enterprises.orbital.evekit.model.character.sync.CharacterUpcomingCalendarEventsSync;
import enterprises.orbital.evekit.model.character.sync.CharacterWalletJournalSync;
import enterprises.orbital.evekit.model.character.sync.CharacterWalletTransactionSync;
import enterprises.orbital.evekit.model.character.sync.PartialCharacterSheetSync;
import enterprises.orbital.evexmlapi.IEveXmlApi;
import enterprises.orbital.evexmlapi.act.IAPIKeyInfo;
import enterprises.orbital.evexmlapi.act.IAccountAPI;
import enterprises.orbital.evexmlapi.chr.ICharacterAPI;

/**
 * Synchronize a capsuleer account.
 */
public class CapsuleerSynchronizer extends AbstractSynchronizer {
  protected static final Logger log = Logger.getLogger(CapsuleerSynchronizer.class.getName());

  // Class which encapsulates sync state execution
  public static interface CharStateHandler extends AbstractSynchronizer.StateHandler {
    public SyncStatus sync(
                           long syncTime,
                           SynchronizedEveAccount syncAccount,
                           SynchronizerUtil syncUtil,
                           ICharacterAPI charRequest,
                           IAccountAPI acctRequest);
  }

  // Support synchronization features (see bottom of file for initialization)
  public static final Map supportedFeatures = new HashMap();

  /**
   * {@inheritDoc}
   */
  @Override
  public void synchronize(
                          SynchronizedEveAccount syncAccount)
    throws IOException, URISyntaxException {
    log.fine("Starting sync: " + syncAccount);
    // Steps:
    // 1) Verify the API key is not expired. Synchronization is skipped if the key is expired.
    IEveXmlApi apiHandle = getApiHandle();
    IAccountAPI acctRequest = apiHandle.getAccountAPIService(syncAccount.getEveKey(), syncAccount.getEveVCode());
    ICharacterAPI charRequest = apiHandle.getCharacterAPIService(syncAccount.getEveKey(), syncAccount.getEveVCode(), syncAccount.getEveCharacterID());
    IAPIKeyInfo keyInfo = getKeyInfo(acctRequest);
    if (!verifyNotExpired(keyInfo)) return;
    // 2) Verify the account is active. Synchronization is skipped if the account is not active or marked for delete.
    if (!verifyActiveAndNotDeleted(syncAccount)) return;
    // 3) Verify the account is not stuck. If an unfinished synchronizer exists but has been open for too long. Then it is finished immediately.
    if (!verifyTrackerNotStuck(syncAccount)) return;
    // 4) Verify enough time has passed since the last synchronization. If not enough time has passed, then synchronization is skipped.
    if (!verifyTrackerSeparation(syncAccount)) return;
    // 5) Create a new tracker if it's time for this account to be synched.
    CapsuleerSyncTracker tracker = CapsuleerSyncTracker.createOrGetUnfinishedTracker(syncAccount);
    if (tracker.getSyncStart() <= 0) {
      // Tracker isn't started yet so start it.
      tracker.setSyncStart(OrbitalProperties.getCurrentTime());
      tracker = SyncTracker.updateTracker(tracker);
    }
    // Make sure a containing Capsuleer exists as well.
    Capsuleer.getOrCreateCapsuleer(syncAccount);
    // 6) Synch the current account until we complete the synch or encounter an unrecoverable error.
    SynchronizerUtil syncUtil = new SynchronizerUtil();
    // Compute states that should be skipped according to system properties.
    Set excluded = getExcludedStates();
    // Set syncTime to the start of the current tracker
    long syncTime = tracker.getSyncStart();
    // Determine starting syncState
    SynchronizationState state = tracker.trackerComplete(supportedFeatures.keySet());
    // Process state
    SyncStatus lastStatus = SyncStatus.DONE;
    do {
      try {
        // If we have a handler for this state, then invoke it.
        CharStateHandler handler = supportedFeatures.get(state);
        if (handler != null) {
          if (excluded.contains(state)) {
            // Not sync'ing this state, record it.
            lastStatus = handler.exclude(syncAccount, syncUtil);
          } else if (!state.isAllowed(keyInfo.getAccessMask())) {
            // Key doesn't allow this state, record it.
            lastStatus = handler.notAllowed(syncAccount, syncUtil);
          } else {
            // Attempt to sync this state
            lastStatus = handler.sync(syncTime, syncAccount, syncUtil, charRequest, acctRequest);
          }
        } else {
          // For now, since we likely don't have all the states handled we'll
          // do nothing here. In the future, this should complain about an
          // unknown state.
          log.warning("No handler for state " + state + ".  This sync will eventually time out if this state is expected to be handled!");
          lastStatus = SyncStatus.DONE;
        }
      } catch (Throwable e) {
        // Trap any errors which escape and treat the current step as a failure. We'll log the failure but otherwise not retry the current step.
        log.log(Level.SEVERE, "Current step " + state + " will be marked as failed and not retried", e);
        lastStatus = SyncStatus.DONE;
        tracker = CapsuleerSyncTracker.getUnfinishedTracker(syncAccount);
        if (tracker != null) {
          // Mark the state as failed
          tracker.setState(state, SyncTracker.SyncState.SYNC_ERROR, "Internal error.  Contact the admin for more information");
          SyncTracker.updateTracker(tracker);
        }
      }
      // Prep for next step or exit.
      tracker = CapsuleerSyncTracker.getUnfinishedTracker(syncAccount);
      state = tracker == null ? null : tracker.trackerComplete(supportedFeatures.keySet());
    } while (state != null && lastStatus == SyncStatus.DONE);
    // Check if we can finish this tracker.
    if (tracker != null && tracker.trackerComplete(supportedFeatures.keySet()) == null) {
      log.fine("Tracker done, marking as finished");
      SyncTracker.finishTracker(tracker);
    }
  }

  // Initialize support features
  static {
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_ACCOUNTSTATUS, new CharStateHandler() {

      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterAccountStatusSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterAccountStatusSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterAccountStatusSync.syncAccountStatus(syncTime, syncAccount, syncUtil, charRequest, acctRequest);
      }

    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_ACCOUNTBALANCE, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterAccountBalanceSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterAccountBalanceSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterAccountBalanceSync.syncAccountBalance(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_SKILLINTRAINING, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterSkillInTrainingSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterSkillInTrainingSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterSkillInTrainingSync.syncSkillInTraining(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CHARACTERSHEET, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterSheetSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterSheetSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterSheetSync.syncCharacterSheet(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_PARTIALCHARACTERSHEET, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return PartialCharacterSheetSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return PartialCharacterSheetSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return PartialCharacterSheetSync.syncCharacterSheet(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CHATCHANNELS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterChatChannelsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterChatChannelsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterChatChannelsSync.syncChatChannels(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_ASSETLIST, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterAssetsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterAssetsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterAssetsSync.syncAssets(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_UPCOMINGCALENDAREVENTS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterUpcomingCalendarEventsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterUpcomingCalendarEventsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterUpcomingCalendarEventsSync.syncUpcomingCalendarEvents(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CALENDAREVENTATTENDEES, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterCalendarEventAttendeeSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterCalendarEventAttendeeSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterCalendarEventAttendeeSync.syncCalendarEventAttendees(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CONTACTLIST, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterContactListSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterContactListSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterContactListSync.syncContactList(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CONTACTNOTIFICATIONS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterContactNotificationSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterContactNotificationSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterContactNotificationSync.syncCharacterContactNotifications(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_BLUEPRINTS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterBlueprintsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterBlueprintsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterBlueprintsSync.syncCharacterBlueprints(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_BOOKMARKS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterBookmarksSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterBookmarksSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterBookmarksSync.syncBookmarks(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CONTRACTS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterContractsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterContractsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterContractsSync.syncCharacterContracts(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CONTRACTITEMS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterContractItemsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterContractItemsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterContractItemsSync.syncCharacterContractItems(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_CONTRACTBIDS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterContractBidsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterContractBidsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterContractBidsSync.syncCharacterContractBids(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_FACWARSTATS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterFacWarStatsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterFacWarStatsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterFacWarStatsSync.syncFacWarStats(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_INDUSTRYJOBS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterIndustryJobsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterIndustryJobsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterIndustryJobsSync.syncCharacterIndustryJobs(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_INDUSTRYJOBSHISTORY, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterIndustryJobsHistorySync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterIndustryJobsHistorySync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterIndustryJobsHistorySync.syncCharacterIndustryJobsHistory(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_KILLLOG, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterKillLogSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterKillLogSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterKillLogSync.syncCharacterKillLog(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_LOCATIONS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterLocationsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterLocationsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterLocationsSync.syncCharacterLocations(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_MAILMESSAGES, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterMailMessageSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterMailMessageSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterMailMessageSync.syncMailMessages(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_MAILBODIES, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterMailMessageBodiesSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterMailMessageBodiesSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterMailMessageBodiesSync.syncMailMessageBodies(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_MAILINGLISTS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterMailingListSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterMailingListSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterMailingListSync.syncMailingLists(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_MARKETORDERS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterMarketOrderSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterMarketOrderSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterMarketOrderSync.syncCharacterMarketOrders(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_MEDALS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterMedalSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterMedalSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterMedalSync.syncCharacterMedals(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_NOTIFICATIONS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterNotificationSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterNotificationSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterNotificationSync.syncNotifications(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_NOTIFICATIONTEXTS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterNotificationTextSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterNotificationTextSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterNotificationTextSync.syncNotificationTexts(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_PLANETARY_COLONIES, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterPlanetaryColoniesSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterPlanetaryColoniesSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterPlanetaryColoniesSync.syncPlanetaryColonies(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_RESEARCH, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterResearchAgentSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterResearchAgentSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterResearchAgentSync.syncResearchAgents(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_SKILLQUEUE, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterSkillInQueueSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterSkillInQueueSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterSkillInQueueSync.syncSkillQueue(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_SKILLS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterSkillsSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterSkillsSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterSkillsSync.syncCharacterSheet(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_STANDINGS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterStandingSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterStandingSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterStandingSync.syncStanding(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_WALLETJOURNAL, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterWalletJournalSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterWalletJournalSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterWalletJournalSync.syncCharacterWalletJournal(syncTime, syncAccount, syncUtil, charRequest);
      }
    });
    supportedFeatures.put(SynchronizationState.SYNC_CHAR_WALLETTRANSACTIONS, new CharStateHandler() {
      @Override
      public SyncStatus exclude(
                                SynchronizedEveAccount syncAccount,
                                SynchronizerUtil syncUtil) {
        return CharacterWalletTransactionSync.exclude(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus notAllowed(
                                   SynchronizedEveAccount syncAccount,
                                   SynchronizerUtil syncUtil) {
        return CharacterWalletTransactionSync.notAllowed(syncAccount, syncUtil);
      }

      @Override
      public SyncStatus sync(
                             long syncTime,
                             SynchronizedEveAccount syncAccount,
                             SynchronizerUtil syncUtil,
                             ICharacterAPI charRequest,
                             IAccountAPI acctRequest) {
        return CharacterWalletTransactionSync.syncCharacterWalletTransaction(syncTime, syncAccount, syncUtil, charRequest);
      }
    });

  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy