package org.voyanttools.trombone.tool.resource;
import java.io.File;
import java.io.IOException;
import org.voyanttools.trombone.storage.Storage;
import org.voyanttools.trombone.storage.file.FileMigrationFactory;
import org.voyanttools.trombone.storage.file.FileStorage;
import org.voyanttools.trombone.tool.utils.AbstractTool;
import org.voyanttools.trombone.util.FlexibleParameters;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("storedResource")
public class StoredResource extends AbstractTool {
private String id = "";
private String resource = "";
public StoredResource(Storage storage, FlexibleParameters parameters) {
super(storage, parameters);
}
@Override
public void run() throws IOException {
if (this.parameters.containsKey("verifyResourceId")) {
String id = this.parameters.getParameterValue("verifyResourceId");
if (this.storage.hasStoredString(id, Storage.Location.object)) {
this.id = id;
} else if (storage instanceof FileStorage) {
File file = FileMigrationFactory.getStoredObjectFile((FileStorage) storage, id);
if (file!=null && file.exists()) {
((FileStorage) storage).copyResource(file, id, Storage.Location.object);
this.id = id;
}
}
}
else if (this.parameters.containsKey("storeResource")) {
if (this.parameters.containsKey("resourceId")) {
this.id = this.parameters.getParameterValue("resourceId");
this.storage.storeString(this.parameters.getParameterValue("storeResource"), this.id, Storage.Location.object);
}
else {
this.id = this.storage.storeString(this.parameters.getParameterValue("storeResource"), Storage.Location.object);
}
}
else if (this.parameters.containsKey("retrieveResourceId")) {
String id = this.parameters.getParameterValue("retrieveResourceId");
// if it doesn't exist, try to retrieve from previous storage
if (!storage.isStored(id, Storage.Location.object) && storage instanceof FileStorage) {
File file = FileMigrationFactory.getStoredObjectFile((FileStorage) storage, id);
if (file!=null && file.exists()) {
((FileStorage) storage).copyResource(file, id, Storage.Location.object);
}
}
if (parameters.getParameterBooleanValue("failQuietly")) {
try {
this.resource = this.storage.retrieveString(id, Storage.Location.object);
} catch (IOException e) {
this.resource = "";
this.id = "";
}
} else {
this.resource = this.storage.retrieveString(id, Storage.Location.object);
}
this.id = id;
}
}
public String getResourceId() {
return id;
}
public String getResource() {
return resource;
}
}