/************************************************************************************* * Copyright (c) 2013 Red Hat, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * JBoss by Red Hat - Initial implementation. ************************************************************************************/ package org.jboss.tools.runtime.core.model; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.jboss.tools.runtime.core.RuntimeCoreActivator; import org.jboss.tools.runtime.core.util.RuntimePathPreferenceIO; public class RuntimeModel { public static final String RUNTIME_PATHS = "runtimePaths"; //$NON-NLS-1$ private ListenerList runtimePathChangeChangeListeners; private Set<RuntimePath> runtimePaths; private IEclipsePreferences preferences; public RuntimeModel() { runtimePaths = new HashSet<RuntimePath>(); } public RuntimeModel(IEclipsePreferences preferences) { this.preferences = preferences; reloadRuntimePathsFromPreferences(); } public void reloadRuntimePathsFromPreferences() { String runtimes = preferences.get(RUNTIME_PATHS, null); if (runtimes != null && !runtimes.isEmpty()) { runtimePaths = RuntimePathPreferenceIO.loadRuntimePathsFromPreferenceString(runtimes); } else { runtimePaths = new HashSet<RuntimePath>(); } fireRuntimePathsChanged(); } public void saveRuntimePaths() { if (runtimePaths == null || preferences == null) return; try { String runtimes = RuntimePathPreferenceIO.getPreferenceOutputString(runtimePaths); preferences.put(RUNTIME_PATHS, runtimes); preferences.flush(); fireRuntimePathsChanged(); } catch (Exception e) { RuntimeCoreActivator.pluginLog().logError(e); } } public synchronized void setRuntimePaths(RuntimePath[] set) { if( set == null ) { reloadRuntimePathsFromPreferences(); } else { HashSet<RuntimePath> s = new HashSet<RuntimePath>(); s.addAll(Arrays.asList(set)); runtimePaths = s; saveRuntimePaths(); } } public void addRuntimePath(RuntimePath path) { runtimePaths.add(path); saveRuntimePaths(); } public void removeRuntimePath(RuntimePath path) { runtimePaths.remove(path); saveRuntimePaths(); } public synchronized RuntimePath[] getRuntimePaths() { return (RuntimePath[]) runtimePaths.toArray(new RuntimePath[runtimePaths.size()]); } public synchronized void addRuntimePathChangeListener(IRuntimePathChangeListener listener) { if (runtimePathChangeChangeListeners == null) runtimePathChangeChangeListeners = new ListenerList(); runtimePathChangeChangeListeners.add(listener); } public synchronized void removeRuntimePathChangeListener(IRuntimePathChangeListener listener) { if (runtimePathChangeChangeListeners == null) return; runtimePathChangeChangeListeners.remove(listener); } private void fireRuntimePathsChanged() { if (runtimePathChangeChangeListeners != null) { Object[] listeners = runtimePathChangeChangeListeners.getListeners(); for (Object listener:listeners ) { IRuntimePathChangeListener runtimePathChangeChangeListener = (IRuntimePathChangeListener) listener; runtimePathChangeChangeListener.changed(); } } } }