db = OSharedDocumentDatabase.acquire(urlParts[1], urlParts[2], urlParts[3]);
} else
db = getProfiledDatabaseInstance(iRequest);
final StringWriter buffer = new StringWriter();
final OJSONWriter json = new OJSONWriter(buffer);
json.beginObject();
if (db.getMetadata().getSchema().getClasses() != null) {
json.beginCollection(1, false, "classes");
Set<String> exportedNames = new HashSet<String>();
for (OClass cls : db.getMetadata().getSchema().getClasses()) {
if (!exportedNames.contains(cls.getName()))
try {
exportClass(db, json, cls);
exportedNames.add(cls.getName());
} catch (Exception e) {
OLogManager.instance().error(this, "Error on exporting class '" + cls + "'", e);
}
}
json.endCollection(1, true);
}
if (db.getStorage() instanceof OStorageLocal) {
json.beginCollection(1, false, "dataSegments");
for (ODataLocal data : ((OStorageLocal) db.getStorage()).getDataSegments()) {
json.beginObject(2, true, null);
json.writeAttribute(3, false, "id", data.getId());
json.writeAttribute(3, false, "name", data.getName());
json.writeAttribute(3, false, "size", data.getSize());
json.writeAttribute(3, false, "filled", data.getFilledUpTo());
json.writeAttribute(3, false, "maxSize", data.getConfig().maxSize);
json.writeAttribute(3, false, "files", Arrays.toString(data.getConfig().infoFiles));
json.endObject(2, false);
}
json.endCollection(1, true);
}
if (db.getClusterNames() != null) {
json.beginCollection(1, false, "clusters");
OCluster cluster;
for (String clusterName : db.getClusterNames()) {
cluster = ((OStorageEmbedded) db.getStorage()).getClusterById(db.getClusterIdByName(clusterName));
try {
json.beginObject(2, true, null);
json.writeAttribute(3, false, "id", cluster.getId());
json.writeAttribute(3, false, "name", clusterName);
json.writeAttribute(3, false, "type", cluster.getType());
json.writeAttribute(3, false, "records", cluster.getEntries());
if (cluster instanceof OClusterLocal) {
json.writeAttribute(3, false, "size", ((OClusterLocal) cluster).getSize());
json.writeAttribute(3, false, "filled", ((OClusterLocal) cluster).getFilledUpTo());
json.writeAttribute(3, false, "maxSize", ((OClusterLocal) cluster).getConfig().maxSize);
json.writeAttribute(3, false, "files", Arrays.toString(((OClusterLocal) cluster).getConfig().infoFiles));
} else {
json.writeAttribute(3, false, "size", "-");
json.writeAttribute(3, false, "filled", "-");
json.writeAttribute(3, false, "maxSize", "-");
json.writeAttribute(3, false, "files", "-");
}
} catch (Exception e) {
json.writeAttribute(3, false, "records", "? (Unauthorized)");
}
json.endObject(2, false);
}
json.endCollection(1, true);
}
if (db.getStorage() instanceof OStorageLocal) {
json.beginCollection(1, false, "txSegment");
final OTxSegment txSegment = ((OStorageLocal) db.getStorage()).getTxManager().getTxSegment();
json.beginObject(2, true, null);
json.writeAttribute(3, false, "totalLogs", txSegment.getTotalLogCount());
json.writeAttribute(3, false, "size", txSegment.getSize());
json.writeAttribute(3, false, "filled", txSegment.getFilledUpTo());
json.writeAttribute(3, false, "maxSize", txSegment.getConfig().maxSize);
json.writeAttribute(3, false, "file", txSegment.getConfig().path);
json.endObject(2, false);
json.endCollection(1, true);
}
json.beginCollection(1, false, "users");
OUser user;
for (ODocument doc : db.getMetadata().getSecurity().getUsers()) {
user = new OUser(doc);
json.beginObject(2, true, null);
json.writeAttribute(3, false, "name", user.getName());
json.writeAttribute(3, false, "roles", user.getRoles() != null ? Arrays.toString(user.getRoles().toArray()) : "null");
json.endObject(2, false);
}
json.endCollection(1, true);
json.beginCollection(1, true, "roles");
ORole role;
for (ODocument doc : db.getMetadata().getSecurity().getRoles()) {
role = new ORole(doc);
json.beginObject(2, true, null);
json.writeAttribute(3, false, "name", role.getName());
json.writeAttribute(3, false, "mode", role.getMode().toString());
json.beginCollection(3, true, "rules");
for (Entry<String, Byte> rule : role.getRules().entrySet()) {
json.beginObject(4);
json.writeAttribute(4, true, "name", rule.getKey());
json.writeAttribute(4, false, "create", role.allow(rule.getKey(), ORole.PERMISSION_CREATE));
json.writeAttribute(4, false, "read", role.allow(rule.getKey(), ORole.PERMISSION_READ));
json.writeAttribute(4, false, "update", role.allow(rule.getKey(), ORole.PERMISSION_UPDATE));
json.writeAttribute(4, false, "delete", role.allow(rule.getKey(), ORole.PERMISSION_DELETE));
json.endObject(4, true);
}
json.endCollection(3, false);
json.endObject(2, true);
}
json.endCollection(1, true);
json.beginObject(1, true, "config");
json.beginCollection(2, true, "values");
json.writeObjects(3, true, null,
new Object[] { "name", "dateFormat", "value", db.getStorage().getConfiguration().dateFormat }, new Object[] { "name",
"dateTimeFormat", "value", db.getStorage().getConfiguration().dateTimeFormat }, new Object[] { "name",
"localeCountry", "value", db.getStorage().getConfiguration().localeCountry }, new Object[] { "name",
"localeLanguage", "value", db.getStorage().getConfiguration().localeLanguage }, new Object[] { "name",
"definitionVersion", "value", db.getStorage().getConfiguration().version });
json.endCollection(2, true);
json.beginCollection(2, true, "properties");
if (db.getStorage().getConfiguration().properties != null)
for (OStorageEntryConfiguration entry : db.getStorage().getConfiguration().properties) {
if (entry != null) {
json.beginObject(3, true, null);
json.writeAttribute(4, false, "name", entry.name);
json.writeAttribute(4, false, "value", entry.value);
json.endObject(3, true);
}
}
json.endCollection(2, true);
json.endObject(1, true);
json.endObject();
json.flush();
sendTextContent(iRequest, OHttpUtils.STATUS_OK_CODE, "OK", null, OHttpUtils.CONTENT_JSON, buffer.toString());
} finally {
if (db != null)
OSharedDocumentDatabase.release(db);