Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java44
1 files changed, 39 insertions, 5 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java
index 47223fec8..cc5863d00 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem.core/src/org/eclipse/tcf/te/tcf/filesystem/core/internal/operations/OpUpload.java
@@ -36,6 +36,7 @@ import org.eclipse.tcf.services.IFileSystem.DoneStat;
import org.eclipse.tcf.services.IFileSystem.FileAttrs;
import org.eclipse.tcf.services.IFileSystem.FileSystemException;
import org.eclipse.tcf.services.IFileSystem.IFileHandle;
+import org.eclipse.tcf.te.tcf.core.concurrent.TCFOperationMonitor;
import org.eclipse.tcf.te.tcf.filesystem.core.interfaces.IConfirmCallback;
import org.eclipse.tcf.te.tcf.filesystem.core.internal.FSTreeNode;
import org.eclipse.tcf.te.tcf.filesystem.core.internal.utils.FileState;
@@ -148,7 +149,7 @@ public class OpUpload extends AbstractOperation {
path = destination.getLocation(true);
}
- final TCFResult<OutputStream> result = new TCFResult<OutputStream>();
+ final TCFOperationMonitor<OutputStream> result = new TCFOperationMonitor<OutputStream>();
monitor.subTask(NLS.bind(Messages.OpUpload_UploadSingleFile, item.fSource));
Protocol.invokeLater(new Runnable() {
@Override
@@ -182,7 +183,7 @@ public class OpUpload extends AbstractOperation {
private IStatus updateNode(final String path, final String name,
final FSTreeNode destination, final FSTreeNode existing, IProgressMonitor monitor) {
- final TCFResult<?> r2 = new TCFResult<Object>();
+ final TCFOperationMonitor<?> r2 = new TCFOperationMonitor<Object>();
Protocol.invokeLater(new Runnable() {
@Override
public void run() {
@@ -211,7 +212,7 @@ public class OpUpload extends AbstractOperation {
return r2.waitDone(monitor);
}
- protected void tcfGetOutputStream(IFileSystem fileSystem, final String path, final TCFResult<OutputStream> result) {
+ protected void tcfGetOutputStream(IFileSystem fileSystem, final String path, final TCFOperationMonitor<OutputStream> result) {
int flags = IFileSystem.TCF_O_WRITE | IFileSystem.TCF_O_CREAT | IFileSystem.TCF_O_TRUNC;
if (!result.checkCancelled()) {
fileSystem.open(path, flags, null, new DoneOpen() {
@@ -246,7 +247,6 @@ public class OpUpload extends AbstractOperation {
digest = MessageDigest.getInstance(MD_ALG);
input = new DigestInputStream(input, digest);
} catch (NoSuchAlgorithmException e) {
- digest = null;
}
}
@@ -271,8 +271,9 @@ public class OpUpload extends AbstractOperation {
}
if (digest != null && existing != null) {
+ statFile(existing, monitor);
FileState filedigest = PersistenceManager.getInstance().getFileDigest(existing);
- filedigest.reset(digest.digest());
+ filedigest.reset(digest.digest(), existing.getCacheFile().lastModified(), existing.getModificationTime());
}
return Status.OK_STATUS;
} catch (IOException e) {
@@ -287,6 +288,39 @@ public class OpUpload extends AbstractOperation {
}
}
+ private void statFile(final FSTreeNode node, IProgressMonitor monitor) {
+ final TCFOperationMonitor<?> result = new TCFOperationMonitor<Object>();
+ Protocol.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ tcfStat(node, result);
+ }
+ });
+ result.waitDone(monitor);
+ }
+
+ protected void tcfStat(final FSTreeNode node, final TCFOperationMonitor<?> result) {
+ if (!result.checkCancelled()) {
+ final IFileSystem fs = node.getRuntimeModel().getFileSystem();
+ if (fs == null) {
+ result.setCancelled();
+ return;
+ }
+
+ fs.stat(node.getLocation(true), new DoneStat() {
+ @Override
+ public void doneStat(IToken token, FileSystemException error, FileAttrs attrs) {
+ if (error != null) {
+ handleFSError(node, Messages.OpRefresh_errorReadAttributes, error, result);
+ } else {
+ node.setAttributes(attrs, false);
+ result.setDone(null);
+ }
+ }
+ });
+ }
+ }
+
@Override
public String getName() {
String message;

Back to the top