/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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 org.drools.workbench.screens.guided.dtable.client.widget.analysis;
import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52;
import org.drools.workbench.screens.guided.dtable.client.widget.analysis.panel.AnalysisReportScreen;
import org.drools.workbench.services.verifier.plugin.client.api.Initialize;
import org.drools.workbench.services.verifier.plugin.client.builders.ModelMetaDataEnhancer;
import org.kie.workbench.common.services.shared.preferences.ApplicationPreferences;
import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle;
import org.uberfire.commons.uuid.UUID;
import org.uberfire.commons.validation.PortablePreconditions;
import org.uberfire.mvp.PlaceRequest;
public class DecisionTableAnalyzerBuilder {
protected PlaceRequest placeRequest;
protected AsyncPackageDataModelOracle oracle;
protected GuidedDecisionTable52 model;
protected AnalysisReportScreen analysisReportScreen;
protected DTableUpdateManagerImpl updateManager;
private AnalysisReporter analysisReporter;
private DecisionTableAnalyzer decisionTableAnalyzer;
private VerifierWebWorkerConnectionImpl webWorker;
private FieldTypeProducer fieldTypeProducer;
private Poster poster;
public DecisionTableAnalyzerBuilder withPlaceRequest( final PlaceRequest placeRequest ) {
this.placeRequest = placeRequest;
return this;
}
public DecisionTableAnalyzerBuilder withOracle( final AsyncPackageDataModelOracle oracle ) {
this.oracle = oracle;
fieldTypeProducer = new FieldTypeProducer( oracle );
return this;
}
public DecisionTableAnalyzerBuilder withModel( final GuidedDecisionTable52 model ) {
this.model = model;
return this;
}
public DecisionTableAnalyzerBuilder withReportScreen( final AnalysisReportScreen analysisReportScreen ) {
this.analysisReportScreen = analysisReportScreen;
return this;
}
public DecisionTableAnalyzer build() {
PortablePreconditions.checkNotNull( "placeRequest",
placeRequest );
PortablePreconditions.checkNotNull( "oracle",
oracle );
PortablePreconditions.checkNotNull( "model",
model );
PortablePreconditions.checkNotNull( "analysisReportScreen",
analysisReportScreen );
return getDTableAnalyzer();
}
private VerifierWebWorkerConnectionImpl getWebWorker() {
if ( webWorker == null ) {
webWorker = new VerifierWebWorkerConnectionImpl( new Initialize( UUID.uuid(),
model,
new ModelMetaDataEnhancer( model ).getHeaderMetaData(),
fieldTypeProducer.getFactTypes(),
ApplicationPreferences.getDroolsDateFormat() ),
getPoster(),
new Receiver( getAnalysisReporter() ) );
}
return webWorker;
}
private Poster getPoster() {
if ( poster == null ) {
poster = new Poster();
}
return poster;
}
protected AnalysisReporter getAnalysisReporter() {
if ( analysisReporter == null ) {
analysisReporter = new AnalysisReporter( placeRequest,
analysisReportScreen );
}
return analysisReporter;
}
private DTableUpdateManagerImpl getUpdateManager() {
if ( this.updateManager == null ) {
this.updateManager = new DTableUpdateManagerImpl( getPoster(),
fieldTypeProducer );
}
return this.updateManager;
}
private DecisionTableAnalyzer getDTableAnalyzer() {
if ( decisionTableAnalyzer == null ) {
reset();
decisionTableAnalyzer = new DecisionTableAnalyzer( model,
getUpdateManager(),
getWebWorker() );
}
return decisionTableAnalyzer;
}
private void reset() {
poster = null;
}
}