/*
* Copyright 2017 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 java.util.HashSet;
import java.util.logging.Logger;
import com.google.gwt.webworker.client.MessageEvent;
import com.google.gwt.webworker.client.MessageHandler;
import com.google.gwt.webworker.client.Worker;
import org.drools.workbench.services.verifier.api.client.Status;
import org.drools.workbench.services.verifier.api.client.reporting.Issues;
import org.drools.workbench.services.verifier.plugin.client.api.WebWorkerException;
import org.drools.workbench.services.verifier.plugin.client.api.WebWorkerLogMessage;
import org.jboss.errai.enterprise.client.jaxrs.MarshallingWrapper;
import org.uberfire.commons.validation.PortablePreconditions;
public class Receiver {
private static final Logger LOGGER = Logger.getLogger( "DTable Analyzer" );
private AnalysisReporter reporter;
public Receiver( final AnalysisReporter reporter ) {
this.reporter = PortablePreconditions.checkNotNull( "reporter",
reporter );
}
public void activate() {
reporter.activate();
}
private void received( final String json ) {
try {
LOGGER.finest( "Receiving: " + json );
final Object o = MarshallingWrapper.fromJSON( json );
if ( o instanceof WebWorkerLogMessage ) {
LOGGER.info( "Web Worker log message: " + ( (WebWorkerLogMessage) o ).getMessage() );
} else if ( o instanceof WebWorkerException ) {
LOGGER.severe( "Web Worker failed: " + ( (WebWorkerException) o ).getMessage() );
} else if ( o instanceof Status ) {
reporter.sendStatus( (Status) o );
} else if ( o instanceof Issues ) {
reporter.sendReport( new HashSet<>( ( (Issues) o ).getSet() ) );
}
} catch ( Exception e ) {
LOGGER.severe( "Could not manage received json: " + e.getMessage()
+ " JSON: " + json );
}
}
public void setUp( final Worker worker ) {
worker.setOnMessage( new MessageHandler() {
@Override
public void onMessage( final MessageEvent messageEvent ) {
received( messageEvent.getDataAsString() );
}
} );
}
}