/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * 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.guvnor.structure.client.editors.repository.edit; import java.util.List; import javax.annotation.PostConstruct; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import org.guvnor.structure.client.editors.repository.common.CopyRepositoryUrlBtn; import org.guvnor.structure.client.navigator.CommitNavigatorEntry; import org.guvnor.structure.repositories.PublicURI; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Heading; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.html.Paragraph; import org.uberfire.ext.widgets.common.client.common.BusyPopup; import org.uberfire.ext.widgets.core.client.resources.i18n.CoreConstants; import org.uberfire.java.nio.base.version.VersionRecord; import org.uberfire.mvp.ParameterizedCommand; public class RepositoryEditorView extends Composite implements RepositoryEditorPresenter.View { interface RepositoryEditorViewBinder extends UiBinder<Widget, RepositoryEditorView> { } private static RepositoryEditorViewBinder uiBinder = GWT.create( RepositoryEditorViewBinder.class ); @UiField public Heading repoName; @UiField public Paragraph repoDesc; @UiField public TextBox gitDaemonURI; @UiField public CopyRepositoryUrlBtn myGitCopyButton; @UiField public Paragraph linksPanel; @UiField public FlowPanel history; @UiField public Button loadMore; private RepositoryEditorPresenter presenter; private boolean readOnly; public RepositoryEditorView() { initWidget( uiBinder.createAndBindUi( this ) ); myGitCopyButton.addDomHandler( ( e ) -> presenter.onGitUrlCopied( gitDaemonURI.getText() ), ClickEvent.getType() ); } @Override public void init( final RepositoryEditorPresenter presenter ) { this.presenter = presenter; } @Override public void setRepositoryInfo( final String repositoryName, final String owner, final boolean readOnly, final List<PublicURI> publicURIs, final String description, final List<VersionRecord> initialVersionList ) { this.readOnly = readOnly; if ( owner != null && !owner.isEmpty() ) { repoName.setText( owner + " / " + repositoryName ); } else { repoName.setText( repositoryName ); } repoDesc.setText( description ); int count = 0; if ( publicURIs.size() > 0 ) { linksPanel.setText( CoreConstants.INSTANCE.AvailableProtocols() ); } for ( final PublicURI publicURI : publicURIs ) { if ( count == 0 ) { gitDaemonURI.setText( publicURI.getURI() ); } final String protocol = publicURI.getProtocol() == null ? "default" : publicURI.getProtocol(); final Button anchor = new Button( protocol ); anchor.getElement().getStyle().setMarginLeft( 5, Style.Unit.PX ); anchor.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { gitDaemonURI.setText( publicURI.getURI() ); } } ); if ( count != 0 ) { anchor.getElement().getStyle().setPaddingLeft( 5, Style.Unit.PX ); } linksPanel.add( anchor ); count++; } if ( initialVersionList != null && !initialVersionList.isEmpty() ) { loadContent( initialVersionList ); } else { history.setVisible( false ); } loadMore.addClickHandler( new ClickHandler() { @Override public void onClick( ClickEvent event ) { presenter.onLoadMoreHistory( history.getWidgetCount() ); } } ); final String uriId = "uri-for-" + repositoryName; gitDaemonURI.getElement().setId( uriId ); myGitCopyButton.init( false, uriId, gitDaemonURI.getText() ); glueCopy( myGitCopyButton.getElement() ); } @Override public void reloadHistory( final List<VersionRecord> versionList ) { loadContent( versionList ); BusyPopup.close(); } @Override public void addHistory( List<VersionRecord> versionList ) { if ( !versionList.isEmpty() ) { loadContent( versionList ); } else { loadMore.setEnabled( false ); } } private void loadContent( final List<VersionRecord> versionRecordList ) { for ( VersionRecord vr : versionRecordList ) { history.add( new CommitNavigatorEntry( readOnly, vr, new ParameterizedCommand<VersionRecord>() { @Override public void execute( final VersionRecord record ) { BusyPopup.showMessage( CoreConstants.INSTANCE.Reverting() ); presenter.onRevert( record ); } } ) ); } } public static native void glueCopy( final Element element ) /*-{ var clip = new $wnd.ZeroClipboard(element); }-*/; }