/*
* Copyright 2015 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.
*
* 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.screens.projecteditor.client.forms;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import org.guvnor.common.services.project.client.repositories.ConflictingRepositoriesPopup;
import org.guvnor.common.services.project.client.type.POMResourceType;
import org.guvnor.common.services.project.service.DeploymentMode;
import org.guvnor.common.services.project.service.GAVAlreadyExistsException;
import org.jboss.errai.common.client.api.Caller;
import org.kie.workbench.common.screens.defaulteditor.client.editor.KieTextEditorPresenter;
import org.kie.workbench.common.screens.defaulteditor.client.editor.KieTextEditorView;
import org.kie.workbench.common.screens.projecteditor.service.PomEditorService;
import org.kie.workbench.common.widgets.client.callbacks.CommandWithThrowableDrivenErrorCallback;
import org.kie.workbench.common.widgets.client.resources.i18n.CommonConstants;
import org.uberfire.backend.vfs.ObservablePath;
import org.uberfire.client.annotations.WorkbenchEditor;
import org.uberfire.client.annotations.WorkbenchMenu;
import org.uberfire.client.annotations.WorkbenchPartTitle;
import org.uberfire.client.annotations.WorkbenchPartTitleDecoration;
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.ext.widgets.common.client.ace.AceEditorMode;
import org.uberfire.lifecycle.OnStartup;
import org.uberfire.mvp.Command;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.workbench.model.menu.Menus;
@WorkbenchEditor(identifier = "pomScreen", supportedTypes = { POMResourceType.class }, priority = 2)
public class PomEditorScreenPresenter
extends KieTextEditorPresenter {
private Caller<PomEditorService> pomEditorService;
private ConflictingRepositoriesPopup conflictingRepositoriesPopup;
@Inject
public PomEditorScreenPresenter( final KieTextEditorView baseView,
final Caller<PomEditorService> pomEditorService,
final ConflictingRepositoriesPopup conflictingRepositoriesPopup ) {
super( baseView );
this.pomEditorService = pomEditorService;
this.conflictingRepositoriesPopup = conflictingRepositoriesPopup;
}
@OnStartup
public void onStartup( final ObservablePath path,
final PlaceRequest place ) {
super.onStartup( path,
place );
}
@WorkbenchMenu
public Menus getMenus() {
return super.getMenus();
}
@WorkbenchPartTitleDecoration
public IsWidget getTitle() {
return super.getTitle();
}
@WorkbenchPartTitle
public String getTitleText() {
return super.getTitleText();
}
@WorkbenchPartView
public IsWidget asWidget() {
return super.getWidget();
}
@Override
public AceEditorMode getAceEditorMode() {
return AceEditorMode.XML;
}
@Override
protected void save( final String commitMessage ) {
doSave( commitMessage,
DeploymentMode.VALIDATED );
}
private void doSave( final String commitMessage,
final DeploymentMode mode ) {
//Instantiate a new instance on each "save" operation to pass in commit message
final Map<Class<? extends Throwable>, CommandWithThrowableDrivenErrorCallback.CommandWithThrowable> onSaveGavExistsHandler = new HashMap<Class<? extends Throwable>, CommandWithThrowableDrivenErrorCallback.CommandWithThrowable>() {{
put( GAVAlreadyExistsException.class,
new CommandWithThrowableDrivenErrorCallback.CommandWithThrowable() {
@Override
public void execute( final Throwable parameter ) {
view.hideBusyIndicator();
final GAVAlreadyExistsException e = (GAVAlreadyExistsException) parameter;
conflictingRepositoriesPopup.setContent( e.getGAV(),
e.getRepositories(),
new Command() {
@Override
public void execute() {
conflictingRepositoriesPopup.hide();
doSave( commitMessage,
DeploymentMode.FORCED );
}
} );
conflictingRepositoriesPopup.show();
}
} );
}};
view.showBusyIndicator( CommonConstants.INSTANCE.Saving() );
pomEditorService.call( getSaveSuccessCallback( view.getContent().hashCode() ),
new CommandWithThrowableDrivenErrorCallback( busyIndicatorView,
onSaveGavExistsHandler ) ).save( versionRecordManager.getCurrentPath(),
view.getContent(),
metadata,
commitMessage,
mode );
}
}