| /******************************************************************************* |
| * Copyright (c) 2006, 2007 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.ui.internal.quickaccess; |
| |
| |
| import org.eclipse.jface.resource.ImageDescriptor; |
| |
| /** |
| * @since 3.3 |
| * |
| */ |
| public abstract class QuickAccessElement { |
| |
| private static final int[][] EMPTY_INDICES = new int[0][0]; |
| private QuickAccessProvider provider; |
| |
| /** |
| * @param provider |
| */ |
| public QuickAccessElement(QuickAccessProvider provider) { |
| super(); |
| this.provider = provider; |
| } |
| |
| /** |
| * Returns the label to be displayed to the user. |
| * |
| * @return the label |
| */ |
| public abstract String getLabel(); |
| |
| /** |
| * Returns the image descriptor for this element. |
| * |
| * @return an image descriptor, or null if no image is available |
| */ |
| public abstract ImageDescriptor getImageDescriptor(); |
| |
| /** |
| * Returns the id for this element. The id has to be unique within the |
| * QuickAccessProvider that provided this element. |
| * |
| * @return the id |
| */ |
| public abstract String getId(); |
| |
| /** |
| * Executes the associated action for this element. |
| */ |
| public abstract void execute(); |
| |
| /** |
| * Return the label to be used for sorting and matching elements. |
| * |
| * @return the sort label |
| */ |
| public String getSortLabel() { |
| return getLabel(); |
| } |
| |
| /** |
| * @return Returns the provider. |
| */ |
| public QuickAccessProvider getProvider() { |
| return provider; |
| } |
| |
| /** |
| * @param filter |
| * @return |
| */ |
| public QuickAccessEntry match(String filter, |
| QuickAccessProvider providerForMatching) { |
| String sortLabel = getLabel(); |
| int index = sortLabel.toLowerCase().indexOf(filter); |
| if (index != -1) { |
| return new QuickAccessEntry(this, providerForMatching, |
| new int[][] { { index, index + filter.length() - 1 } }, |
| EMPTY_INDICES); |
| } |
| String combinedLabel = (providerForMatching.getName() + " " + getLabel()); //$NON-NLS-1$ |
| index = combinedLabel.toLowerCase().indexOf(filter); |
| if (index != -1) { |
| int lengthOfElementMatch = index + filter.length() |
| - providerForMatching.getName().length() - 1; |
| if (lengthOfElementMatch > 0) { |
| return new QuickAccessEntry(this, providerForMatching, |
| new int[][] { { 0, lengthOfElementMatch - 1 } }, |
| new int[][] { { index, index + filter.length() - 1 } }); |
| } |
| return new QuickAccessEntry(this, providerForMatching, |
| EMPTY_INDICES, new int[][] { { index, |
| index + filter.length() - 1 } }); |
| } |
| String camelCase = CamelUtil.getCamelCase(sortLabel); |
| index = camelCase.indexOf(filter); |
| if (index != -1) { |
| int[][] indices = CamelUtil.getCamelCaseIndices(sortLabel, index, filter |
| .length()); |
| return new QuickAccessEntry(this, providerForMatching, indices, |
| EMPTY_INDICES); |
| } |
| String combinedCamelCase = CamelUtil.getCamelCase(combinedLabel); |
| index = combinedCamelCase.indexOf(filter); |
| if (index != -1) { |
| String providerCamelCase = CamelUtil.getCamelCase(providerForMatching |
| .getName()); |
| int lengthOfElementMatch = index + filter.length() |
| - providerCamelCase.length(); |
| if (lengthOfElementMatch > 0) { |
| return new QuickAccessEntry( |
| this, |
| providerForMatching, |
| CamelUtil.getCamelCaseIndices(sortLabel, 0, lengthOfElementMatch), |
| CamelUtil.getCamelCaseIndices(providerForMatching.getName(), |
| index, filter.length() - lengthOfElementMatch)); |
| } |
| return new QuickAccessEntry(this, providerForMatching, |
| EMPTY_INDICES, CamelUtil.getCamelCaseIndices(providerForMatching |
| .getName(), index, filter.length())); |
| } |
| return null; |
| } |
| } |