package org.jtheque.metrics.view.impl.panels; /* * Copyright JTheque (Baptiste Wicht) * * 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. */ import org.jtheque.core.managers.Managers; import org.jtheque.core.managers.error.JThequeError; import org.jtheque.core.managers.view.able.IViewManager; import org.jtheque.core.managers.view.edt.SimpleTask; import org.jtheque.core.managers.view.impl.components.panel.AbstractDelegatedView; import org.jtheque.core.utils.ui.builders.JThequePanelBuilder; import org.jtheque.core.utils.ui.builders.PanelBuilder; import org.jtheque.metrics.utils.elements.Project; import org.jtheque.metrics.view.able.IResultsView; import org.jtheque.metrics.view.impl.model.ElementsCellRenderer; import org.jtheque.metrics.view.impl.model.ResultsTreeTableModel; import org.jtheque.metrics.view.impl.model.TreeTableModelFactory; import org.jtheque.utils.ui.GridBagUtils; import org.jdesktop.swingx.JXTreeTable; import javax.swing.Action; import javax.swing.JComponent; import javax.swing.JTable; import java.util.Collection; /** * A results View implementation. * * @author Baptiste Wicht */ public final class ResultsView extends AbstractDelegatedView<AbstractTabPanel> implements IResultsView { private JXTreeTable treeTable; private ResultsTreeTableModel model; private final Action generateAction; private ResultsPanel view; /** * Construct a new ResultsView. * * @param generateAction The action to generate the metrics. */ public ResultsView(Action generateAction) { super(); this.generateAction = generateAction; buildInEDT(); } @Override protected void buildDelegatedView() { view = new ResultsPanel(); setDelegate(view); view.build(); } /** * A panel to display the results. * * @author Baptiste Wicht */ private final class ResultsPanel extends AbstractTabPanel { /** * Build the view. */ private void build() { PanelBuilder builder = new JThequePanelBuilder(this); builder.addButton(generateAction, builder.gbcSet(0, 0)); treeTable = new JXTreeTable(); treeTable.setTreeCellRenderer(new ElementsCellRenderer()); treeTable.setAutoCreateColumnsFromModel(true); treeTable.setSortable(false); treeTable.getTableHeader().setReorderingAllowed(false); treeTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); treeTable.setColumnControlVisible(true); treeTable.setRootVisible(false); treeTable.packAll(); builder.addScrolled(treeTable, builder.gbcSet(0, 1, GridBagUtils.BOTH, GridBagUtils.FIRST_LINE_START, 1.0, 1.0)); } @Override protected void validate(Collection<JThequeError> errors) { //Nothing to validate in this view. } } @Override public Integer getPosition() { return 2; } @Override public String getTitleKey() { return "results.view.title"; } @Override public ResultsTreeTableModel getModel() { return model; } @Override public void buildModel(Collection<Project> projects) { model = TreeTableModelFactory.buildModel(projects); Managers.getManager(IViewManager.class).execute(new SimpleTask() { @Override public void run() { treeTable.setTreeTableModel(model); treeTable.packAll(); Managers.getManager(IViewManager.class).refresh(treeTable); } }); } @Override public JComponent getComponent() { return view; } }