/*******************************************************************************
* Copyright (c) 2013 Pivotal Software, Inc.
* All rights reserved. This program and the accompanying materials
* are 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.completions.externaltype;
import java.net.URL;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.CompletionProposal;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.internal.ui.text.java.LazyJavaTypeCompletionProposal;
import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
import org.eclipse.jface.internal.text.html.HTMLPrinter;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.graphics.Image;
import org.springsource.ide.eclipse.commons.completions.CompletionsActivator;
import org.springsource.ide.eclipse.commons.completions.externaltype.indexing.ExternalTypeIndexer;
@SuppressWarnings("restriction")
public class ExternalTypeCompletionProposal extends LazyJavaTypeCompletionProposal {
private ExternalTypeIndexer index;
private ExternalType type;
private IJavaProject project;
private Image icon = null;
public ExternalTypeCompletionProposal(CompletionProposal proposal, JavaContentAssistInvocationContext context, ExternalType et, ExternalTypeIndexer index) {
super(proposal, context);
this.index = index;
this.type = et;
this.project = context.getProject();
}
public void apply(IDocument document, char trigger, int offset) {
try {
super.apply(document, trigger, offset);
IType existingType = project.findType(type.getFullyQualifiedName());
if (existingType==null) {
index.getSource(type).addToClassPath(project, new NullProgressMonitor());
}
} catch (Exception e) {
CompletionsActivator.log(e);
}
}
@Override
public Object getAdditionalProposalInfo(IProgressMonitor mon) {
ExternalTypeSource source = index.getSource(type);
if (source!=null) {
String info= source.getDescription();
if (info != null && info.length() > 0) {
StringBuffer buffer= new StringBuffer();
HTMLPrinter.insertPageProlog(buffer, 0, getCSSStyles());
buffer.append(info);
// IJavaElement element= null;
// try {
// element= getProposalInfo().getJavaElement();
// if (element instanceof IMember) {
// String base= JavaDocLocations.getBaseURL(element, ((IMember) element).isBinary());
// if (base != null) {
// int endHeadIdx= buffer.indexOf("</head>"); //$NON-NLS-1$
// buffer.insert(endHeadIdx, "\n<base href='" + base + "'>\n"); //$NON-NLS-1$ //$NON-NLS-2$
// }
// }
// } catch (JavaModelException e) {
// JavaPlugin.log(e);
// }
HTMLPrinter.addPageEpilog(buffer);
info= buffer.toString();
return info;
//return new JavadocBrowserInformationControlInput(null, element, info, 0);
}
}
return null;
}
@Override
protected Image computeImage() {
try {
if (icon==null) {
ImageDescriptor descriptor = ImageDescriptor.createFromURL(
new URL("platform:/plugin/org.springsource.ide.eclipse.commons.completions/resources/greyed-class.png")
);
icon = descriptor.createImage();
}
} catch (Exception e) {
CompletionsActivator.log(e);
}
if (icon==null) {
return super.computeImage();
}
return icon;
}
}