/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.compare;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
/**
* ModelGenerator
*
* @since 8.0
*/
public interface ModelGenerator {
// =========================================================================
// Constants for execution errors
// =========================================================================
public static final int ERROR_PRODUCING_OUTPUT_MODEL = 58001;
public static final int RUNTIME_ERROR_PRODUCING_OUTPUT_MODEL = 58002;
public static final int USER_CANCELLED = 58003;
public static final int COMPLETED_WITH_NO_PROBLEMS = 58004;
public static final int COMPLETED_WITH_WARNINGS = 58005;
public static final int COMPLETED_WITH_ERRORS = 58006;
public static final int COMPLETED_WITH_WARNINGS_AND_ERRORS = 58007;
public static final int COMPLETED_WITH_NO_WARNINGS_AND_ERRORS = 58008;
/**
* Obtain the description for this generator. This method is used to help generate the status messages,
* and therefore should never be null or zero-length. Consequently, if the description is never set
* or is {@link #setDescription(String) set} with a null or zero-length string, a
* {@link #getDefaultDescription() default description} is used.
* @return the description; may not be null
*/
public String getDescription();
/**
* Set the description for this generator.
* @param desc the description; may be null
*/
public void setDescription( final String desc );
/**
* Execute the generator. This method invokes the producer to populate the output model,
* performs a difference analysis between the output and original models,
* and merges all changes so that the original is a mirror of the output.
* @param monitor the progress monitor; may be null
* @return the status containing the result of the generation and merge process
*/
public IStatus execute( final IProgressMonitor progressMonitor );
/**
* Run the generator. This method invokes the producer to populate the output model, but does not
* performs a difference analysis between the output and original models, nor does it
* merge changes so that the original is a mirror of the output.
* This method should be called before
* {@link #computeDifferenceReport(IProgressMonitor)} and before {@link #mergeOutputIntoOriginal(IProgressMonitor)}.
* @param monitor the progress monitor; may be null
* @return the status containing the result of the generation and merge process
*/
public IStatus generateOutput( final IProgressMonitor progressMonitor );
/**
* After generating, compute the difference report. This method should be called after
* {@link #generateOutput(IProgressMonitor)} and before {@link #mergeOutputIntoOriginal(IProgressMonitor)}.
* @param monitor the progress monitor; may be null
* @return the status containing the result of the generation and merge process
*/
public IStatus computeDifferenceReport( final IProgressMonitor progressMonitor );
/**
* Return the (potentially filtered) list of difference reports generated by
* {@link #generateOutputAndDifferenceReport(IProgressMonitor)} or by {@link #execute(IProgressMonitor)}.
* If the client is using {@link #generateOutputAndDifferenceReport(IProgressMonitor)}, individual
* nodes within the difference report nodes can be marked to be {@link DifferenceDescriptor#setSkip() skipped}
* during the {@link #mergeOutputIntoOriginal(IProgressMonitor) merge} process.
* <p>
* The number of difference reports will vary by instance.
* </p>
* @return the list difference reports; never null, but may be empty if the reports haven't been computed
* or if there are no exposed difference reports.
* @see #getPrimaryDifferenceReport()
* @see #getAllDifferenceReports()
*/
public List getDifferenceReports();
/**
* Return the list of all difference reports generated by
* {@link #generateOutputAndDifferenceReport(IProgressMonitor)} or by {@link #execute(IProgressMonitor)}.
* If the client is using {@link #generateOutputAndDifferenceReport(IProgressMonitor)}, individual
* nodes within the difference report nodes can be marked to be {@link DifferenceDescriptor#setSkip() skipped}
* during the {@link #mergeOutputIntoOriginal(IProgressMonitor) merge} process.
* <p>
* The number of difference reports will vary by instance.
* </p>
* @return the list difference reports; never null, but may be empty if the reports haven't been computed
* or if there are no exposed difference reports.
* @see #getPrimaryDifferenceReport()
* @see #getAllDifferenceReports()
*/
public List getAllDifferenceReports();
/**
* Execute the generator. This method invokes the producer to populate the output model,
* performs a difference analysis between the output and original models,
* and merges all changes so that the original is a mirror of the output.
* @param monitor the progress monitor; may be null
* @return the status containing the result of the generation and merge process
*/
public IStatus mergeOutputIntoOriginal( final IProgressMonitor progressMonitor );
/**
* Close any resources that were opened by this generator. This method should be called when finished
* with this object.
*/
public void close();
/**
* method provides visibility for a generator to operate in both a model "Update" mode or a new model case.
* @return
* @since 5.0.2
*/
public boolean isNewModelCase();
/**
* Set's the generator's isNewModelCase parameter. (see isNewModelCase() method)
* @param theIsNewModelCase
* @since 5.0.2
*/
public void setNewModelCase(boolean theIsNewModelCase);
/**
* Sets the generator's saveAllBeforeFinish parameter. (see isSaveAllBeforeFinish() method)
* @param theDoSave
* @since 5.0.2
*/
public void setSaveAllBeforeFinish(boolean theDoSave);
/**
* method provides visibility to a generator's save intentions (i.e. save before finish). We needed a method to prevent any
* saving of resources prior to model creation (including updating imports) being completely finished.
* @return
* @since 5.0.2
*/
public boolean isSaveAllBeforeFinish();
/**
* allows builders & actions to specifically do a save on all resources associated with the action/builder's generator(s)
*
* @since 5.0.2
*/
public void saveModel();
}