=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java 2013-03-01 04:09:26 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementService.java 2013-03-01 05:14:56 +0000 @@ -375,10 +375,10 @@ /** - * Returns a DataElementGroup with a given shortName. + * Returns a DataElementGroup with a given short name. * - * @param shortName the shortName of the DataElementGroup to return. - * @return the DataElementGroup with the given shortName, or null if no match. + * @param shortName the short name of the DataElementGroup to return. + * @return the DataElementGroup with the given short name, or null if no match. */ DataElementGroup getDataElementGroupByShortName( String shortName ); === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupService.java 2013-02-04 14:57:16 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupService.java 2013-03-01 05:14:56 +0000 @@ -110,6 +110,23 @@ List getOrganisationUnitGroupByName( String name ); /** + * Returns the OrganisationUnitGroup with the given code. + * + * @param code the code. + * @return the OrganisationUnitGroup with the given code, or null if no match. + */ + OrganisationUnitGroup getOrganisationUnitGroupByCode( String code ); + + /** + * Returns the OrganisationUnitGroup with the given short name. + * + * @param short name the short name. + * @return the OrganisationUnitGroup with the given short name, or null if no match. + */ + OrganisationUnitGroup getOrganisationUnitGroupByShortName( String shortName ); + + + /** * Returns all OrganisationUnitGroups. * * @return a collection of all the OrganisationUnitGroups, or an empty === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupStore.java 2011-12-26 10:07:59 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitGroupStore.java 2013-03-01 05:14:56 +0000 @@ -29,13 +29,13 @@ import java.util.Collection; -import org.hisp.dhis.common.GenericIdentifiableObjectStore; +import org.hisp.dhis.common.GenericNameableObjectStore; /** * @author Lars Helge Overland */ public interface OrganisationUnitGroupStore - extends GenericIdentifiableObjectStore + extends GenericNameableObjectStore { Collection getOrganisationUnitGroupsWithGroupSets(); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitGroupService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitGroupService.java 2013-02-04 14:57:16 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/organisationunit/DefaultOrganisationUnitGroupService.java 2013-03-01 05:14:56 +0000 @@ -27,21 +27,25 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static org.hisp.dhis.i18n.I18nUtils.getCountByName; +import static org.hisp.dhis.i18n.I18nUtils.getObjectsBetween; +import static org.hisp.dhis.i18n.I18nUtils.getObjectsBetweenByName; +import static org.hisp.dhis.i18n.I18nUtils.i18n; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import org.hisp.dhis.common.GenericIdentifiableObjectStore; import org.hisp.dhis.i18n.I18nService; import org.hisp.dhis.system.util.Filter; import org.hisp.dhis.system.util.FilterUtils; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import static org.hisp.dhis.i18n.I18nUtils.*; - /** * @author Torgeir Lorange Ostby - * @version $Id: DefaultOrganisationUnitGroupService.java 5017 2008-04-25 09:19:19Z larshelg $ + * @version $Id: DefaultOrganisationUnitGroupService.java 5017 2008-04-25 + * 09:19:19Z larshelg $ */ @Transactional public class DefaultOrganisationUnitGroupService @@ -60,7 +64,8 @@ private GenericIdentifiableObjectStore organisationUnitGroupSetStore; - public void setOrganisationUnitGroupSetStore( GenericIdentifiableObjectStore organisationUnitGroupSetStore ) + public void setOrganisationUnitGroupSetStore( + GenericIdentifiableObjectStore organisationUnitGroupSetStore ) { this.organisationUnitGroupSetStore = organisationUnitGroupSetStore; } @@ -121,7 +126,26 @@ public List getOrganisationUnitGroupByName( String name ) { - return new ArrayList( i18n( i18nService, organisationUnitGroupStore.getAllEqName( name ) ) ); + return new ArrayList( + i18n( i18nService, organisationUnitGroupStore.getAllEqName( name ) ) ); + } + + public OrganisationUnitGroup getOrganisationUnitGroupByCode( String code ) + { + return i18n( i18nService, organisationUnitGroupStore.getByCode( code ) ); + } + + public OrganisationUnitGroup getOrganisationUnitGroupByShortName( String shortName ) + { + List organisationUnitGroups = new ArrayList( + organisationUnitGroupStore.getAllEqShortName( shortName ) ); + + if ( organisationUnitGroups.isEmpty() ) + { + return null; + } + + return i18n( i18nService, organisationUnitGroups.get( 0 ) ); } public Collection getAllOrganisationUnitGroups() @@ -215,7 +239,8 @@ public List getOrganisationUnitGroupSetByName( String name ) { - return new ArrayList( i18n( i18nService, organisationUnitGroupSetStore.getAllEqName( name ) ) ); + return new ArrayList( i18n( i18nService, + organisationUnitGroupSetStore.getAllEqName( name ) ) ); } public Collection getAllOrganisationUnitGroupSets() @@ -262,7 +287,8 @@ return null; } - public Collection getCompulsoryOrganisationUnitGroupSetsNotAssignedTo( OrganisationUnit organisationUnit ) + public Collection getCompulsoryOrganisationUnitGroupSetsNotAssignedTo( + OrganisationUnit organisationUnit ) { Collection groupSets = new ArrayList(); @@ -292,7 +318,8 @@ return getObjectsBetween( i18nService, organisationUnitGroupSetStore, first, max ); } - public Collection getOrganisationUnitGroupSetsBetweenByName( String name, int first, int max ) + public Collection getOrganisationUnitGroupSetsBetweenByName( String name, int first, + int max ) { return getObjectsBetweenByName( i18nService, organisationUnitGroupSetStore, name, first, max ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitGroup.hbm.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitGroup.hbm.xml 2013-02-28 05:58:17 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/org/hisp/dhis/organisationunit/hibernate/OrganisationUnitGroup.hbm.xml 2013-03-01 05:14:56 +0000 @@ -17,6 +17,8 @@ + + === modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js' --- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js 2013-03-01 04:09:26 +0000 +++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/validationRules.js 2013-03-01 05:14:56 +0000 @@ -116,6 +116,16 @@ "name" : { "required" : true, "rangelength" : [ 2, 160 ] + }, + "shortName" : { + "required" : true, + "alphanumericwithbasicpuncspaces" : true, + "rangelength" : [ 2, 40 ] + }, + "code" : { + "alphanumericwithbasicpuncspaces" : true, + "notOnlyDigits" : false, + "rangelength" : [ 0, 25 ] } }, "organisationUnitGroupSet" : { @@ -272,6 +282,11 @@ "alphanumericwithbasicpuncspaces" : true, "notOnlyDigits" : true }, + "code" : { + "alphanumericwithbasicpuncspaces" : true, + "notOnlyDigits" : false, + "rangelength" : [ 0, 25 ] + } }, "dataElementGroupSet" : { "name" : { === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/AddOrganisationUnitGroupAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/AddOrganisationUnitGroupAction.java 2013-02-28 05:58:17 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/AddOrganisationUnitGroupAction.java 2013-03-01 05:14:56 +0000 @@ -90,6 +90,20 @@ this.name = name; } + private String shortName; + + public void setShortName( String shortName ) + { + this.shortName = shortName; + } + + private String code; + + public void setCode( String code ) + { + this.code = code; + } + private String symbol; public void setSymbol( String symbol ) @@ -118,8 +132,12 @@ public String execute() throws Exception { + code = (code != null && code.trim().length() == 0) ? null : code; + OrganisationUnitGroup organisationUnitGroup = new OrganisationUnitGroup(); organisationUnitGroup.setName( name ); + organisationUnitGroup.setShortName( shortName ); + organisationUnitGroup.setCode( code ); organisationUnitGroup.setSymbol( symbol ); Collection selectedOrganisationUnits = selectionTreeManager @@ -136,9 +154,12 @@ jsonAttributeValues, attributeService ); } - for ( String id : selectedDataSetsList ) + if ( selectedDataSetsList != null ) { - organisationUnitGroup.addDataSet( dataSetService.getDataSet( Integer.parseInt( id ) ) ); + for ( String id : selectedDataSetsList ) + { + organisationUnitGroup.addDataSet( dataSetService.getDataSet( Integer.parseInt( id ) ) ); + } } organisationUnitGroupService.addOrganisationUnitGroup( organisationUnitGroup ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/UpdateOrganisationUnitGroupAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/UpdateOrganisationUnitGroupAction.java 2013-02-28 05:58:17 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/UpdateOrganisationUnitGroupAction.java 2013-03-01 05:14:56 +0000 @@ -99,6 +99,20 @@ this.name = name; } + private String shortName; + + public void setShortName( String shortName ) + { + this.shortName = shortName; + } + + private String code; + + public void setCode( String code ) + { + this.code = code; + } + private String symbol; public void setSymbol( String symbol ) @@ -127,9 +141,13 @@ public String execute() throws Exception { + code = (code != null && code.trim().length() == 0) ? null : code; + OrganisationUnitGroup organisationUnitGroup = organisationUnitGroupService.getOrganisationUnitGroup( id ); organisationUnitGroup.setName( name ); + organisationUnitGroup.setShortName( shortName ); + organisationUnitGroup.setCode( code ); organisationUnitGroup.setSymbol( symbol ); Collection selectedOrganisationUnits = selectionTreeManager @@ -143,14 +161,21 @@ jsonAttributeValues, attributeService ); } - Set dataSets = new HashSet(); - - for ( String id : selectedDataSetsList ) - { - dataSets.add( dataSetService.getDataSet( Integer.parseInt( id ) ) ); - } - - organisationUnitGroup.updateDataSets( dataSets ); + if ( selectedDataSetsList != null ) + { + Set dataSets = new HashSet(); + + for ( String id : selectedDataSetsList ) + { + dataSets.add( dataSetService.getDataSet( Integer.parseInt( id ) ) ); + } + + organisationUnitGroup.updateDataSets( dataSets ); + } + else + { + organisationUnitGroup.getDataSets().clear(); + } organisationUnitGroupService.updateOrganisationUnitGroup( organisationUnitGroup ); === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/ValidateOrganisationUnitGroupAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/ValidateOrganisationUnitGroupAction.java 2013-02-07 12:38:00 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunitgroup/ValidateOrganisationUnitGroupAction.java 2013-03-01 05:14:56 +0000 @@ -27,12 +27,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.opensymphony.xwork2.Action; +import java.util.List; + import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.organisationunit.OrganisationUnitGroup; import org.hisp.dhis.organisationunit.OrganisationUnitGroupService; -import java.util.List; +import com.opensymphony.xwork2.Action; /** * @author Torgeir Lorange Ostby @@ -78,6 +79,20 @@ this.name = name; } + private String shortName; + + public void setShortName( String shortName ) + { + this.shortName = shortName; + } + + private String code; + + public void setCode( String code ) + { + this.code = code; + } + // ------------------------------------------------------------------------- // Output // ------------------------------------------------------------------------- @@ -101,7 +116,8 @@ if ( name != null && !name.trim().isEmpty() ) { - List organisationUnitGroups = organisationUnitGroupService.getOrganisationUnitGroupByName( name ); + List organisationUnitGroups = organisationUnitGroupService + .getOrganisationUnitGroupByName( name ); if ( !organisationUnitGroups.isEmpty() && (id == null || organisationUnitGroups.get( 0 ).getId() != id) ) { @@ -111,7 +127,35 @@ } } - message = "OK"; + if ( shortName != null ) + { + OrganisationUnitGroup match = organisationUnitGroupService.getOrganisationUnitGroupByShortName( shortName ); + + if ( match != null && (id == null || match.getId() != id) ) + { + message = i18n.getString( "short_name_in_use" ); + + return ERROR; + } + } + + if ( code != null && !code.trim().isEmpty() ) + { + OrganisationUnitGroup match = organisationUnitGroupService.getOrganisationUnitGroupByCode( code ); + + if ( match != null && (id == null || match.getId() != id) ) + { + message = i18n.getString( "code_in_use" ); + + return ERROR; + } + } + + // --------------------------------------------------------------------- + // Validation success + // --------------------------------------------------------------------- + + message = "everything_is_ok"; return SUCCESS; } === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties 2013-01-10 10:13:56 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/resources/org/hisp/dhis/oum/i18n_module.properties 2013-03-01 05:14:56 +0000 @@ -102,4 +102,5 @@ select_symbol=Select symbol symbol=Symbol name_code_identifier=Name, code or identifier -identifier=Identifier \ No newline at end of file +identifier=Identifier +short_name_in_use=The short name is already in use. Please choose a different short name \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/addOrganisationUnitGroupForm.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/addOrganisationUnitGroupForm.vm 2013-02-28 05:58:17 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/webapp/dhis-web-maintenance-organisationunit/addOrganisationUnitGroupForm.vm 2013-03-01 05:14:56 +0000 @@ -28,6 +28,9 @@ }); checkValueIsExist( "name", "validateOrganisationUnitGroup.action" ); + checkValueIsExist( "shortName", "validateOrganisationUnitGroup.action" ); + checkValueIsExist( "code", "validateOrganisationUnitGroup.action" ); + } ); @@ -45,6 +48,14 @@ + + + + + + + +