com.cisco.yangide.ext.refactoring.ui.ChangeRevisionInputWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.cisco.yangide.ext.refactoring.ui.ChangeRevisionInputWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others.  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
 *  
 *******************************************************************************/
package com.cisco.yangide.ext.refactoring.ui;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.window.Window;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;

import com.cisco.yangide.core.dom.Module;
import com.cisco.yangide.core.dom.QName;
import com.cisco.yangide.core.indexing.ElementIndexReferenceInfo;
import com.cisco.yangide.core.indexing.ElementIndexReferenceType;
import com.cisco.yangide.core.model.YangModelManager;
import com.cisco.yangide.ext.refactoring.code.ChangeRevisionRefactoring;
import com.cisco.yangide.ext.refactoring.nls.Messages;
import com.cisco.yangide.ui.internal.IYangUIConstants;
import com.cisco.yangide.ui.internal.YangUIImages;

/**
 * @author Konstantin Zaitsev
 * @date Aug 18, 2014
 */
public class ChangeRevisionInputWizardPage extends UserInputWizardPage {
    private Text revisionTxt;
    private Text descriptionTxt;
    private Button newFileCheck;
    private TableViewer table;
    private IFile[] files;

    public ChangeRevisionInputWizardPage() {
        super("RevisionInputPage"); //$NON-NLS-1$
        setDescription(Messages.ChangeRevisionInputWizardPage_description);
    }

    @Override
    public void createControl(Composite parent) {
        Composite content = new Composite(parent, SWT.NONE);
        GridLayoutFactory.swtDefaults().numColumns(3).spacing(0, 5).applyTo(content);

        new Label(content, SWT.NONE).setText(Messages.ChangeRevisionInputWizardPage_revisionLabel);
        revisionTxt = new Text(content, SWT.BORDER);
        revisionTxt.setEditable(false);
        Button revisionBtn = new Button(content, SWT.FLAT | SWT.PUSH);
        GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.TOP).hint(24, 24).applyTo(revisionBtn);
        revisionBtn.setImage(RefactoringImages.getImage(RefactoringImages.IMG_CALENDAR));
        revisionBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                RevisionDialog dialog = new RevisionDialog(getShell());
                try {
                    dialog.setRevision(revisionTxt.getText());
                } catch (ParseException ex) {
                    setErrorMessage(ex.getMessage());
                    setPageComplete(false);
                }
                if (dialog.open() == Window.OK) {
                    revisionTxt.setText(dialog.getRevision());
                    setState();
                }
            }
        });

        new Label(content, SWT.NONE).setText(Messages.ChangeRevisionInputWizardPage_descriptionLabel);
        descriptionTxt = new Text(content, SWT.BORDER | SWT.MULTI);
        GridDataFactory.fillDefaults().span(4, 1).align(SWT.FILL, SWT.TOP).grab(true, false).hint(SWT.DEFAULT, 50)
                .applyTo(descriptionTxt);

        descriptionTxt.addFocusListener(new FocusAdapter() {
            @Override
            public void focusLost(FocusEvent e) {
                setState();
            }
        });

        newFileCheck = new Button(content, SWT.CHECK);
        GridDataFactory.fillDefaults().span(3, 1).align(SWT.FILL, SWT.TOP).applyTo(newFileCheck);
        newFileCheck.setText(Messages.ChangeRevisionInputWizardPage_newFileCheckLabel);
        newFileCheck.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                setState();
            }
        });

        Label tableLabel = new Label(content, SWT.NONE);
        tableLabel.setText(Messages.ChangeRevisionInputWizardPage_refGroupLabel);
        GridDataFactory.fillDefaults().span(3, 1).align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(tableLabel);

        Composite group = new Composite(content, SWT.NONE);
        GridLayoutFactory.swtDefaults().margins(0, 0).numColumns(2).applyTo(group);
        GridDataFactory.fillDefaults().span(3, 1).grab(true, true).align(SWT.FILL, SWT.TOP).applyTo(group);

        table = new TableViewer(group, SWT.CHECK | SWT.BORDER);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, true).hint(SWT.DEFAULT, 200)
                .applyTo(table.getControl());
        table.setContentProvider(ArrayContentProvider.getInstance());
        table.getTable().setHeaderVisible(true);
        table.getTable().setLinesVisible(true);

        TableViewerColumn viewerColumn = new TableViewerColumn(table, SWT.NONE);
        TableColumn column = viewerColumn.getColumn();
        column.setText(Messages.ChangeRevisionInputWizardPage_refTableName);
        column.setWidth(250);
        column.setResizable(true);
        viewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public Image getImage(Object element) {
                return YangUIImages.getImage(IYangUIConstants.IMG_YANG_FILE);
            }

            @Override
            public String getText(Object element) {
                IFile file = (IFile) element;
                return file.getName();
            }
        });

        viewerColumn = new TableViewerColumn(table, SWT.NONE);
        column = viewerColumn.getColumn();
        column.setText(Messages.ChangeRevisionInputWizardPage_refTablePath);
        column.setWidth(300);
        column.setResizable(true);
        viewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IFile file = (IFile) element;
                return file.getProjectRelativePath().toString();
            }
        });

        viewerColumn = new TableViewerColumn(table, SWT.NONE);
        column = viewerColumn.getColumn();
        column.setText(Messages.ChangeRevisionInputWizardPage_refTableProject);
        column.setWidth(200);
        column.setResizable(true);
        viewerColumn.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                IFile file = (IFile) element;
                return file.getProject().getName();
            }
        });

        Composite controls = new Composite(group, SWT.NONE);
        GridLayoutFactory.swtDefaults().margins(0, 0).applyTo(controls);
        GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.TOP).applyTo(controls);

        Button tableSelectAllBtn = new Button(controls, SWT.PUSH);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).applyTo(tableSelectAllBtn);
        tableSelectAllBtn.setText(Messages.ChangeRevisionInputWizardPage_refTableSellectAllBtn);
        tableSelectAllBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                for (int i = 0; i < table.getTable().getItemCount(); i++) {
                    table.getTable().getItem(i).setChecked(true);
                }
                setState();
            }
        });

        Button tableDeselectAllBtn = new Button(controls, SWT.PUSH);
        GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).applyTo(tableDeselectAllBtn);
        tableDeselectAllBtn.setText(Messages.ChangeRevisionInputWizardPage_refTableDeselectAllBtn);
        tableDeselectAllBtn.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                for (int i = 0; i < table.getTable().getItemCount(); i++) {
                    table.getTable().getItem(i).setChecked(false);
                }
                setState();
            }
        });
        table.getTable().addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                setState();
            }
        });

        Dialog.applyDialogFont(content);
        setControl(content);
    }

    @Override
    public void setVisible(boolean visible) {
        if (visible) {
            loadState();
        }
        super.setVisible(visible);
    }

    private void setState() {
        ChangeRevisionRefactoring refactoring = (ChangeRevisionRefactoring) getRefactoring();
        refactoring.setCreateNewFile(newFileCheck.getSelection());
        refactoring.setRevision(revisionTxt.getText());
        refactoring.setDescription(descriptionTxt.getText());

        List<IPath> refs = new ArrayList<>();
        for (int i = 0; i < table.getTable().getItemCount(); i++) {
            if (table.getTable().getItem(i).getChecked()) {
                refs.add(files[i].getFullPath());
            }
        }
        refactoring.setReferences(refs);
    }

    private void loadState() {
        ChangeRevisionRefactoring refactoring = (ChangeRevisionRefactoring) getRefactoring();
        Module module = refactoring.getModule();

        if (refactoring.getRevision() == null) {
            refactoring.setRevision(RevisionDialog.DF.format(new Date()));
        }

        revisionTxt.setText(refactoring.getRevision());
        descriptionTxt.setText(refactoring.getDescription() != null ? refactoring.getDescription() : ""); //$NON-NLS-1$
        newFileCheck.setSelection(refactoring.isCreateNewFile());

        QName name = new QName(module.getName(), null, module.getName(), module.getRevision());
        ElementIndexReferenceInfo[] reference = YangModelManager.getIndexManager().searchReference(name,
                ElementIndexReferenceType.IMPORT, null);
        files = new IFile[reference.length];

        for (int i = 0; i < reference.length; i++) {
            files[i] = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(reference[i].getPath()));
        }
        table.setInput(files);

        for (int i = 0; i < files.length; i++) {
            table.getTable().getItem(i).setChecked(refactoring.getReferences().contains(files[i].getFullPath()));
        }

    }
}