/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorolamobility.studio.android.db.core; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.PartInitException; import com.motorola.studio.android.common.log.StudioLogger; import com.motorolamobility.studio.android.db.core.ui.AbstractTreeNode; public abstract class DbRootNodeReader { public static final String DB_ROOT_NODE_EXTENSION_POINT_ID = "com.motorolamobility.studio.android.db.core.dbRootNode"; //$NON-NLS-1$ public static final String DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_ID = "id"; //$NON-NLS-1$ public static final String DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_NAME = "name"; //$NON-NLS-1$ public static final String DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_ICON = "icon"; //$NON-NLS-1$ public static final String DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_CLASS = "class"; //$NON-NLS-1$ /** * Load existing root nodes, mapped by extension id * * @param treeNodeList The map of root nodes to be populated * */ public static void loadRootNode(HashMap<String, AbstractTreeNode> treeNodeList) throws PartInitException { List<String> failedNodeNames = new ArrayList<String>(); treeNodeList.clear(); IExtensionRegistry extReg = Platform.getExtensionRegistry(); IExtensionPoint extPoint = extReg.getExtensionPoint(DB_ROOT_NODE_EXTENSION_POINT_ID); String id = null; String name = null; if (extPoint != null) { IExtension[] extensions = extPoint.getExtensions(); for (IExtension aExtension : extensions) { IConfigurationElement[] configElements = aExtension.getConfigurationElements(); for (IConfigurationElement aConfig : configElements) { id = aConfig.getAttribute(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_ID); name = aConfig.getAttribute(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_NAME); String nodeClassName = aConfig.getAttribute(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_CLASS); AbstractTreeNode treeNode = null; if (nodeClassName != null) { try { treeNode = (AbstractTreeNode) aConfig .createExecutableExtension(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_CLASS); treeNode.setId(id); treeNode.setName(name); if (aConfig.getAttribute(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_ICON) != null) { ImageDescriptor icon = DbCoreActivator .imageDescriptorFromPlugin( DbCoreActivator.PLUGIN_ID, aConfig.getAttribute(DB_ROOT_NODE_EXTENSION_POINT_ATTRIBUTE_ICON)); treeNode.setIcon(icon); } treeNodeList.put(id, treeNode); } catch (CoreException e) { StudioLogger .error(DbRootNodeReader.class, "Unexpected error with the root node extension point. Name:" + name + " ID:" + id, e); //$NON-NLS-1$ //$NON-NLS-2$ failedNodeNames.add(name); } } } } if (!failedNodeNames.isEmpty()) { throw new PartInitException("The following nodes could not be loaded : " //$NON-NLS-1$ + failedNodeNames); } } } }