/*
* Copyright (c) 2012, 2013 Hemanta Sapkota.
* 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:
* Hemanta Sapkota (laex.pearl@gmail.com)
*/
package com.laex.cg2d.model;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
/**
* The listener interface for receiving entityResourceChange events. The class
* that is interested in processing a entityResourceChange event implements this
* interface, and the object created with that class is registered with a
* component using the component's
* <code>addEntityResourceChangeListener<code> method. When
* the entityResourceChange event occurs, that object's appropriate
* method is invoked.
*
* @see EntityResourceChangeEvent
*/
public class EntityResourceChangeListener implements IResourceChangeListener {
/**
* The listener interface for receiving entityChange events. The class that is
* interested in processing a entityChange event implements this interface,
* and the object created with that class is registered with a component using
* the component's <code>addEntityChangeListener<code> method. When
* the entityChange event occurs, that object's appropriate
* method is invoked.
*
* @see EntityChangeEvent
*/
public interface EntityChangeListener {
/**
* Entity changed.
*
* @param resource
* the resource
*/
void entityChanged(IResource resource);
/**
* Entity removed.
*
* @param resource
* the resource
*/
void entityRemoved(IResource resource);
}
/**
* The Class EntityVisitor.
*/
class EntityVisitor implements IResourceDeltaVisitor {
/**
* Checks if is resource valid.
*
* @param res
* the res
* @return true, if is resource valid
*/
private boolean isResourceValid(IResource res) {
if (res == null)
return false;
String ext = res.getFileExtension();
if (ext != null && ext.equals(ICGCProject.ENTITIES_EXTENSION)) {
return true;
}
return false;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core
* .resources.IResourceDelta)
*/
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource res = delta.getResource();
if (isResourceValid(res)) {
switch (delta.getKind()) {
case IResourceDelta.REMOVED:
chgList.entityRemoved(res);
break;
case IResourceDelta.CHANGED:
chgList.entityChanged(res);
break;
}
}
return true;
}
}
/** The chg list. */
private EntityChangeListener chgList;
/**
* Instantiates a new entity resource change listener.
*/
public EntityResourceChangeListener() {
}
/**
* Adds the entity change listener.
*
* @param chgList
* the chg list
*/
public void addEntityChangeListener(EntityChangeListener chgList) {
this.chgList = chgList;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.
* eclipse.core.resources.IResourceChangeEvent)
*/
@Override
public void resourceChanged(IResourceChangeEvent event) {
switch (event.getType()) {
case IResourceChangeEvent.PRE_DELETE:
try {
event.getDelta().accept(new EntityVisitor());
} catch (CoreException e1) {
e1.printStackTrace();
}
break;
case IResourceChangeEvent.PRE_CLOSE:
break;
case IResourceChangeEvent.POST_CHANGE:
try {
event.getDelta().accept(new EntityVisitor());
} catch (CoreException e) {
e.printStackTrace();
}
break;
}
}
}