/** * Copyright (c) 2013 by JP Moresmau * This code is made available under the terms of the Eclipse Public License, * version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html */ package net.sf.eclipsefp.haskell.ui.internal.resolve; import net.sf.eclipsefp.haskell.core.cabalmodel.CabalSyntax; import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescription; import net.sf.eclipsefp.haskell.core.cabalmodel.PackageDescriptionLoader; import net.sf.eclipsefp.haskell.core.cabalmodel.RealValuePosition; import net.sf.eclipsefp.haskell.ui.internal.util.UITexts; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ICompletionProposal; 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; /** * sets a field in the cabal file to a specific value * * @author JP Moresmau * */ public class CabalFieldSetter extends MarkerCompletion { /** * the field to update */ private final CabalSyntax field; /** * the value to set */ private final String value; public CabalFieldSetter( final CabalSyntax field, final String value ) { super(); this.field = field; this.value = value; } @Override public String getLabel() { return NLS.bind(UITexts.resolve_set_cabalfield,field.getCabalName(),value); } @Override public ICompletionProposal getCompletionProposal( final IMarker marker, final IDocument document ) { return new ICompletionProposal() { @Override public Point getSelection( final IDocument document ) { return null; } @Override public Image getImage() { return null; } @Override public String getDisplayString() { return getLabel(); } @Override public IContextInformation getContextInformation() { return null; } @Override public String getAdditionalProposalInfo() { return null; } @Override public void apply( final IDocument document ) { PackageDescription pd=PackageDescriptionLoader.load( document.get() ); // use package stanza for now RealValuePosition rvp=pd.getPackageStanza().update( field, value ); if (rvp!=null){ rvp.updateDocument( document ); } } }; } }