1 /******************************************************************************* 2 * Copyright (c) 2008, 2017 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 * Cloudsmith Inc. - query indexes 14 *******************************************************************************/ 15 package org.eclipse.equinox.internal.p2.director; 16 17 import java.util.Iterator; 18 import java.util.List; 19 import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils; 20 import org.eclipse.equinox.internal.p2.metadata.InstallableUnit; 21 import org.eclipse.equinox.internal.p2.metadata.TranslationSupport; 22 import org.eclipse.equinox.internal.p2.metadata.index.*; 23 import org.eclipse.equinox.p2.metadata.IInstallableUnit; 24 import org.eclipse.equinox.p2.metadata.KeyWithLocale; 25 import org.eclipse.equinox.p2.metadata.index.IIndex; 26 27 public class QueryableArray extends IndexProvider<IInstallableUnit> { 28 private final List<IInstallableUnit> dataSet; 29 private IIndex<IInstallableUnit> capabilityIndex; 30 private IIndex<IInstallableUnit> idIndex; 31 private TranslationSupport translationSupport; 32 QueryableArray(IInstallableUnit[] ius)33 public QueryableArray(IInstallableUnit[] ius) { 34 dataSet = CollectionUtils.unmodifiableList(ius); 35 } 36 37 @Override everything()38 public Iterator<IInstallableUnit> everything() { 39 return dataSet.iterator(); 40 } 41 42 @Override getIndex(String memberName)43 public synchronized IIndex<IInstallableUnit> getIndex(String memberName) { 44 if (InstallableUnit.MEMBER_PROVIDED_CAPABILITIES.equals(memberName)) { 45 if (capabilityIndex == null) 46 capabilityIndex = new CapabilityIndex(dataSet.iterator()); 47 return capabilityIndex; 48 } 49 if (InstallableUnit.MEMBER_ID.equals(memberName)) { 50 if (idIndex == null) 51 idIndex = new IdIndex(dataSet.iterator()); 52 return idIndex; 53 } 54 return null; 55 } 56 57 @Override getManagedProperty(Object client, String memberName, Object key)58 public synchronized Object getManagedProperty(Object client, String memberName, Object key) { 59 if (!(client instanceof IInstallableUnit)) 60 return null; 61 IInstallableUnit iu = (IInstallableUnit) client; 62 if (InstallableUnit.MEMBER_TRANSLATED_PROPERTIES.equals(memberName)) { 63 if (translationSupport == null) 64 translationSupport = new TranslationSupport(this); 65 return key instanceof KeyWithLocale ? translationSupport.getIUProperty(iu, (KeyWithLocale) key) : translationSupport.getIUProperty(iu, key.toString()); 66 } 67 return null; 68 } 69 } 70