/*******************************************************************************
* Copyright (c) 2007 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.common.model.ui.attribute.adapter;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.meta.action.XEntityData;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
import org.jboss.tools.common.model.ui.attribute.IAttributeContentProposalProvider;
public class PropertiesContentAssistProvider implements
IAttributeContentProposalProvider {
XModelObject object;
XEntityData data;
XAttribute attribute;
String fileName = null;
String entity = null;
public PropertiesContentAssistProvider() {}
public boolean isRelevant(XModelObject object, XAttribute attribute) {
if(object == null || attribute == null) return false;
if("Property".equals(attribute.getModelEntity().getName())) return true;
if(getContributedEntities().contains(attribute.getModelEntity().getName())) return true;
return false;
}
public void init(XModelObject object, XEntityData data, XAttribute attribute) {
this.object = object;
this.data = data;
this.attribute = attribute;
entity = attribute.getModelEntity().getName();
fileName = null;
XModelObject f = object;
while(f != null && f.getFileType() != XModelObject.FILE) f = f.getParent();
if(f == null) return;
fileName = FileAnyImpl.toFileName(f);
}
public IContentProposalProvider getContentProposalProvider() {
if(fileName == null) return null;
PropertiesContentProposalProvider provider = createProcessorByFileName(fileName, entity);
return provider;
}
public LabelProvider getCustomLabelProbider() {
return null;
}
public int getProposalAcceptanceStyle() {
return ContentProposalAdapter.PROPOSAL_REPLACE;
}
public void dispose() {
}
static String EXTENSION_POINT = "org.jboss.tools.common.model.ui.propertiesFileContentAssist";
static Set<String> entities = null;
public static Set<String> getContributedEntities() {
if(entities == null) {
entities = new HashSet<String>();
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(EXTENSION_POINT);
if(point != null) {
IConfigurationElement[] cs = point.getConfigurationElements();
for (IConfigurationElement c: cs) {
String entity = c.getAttribute("entity");
if(entity != null) {
entities.add(entity);
}
}
}
}
return entities;
}
private PropertiesContentProposalProvider createProcessorByFileName(String fileName, String entity) {
IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(EXTENSION_POINT);
if(point == null) return null;
IConfigurationElement[] cs = point.getConfigurationElements();
for (IConfigurationElement c: cs) {
if(fileName.equals(c.getAttribute("fileName")) || entity.equals(c.getAttribute("entity"))) {
try {
PropertiesContentProposalProvider p = (PropertiesContentProposalProvider)c.createExecutableExtension("attributeProcessor");
p.object = object;
p.data = data;
p.attribute = attribute;
return p;
} catch (CoreException e) {
ModelUIPlugin.getPluginLog().logError(e);
} catch (ClassCastException e2) {
ModelUIPlugin.getPluginLog().logError(e2);
}
}
}
return null;
}
}