/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.repository.gui; import java.awt.Component; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JRadioButton; import com.rapidminer.gui.RapidMinerGUI; import com.rapidminer.gui.tools.ResourceActionAdapter; import com.rapidminer.gui.tools.SwingTools; import com.rapidminer.gui.tools.dialogs.MultiPageDialog; import com.rapidminer.repository.CustomRepositoryFactory; import com.rapidminer.repository.CustomRepositoryRegistry; import com.rapidminer.repository.RepositoryException; import com.rapidminer.tools.container.Pair; /** * A dialog to create new remote or local repositories. * * @author Simon Fischer, Nils Woehler * */ public class NewRepositoryDialog extends MultiPageDialog { private static final long serialVersionUID = 1L; private final JRadioButton localButton; private final LocalRepositoryPanel localRepositoryPanel = new LocalRepositoryPanel(getFinishButton(), true); private final Map<String, Pair<RepositoryConfigurationPanel, JRadioButton>> repoConfigPanels = new HashMap<>(); private NewRepositoryDialog() { super(RapidMinerGUI.getMainFrame(), "repositorydialog", true, new Object[] {}); Box firstPage = new Box(BoxLayout.Y_AXIS); ButtonGroup checkBoxGroup = new ButtonGroup(); localButton = new JRadioButton(new ResourceActionAdapter("new_local_repositiory")); localButton.setSelected(true); checkBoxGroup.add(localButton); firstPage.add(localButton); Map<String, Component> cards = new HashMap<String, Component>(); cards.put("first", firstPage); cards.put("local", localRepositoryPanel); // register a radio button for each custom repository type for (CustomRepositoryFactory factory : CustomRepositoryRegistry.INSTANCE.getFactories()) { String key = factory.getI18NKey(); RepositoryConfigurationPanel repositoryConfigurationPanel = factory.getRepositoryConfigurationPanel(); JRadioButton radioButton = new JRadioButton(new ResourceActionAdapter(key)); radioButton.setEnabled(factory.enableRepositoryConfiguration()); repoConfigPanels.put(key, new Pair<>(repositoryConfigurationPanel, radioButton)); checkBoxGroup.add(radioButton); firstPage.add(radioButton); cards.put(factory.getI18NKey(), repositoryConfigurationPanel.getComponent()); } firstPage.add(Box.createVerticalGlue()); layoutDefault(cards); } public static void createNew() { NewRepositoryDialog d = new NewRepositoryDialog(); d.setVisible(true); } @Override protected void finish() { try { if (localButton.isSelected()) { localRepositoryPanel.makeRepository(); } else { // check all custom repository radio buttons for (Pair<RepositoryConfigurationPanel, JRadioButton> value : repoConfigPanels.values()) { // once we have found the selected radio button if (value.getSecond().isSelected()) { // lookup the corresponding factory and create the repository value.getFirst().makeRepository(); } } } super.finish(); } catch (RepositoryException e) { SwingTools.showSimpleErrorMessage(this, "cannot_create_repository", e); } } @Override protected String getNameForStep(int step) { switch (step) { case 0: if (repoConfigPanels.entrySet().isEmpty()) { return "local"; } else { return "first"; } case 1: if (localButton.isSelected()) { return "local"; } else { // go through the custom radio buttons and return the key of the selected button for (Entry<String, Pair<RepositoryConfigurationPanel, JRadioButton>> entry : repoConfigPanels.entrySet()) { if (entry.getValue().getSecond().isSelected()) { return entry.getKey(); } } } default: throw new IllegalArgumentException("Illegal index: " + step); } } @Override protected boolean isComplete() { return isLastStep(getCurrentStep()); } @Override protected boolean isLastStep(int step) { return step >= 1; } }