/*
* Copyright 2015 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.
*
* 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.kie.workbench.common.widgets.client.datamodel;
import org.drools.workbench.models.datamodel.imports.Imports;
import org.drools.workbench.models.datamodel.oracle.PackageDataModelOracle;
import org.guvnor.common.services.project.model.Package;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.ErrorCallback;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.kie.workbench.common.services.datamodel.backend.server.IncrementalDataModelServiceImpl;
import org.kie.workbench.common.services.datamodel.backend.server.cache.LRUDataModelOracleCache;
import org.kie.workbench.common.services.datamodel.model.PackageDataModelOracleIncrementalPayload;
import org.kie.workbench.common.services.datamodel.service.IncrementalDataModelService;
import org.kie.workbench.common.services.shared.project.KieProject;
import org.kie.workbench.common.services.shared.project.KieProjectService;
import org.uberfire.backend.vfs.Path;
import static org.mockito.Mockito.*;
public class MockIncrementalDataModelServiceCaller implements Caller<IncrementalDataModelService> {
private IncrementalDataModelServiceImplWrapper service;
public MockIncrementalDataModelServiceCaller() {
this( mock( PackageDataModelOracle.class ) );
}
public MockIncrementalDataModelServiceCaller( final PackageDataModelOracle packageLoader ) {
final KieProject project = mock( KieProject.class );
final Package pkg = new Package( mock( Path.class ),
mock( Path.class ),
mock( Path.class ),
mock( Path.class ),
mock( Path.class ),
packageLoader.getPackageName(),
packageLoader.getPackageName(),
packageLoader.getPackageName() );
final LRUDataModelOracleCache cachePackages = mock( LRUDataModelOracleCache.class );
when( cachePackages.assertPackageDataModelOracle( project,
pkg ) ).thenReturn( packageLoader );
final KieProjectService projectService = mock( KieProjectService.class );
when( projectService.resolveProject( any( Path.class ) ) ).thenReturn( project );
when( projectService.resolvePackage( any( Path.class ) ) ).thenReturn( pkg );
this.service = new IncrementalDataModelServiceImplWrapper( cachePackages,
projectService );
}
@Override
public IncrementalDataModelService call() {
return service;
}
@Override
public IncrementalDataModelService call( final RemoteCallback<?> remoteCallback ) {
service.setCallback( remoteCallback );
return service;
}
@Override
public IncrementalDataModelService call( final RemoteCallback<?> remoteCallback,
final ErrorCallback<?> errorCallback ) {
service.setCallback( remoteCallback );
return service;
}
private static class IncrementalDataModelServiceImplWrapper extends IncrementalDataModelServiceImpl {
private RemoteCallback<?> remoteCallback;
public IncrementalDataModelServiceImplWrapper( final LRUDataModelOracleCache cachePackages,
final KieProjectService projectService ) {
super( cachePackages,
projectService );
}
public void setCallback( final RemoteCallback<?> remoteCallback ) {
this.remoteCallback = remoteCallback;
}
@Override
public PackageDataModelOracleIncrementalPayload getUpdates( final Path resourcePath,
final Imports imports,
final String factType ) {
final PackageDataModelOracleIncrementalPayload payload = super.getUpdates( resourcePath,
imports,
factType );
final RemoteCallback r = remoteCallback;
r.callback( payload );
return payload;
}
}
}