String virtualHostName = parent.getName();
Map<String, Object> virtualHostAttributes = new HashMap<String, Object>();
virtualHostAttributes.put("modelVersion", stringifiedConfigVersion);
virtualHostAttributes.put("name", virtualHostName);
UUID virtualHostId = UUIDGenerator.generateVhostUUID(virtualHostName);
ConfiguredObjectRecord virtualHostRecord = new org.apache.qpid.server.store.ConfiguredObjectRecordImpl(virtualHostId, "VirtualHost", virtualHostAttributes);
Transaction txn = environment.beginTransaction(null, null);
try
{
objectsCursor = configuredObjectsDb.openCursor(txn, null);
DatabaseEntry key = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
ObjectMapper mapper = new ObjectMapper();
while (objectsCursor.getNext(key, value, LockMode.RMW) == OperationStatus.SUCCESS)
{
UUID id = UUIDTupleBinding.getInstance().entryToObject(key);
TupleInput input = TupleBinding.entryToInput(value);
String type = input.readString();
String json = input.readString();
Map<String,Object> attributes = null;
try
{
attributes = mapper.readValue(json, MAP_TYPE_REFERENCE);
}
catch (Exception e)
{
throw new StoreException(e);
}
String name = (String)attributes.get("name");
if (type.equals("Exchange"))
{
_defaultExchanges.remove(name);
}
if(!type.endsWith("Binding"))
{
storeVirtualHostHierarchyRecord(hierarchyDb, txn, id, virtualHostId);
}
else
{
try
{
DatabaseEntry hierarchyKey = new DatabaseEntry();
DatabaseEntry hierarchyValue = new DatabaseEntry();
Object queueIdString = attributes.remove("queue");
if(queueIdString instanceof String)
{
UUID queueId = UUID.fromString(queueIdString.toString());
UUIDTupleBinding.getInstance().objectToEntry(queueId,hierarchyValue);
TupleOutput tupleOutput = new TupleOutput();
tupleOutput.writeLong(id.getMostSignificantBits());
tupleOutput.writeLong(id.getLeastSignificantBits());
tupleOutput.writeString("Queue");
TupleBinding.outputToEntry(tupleOutput, hierarchyKey);
hierarchyDb.put(txn, hierarchyKey, hierarchyValue);
}
Object exchangeIdString = attributes.remove("exchange");
if(exchangeIdString instanceof String)
{
UUID exchangeId = UUID.fromString(exchangeIdString.toString());
UUIDTupleBinding.getInstance().objectToEntry(exchangeId,hierarchyValue);
TupleOutput tupleOutput = new TupleOutput();
tupleOutput.writeLong(id.getMostSignificantBits());
tupleOutput.writeLong(id.getLeastSignificantBits());
tupleOutput.writeString("Exchange");
TupleBinding.outputToEntry(tupleOutput, hierarchyKey);
hierarchyDb.put(txn, hierarchyKey, hierarchyValue);
}
TupleOutput tupleOutput = new TupleOutput();
tupleOutput.writeString(type);
StringWriter writer = new StringWriter();
mapper.writeValue(writer,attributes);
tupleOutput.writeString(writer.getBuffer().toString());
TupleBinding.outputToEntry(tupleOutput, value);
objectsCursor.putCurrent(value);
}
catch (IOException e)
{
throw new StoreException(e);
}
}
}
}
finally
{
if(objectsCursor != null)
{
objectsCursor.close();
}
}
storeConfiguredObjectEntry(configuredObjectsDb, txn, virtualHostRecord);
for (Map.Entry<String, String> defaultExchangeEntry : _defaultExchanges.entrySet())
{
UUID id = UUIDGenerator.generateExchangeUUID(defaultExchangeEntry.getKey(), virtualHostName);
Map<String, Object> exchangeAttributes = new HashMap<String, Object>();
exchangeAttributes.put("name", defaultExchangeEntry.getKey());
exchangeAttributes.put("type", defaultExchangeEntry.getValue());
exchangeAttributes.put("lifetimePolicy", "PERMANENT");
ConfiguredObjectRecord exchangeRecord = new org.apache.qpid.server.store.ConfiguredObjectRecordImpl(id, "Exchange", exchangeAttributes);
storeConfiguredObjectEntry(configuredObjectsDb, txn, exchangeRecord);
storeVirtualHostHierarchyRecord(hierarchyDb, txn, id, virtualHostId);
}
txn.commit();