blob: 0d9138f9c0e0a13dadb4d4d81993a607286f8360 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2014, 2021 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.internal.redocs.wikitext.r.core.model;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.statet.jcommons.collections.ImCollections;
import org.eclipse.statet.jcommons.collections.ImList;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.docmlet.wikitext.core.WikitextBuildParticipant;
import org.eclipse.statet.docmlet.wikitext.core.model.WikidocWorkspaceSourceUnit;
import org.eclipse.statet.docmlet.wikitext.core.model.build.WikidocSourceUnitModelContainer;
import org.eclipse.statet.r.core.RProject;
import org.eclipse.statet.r.core.RProjects;
import org.eclipse.statet.r.core.model.RModel;
import org.eclipse.statet.r.core.model.build.RModelIndexUpdate;
import org.eclipse.statet.redocs.wikitext.r.core.model.WikidocRweaveSourceUnit;
import org.eclipse.statet.redocs.wikitext.r.core.model.WikitextRweaveModel;
@NonNullByDefault
public class WikitextRweaveTexBuildParticipant extends WikitextBuildParticipant {
private static final ImList<String> WIKITEXT_R_MODEL_TYPES= ImCollections.newList(
WikitextRweaveModel.WIKIDOC_R_MODEL_TYPE_ID );
private RModelIndexUpdate rIndexUpdate;
public WikitextRweaveTexBuildParticipant() {
}
@Override
public void init() {
super.init();
final RProject rProject= RProjects.getRProject(getWikitextProject().getProject());
if (rProject != null) {
setEnabled(true);
this.rIndexUpdate= new RModelIndexUpdate(rProject, WIKITEXT_R_MODEL_TYPES,
(getBuildType() == IncrementalProjectBuilder.FULL_BUILD) );
}
}
@Override
public void clear(final IFile file) throws CoreException {
file.deleteMarkers("org.eclipse.statet.r.resourceMarkers.Tasks", false, IResource.DEPTH_INFINITE); //$NON-NLS-1$
}
@Override
public void docUnitUpdated(final WikidocWorkspaceSourceUnit sourceUnit,
final IProgressMonitor monitor) throws CoreException {
if (sourceUnit instanceof WikidocRweaveSourceUnit) {
final WikidocRweaveSourceUnit unit= (WikidocRweaveSourceUnit) sourceUnit;
final WikidocRweaveSuModelContainer modelContainer= (WikidocRweaveSuModelContainer)unit.getAdapter(WikidocSourceUnitModelContainer.class);
if (modelContainer != null) {
this.rIndexUpdate.update(unit,
RModel.getRModelInfo(modelContainer.getCurrentModel()) );
}
else {
this.rIndexUpdate.remove(unit);
}
}
}
@Override
public void docUnitRemoved(final IFile file,
final IProgressMonitor monitor) throws CoreException {
this.rIndexUpdate.remove(file);
}
@Override
public void docFinished(final IProgressMonitor monitor) throws CoreException {
this.rIndexUpdate.submit(monitor);
}
}