/*
* Copyright 2014 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.kie.workbench.common.widgets.metadata.client.widget;
import java.util.Date;
import javax.inject.Inject;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import org.guvnor.common.services.shared.metadata.model.Metadata;
import org.gwtbootstrap3.client.ui.NavTabs;
import org.gwtbootstrap3.client.ui.TabContent;
import org.gwtbootstrap3.client.ui.TabListItem;
import org.gwtbootstrap3.client.ui.TabPane;
import org.gwtbootstrap3.client.ui.TextArea;
import org.kie.workbench.common.widgets.client.discussion.DiscussionWidgetPresenter;
import org.kie.workbench.common.widgets.metadata.client.resources.i18n.MetadataConstants;
import org.uberfire.backend.vfs.Path;
import org.uberfire.backend.vfs.impl.LockInfo;
import org.uberfire.client.workbench.type.ClientResourceType;
import org.uberfire.ext.editor.commons.client.history.VersionHistoryPresenter;
import org.uberfire.ext.widgets.common.client.common.BusyPopup;
import org.uberfire.java.nio.base.version.VersionRecord;
import org.uberfire.mvp.ParameterizedCommand;
public class OverviewWidgetViewImpl
extends Composite
implements OverviewScreenView {
private static final int VERSION_HISTORY_TAB = 0;
private static Binder uiBinder = GWT.create(Binder.class);
interface Binder
extends
UiBinder<Widget, OverviewWidgetViewImpl> {
}
@UiField
TextArea description;
@UiField
Label resourceType;
@UiField
Label projects;
@UiField
Label lastModifiedLabel;
@UiField
Label createdLabel;
@UiField
NavTabs navTabs;
@UiField
TabContent tabContent;
@UiField(provided = true)
DiscussionWidgetPresenter discussionArea;
VersionHistoryPresenter versionHistory;
MetadataWidget metadata;
private Presenter presenter;
public OverviewWidgetViewImpl() {
}
@Inject
public OverviewWidgetViewImpl(final MetadataWidget metadata,
final DiscussionWidgetPresenter discussionArea,
final VersionHistoryPresenter versionHistory) {
this.metadata = metadata;
this.discussionArea = discussionArea;
this.versionHistory = versionHistory;
versionHistory.setOnCurrentVersionRefreshed(new ParameterizedCommand<VersionRecord>() {
@Override
public void execute(VersionRecord record) {
metadata.setNote(record.comment());
setLastModified(record.author(),
record.date());
}
});
initWidget(uiBinder.createAndBindUi(this));
final TabPane versionHistoryPane = new TabPane() {{
add(versionHistory);
}};
final TabPane metadataPane = new TabPane() {{
add(metadata);
}};
tabContent.add(versionHistoryPane);
tabContent.add(metadataPane);
navTabs.add(new TabListItem(MetadataConstants.INSTANCE.VersionHistory()) {{
addStyleName("uf-dropdown-tab-list-item");
setDataTargetWidget(versionHistoryPane);
setActive(true);
}});
navTabs.add(new TabListItem(MetadataConstants.INSTANCE.Metadata()) {{
addStyleName("uf-dropdown-tab-list-item");
setDataTargetWidget(metadataPane);
}});
navTabs.getElement().setAttribute("data-uf-lock",
"false");
versionHistoryPane.setActive(true);
}
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
@Override
public void setReadOnly(boolean isReadOnly) {
description.setEnabled(!isReadOnly);
}
@Override
public void setVersionHistory(Path path) {
versionHistory.init(path);
}
@Override
public void setDescription(String description) {
this.description.setText(description);
}
@UiHandler("description")
public void onDescriptionChange(KeyUpEvent event) {
presenter.onDescriptionEdited(description.getText());
}
@Override
public void setResourceType(ClientResourceType type) {
resourceType.setText(type.getDescription());
}
@Override
public void setProject(String project) {
projects.setText(project);
}
@Override
public void setLastModified(String lastContributor,
Date lastModified) {
lastModifiedLabel.setText(MetadataConstants.INSTANCE.ByAOnB(lastContributor,
DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_SHORT).format(lastModified)));
}
@Override
public void setCreated(String creator,
Date dateCreated) {
createdLabel.setText(MetadataConstants.INSTANCE.ByAOnB(creator,
DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_TIME_SHORT).format(dateCreated)));
}
@Override
public void showVersionHistory() {
((TabListItem) navTabs.getWidget(VERSION_HISTORY_TAB)).setActive(true);
}
@Override
public void setMetadata(Metadata metadata,
boolean isReadOnly) {
this.metadata.setContent(metadata,
isReadOnly);
this.discussionArea.setContent(metadata);
}
@Override
public void showBusyIndicator(String message) {
BusyPopup.showMessage(message);
}
@Override
public void hideBusyIndicator() {
BusyPopup.close();
}
@Override
public Widget asWidget() {
return super.asWidget();
}
@Override
public void refresh(String version) {
versionHistory.refresh(version);
}
public void setForceUnlockHandler(final Runnable handler) {
this.metadata.setForceUnlockHandler(handler);
}
@Override
public void setCurrentUser(String currentUser) {
metadata.setCurrentUser(currentUser);
}
@Override
public void setLockStatus(final LockInfo lockInfo) {
metadata.setLockStatus(lockInfo);
}
}