private List<IndexField> guaranteeIdKey(IndexField... valueFields) throws JasDBStorageException { Set<String> fields = new HashSet<>(); List<IndexField> indexFields = new ArrayList<>(); for(IndexField valueField : valueFields) { fields.add(valueField.getField()); indexFields.add(valueField); } if(!fields.contains(SimpleEntity.DOCUMENT_ID)) { indexFields.add(new SimpleIndexField(SimpleEntity.DOCUMENT_ID, new UUIDKeyType())); } return indexFields; }
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); }