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

com.symphony.oss.models.fundamental.store.ValidSequenceHashes Maven / Gradle / Ivy

/*
 * Copyright 2019 Symphony Communication Services, LLC.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.symphony.oss.models.fundamental.store;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.symphonyoss.s2.common.exception.NoSuchObjectException;
import org.symphonyoss.s2.common.fault.TransactionFault;
import org.symphonyoss.s2.common.hash.Hash;

import com.symphony.oss.models.fundmental.canon.ISequence;

public class ValidSequenceHashes
{
  private Set  absoluteSequences_ = new HashSet<>();
  private Set  currentSequences_ = new HashSet<>();
  private Set  hashCurrentSequences_ = new HashSet<>();
  private Set  allSequences_ = new HashSet<>();
  
  public ValidSequenceHashes withSequences(IFundamentalDatabaseReadOnly fundamentalDatabase, Collection sequenceHashes)
  {
    for(Hash sequenceHash : sequenceHashes)
    {
      try
      {
        ISequence sequence = fundamentalDatabase.fetchCurrent(sequenceHash, ISequence.class);
        
        switch(sequence.getType())
        {
          case CURRENT:
            currentSequences_.add(sequenceHash);
            allSequences_.add(sequenceHash);
            break;
            
          case ABSOLUTE:
            absoluteSequences_.add(sequenceHash);
            allSequences_.add(sequenceHash);
            break;
            
          case HASH_CURRENT:
            hashCurrentSequences_.add(sequenceHash);
            allSequences_.add(sequenceHash);
            break;
            
          default:
            throw new IllegalStateException("Unknown sequence type " + sequence);
        }
      }
      catch (NoSuchObjectException e)
      {
        throw new TransactionFault("Invalid sequence hash " + sequenceHash, e);
      }
    }
    
    return this;
  }
  
  public ValidSequenceHashes withValidCurrentSequence(Hash sequenceHash)
  {
    currentSequences_.add(sequenceHash);
    allSequences_.add(sequenceHash);
    
    return this;
  }
  
  public ValidSequenceHashes withValidHashCurrentSequence(Hash sequenceHash)
  {
    hashCurrentSequences_.add(sequenceHash);
    allSequences_.add(sequenceHash);
    
    return this;
  }
  
  public ValidSequenceHashes withValidAbsoluteSequence(Hash sequenceHash)
  {
    absoluteSequences_.add(sequenceHash);
    allSequences_.add(sequenceHash);
    
    return this;
  }
  
  public ValidSequenceHashes withValidCurrentSequences(Collection sequenceHashes)
  {
    currentSequences_.addAll(sequenceHashes);
    allSequences_.addAll(sequenceHashes);
    
    return this;
  }
  
  public ValidSequenceHashes withValidHashCurrentSequences(Collection sequenceHashes)
  {
    hashCurrentSequences_.addAll(sequenceHashes);
    allSequences_.addAll(sequenceHashes);
    
    return this;
  }
  
  public ValidSequenceHashes withValidAbsoluteSequences(Collection sequenceHashes)
  {
    absoluteSequences_.addAll(sequenceHashes);
    allSequences_.addAll(sequenceHashes);
    
    return this;
  }

  public Set getAbsoluteSequences()
  {
    return absoluteSequences_;
  }

  public Set getCurrentSequences()
  {
    return currentSequences_;
  }

  public Set getHashCurrentSequences()
  {
    return hashCurrentSequences_;
  }

  public Set getAllSequences()
  {
    return allSequences_;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy