/*******************************************************************************
* Copyright (c) 2006-2013 The RCP Company and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* The RCP Company - initial API and implementation
*******************************************************************************/
package com.rcpcompany.utils.basic.resource;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
/**
* This utility class provides a number of static functions that can ease formatting of data.
*
* @author Tonny Madsen, The RCP Company
*/
public final class TSResourcesUtils {
/**
* Returns a generic <code>toString</code> representation for {@link IResourceDelta}.
*
* @param delta
* the delta to be described
* @return the string for the delta
*/
public static String toString(IResourceDelta delta) {
final StringBuilder sb = new StringBuilder(1000);
sb.append("\n");
try {
delta.accept(new IResourceDeltaVisitor() {
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
String indent = "";
for (int i = 0; i < delta.getFullPath().segmentCount(); i++) {
indent = indent + " ";
}
sb.append(indent).append(delta.getFullPath()).append(" - ");
switch (delta.getKind()) {
case IResourceDelta.ADDED:
sb.append("ADDED");
break;
case IResourceDelta.CHANGED:
sb.append("CHANGED");
break;
case IResourceDelta.REMOVED:
sb.append("REMOVED");
break;
default:
sb.append("UNKNOWN[").append(delta.getKind()).append("]");
break;
}
sb.append(": ");
int d = delta.getFlags();
if ((d & IResourceDelta.CONTENT) == IResourceDelta.CONTENT) {
sb.append("CONTENT+"); //$NON-NLS-1$
d &= ~IResourceDelta.CONTENT;
}
if ((d & IResourceDelta.DERIVED_CHANGED) == IResourceDelta.DERIVED_CHANGED) {
sb.append("DERIVED_CHANGED+"); //$NON-NLS-1$
d &= ~IResourceDelta.DERIVED_CHANGED;
}
if ((d & IResourceDelta.DESCRIPTION) == IResourceDelta.DESCRIPTION) {
sb.append("DESCRIPTION+"); //$NON-NLS-1$
d &= ~IResourceDelta.DESCRIPTION;
}
if ((d & IResourceDelta.ENCODING) == IResourceDelta.ENCODING) {
sb.append("ENCODING+"); //$NON-NLS-1$
d &= ~IResourceDelta.ENCODING;
}
if ((d & IResourceDelta.LOCAL_CHANGED) == IResourceDelta.LOCAL_CHANGED) {
sb.append("LOCAL_CHANGED+"); //$NON-NLS-1$
d &= ~IResourceDelta.LOCAL_CHANGED;
}
if ((d & IResourceDelta.OPEN) == IResourceDelta.OPEN) {
sb.append("OPEN+"); //$NON-NLS-1$
d &= ~IResourceDelta.OPEN;
}
if ((d & IResourceDelta.MOVED_TO) == IResourceDelta.MOVED_TO) {
sb.append("MOVED_TO[" + delta.getMovedToPath() + "]+"); //$NON-NLS-1$
d &= ~IResourceDelta.MOVED_TO;
}
if ((d & IResourceDelta.MOVED_FROM) == IResourceDelta.MOVED_FROM) {
sb.append("MOVED_FROM[" + delta.getMovedFromPath() + "]+"); //$NON-NLS-1$
d &= ~IResourceDelta.MOVED_FROM;
}
if ((d & IResourceDelta.COPIED_FROM) == IResourceDelta.COPIED_FROM) {
sb.append("COPIED_FROM[" + delta.getMovedFromPath() + "]+"); //$NON-NLS-1$
d &= ~IResourceDelta.COPIED_FROM;
}
if ((d & IResourceDelta.TYPE) == IResourceDelta.TYPE) {
sb.append("TYPE+"); //$NON-NLS-1$
d &= ~IResourceDelta.TYPE;
}
if ((d & IResourceDelta.SYNC) == IResourceDelta.SYNC) {
sb.append("SYNC+"); //$NON-NLS-1$
d &= ~IResourceDelta.SYNC;
}
if ((d & IResourceDelta.MARKERS) == IResourceDelta.MARKERS) {
sb.append("MARKERS+"); //$NON-NLS-1$
d &= ~IResourceDelta.MARKERS;
}
if ((d & IResourceDelta.CONTENT) == IResourceDelta.CONTENT) {
sb.append("CONTENT+"); //$NON-NLS-1$
d &= ~IResourceDelta.CONTENT;
}
if ((d & IResourceDelta.REPLACED) == IResourceDelta.REPLACED) {
sb.append("REPLACED+"); //$NON-NLS-1$
d &= ~IResourceDelta.REPLACED;
}
if ((d & IResourceDelta.LOCAL_CHANGED) == IResourceDelta.LOCAL_CHANGED) {
sb.append("LOCAL_CHANGED+"); //$NON-NLS-1$
d &= ~IResourceDelta.LOCAL_CHANGED;
}
if (delta.getFlags() == 0) {
sb.append("-");
} else if (d == 0) {
sb.deleteCharAt(sb.length() - 1);
} else {
sb.append(d);
}
for (final IMarkerDelta md : delta.getMarkerDeltas()) {
sb.append("\n" + indent + " * ");
switch (md.getKind()) {
case IResourceDelta.ADDED:
sb.append("ADDED - ");
break;
case IResourceDelta.REMOVED:
sb.append("REMOVED - ");
break;
case IResourceDelta.CHANGED:
sb.append("CHANGED - ");
break;
}
sb.append(md.getType() + "[" + md.getId() + "]");
}
sb.append("\n");
return true;
}
});
} catch (final CoreException ex) {
sb.append("" + ex);
}
return sb.toString();
}
}