/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.workspace; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.teiid.core.designer.util.CoreArgCheck; /** * The <code>ResourceChangeUtilities</code> class contains utility methods for use with * {@link org.eclipse.core.resources.IResourceChangeEvent}s. * * @since 8.0 */ public class ResourceChangeUtilities { public static boolean isProjectRenamed( IResourceChangeEvent theEvent ) { boolean result = false; IResourceDelta delta = theEvent.getDelta(); if (delta != null) { IResourceDelta[] deltas = delta.getAffectedChildren(); if (isRename(theEvent, deltas) && isProject(deltas[0])) { result = true; } } return result; } public static boolean isRename( IResourceChangeEvent theEvent, IResourceDelta[] deltas ) { CoreArgCheck.isNotNull(theEvent); CoreArgCheck.isNotNull(deltas); boolean result = false; if (isPreEvent(theEvent) || isAutoBuild(theEvent)) { return result; } if (deltas.length == 2) { final IResourceDelta d1 = deltas[0]; final IResourceDelta d2 = deltas[1]; // the new name is added and moved from // the old name is removed and moved to // however, the order is unpredictable result = ((isAdded(d1) && isMovedFrom(d1) && isRemoved(d2) && isMovedTo(d2)) || (isAdded(d2) && isMovedFrom(d2) && isRemoved(d1) && isMovedTo(d1))); } return result; } public static boolean isAutoBuild( IResourceChangeEvent theEvent ) { CoreArgCheck.isNotNull(theEvent); return (isPreAutoBuild(theEvent) || isPostAutoBuild(theEvent)); } public static boolean isPreEvent( IResourceChangeEvent event ) { if (event == null) { return false; } if (isPreAutoBuild(event)) { return true; } if (isPreClose(event)) { return true; } if (isPreDelete(event)) { return true; } return false; } public static boolean isProjectClosing( IResourceChangeEvent theEvent ) { IResource resource = theEvent.getResource(); if (resource instanceof IProject) { return isPreClose(theEvent); } return false; } public static void debug( IResourceChangeEvent theEvent ) { if (theEvent == null) { return; } System.out.println("********************event=" + System.identityHashCode(theEvent)); //$NON-NLS-1$ System.out.println("type=" + theEvent.getType()); //$NON-NLS-1$ System.out.println("resource=" + theEvent.getResource()); //$NON-NLS-1$ System.out.println("isPreClose=" + isPreClose(theEvent)); //$NON-NLS-1$ System.out.println("isPreDelete=" + isPreDelete(theEvent)); //$NON-NLS-1$ System.out.println("isPreAutoBuild=" + isPreAutoBuild(theEvent)); //$NON-NLS-1$ System.out.println("delta=" + theEvent.getDelta()); //$NON-NLS-1$ System.out.println("isPostAutoBuild=" + isPostAutoBuild(theEvent)); //$NON-NLS-1$ System.out.println("isPostChange=" + isPostChange(theEvent)); //$NON-NLS-1$ System.out.println("isPreAutoBuild=" + isPreAutoBuild(theEvent)); //$NON-NLS-1$ if (theEvent.getDelta() != null) { System.out.println("affected children count=" + theEvent.getDelta().getAffectedChildren().length); //$NON-NLS-1$ try { theEvent.getDelta().accept(new DebugDeltaVisitor()); } catch (CoreException theException) { } } System.out.println(); } public static boolean isPostAutoBuild( IResourceChangeEvent theEvent ) { return (theEvent.getType() == IResourceChangeEvent.POST_BUILD); } public static boolean isPostChange( IResourceChangeEvent theEvent ) { return (theEvent.getType() == IResourceChangeEvent.POST_CHANGE); } public static boolean isPreAutoBuild( IResourceChangeEvent theEvent ) { return (theEvent.getType() == IResourceChangeEvent.PRE_BUILD); } public static boolean isPreClose( IResourceChangeEvent theEvent ) { return (theEvent.getType() == IResourceChangeEvent.PRE_CLOSE); } public static boolean isPreDelete( IResourceChangeEvent theEvent ) { return (theEvent.getType() == IResourceChangeEvent.PRE_DELETE); } public static boolean isAdded( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getKind() == IResourceDelta.ADDED); } public static boolean isChanged( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getKind() == IResourceDelta.CHANGED); } public static boolean isContentChanged( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getKind() == IResourceDelta.CHANGED) && ((theDelta.getFlags() & org.eclipse.core.resources.IResourceDelta.CONTENT) != 0); } public static boolean isDescriptionChange( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0; } public static boolean isMarkersChange( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.MARKERS) != 0; } public static boolean isFile( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getResource().getType() == IResource.FILE); } public static boolean isFolder( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getResource().getType() == IResource.FOLDER); } public static boolean isMovedFrom( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.MOVED_FROM) != 0; } public static boolean isMovedTo( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.MOVED_TO) != 0; } public static boolean isOpened( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.OPEN) != 0; } public static boolean isDescriptionChanged( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.DESCRIPTION) != 0; } public static boolean isProject( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getResource().getType() == IResource.PROJECT); } public static boolean isRemoved( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getKind() == IResourceDelta.REMOVED); } public static boolean isReplaced( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.REPLACED) != 0; } public static boolean isTypeChange( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.TYPE) != 0; } public static boolean isSynchChange( IResourceDelta theDelta ) { if (theDelta == null) { return false; } return (theDelta.getFlags() & IResourceDelta.SYNC) != 0; } static class DebugDeltaVisitor implements IResourceDeltaVisitor { /** * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta) */ @Override public boolean visit( IResourceDelta theDelta ) { System.out.println("resource=" + theDelta.getResource()); //$NON-NLS-1$ System.out.println("kind=" + theDelta.getKind()); //$NON-NLS-1$ System.out.println("flags=" + theDelta.getFlags()); //$NON-NLS-1$ System.out.println("isAdded=" + isAdded(theDelta)); //$NON-NLS-1$ System.out.println("isChanged=" + isChanged(theDelta)); //$NON-NLS-1$ System.out.println("isContentChanged=" + isContentChanged(theDelta)); //$NON-NLS-1$ System.out.println("isDescriptionChange=" + isDescriptionChange(theDelta)); //$NON-NLS-1$ System.out.println("isFile=" + isFile(theDelta)); //$NON-NLS-1$ System.out.println("isFolder=" + isFolder(theDelta)); //$NON-NLS-1$ System.out.println("isMovedFrom=" + isMovedFrom(theDelta)); //$NON-NLS-1$ System.out.println("isMovedTo=" + isMovedTo(theDelta)); //$NON-NLS-1$ System.out.println("isOpened=" + isOpened(theDelta)); //$NON-NLS-1$ System.out.println("isProject=" + isProject(theDelta)); //$NON-NLS-1$ System.out.println("isRemoved=" + isRemoved(theDelta)); //$NON-NLS-1$ System.out.println("isReplaced=" + isReplaced(theDelta)); //$NON-NLS-1$ System.out.println("isTypeChange=" + isTypeChange(theDelta)); //$NON-NLS-1$ System.out.println("-----\n\n"); //$NON-NLS-1$ return true; } } }