/******************************************************************************* * Copyright (c) 2009 IBM Corporation 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: * IBM Corporation - initial API and implementation * Zend Technologies *******************************************************************************/ package org.eclipse.php.internal.ui.util; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.php.internal.ui.PHPUiPlugin; import org.eclipse.php.internal.ui.preferences.PHPManualConfig; import org.eclipse.php.internal.ui.preferences.PHPManualConfigSerializer; import org.eclipse.php.internal.ui.preferences.PHPManualConfigurationBlock; import org.eclipse.php.internal.ui.preferences.PreferenceConstants; public class PHPManualFactory { private static PHPManual manual = null; private static PHPManualConfig fStoredConfig; private static PHPManual createManual(PHPManualSiteDescriptor desc) { PHPManualSite site = desc.createSite(); return new PHPManual(site); } private static PHPManual createManual(PHPManualConfig config) { PHPManualSite site = new PHPManualSite(config.getUrl(), config.getExtension()); return new PHPManual(site); } public static PHPManual getManual() { String storedConfigString = PreferenceConstants.getPreferenceStore() .getString(PreferenceConstants.PHP_MANUAL_SITE); PHPManualConfig storedConfig = PHPManualConfigSerializer.fromString(storedConfigString); if (manual == null || storedConfig == null || !storedConfig.equals(fStoredConfig)) { manual = null; fStoredConfig = storedConfig; PHPManualSiteDescriptor[] descs = PHPUiPlugin.getDefault().getPHPManualSiteDescriptors(); for (int i = 0; i < descs.length; ++i) { // here we don't check anything except the URL since we are // using a predefined sites with fixed extensions. if (storedConfig != null && storedConfig.getUrl().equals(descs[i].getURL())) { manual = createManual(descs[i]); break; } } if (manual == null) { List<PHPManualConfig> configs = new ArrayList<>(); PHPManualConfigurationBlock.initFromPreferences(PreferenceConstants.getPreferenceStore(), configs); if (configs.size() > 0) { PHPManualConfig defaultConfig = PHPManualConfigurationBlock .getActiveManualSite(PreferenceConstants.getPreferenceStore(), configs); if (defaultConfig != null) { manual = createManual(defaultConfig); } else { manual = createManual((PHPManualConfig) configs.get(0)); } } else if (descs.length > 0) { manual = createManual(descs[0]); } } } Assert.isNotNull(manual); return manual; } }