/* * Copyright (c) 2012, the Dart project authors. * * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html * * 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.google.dart.tools.ui.omni.elements; import com.google.dart.tools.internal.search.ui.TextSearchAction; import com.google.dart.tools.ui.Messages; import com.google.dart.tools.ui.instrumentation.UIInstrumentationBuilder; import com.google.dart.tools.ui.omni.OmniBoxImages; import com.google.dart.tools.ui.omni.OmniBoxMessages; import com.google.dart.tools.ui.omni.OmniElement; import org.eclipse.jface.resource.ImageDescriptor; /** * Element for text searches. */ public class TextSearchElement extends OmniElement { /** * An executed text search (restored from a memento). Notably, executed searches do not update * their search filter text. */ static final class Memento extends TextSearchElement { public Memento(TextSearchProvider provider, String searchText) { super(provider); this.searchText = searchText; } @Override public OmniElement getMemento() { return this; } @Override protected String getSearchText() { return searchText; } @Override protected void updateSearchText() { //do not update cache } } protected String searchText; public TextSearchElement(TextSearchProvider provider) { super(provider); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof TextSearchElement)) { return false; } TextSearchElement other = (TextSearchElement) obj; if (this.searchText == other.searchText) { return true; } if (this.searchText != null) { return this.searchText.equals(other.searchText); } return false; } @Override public String getId() { return getProvider().getId() + "." + getSearchText(); //$NON-NLS-1$ } @Override public ImageDescriptor getImageDescriptor() { return OmniBoxImages.getFileSearchImageDescriptor(); } @Override public String getLabel() { //cache the value shown in the label so we can use it to execute the search updateSearchText(); return Messages.format(OmniBoxMessages.TextSearchElement_occurences, searchText); } @Override public String getMatchText() { return getSearchText(); } @Override public int getMatchTextOffset() { //Occurrences of ''{0}'' return OmniBoxMessages.TextSearchElement_occurences.indexOf('{') - 1; } @Override public OmniElement getMemento() { return new Memento((TextSearchProvider) getProvider(), searchText); } @Override public int hashCode() { int hash = 13; if (searchText != null) { hash += searchText.hashCode(); } return hash; } @Override protected void doExecute(String text, UIInstrumentationBuilder instrumentation) { new TextSearchAction(((TextSearchProvider) getProvider()).getShell(), searchText).run(); } protected String getSearchText() { return ((TextSearchProvider) getProvider()).getSearchText(); } protected void updateSearchText() { searchText = getSearchText(); } }