Skip to content
This repository has been archived by the owner on Nov 30, 2021. It is now read-only.

Commit

Permalink
BZ-1274685 - New Repository dialog validation broken when Managed Rep…
Browse files Browse the repository at this point in the history
…ository is checked

    - original bz fixed
    - MVP improvements
    - Tests added

(cherry picked from commit c28d95a)
  • Loading branch information
wmedvede authored and csadilek committed Nov 4, 2015
1 parent 1d5c8c3 commit 7088230
Show file tree
Hide file tree
Showing 23 changed files with 2,067 additions and 169 deletions.
14 changes: 14 additions & 0 deletions guvnor-asset-mgmt/guvnor-asset-mgmt-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,20 @@
<artifactId>gwt-user</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.guvnor</groupId>
<artifactId>guvnor-structure-client</artifactId>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.google.gwt.gwtmockito</groupId>
<artifactId>gwtmockito</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -64,36 +64,49 @@ public class CreateRepositoryWizard extends AbstractWizard {

private final List<WizardPage> pages = new ArrayList<WizardPage>();

@Inject
private RepositoryInfoPage infoPage;

@Inject
private RepositoryStructurePage structurePage;

private CreateRepositoryWizardModel model = new CreateRepositoryWizardModel();

@Inject
private Caller<RepositoryService> repositoryService;

@Inject
private Caller<RepositoryStructureService> repositoryStructureService;

@Inject
private Caller<AssetManagementService> assetManagementService;

@Inject
private Event<NotificationEvent> notification;

@Inject
private KieWorkbenchACL kieACL;

@Inject
private SessionInfo sessionInfo;

private Callback<Void> onCloseCallback = null;

private boolean assetsManagementIsGranted = false;

@Inject
public CreateRepositoryWizard( RepositoryInfoPage infoPage,
RepositoryStructurePage structurePage,
CreateRepositoryWizardModel model,
Caller<RepositoryService> repositoryService,
Caller<RepositoryStructureService> repositoryStructureService,
Caller<AssetManagementService> assetManagementService,
Event<NotificationEvent> notification,
KieWorkbenchACL kieACL,
SessionInfo sessionInfo ) {
this.infoPage = infoPage;
this.structurePage = structurePage;
this.model = model;
this.repositoryService = repositoryService;
this.repositoryStructureService = repositoryStructureService;
this.assetManagementService = assetManagementService;
this.notification = notification;
this.kieACL = kieACL;
this.sessionInfo = sessionInfo;
}

@PostConstruct
public void setupPages() {
pages.add( infoPage );
Expand Down Expand Up @@ -144,19 +157,26 @@ public int getPreferredWidth() {
@Override
public void isComplete( final Callback<Boolean> callback ) {

callback.callback( true );
final int[] unCompletedPages = {this.pages.size()};
final boolean[] completed = {false};

//only when all pages are complete we can say the wizard is complete.
for ( WizardPage page : this.pages ) {
page.isComplete( new Callback<Boolean>() {
@Override
public void callback( final Boolean result ) {
if ( Boolean.FALSE.equals( result ) ) {
callback.callback( false );

if ( Boolean.TRUE.equals( result ) ) {
unCompletedPages[0]--;
if ( unCompletedPages[0] == 0 ) {
completed[0] = true;
}
}
}
} );
}

callback.callback( completed[0] );
}

@Override
Expand Down Expand Up @@ -375,8 +395,7 @@ private void setStructureDefaultValues() {

structurePage.setProjectDescription( null );
structurePage.setVersion( "1.0.0-SNAPSHOT" );
structurePage.stateChanged();

structurePage.fireEvent();
}

private void setAssetsManagementGrant() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,21 @@

package org.guvnor.asset.management.client.editors.repository.wizard.pages;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.inject.Inject;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
import org.guvnor.asset.management.client.editors.repository.wizard.CreateRepositoryWizardModel;
import org.guvnor.asset.management.client.i18n.Constants;
import org.guvnor.structure.client.editors.repository.RepositoryPreferences;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.organizationalunit.OrganizationalUnitService;
import org.guvnor.structure.repositories.RepositoryService;
import org.jboss.errai.bus.client.api.messaging.Message;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.ErrorCallback;
Expand All @@ -37,6 +39,8 @@
import org.jboss.errai.ioc.client.container.IOCBeanDef;
import org.jboss.errai.ioc.client.container.IOCResolutionException;
import org.uberfire.client.callbacks.Callback;
import org.uberfire.commons.data.Pair;
import org.uberfire.ext.widgets.common.client.callbacks.DefaultErrorCallback;
import org.uberfire.ext.widgets.core.client.resources.i18n.CoreConstants;

public class RepositoryInfoPage extends RepositoryWizardPage
Expand All @@ -49,23 +53,35 @@ public interface RepositoryInfoPageHandler {

}

@Inject
private RepositoryInfoPageView view;

@Inject
private Caller<OrganizationalUnitService> organizationalUnitService;

private Caller<RepositoryService> repositoryService;

private boolean isNameValid = false;

private boolean isOUValid = false;

private boolean isRepositoryStructurePageValid = false;

private Map<String, OrganizationalUnit> availableOrganizationalUnits = new HashMap<String, OrganizationalUnit>();
private boolean mandatoryOU = true;

private boolean isManagedRepository = false;

private RepositoryInfoPageHandler handler;

@Inject
public RepositoryInfoPage( RepositoryInfoPageView view,
Caller<OrganizationalUnitService> organizationalUnitService,
Caller<RepositoryService> repositoryService ) {
this.view = view;
view.init( this );
this.organizationalUnitService = organizationalUnitService;
this.repositoryService = repositoryService;
}

@Override
public String getTitle() {
return Constants.INSTANCE.RepositoryInfoPage();
Expand All @@ -74,18 +90,12 @@ public String getTitle() {
@Override
public void isComplete( final Callback<Boolean> callback ) {
boolean completed = mandatoryOU ? isNameValid && isOUValid : isNameValid;

/*
if ( view.isManagedRepository() ) {
completed = completed && structurePageWasVisited;
}
*/
callback.callback( completed );
}

@Override
public void initialise() {
view.init( this );
//no additional processing required
}

@Override
Expand All @@ -94,46 +104,73 @@ public void prepareView() {
}

@Override
public String getName() {
return view.getName();
public Widget asWidget() {
return view.asWidget();
}

public void setHandler( RepositoryInfoPageHandler handler ) {
this.handler = handler;
}

@Override
public void stateChanged() {
public void onNameChange() {
String name = view.getName().trim();
model.setRepositoryName( name );
if ( !name.equals( view.getName() )) {
view.setName( name );
}

repositoryService.call( new RemoteCallback<Boolean>() {
@Override
public void callback( Boolean isValid ) {
if ( isValid ) {
view.clearNameErrorMessage();
} else {
view.setNameErrorMessage( Constants.INSTANCE.InvalidRepositoryName() );
}
if ( isValid != isNameValid ) {
isNameValid = isValid;
refreshRepositoryStructurePageStatus( );
}
} }, new DefaultErrorCallback() ).validateRepositoryName( model.getRepositoryName() );
}

isNameValid = view.getName() != null && !view.getName().isEmpty();
view.setValidName( isNameValid );
model.setRepositoryName( view.getName() != null ? view.getName().trim() : null );
public void onOUChange() {

isOUValid = view.getOrganizationalUnitName() != null && !RepositoryInfoPageView.NOT_SELECTED.equals( view.getOrganizationalUnitName() );
final String selectedOU = view.getOrganizationalUnitName();
boolean newIsOUValid = selectedOU != null && !RepositoryInfoPageView.NOT_SELECTED.equals( selectedOU );
if ( mandatoryOU ) {
view.setValidOU( isOUValid );
view.setValidOU( newIsOUValid );
}
model.setOrganizationalUnit( view.getOrganizationalUnitName() != null ? availableOrganizationalUnits.get( view.getOrganizationalUnitName() ) : null );
model.setOrganizationalUnit( selectedOU != null ? availableOrganizationalUnits.get( selectedOU ) : null );

model.setManged( view.isManagedRepository() );
if ( isOUValid != newIsOUValid ) {
isOUValid = newIsOUValid;
refreshRepositoryStructurePageStatus( );
}
}

public void onManagedRepositoryChange() {

if ( handler != null && ( isManagedRepository != view.isManagedRepository() ) ) {
model.setManged( view.isManagedRepository() );
if ( isManagedRepository != view.isManagedRepository() ) {
isManagedRepository = view.isManagedRepository();
handler.managedRepositoryStatusChanged( isManagedRepository );
refreshRepositoryStructurePageStatus( );
}

fireEvent();
}

@Override
public Widget asWidget() {
return view.asWidget();
private void refreshRepositoryStructurePageStatus( ) {
boolean newIsRepositoryStructurePageValid = isManagedRepository && isNameValid && isOUValid;
if ( newIsRepositoryStructurePageValid != isRepositoryStructurePageValid ) {
isRepositoryStructurePageValid = newIsRepositoryStructurePageValid;
if ( handler != null ) {
handler.managedRepositoryStatusChanged( isRepositoryStructurePageValid );
}
}
fireEvent();
}

@PostConstruct
private void init() {

view.init( this );
protected void init() {

mandatoryOU = isOUMandatory();

Expand All @@ -146,20 +183,14 @@ private void init() {

@Override
public void callback( Collection<OrganizationalUnit> organizationalUnits ) {
if ( organizationalUnits != null && !organizationalUnits.isEmpty() ) {
for ( OrganizationalUnit organizationalUnit : organizationalUnits ) {
availableOrganizationalUnits.put( organizationalUnit.getName(),
organizationalUnit );
}
view.initOrganizationalUnits( organizationalUnits );
}
initOrganizationalUnits( organizationalUnits );
}
},
new ErrorCallback<Message>() {
@Override
public boolean error( final Message message,
final Throwable throwable ) {
Window.alert( CoreConstants.INSTANCE.CantLoadOrganizationalUnits() + " \n" + message.toString() );
view.alert( CoreConstants.INSTANCE.CantLoadOrganizationalUnits() + " \n" + message.toString() );

return false;
}
Expand All @@ -178,7 +209,7 @@ public void enableManagedRepoCreation( boolean enable ) {
view.enabledManagedRepositoryCreation( enable );
}

private boolean isOUMandatory() {
protected boolean isOUMandatory() {
try {
final IOCBeanDef<RepositoryPreferences> beanDef = IOC.getBeanManager().lookupBean( RepositoryPreferences.class );
return beanDef == null || beanDef.getInstance().isOUMandatory();
Expand All @@ -187,4 +218,15 @@ private boolean isOUMandatory() {
return true;
}

protected void initOrganizationalUnits( Collection<OrganizationalUnit> organizationalUnits ) {
List<Pair<String, String>> organizationalUnitsInfo = new ArrayList<Pair<String, String>>( );
if ( organizationalUnits != null && !organizationalUnits.isEmpty() ) {
for ( OrganizationalUnit organizationalUnit : organizationalUnits ) {
availableOrganizationalUnits.put( organizationalUnit.getName(),
organizationalUnit );
organizationalUnitsInfo.add( new Pair( organizationalUnit.getName(), organizationalUnit.getName() ) );
}
}
view.initOrganizationalUnits( organizationalUnitsInfo );
}
}
Loading

0 comments on commit 7088230

Please sign in to comment.