use of org.structr.cloud.message.Delete in project structr by structr.
the class SyncTransmission method doRemote.
@Override
public Boolean doRemote(final CloudConnection client) throws IOException, FrameworkException {
int count = 0;
try (final Tx tx = StructrApp.getInstance().tx()) {
for (final ModificationEvent event : transaction) {
final GraphObject graphObject = event.getGraphObject();
if (event.isDeleted()) {
final String id = event.getRemovedProperties().get(GraphObject.id);
if (id != null) {
client.send(new Delete(id));
}
} else {
try {
final Set<String> propertyKeys = new LinkedHashSet<>();
// collect all possibly modified property keys
mapPropertyKeysToStrings(propertyKeys, event.getNewProperties().keySet());
mapPropertyKeysToStrings(propertyKeys, event.getModifiedProperties().keySet());
mapPropertyKeysToStrings(propertyKeys, event.getRemovedProperties().keySet());
if (graphObject.isNode()) {
if (graphObject instanceof File) {
sendFile(client, (File) graphObject, CloudService.CHUNK_SIZE);
} else {
client.send(new NodeDataContainer(graphObject.getSyncNode(), count, propertyKeys));
}
} else {
client.send(new RelationshipDataContainer(graphObject.getSyncRelationship(), count, propertyKeys));
}
} catch (NotFoundException nfex) {
logger.info("Trying to synchronize deleted entity, ignoring");
}
}
count++;
}
tx.success();
}
// synchronize last sync timestamp with slave instance
// (we're sending out own instance ID (master) for the slave to store)
final String masterId = StructrApp.getInstance().getInstanceId();
client.send(new ReplicationStatus(masterId, StructrApp.getInstance().getGlobalSetting(masterId + ".lastModified", 0L)));
// wait for end of transmission
client.waitForTransmission();
return true;
}
Aggregations