cn.dockerfoundry.ide.eclipse.explorer.ui.wizards.DockerSearchWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for cn.dockerfoundry.ide.eclipse.explorer.ui.wizards.DockerSearchWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2015 www.DockerFoundry.cn
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Apache License, 
 * Version 2.0 (the "License"); you may not use this file except in compliance 
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *  
 *  Contributors:
 *     Xi Ning Wang
 ********************************************************************************/

package cn.dockerfoundry.ide.eclipse.explorer.ui.wizards;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;

import cn.dockerfoundry.ide.eclipse.explorer.ui.domain.DockerImageElement;

import com.spotify.docker.client.DockerClient;
import com.spotify.docker.client.DockerException;
import com.spotify.docker.client.messages.AuthConfig;
import com.spotify.docker.client.messages.ImageSearchResult;

public class DockerSearchWizardPage extends WizardPage {

    private Text searchField;
    private TableViewer viewer;
    private Button goButton;
    private Group group1;

    private DockerClient client;
    private Table table;

    public DockerSearchWizardPage(String pageName, DockerClient client) {
        super(pageName);
        setTitle(pageName); // NON-NLS-1
        setDescription("Search the Docker Hub for images"); // NON-NLS-1
        this.client = client;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#createLinkTarget()
     */
    protected void createLinkTarget() {
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#getNewFileLabel()
     */
    protected String getNewFileLabel() {
        return "New File Name:"; // NON-NLS-1
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.dialogs.WizardNewFileCreationPage#validateLinkedResource()
     */
    protected IStatus validateLinkedResource() {
        return new Status(IStatus.OK, "cn.dockerfoundry.ide.eclipse.explorer.ui", IStatus.OK, "", null); // NON-NLS-1 //NON-NLS-2
    }

    @Override
    public void createControl(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridData fileSelectionData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
        composite.setLayoutData(fileSelectionData);

        GridLayout fileSelectionLayout = new GridLayout();
        fileSelectionLayout.numColumns = 3;
        fileSelectionLayout.makeColumnsEqualWidth = false;
        fileSelectionLayout.marginWidth = 0;
        fileSelectionLayout.marginHeight = 0;
        composite.setLayout(fileSelectionLayout);
        setControl(composite);

        searchField = new Text(composite, SWT.SINGLE | SWT.BORDER);
        GridData layoutData = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL);
        layoutData.horizontalSpan = 2;
        searchField.setLayoutData(layoutData);
        goButton = new Button(composite, SWT.PUSH);
        goButton.setText("Search");
        //      layoutData = new GridData(GridData.GRAB_HORIZONTAL
        //            | GridData.FILL_HORIZONTAL);
        //      layoutData.horizontalSpan = 1;
        //      goButton.setLayoutData(layoutData);
        goButton.setAlignment(SWT.RIGHT);
        goButton.addKeyListener(new KeyListener() {

            @Override
            public void keyPressed(KeyEvent arg0) {
                if (getClient() != null) {
                    String term = searchField.getText();
                    List<ImageSearchResult> result = new ArrayList<ImageSearchResult>();
                    try {
                        AuthConfig authConfig = AuthConfig.builder().email("osswangxining@163.com")
                                .username("osswangxining").password("").build();

                        result = getClient().searchImages(term);

                    } catch (DockerException e) {
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(result.size());
                    viewer.setInput(result);
                    viewer.refresh(true);
                }

            }

            @Override
            public void keyReleased(KeyEvent arg0) {
                keyPressed(arg0);
            }
        });

        viewer = new TableViewer(composite,
                SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        viewer.setContentProvider(new ViewContentProvider());
        viewer.setLabelProvider(new ViewLabelProvider());

        // Layout the viewer
        GridData gridData = new GridData();
        gridData.verticalAlignment = GridData.FILL;
        gridData.horizontalSpan = 3;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        gridData.horizontalAlignment = GridData.FILL;
        viewer.getControl().setLayoutData(gridData);

        table = viewer.getTable();
        table.setLinesVisible(false);
        table.setHeaderVisible(true);
        createColumns(parent, viewer);

        composite.moveAbove(null);

        addListener();
    }

    private void createColumns(final Composite parent, final TableViewer viewer) {
        String[] titles = { "NAME", "STAR COUNT", "OFFICIAL", "AUTOMATED", "DESCRIPTION" };
        int[] bounds = { 200, 120, 120, 120, 200 };
        TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0);
        col.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                ImageSearchResult elem = (ImageSearchResult) element;
                return elem.getName();
            }
        });
        col = createTableViewerColumn(titles[1], bounds[1], 1);
        col.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                ImageSearchResult elem = (ImageSearchResult) element;
                return Integer.toString(elem.getStarCount());
            }
        });
        col = createTableViewerColumn(titles[2], bounds[2], 2);
        col.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                ImageSearchResult elem = (ImageSearchResult) element;
                return Boolean.toString(elem.isOfficial());
            }
        });
        col = createTableViewerColumn(titles[3], bounds[3], 3);
        col.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                ImageSearchResult elem = (ImageSearchResult) element;
                return Boolean.toString(elem.isAutomated());
            }
        });
        col = createTableViewerColumn(titles[4], bounds[4], 4);
        col.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                ImageSearchResult elem = (ImageSearchResult) element;
                return elem.getDescription();
            }
        });
    }

    private TableViewerColumn createTableViewerColumn(String title, int bound, final int colNumber) {
        final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE);
        final TableColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setWidth(bound);
        column.setResizable(true);
        column.setMoveable(true);
        //      column.addSelectionListener(getSelectionAdapter(column, colNumber));
        return viewerColumn;
    }

    private void addListener() {

    }

    class ViewContentProvider implements IStructuredContentProvider {
        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
        }

        public void dispose() {
        }

        public Object[] getElements(Object parent) {
            if (parent != null && parent instanceof List<?>) {
                @SuppressWarnings("unchecked")
                List<ImageSearchResult> images = (List<ImageSearchResult>) parent;
                ImageSearchResult[] elements = new ImageSearchResult[images.size()];
                return images.toArray(elements);
            }
            return new ImageSearchResult[] {};
        }
    }

    class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
        public String getColumnText(Object obj, int index) {
            if (obj instanceof ImageSearchResult) {
                ImageSearchResult elem = (ImageSearchResult) obj;
                switch (index) {
                case 0:
                    return elem.getName();
                case 1:
                    return Integer.toString(elem.getStarCount());
                case 2:
                    return Boolean.toString(elem.isOfficial());
                case 3:
                    return Boolean.toString(elem.isAutomated());
                case 4:
                    return elem.getDescription();
                default:
                    break;
                }
            }
            return null;
        }

        public Image getColumnImage(Object obj, int index) {
            return null;
            // return getImage(obj);
        }

        public Image getImage(Object obj) {
            return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT);
        }
    }

    class NameSorter extends ViewerSorter {
    }

    public DockerClient getClient() {
        return client;
    }

    public void setClient(DockerClient client) {
        this.client = client;
    }

    public ImageSearchResult getSelectedImage() {
        ISelection selection = viewer.getSelection();
        Object obj = ((IStructuredSelection) selection).getFirstElement();
        if (obj != null && obj instanceof ImageSearchResult)
            return (ImageSearchResult) obj;
        return null;
    }
}