blob: 9de12539addac9f6718355e84f87fcd57e223137 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 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
*******************************************************************************/
package org.eclipse.wst.common.frameworks.internal.enablement;
import org.eclipse.core.resources.IProject;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
public class DataModelEnablementFactory {
/**
* Looks up the appropriate IDataModelProvider by the specified providerKind String and a
* context of the containing Project. The method gets an array of DataModelProviderDescriptor
* from the base DataModelFactory then filters out Providers based on function group enablement.
* Finally the Provider with the highest priority is returned. If the IDataModelProvider is not
* found then a RuntimeException is logged and null is returned.
*
* @param providerKind
* the String id of the provider kind
* @param curProject
* the containing IProject
*
* @return a new IDataModel
*/
public static IDataModel createDataModel(String providerKind, IProject curProject) {
String[] providerIDs = DataModelFactory.getDataModelProviderIDsForKind(providerKind);
if (providerIDs == null || providerIDs.length == 0)
return null;
String topProvider = getHighestPriorityEnabledProviderDesc(providerIDs, curProject);
if (topProvider == null)
return null;
return DataModelFactory.createDataModel(topProvider);
}
private static String getHighestPriorityEnabledProviderDesc(String[] providerIDs, IProject curProject) {
String defaultID = providerIDs[0];
IEnablementIdentifier enablementIdentifier;
Identifiable tempIdentifiable;
Identifiable topPriorityIdentifiable = null;
for (int i = 1; i < providerIDs.length; i++) {
tempIdentifiable = new AbstractIdentifiable(providerIDs[i]);
enablementIdentifier = EnablementManager.INSTANCE.getIdentifier(tempIdentifiable.getID(), curProject);
if (enablementIdentifier.isEnabled()) {
if (topPriorityIdentifiable == null)
topPriorityIdentifiable = tempIdentifiable;
else if (IdentifiableComparator.instance.compare(tempIdentifiable, topPriorityIdentifiable) == IdentifiableComparator.GREATER_THAN)
topPriorityIdentifiable = tempIdentifiable;
}
}
if (topPriorityIdentifiable == null)
return defaultID;
return topPriorityIdentifiable.getID();
}
}