diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenter.java b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenter.java index e6f9b05d7c..515258d35e 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenter.java +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenter.java @@ -18,6 +18,7 @@ import com.google.gwt.user.client.Command; import org.guvnor.structure.organizationalunit.OrganizationalUnit; import org.guvnor.structure.repositories.Repository; +import org.jboss.errai.common.client.api.RemoteCallback; public interface OrganizationalUnitManagerPresenter { @@ -28,12 +29,14 @@ public interface OrganizationalUnitManagerPresenter { void addNewOrganizationalUnit(); void createNewOrganizationalUnit( final String organizationalUnitName, - final String organizationalUnitOwner ); + final String organizationalUnitOwner, + final String defaultGroupId ); void editOrganizationalUnit( final OrganizationalUnit organizationalUnit ); void saveOrganizationalUnit( final String organizationalUnitName, - final String organizationalUnitOwner ); + final String organizationalUnitOwner, + final String defaultGroupId ); void deleteOrganizationalUnit( final OrganizationalUnit organizationalUnit ); @@ -47,4 +50,7 @@ void checkIfOrganizationalUnitExists( final String organizationalUnitName, final Command onSuccessCommand, final Command onFailureCommand ); + void checkValidGroupId( final String proposedGroupId, RemoteCallback callback ); + + void getSanitizedGroupId( final String proposedGroupId, RemoteCallback callback ); } diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenterImpl.java b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenterImpl.java index 1a5a747690..70a637c95f 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenterImpl.java +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/OrganizationalUnitManagerPresenterImpl.java @@ -161,7 +161,8 @@ public void callback( final OrganizationalUnit organizationalUnit ) { @Override public void createNewOrganizationalUnit( final String organizationalUnitName, - final String organizationalUnitOwner ) { + final String organizationalUnitOwner, + final String defaultGroupId ) { final Collection repositories = new ArrayList(); view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() ); organizationalUnitService.call( new RemoteCallback() { @@ -174,6 +175,7 @@ public void callback( final OrganizationalUnit newOrganizationalUnit ) { } }, new HasBusyIndicatorDefaultErrorCallback( view ) ).createOrganizationalUnit( organizationalUnitName, organizationalUnitOwner, + defaultGroupId, repositories ); } @@ -185,16 +187,18 @@ public void editOrganizationalUnit( final OrganizationalUnit organizationalUnit @Override public void saveOrganizationalUnit( final String organizationalUnitName, - final String organizationalUnitOwner ) { + final String organizationalUnitOwner, + final String defaultGroupId ) { view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() ); - organizationalUnitService.call( new RemoteCallback() { + organizationalUnitService.call( new RemoteCallback() { @Override - public void callback( final Void response ) { + public void callback( final OrganizationalUnit response ) { loadOrganizationalUnits(); } - }, new HasBusyIndicatorDefaultErrorCallback( view ) ).updateOrganizationalUnitOwner( organizationalUnitName, - organizationalUnitOwner ); + }, new HasBusyIndicatorDefaultErrorCallback( view ) ).updateOrganizationalUnit( organizationalUnitName, + organizationalUnitOwner, + defaultGroupId); } @Override @@ -242,6 +246,20 @@ public void callback( final Void v ) { repository ); } + @Override + public void checkValidGroupId( final String proposedGroupId, RemoteCallback callback ) { + organizationalUnitService.call( + callback, + new HasBusyIndicatorDefaultErrorCallback( view ) ).isValidGroupId( proposedGroupId ); + } + + @Override + public void getSanitizedGroupId( String proposedGroupId, RemoteCallback callback ) { + organizationalUnitService.call( + callback, + new HasBusyIndicatorDefaultErrorCallback( view ) ).getSanitizedDefaultGroupId( proposedGroupId ); + } + public void onRepositoryAddedEvent( @Observes NewRepositoryEvent event ) { onStartup(); } diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.java b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.java index a60bcfce42..7f75667f61 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.java +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.java @@ -18,17 +18,22 @@ import com.github.gwtbootstrap.client.ui.ControlGroup; import com.github.gwtbootstrap.client.ui.HelpInline; +import com.github.gwtbootstrap.client.ui.Icon; import com.github.gwtbootstrap.client.ui.TextBox; import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; +import com.google.gwt.event.logical.shared.ValueChangeEvent; 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.Command; import com.google.gwt.user.client.ui.Widget; import org.guvnor.organizationalunit.manager.client.editor.OrganizationalUnitManagerPresenter; import org.guvnor.organizationalunit.manager.client.resources.i18n.OrganizationalUnitManagerConstants; +import org.jboss.errai.common.client.api.RemoteCallback; import org.uberfire.client.mvp.UberView; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.ModalFooterOKCancelButtons; @@ -52,6 +57,18 @@ interface AddOrganizationalUnitPopupBinder @UiField HelpInline nameHelpInline; + @UiField + ControlGroup defaultGroupIdGroup; + + @UiField + TextBox defaultGroupIdTextBox; + + @UiField + HelpInline defaultGroupIdHelpInline; + + @UiField + Icon groupIdHelpIcon; + @UiField TextBox ownerTextBox; @@ -74,12 +91,17 @@ public void execute() { private final ModalFooterOKCancelButtons footer = new ModalFooterOKCancelButtons( okCommand, cancelCommand ); + private boolean groupIdManuallyChanged = false; + public AddOrganizationalUnitPopup() { setTitle( OrganizationalUnitManagerConstants.INSTANCE.AddOrganizationalUnitPopupTitle() ); add( uiBinder.createAndBindUi( this ) ); add( footer ); + groupIdHelpIcon.getElement().getStyle().setPaddingLeft( 5, Style.Unit.PX ); + groupIdHelpIcon.getElement().getStyle().setCursor( Style.Cursor.POINTER ); + nameTextBox.addKeyPressHandler( new KeyPressHandler() { @Override public void onKeyPress( final KeyPressEvent event ) { @@ -94,6 +116,33 @@ public void init( final OrganizationalUnitManagerPresenter presenter ) { this.presenter = presenter; } + @UiHandler("nameTextBox") + void nameChanged( final ValueChangeEvent event ) { + // Only change the value of the default group id of it hasn't been modified manually already + if ( !groupIdManuallyChanged ) { + if ( nameTextBox.getText() == null || nameTextBox.getText().trim().isEmpty() ) { + defaultGroupIdTextBox.setText( "" ); + } else { + presenter.getSanitizedGroupId( nameTextBox.getText(), new RemoteCallback() { + @Override + public void callback( final String sanitizedGroupId ) { + defaultGroupIdTextBox.setText( sanitizedGroupId ); + } + } ); + } + } + } + + @UiHandler("defaultGroupIdTextBox") + void groupIdChangedChanged( final ValueChangeEvent event ) { + String input = defaultGroupIdTextBox.getText(); + if ( input == null || input.trim().isEmpty() || input.trim().equals( nameTextBox.getText() ) ) { + groupIdManuallyChanged = false; + } else { + groupIdManuallyChanged = true; + } + } + private void onOKButtonClick() { nameGroup.setType( ControlGroupType.NONE ); if ( nameTextBox.getText() == null || nameTextBox.getText().trim().isEmpty() ) { @@ -102,27 +151,45 @@ private void onOKButtonClick() { return; } - presenter.checkIfOrganizationalUnitExists( nameTextBox.getText(), - new Command() { - @Override - public void execute() { - onOKSuccess(); - } - }, - new Command() { - @Override - public void execute() { - nameGroup.setType( ControlGroupType.ERROR ); - nameHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.OrganizationalUnitAlreadyExists() ); - } - - } - ); + if ( defaultGroupIdTextBox.getText() == null || defaultGroupIdTextBox.getText().trim().isEmpty() ) { + defaultGroupIdGroup.setType( ControlGroupType.ERROR ); + defaultGroupIdHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.DefaultGroupIdIsMandatory() ); + return; + } else { + presenter.checkValidGroupId( defaultGroupIdTextBox.getText(), new RemoteCallback() { + @Override + public void callback( Boolean valid ) { + if ( !valid ) { + defaultGroupIdGroup.setType( ControlGroupType.ERROR ); + defaultGroupIdHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.InvalidGroupId() ); + return; + } else { + presenter.checkIfOrganizationalUnitExists( nameTextBox.getText(), + new Command() { + @Override + public void execute() { + onOKSuccess(); + } + }, + new Command() { + @Override + public void execute() { + nameGroup.setType( ControlGroupType.ERROR ); + nameHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.OrganizationalUnitAlreadyExists() ); + } + + } + ); + } + } + } ); + } } private void onOKSuccess() { presenter.createNewOrganizationalUnit( nameTextBox.getText(), - ownerTextBox.getText() ); + ownerTextBox.getText(), + defaultGroupIdTextBox.getText() ); hide(); } @@ -131,6 +198,10 @@ public void show() { nameTextBox.setText( "" ); nameGroup.setType( ControlGroupType.NONE ); nameHelpInline.setText( "" ); + defaultGroupIdTextBox.setText( "" ); + defaultGroupIdGroup.setType( ControlGroupType.NONE ); + defaultGroupIdHelpInline.setText( "" ); + this.groupIdManuallyChanged = false; ownerTextBox.setText( "" ); super.show(); } diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.ui.xml b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.ui.xml index 7eaf9baa9a..c06022d8ea 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.ui.xml +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/AddOrganizationalUnitPopup.ui.xml @@ -35,6 +35,19 @@ + + + * + Default group ID + + + + + + + + + Owner diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.java b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.java index dd9f80ddf7..11f1235972 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.java +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.java @@ -16,8 +16,13 @@ package org.guvnor.organizationalunit.manager.client.editor.popups; +import com.github.gwtbootstrap.client.ui.ControlGroup; +import com.github.gwtbootstrap.client.ui.HelpInline; +import com.github.gwtbootstrap.client.ui.Icon; import com.github.gwtbootstrap.client.ui.TextBox; +import com.github.gwtbootstrap.client.ui.constants.ControlGroupType; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Command; @@ -25,6 +30,7 @@ import org.guvnor.organizationalunit.manager.client.editor.OrganizationalUnitManagerPresenter; import org.guvnor.organizationalunit.manager.client.resources.i18n.OrganizationalUnitManagerConstants; import org.guvnor.structure.organizationalunit.OrganizationalUnit; +import org.jboss.errai.common.client.api.RemoteCallback; import org.uberfire.client.mvp.UberView; import org.uberfire.ext.widgets.common.client.common.popups.BaseModal; import org.uberfire.ext.widgets.common.client.common.popups.footers.ModalFooterOKCancelButtons; @@ -45,6 +51,18 @@ interface EditOrganizationalUnitPopupBinder @UiField TextBox ownerTextBox; + @UiField + ControlGroup defaultGroupIdGroup; + + @UiField + TextBox defaultGroupIdTextBox; + + @UiField + HelpInline defaultGroupIdHelpInline; + + @UiField + Icon groupIdHelpIcon; + private OrganizationalUnit organizationalUnit; private OrganizationalUnitManagerPresenter presenter; @@ -71,6 +89,9 @@ public EditOrganizationalUnitPopup() { add( uiBinder.createAndBindUi( this ) ); add( footer ); + + groupIdHelpIcon.getElement().getStyle().setPaddingLeft( 5, Style.Unit.PX ); + groupIdHelpIcon.getElement().getStyle().setCursor( Style.Cursor.POINTER ); } @Override @@ -79,9 +100,27 @@ public void init( final OrganizationalUnitManagerPresenter presenter ) { } private void onOKButtonClick() { - presenter.saveOrganizationalUnit( nameTextBox.getText(), - ownerTextBox.getText() ); - hide(); + if ( defaultGroupIdTextBox.getText() == null || defaultGroupIdTextBox.getText().trim().isEmpty() ) { + defaultGroupIdGroup.setType( ControlGroupType.ERROR ); + defaultGroupIdHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.DefaultGroupIdIsMandatory() ); + return; + } else { + presenter.checkValidGroupId( defaultGroupIdTextBox.getText(), new RemoteCallback() { + @Override + public void callback( Boolean valid ) { + if ( !valid ) { + defaultGroupIdGroup.setType( ControlGroupType.ERROR ); + defaultGroupIdHelpInline.setText( OrganizationalUnitManagerConstants.INSTANCE.InvalidGroupId() ); + return; + } else { + presenter.saveOrganizationalUnit( nameTextBox.getText(), + ownerTextBox.getText(), + defaultGroupIdTextBox.getText() ); + hide(); + } + } + } ); + } } public void setOrganizationalUnit( final OrganizationalUnit organizationalUnit ) { @@ -90,14 +129,31 @@ public void setOrganizationalUnit( final OrganizationalUnit organizationalUnit ) @Override public void show() { + defaultGroupIdGroup.setType( ControlGroupType.NONE ); + defaultGroupIdHelpInline.setText( "" ); + if ( organizationalUnit == null ) { nameTextBox.setText( "" ); + defaultGroupIdTextBox.setText( "" ); ownerTextBox.setText( "" ); + super.show(); } else { - nameTextBox.setText( organizationalUnit.getName() ); - ownerTextBox.setText( organizationalUnit.getOwner() ); + presenter.getSanitizedGroupId( organizationalUnit.getName(), new RemoteCallback() { + @Override + public void callback( final String sanitizedGroupId ) { + nameTextBox.setText( organizationalUnit.getName() ); + + if ( organizationalUnit.getDefaultGroupId() == null || organizationalUnit.getDefaultGroupId().trim().isEmpty() ) { + defaultGroupIdTextBox.setText( sanitizedGroupId ); + } else { + defaultGroupIdTextBox.setText( organizationalUnit.getDefaultGroupId() ); + } + + ownerTextBox.setText( organizationalUnit.getOwner() ); + EditOrganizationalUnitPopup.super.show(); + } + } ); } - super.show(); } } diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.ui.xml b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.ui.xml index 0c8ac74820..00f1e37a81 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.ui.xml +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/editor/popups/EditOrganizationalUnitPopup.ui.xml @@ -31,6 +31,19 @@ + + + * + Default group ID + + + + + + + + + Owner diff --git a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.java b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.java index 2c3f4379f3..6b0edf2348 100644 --- a/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.java +++ b/guvnor-organizationalunit-manager/src/main/java/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.java @@ -41,6 +41,12 @@ public interface OrganizationalUnitManagerConstants String OrganizationalUnitNameIsMandatory(); + String DefaultGroupIdIsMandatory(); + + String InvalidGroupId(); + + String GroupIdInfo(); + String NoOrganizationalUnitsDefined(); String NoRepositoriesDefined(); diff --git a/guvnor-organizationalunit-manager/src/main/resources/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.properties b/guvnor-organizationalunit-manager/src/main/resources/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.properties index 06b2ccc988..31d2dad50a 100644 --- a/guvnor-organizationalunit-manager/src/main/resources/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.properties +++ b/guvnor-organizationalunit-manager/src/main/resources/org/guvnor/organizationalunit/manager/client/resources/i18n/OrganizationalUnitManagerConstants.properties @@ -5,6 +5,10 @@ OrganizationalUnitManagerTitle=Organizational Unit Manager AddOrganizationalUnitPopupTitle=Add New Organizational Unit EditOrganizationalUnitPopupTitle=Edit Organizational Unit OrganizationalUnitNameIsMandatory=Organizational Unit Name is mandatory +DefaultGroupIdIsMandatory=The Default Group Id is mandatory +InvalidGroupId=Invalid Default Group Id +GroupIdInfo=The Default Group Id has to be a valid Maven identifier, i.e. it can only contain alphanumerical characters,\ + as well as '\"_\"', '\"-\"' or '\".\"'. NoOrganizationalUnitsDefined=-- No Organizational Units defined -- NoRepositoriesDefined=-- No Repositories defined -- NoRepositoriesAvailable=-- No Repositories available -- diff --git a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestHelper.java b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestHelper.java index cace3381bd..bcb8712a78 100644 --- a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestHelper.java +++ b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestHelper.java @@ -446,6 +446,7 @@ public JobResult removeOrganizationalUnit( final String jobId, public JobResult createOrganizationalUnit( final String jobId, final String organizationalUnitName, final String organizationalUnitOwner, + final String defaultGroupId, final List repositoryNameList ) { JobResult result = new JobResult(); result.setJobId( jobId ); @@ -456,6 +457,21 @@ public JobResult createOrganizationalUnit( final String jobId, return result; } + String _defaultGroupId = null; + if ( defaultGroupId == null || defaultGroupId.trim().isEmpty() ) { + _defaultGroupId = organizationalUnitService.getSanitizedDefaultGroupId( organizationalUnitName ); + logger.warn( "No default group id was provided, reverting to the organizational unit name" ); + } else { + if ( !organizationalUnitService.isValidGroupId( defaultGroupId ) ) { + result.setStatus( JobStatus.BAD_REQUEST ); + result.setResult( "Invalid default group id, only alphanumerical characters are admitted, " + + "as well as '\"_\"', '\"-\"' or '\".\"'." ); + return result; + } else { + _defaultGroupId = defaultGroupId; + } + } + OrganizationalUnit organizationalUnit = null; List repositories = new ArrayList(); if ( repositoryNameList != null && repositoryNameList.size() > 0 ) { @@ -472,10 +488,12 @@ public JobResult createOrganizationalUnit( final String jobId, } organizationalUnit = organizationalUnitService.createOrganizationalUnit( organizationalUnitName, organizationalUnitOwner, + _defaultGroupId, repositories ); } else { organizationalUnit = organizationalUnitService.createOrganizationalUnit( organizationalUnitName, - organizationalUnitOwner ); + organizationalUnitOwner, + _defaultGroupId ); } if ( organizationalUnit != null ) { @@ -487,6 +505,47 @@ public JobResult createOrganizationalUnit( final String jobId, return result; } + public JobResult updateOrganizationalUnit( final String jobId, + final String organizationalUnitName, + final String organizationalUnitOwner, + final String defaultGroupId ) { + JobResult result = new JobResult(); + result.setJobId( jobId ); + + if ( organizationalUnitName == null || organizationalUnitOwner == null ) { + result.setStatus( JobStatus.BAD_REQUEST ); + result.setResult( "OrganizationalUnit name and owner must be provided" ); + return result; + } + + String _defaultGroupId = null; + if ( defaultGroupId == null || defaultGroupId.trim().isEmpty() ) { + _defaultGroupId = organizationalUnitService.getSanitizedDefaultGroupId( organizationalUnitName ); + logger.warn( "No default group id was provided, reverting to the organizational unit name" ); + } else { + if ( !organizationalUnitService.isValidGroupId( defaultGroupId ) ) { + result.setStatus( JobStatus.BAD_REQUEST ); + result.setResult( "Invalid default group id, only alphanumerical characters are admitted, " + + "as well as '\"_\"', '\"-\"' or '\".\"'." ); + return result; + } else { + _defaultGroupId = defaultGroupId; + } + } + + OrganizationalUnit organizationalUnit = organizationalUnitService.updateOrganizationalUnit( organizationalUnitName, + organizationalUnitOwner, + _defaultGroupId ); + + if ( organizationalUnit != null ) { + result.setResult( "OrganizationalUnit " + organizationalUnit.getName() + " was successfully updated." ); + result.setStatus( JobStatus.SUCCESS ); + } else { + result.setStatus( JobStatus.FAIL ); + } + return result; + } + public JobResult addRepositoryToOrganizationalUnit( final String jobId, final String organizationalUnitName, final String repositoryName ) { @@ -507,6 +566,7 @@ public JobResult addRepositoryToOrganizationalUnit( final String jobId, } OrganizationalUnit organizationalUnit = new OrganizationalUnitImpl( organizationalUnitName, + null, null ); GitRepository repo = new GitRepository( repositoryName ); @@ -543,7 +603,7 @@ public JobResult removeRepositoryFromOrganizationalUnit( final String jobId, return result; } - OrganizationalUnit organizationalUnit = new OrganizationalUnitImpl( organizationalUnitName, null ); + OrganizationalUnit organizationalUnit = new OrganizationalUnitImpl( organizationalUnitName, null, null ); GitRepository repo = new GitRepository( repositoryName ); try { organizationalUnitService.removeRepository( organizationalUnit, diff --git a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestScheduler.java b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestScheduler.java index 9c80897e2b..18146fc8e2 100644 --- a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestScheduler.java +++ b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/JobRequestScheduler.java @@ -36,6 +36,7 @@ import org.guvnor.rest.backend.cmd.RemoveRepositoryCmd; import org.guvnor.rest.backend.cmd.RemoveRepositoryFromOrgUnitCmd; import org.guvnor.rest.backend.cmd.TestProjectCmd; +import org.guvnor.rest.backend.cmd.UpdateOrgUnitCmd; import org.guvnor.rest.client.AddRepositoryToOrganizationalUnitRequest; import org.guvnor.rest.client.CompileProjectRequest; import org.guvnor.rest.client.CreateOrCloneRepositoryRequest; @@ -49,6 +50,7 @@ import org.guvnor.rest.client.RemoveRepositoryFromOrganizationalUnitRequest; import org.guvnor.rest.client.RemoveRepositoryRequest; import org.guvnor.rest.client.TestProjectRequest; +import org.guvnor.rest.client.UpdateOrganizationalUnitRequest; import org.kie.internal.executor.api.CommandContext; import org.kie.internal.executor.api.ExecutorService; import org.slf4j.Logger; @@ -151,6 +153,14 @@ public void createOrganizationalUnitRequest( CreateOrganizationalUnitRequest job excuteOperationEvent.fire(new ExecuteOperationEvent(params)); } + public void updateOrganizationalUnitRequest( UpdateOrganizationalUnitRequest jobRequest ) { + Map params = getContext(jobRequest).getData(); + params.put("CommandClass", UpdateOrgUnitCmd.class.getName()); + params.put("Operation", "updateOrgUnit"); + + excuteOperationEvent.fire(new ExecuteOperationEvent(params)); + } + public void addRepositoryToOrganizationalUnitRequest( AddRepositoryToOrganizationalUnitRequest jobRequest ) { Map params = getContext(jobRequest).getData(); params.put("CommandClass", AddRepositoryToOrgUnitCmd.class.getName()); diff --git a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/ProjectResource.java b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/ProjectResource.java index 9301949579..48a8939c1b 100644 --- a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/ProjectResource.java +++ b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/ProjectResource.java @@ -63,6 +63,7 @@ import org.guvnor.rest.client.RepositoryRequest; import org.guvnor.rest.client.RepositoryResponse; import org.guvnor.rest.client.TestProjectRequest; +import org.guvnor.rest.client.UpdateOrganizationalUnitRequest; import org.guvnor.structure.organizationalunit.OrganizationalUnitService; import org.guvnor.structure.repositories.Repository; import org.guvnor.structure.repositories.RepositoryService; @@ -413,6 +414,7 @@ public Collection getOrganizationalUnits() { OrganizationalUnit orgUnit = new OrganizationalUnit(); orgUnit.setName( ou.getName() ); orgUnit.setOwner( ou.getOwner() ); + orgUnit.setDefaultGroupId( ou.getDefaultGroupId() ); List repoNames = new ArrayList(); for ( Repository r : ou.getRepositories() ) { repoNames.add( r.getAlias() ); @@ -435,6 +437,7 @@ public OrganizationalUnit getOrganizationalUnit( @PathParam("organizationalUnitN OrganizationalUnit orgUnit = new OrganizationalUnit(); orgUnit.setName( origOrgUnit.getName() ); orgUnit.setOwner( origOrgUnit.getOwner() ); + orgUnit.setDefaultGroupId( origOrgUnit.getDefaultGroupId() ); List repoNames = new ArrayList(); for ( Repository r : origOrgUnit.getRepositories() ) { repoNames.add( r.getAlias() ); @@ -449,7 +452,8 @@ public OrganizationalUnit getOrganizationalUnit( @PathParam("organizationalUnitN @Produces(MediaType.APPLICATION_JSON) @Path("/organizationalunits") public Response createOrganizationalUnit( OrganizationalUnit organizationalUnit ) { - logger.debug( "-----createOrganizationalUnit--- , OrganizationalUnit name: {}, OrganizationalUnit owner: {}", organizationalUnit.getName(), organizationalUnit.getOwner() ); + logger.debug( "-----createOrganizationalUnit--- , OrganizationalUnit name: {}, OrganizationalUnit owner: {}, Default group id : {}", + organizationalUnit.getName(), organizationalUnit.getOwner(), organizationalUnit.getDefaultGroupId() ); String id = "" + System.currentTimeMillis() + "-" + counter.incrementAndGet(); CreateOrganizationalUnitRequest jobRequest = new CreateOrganizationalUnitRequest(); @@ -457,6 +461,7 @@ public Response createOrganizationalUnit( OrganizationalUnit organizationalUnit jobRequest.setJobId( id ); jobRequest.setOrganizationalUnitName( organizationalUnit.getName() ); jobRequest.setOwner( organizationalUnit.getOwner() ); + jobRequest.setDefaultGroupId( organizationalUnit.getDefaultGroupId() ); jobRequest.setRepositories( organizationalUnit.getRepositories() ); addAcceptedJobResult( id ); @@ -466,6 +471,29 @@ public Response createOrganizationalUnit( OrganizationalUnit organizationalUnit return createAcceptedStatusResponse( jobRequest ); } + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/organizationalunits") + public Response updateOrganizationalUnit( OrganizationalUnit organizationalUnit ) { + logger.debug( "-----updateOrganizationalUnit--- , OrganizationalUnit name: {}, OrganizationalUnit owner: {}, Default group id : {}", + organizationalUnit.getName(), organizationalUnit.getOwner(), organizationalUnit.getDefaultGroupId() ); + + String id = "" + System.currentTimeMillis() + "-" + counter.incrementAndGet(); + UpdateOrganizationalUnitRequest jobRequest = new UpdateOrganizationalUnitRequest(); + jobRequest.setStatus( JobStatus.ACCEPTED ); + jobRequest.setJobId( id ); + jobRequest.setOrganizationalUnitName( organizationalUnit.getName() ); + jobRequest.setOwner( organizationalUnit.getOwner() ); + jobRequest.setDefaultGroupId( organizationalUnit.getDefaultGroupId() ); + + addAcceptedJobResult( id ); + + jobRequestObserver.updateOrganizationalUnitRequest( jobRequest ); + + return createAcceptedStatusResponse( jobRequest ); + } + @POST @Produces(MediaType.APPLICATION_JSON) @Path("/organizationalunits/{organizationalUnitName}/repositories/{repositoryName}") diff --git a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/CreateOrgUnitCmd.java b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/CreateOrgUnitCmd.java index a5f23b6602..589fe82f4c 100644 --- a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/CreateOrgUnitCmd.java +++ b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/CreateOrgUnitCmd.java @@ -16,7 +16,11 @@ public JobResult internalExecute(CommandContext ctx, JobRequest request) throws JobResult result = null; try { - result = helper.createOrganizationalUnit( jobRequest.getJobId(), jobRequest.getOrganizationalUnitName(), jobRequest.getOwner(), jobRequest.getRepositories() ); + result = helper.createOrganizationalUnit( jobRequest.getJobId(), + jobRequest.getOrganizationalUnitName(), + jobRequest.getOwner(), + jobRequest.getDefaultGroupId(), + jobRequest.getRepositories() ); } finally { JobStatus status = result != null ? result.getStatus() : JobStatus.SERVER_ERROR; logger.debug( "-----createOrganizationalUnit--- , OrganizationalUnit name: {}, OrganizationalUnit owner: {} [{}]", diff --git a/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/UpdateOrgUnitCmd.java b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/UpdateOrgUnitCmd.java new file mode 100644 index 0000000000..5eb5e13f4e --- /dev/null +++ b/guvnor-rest/guvnor-rest-backend/src/main/java/org/guvnor/rest/backend/cmd/UpdateOrgUnitCmd.java @@ -0,0 +1,46 @@ +/* + * Copyright 2014 JBoss Inc + * + * 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.rest.backend.cmd; + +import org.guvnor.rest.backend.JobRequestHelper; +import org.guvnor.rest.client.JobRequest; +import org.guvnor.rest.client.JobResult; +import org.guvnor.rest.client.JobStatus; +import org.guvnor.rest.client.UpdateOrganizationalUnitRequest; +import org.kie.internal.executor.api.CommandContext; + +public class UpdateOrgUnitCmd extends AbstractJobCommand { + + @Override + public JobResult internalExecute(CommandContext ctx, JobRequest request) throws Exception { + JobRequestHelper helper = getHelper(ctx); + UpdateOrganizationalUnitRequest jobRequest = (UpdateOrganizationalUnitRequest) request; + + JobResult result = null; + try { + result = helper.updateOrganizationalUnit( jobRequest.getJobId(), + jobRequest.getOrganizationalUnitName(), + jobRequest.getOwner(), + jobRequest.getDefaultGroupId() ); + } finally { + JobStatus status = result != null ? result.getStatus() : JobStatus.SERVER_ERROR; + logger.debug( "-----updateOrganizationalUnit--- , OrganizationalUnit name: {}, OrganizationalUnit owner: {} {} [{}]", + jobRequest.getOrganizationalUnitName(), jobRequest.getOwner(), jobRequest.getDefaultGroupId(), status ); + } + return result; + } +} diff --git a/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/CreateOrganizationalUnitRequest.java b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/CreateOrganizationalUnitRequest.java index 20cae91c33..f77db22fc3 100644 --- a/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/CreateOrganizationalUnitRequest.java +++ b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/CreateOrganizationalUnitRequest.java @@ -9,6 +9,7 @@ public class CreateOrganizationalUnitRequest extends JobRequest { private String organizationalUnitName; private String owner; + private String defaultGroupId; private String description; private List repositories; @@ -28,6 +29,14 @@ public void setOwner( String owner ) { this.owner = owner; } + public String getDefaultGroupId() { + return defaultGroupId; + } + + public void setDefaultGroupId( String defaultGroupId ) { + this.defaultGroupId = defaultGroupId; + } + public String getDescription() { return description; } diff --git a/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/OrganizationalUnit.java b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/OrganizationalUnit.java index 071faf0def..5d3f4a318b 100644 --- a/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/OrganizationalUnit.java +++ b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/OrganizationalUnit.java @@ -24,6 +24,7 @@ public class OrganizationalUnit extends Entity { private String owner; + private String defaultGroupId; private List repositories; public String getOwner() { @@ -34,6 +35,14 @@ public void setOwner(String owner) { this.owner = owner; } + public String getDefaultGroupId() { + return defaultGroupId; + } + + public void setDefaultGroupId( String defaultGroupId ) { + this.defaultGroupId = defaultGroupId; + } + public List getRepositories() { return repositories; } diff --git a/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/UpdateOrganizationalUnitRequest.java b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/UpdateOrganizationalUnitRequest.java new file mode 100644 index 0000000000..ebde75ace0 --- /dev/null +++ b/guvnor-rest/guvnor-rest-client/src/main/java/org/guvnor/rest/client/UpdateOrganizationalUnitRequest.java @@ -0,0 +1,51 @@ +/* + * Copyright 2014 JBoss Inc + * + * 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.rest.client; + +import org.jboss.errai.common.client.api.annotations.Portable; + +@Portable +public class UpdateOrganizationalUnitRequest extends JobRequest { + + private String organizationalUnitName; + private String owner; + private String defaultGroupId; + + public String getOrganizationalUnitName() { + return organizationalUnitName; + } + + public void setOrganizationalUnitName( String organizationalUnitName ) { + this.organizationalUnitName = organizationalUnitName; + } + + public String getOwner() { + return owner; + } + + public void setOwner( String owner ) { + this.owner = owner; + } + + public String getDefaultGroupId() { + return defaultGroupId; + } + + public void setDefaultGroupId( String defaultGroupId ) { + this.defaultGroupId = defaultGroupId; + } +} diff --git a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnit.java b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnit.java index 2798470231..396771d339 100644 --- a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnit.java +++ b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnit.java @@ -12,6 +12,8 @@ public interface OrganizationalUnit extends RuntimeResource, Cacheable { String getOwner(); + String getDefaultGroupId(); + Collection getRepositories(); } diff --git a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnitService.java b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnitService.java index e5c6ae6535..a0b3d0454f 100644 --- a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnitService.java +++ b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/OrganizationalUnitService.java @@ -13,14 +13,17 @@ public interface OrganizationalUnitService { Collection getOrganizationalUnits(); OrganizationalUnit createOrganizationalUnit( final String name, - final String owner ); + final String owner, + final String defaultGroupId); OrganizationalUnit createOrganizationalUnit( final String name, final String owner, + final String defaultGroupId, final Collection repositories ); - void updateOrganizationalUnitOwner( final String name, - final String owner ); + OrganizationalUnit updateOrganizationalUnit( final String name, + final String owner, + final String defaultGroupId); void addRepository( final OrganizationalUnit organizationalUnit, final Repository repository ); @@ -38,4 +41,7 @@ void removeRole( final OrganizationalUnit organizationalUnit, OrganizationalUnit getParentOrganizationalUnit( final Repository repository ); + String getSanitizedDefaultGroupId( final String proposedGroupId ); + + Boolean isValidGroupId( final String proposedGroupId ); } diff --git a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/impl/OrganizationalUnitImpl.java b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/impl/OrganizationalUnitImpl.java index 4d96dd849c..ed7ddef3b0 100644 --- a/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/impl/OrganizationalUnitImpl.java +++ b/guvnor-structure/guvnor-structure-api/src/main/java/org/guvnor/structure/organizationalunit/impl/OrganizationalUnitImpl.java @@ -12,6 +12,7 @@ public class OrganizationalUnitImpl implements OrganizationalUnit { private String name; + private String defaultGroupId; private String owner; private Collection repositories = new ArrayList(); @@ -22,9 +23,11 @@ public OrganizationalUnitImpl() { } public OrganizationalUnitImpl( final String name, - final String owner ) { + final String owner, + final String defaultGroupId ) { this.name = name; this.owner = owner; + this.defaultGroupId = defaultGroupId; } @Override @@ -37,6 +40,11 @@ public String getOwner() { return owner; } + @Override + public String getDefaultGroupId() { + return defaultGroupId; + } + @Override public Collection getRepositories() { return repositories; @@ -90,7 +98,7 @@ public int hashCode() { @Override public String toString() { return "OrganizationalUnitImpl [name=" + name + ", owner=" + owner + ", repositories=" + repositories - + ", roles=" + roles + "]"; + + ", roles=" + roles + ", defaultGroupId=" + defaultGroupId + "]"; } diff --git a/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitFactoryImpl.java b/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitFactoryImpl.java index dfd18ee4b9..d490f6399b 100644 --- a/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitFactoryImpl.java +++ b/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitFactoryImpl.java @@ -19,7 +19,8 @@ public class OrganizationalUnitFactoryImpl implements OrganizationalUnitFactory public OrganizationalUnit newOrganizationalUnit( ConfigGroup groupConfig ) { OrganizationalUnitImpl organizationalUnit = new OrganizationalUnitImpl( groupConfig.getName(), - groupConfig.getConfigItemValue( "owner" ) ); + groupConfig.getConfigItemValue( "owner" ), + groupConfig.getConfigItemValue( "defaultGroupId" ) ); ConfigItem> repositories = groupConfig.getConfigItem( "repositories" ); if ( repositories != null ) { for ( String alias : repositories.getValue() ) { diff --git a/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitServiceImpl.java b/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitServiceImpl.java index 44b11cf62c..15d19b4068 100644 --- a/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitServiceImpl.java +++ b/guvnor-structure/guvnor-structure-backend/src/main/java/org/guvnor/structure/backend/organizationalunit/OrganizationalUnitServiceImpl.java @@ -69,6 +69,14 @@ public void loadOrganizationalUnits() { Collection groups = configurationService.getConfiguration( ConfigType.ORGANIZATIONAL_UNIT ); if ( groups != null ) { for ( ConfigGroup groupConfig : groups ) { + // Make sure existing Organizational Units are correctly initialized with a default group id. + String ouName = groupConfig.getName(); + String defaultGroupId = groupConfig.getConfigItemValue( "defaultGroupId" ); + if ( defaultGroupId == null || defaultGroupId.trim().isEmpty() ) { + groupConfig.setConfigItem( configurationFactory.newConfigItem( "defaultGroupId", getSanitizedDefaultGroupId( ouName ) ) ); + configurationService.updateConfiguration( groupConfig ); + } + OrganizationalUnit ou = organizationalUnitFactory.newOrganizationalUnit( groupConfig ); registeredOrganizationalUnits.put( ou.getName(), ou ); @@ -88,12 +96,16 @@ public Collection getOrganizationalUnits() { @Override public OrganizationalUnit createOrganizationalUnit( final String name, - final String owner ) { + final String owner, + final String defaultGroupId ) { final ConfigGroup groupConfig = configurationFactory.newConfigGroup( ConfigType.ORGANIZATIONAL_UNIT, name, "" ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "owner", owner ) ); + String _defaultGroupId = defaultGroupId == null || defaultGroupId.trim().isEmpty() ? getSanitizedDefaultGroupId( name ) : defaultGroupId; + groupConfig.addConfigItem( configurationFactory.newConfigItem( "defaultGroupId", + _defaultGroupId ) ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "repositories", new ArrayList() ) ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "security:roles", @@ -112,12 +124,16 @@ public OrganizationalUnit createOrganizationalUnit( final String name, @Override public OrganizationalUnit createOrganizationalUnit( final String name, final String owner, + final String defaultGroupId, final Collection repositories ) { final ConfigGroup groupConfig = configurationFactory.newConfigGroup( ConfigType.ORGANIZATIONAL_UNIT, name, "" ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "owner", owner ) ); + String _defaultGroupId = defaultGroupId == null || defaultGroupId.trim().isEmpty() ? getSanitizedDefaultGroupId( name ) : defaultGroupId; + groupConfig.addConfigItem( configurationFactory.newConfigItem( "defaultGroupId", + _defaultGroupId ) ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "repositories", getRepositoryAliases( repositories ) ) ); groupConfig.addConfigItem( configurationFactory.newConfigItem( "security:roles", @@ -142,13 +158,20 @@ private List getRepositoryAliases( final Collection reposito } @Override - public void updateOrganizationalUnitOwner( final String name, - final String owner ) { + public OrganizationalUnit updateOrganizationalUnit( final String name, + final String owner, + final String defaultGroupId) { final ConfigGroup thisGroupConfig = findGroupConfig( name ); if ( thisGroupConfig != null ) { thisGroupConfig.setConfigItem( configurationFactory.newConfigItem( "owner", owner ) ); + // As per loadOrganizationalUnits(), all Organizational Units should have the default group id value set + String _defaultGroupId = defaultGroupId == null || defaultGroupId.trim().isEmpty() ? + thisGroupConfig.getConfigItemValue( "defaultGroupId" ) : defaultGroupId; + thisGroupConfig.setConfigItem( configurationFactory.newConfigItem( "defaultGroupId", + _defaultGroupId ) ); + configurationService.updateConfiguration( thisGroupConfig ); final OrganizationalUnit updatedOrganizationalUnit = organizationalUnitFactory.newOrganizationalUnit( thisGroupConfig ); @@ -157,6 +180,7 @@ public void updateOrganizationalUnitOwner( final String name, updatedOrganizationalUnitEvent.fire( new UpdatedOrganizationalUnitEvent( updatedOrganizationalUnit, sessionInfo ) ); + return updatedOrganizationalUnit; } else { throw new IllegalArgumentException( "OrganizationalUnit " + name + " not found" ); } @@ -287,6 +311,20 @@ public OrganizationalUnit getParentOrganizationalUnit( final Repository reposito return null; } + @Override + public String getSanitizedDefaultGroupId( final String proposedGroupId ) { + //Only [A-Za-z0-9_\-.] are valid so strip everything else out + return proposedGroupId != null ? proposedGroupId.replaceAll( "[^A-Za-z0-9_\\-.]", "" ) : proposedGroupId; + } + + @Override + public Boolean isValidGroupId( final String proposedGroupId ) { + if ( proposedGroupId != null && !proposedGroupId.trim().isEmpty() ) { + if ( proposedGroupId.length() == getSanitizedDefaultGroupId( proposedGroupId ).length() ) return true; + } + return false; + } + public void updateRegisteredOU( @Observes @OrgUnit SystemRepositoryChangedEvent changedEvent ) { registeredOrganizationalUnits.clear(); loadOrganizationalUnits();