Search in sources :

Example 1 with IModelChange

use of org.eclipse.ecf.sync.IModelChange in project ecf by eclipse.

the class Initiator method run.

public void run() {
    for (int i = 0; i < 10; i++) {
        String text = fDocument.get();
        String newText = ">";
        text = text.concat(newText);
        fDocument.set(text);
        IModelChange change = new DocumentChangeMessage(i + 150, newText.length(), newText);
        IModelChangeMessage[] changes = initiator.registerLocalChange(change);
        getReceiverQueue().put(changes);
    }
}
Also used : IModelChange(org.eclipse.ecf.sync.IModelChange) IModelChangeMessage(org.eclipse.ecf.sync.IModelChangeMessage) DocumentChangeMessage(org.eclipse.ecf.sync.doc.DocumentChangeMessage)

Example 2 with IModelChange

use of org.eclipse.ecf.sync.IModelChange in project ecf by eclipse.

the class SyncResourcesCore method visit.

public boolean visit(IResourceDelta delta) throws CoreException {
    if (locked) {
        return false;
    }
    IResource resource = delta.getResource();
    int type = resource.getType();
    if (type == IResource.ROOT) {
        return true;
    }
    String projectName = resource.getProject().getName();
    boolean isSharing = isSharing(projectName);
    if (isSharing) {
        if (type == IResource.PROJECT) {
            return true;
        }
    } else {
        // changes, return false
        return false;
    }
    // we are only interested in non-derived resources
    if (!resource.isDerived() && checkDelta(delta)) {
        for (Iterator it = channels.values().iterator(); it.hasNext(); ) {
            ResourcesShare share = (ResourcesShare) it.next();
            if (share.isSharing(projectName)) {
                IModelChange change = ResourceChangeMessage.createResourceChange(resource, delta.getKind());
                if (change != null) {
                    List changes = (List) resourceChanges.get(share);
                    if (changes == null) {
                        changes = new ArrayList();
                        resourceChanges.put(share, changes);
                    }
                    changes.add(change);
                }
            }
        }
    }
    return type == IResource.FOLDER;
}
Also used : Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) IModelChange(org.eclipse.ecf.sync.IModelChange) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) List(java.util.List) IResource(org.eclipse.core.resources.IResource)

Example 3 with IModelChange

use of org.eclipse.ecf.sync.IModelChange in project ecf by eclipse.

the class ResourcesShare method sendResourceChangeMessage.

void sendResourceChangeMessage(IResource resource, int kind) {
    try {
        IModelChange change = ResourceChangeMessage.createResourceChange(resource, kind);
        IModelChangeMessage[] messages = ResourcesSynchronizationStrategy.getInstance().registerLocalChange(change);
        for (int i = 0; i < messages.length; i++) {
            send(messages[i].serialize());
        }
    } catch (ECFException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
Also used : ECFException(org.eclipse.ecf.core.util.ECFException) IModelChange(org.eclipse.ecf.sync.IModelChange) IModelChangeMessage(org.eclipse.ecf.sync.IModelChangeMessage)

Example 4 with IModelChange

use of org.eclipse.ecf.sync.IModelChange in project ecf by eclipse.

the class ResourcesShare method handleResourceChangeMessage.

private void handleResourceChangeMessage(byte[] data) throws Exception {
    IModelChange remoteChange = ResourcesSynchronizationStrategy.getInstance().deserializeRemoteChange(data);
    final IModelChange[] remoteChanges = ResourcesSynchronizationStrategy.getInstance().transformRemoteChange(remoteChange);
    // create a scheduling rule to lock the projects
    ISchedulingRule[] rules = new ISchedulingRule[sharedProjects.size()];
    int index = 0;
    for (Iterator it = sharedProjects.iterator(); it.hasNext(); ) {
        String projectName = (String) it.next();
        rules[index] = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
        index++;
    }
    try {
        // lock to prevent resource changes from being propagated
        lock(remoteChanges);
        applyRemoteChanges(remoteChanges, new MultiRule(rules));
    } finally {
        // unlock now that we've applied the remote changes to our
        // own workspace
        unlock(remoteChanges);
    }
    if (remoteChange instanceof BatchModelChange) {
        BatchModelChange batchChange = (BatchModelChange) remoteChange;
        batchChange.setOutgoing(false);
        batchChange.setTime(System.currentTimeMillis());
        SyncResourcesCore.add(batchChange);
    }
}
Also used : MultiRule(org.eclipse.core.runtime.jobs.MultiRule) Iterator(java.util.Iterator) IModelChange(org.eclipse.ecf.sync.IModelChange) ISchedulingRule(org.eclipse.core.runtime.jobs.ISchedulingRule)

Example 5 with IModelChange

use of org.eclipse.ecf.sync.IModelChange in project ecf by eclipse.

the class SharedDocClient method processRemoteMessage.

private void processRemoteMessage(byte[] msg) {
    if (msg != null) {
        try {
            synchronized (this.getClass()) {
                IModelChange change = syncStrategy.deserializeRemoteChange(msg);
                System.out.println(name + ";received=" + change);
                IDocumentChange[] documentChanges = (IDocumentChange[]) syncStrategy.transformRemoteChange(change);
                for (int i = 0; i < documentChanges.length; i++) {
                    applyChangeToLocalDocument(false, documentChanges[i]);
                }
            }
        } catch (SerializationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
Also used : SerializationException(org.eclipse.ecf.sync.SerializationException) IModelChange(org.eclipse.ecf.sync.IModelChange) IDocumentChange(org.eclipse.ecf.sync.doc.IDocumentChange)

Aggregations

IModelChange (org.eclipse.ecf.sync.IModelChange)5 Iterator (java.util.Iterator)2 IModelChangeMessage (org.eclipse.ecf.sync.IModelChangeMessage)2 ArrayList (java.util.ArrayList)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 IResource (org.eclipse.core.resources.IResource)1 ISchedulingRule (org.eclipse.core.runtime.jobs.ISchedulingRule)1 MultiRule (org.eclipse.core.runtime.jobs.MultiRule)1 ECFException (org.eclipse.ecf.core.util.ECFException)1 SerializationException (org.eclipse.ecf.sync.SerializationException)1 DocumentChangeMessage (org.eclipse.ecf.sync.doc.DocumentChangeMessage)1 IDocumentChange (org.eclipse.ecf.sync.doc.IDocumentChange)1