Search in sources :

Example 11 with ProfTimer

use of net.sourceforge.processdash.util.ProfTimer in project processdash by dtuma.

the class ResourceBridgeClient method syncUp.

public synchronized boolean syncUp(SyncFilter filter) throws IOException, LockFailureException {
    if (userName == null)
        throw new NotLockedException();
    ProfTimer pt = new ProfTimer(logger, "ResourceBridgeClient.syncUp[" + remoteUrl + "]");
    ResourceCollectionDiff diff = getDiff();
    applySyncFilter(diff, filter);
    pt.click("Computed local-vs-remote diff");
    if (diff == null || diff.noDifferencesFound()) {
        logger.finer("no changes to sync up");
        return false;
    }
    boolean madeChange = false;
    List<String> filesToDownload = new ArrayList<String>();
    // collection (but not in our local collection)
    if (!diff.getOnlyInB().isEmpty()) {
        List<String> params = new ArrayList<String>();
        for (String resourceName : diff.getOnlyInB()) {
            if (isSyncDownOnly(resourceName)) {
                filesToDownload.add(resourceName);
            } else {
                logger.fine("deleting remote resource " + resourceName);
                params.add(DELETE_FILE_PARAM);
                params.add(resourceName);
            }
        }
        if (!params.isEmpty()) {
            doPostRequest(DELETE_ACTION, (Object[]) params.toArray());
            pt.click("Deleted remote resources");
            madeChange = true;
        }
    }
    // collection
    if (!diff.getOnlyInA().isEmpty() || !diff.getDiffering().isEmpty()) {
        List params = new ArrayList();
        for (String resourceName : diff.getOnlyInA()) {
            if (isSyncDownOnly(resourceName)) {
                logger.fine("deleting local resource " + resourceName);
                localCollection.deleteResource(resourceName);
                madeChange = true;
            } else {
                logger.fine("uploading new resource " + resourceName);
                addFileUploadParamsWithBatching(params, resourceName);
                madeChange = true;
            }
        }
        for (String resourceName : diff.getDiffering()) {
            if (isSyncDownOnly(resourceName)) {
                filesToDownload.add(resourceName);
            } else {
                logger.fine("uploading modified resource " + resourceName);
                addFileUploadParamsWithBatching(params, resourceName);
                madeChange = true;
            }
        }
        if (!params.isEmpty()) {
            startZipUploadThread(params);
            doPostRequest(UPLOAD_ACTION, (Object[]) params.toArray());
            pt.click("Uploaded new/modified resources");
            madeChange = true;
        }
    }
    if (!filesToDownload.isEmpty()) {
        List params = addMultiple(null, INCLUDE_PARAM, filesToDownload);
        downloadFiles(makeGetRequest(DOWNLOAD_ACTION, params));
        madeChange = true;
    }
    if (!madeChange) {
        logger.finer("no changes to sync up");
    }
    return madeChange;
}
Also used : ResourceCollectionDiff(net.sourceforge.processdash.tool.bridge.report.ResourceCollectionDiff) ProfTimer(net.sourceforge.processdash.util.ProfTimer) ArrayList(java.util.ArrayList) NotLockedException(net.sourceforge.processdash.util.lock.NotLockedException) ArrayList(java.util.ArrayList) List(java.util.List)

Example 12 with ProfTimer

use of net.sourceforge.processdash.util.ProfTimer in project processdash by dtuma.

the class ResourceBridgeClient method syncDown.

public synchronized boolean syncDown(SyncFilter filter) throws IOException {
    ProfTimer pt = new ProfTimer(logger, "ResourceBridgeClient.syncDown[" + remoteUrl + "]");
    // identical contents
    if (hashesMatch()) {
        pt.click("checked hashes - match");
        return false;
    }
    pt.click("checked hashes - mismatch");
    // as an optimization, download any files from the server that were
    // created/modified after our most recently changed file.
    long mostRecentLocalModTime = getMostRecentLocalModTime();
    downloadFiles(makeGetRequest(DOWNLOAD_ACTION, ResourceFilterFactory.LAST_MOD_PARAM, mostRecentLocalModTime));
    // now make a complete comparison of local-vs-remote changes.
    ResourceCollectionDiff diff = getDiff();
    applySyncFilter(diff, filter);
    pt.click("Computed local-vs-remote diff");
    if (diff == null || diff.noDifferencesFound())
        return false;
    // the remote collection), delete the local files.
    for (String resourceName : diff.getOnlyInA()) {
        logger.fine("deleting local resource " + resourceName);
        localCollection.deleteResource(resourceName);
    }
    // copy down files that are only present in the remote collection, as
    // well as any files that have changed
    List filesToDownload = new ArrayList();
    filesToDownload.addAll(diff.getOnlyInB());
    filesToDownload.addAll(diff.getDiffering());
    downloadFilesNamed(filesToDownload);
    pt.click("Copied down changes");
    return true;
}
Also used : ResourceCollectionDiff(net.sourceforge.processdash.tool.bridge.report.ResourceCollectionDiff) ProfTimer(net.sourceforge.processdash.util.ProfTimer) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

ProfTimer (net.sourceforge.processdash.util.ProfTimer)12 IOException (java.io.IOException)6 LockFailureException (net.sourceforge.processdash.util.lock.LockFailureException)6 NotLockedException (net.sourceforge.processdash.util.lock.NotLockedException)6 HttpException (net.sourceforge.processdash.util.HttpException)5 AlreadyLockedException (net.sourceforge.processdash.util.lock.AlreadyLockedException)5 LockUncertainException (net.sourceforge.processdash.util.lock.LockUncertainException)5 URL (java.net.URL)3 ArrayList (java.util.ArrayList)3 File (java.io.File)2 List (java.util.List)2 ResourceCollectionDiff (net.sourceforge.processdash.tool.bridge.report.ResourceCollectionDiff)2 MalformedURLException (java.net.MalformedURLException)1 Enumeration (java.util.Enumeration)1 StringTokenizer (java.util.StringTokenizer)1 Vector (java.util.Vector)1 ZipFile (java.util.zip.ZipFile)1 DashHierarchy (net.sourceforge.processdash.hier.DashHierarchy)1