package org.ovirt.engine.ui.uicommon.models.autocomplete;
import java.util.Collections;
import org.ovirt.engine.core.compat.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.core.common.vdscommands.*;
import org.ovirt.engine.core.common.queries.*;
import org.ovirt.engine.core.common.action.*;
import org.ovirt.engine.ui.frontend.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
import org.ovirt.engine.core.common.*;
import org.ovirt.engine.ui.uicompat.*;
import org.ovirt.engine.core.searchbackend.*;
import org.ovirt.engine.core.common.businessentities.*;
import org.ovirt.engine.ui.uicommon.*;
import org.ovirt.engine.ui.uicommon.models.*;
@SuppressWarnings("unused")
public class SearchSuggestModel extends SearchableListModel implements ITaskTarget
{
private ISyntaxChecker syntaxChecker;
public java.util.List getItems()
{
return (java.util.List)super.getItems();
}
public void setItems(java.util.List value)
{
super.setItems(value);
}
private String privatePrefix;
public String getPrefix()
{
return privatePrefix;
}
public void setPrefix(String value)
{
privatePrefix = value;
}
/**
Gets or sets an array specifying which options will be filtered out from suggestion.
*/
private String[] privateFilter;
public String[] getFilter()
{
return privateFilter;
}
public void setFilter(String[] value)
{
privateFilter = value;
}
public SearchSuggestModel()
{
setItems(new ObservableCollection<Object>());
syntaxChecker = SyntaxCheckerFactory.CreateUISyntaxChecker(DataProvider.GetAuthenticationMethod());
}
@Override
protected void SearchStringChanged()
{
super.SearchStringChanged();
getSearchCommand().Execute();
}
@Override
protected void AsyncSearch()
{
super.AsyncSearch();
Task.Create(this, null).InvokeUIThread();
}
public void UpdateOptionsAsync(String search)
{
getItems().clear();
SyntaxContainer syntax = syntaxChecker.getCompletion(search);
int lastHandledIndex = syntax.getLastHandledIndex();
String pf = search.substring(0, lastHandledIndex);
String notHandled = search.substring(lastHandledIndex);
if (syntax.getError() == SyntaxError.NO_ERROR)
{
String[] items = syntax.getCompletionArray();
for (String item : items)
{
//Apply filter.
if (getFilter() != null)
{
boolean skipItem = false;
for (String value : getFilter())
{
if (StringHelper.stringsEqual(value.toLowerCase(), item.toLowerCase()))
{
skipItem = true;
break;
}
}
if (skipItem)
{
continue;
}
}
String space = "";
if ((pf.length() > 0) && ( ! pf.substring(pf.length() - 1, pf.length() - 1 + 1).equals(".")) && (!StringHelper.stringsEqual(item, ".")))
{
space = " ";
}
//Patch: monitor-desktop
if (!item.trim().toLowerCase().startsWith("monitor-desktop"))
{
SuggestItemPartModel tempVar = new SuggestItemPartModel();
tempVar.setPartString(StringHelper.trimEnd(pf));
tempVar.setPartType(SuggestItemPartType.Valid);
SuggestItemPartModel tempVar2 = new SuggestItemPartModel();
tempVar2.setPartString(space + item.trim());
tempVar2.setPartType(SuggestItemPartType.New);
java.util.ArrayList<SuggestItemPartModel> parts = new java.util.ArrayList<SuggestItemPartModel>(java.util.Arrays.asList(new SuggestItemPartModel[] { tempVar, tempVar2 }));
getItems().add(parts);
}
}
}
else
{
SuggestItemPartModel tempVar3 = new SuggestItemPartModel();
tempVar3.setPartString(pf);
tempVar3.setPartType(SuggestItemPartType.Valid);
SuggestItemPartModel tempVar4 = new SuggestItemPartModel();
tempVar4.setPartString(notHandled);
tempVar4.setPartType(SuggestItemPartType.Erroneous);
java.util.ArrayList<SuggestItemPartModel> parts = new java.util.ArrayList<SuggestItemPartModel>(java.util.Arrays.asList(new SuggestItemPartModel[] { tempVar3, tempVar4 }));
getItems().add(parts);
}
}
@Override
protected void OnSelectedItemChanged()
{
super.OnSelectedItemChanged();
java.util.List selectedItem = (java.util.List)getSelectedItem();
if (selectedItem != null)
{
//SearchString = String.Join(String.Empty,
// selectedItem
// .Cast<SuggestItemPartModel>()
// .Select(a => a.PartString)
// .ToArray()
// );
java.util.ArrayList<String> items = new java.util.ArrayList<String>();
for (Object item : selectedItem)
{
SuggestItemPartModel i = (SuggestItemPartModel)item;
items.add(i.getPartString());
}
String searchString = StringHelper.join("", items.toArray(new String[]{}));
//If there prefix exist, don't transfer it back as a part of search string.
if (getPrefix() != null)
{
searchString = searchString.substring(getPrefix().length());
}
setSearchString(searchString);
}
}
public void run(TaskContext context)
{
UpdateOptionsAsync(getPrefix() + getSearchString());
}
}