Package org.rstudio.studio.client.shiny.ui

Source Code of org.rstudio.studio.client.shiny.ui.ShinyAppsDeploy$DeployResources

/*
* ShinyAppsDeploy.java
*
* Copyright (C) 2009-14 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.shiny.ui;

import java.util.List;

import org.rstudio.core.client.StringUtil;
import org.rstudio.core.client.files.FileSystemItem;
import org.rstudio.studio.client.common.FilePathUtils;
import org.rstudio.studio.client.shiny.model.ShinyAppsApplicationInfo;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArrayString;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

public class ShinyAppsDeploy extends Composite
{
   private static ShinyAppsDeployUiBinder uiBinder = GWT
         .create(ShinyAppsDeployUiBinder.class);

   interface ShinyAppsDeployUiBinder extends UiBinder<Widget, ShinyAppsDeploy>
   {
   }
  
   public interface DeployStyle extends CssResource
   {
      String statusLabel();
      String normalStatus();
      String otherStatus();
      String launchCheck();
   }
  
   public interface DeployResources extends ClientBundle
   {
      @Source("DeployDialogIllustration.png")
      ImageResource deployIllustration();
   }

   public ShinyAppsDeploy()
   {
      initWidget(uiBinder.createAndBindUi(this));

      // Validate the application name on every keystroke
      appName.addKeyUpHandler(new KeyUpHandler()
      {
         @Override
         public void onKeyUp(KeyUpEvent event)
         {
            validateAppName();
         }
      });
   }
  
   public void setSourceDir(String dir)
   {
      dir = StringUtil.shortPathName(FileSystemItem.createDir(dir), 250);
      deployLabel_.setText(dir);
      appName.setText(FilePathUtils.friendlyFileName(dir));
   }

   public void setAccountList(JsArrayString accounts)
   {
      accountList.clear();
      for (int i = 0; i < accounts.length(); i++)
         accountList.addItem(accounts.get(i));
   }
  
   public void setDefaultAccount(String defaultAccount)
   {
      for (int i = 0; i < accountList.getItemCount(); i++)
      {
         if (accountList.getItemText(i).equals(defaultAccount))
         {
            accountList.setSelectedIndex(i);
            break;
         }
      }
   }
  
   public String getSelectedAccount()
   {
      int idx = accountList.getSelectedIndex();
      return idx >= 0 ?
            accountList.getItemText(idx) :
            null;
   }
  
   public String getSelectedApp()
   {
      int idx = appList.getSelectedIndex();
      return idx >= 0 ?
            appList.getItemText(idx) :
            null;
   }
  
   public void setAppList(List<String> apps, String selected)
   {
      appList.clear();
      int selectedIdx = 0;
      if (apps != null)
      {
         selectedIdx = Math.max(0, apps.size() - 1);
        
         for (int i = 0; i < apps.size(); i++)
         {
            String app = apps.get(i);
            appList.addItem(app);
            if (app.equals(selected))
            {
               selectedIdx = i;
            }
         }
      }
      appList.addItem("Create New");
      appList.setSelectedIndex(selectedIdx);
   }
  
   public void setFileList(JsArrayString files)
   {
      for (int i = 0; i < files.length(); i++)
      {
         Label fileLabel = new Label(files.get(i));
         fileListPanel_.add(fileLabel);
      }
   }
  
   public String getNewAppName()
   {
      return appName.getText();
   }
  
   public void showAppInfo(ShinyAppsApplicationInfo info)
   {
      if (info == null)
      {
         appInfoPanel.setVisible(false);
         nameLabel.setVisible(true);
         appName.setVisible(true);
         validateAppName();
         return;
      }

      setAppNameValid(true);
      urlAnchor.setText(info.getUrl());
      urlAnchor.setHref(info.getUrl());
      String status = info.getStatus();
      statusLabel.setText(status);
      statusLabel.setStyleName(style.statusLabel() + " " +
              (status.equals("running") ?
                    style.normalStatus() :
                    style.otherStatus()));

      appInfoPanel.setVisible(true);
      nameLabel.setVisible(false);
      appName.setVisible(false);
      nameValidatePanel.setVisible(false);
   }
  
   public HandlerRegistration addAccountChangeHandler(ChangeHandler handler)
   {
      return accountList.addChangeHandler(handler);
   }

   public HandlerRegistration addAppChangeHandler(ChangeHandler handler)
   {
      return appList.addChangeHandler(handler);
   }
  
   public void setOnDeployEnabled(Command cmd)
   {
      onDeployEnabled_ = cmd;
   }
  
   public void setOnDeployDisabled(Command cmd)
   {
      onDeployDisabled_ = cmd;
   }
  
   public DeployStyle getStyle()
   {
      return style;
   }
  
   private void validateAppName()
   {
      String app = appName.getText();
      RegExp validReg = RegExp.compile("^[A-Za-z0-9_-]{4,63}$");
      setAppNameValid(validReg.test(app));
   }
  
   private void setAppNameValid(boolean isValid)
   {
      nameValidatePanel.setVisible(!isValid);
      if (isValid && onDeployEnabled_ != null)
         onDeployEnabled_.execute();
      else if (!isValid && onDeployDisabled_ != null)
         onDeployDisabled_.execute();
   }
  
   @UiField Anchor urlAnchor;
   @UiField Label nameLabel;
   @UiField InlineLabel statusLabel;
   @UiField ListBox accountList;
   @UiField ListBox appList;
   @UiField TextBox appName;
   @UiField HTMLPanel appInfoPanel;
   @UiField HTMLPanel nameValidatePanel;
   @UiField DeployStyle style;
   @UiField FlowPanel fileListPanel_;
   @UiField InlineLabel deployLabel_;
  
   private Command onDeployEnabled_;
   private Command onDeployDisabled_;
}
TOP

Related Classes of org.rstudio.studio.client.shiny.ui.ShinyAppsDeploy$DeployResources

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.