com.google.testing.testify.risk.frontend.client.view.impl.KnownRiskViewImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.google.testing.testify.risk.frontend.client.view.impl.KnownRiskViewImpl.java

Source

// Copyright 2010 Google Inc. All Rights Reseved.
//
// 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 com.google.testing.testify.risk.frontend.client.view.impl;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.testing.testify.risk.frontend.client.riskprovider.RiskProvider;
import com.google.testing.testify.risk.frontend.client.riskprovider.impl.BugRiskProvider;
import com.google.testing.testify.risk.frontend.client.riskprovider.impl.CodeChurnRiskProvider;
import com.google.testing.testify.risk.frontend.client.riskprovider.impl.StaticRiskProvider;
import com.google.testing.testify.risk.frontend.client.riskprovider.impl.TestCoverageRiskProvider;
import com.google.testing.testify.risk.frontend.client.view.widgets.LinkCapabilityWidget;
import com.google.testing.testify.risk.frontend.model.Capability;
import com.google.testing.testify.risk.frontend.model.CapabilityIntersectionData;
import com.google.testing.testify.risk.frontend.model.Pair;

import java.util.List;

/**
 * View of mitigated risk for a project.
 *
 * @author chrsmith@google.com (Chris Smith)
 * @author jimr@google.com (Jim Reardon)
 */
public class KnownRiskViewImpl extends RiskViewImpl {

    /**
     * Stores details on a risk provider along with a checkbox indicating its state.
     */
    private class SourceItem {
        private final RiskProvider provider;
        private final CheckBox checkBox;

        public SourceItem(RiskProvider provider, CheckBox checkBox) {
            this.provider = provider;
            this.checkBox = checkBox;
        }

        public RiskProvider getProvider() {
            return provider;
        }

        public CheckBox getCheckBox() {
            return checkBox;
        }
    }

    /** Panel to hold all of the check boxes associated with Risk sources. */
    private final HorizontalPanel sourcesPanel = new HorizontalPanel();

    /** Panel to hold the risk page's content. */
    private final HorizontalPanel contentPanel = new HorizontalPanel();

    private final List<SourceItem> sources = Lists.newArrayList();

    public KnownRiskViewImpl() {
        String introText = "This shows the Total Risk to your application, taking into account any Risk Sources "
                + "as well as Mitigation Sources that are checked below.";
        setPageText("Known Risk", introText);
        sourcesPanel.addStyleName("tty-RiskSourcesPanel");
        contentPanel.add(sourcesPanel);
        this.content.add(contentPanel);

        addValueChangeHandler(new ValueChangeHandler<Pair<Integer, Integer>>() {
            @Override
            public void onValueChange(ValueChangeEvent<Pair<Integer, Integer>> event) {
                CapabilityIntersectionData cellData = getDataForCell(event.getValue().first,
                        event.getValue().second);
                bottomContent.clear();
                bottomContent.setWidget(createBottomWidget(cellData));
            }
        });
    }

    private Widget createBottomWidget(CapabilityIntersectionData data) {
        VerticalPanel panel = new VerticalPanel();
        panel.setStyleName("tty-ItemContainer");
        String aName = data.getParentAttribute().getName();
        String cName = data.getParentComponent().getName();
        Label name = new Label(cName + " is " + aName);
        name.setStyleName("tty-ItemName");
        panel.add(name);

        for (Capability capability : data.getCapabilities()) {
            LinkCapabilityWidget widget = new LinkCapabilityWidget(capability);
            panel.add(widget);
        }
        return panel;
    }

    /**
     * Returns a CheckBox to control the RiskProvider (changing the check state regenerates the risk
     * grid's colors.)
     */
    private CheckBox getRiskProviderCheckBox(RiskProvider provider) {
        CheckBox providerCheckBox = new CheckBox(provider.getName());
        providerCheckBox.setValue(true);
        providerCheckBox.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
            @Override
            public void onValueChange(ValueChangeEvent<Boolean> event) {
                refreshRiskCalculation();
            }
        });
        return providerCheckBox;
    }

    @Override
    protected void onInitialized() {
        List<RiskProvider> providers = Lists.newArrayList(new StaticRiskProvider(), new BugRiskProvider(),
                new CodeChurnRiskProvider(), new TestCoverageRiskProvider());

        // Initialize risk sources.
        sources.clear();
        sourcesPanel.clear();
        for (RiskProvider provider : providers) {
            CheckBox providerCheckBox = getRiskProviderCheckBox(provider);
            sourcesPanel.add(providerCheckBox);
            SourceItem sourceItem = new SourceItem(provider, providerCheckBox);
            sources.add(sourceItem);
        }

        refreshRiskCalculation();
    }

    /**
     * Initialize every cell in the table. This includes calculating the risk of every risk source
     * and mitigation and then viewing the delta.
     */
    private void refreshRiskCalculation() {
        Predicate<SourceItem> getChecked = new Predicate<SourceItem>() {
            @Override
            public boolean apply(SourceItem input) {
                return input.getCheckBox().getValue();
            }
        };

        Function<SourceItem, RiskProvider> getProvider = new Function<SourceItem, RiskProvider>() {
            @Override
            public RiskProvider apply(SourceItem arg0) {
                return arg0.getProvider();
            }
        };

        List<RiskProvider> enabled = Lists
                .newArrayList(Iterables.transform(Iterables.filter(sources, getChecked), getProvider));

        refreshRiskCalculation(enabled);
    }
}