org.eclipse.m2e.editor.xml.InsertExpressionProposal.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.m2e.editor.xml.InsertExpressionProposal.java

Source

/*******************************************************************************
 * Copyright (c) 2008-2010 Sonatype, 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:
 *      Sonatype, Inc. - initial API and implementation
 *******************************************************************************/

package org.eclipse.m2e.editor.xml;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.contentassist.ICompletionProposalExtension5;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;

import org.apache.maven.model.InputLocation;
import org.apache.maven.model.InputSource;
import org.apache.maven.model.Model;
import org.apache.maven.project.MavenProject;

import org.eclipse.m2e.editor.xml.internal.Messages;

/**
 * insertion proposal for ${ expressions
 * 
 * @author mkleint
 */
public class InsertExpressionProposal implements ICompletionProposal, ICompletionProposalExtension5 {
    private static final Logger log = LoggerFactory.getLogger(InsertExpressionProposal.class);

    private MavenProject project;

    private String key;

    private Region region;

    private int len = 0;

    public InsertExpressionProposal(Region region, String key, MavenProject mvnproject) {
        assert project != null;
        this.region = region;
        this.key = key;
        this.project = mvnproject;
    }

    public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
        if (project == null) {
            return null;
        }
        String value = PomTemplateContext.simpleInterpolate(project, "${" + key + "}"); //$NON-NLS-1$ //$NON-NLS-2$
        MavenProject mavprj = project;
        String loc = null;
        if (mavprj != null) {
            Model mdl = mavprj.getModel();
            if (mdl.getProperties() != null && mdl.getProperties().containsKey(key)) {
                if (mdl.getLocation("properties") != null) {
                    InputLocation location = mdl.getLocation("properties").getLocation(key); //$NON-NLS-1$
                    if (location != null) {
                        //MNGECLIPSE-2539 apparently you can have an InputLocation with null input source.
                        // check!
                        InputSource source = location.getSource();
                        if (source != null) {
                            loc = source.getModelId();
                        }
                    }
                }
            }
        }
        StringBuffer buff = new StringBuffer();
        buff.append("<html>"); //$NON-NLS-1$
        if (value != null) {
            buff.append(NLS.bind(Messages.InsertExpressionProposal_hint1, value));
        }
        if (loc != null) {
            buff.append(NLS.bind(Messages.InsertExpressionProposal_hint2, loc));
        }
        buff.append("</html>"); //$NON-NLS-1$
        return buff.toString();
    }

    public void apply(IDocument document) {
        int offset = region.getOffset();
        String replace = "${" + key + "}"; //$NON-NLS-1$ //$NON-NLS-2$
        try {
            document.replace(offset, region.getLength(), replace);
            len = replace.length();
        } catch (BadLocationException e) {
            log.error("Cannot apply proposal", e);
        }
    }

    public Point getSelection(IDocument document) {
        return new Point(region.getOffset() + len, 0);
    }

    public String getAdditionalProposalInfo() {
        //not used anymore
        return null;
    }

    public String getDisplayString() {
        return "${" + key + "}"; //$NON-NLS-1$ //$NON-NLS-2$
    }

    public Image getImage() {
        // TODO  what kind of icon to use?
        return null;
    }

    public IContextInformation getContextInformation() {
        return null;
    }

}