/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2013 Zoltan Bartko, Aaron Madlon-Kay
2014 Aaron Madlon-Kay
Home page: http://www.omegat.org/
Support center: http://groups.yahoo.com/group/OmegaT/
This file is part of OmegaT.
OmegaT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmegaT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.omegat.gui.editor.autotext;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.omegat.core.Core;
import org.omegat.gui.editor.autocompleter.AutoCompleterItem;
import org.omegat.gui.editor.autocompleter.AutoCompleterListView;
import org.omegat.gui.editor.autotext.Autotext.AutotextItem;
import org.omegat.tokenizer.DefaultTokenizer;
import org.omegat.tokenizer.ITokenizer;
import org.omegat.util.OStrings;
import org.omegat.util.Preferences;
/**
* @author bartkoz
* @author Aaron Madlon-Kay
*/
public class AutotextAutoCompleterView extends AutoCompleterListView {
public AutotextAutoCompleterView() {
super(OStrings.getString("AC_AUTOTEXT_VIEW"));
}
@Override
public List<AutoCompleterItem> computeListData(String prevText, boolean contextualOnly) {
List<AutotextItem> items = Autotext.getItems();
List<AutoCompleterItem> result = new ArrayList<>();
for (AutotextItem s : items) {
if (prevText.endsWith(s.source)) {
result.add(new AutoCompleterItem(s.target,
new String[] { s.source, s.comment }, s.source.length()));
}
}
if (!Core.getProject().getProjectProperties().getTargetLanguage().isSpaceDelimited()
&& result.isEmpty() && !contextualOnly) {
for (AutotextItem s : items) {
result.add(new AutoCompleterItem(s.target, new String[] { s.source, s.comment }, 0));
}
}
Collections.sort(result, new AutotextComparator());
return result;
}
@Override
public String itemToString(AutoCompleterItem item) {
StringBuilder b = new StringBuilder();
if (item.extras != null && item.extras[0] != null && !item.extras[0].isEmpty()) {
b.append(item.extras[0]).append(" \u2192 ");
}
if (item.payload != null) {
b.append(item.payload);
}
if (item.extras != null && item.extras[1] != null && !item.extras[1].isEmpty()) {
b.append(" (").append(item.extras[1]).append(")");
}
return b.toString();
}
class AutotextComparator implements Comparator<AutoCompleterItem> {
private boolean byLength = Preferences.isPreference(Preferences.AC_AUTOTEXT_SORT_BY_LENGTH);
private boolean alphabetically = Preferences.isPreference(Preferences.AC_AUTOTEXT_SORT_ALPHABETICALLY);
private boolean sortFullText = Preferences.isPreference(Preferences.AC_AUTOTEXT_SORT_FULL_TEXT);
@Override
public int compare(AutoCompleterItem o1, AutoCompleterItem o2) {
if (byLength) {
if (o1.payload.length() < o2.payload.length()) {
return 1;
} else if (o1.payload.length() > o2.payload.length()) {
return -1;
}
}
if (alphabetically) {
if (sortFullText) {
return o1.payload.compareTo(o2.payload);
} else {
return itemToString(o1).compareTo(itemToString(o2));
}
}
return 0;
}
}
@Override
public ITokenizer getTokenizer() {
return new DefaultTokenizer();
}
@Override
protected boolean isEnabled() {
return Preferences.isPreferenceDefault(Preferences.AC_AUTOTEXT_ENABLED, true);
}
}