package nl.ipo.cds.etl.theme;
import static org.junit.Assert.fail;
import java.lang.reflect.Type;
import java.sql.Date;
import java.util.Set;
import javax.inject.Inject;
import nl.ipo.cds.attributemapping.operations.discover.annotation.AnnotationOperationDiscoverer;
import nl.ipo.cds.etl.theme.annotation.SkipConfiguration;
import nl.ipo.cds.etl.theme.protectedSite.ProtectedSite;
import nl.ipo.cds.etl.theme.protectedSite.ProtectedSiteThemeConfig;
import org.deegree.geometry.Geometry;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestThemeConfig.Config.class)
public class TestThemeConfig {
@Configuration
@SkipConfiguration
public static class Config {
@Bean
public ThemeConfig<ProtectedSite> protectedSiteConfig () {
return new ProtectedSiteThemeConfig (null, new AnnotationOperationDiscoverer ());
}
}
@Inject
private ThemeConfig<ProtectedSite> config;
@Test
public void testIntrospect () {
assertHasObjectClass (ProtectedSite.class);
assertHasAttribute (ProtectedSite.class, "geometry", Geometry.class);
assertHasAttribute (ProtectedSite.class, "legalFoundationDate", Date.class);
assertHasAttribute (ProtectedSite.class, "legalFoundationDocument", String.class);
assertHasAttribute (ProtectedSite.class, "inspireID", String.class);
assertHasAttribute (ProtectedSite.class, "siteName", String.class);
assertHasAttribute (ProtectedSite.class, "siteDesignation", String[].class);
assertHasAttribute (ProtectedSite.class, "siteProtectionClassification", String[].class);
}
private void assertHasObjectClass (final Class<?> cls) {
final Set<ObjectDescriptor<?>> ds = config.getObjectDescriptors ();
for (final ObjectDescriptor<?> d: ds) {
if (cls.equals (d.getObjectClass ())) {
return;
}
}
fail (String.format ("Class %s not found in object descriptors", cls));
}
private void assertHasAttribute (final Class<?> cls, final String name, final Type type) {
final Set<AttributeDescriptor<?>> as = config.getAttributeDescriptors ();
for (final AttributeDescriptor<?> a: as) {
if (
cls.equals (a.getObjectDescriptor ().getObjectClass ())
&& name.equals (a.getName ())
&& type.equals (a.getAttributeType ())) {
return;
}
}
fail (String.format ("Property %s of class %s not found in attribute descriptors", name, cls));
}
}