/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.configuration.editors.utils;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.jboss.tools.smooks.configuration.editors.IXMLStructuredObject;
import org.jboss.tools.smooks.configuration.editors.SelectorCreationDialog;
import org.jboss.tools.smooks.model.smooks.SmooksResourceListType;
/**
* @author Dart (dpeng@redhat.com)
*
*/
public class SelectorContentProposalProvider implements IContentProposalProvider {
// private SmooksGraphicsExtType extType;
private SmooksResourceListType resourceList;
public SelectorContentProposalProvider(SmooksResourceListType resourceList) {
this.resourceList = resourceList;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.fieldassist.IContentProposalProvider#getProposals(java
* .lang.String, int)
*/
public IContentProposal[] getProposals(String contents, int position) {
List<Object> list = SelectorCreationDialog.generateInputData(resourceList);
if (list == null || list.isEmpty()) {
return new IContentProposal[] {};
}
List<IContentProposal> contentList = new ArrayList<IContentProposal>();
List<IXMLStructuredObject> models = new ArrayList<IXMLStructuredObject>();
IXMLStructuredObject currentNode = null;
int index = contents.lastIndexOf('/');
String path = contents;
for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
if (object instanceof IXMLStructuredObject) {
try {
IXMLStructuredObject result = SmooksUIUtils.localXMLNodeWithPath(path,
(IXMLStructuredObject) object);
if (result != null) {
currentNode = result;
break;
}
} catch (Throwable t) {
continue;
}
}
}
if (currentNode == null && index != -1) {
if (index != -1) {
path = contents.substring(0, index);
}
for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
if (object instanceof IXMLStructuredObject) {
try {
IXMLStructuredObject result = SmooksUIUtils.localXMLNodeWithPath(path,
(IXMLStructuredObject) object);
if (result != null) {
currentNode = result;
break;
}
} catch (Throwable t) {
continue;
}
}
}
}
if (currentNode == null) {
// SmooksUIUtils.g
for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
if (object instanceof IXMLStructuredObject) {
models.add((IXMLStructuredObject) object);
}
}
} else {
models.add(currentNode);
}
List<IXMLStructuredObject> loadedModels = SmooksUIUtils.loadSelectorObject(models);
for (Iterator<?> iterator = loadedModels.iterator(); iterator.hasNext();) {
IXMLStructuredObject structuredObject = (IXMLStructuredObject) iterator.next();
String fp = SmooksUIUtils.generateFullPath(structuredObject, "/"); //$NON-NLS-1$
if (fp == null)
continue;
fp = fp.trim();
if (fp.length() == 0)
continue;
if (currentNode != null) {
String p = SmooksUIUtils.generatePath(structuredObject, currentNode, "/", true); //$NON-NLS-1$
if (p.startsWith(contents) || p.startsWith("/" + contents) || fp.startsWith(contents) //$NON-NLS-1$
|| fp.startsWith(Messages.SelectorContentProposalProvider_3 + contents)) {
SelectorContentProposal p1 = new SelectorContentProposal(structuredObject);
contentList.add(p1);
}
} else {
if (fp.startsWith(contents) || fp.startsWith("/" + contents)) { //$NON-NLS-1$
SelectorContentProposal p1 = new SelectorContentProposal(structuredObject);
contentList.add(p1);
}
}
}
return contentList.toArray(new IContentProposal[] {});
}
}