/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * PowerFolder 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id: LoginOnlineStoragePanel.java 5214 2008-09-11 21:12:13Z tot $ */ package de.dal33t.powerfolder.ui.wizard; import com.jgoodies.binding.adapter.BasicComponentFactory; import com.jgoodies.binding.value.ValueHolder; import com.jgoodies.binding.value.ValueModel; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; import de.dal33t.powerfolder.Controller; import de.dal33t.powerfolder.PreferencesEntry; import de.dal33t.powerfolder.clientserver.ServerClient; import de.dal33t.powerfolder.clientserver.ServerClientEvent; import de.dal33t.powerfolder.clientserver.ServerClientListener; import static de.dal33t.powerfolder.disk.SyncProfile.AUTOMATIC_SYNCHRONIZATION; import de.dal33t.powerfolder.light.FolderInfo; import de.dal33t.powerfolder.security.Account; import static de.dal33t.powerfolder.ui.wizard.PFWizard.SUCCESS_PANEL; import static de.dal33t.powerfolder.ui.wizard.WizardContextAttributes.*; import de.dal33t.powerfolder.ui.WikiLinks; import de.dal33t.powerfolder.ui.PFUIComponent; import de.dal33t.powerfolder.util.*; import de.dal33t.powerfolder.ui.util.Help; import jwf.WizardContext; import jwf.WizardPanel; import javax.swing.*; import java.awt.*; import java.io.File; /** * Helper class to setup the default folder during wizard steps * * @author Christian Sprajc * @version $Revision$ */ public class DefaultFolderWizardHelper extends PFUIComponent { private ServerClient client; private ServerClientListener listener; private JComponent panel; private ValueModel setupDefaultModel; private JCheckBox setupDefaultCB; private File defaultSynchronizedFolder; DefaultFolderWizardHelper(Controller controller, ServerClient client) { super(controller); this.client = client; } protected void initComponents() { listener = new MyServerClientListener(); setupDefaultModel = new ValueHolder( PreferencesEntry.SETUP_DEFAULT_FOLDER .getValueBoolean(getController()), true); setupDefaultCB = BasicComponentFactory.createCheckBox( setupDefaultModel, Translation .getTranslation("wizard.login_online_storage.setup_default")); setupDefaultCB.setOpaque(false); defaultSynchronizedFolder = new File(getController() .getFolderRepository().getFoldersBasedir(), Translation .getTranslation("wizard.basic_setup.default_folder_name")); if (defaultSynchronizedFolder.exists()) { // Hmmm. User has already created this??? setupDefaultCB.setSelected(false); } client.addListener(listener); } public Component getUIComponent() { if (panel == null) { initComponents(); FormLayout layout = new FormLayout("pref, 3dlu, pref", "pref"); PanelBuilder builder = new PanelBuilder(layout); CellConstraints cc = new CellConstraints(); builder.add(setupDefaultCB, cc.xy(1, 1)); builder.add(Help.createWikiLinkButton(getController(), WikiLinks.DEFAULT_FOLDER), cc.xy(3, 1)); builder.setOpaque(true); builder.setBackground(Color.white); panel = builder.getPanel(); panel.setOpaque(false); updateVisibility(); } return panel; } WizardPanel next(WizardPanel nextPanel, WizardContext context) { Reject.ifNull(nextPanel, "Next panel is null"); boolean setupDefault = (Boolean) setupDefaultModel.getValue(); // Remind for next logins PreferencesEntry.SETUP_DEFAULT_FOLDER.setValue(getController(), setupDefault); client.removeListener(listener); // Create default if (setupDefault && client.isLoggedIn()) { Account account = client.getAccount(); // If there is already a default folder for this account, use that FolderInfo accountFolder = account.getDefaultSynchronizedFolder(); logInfo("Default synced folder on " + account.getUsername() + " is " + accountFolder); FolderInfo foInfo; if (accountFolder == null) { // Default sync folder has user name... String name = defaultSynchronizedFolder.getName(); foInfo = new FolderInfo(name, '[' + IdGenerator.makeId() + ']') .intern(); } else { // Take from account. foInfo = accountFolder; } // Redirect via folder create of the default sync folder. context.setAttribute( SET_DEFAULT_SYNCHRONIZED_FOLDER, true); context.setAttribute(FOLDERINFO_ATTRIBUTE, foInfo); context.setAttribute(SEND_INVIATION_AFTER_ATTRIBUTE, false); context.setAttribute(SUCCESS_PANEL, nextPanel); context.setAttribute(SYNC_PROFILE_ATTRIBUTE, AUTOMATIC_SYNCHRONIZATION); context.setAttribute(FOLDER_LOCAL_BASE, defaultSynchronizedFolder); // Create only if not already existing. context.setAttribute(BACKUP_ONLINE_STOARGE, accountFolder == null); return new FolderCreatePanel(getController()); } return nextPanel; } private void updateVisibility() { if (panel == null) { return; } // Only show if not already setup panel.setVisible(!defaultSynchronizedFolder.exists() && client.isLoggedIn()); } private class MyServerClientListener implements ServerClientListener { public void accountUpdated(ServerClientEvent event) { } public void login(ServerClientEvent event) { updateVisibility(); } public void serverConnected(ServerClientEvent event) { } public void serverDisconnected(ServerClientEvent event) { } public void nodeServerStatusChanged(ServerClientEvent event) { } public boolean fireInEventDispatchThread() { return true; } } }