use of nl.uva.cs.lobcder.catalogue.JDBCatalogue in project lobcder by skoulouzis.
the class Archive method getZip.
/**
* Generates a zip archive of folder
*
* @param path the folder name
* @return the stream of the archive
*/
@GET
@Path("/getzip/{name:.+}")
public Response getZip(@PathParam("name") String path) {
class Folder {
private String path;
private LogicalData logicalData;
private Folder(String path, LogicalData logicalData) {
this.path = path;
this.logicalData = logicalData;
}
/**
* @return the path
*/
public String getPath() {
return path;
}
/**
* @param path the path to set
*/
public void setPath(String path) {
this.path = path;
}
/**
* @return the logicalData
*/
public LogicalData getLogicalData() {
return logicalData;
}
/**
* @param logicalData the logicalData to set
*/
public void setLogicalData(LogicalData logicalData) {
this.logicalData = logicalData;
}
}
final String rootPath;
if (path.endsWith("/")) {
rootPath = path.substring(0, path.length() - 1);
} else {
rootPath = path;
}
int index = rootPath.lastIndexOf('/');
final String rootName;
if (index != -1) {
rootName = rootPath.substring(index + 1);
} else {
rootName = rootPath;
}
if (rootName.isEmpty()) {
throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
}
final MyPrincipal principal = (MyPrincipal) request.getAttribute("myprincipal");
final JDBCatalogue catalogue = getCatalogue();
StreamingOutput result = new StreamingOutput() {
@Override
public void write(OutputStream out) throws IOException, WebApplicationException {
Stack<Folder> folders;
try (Connection connection = catalogue.getConnection()) {
LogicalData rootElement = catalogue.getLogicalDataByPath(io.milton.common.Path.path(rootPath), connection);
if (rootElement == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
try (ZipOutputStream zip = new ZipOutputStream(out)) {
ZipEntry ze;
folders = new Stack<>();
Permissions p = catalogue.getPermissions(rootElement.getUid(), rootElement.getOwner(), connection);
if (principal.canRead(p)) {
if (rootElement.isFolder()) {
folders.add(new Folder(rootName, rootElement));
} else {
ze = new ZipEntry(rootName);
zip.putNextEntry(ze);
List<PDRIDescr> pdris = catalogue.getPdriDescrByGroupId(rootElement.getPdriGroupId());
copyStream(pdris, zip);
zip.closeEntry();
getCatalogue().addViewForRes(rootElement.getUid());
}
}
while (!folders.isEmpty()) {
Folder folder = folders.pop();
ze = new ZipEntry(folder.getPath() + "/");
ze.setTime(folder.getLogicalData().getModifiedDate());
zip.putNextEntry(ze);
getCatalogue().addViewForRes(folder.getLogicalData().getUid());
for (LogicalData ld : catalogue.getChildrenByParentRef(folder.getLogicalData().getUid(), connection)) {
Permissions entry_p = catalogue.getPermissions(ld.getUid(), ld.getOwner(), connection);
if (principal.canRead(entry_p)) {
if (ld.isFolder()) {
folders.push(new Folder(folder.getPath() + "/" + ld.getName(), ld));
} else {
ze = new ZipEntry(folder.getPath() + "/" + ld.getName());
ze.setTime(ld.getModifiedDate());
zip.putNextEntry(ze);
copyStream(catalogue.getPdriDescrByGroupId(ld.getPdriGroupId()), zip);
zip.closeEntry();
getCatalogue().addViewForRes(ld.getUid());
}
}
}
}
}
} catch (Exception e) {
if (e instanceof WebApplicationException) {
throw (WebApplicationException) e;
} else {
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
}
};
Response.ResponseBuilder response = Response.ok(result, "application/zip");
return response.header("Content-Disposition", "attachment; filename=" + rootName + ".zip").build();
}
use of nl.uva.cs.lobcder.catalogue.JDBCatalogue in project lobcder by skoulouzis.
the class RegisterSRMSites method initVFS.
private static void initVFS() throws VlException, MalformedURLException, NamingException, Exception {
vfsClient = new VFSClient();
VRSContext context = vfsClient.getVRSContext();
BdiiService bdii = context.getBdiiService();
srms = bdii.getSRMv22SAsforVO("biomed");
//
debug("srms: " + context.getConfigManager().getBdiiHost());
for (StorageArea inf : srms) {
debug("srms: " + inf.getVOStorageLocation());
}
JDBCatalogue cat = new JDBCatalogue();
String resourceURI = "";
Credential credentials = new Credential();
// cat.registerStorageSite(resourceURI, credentials, -1, -1, -1, -1, null);
}
Aggregations