/* * Copyright 2013 State University of New York at Oswego * * 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 edu.oswego.csc480_hci521_2013.client.presenters; import com.google.web.bindery.event.shared.EventBus; import com.google.web.bindery.event.shared.HandlerRegistration; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import edu.oswego.csc480_hci521_2013.client.events.RFParameterEvent; import edu.oswego.csc480_hci521_2013.client.events.RFParameterEventHandler; import edu.oswego.csc480_hci521_2013.client.presenters.adapters.ConfusionMatrixAdapter; import edu.oswego.csc480_hci521_2013.client.ui.ConfusionMatrixView; import edu.oswego.csc480_hci521_2013.client.events.RFProgressEvent; import edu.oswego.csc480_hci521_2013.client.events.RFProgressEventHandler; import edu.oswego.csc480_hci521_2013.client.events.TreeVisEvent; import edu.oswego.csc480_hci521_2013.shared.h2o.json.RF; import edu.oswego.csc480_hci521_2013.shared.h2o.json.RFView; import edu.oswego.csc480_hci521_2013.shared.h2o.json.ResponseStatus; import edu.oswego.csc480_hci521_2013.shared.h2o.urlbuilders.RFBuilder; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import java.util.Map; import java.util.HashMap; public class ConfusionMatrixPresenterImpl implements ConfusionMatrixPresenter, TabPanelPresenter { static final Logger logger = Logger.getLogger(ConfusionMatrixPresenterImpl.class.getName()); RF randomForest; EventBus eventbus; ConfusionMatrixView view; RFView data; private String responseVariable; RFBuilder builder; private List<HandlerRegistration> handlers = new ArrayList<HandlerRegistration>(); public ConfusionMatrixPresenterImpl(ConfusionMatrixView view, EventBus eventBus, RF randomForest, RFBuilder builder) { this.view = view; this.eventbus = eventBus; this.randomForest = randomForest; this.builder = builder; view.setPresenter(this); bind(); } public ConfusionMatrixPresenterImpl(ConfusionMatrixView view, EventBus eventBus, RF randomForest) { this.view = view; this.eventbus = eventBus; this.randomForest = randomForest; this.builder = null; view.setPresenter(this); bind(); } private void bind() { handlers.add(eventbus.addHandler(RFProgressEvent.TYPE, new RFProgressEventHandler() { @Override public void onDataUpdate(RFProgressEvent e) { if (e.getSource().equals(randomForest)) { RFView rfview = e.getData(); logger.log(Level.INFO, rfview.toString()); ResponseStatus status = rfview.getResponse(); if (status.isPoll()) { int done = status.getProgress(); int total = status.getProgressTotal(); logger.log(Level.INFO, "Trees: Generated " + done + " of " + total); view.setForestStatus(done, total); } else { logger.log(Level.ALL, "Forest finished"); view.forestFinish(rfview.getNtree()); } setData(e.getData()); } } })); } @Override public void added() { bind(); } @Override public void removed() { for (HandlerRegistration h : handlers) { h.removeHandler(); } handlers.clear(); } public RF getRandomForest() { return randomForest; } public RFBuilder getBuilder(){ return builder; } @Override public RFView getData() { return data; } @Override public void setData(RFView data) { this.data = data; updateView(this.view, data, builder); } public static void updateView(ConfusionMatrixView matrixView, RFView data, RFBuilder build) { ConfusionMatrixAdapter adapter = new ConfusionMatrixAdapter(data, build); matrixView.setIdentifier(data.getDataKey() + " " + data.getModelKey()); if (data.getResponse().isPoll()) { matrixView.setProgress(adapter.getProgress()); } else { matrixView.hideProgress(); } matrixView.setClassificationError(adapter.getClassificationError()); matrixView.setResponseVariable(adapter.getResponseVariable()); matrixView.setNtree(adapter.getNtree()); matrixView.setIgnoredUsed(build.getIgnores()); matrixView.setClassWeightsUsed(build.getClassWeights()); matrixView.setMtry(adapter.getMtry()); matrixView.setRowsSkipped(adapter.getRowsSkipped()); matrixView.setRows(adapter.getRows()); matrixView.setMatrixType(adapter.getMatrixType()); matrixView.setMatrixHeaders(adapter.getHeaders()); matrixView.setMatrixScores(adapter.getScores()); matrixView.setErrors(adapter.getErrors()); matrixView.setTotals(adapter.getTotals()); matrixView.setTreesGenerated(adapter.getTreesBuilt()); matrixView.setLeavesMin(adapter.getLeavesMin()); matrixView.setLeavesMean(adapter.getLeavesMean()); matrixView.setLeavesMax(adapter.getLeavesMax()); matrixView.setDepthMin(adapter.getDepthMin()); matrixView.setDepthMean(adapter.getDepthMean()); matrixView.setDepthMax(adapter.getDepthMax()); } @Override public ScheduledCommand getTreeVisCommand(final int index) { return new ScheduledCommand() { @Override public void execute() { eventbus.fireEvent(new TreeVisEvent(randomForest, index)); } }; } @Override public ConfusionMatrixView getView() { return view; } }