/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.contentdata.custom; import org.apache.commons.lang.builder.ToStringBuilder; import com.enonic.cms.core.content.contentdata.MissingRequiredContentDataException; import com.enonic.cms.core.content.contenttype.dataentryconfig.DataEntryConfig; public class GroupDataEntry extends AbstractDataEntrySet implements DataEntrySet { private int groupIndex; public GroupDataEntry( GroupDataEntry other, int newGroupIndex ) { super( other ); this.groupIndex = newGroupIndex; } public GroupDataEntry( String name, String xpath ) { super( resolveName( name, xpath ), DataEntryType.GROUP, xpath ); } public GroupDataEntry( String name, String xpath, int groupIndex ) { super( resolveName( name, xpath ), DataEntryType.GROUP, xpath ); this.groupIndex = groupIndex; } public void validate() { // validate required data doValidateRequiredDataEntries(); // Validate each data entry for ( DataEntry dataEntry : entries ) { dataEntry.validate(); } } private void doValidateRequiredDataEntries() { for ( DataEntryConfig dataEntryConfig : getConfig().getInputConfigs() ) { DataEntry dataEntry = getEntry( dataEntryConfig.getName() ); if ( dataEntryConfig.isRequired() ) { validateRequiredDataEntry( dataEntryConfig, dataEntry ); } } } @Override protected void validateRequiredDataEntry( final DataEntryConfig dataEntryConfig, final DataEntry dataEntry ) { if ( dataEntry == null ) { throw MissingRequiredContentDataException.missingDataEntryInGroup( dataEntryConfig, this ); } else if ( !dataEntry.hasValue() ) { throw MissingRequiredContentDataException.missingDataEntryValueInGroup( dataEntryConfig, this ); } else if ( dataEntry.breaksRequiredContract() ) { throw MissingRequiredContentDataException.missingDataEntryValueInGroup( dataEntryConfig, this ); } } public boolean hasAllDataEntries() { for ( DataEntryConfig dataEntryConfig : getConfig().getInputConfigs() ) { if ( !entryMap.containsKey( dataEntryConfig.getName() ) ) { return false; } } return true; } private static String resolveName( String name, String xpath ) { if ( name == null || name.trim().length() == 0 ) { return xpath; } return name; } public int getGroupIndex() { return groupIndex; } public void setGroupIndex( int groupIndex ) { this.groupIndex = groupIndex; } @Override public String toString() { ToStringBuilder b = new ToStringBuilder( this ); b.append( "name", getName() ); b.append( "groupIndex", groupIndex ); return b.toString(); } }