Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package de.zalando.sprocwrapper.dsprovider;
  
  
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  
 
 
 
 
 public class BitmapShardDataSourceProvider implements DataSourceProvider {
 
     private static final Logger LOG = LoggerFactory.getLogger(BitmapShardDataSourceProvider.class);
 
     private final DataSource[] dataSources;
 
     private final int mask;
 
     private final List<IntegerdistinctShardIds;
 
     public BitmapShardDataSourceProvider(final Map<StringDataSourceconnectionDataSources) {
 
         int maskLength = 0;
         for (Entry<StringDataSourceentry : connectionDataSources.entrySet()) {
             if (entry.getKey().length() > maskLength) {
                 maskLength = entry.getKey().length();
             }
         }
 
          = (1 << maskLength) - 1;
 
          = new DataSource[1 << maskLength];
 
         for (Entry<StringDataSourceentry : connectionDataSources.entrySet()) {
             DataSource ds = entry.getValue();
 
             for (int i = 0; i < .i++) {
                 String binaryString = StringUtils.repeat("0"maskLength) + Integer.toBinaryString(i);
                 if (binaryString.endsWith(entry.getKey())) {
                     .debug("Configured {} at index {}"entry.getValue(), i);
                     if ([i] != null) {
                         throw new IllegalArgumentException(
                             "Bitmask misconfigured for shards: two connections configured for index " + i);
                     }
 
                     [i] = ds;
                 }
             }
         }
 
         for (int i = 0; i < .i++) {
             if ([i] == null) {
                 throw new IllegalArgumentException("Not enough connection URLs configured for mask length " + maskLength
                         + ": datasource at index " + i + " is missing");
             }
         }
 
          = Lists.newArrayList();
 
         Set<DataSourceseenDataSources = Sets.newHashSet();
 
         for (int i = 0; i < .i++) {
             if (!seenDataSources.contains([i])) {
                 .add(i);
                 seenDataSources.add([i]);
             }
         }
     }
 
     public BitmapShardDataSourceProvider(final Class<? extends DataSourcedataSourceClass,
             final Map<StringStringcommonDataSourcePropertiesfinal Map<StringStringconnectionUrls)
 
         int maskLength = 0;
         for (Entry<StringStringentry : connectionUrls.entrySet()) {
             if (entry.getKey().length() > maskLength) {
                 maskLength = entry.getKey().length();
             }
         }
 
          = (1 << maskLength) - 1;
          = new DataSource[1 << maskLength];
 
         for (Entry<StringStringentry : connectionUrls.entrySet()) {
             DataSource ds = dataSourceClass.newInstance();
             for (Entry<StringStringprop : commonDataSourceProperties.entrySet()) {
                 BeanUtils.setProperty(dsprop.getKey(), prop.getValue());
             }
 
            String[] parts = entry.getValue().split("\\|");
            BeanUtils.setProperty(ds"jdbcUrl"parts[0]);
            if (parts.length > 1) {
                // a little bit hacky, because "initSQL" is boneCP-specific
                BeanUtils.setProperty(ds"initSQL"parts[1]);
            }
            for (int i = 0; i < .i++) {
                String binaryString = StringUtils.repeat("0"maskLength) + Integer.toBinaryString(i);
                if (binaryString.endsWith(entry.getKey())) {
                    .debug("Configured " + entry.getValue() + " at index " + i);
                    if ([i] != null) {
                        throw new IllegalArgumentException(
                            "Bitmask misconfigured for shards: two connections configured for index " + i);
                    }
                    [i] = ds;
                }
            }
        }
        for (int i = 0; i < .i++) {
            if ([i] == null) {
                throw new IllegalArgumentException("Not enough connection URLs configured for mask length " + maskLength
                        + ": datasource at index " + i + " is missing");
            }
        }
         = Lists.newArrayList();
        Set<DataSourceseenDataSources = Sets.newHashSet();
        for (int i = 0; i < .i++) {
            if (!seenDataSources.contains([i])) {
                .add(i);
                seenDataSources.add([i]);
            }
        }
    }
    @Override
    public int getDataSourceId(final int virtualShardId) {
        return virtualShardId & ;
    }
    @Override
    public DataSource getDataSource(final int virtualShardId) {
        return [virtualShardId & ];
    }
    @Override
    public List<IntegergetDistinctShardIds() {
        return ;
    }
New to GrepCode? Check out our FAQ X