@Override public void deleteObject(String accountName, ObjectType objectType, String objectKey) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); Object oldValue = credentials.getObjects().get(objectType).remove(objectKey); credentials.getMetadata().get(objectType).remove(objectKey); if (oldValue == null) { throw new IllegalArgumentException("Does not exist"); } }
MemoryAccountCredentials memoryAccountCredentials = MemoryAccountCredentials.builder().build(); MemoryNamedAccountCredentials.MemoryNamedAccountCredentialsBuilder memoryNamedAccountCredentialsBuilder = MemoryNamedAccountCredentials.builder() .name(name) .credentials(memoryAccountCredentials); memoryNamedAccountCredentialsBuilder.supportedTypes(supportedTypes); memoryNamedAccountCredentialsBuilder.objects(objectStorage); Map<ObjectType, Map<String, Map<String, Object>>> metadataStorage = new ConcurrentHashMap<>(); memoryNamedAccountCredentialsBuilder.metadata(metadataStorage); MemoryNamedAccountCredentials memoryNamedAccountCredentials = memoryNamedAccountCredentialsBuilder.build(); accountCredentialsRepository.save(name, memoryNamedAccountCredentials); memoryStorageServiceBuilder.accountName(name);
@Override public <T> T loadObject(String accountName, ObjectType objectType, String objectKey) throws IllegalArgumentException { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); Object entry = credentials.getObjects().get(objectType).get(objectKey); if (entry == null) { throw new NotFoundException("No such object named " + objectKey); } return (T)entry; }
MemoryAccountCredentials memoryAccountCredentials = MemoryAccountCredentials.builder().build(); MemoryNamedAccountCredentials.MemoryNamedAccountCredentialsBuilder memoryNamedAccountCredentialsBuilder = MemoryNamedAccountCredentials.builder() .name(name) .credentials(memoryAccountCredentials); memoryNamedAccountCredentialsBuilder.supportedTypes(supportedTypes); memoryNamedAccountCredentialsBuilder.objects(objectStorage); Map<ObjectType, Map<String, Map<String, Object>>> metadataStorage = new ConcurrentHashMap<>(); memoryNamedAccountCredentialsBuilder.metadata(metadataStorage); MemoryNamedAccountCredentials memoryNamedAccountCredentials = memoryNamedAccountCredentialsBuilder.build(); accountCredentialsRepository.save(name, memoryNamedAccountCredentials); memoryStorageServiceBuilder.accountName(name);
private MemoryNamedAccountCredentials getCredentials(String accountName, ObjectType objectType) { MemoryNamedAccountCredentials credentials = (MemoryNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); credentials.getObjects().putIfAbsent(objectType, new ConcurrentHashMap<>()); credentials.getMetadata().putIfAbsent(objectType, new ConcurrentHashMap<>()); return credentials; }
@Override public <T> T loadObject(String accountName, ObjectType objectType, String objectKey) throws IllegalArgumentException { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); Object entry = credentials.getObjects().get(objectType).get(objectKey); if (entry == null) { throw new NotFoundException("No such object named " + objectKey); } return (T)entry; }
@Override public <T> void storeObject(String accountName, ObjectType objectType, String objectKey, T obj, String filename, boolean isAnUpdate) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); long currentTimestamp = System.currentTimeMillis(); Map<String, Object> objectMetadataMap = new HashMap<>(); objectMetadataMap.put("id", objectKey); objectMetadataMap.put("updatedTimestamp", currentTimestamp); objectMetadataMap.put("updatedTimestampIso", Instant.ofEpochMilli(currentTimestamp).toString()); if (objectType == ObjectType.CANARY_CONFIG) { CanaryConfig canaryConfig = (CanaryConfig)obj; checkForDuplicateCanaryConfig(accountName, objectType, canaryConfig, objectKey); objectMetadataMap.put("name", canaryConfig.getName()); objectMetadataMap.put("applications", canaryConfig.getApplications()); } credentials.getObjects().get(objectType).put(objectKey, obj); credentials.getMetadata().get(objectType).put(objectKey, objectMetadataMap); }
@Override public List<Map<String, Object>> listObjectKeys(String accountName, ObjectType objectType, List<String> applications, boolean skipIndex) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); boolean filterOnApplications = applications != null && applications.size() > 0; List<Map<String, Object>> result = new ArrayList<>(); for (Map.Entry<String, Object> entry : credentials.getObjects().get(objectType).entrySet()) { String entryKey = entry.getKey(); if (objectType == ObjectType.CANARY_CONFIG) { if (filterOnApplications) { CanaryConfig canaryConfig = (CanaryConfig)entry.getValue(); if (CanaryConfigIndex.haveCommonElements(applications, canaryConfig.getApplications())) { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } return result; } }
@Override public void deleteObject(String accountName, ObjectType objectType, String objectKey) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); Object oldValue = credentials.getObjects().get(objectType).remove(objectKey); credentials.getMetadata().get(objectType).remove(objectKey); if (oldValue == null) { throw new IllegalArgumentException("Does not exist"); } }
private MemoryNamedAccountCredentials getCredentials(String accountName, ObjectType objectType) { MemoryNamedAccountCredentials credentials = (MemoryNamedAccountCredentials)accountCredentialsRepository .getOne(accountName) .orElseThrow(() -> new IllegalArgumentException("Unable to resolve account " + accountName + ".")); credentials.getObjects().putIfAbsent(objectType, new ConcurrentHashMap<>()); credentials.getMetadata().putIfAbsent(objectType, new ConcurrentHashMap<>()); return credentials; }
@Override public <T> void storeObject(String accountName, ObjectType objectType, String objectKey, T obj, String filename, boolean isAnUpdate) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); long currentTimestamp = System.currentTimeMillis(); Map<String, Object> objectMetadataMap = new HashMap<>(); objectMetadataMap.put("id", objectKey); objectMetadataMap.put("updatedTimestamp", currentTimestamp); objectMetadataMap.put("updatedTimestampIso", Instant.ofEpochMilli(currentTimestamp).toString()); if (objectType == ObjectType.CANARY_CONFIG) { CanaryConfig canaryConfig = (CanaryConfig)obj; checkForDuplicateCanaryConfig(accountName, objectType, canaryConfig, objectKey); objectMetadataMap.put("name", canaryConfig.getName()); objectMetadataMap.put("applications", canaryConfig.getApplications()); } credentials.getObjects().get(objectType).put(objectKey, obj); credentials.getMetadata().get(objectType).put(objectKey, objectMetadataMap); }
@Override public List<Map<String, Object>> listObjectKeys(String accountName, ObjectType objectType, List<String> applications, boolean skipIndex) { MemoryNamedAccountCredentials credentials = getCredentials(accountName, objectType); boolean filterOnApplications = applications != null && applications.size() > 0; List<Map<String, Object>> result = new ArrayList<>(); for (Map.Entry<String, Object> entry : credentials.getObjects().get(objectType).entrySet()) { String entryKey = entry.getKey(); if (objectType == ObjectType.CANARY_CONFIG) { if (filterOnApplications) { CanaryConfig canaryConfig = (CanaryConfig)entry.getValue(); if (CanaryConfigIndex.haveCommonElements(applications, canaryConfig.getApplications())) { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } else { result.add(credentials.getMetadata().get(objectType).get(entryKey)); } } return result; } }