/*
* Copyright 2003-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jetbrains.mps.generator;
import jetbrains.mps.generator.impl.dependencies.GenerationDependencies;
import jetbrains.mps.generator.impl.plan.CrossModelEnvironment;
import jetbrains.mps.util.Status;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SModel;
/**
* Igor Alshannikov
* Oct 24, 2005
*/
public class GenerationStatus extends Status {
private final SModel myOutputModel;
private final SModel myInputModel;
private final boolean myCanceled;
private final boolean myWarnings;
private GenerationDependencies myDependencies;
private ModelExports myExports;
private SModel myOriginalInputModel;
public GenerationStatus(SModel inputModel, SModel outputModel, GenerationDependencies dependencies, boolean errors, boolean warnings, boolean canceled) {
super(errors ? Code.ERROR : Code.OK, null);
myCanceled = canceled;
myOutputModel = outputModel;
myInputModel = inputModel;
myWarnings = warnings;
myDependencies = dependencies;
}
@Override
public boolean isOk() {
return !myCanceled && super.isOk();
}
public boolean isCanceled() {
return myCanceled;
}
public boolean hasWarnings() {
return myWarnings;
}
@Nullable
public SModel getOutputModel() {
return myOutputModel;
}
public SModel getInputModel() {
return myInputModel;
}
public GenerationDependencies getDependencies() {
return myDependencies;
}
public SModel getOriginalInputModel() {
return myOriginalInputModel;
}
public void setOriginalInputModel(org.jetbrains.mps.openapi.model.SModel originalInputModel) {
myOriginalInputModel = originalInputModel;
}
/**
* PROVISIONAL CODE. DO NOT USE!
* GenerationStatus serves as a container for data associated with model generation step.
* However, some of these associates has nothing to do with generation (e.g. ModelDependencies are purely textgen aspect),
* and some are just exposed here to be accessed, and has nothing to do with generation status.
* ModelExports object keeps cross-model generation aspect and as such qualifies to be exposed from GS, however, with
* better structure of CacheGenerators we unlikely to need it here (this might be generic 'AuxGeneratedDataSupplier' which would
* tell desired location (sourcegen or caches) and accept StreamHandler to save whatever it needs to save (either exports model or 'trace.info' xml)
*/
@Nullable
public ModelExports getModelExports() {
return myExports;
}
/**
* PROVISIONAL CODE. DO NOT USE!
*/
public void setModelExports(ModelExports exports) {
myExports = exports;
}
/**
* PROVISIONAL CODE. DO NOT USE!
* See {@link #getModelExports()} for replacement ideas.
*/
public void setCrossModelEnvironment(CrossModelEnvironment cme) {
myCrossModelEnvironment = cme;
}
public CrossModelEnvironment getCrossModelEnvironment() {
// FIXME Likely, shall not expose complete CME but rather part of it devoted to CP models that needs to be saved.
return myCrossModelEnvironment;
}
private CrossModelEnvironment myCrossModelEnvironment;
public static class ERROR extends GenerationStatus {
public ERROR(SModel inputModel) {
super(inputModel, null, null, true, false, false);
}
}
}