Package bndtools.editor.imports

Source Code of bndtools.editor.imports.ImportPatternsListPart$FixMissingStarsAction

/*******************************************************************************
* Copyright (c) 2010 Neil Bartlett.
* 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:
*     Neil Bartlett - initial API and implementation
*******************************************************************************/
package bndtools.editor.imports;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IMessageManager;
import org.eclipse.ui.forms.widgets.FormToolkit;

import aQute.bnd.build.model.BndEditModel;
import aQute.bnd.build.model.clauses.ImportPattern;
import aQute.bnd.header.Attrs;
import aQute.bnd.osgi.Constants;
import bndtools.editor.pkgpatterns.PkgPatternsListPart;

public class ImportPatternsListPart extends PkgPatternsListPart<ImportPattern> {

    private class FixMissingStarsAction extends Action {
        public FixMissingStarsAction(String message) {
            super(message);
        }

        @Override
        public void run() {
            // Remove existing "*" patterns that are not in the last place
            List<ImportPattern> toRemove = new LinkedList<ImportPattern>();
            for (Iterator<ImportPattern> iter = getClauses().iterator(); iter.hasNext();) {
                ImportPattern pattern = iter.next();
                if (pattern.getName().equals("*") && iter.hasNext()) {
                    toRemove.add(pattern);
                }
            }
            if (!toRemove.isEmpty()) {
                doRemoveClauses(toRemove);
            }

            // Add a "*" at the end, if not already present
            List<ImportPattern> patterns = getClauses();
            if (patterns.size() != 0 && !patterns.get(patterns.size() - 1).getName().equals("*")) {
                ImportPattern starPattern = new ImportPattern("*", new Attrs());
                ImportPatternsListPart.super.doAddClauses(Arrays.asList(starPattern), -1, false);
            }
        }
    }

    public ImportPatternsListPart(Composite parent, FormToolkit toolkit, int style) {
        super(parent, toolkit, style, Constants.IMPORT_PACKAGE, "Customise Imports", new ImportPatternLabelProvider());
    }

    @Override
    protected void doAddClauses(Collection< ? extends ImportPattern> clauses, int index, boolean select) {
        boolean appendStar = getClauses().isEmpty();

        super.doAddClauses(clauses, index, select);

        if (appendStar) {
            ImportPattern starPattern = new ImportPattern("*", new Attrs()); //$NON-NLS-1$
            super.doAddClauses(Arrays.asList(starPattern), -1, false);
        }
    }

    @Override
    public void validate() {
        IMessageManager msgs = getManagedForm().getMessageManager();
        msgs.setDecorationPosition(SWT.TOP | SWT.RIGHT);

        String noStarWarning = null;
        String actionMessage = null;
        List<ImportPattern> patterns = getClauses();
        if (!patterns.isEmpty()) {
            for (Iterator<ImportPattern> iter = patterns.iterator(); iter.hasNext();) {
                ImportPattern pattern = iter.next();
                if (pattern.getName().equals("*") && iter.hasNext()) {
                    noStarWarning = "The catch-all pattern \"*\" should be in the last position.";
                    actionMessage = "Move \"*\" pattern to the last position.";
                    break;
                }
            }

            if (noStarWarning == null) {
                ImportPattern last = patterns.get(patterns.size() - 1);
                if (!last.getName().equals("*")) {
                    noStarWarning = "The catch-all pattern \"*\" should be present and in the last position.";
                    actionMessage = "Add missing \"*\" pattern.";
                }
            }
        }
        if (noStarWarning != null) {
            msgs.addMessage("_warning_no_star", noStarWarning, new FixMissingStarsAction(actionMessage), IMessageProvider.WARNING);
        } else {
            msgs.removeMessage("_warning_no_star");
        }
    }

    @Override
    protected ImportPattern newHeaderClause(String text) {
        return new ImportPattern(text, new Attrs());
    }

    @Override
    protected List<ImportPattern> loadFromModel(BndEditModel model) {
        return model.getImportPatterns();
    }

    @Override
    protected void saveToModel(BndEditModel model, List< ? extends ImportPattern> clauses) {
        model.setImportPatterns(clauses);
    }
}
TOP

Related Classes of bndtools.editor.imports.ImportPatternsListPart$FixMissingStarsAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.