blob: ea5bf902d8e3593abfd9f8bfed407f329ca67933 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008, 2009 THALES GLOBAL SERVICES.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.query.legacy.business.internal.interpreter;
import org.eclipse.core.resources.IFile;
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.sirius.common.tools.api.resource.FileProvider;
/**
* Workspace resource listener.
*
* @author cnotot
*/
public class AcceleoTemplateWorkspaceListener implements IResourceChangeListener {
private AcceleoInterpreter interpreter;
/**
* Creates a new instance.
*
* @param interpreter
* the interpreter
*/
public AcceleoTemplateWorkspaceListener(final AcceleoInterpreter interpreter) {
this.interpreter = interpreter;
}
/**
* resourceChanged.
*
* @param event
* {@link IResourceChangeListener}
*/
public void resourceChanged(final IResourceChangeEvent event) {
final IResourceDelta delta = event.getDelta();
if (delta != null && hasAtLeastOneModifiedTemplate(delta)) {
processDelta(delta);
}
}
private boolean hasAtLeastOneModifiedTemplate(IResourceDelta delta) {
for (IResourceDelta deltaChild : delta.getAffectedChildren()) {
if (isAboutFolderDerived(deltaChild)) {
break;
} else if (isAboutTemplateChange(deltaChild) || hasAtLeastOneModifiedTemplate(deltaChild)) {
return true;
}
}
return false;
}
private boolean isAboutFolderDerived(final IResourceDelta delta) {
return delta.getResource().getType() == IResource.FOLDER && delta.getResource().isDerived();
}
private boolean isAboutTemplateChange(final IResourceDelta delta) {
return delta.getResource().getType() == IResource.FILE && delta.getKind() == IResourceDelta.CHANGED && isTemplate(delta);
}
private boolean isTemplate(final IResourceDelta delta) {
if (delta.getFullPath() != null) {
IFile file = FileProvider.findFile(delta.getFullPath());
return "mt".equals(file.getFileExtension());
}
return false;
}
/**
* Re-Initialize the interpreters for the Sessions
*
* @param delta
*/
private void processDelta(final IResourceDelta delta) {
interpreter.reconsiderTemplateFiles();
}
}