/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy 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, either version 3 of the License, or * (at your option) any later version. * * Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.gui.preferences; import icy.preferences.WorkspaceLocalPreferences; import icy.workspace.Workspace; import icy.workspace.WorkspaceInstaller; import icy.workspace.WorkspaceInstaller.WorkspaceInstallerEvent; import icy.workspace.WorkspaceInstaller.WorkspaceInstallerListener; import icy.workspace.WorkspaceLoader; import icy.workspace.WorkspaceLoader.WorkspaceLoaderEvent; import icy.workspace.WorkspaceLoader.WorkspaceLoaderListener; import java.util.ArrayList; import java.util.List; /** * @author Stephane */ public class WorkspaceLocalPreferencePanel extends WorkspaceListPreferencePanel implements WorkspaceLoaderListener, WorkspaceInstallerListener { /** * */ private static final long serialVersionUID = -7178443947421949836L; public static final String NODE_NAME = "Local Workspace"; private ArrayList<String> activesWorkspace; WorkspaceLocalPreferencePanel(PreferenceFrame parent) { super(parent, NODE_NAME); action1Button.setText("Delete"); action1Button.setVisible(true); refreshWorkspaces(); WorkspaceLoader.addListener(this); WorkspaceInstaller.addListener(this); } @Override protected void closed() { super.closed(); WorkspaceLoader.removeListener(this); WorkspaceInstaller.removeListener(this); } @Override protected int getColumnCount() { return 4; } @Override protected void doAction1(Workspace workspace) { // desinstall workspace WorkspaceInstaller.desinstall(workspace, true); // refresh state refreshTableData(); updateButtonsState(); } @Override protected Boolean isWorkspaceEnable(Workspace workspace) { return Boolean.valueOf(activesWorkspace.contains(workspace.getName())); } @Override protected void setWorkspaceEnable(Workspace workspace, Boolean value) { final String name = workspace.getName(); if (value.booleanValue()) { if (!activesWorkspace.contains(name)) activesWorkspace.add(name); } else activesWorkspace.remove(name); } private void cleanActivesWorkspace(List<Workspace> workspaces) { // clean active workspace list for (int i = activesWorkspace.size() - 1; i >= 0; i--) { final String name = activesWorkspace.get(i); if (Workspace.getWorkspace(workspaces, name) == null) activesWorkspace.remove(i); } } @Override protected void load() { super.load(); activesWorkspace = WorkspaceLocalPreferences.getActivesWorkspace(); } @Override protected void save() { WorkspaceLocalPreferences.setActivesWorkspace(activesWorkspace); super.save(); } @Override protected void repositoryChanged() { // do nothing here } @Override protected void reloadWorkspaces() { WorkspaceLoader.reloadAsynch(); refreshWorkspaces(); } @Override protected String getStateValue(Workspace workspace) { if (workspace == null) return ""; if (WorkspaceInstaller.isDesinstallingWorkspace(workspace)) return "Deleting..."; return ""; } @Override protected List<Workspace> getWorkspaces() { final List<Workspace> result; if (WorkspaceLoader.isLoading()) result = new ArrayList<Workspace>(); else { result = WorkspaceLoader.getWorkspaces(); // we don't want to see here WORKSPACE_SYSTEM Workspace.removeWorkspace(result, Workspace.WORKSPACE_SYSTEM_NAME); cleanActivesWorkspace(result); } return result; } @Override protected void updateButtonsStateInternal() { if (WorkspaceLoader.isLoading()) { refreshButton.setText("Reloading..."); refreshButton.setEnabled(false); } else { refreshButton.setText("Reload list"); refreshButton.setEnabled(true); } final Workspace workspace = getSelectedWorkspace(); if (workspace == null) { action1Button.setText("Delete"); action1Button.setEnabled(false); return; } // special case where workspace is currently begin removed if (WorkspaceInstaller.isDesinstallingWorkspace(workspace)) { action1Button.setText("Deleting..."); action1Button.setEnabled(false); } else { action1Button.setText("Delete"); action1Button.setEnabled(true); } } @Override public void workspaceLoaderChanged(WorkspaceLoaderEvent e) { workspacesChanged(); } @Override public void workspaceInstalled(WorkspaceInstallerEvent e) { final Workspace workspace = e.getWorkspace(); // enable the installed workspace by default setWorkspaceEnable(workspace, Boolean.TRUE); // workspace setting changed, restart needed getPreferenceFrame().setNeedRestart(); updateButtonsState(); } @Override public void workspaceRemoved(WorkspaceInstallerEvent e) { // workspace setting changed, restart needed getPreferenceFrame().setNeedRestart(); updateButtonsState(); } }