package org.fenixedu.bennu.io.api.json;
import org.fenixedu.bennu.core.annotation.DefaultJsonAdapter;
import org.fenixedu.bennu.core.json.JsonAdapter;
import org.fenixedu.bennu.core.json.JsonBuilder;
import org.fenixedu.bennu.io.domain.FileStorage;
import org.fenixedu.bennu.io.domain.FileStorageConfiguration;
import pt.ist.fenixframework.Atomic;
import pt.ist.fenixframework.FenixFramework;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@DefaultJsonAdapter(FileStorageConfiguration.class)
public class FileStorageConfigurationAdapter implements JsonAdapter<FileStorageConfiguration> {
/***
* [ {'fileStorageConfigurationId' : 'x1', 'fileStorageId' : 'y1'} ,
* {'fileStorageConfigurationId' : 'x2', 'fileStorageId' : 'y2'} ,
* ...
* ]
*/
@Override
@Atomic
public FileStorageConfiguration create(JsonElement el, JsonBuilder ctx) {
final JsonArray configs = el.getAsJsonArray();
for (JsonElement configEl : configs) {
final JsonObject config = configEl.getAsJsonObject();
final String fileStorageConfigurationId = config.get("fileStorageConfigurationId").getAsString();
final String fileStorageId = config.get("fileStorageId").getAsString();
associate(fileStorageConfigurationId, fileStorageId);
}
return null;
}
private void associate(String fileStorageConfigurationId, String fileStorageId) {
FileStorageConfiguration fsc = readDomainObject(fileStorageConfigurationId);
FileStorage fs = readDomainObject(fileStorageId);
if (fsc != null) {
fsc.setStorage(fs);
}
}
private <T> T readDomainObject(String oid) {
if ("null".equals(oid)) {
return null;
}
return FenixFramework.getDomainObject(oid);
}
@Override
public FileStorageConfiguration update(JsonElement arg0, FileStorageConfiguration arg1, JsonBuilder ctx) {
throw new UnsupportedOperationException();
}
@Override
public JsonElement view(FileStorageConfiguration fsc, JsonBuilder ctx) {
JsonObject json = new JsonObject();
json.addProperty("id", fsc.getExternalId());
json.addProperty("type", fsc.getFileType());
json.add("storage", ctx.view(fsc.getStorage()));
return json;
}
}