/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.netbeans.parsing.spi;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.swing.text.JTextComponent;
import org.antlr.netbeans.editor.text.DocumentSnapshot;
import org.antlr.netbeans.editor.text.VersionedDocument;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
/**
*
* @author Sam Harwell
*/
public interface ParserTaskManager {
@CheckForNull <T> Future<ParserData<T>> getData(@NonNull DocumentSnapshot snapshot, @NonNull ParserDataDefinition<T> definition);
@NonNull Future<ParserData<?>>[] getData(@NonNull DocumentSnapshot snapshot, @NonNull Collection<? extends ParserDataDefinition<?>> definitions);
@CheckForNull <T> Future<ParserData<T>> getData(@NonNull DocumentSnapshot snapshot, @NonNull ParserDataDefinition<T> definition, @NonNull Collection<ParserDataOptions> options);
@NonNull Future<ParserData<?>>[] getData(@NonNull DocumentSnapshot snapshot, @NonNull Collection<? extends ParserDataDefinition<?>> definitions, @NonNull Collection<ParserDataOptions> options);
@CheckForNull <T> Future<ParserData<T>> getData(@NonNull DocumentSnapshot snapshot, @NullAllowed JTextComponent component, @NonNull ParserDataDefinition<T> definition);
@NonNull Future<ParserData<?>>[] getData(@NonNull DocumentSnapshot snapshot, @NullAllowed JTextComponent component, @NonNull Collection<? extends ParserDataDefinition<?>> definitions);
@CheckForNull <T> Future<ParserData<T>> getData(@NonNull DocumentSnapshot snapshot, @NullAllowed JTextComponent component, @NonNull ParserDataDefinition<T> definition, @NonNull Collection<ParserDataOptions> options);
@NonNull Future<ParserData<?>>[] getData(@NonNull DocumentSnapshot snapshot, @NullAllowed JTextComponent component, @NonNull Collection<? extends ParserDataDefinition<?>> definitions, @NonNull Collection<ParserDataOptions> options);
<T> ScheduledFuture<ParserData<T>> scheduleData(@NonNull ParseContext context, @NonNull ParserDataDefinition<T> data);
Map<ParserDataDefinition<?>, ScheduledFuture<ParserData<?>>> scheduleData(@NonNull ParseContext context, @NonNull Collection<? extends ParserDataDefinition<?>> data);
<T> ScheduledFuture<ParserData<T>> scheduleData(@NonNull ParseContext context, @NonNull ParserDataDefinition<T> data, long delay, @NonNull TimeUnit timeUnit);
Map<ParserDataDefinition<?>, ScheduledFuture<ParserData<?>>> scheduleData(@NonNull ParseContext context, @NonNull Collection<? extends ParserDataDefinition<?>> data, long delay, @NonNull TimeUnit timeUnit);
ScheduledFuture<Collection<? extends ParserData<?>>> scheduleTask(@NonNull ParseContext context, @NonNull ParserTaskProvider data);
Map<ParserTaskProvider, ScheduledFuture<Collection<? extends ParserData<?>>>> scheduleTask(@NonNull ParseContext context, @NonNull Collection<? extends ParserTaskProvider> data);
ScheduledFuture<Collection<? extends ParserData<?>>> scheduleTask(@NonNull ParseContext context, @NonNull ParserTaskProvider data, long delay, @NonNull TimeUnit timeUnit);
Map<ParserTaskProvider, ScheduledFuture<Collection<? extends ParserData<?>>>> scheduleTask(@NonNull ParseContext context, @NonNull Collection<? extends ParserTaskProvider> data, long delay, @NonNull TimeUnit timeUnit);
void reschedule(@NonNull VersionedDocument document, @NonNull Class<? extends ParserTaskScheduler> scheduler);
void reschedule(@NonNull VersionedDocument document, @NullAllowed JTextComponent component, @NonNull Class<? extends ParserTaskScheduler> scheduler);
void reschedule(@NonNull VersionedDocument document, @NullAllowed JTextComponent component, long delay, @NonNull TimeUnit timeUnit, @NonNull Class<? extends ParserTaskScheduler> scheduler);
@NonNull <T> ScheduledFuture<T> scheduleHighPriority(@NonNull Callable<T> callable);
@NonNull <T> ScheduledFuture<T> scheduleLowPriority(@NonNull Callable<T> callable);
void addDataListener(@NonNull ParserDataListener<Object> listener);
void removeDataListener(@NonNull ParserDataListener<Object> listener);
<T> void addDataListener(@NonNull ParserDataDefinition<T> definition, @NonNull ParserDataListener<? super T> listener);
<T> void removeDataListener(@NonNull ParserDataDefinition<T> definition, @NonNull ParserDataListener<? super T> listener);
}