use of com.pspace.ifs.ksan.gw.format.DeleteMultipleObjectsRequest in project ksan by infinistor.
the class DeleteObjects method process.
@Override
public void process() throws GWException {
logger.info(GWConstants.LOG_DELETE_OBJECTS_START);
String bucket = s3Parameter.getBucketName();
initBucketInfo(bucket);
S3Bucket s3Bucket = new S3Bucket();
s3Bucket.setCors(getBucketInfo().getCors());
s3Bucket.setAccess(getBucketInfo().getAccess());
s3Parameter.setBucket(s3Bucket);
GWUtils.checkCors(s3Parameter);
if (s3Parameter.isPublicAccess() && GWUtils.isIgnorePublicAcls(s3Parameter)) {
throw new GWException(GWErrorCode.ACCESS_DENIED, s3Parameter);
}
checkGrantBucketOwner(s3Parameter.isPublicAccess(), String.valueOf(s3Parameter.getUser().getUserId()), GWConstants.GRANT_WRITE);
DataDeleteObjects dataDeleteObjects = new DataDeleteObjects(s3Parameter);
dataDeleteObjects.extract();
String deleteXml = dataDeleteObjects.getDeleteXml();
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
try {
DeleteMultipleObjectsRequest deleteMultipleObjectsRequest = new XmlMapper().readValue(deleteXml, DeleteMultipleObjectsRequest.class);
Collection<Objects> objectNames = new ArrayList<>();
if (deleteMultipleObjectsRequest.objects != null) {
for (DeleteMultipleObjectsRequest.S3Object s3Object : deleteMultipleObjectsRequest.objects) {
Objects object = new Objects();
object.objectName = s3Object.key;
if (Strings.isNullOrEmpty(s3Object.versionId)) {
object.versionId = GWConstants.VERSIONING_DISABLE_TAIL;
} else if (GWConstants.VERSIONING_DISABLE_TAIL.equalsIgnoreCase(s3Object.versionId)) {
object.versionId = GWConstants.VERSIONING_DISABLE_TAIL;
} else {
object.versionId = s3Object.versionId;
}
objectNames.add(object);
}
}
Writer writer = s3Parameter.getResponse().getWriter();
s3Parameter.getResponse().setContentType(GWConstants.XML_CONTENT_TYPE);
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(writer);
xmlStreamWriter.writeStartDocument();
xmlStreamWriter.writeStartElement(GWConstants.DELETE_RESULT);
xmlStreamWriter.writeDefaultNamespace(GWConstants.AWS_XMLNS);
logger.debug(GWConstants.LOG_DELETE_OBJECTS_SIZE, objectNames.size());
for (Objects object : objectNames) {
deleteObject(s3Parameter, object.objectName, object.versionId, xmlStreamWriter, deleteMultipleObjectsRequest.quiet);
// xmlStreamWriter.flush(); // In Tomcat, if you use flush(), you lose connection. jakarta, need to check
}
xmlStreamWriter.writeEndElement();
xmlStreamWriter.flush();
} catch (JsonParseException e) {
PrintStack.logging(logger, e);
throw new GWException(GWErrorCode.SERVER_ERROR, s3Parameter);
} catch (JacksonException e) {
PrintStack.logging(logger, e);
throw new GWException(GWErrorCode.SERVER_ERROR, s3Parameter);
} catch (IOException e) {
PrintStack.logging(logger, e);
throw new GWException(GWErrorCode.SERVER_ERROR, s3Parameter);
} catch (XMLStreamException e) {
PrintStack.logging(logger, e);
throw new GWException(GWErrorCode.SERVER_ERROR, s3Parameter);
}
s3Parameter.getResponse().setStatus(HttpServletResponse.SC_OK);
}
Aggregations