/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.project.editor; import org.eclipse.core.resources.IProject; 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; import org.rf.ide.core.project.RobotProjectConfig; class RedXmlFileChangeListener implements IResourceChangeListener { private final IProject project; private final OnRedConfigFileChange performOnChange; RedXmlFileChangeListener(final IProject project, final OnRedConfigFileChange performOnChange) { this.project = project; this.performOnChange = performOnChange; } @Override public void resourceChanged(final IResourceChangeEvent event) { if (event.getType() == IResourceChangeEvent.POST_CHANGE && event.getDelta() != null) { final IResourceDelta delta = event.getDelta(); try { delta.accept(new IResourceDeltaVisitor() { @Override public boolean visit(final IResourceDelta delta) { if (delta.getResource().getFullPath().segmentCount() > 2) { return false; } if (delta.getResource().equals(project.getFile(RobotProjectConfig.FILENAME))) { if (delta.getKind() == IResourceDelta.REMOVED) { performOnChange.whenFileWasRemoved(); } else { performOnChange.whenFileChanged(); } return false; } return true; } }); } catch (final CoreException e) { // nothing to do } } } interface OnRedConfigFileChange { void whenFileChanged(); void whenFileWasRemoved(); } }