Package opus.gwt.management.console.client.deployer

Source Code of opus.gwt.management.console.client.deployer.ProjectDeployerController$applicationDeployerUiBinder

/*############################################################################
# Copyright 2010 North Carolina State University                             #
#                                                                            #
#   Licensed under 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.                                           #
############################################################################*/

package opus.gwt.management.console.client.deployer;

import java.util.ArrayList;

import opus.gwt.management.console.client.ClientFactory;
import opus.gwt.management.console.client.JSVariableHandler;
import opus.gwt.management.console.client.event.AsyncRequestEvent;
import opus.gwt.management.console.client.event.BreadCrumbEvent;
import opus.gwt.management.console.client.event.DeployProjectEvent;
import opus.gwt.management.console.client.event.DeployProjectEventHandler;
import opus.gwt.management.console.client.event.PanelTransitionEvent;
import opus.gwt.management.console.client.event.PanelTransitionEventHandler;
import opus.gwt.management.console.client.resources.ProjectDeployerCss.ProjectDeployerStyle;
import opus.gwt.management.console.client.resources.images.OpusImages;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;


public class ProjectDeployerController extends Composite {
 
  private static applicationDeployerUiBinder uiBinder = GWT.create(applicationDeployerUiBinder.class);
  interface applicationDeployerUiBinder extends UiBinder<Widget, ProjectDeployerController> {}
   
  private final String deploymentURL =  "/deployments/projectName/";
   
  private ProjectOptionsPanel projectOptionsPanel;
  private DatabaseOptionsPanel databaseOptionsPanel;
  private DeploymentOptionsPanel deploymentOptionsPanel;
  private AppBrowserPanel appBrowserPanel;
  private EventBus eventBus;
  private String createdProjectName;
  private PopupPanel loadingPopup;
  private JSVariableHandler jsVarHandler;
  private ClientFactory clientFactory;
  private int  currentPanelIndex;
   
  @UiField DeckPanel deployerDeckPanel;
  @UiField ProjectDeployerStyle style;
 
  public ProjectDeployerController(ClientFactory clientFactory) {
    initWidget(uiBinder.createAndBindUi(this));
    this.createdProjectName = "";
    this.currentPanelIndex = 0;
    this.eventBus = clientFactory.getEventBus();
    this.clientFactory = clientFactory;
    this.jsVarHandler = clientFactory.getJSVariableHandler();
    this.loadingPopup = new PopupPanel(false, true);
    this.appBrowserPanel = new AppBrowserPanel(clientFactory);
    this.projectOptionsPanel = new ProjectOptionsPanel(clientFactory);
    this.databaseOptionsPanel = new DatabaseOptionsPanel(clientFactory);
    this.deploymentOptionsPanel = new DeploymentOptionsPanel(clientFactory);
    setupLoadingPopup();
    setupDeployerDeckPanel();
    registerHandlers();
    setupBreadCrumbs();
    String token = jsVarHandler.getProjectToken();
    if (token != null) {
      eventBus.fireEvent(new AsyncRequestEvent("handleImportAppList", token));
    }
  }
 
  private void setupDeployerDeckPanel(){
    deployerDeckPanel.add(appBrowserPanel);
    deployerDeckPanel.add(projectOptionsPanel);
    deployerDeckPanel.add(databaseOptionsPanel);
    deployerDeckPanel.add(deploymentOptionsPanel);
    appBrowserPanel.setTitle("Application Browser");
    projectOptionsPanel.setTitle("Project Options");
    databaseOptionsPanel.setTitle("Database Options");
    deploymentOptionsPanel.setTitle("Deployment Options");
    deployerDeckPanel.showWidget(0);
    appBrowserPanel.setHeight("");
    appBrowserPanel.setWidth("");
  }
 
  private void setupBreadCrumbs(){
    String[] crumbs = {appBrowserPanel.getTitle(), projectOptionsPanel.getTitle(), databaseOptionsPanel.getTitle(), deploymentOptionsPanel.getTitle()};
    eventBus.fireEvent(new BreadCrumbEvent(BreadCrumbEvent.Action.SET_CRUMBS, crumbs));
  }
 
  private void registerHandlers(){
    eventBus.addHandler(PanelTransitionEvent.TYPE,
      new PanelTransitionEventHandler(){
        public void onPanelTransition(PanelTransitionEvent event){
          if( event.getTransitionType() == PanelTransitionEvent.TransitionTypes.NEXT ){
            currentPanelIndex++;
            Widget panel =  event.getPanel();
            deployerDeckPanel.showWidget(currentPanelIndex);
            eventBus.fireEvent(new BreadCrumbEvent(BreadCrumbEvent.Action.SET_ACTIVE, deployerDeckPanel.getWidget(deployerDeckPanel.getVisibleWidget()).getTitle()));
            setFocus(panel);
          } else if( event.getTransitionType() == PanelTransitionEvent.TransitionTypes.PREVIOUS ){
            currentPanelIndex--;
            deployerDeckPanel.showWidget(currentPanelIndex);
            eventBus.fireEvent(new BreadCrumbEvent(BreadCrumbEvent.Action.SET_ACTIVE, deployerDeckPanel.getWidget(deployerDeckPanel.getVisibleWidget()).getTitle()));
          }
          if( event.getTransitionType() == PanelTransitionEvent.TransitionTypes.DEPLOY ){
            reset();
          }
    }});
    eventBus.addHandler(DeployProjectEvent.TYPE,
        new DeployProjectEventHandler(){
          public void onDeployProject(DeployProjectEvent event){
            deployProject();
          }
    });
  }
 
  private void reset(){
    projectOptionsPanel.reset();
    appBrowserPanel.reset();
    databaseOptionsPanel.reset();
    deploymentOptionsPanel.reset();
    deployerDeckPanel.showWidget(0);
    currentPanelIndex = 0;
  }
 
  private void setupLoadingPopup(){
    FlowPanel fp = new FlowPanel();
    Label label = new Label("Deploying Project...");
    Image loadingImage = new Image(OpusImages.INSTANCE.loadingSpinner());
    loadingImage.setStyleName(style.loadingImage());
    label.setStyleName(style.loadingLabel());
    fp.add(loadingImage);
    fp.add(label);
    loadingPopup.add(fp)
  }

  public void setFocus(Widget panel){
    if( panel.getClass().equals(databaseOptionsPanel.getClass()) ){
      deploymentOptionsPanel.setFocus();
    } else if( panel.getClass().equals(appBrowserPanel.getClass()) ){
      projectOptionsPanel.setFocus();
    } else if( panel.getClass().equals(projectOptionsPanel.getClass()) ){
      databaseOptionsPanel.setFocus();
    }
  }
  
  private void deployProject(){
    createdProjectName = deploymentOptionsPanel.getProjectName();
   
    ArrayList<String> paths = appBrowserPanel.getAppPaths();
    ArrayList<String> apptypes = appBrowserPanel.getAppTypes();
    ArrayList<String> appNames = appBrowserPanel.getAppNames();
   
    StringBuffer formBuilder = new StringBuffer();
    formBuilder.append("csrfmiddlewaretoken=");
    formBuilder.append( URL.encodeQueryString(jsVarHandler.getCSRFTokenURL()));
   
    formBuilder.append("&form-TOTAL_FORMS=");
    formBuilder.append( URL.encodeQueryString(String.valueOf(paths.size())));
    formBuilder.append("&form-INITIAL_FORMS=");
    formBuilder.append( URL.encodeQueryString(String.valueOf(0)));
    formBuilder.append("&form-MAX_NUM_FORMS=");
   
    for(int i=0; i < paths.size(); i++) {
      formBuilder.append("&form-" + i + "-apptype=");
      formBuilder.append(apptypes.get(i));

      formBuilder.append("&form-" + i + "-apppath=");
      formBuilder.append(paths.get(i));

      formBuilder.append("&form-" + i + "-appname=");
      formBuilder.append(appNames.get(i));
    }
   
    formBuilder.append(deploymentOptionsPanel.getPostData());
    formBuilder.append(projectOptionsPanel.getPostData());
    formBuilder.append(databaseOptionsPanel.getPostData());
   
      RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, "/deployments/" + createdProjectName + "/");
      builder.setHeader("Content-type", "application/x-www-form-urlencoded");
      //builder.setHeader(header, value);
     
      try {
        Request request = builder.sendRequest(formBuilder.toString(), new RequestCallback() {
          public void onError(Request request, Throwable exception) {
            ErrorPanel ep = new ErrorPanel(clientFactory);
          ep.errorHTML.setHTML("<p>Error Occured</p>");
          deployerDeckPanel.add(ep);
          deployerDeckPanel.showWidget(deployerDeckPanel.getWidgetIndex(ep));
          }

          public void onResponseReceived(Request request, Response response) {
          if( response.getText().contains("Back to") ){
            loadingPopup.hide();
            eventBus.fireEvent(new AsyncRequestEvent("addProject", createdProjectName));
          } else {
            loadingPopup.hide();
             ErrorPanel ep = new ErrorPanel(clientFactory);
            ep.errorHTML.setHTML(response.getText());
            deployerDeckPanel.add(ep);
            deployerDeckPanel.showWidget(deployerDeckPanel.getWidgetIndex(ep));
          }
          }});
      } catch (RequestException e) {
       
      }
   
    loadingPopup.setGlassEnabled(true);
    loadingPopup.setGlassStyleName(style.loadingGlass());
    loadingPopup.show();
    int left = ( Window.getClientWidth() / 2 ) - 150;
    int top = ( Window.getClientHeight() / 2) - 10;
    loadingPopup.setPopupPosition(left, top);
    loadingPopup.show();
  }
}
TOP

Related Classes of opus.gwt.management.console.client.deployer.ProjectDeployerController$applicationDeployerUiBinder

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.