/** | |
* Copyright (c) 2009 Mia-Software. | |
* 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: | |
* Fabien GIQUEL (Mia-Software) - initial API and implementation | |
* Nicolas Bros (Mia-Software) - Bug 335003 - [Discoverer] : Existing Discoverers Refactoring based on new framework | |
*******************************************************************************/ | |
package org.eclipse.modisco.java.discoverer.internal; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.gmt.modisco.java.Model; | |
import org.eclipse.modisco.java.discoverer.internal.io.java.binding.BindingManager; | |
/** | |
* The interface for readers which build Java models. | |
* <p> | |
* A model reader reads a source (a Java project for example) and fills a given | |
* {@link Model} object. | |
* </p> | |
* <p> | |
* Concrete model readers should indicate which source type they can handle. | |
* </p> | |
* <p> | |
* When using the methods {@code readModel} with no {@link BindingManager}, the | |
* reader uses a private blank one. Otherwise, the reader uses the given | |
* {@code BindingManager} to handle global references. This is useful when | |
* linking readers. | |
* </p> | |
* <p> | |
* After model creation, don't forget to call {@link #terminate()} to finish the | |
* process. This is <b>not</b> done automatically to allow to link readers. | |
* Clients shouldn't make modifications on the resulting {@code Model}. | |
* </p> | |
*/ | |
public interface IModelReader { | |
/** | |
* This is a convenience method for | |
* {@link #readModel(Object, Model, BindingManager, IProgressMonitor)} with | |
* a private blank {@code BindingManager}. | |
* | |
* @see #readModel(Object, Model, BindingManager, IProgressMonitor) | |
* @param source | |
* the source element to analyse | |
* @param model | |
* the resulting {@code Model} | |
* @param monitor | |
* a monitor to report progress | |
*/ | |
public void readModel(Object source, Model model, IProgressMonitor monitor); | |
/** | |
* Reads the source and fill the {@code model} object. This reader will use | |
* the given {@code BindingManager} to handle global references. | |
* <p> | |
* Readers implementing this method should throw an | |
* {@link IllegalArgumentException} if source is not analysable. | |
* </p> | |
* | |
* @param source | |
* the source to analyse | |
* @param model | |
* the resulting {@code Model} | |
* @param globalBindings | |
* the global {@code BindingManager} | |
* @param monitor | |
* a monitor to report progress | |
* @throws IllegalArgumentException | |
* if the reader can not handle the source (for example, a | |
* library reader can not analyse a compilation unit) | |
*/ | |
public void readModel(Object source, Model model, BindingManager globalBindings, | |
IProgressMonitor monitor); | |
/** | |
* Finalize the creation of the model. | |
* <p> | |
* For a single source, should be called on the reader after analysis of the | |
* source. For multiple sources, should be called on any reader after | |
* analysis of all sources. | |
* </p> | |
* <p> | |
* Clients shouldn't make modifications on the resulting {@code Model}. | |
* </p> | |
* | |
* @param monitor | |
* a monitor to report progress | |
*/ | |
public void terminate(IProgressMonitor monitor); | |
} |