edu.ucsb.eucalyptus.admin.client.DownloadsTable.java Source code

Java tutorial

Introduction

Here is the source code for edu.ucsb.eucalyptus.admin.client.DownloadsTable.java

Source

/*******************************************************************************
*Copyright (c) 2009  Eucalyptus Systems, Inc.
* 
*  This program is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, only version 3 of the License.
* 
* 
*  This file is distributed in the hope that it will be useful, but WITHOUT
*  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
*  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
*  for more details.
* 
*  You should have received a copy of the GNU General Public License along
*  with this program.  If not, see <http://www.gnu.org/licenses/>.
* 
*  Please contact Eucalyptus Systems, Inc., 130 Castilian
*  Dr., Goleta, CA 93101 USA or visit <http://www.eucalyptus.com/licenses/>
*  if you need additional information or have any questions.
* 
*  This file may incorporate work covered under the following copyright and
*  permission notice:
* 
*    Software License Agreement (BSD License)
* 
*    Copyright (c) 2008, Regents of the University of California
*    All rights reserved.
* 
*    Redistribution and use of this software in source and binary forms, with
*    or without modification, are permitted provided that the following
*    conditions are met:
* 
*      Redistributions of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
* 
*      Redistributions in binary form must reproduce the above copyright
*      notice, this list of conditions and the following disclaimer in the
*      documentation and/or other materials provided with the distribution.
* 
*    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
*    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
*    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
*    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
*    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
*    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
*    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
*    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
*    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
*    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
*    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
*    THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
*    LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
*    SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
*    IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
*    BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
*    THE REGENTS DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
*    OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
*    WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
*    ANY SUCH LICENSES OR RIGHTS.
*******************************************************************************/
package edu.ucsb.eucalyptus.admin.client;

import com.google.gwt.user.client.ui.*;

import java.util.List;
import java.util.ArrayList;

import com.google.gwt.user.client.rpc.AsyncCallback;

// dmitrii TODO: remove commented out lines once the CSS-based design is confirmed

public class DownloadsTable extends VerticalPanel {
    private String theUrl;
    private String theHumanUrl;
    private String theName;
    private int maxEntries;
    private Label DownloadsHeader = new Label();
    private HTML statusLabel = new HTML();
    private Grid grid = new Grid();
    private List<DownloadsWeb> DownloadsList = new ArrayList<DownloadsWeb>();
    private String sessionId;

    public DownloadsTable(String sessionId, String theUrl, String theHumanUrl, String theName, int maxEntries) {
        this.sessionId = sessionId;
        this.setStyleName("euca-config-component");
        this.theUrl = theUrl;
        this.theHumanUrl = theHumanUrl;
        this.theName = theName;
        this.maxEntries = maxEntries;
        this.setSpacing(10);
        //this.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
        //this.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        this.DownloadsHeader.setText(this.theName);
        this.DownloadsHeader.setStyleName("euca-section-header");
        this.add(DownloadsHeader);
        this.add(this.grid);
        HorizontalPanel hpanel = new HorizontalPanel();
        hpanel.setSpacing(5);
        hpanel.add(this.statusLabel);
        //        this.statusLabel.setWidth("600");
        this.statusLabel.setText("Contacting " + this.theName + " server");
        this.statusLabel.setStyleName("euca-greeting-pending");
        this.add(hpanel);

        EucalyptusWebBackend.App.getInstance().getDownloads(this.sessionId, this.theUrl, new GetCallback(this));

    }

    private void rebuildTable() {
        int rows = this.DownloadsList.size();
        if (rows == 0) {
            this.statusLabel.setHTML("Failed to load the list of images (<a href=\"" + this.theHumanUrl
                    + "\">visit</a> the repository)");
            this.statusLabel.setStyleName("euca-greeting-error");
            this.statusLabel.setVisible(true);
            return;
        }
        // draw the table
        this.statusLabel.setVisible(false);
        if (rows > this.maxEntries) {
            rows = this.maxEntries;
        }
        this.grid.clear();
        this.grid.resize(rows + 1, 2); // +1 because of header
        this.grid.setVisible(true);
        this.grid.setStyleName("euca-table");
        this.grid.setCellPadding(6);
        this.grid.setWidget(0, 0, new Label("Name"));
        this.grid.setWidget(0, 1, new Label("Description"));
        this.grid.getRowFormatter().setStyleName(0, "euca-table-heading-row");
        for (int row = 0; row < rows; row++) {
            addDownloadsEntry(row + 1, this.DownloadsList.get(row)); // +1 because of header
        }
    }

    private void addDownloadsEntry(int row, DownloadsWeb Downloads) {
        if ((row % 2) == 1) {
            this.grid.getRowFormatter().setStyleName(row, "euca-table-odd-row");
        } else {
            this.grid.getRowFormatter().setStyleName(row, "euca-table-even-row");
        }

        final HTML name_b = new HTML("<a href=\"" + Downloads.getUrl() + "\">" + Downloads.getName() + "</a>");
        this.grid.setWidget(row, 0, name_b);

        final Label description_b = new Label();
        description_b.setText(Downloads.getDescription());
        this.grid.setWidget(row, 1, description_b);
    }

    public List<DownloadsWeb> getDownloadsList() {
        return DownloadsList;
    }

    class GetCallback implements AsyncCallback {

        private DownloadsTable parent;

        GetCallback(final DownloadsTable parent) {
            this.parent = parent;
        }

        public void onFailure(final Throwable throwable) {
            this.parent.statusLabel.setHTML("Failed to reach your server (<a href=\"" + this.parent.theHumanUrl
                    + "\">visit</a> the repository)");
            this.parent.statusLabel.setStyleName("euca-greeting-error");
            this.parent.statusLabel.setVisible(true);
        }

        public void onSuccess(final Object o) {
            List<DownloadsWeb> newDownloadsList = (List<DownloadsWeb>) o;
            this.parent.DownloadsList = newDownloadsList;
            this.parent.rebuildTable();
        }

    }
}