Author: scabanovich
Date: 2009-12-25 11:49:28 -0500 (Fri, 25 Dec 2009)
New Revision: 19587
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/PropertiesContentProposalProvider.java
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/propertyeditor/AbstractPropertiesContentAssistProcessor.java
Log:
JBIDE-4916
optimization
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/PropertiesContentProposalProvider.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/PropertiesContentProposalProvider.java 2009-12-25
14:02:29 UTC (rev 19586)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/attribute/adapter/PropertiesContentProposalProvider.java 2009-12-25
16:49:28 UTC (rev 19587)
@@ -10,10 +10,21 @@
******************************************************************************/
package org.jboss.tools.common.model.ui.attribute.adapter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
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.XModelObjectConstants;
+import org.jboss.tools.common.model.loaders.impl.PropertiesLoader;
+import
org.jboss.tools.common.model.ui.attribute.AttributeContentProposalProviderFactory;
+import
org.jboss.tools.common.model.ui.texteditors.propertyeditor.AbstractPropertiesContentAssistProcessor;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
/**
*
@@ -27,4 +38,58 @@
public PropertiesContentProposalProvider() {}
+ /**
+ * Helper method to get java type proposals.
+ *
+ * @param contents
+ * @param position
+ * @return
+ */
+ protected List<IContentProposal> getJavaTypeContentProposals(String contents, int
position) {
+ List<IContentProposal> result = new ArrayList<IContentProposal>();
+ String valuePrefix = contents.substring(0, position);
+ JavaClassContentAssistProvider p = new JavaClassContentAssistProvider();
+ p.init(object, null, attribute);
+ IContentProposalProvider pp = p.getContentProposalProvider();
+ IContentProposal[] ps = pp.getProposals(valuePrefix, valuePrefix.length());
+ IJavaProject jp = getJavaProject();
+ for (int i = 0; i < ps.length; i++) {
+ String descr = ps[i].getDescription();
+ if (descr == null || descr.length() == 0) {
+ String value = ps[i].getContent();
+ descr = AbstractPropertiesContentAssistProcessor.getDescription(jp, value);
+ IContentProposal p2 = AttributeContentProposalProviderFactory
+ .makeContentProposal(value, ps[i].getLabel(), descr);
+ result.add(p2);
+ } else {
+ result.add(ps[i]);
+ }
+ }
+ return result;
+ }
+
+ protected String getPropertyName() {
+ String value = null;
+ if(data != null) {
+ value = data.getValue(XModelObjectConstants.ATTR_NAME);
+
+ } else if(object != null &&
isPropertyEntity(object.getModelEntity().getName())) {
+ value = object.getAttributeValue(XModelObjectConstants.ATTR_NAME);
+
+ }
+ return value;
+ }
+
+ protected boolean isPropertyEntity(String entity) {
+ return PropertiesLoader.ENT_PROPERTY.equals(entity);
+ }
+
+ protected boolean isNameAttribute() {
+ return attribute.getName().equals(XModelObjectConstants.ATTR_NAME);
+ }
+
+ protected IJavaProject getJavaProject() {
+ IProject project = EclipseResourceUtil.getProject(object);
+ return EclipseResourceUtil.getJavaProject(project);
+ }
}
Modified:
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/propertyeditor/AbstractPropertiesContentAssistProcessor.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/propertyeditor/AbstractPropertiesContentAssistProcessor.java 2009-12-25
14:02:29 UTC (rev 19586)
+++
trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/propertyeditor/AbstractPropertiesContentAssistProcessor.java 2009-12-25
16:49:28 UTC (rev 19587)
@@ -1,16 +1,30 @@
package org.jboss.tools.common.model.ui.texteditors.propertyeditor;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.text.javadoc.JavadocContentAccess2;
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalProvider;
import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.contentassist.CompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.XModelObjectConstants;
import org.jboss.tools.common.model.loaders.impl.PropertiesLoader;
+import org.jboss.tools.common.model.ui.attribute.adapter.JavaClassContentAssistProvider;
+import org.jboss.tools.common.model.util.EclipseJavaUtil;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
public class AbstractPropertiesContentAssistProcessor implements IContentAssistProcessor
{
protected XModelObject object;
@@ -59,6 +73,8 @@
int valueLength;
String propertyValue;
Set<String> allProperties = new HashSet<String>();
+
+ String text;
public boolean isInComment() {
return inComment;
@@ -75,10 +91,18 @@
public int getNameLength() {
return nameLength;
}
+
+ public String getNamePrefix() {
+ return nameOffset < offset ? text.substring(nameOffset, offset) : "";
//$NON-NLS-1$
+ }
public int getValueOffset() {
return valueOffset;
}
+
+ public String getValuePrefix() {
+ return valueOffset < offset && valueOffset >= 0 ?
text.substring(valueOffset, offset) : ""; //$NON-NLS-1$
+ }
public int getValueLength() {
return valueLength;
@@ -100,6 +124,7 @@
public Context getContext(ITextViewer viewer, int offset) {
Context context = new Context();
context.offset = offset;
+ context.text = viewer.getDocument().get();
XModelObject[] ps = object.getChildren();
for (int i = 0; i < ps.length; i++) {
String name = ps[i].getAttributeValue(XModelObjectConstants.ATTR_NAME);
@@ -159,4 +184,115 @@
}
return body.length();
}
+
+ /**
+ * Helper method to create property name proposal.
+ * @param name
+ * @param description
+ * @param context
+ * @return
+ */
+ protected ICompletionProposal getNameProposal(String name, String description, Context
context) {
+ int nameOffset = context.getNameOffset();
+ String namePrefix = context.getNamePrefix();
+ if(context.hasProperty(name)) return null;
+ if(!name.startsWith(namePrefix)) return null;
+ CompletionProposal proposal = new CompletionProposal(
+ name,
+ nameOffset,
+ context.getNameLength(),
+ name.length(),
+ null,
+ name,
+ null,
+ description);
+ return proposal;
+ }
+
+ /**
+ * Helper method to create property value proposal.
+ *
+ * @param value
+ * @param description
+ * @param context
+ * @return
+ */
+ protected ICompletionProposal getValueProposal(String value, String description, Context
context) {
+ int valueOffset = context.getValueOffset();
+ String valuePrefix = context.getValuePrefix();
+ if(value.length() == 0) return null;
+ if(!value.startsWith(valuePrefix)) return null;
+ CompletionProposal proposal = new CompletionProposal(
+ value,
+ valueOffset,
+ context.getValueLength(),
+ value.length(),
+ null,
+ value,
+ null,
+ description);
+ return proposal;
+ }
+
+ /**
+ * Helper method to get java type proposals.
+ *
+ * @param attr
+ * @param context
+ * @return
+ */
+ protected List<ICompletionProposal> getJavaTypeContentProposals(Context context)
{
+ return getJavaTypeContentProposals(null, context);
+ }
+
+ /**
+ * Helper method to get java type proposals.
+ *
+ * @param attr
+ * @param context
+ * @return
+ */
+ protected List<ICompletionProposal> getJavaTypeContentProposals(XAttribute attr,
Context context) {
+ String valuePrefix = context.getValuePrefix();
+ List<ICompletionProposal> result = new ArrayList<ICompletionProposal>();
+ JavaClassContentAssistProvider p = new JavaClassContentAssistProvider();
+ p.init(object, null, attr);
+ IContentProposalProvider pp = p.getContentProposalProvider();
+ IContentProposal[] ps = pp.getProposals(valuePrefix, valuePrefix.length());
+ IProject project = EclipseResourceUtil.getProject(object);
+ IJavaProject jp = EclipseResourceUtil.getJavaProject(project);
+ if(ps != null) for (int i = 0; i < ps.length; i++) {
+ String value = ps[i].getContent();
+ String descr = getDescription(jp, value);
+ CompletionProposal proposal = new CompletionProposal(
+ value,
+ context.getValueOffset(),
+ context.getValueLength(),
+ value.length(),
+ null,
+ ps[i].getLabel(),
+ null,
+ descr != null ? descr : ps[i].getDescription());
+ result.add(proposal);
+ }
+ return result;
+ }
+
+ /**
+ * Helper methods that gets description for java type.
+ * @param jp
+ * @param value
+ * @return
+ */
+ public static String getDescription(IJavaProject jp, String typeName) {
+ String descr = null;
+ if(jp != null) try {
+ IType type = EclipseJavaUtil.findType(jp, typeName);
+ if(type != null) descr = JavadocContentAccess2.getHTMLContent(type, true);
+ } catch (JavaModelException e) {
+ //ignore
+ }
+ return descr;
+ }
+
}