blob: 6d4428e4d06c508478dd08cd9c5c7725abba00f8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004-2009 Gabor Bergmann and Daniel Varro
* 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:
* Gabor Bergmann - initial API and implementation
*******************************************************************************/
package org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.matcher;
import org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.boundary.IManipulationListener;
import org.eclipse.viatra2.gtasm.patternmatcher.incremental.rete.boundary.IPredicateTraceListener;
/**
* Represents all knowledge of the outside world, that is needed durin runtime operation, towards the pattern matcher.
*
* @author Bergmann Gábor
*
*/
public interface IPatternMatcherRuntimeContext<PatternDescription> extends
IPatternMatcherContext<PatternDescription> {
// ---------------------------------------------------------------------------------
/**
* @pre: network, framework, boundary, disconnectables initialised
*/
IManipulationListener subscribePatternMatcherForUpdates(ReteEngine<PatternDescription> engine);
/**
* @pre: boundary, disconnectables initialised
*/
IPredicateTraceListener subscribePatternMatcherForTraceInfluences(ReteEngine<PatternDescription> engine);
Object ternaryEdgeTarget(Object relation);
Object ternaryEdgeSource(Object relation);
void enumerateAllUnaries(ModelElementCrawler crawler);
void enumerateAllTernaryEdges(ModelElementCrawler crawler);
void enumerateAllBinaryEdges(ModelElementPairCrawler crawler); // first=from, second=to
void enumerateDirectUnaryInstances(Object typeObject, ModelElementCrawler crawler);
void enumerateDirectTernaryEdgeInstances(Object typeObject, ModelElementCrawler crawler);
void enumerateDirectBinaryEdgeInstances(Object typeObject, ModelElementPairCrawler crawler); // first=from, second=to
void enumerateAllUnaryInstances(Object typeObject, ModelElementCrawler crawler);
void enumerateAllTernaryEdgeInstances(Object typeObject, ModelElementCrawler crawler);
void enumerateAllBinaryEdgeInstances(Object typeObject, ModelElementPairCrawler crawler); // first=from, second=to
void enumerateAllUnaryContainments(ModelElementPairCrawler crawler); // first=container, second=contained
void enumerateAllInstantiations(ModelElementPairCrawler crawler); // first=type, second=instance
void enumerateAllGeneralizations(ModelElementPairCrawler crawler); // first=supertype, second=subtype
void modelReadLock();
void modelReadUnLock();
public abstract void finishCoalescing();
public abstract void startCoalescing();
interface ModelElementCrawler {
public void crawl(Object modelElement);
}
interface ModelElementPairCrawler {
public void crawl(Object first, Object second);
}
}