public JpaBeanQuery(Schema schema, EntityManager em, Jpa20BeanManager manager) { this.schema = schema; this.schemaName = schema.getName(); this.em = em; this.manager = manager; }
@Override public void registerSchema(Schema... schema) { for (Schema s : schema) { schemas.put(s.getName(), s); } }
public void registerSchema(Schema schema) { schemas.put(schema.getName(), schema); }
public ConfigIndexedCollection get(Schema schema) { if(!configQueryFeatureEnabled) { throw new IllegalArgumentException("Config query is not enabled."); } return indexCollections.get(schema.getName()); }
public void putIndex(Schema schema) { if(!configQueryFeatureEnabled) { return; } if(configIndexes.get(schema.getName()) != null) { return; } cacheManager.get().registerSchema(schema); ConfigIndex index = new ConfigIndex(schema); configIndexes.put(schema.getName(), index); indexCollections.put(schema.getName(), new ConfigIndexedCollection(index)); }
public void removeIndex(Schema schema) { if(!configQueryFeatureEnabled) { return; } String schemaName = schema.getName(); indexCollections.remove(schemaName); configIndexes.remove(schemaName); if(cacheManager.isPresent()) { cacheManager.get().clear(schemaName); } }
public String toString() { return Objects.toStringHelper(Schema.class).add("id", id).add("name", getName()) .add("type", getType()).add("desc", getDesc()).add("properties", properties) .toString(); }
private BeanId getSingletonId(Schema s, Class<?> configurable) { return BeanId.createSingleton(s.getName()); }
@Override public BeanQuery newQuery(Schema schema) { Map<BeanId, Bean> beans = list(schema.getName()); ArrayList<Bean> sorted = new ArrayList<>(beans.values()); Collections.sort(sorted, new Comparator<Bean>() { @Override public int compare(Bean b1, Bean b2) { return b1.getId().getInstanceId().compareTo(b2.getId().getInstanceId()); } }); return new DefaultBeanQuery(schema, sorted); }
@Override public void regsiterSchema(Schema... schemas) { Map<String, Schema> values = readValues(); for (Schema schema : schemas) { values.put(schema.getName(), schema); writeValues(values); } }
@Override public int hashCode() { return Objects.hashCode(properties, getType(), getDesc(), getName()); }
@Override public void unregister(Class<?>... configurable) { doLookup(); for (Class<?> clazz : configurable) { Schema schema = conversion.convert(clazz, Schema.class); schemaManager.removeSchema(schema.getName()); // ok to not have validation manager available if (validationManager != null) { validationManager.unregister(schema.getName()); } } }
private BeanId getSingletonId(Schema s, Class<?> configurable) { try { ClassIntrospector introspector = new ClassIntrospector(configurable); FieldWrap<Id> id = introspector.getFieldList(Id.class).get(0); String instanceId = id.getStaticValue().toString(); return BeanId.createSingleton(instanceId, s.getName()); } catch (Exception e) { throw new IllegalArgumentException("Configurable class [" + configurable + "] is not a singleton.", e); } }
@Test public void test_get_schemas() { Set<Schema> schemas = generateSchemas(10, 10); for (Schema schema : schemas) { manager.registerSchema(schema); Schema response = manager.getSchema(schema.getName()); assertThat(schema, equalTo(response)); } Map<String, Schema> schemaNames = manager.getSchemas(); for (Schema s : schemas) { assertTrue(schemaNames.containsKey(s.getName())); } }
@Test public void test_add_get_schema() { Set<Schema> schemas = generateSchemas(10, 10); for (Schema schema : schemas) { manager.registerSchema(schema); Schema response = manager.getSchema(schema.getName()); assertThat(schema, equalTo(response)); } }
@Override public <T> List<T> all(Class<T> clazz) { doLookup(); Schema s = getSchema(clazz); Map<String, Schema> schemas = schemaManager.getSchemas(); Map<BeanId, Bean> beans = beanManager.list(s.getName()); setSchema(schemas, beans); for (Bean bean : beans.values()) { setSingletonReferences(bean, schemas); } return Lists.newArrayList(conversion.convert(beans.values(), clazz)); }
@Override public void unregister(Class<?>... configurable) { doLookup(); for (Class<?> clazz : configurable) { Schema schema = conversion.convert(clazz, Schema.class); schemaManager.removeSchema(schema.getName()); core.removeIndex(schema); } }
@Override public void register(Class<?>... configurable) { doLookup(); for (Class<?> clazz : configurable) { Schema schema = conversion.convert(clazz, Schema.class); schemaManager.regsiterSchema(schema); if (schema.getId().isSingleton()) { beanManager.createSingleton(getSingletonId(schema, clazz)); } // ok to not have validation manager available if (validationManager != null) { validationManager.register(schema.getName(), clazz); } } }
@Override public <T> T get(String id, Class<T> clazz) { doLookup(); Schema s = getSchema(clazz); Map<String, Schema> schemas = schemaManager.getSchemas(); BeanId beanId = BeanId.create(id, s.getName()); Bean bean = beanManager.getEager(beanId); if (bean == null) { throw Events.CFG304_BEAN_DOESNT_EXIST(beanId); } setSchema(bean, schemas); setSingletonReferences(bean, schemas); return conversion.convert(bean, clazz); }