private MultiKeyloader createMultiKeyLoader(List<IndexField> fields, KeyNameMapper mapper) throws JasDBStorageException { KeyFactory[] keyFactories = new KeyFactory[fields.size()]; for(int i=0; i<fields.size(); i++) { IndexField field = fields.get(i); keyFactories[i] = KeyFactoryManager.createKeyFactory(field.getField(), field.getKeyType()); mapper.addMappedField(field.getField()); } return new MultiKeyLoaderImpl(mapper, keyFactories); }
public KeyInfoImpl(List<IndexField> keyFields, List<IndexField> valueFields) throws JasDBStorageException { if(keyFields.size() == 1) { IndexField indexField = keyFields.get(0); this.keyFactory = KeyFactoryManager.createKeyFactory(indexField.getField(), indexField.getKeyType()); this.fields = Lists.newArrayList(keyFactory.getFieldName()); this.keyNameMapper = new KeyNameMapperImpl(); this.keyNameMapper.setValueMarker(0); } else if(keyFields.size() > 1) { MultiKeyloader keyloader = createMultiKeyLoader(keyFields, new KeyNameMapperImpl()); this.keyNameMapper = keyloader.getKeyNameMapper(); this.keyNameMapper.setValueMarker(keyFields.size()); this.keyFactory = new CompositeKeyFactory(keyloader); this.fields = keyloader.getFields(); } else { throw new JasDBStorageException("Unable to create key information, no keys specified"); } this.multiValueKeyLoader = createMultiKeyLoader(valueFields, this.keyNameMapper); this.valueFields = multiValueKeyLoader.getFields(); this.wrapperKeyFactory = new WrappedValueKeyFactory(keyFactory, multiValueKeyLoader); }