/*
* Copyright 2012 JBoss Inc
*
* 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 org.overlord.dtgov.ui.client.local.pages;
import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import org.jboss.errai.databinding.client.api.DataBinder;
import org.jboss.errai.databinding.client.api.InitialState;
import org.jboss.errai.ui.nav.client.local.Page;
import org.jboss.errai.ui.nav.client.local.PageState;
import org.jboss.errai.ui.nav.client.local.TransitionAnchor;
import org.jboss.errai.ui.nav.client.local.TransitionTo;
import org.jboss.errai.ui.shared.api.annotations.AutoBound;
import org.jboss.errai.ui.shared.api.annotations.Bound;
import org.jboss.errai.ui.shared.api.annotations.DataField;
import org.jboss.errai.ui.shared.api.annotations.EventHandler;
import org.jboss.errai.ui.shared.api.annotations.Templated;
import org.overlord.commons.gwt.client.local.widgets.HtmlSnippet;
import org.overlord.dtgov.ui.client.local.ClientMessages;
import org.overlord.dtgov.ui.client.local.beans.DeploymentContentsFilterBean;
import org.overlord.dtgov.ui.client.local.pages.deployments.DeploymentContentsFilters;
import org.overlord.dtgov.ui.client.local.pages.deployments.ExpandedArtifactList;
import org.overlord.dtgov.ui.client.local.services.DeploymentsRpcService;
import org.overlord.dtgov.ui.client.local.services.NotificationService;
import org.overlord.dtgov.ui.client.local.services.rpc.IRpcServiceInvocationHandler;
import org.overlord.dtgov.ui.client.local.util.DOMUtil;
import org.overlord.dtgov.ui.client.local.util.DataBindingListCountConverter;
import org.overlord.dtgov.ui.client.local.util.DataBindingParentheticalConverter;
import org.overlord.dtgov.ui.client.shared.beans.ExpandedArtifactsBean;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.gwt.dom.client.Element;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.InlineLabel;
/**
* The "Deployment Contents" page.
*
* @author eric.wittmann@redhat.com
*/
@Templated("/org/overlord/dtgov/ui/client/local/site/deploymentContents.html#page")
@Page(path="deploymentContents")
@Dependent
public class DeploymentContentsPage extends AbstractPage {
@Inject
protected ClientMessages i18n;
@Inject
protected DeploymentsRpcService deploymentsService;
@Inject
protected NotificationService notificationService;
@PageState
private String uuid;
@Inject @AutoBound
protected DataBinder<ExpandedArtifactsBean> deploymentContentsBean;
// Breadcrumbs
@Inject @DataField("back-to-dashboard")
TransitionAnchor<DashboardPage> backToDashboard;
@Inject @DataField("back-to-deployments")
TransitionAnchor<DeploymentsPage> backToDeployments;
@Inject @DataField("back-to-deployment")
Anchor backToDeployment;
@Inject
TransitionTo<DeploymentDetailsPage> goToDeploymentDetails;
// Deployment header
@Inject @DataField("deployment-name") @Bound(property="artifactName")
InlineLabel name;
@Inject @DataField("deployment-type") @Bound(property="artifactType", converter=DataBindingParentheticalConverter.class)
InlineLabel type;
@Inject @DataField("deployment-version") @Bound(property="artifactVersion", converter=DataBindingParentheticalConverter.class)
InlineLabel deploymentVersion;
// Summary information
@Inject @DataField("expanded-artifact-count") @Bound(property="expandedArtifacts", converter=DataBindingListCountConverter.class)
InlineLabel artifactCount;
@Inject @DataField("deployment-name-2") @Bound(property="artifactName")
InlineLabel name2;
// Expanded artifact list
@Inject @DataField("deployment-contents-items") @Bound
ExpandedArtifactList expandedArtifacts;
// Artifact Filters
@Inject @DataField("deployment-contents-filters")
protected DeploymentContentsFilters filtersPanel;
@Inject @DataField("deployment-contents-loading-spinner")
protected HtmlSnippet loading;
protected Element pageContent;
/**
* Constructor.
*/
public DeploymentContentsPage() {
}
/**
* Called after the widget is constructed.
*/
@PostConstruct
protected void onPostConstruct() {
pageContent = DOMUtil.findElementById(getElement(), "deployment-contents-content-wrapper"); //$NON-NLS-1$
pageContent.addClassName("hide"); //$NON-NLS-1$
filtersPanel.addValueChangeHandler(new ValueChangeHandler<DeploymentContentsFilterBean>() {
@Override
public void onValueChange(ValueChangeEvent<DeploymentContentsFilterBean> event) {
expandedArtifacts.setFilters(event.getValue());
expandedArtifacts.render();
}
});
}
/**
* @see org.overlord.dtgov.ui.client.local.pages.AbstractPage#onPageShowing()
*/
@Override
protected void onPageShowing() {
pageContent.addClassName("hide"); //$NON-NLS-1$
loading.getElement().removeClassName("hide"); //$NON-NLS-1$
deploymentsService.listExpandedArtifacts(uuid, new IRpcServiceInvocationHandler<ExpandedArtifactsBean>() {
@Override
public void onReturn(ExpandedArtifactsBean data) {
update(data);
}
@Override
public void onError(Throwable error) {
notificationService.sendErrorNotification(i18n.format("deployment-contents.error-expanding"), error); //$NON-NLS-1$
}
});
backToDeployment.setHref(createPageHref("deploymentDetails", "uuid", uuid)); //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* Called when the history is loaded.
* @param deployment
*/
protected void update(ExpandedArtifactsBean bean) {
loading.getElement().addClassName("hide"); //$NON-NLS-1$
pageContent.removeClassName("hide"); //$NON-NLS-1$
this.deploymentContentsBean.setModel(bean, InitialState.FROM_MODEL);
}
/**
* Called when the user clicks the back-to-deployment breadcrumb.
* @param event
*/
@EventHandler("back-to-deployment")
protected void onBackToDeployment(ClickEvent event) {
Multimap<String, String> state = HashMultimap.create();
state.put("uuid", uuid); //$NON-NLS-1$
goToDeploymentDetails.go(state);
event.stopPropagation();
event.preventDefault();
}
}