package org.erlide.project.model.impl; import java.util.Arrays; import java.util.Collection; import java.util.function.Consumer; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.erlide.project.model.ICodeUnit; import org.erlide.project.model.IErlangModel; import org.erlide.project.model.IErlangModelElement; import org.erlide.project.model.IErlangProject; @SuppressWarnings("all") public class ModelResourceListener implements IResourceChangeListener { private IErlangModel model; public ModelResourceListener(final IErlangModel model) { this.model = model; IWorkspace _workspace = ResourcesPlugin.getWorkspace(); _workspace.addResourceChangeListener(this); } public void dispose() { IWorkspace _workspace = ResourcesPlugin.getWorkspace(); _workspace.removeResourceChangeListener(this); } @Override public void resourceChanged(final IResourceChangeEvent event) { this.updateModel(this.model, event); } protected void _updateModel(final IErlangModel model, final IResourceChangeEvent event) { Collection<IErlangProject> _projects = model.getProjects(); final Consumer<IErlangProject> _function = new Consumer<IErlangProject>() { @Override public void accept(final IErlangProject it) { ModelResourceListener.this.updateModel(it, event); } }; _projects.forEach(_function); } protected void _updateModel(final IErlangProject project, final IResourceChangeEvent event) { } protected void _updateModel(final ICodeUnit unit, final IResourceChangeEvent event) { } public void updateModel(final IErlangModelElement unit, final IResourceChangeEvent event) { if (unit instanceof ICodeUnit) { _updateModel((ICodeUnit)unit, event); return; } else if (unit instanceof IErlangModel) { _updateModel((IErlangModel)unit, event); return; } else if (unit instanceof IErlangProject) { _updateModel((IErlangProject)unit, event); return; } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(unit, event).toString()); } } }