/*
* 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.common.services.project.client;
import java.util.ArrayList;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import org.guvnor.common.services.project.client.preferences.ProjectScopedResolutionStrategySupplier;
import org.guvnor.common.services.project.model.POM;
import org.guvnor.common.services.project.preferences.GAVPreferences;
import org.jboss.errai.ioc.client.container.SyncBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.mvp.ParameterizedCommand;
@Dependent
public class POMEditorPanel
implements POMEditorPanelView.Presenter,
IsWidget {
private ArrayList<NameChangeHandler> nameChangeHandlers = new ArrayList<NameChangeHandler>();
private POMEditorPanelView view;
private SyncBeanManager iocManager;
private POM model;
private GAVPreferences gavPreferences;
private ProjectScopedResolutionStrategySupplier projectScopedResolutionStrategySupplier;
public POMEditorPanel() {
}
@Inject
public POMEditorPanel( final POMEditorPanelView view,
final SyncBeanManager iocManager,
final GAVPreferences gavPreferences,
final ProjectScopedResolutionStrategySupplier projectScopedResolutionStrategySupplier ) {
this.view = view;
this.iocManager = iocManager;
this.gavPreferences = gavPreferences;
this.projectScopedResolutionStrategySupplier = projectScopedResolutionStrategySupplier;
view.setPresenter( this );
}
public void setPOM( POM model,
boolean isReadOnly ) {
if ( isReadOnly ) {
view.setReadOnly();
}
this.model = model;
gavPreferences.load( projectScopedResolutionStrategySupplier.get(), loadedGAVPreferences -> {
view.setName( model.getName() );
view.setDescription( model.getDescription() );
view.enableGroupID();
view.enableArtifactID();
view.enableVersion();
if ( model.hasParent() ) {
view.setParentGAV( model.getParent() );
view.showParentGAV();
if ( !loadedGAVPreferences.isChildGAVEditEnabled() ) {
view.disableGroupID( "" );
view.disableVersion( "" );
}
} else {
view.hideParentGAV();
}
view.setGAV( model.getGav() );
view.addArtifactIdChangeHandler( POMEditorPanel.this::setTitle );
setTitle( model.getGav().getArtifactId() );
}, throwable -> {
throw new RuntimeException( throwable );
} );
}
public void setArtifactID( final String artifactID ) {
view.setArtifactID( artifactID );
}
private void setTitle( final String titleText ) {
if ( titleText == null || titleText.isEmpty() ) {
view.setProjectModelTitleText();
} else {
view.setTitleText( titleText );
}
}
@Override
public void addNameChangeHandler( final NameChangeHandler changeHandler ) {
nameChangeHandlers.add( changeHandler );
}
@Override
public void addGroupIdChangeHandler( final GroupIdChangeHandler changeHandler ) {
this.view.addGroupIdChangeHandler( changeHandler );
}
@Override
public void addArtifactIdChangeHandler( final ArtifactIdChangeHandler changeHandler ) {
this.view.addArtifactIdChangeHandler( changeHandler );
}
@Override
public void addVersionChangeHandler( final VersionChangeHandler changeHandler ) {
this.view.addVersionChangeHandler( changeHandler );
}
@Override
public void onNameChange( final String name ) {
this.model.setName( name );
for ( NameChangeHandler changeHandler : nameChangeHandlers ) {
changeHandler.onChange( name );
}
}
@Override
public void onDescriptionChange( final String description ) {
this.model.setDescription( description );
}
@Override
public void onOpenProjectContext() {
SyncBeanDef<PlaceManager> placeManagerSyncBeanDef = iocManager.lookupBean( PlaceManager.class );
placeManagerSyncBeanDef.getInstance().goTo( "repositoryStructureScreen" );
}
@Override
public Widget asWidget() {
return view.asWidget();
}
@Override
public void disableGroupID( final String reason ) {
view.disableGroupID( reason );
}
@Override
public void disableVersion( final String reason ) {
view.disableVersion( reason );
}
@Override
public POM getPom() {
return model;
}
@Override
public void setValidName( final boolean isValid ) {
view.setValidName( isValid );
}
@Override
public void setValidGroupID( final boolean isValid ) {
view.setValidGroupID( isValid );
}
@Override
public void setValidArtifactID( final boolean isValid ) {
view.setValidArtifactID( isValid );
}
@Override
public void setValidVersion( final boolean isValid ) {
view.setValidVersion( isValid );
}
}