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); }
public KeyInfoImpl(String headerDescriptor, String valueDescriptor) throws JasDBStorageException { KeyFactory[] keyFactories = KeyFactoryManager.parseHeader(headerDescriptor); if(keyFactories.length == 1) { this.keyFactory = keyFactories[0]; LOG.debug("Loaded key index for field: {} and factory: {}", keyFactory.getFieldName(), keyFactory); this.fields = new LinkedList<>(); this.valueFields = new LinkedList<>(); if(this.keyFactory instanceof CompositeKeyFactory) { MultiKeyloader multiKeyloader = ((CompositeKeyFactory)keyFactory).getMultiKeyloader(); this.fields.addAll(multiKeyloader.getFields()); this.keyNameMapper = multiKeyloader.getKeyNameMapper(); this.keyNameMapper.setValueMarker(multiKeyloader.getFields().size()); } else { this.fields.add(keyFactory.getFieldName()); this.keyNameMapper = new KeyNameMapperImpl(); this.keyNameMapper.setValueMarker(0); } KeyFactory[] valueFactories = KeyFactoryManager.parseHeader(valueDescriptor); for(int i=0; i<valueFactories.length; i++) { String fieldName = valueFactories[i].getFieldName(); keyNameMapper.addMappedField(fieldName); valueFields.add(fieldName); } this.multiValueKeyLoader = new MultiKeyLoaderImpl(keyNameMapper, valueFactories); this.wrapperKeyFactory = new WrappedValueKeyFactory(keyFactory, multiValueKeyLoader); } else { throw new JasDBStorageException("Unexpected key information in headers"); } }