Skip to content

Commit

Permalink
LA-17: ListView "Quick View" functionality [Selenium Tests fixed].
Browse files Browse the repository at this point in the history
Introduced ShowView Configuration Unit.
Added handling of missing ListView & ShowView Configuration Units: Default units populated with entity model persistent fields.
  • Loading branch information
max-dev committed Nov 26, 2012
1 parent 38fd797 commit d1dc817
Show file tree
Hide file tree
Showing 44 changed files with 576 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.lightadmin.core.config.domain.filter.FiltersConfigurationUnit;
import org.lightadmin.core.config.domain.fragment.ListViewConfigurationUnit;
import org.lightadmin.core.config.domain.scope.ScopesConfigurationUnit;
import org.lightadmin.core.config.domain.show.ShowViewConfigurationUnit;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;

public interface DomainConfigurationSource {
Expand All @@ -21,6 +22,8 @@ public interface DomainConfigurationSource {

ListViewConfigurationUnit getListViewFragment();

ShowViewConfigurationUnit getShowViewFragment();

ScreenContextConfigurationUnit getScreenContext();

EntityMetadataConfigurationUnit getEntityConfiguration();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,30 @@
import org.lightadmin.core.config.domain.unit.ConfigurationUnitsConverter;
import org.lightadmin.core.config.domain.unit.support.ConfigurationUnitPostProcessor;
import org.lightadmin.core.config.domain.unit.support.DomainTypeMetadataAwareConfigurationUnitPostProcessor;
import org.lightadmin.core.config.domain.unit.support.EmptyConfigurationUnitPostProcessor;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadataResolver;
import org.lightadmin.core.util.DomainConfigurationUtils;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;

import java.util.Set;

import static com.google.common.collect.Sets.newLinkedHashSet;

public class DomainConfigurationSourceFactory {

private final DomainTypeEntityMetadataResolver entityMetadataResolver;

private final ConfigurationUnitPostProcessor configurationUnitPostProcessor;
private final ConfigurationUnitPostProcessor[] configurationUnitPostProcessors;

public DomainConfigurationSourceFactory( final DomainTypeEntityMetadataResolver entityMetadataResolver ) {
this( entityMetadataResolver, new DomainTypeMetadataAwareConfigurationUnitPostProcessor( entityMetadataResolver ) );
this( entityMetadataResolver, new EmptyConfigurationUnitPostProcessor( entityMetadataResolver ), new DomainTypeMetadataAwareConfigurationUnitPostProcessor( entityMetadataResolver ) );
}

public DomainConfigurationSourceFactory( final DomainTypeEntityMetadataResolver entityMetadataResolver,
final ConfigurationUnitPostProcessor configurationUnitPostProcessor ) {

public DomainConfigurationSourceFactory( final DomainTypeEntityMetadataResolver entityMetadataResolver, final ConfigurationUnitPostProcessor... configurationUnitPostProcessors ) {
this.entityMetadataResolver = entityMetadataResolver;
this.configurationUnitPostProcessor = configurationUnitPostProcessor;
this.configurationUnitPostProcessors = configurationUnitPostProcessors;
}

public DomainConfigurationSource createConfigurationSource( Object configurationMetadata ) {
Expand All @@ -49,12 +52,24 @@ public DomainConfigurationSource createConfigurationSource( Object configuration
}

DomainConfigurationSource domainConfigurationUnitsSource( final ConfigurationUnits configurationUnits ) {
final DomainTypeEntityMetadata domainTypeEntityMetadata = entityMetadataResolver.resolveEntityMetadata( configurationUnits.getDomainType() );
final Class<?> domainType = configurationUnits.getDomainType();

final DomainTypeEntityMetadata domainTypeEntityMetadata = entityMetadataResolver.resolveEntityMetadata( domainType );

final ConfigurationUnits processedConfigurationUnits = processConfigurationUnits( configurationUnits );

return new DomainConfigurationUnitsSource( domainTypeEntityMetadata, processedConfigurationUnits );
}

private ConfigurationUnits processConfigurationUnits( final ConfigurationUnits configurationUnits ) {
final Set<ConfigurationUnit> processedConfigurationUnits = newLinkedHashSet();
for ( ConfigurationUnit configurationUnit : configurationUnits ) {
configurationUnitPostProcessor.postProcess( configurationUnit );
ConfigurationUnit processedConfigurationUnit = configurationUnit;
for ( ConfigurationUnitPostProcessor configurationUnitPostProcessor : configurationUnitPostProcessors ) {
processedConfigurationUnit = configurationUnitPostProcessor.postProcess( processedConfigurationUnit );
}
processedConfigurationUnits.add( processedConfigurationUnit );
}

return new DomainConfigurationUnitsSource( domainTypeEntityMetadata, configurationUnits );
return new ConfigurationUnits( configurationUnits.getDomainType(), processedConfigurationUnits );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ public enum DomainConfigurationUnitType {
CONFIGURATION( "configuration" ),
LIST_VIEW( "listView" ),
SCOPES( "scopes" ),
FILTERS( "filters" );
FILTERS( "filters" ),
SHOW_VIEW( "showView" );

private final String name;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.lightadmin.core.config.domain.filter.FiltersConfigurationUnit;
import org.lightadmin.core.config.domain.fragment.ListViewConfigurationUnit;
import org.lightadmin.core.config.domain.scope.ScopesConfigurationUnit;
import org.lightadmin.core.config.domain.show.ShowViewConfigurationUnit;
import org.lightadmin.core.config.domain.unit.ConfigurationUnits;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;
import org.springframework.util.Assert;
Expand Down Expand Up @@ -53,6 +54,11 @@ public ListViewConfigurationUnit getListViewFragment() {
return configurationUnits.getListViewFragment();
}

@Override
public ShowViewConfigurationUnit getShowViewFragment() {
return configurationUnits.getShowViewConfigurationUnit();
}

@Override
public ScreenContextConfigurationUnit getScreenContext() {
return configurationUnits.getScreenContext();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public void validate( final DomainConfigurationSource domainConfigurationSource,
validateFilters( domainConfigurationSource, problemReporter );

validateListView( domainConfigurationSource, problemReporter );

validateShowView( domainConfigurationSource, problemReporter );
}

void validateDomainType( final DomainConfigurationSource domainConfigurationSource, final ProblemReporter problemReporter ) {
Expand All @@ -51,6 +53,10 @@ void validateDomainType( final DomainConfigurationSource domainConfigurationSour
}
}

void validateShowView( final DomainConfigurationSource domainConfigurationSource, final ProblemReporter problemReporter ) {
validateFields( domainConfigurationSource.getShowViewFragment().getFields(), domainConfigurationSource, DomainConfigurationUnitType.SHOW_VIEW, problemReporter );
}

void validateListView( final DomainConfigurationSource domainConfigurationSource, final ProblemReporter problemReporter ) {
final Fragment listViewFragment = domainConfigurationSource.getListViewFragment().getFragment();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.lightadmin.core.config.domain.filter.FiltersConfigurationUnit;
import org.lightadmin.core.config.domain.fragment.Fragment;
import org.lightadmin.core.config.domain.scope.ScopesConfigurationUnit;
import org.lightadmin.core.config.domain.show.ShowViewConfigurationUnit;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;
import org.lightadmin.core.persistence.repository.DynamicJpaRepository;
import org.springframework.util.Assert;
Expand Down Expand Up @@ -47,6 +48,10 @@ public Fragment getListViewFragment() {
return domainConfigurationSource.getListViewFragment().getFragment();
}

public ShowViewConfigurationUnit getShowViewFragment() {
return domainConfigurationSource.getShowViewFragment();
}

public ScreenContextConfigurationUnit getScreenContext() {
return domainConfigurationSource.getScreenContext();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import org.apache.commons.lang.StringUtils;
import org.lightadmin.core.config.domain.filter.FilterMetadata;
import org.lightadmin.core.persistence.metamodel.DomainTypeAttributeMetadata;
import org.springframework.util.ClassUtils;

import javax.annotation.Nullable;
Expand Down Expand Up @@ -46,6 +48,37 @@ public static Set<FieldMetadata> customFields( Set<FieldMetadata> fieldMetadatas
return newLinkedHashSet( Collections2.filter( fieldMetadatas, customFieldMetadataPredicate() ) );
}

public static FieldMetadata primaryKeyPersistentField( Set<FieldMetadata> fields ) {
for ( FieldMetadata field : persistentFields( fields ) ) {
PersistentFieldMetadata persistentFieldMetadata = ( PersistentFieldMetadata ) field;
if ( persistentFieldMetadata.isPrimaryKey() ) {
return persistentFieldMetadata;
}
}
return null;
}

public static Set<FieldMetadata> addPrimaryKeyPersistentField( final Set<FieldMetadata> fields, final DomainTypeAttributeMetadata idAttribute ) {
final Set<FieldMetadata> fieldsWithPrimaryKey = newLinkedHashSet();
fieldsWithPrimaryKey.add( new PersistentFieldMetadata( StringUtils.capitalize( idAttribute.getName() ), idAttribute.getName(), true ) );
fieldsWithPrimaryKey.addAll( fields );
return fieldsWithPrimaryKey;
}

public static PersistentFieldMetadata getPersistentField( final Set<FieldMetadata> fields, String fieldName ) {
for ( FieldMetadata field : persistentFields( fields ) ) {
PersistentFieldMetadata persistentFieldMetadata = ( PersistentFieldMetadata ) field;
if ( StringUtils.equals( persistentFieldMetadata.getField(), fieldName ) ) {
return persistentFieldMetadata;
}
}
return null;
}

public static boolean containsPersistentField( final Set<FieldMetadata> fields, String fieldName ) {
return getPersistentField( fields, fieldName ) != null;
}

private static class FieldMetadataExtractor implements Function<FilterMetadata, FieldMetadata> {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ public interface Persistable {
DomainTypeAttributeMetadata getAttributeMetadata();

String getField();

boolean isPrimaryKey();
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,15 @@ public class PersistentFieldMetadata extends AbstractFieldMetadata implements Do

private final String field;

private boolean primaryKey;

private DomainTypeAttributeMetadata attributeMetadata;

public PersistentFieldMetadata( final String name, final String field, boolean primaryKey ) {
this( name, field );
this.primaryKey = primaryKey;
}

public PersistentFieldMetadata( final String name, final String field ) {
super( name );
this.field = field;
Expand All @@ -19,6 +26,15 @@ public String getField() {
return field;
}

@Override
public boolean isPrimaryKey() {
return primaryKey;
}

public void setPrimaryKey( final boolean primaryKey ) {
this.primaryKey = primaryKey;
}

@Override
public void setAttributeMetadata( final DomainTypeAttributeMetadata attributeMetadata ) {
this.attributeMetadata = attributeMetadata;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
package org.lightadmin.core.config.domain.fragment;

import org.lightadmin.core.config.bootstrap.parsing.configuration.DomainConfigurationUnitType;
import org.lightadmin.core.config.domain.field.FieldMetadata;
import org.lightadmin.core.config.domain.field.PersistentFieldMetadata;
import org.lightadmin.core.config.domain.unit.DomainTypeConfigurationUnit;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadataAware;

public class FragmentListViewConfigurationUnit extends DomainTypeConfigurationUnit implements ListViewConfigurationUnit {
import java.util.Set;

private final Fragment fragment;
import static org.lightadmin.core.config.domain.field.FieldMetadataUtils.*;

public class FragmentListViewConfigurationUnit extends DomainTypeConfigurationUnit implements ListViewConfigurationUnit, DomainTypeEntityMetadataAware {

private Fragment fragment;

FragmentListViewConfigurationUnit( Class<?> domainType, final Fragment fragment ) {
super( domainType );
Expand All @@ -22,4 +30,17 @@ public Fragment getFragment() {
public DomainConfigurationUnitType getDomainConfigurationUnitType() {
return DomainConfigurationUnitType.LIST_VIEW;
}

@Override
public void setDomainTypeEntityMetadata( final DomainTypeEntityMetadata domainTypeEntityMetadata ) {
final Set<FieldMetadata> fields = this.fragment.getFields();

if ( containsPersistentField( fields, domainTypeEntityMetadata.getIdAttribute().getName() ) ) {
final PersistentFieldMetadata primaryKeyField = getPersistentField( fields, domainTypeEntityMetadata.getIdAttribute().getName() );
primaryKeyField.setPrimaryKey( true );
return;
}

this.fragment = new TableFragment( addPrimaryKeyPersistentField( fields, domainTypeEntityMetadata.getIdAttribute() ) );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public class TableFragment implements Fragment {
TableFragment() {
}

public TableFragment( final Set<FieldMetadata> fields ) {
this.fields = fields;
}

public void addField( FieldMetadata fieldMetadata ) {
fields.add( fieldMetadata );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import org.lightadmin.core.config.domain.field.AbstractFieldMetadata;
import org.lightadmin.core.config.domain.field.CustomFieldMetadata;
import org.lightadmin.core.config.domain.field.PersistentFieldMetadata;
import org.lightadmin.core.config.domain.field.TransientFieldMetadata;
import org.lightadmin.core.config.domain.renderer.FieldValueRenderer;
import org.lightadmin.core.config.domain.unit.DomainTypeConfigurationUnitBuilder;

import static org.springframework.util.StringUtils.capitalize;

public class TableListViewConfigurationUnitBuilder extends DomainTypeConfigurationUnitBuilder<ListViewConfigurationUnit> implements ListViewConfigurationUnitBuilder {

private TableFragment tableFragment;
Expand All @@ -23,7 +26,7 @@ public ListViewConfigurationUnitBuilder field( final String fieldName ) {
if ( currentFieldMetadata != null ) {
tableFragment.addField( currentFieldMetadata );
}
currentFieldMetadata = new PersistentFieldMetadata( fieldName, fieldName );
currentFieldMetadata = new PersistentFieldMetadata( capitalize( fieldName ), fieldName );
return this;
}

Expand All @@ -38,7 +41,10 @@ public ListViewConfigurationUnitBuilder alias( final String alias ) {

@Override
public ListViewConfigurationUnitBuilder attribute( final String fieldName ) {
// Transient/User runtime attributes
if ( currentFieldMetadata != null ) {
tableFragment.addField( currentFieldMetadata );
}
currentFieldMetadata = new TransientFieldMetadata( capitalize( fieldName ), fieldName );
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import org.lightadmin.core.util.Transformer;

import javax.annotation.Nullable;
import java.io.Serializable;

public interface FieldValueRenderer<F> extends Renderer, Transformer<F, String>, Serializable {

@Override
String apply( @Nullable F input );
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.lightadmin.core.config.domain.show;

import org.lightadmin.core.config.bootstrap.parsing.configuration.DomainConfigurationUnitType;
import org.lightadmin.core.config.domain.field.FieldMetadata;
import org.lightadmin.core.config.domain.field.PersistentFieldMetadata;
import org.lightadmin.core.config.domain.unit.DomainTypeConfigurationUnit;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadata;
import org.lightadmin.core.persistence.metamodel.DomainTypeEntityMetadataAware;

import java.util.Iterator;
import java.util.Set;

import static com.google.common.collect.Sets.newLinkedHashSet;
import static org.lightadmin.core.config.domain.field.FieldMetadataUtils.*;

public class DefaultShowViewConfigurationUnit extends DomainTypeConfigurationUnit implements ShowViewConfigurationUnit, DomainTypeEntityMetadataAware {

private Set<FieldMetadata> fields = newLinkedHashSet();

protected DefaultShowViewConfigurationUnit( final Class<?> domainType ) {
super( domainType );
}

public void addField( FieldMetadata fieldMetadata ) {
fields.add( fieldMetadata );
}

public Set<FieldMetadata> getFields() {
return newLinkedHashSet( fields );
}

@Override
public Iterator<FieldMetadata> iterator() {
return getFields().iterator();
}

@Override
public DomainConfigurationUnitType getDomainConfigurationUnitType() {
return DomainConfigurationUnitType.SHOW_VIEW;
}

@Override
public void setDomainTypeEntityMetadata( final DomainTypeEntityMetadata domainTypeEntityMetadata ) {
if ( containsPersistentField( fields, domainTypeEntityMetadata.getIdAttribute().getName() ) ) {
final PersistentFieldMetadata primaryKeyField = getPersistentField( fields, domainTypeEntityMetadata.getIdAttribute().getName() );
primaryKeyField.setPrimaryKey( true );
return;
}

fields = addPrimaryKeyPersistentField( fields, domainTypeEntityMetadata.getIdAttribute() );
}
}
Loading

0 comments on commit d1dc817

Please sign in to comment.