private void initVariables(Collection<VariableMetadata> variables, TypeMetadataQueryResult result) { optionType.clear(); typesMetadata = result.getTypeMetadatas().stream().collect(Collectors.toMap(TypeMetadata::getType, Function.identity())); variables.forEach(variableMetadata -> { TypeMetadata typeMetadata = Optional.ofNullable(typesMetadata.get(variableMetadata.getType())).orElse(new TypeMetadata(Object.class.getName())); variableMetadata.setTypeMetadata(typeMetadata); addVariableOptions(variableMetadata); }); }
private void addVariableOptions(VariableMetadata variableMetadata) { String option = variableMetadata.getName(); String optionLabel = getVariableLabel(variableMetadata); options.put(option, optionLabel); optionType.put(option, unboxDefaultType(variableMetadata.getType())); TypeMetadata typeMetadata = variableMetadata.getTypeMetadata(); typeMetadata.getFieldMetadata().stream() .filter(fieldMetadata -> fieldMetadata.getAccessor() != null) .forEach(fieldMetadata -> { String fieldOption = variableMetadata.getName() + "." + fieldMetadata.getAccessor() + "()"; String fieldOptionLabel = optionLabel + "." + fieldMetadata.getName(); options.put(fieldOption, fieldOptionLabel); optionType.put(fieldOption, unboxDefaultType(fieldMetadata.getType())); }); }
@Test public void testFindMetadata() { Set<String> types = new HashSet<>(); types.add(Bean1.class.getName()); types.add(Bean2.class.getName()); types.add("non.existing.class.Bean"); TypeMetadataQuery query = new TypeMetadataQuery(path, types); TypeMetadataQueryResult result = service.findMetadata(query); assertTrue(result.getMissingTypes().contains("non.existing.class.Bean")); TypeMetadata bean1Metadata = result.getTypeMetadatas().stream().filter(typeMetadata -> typeMetadata.getType().equals(Bean1.class.getName())).findFirst().orElse(null); TypeMetadata bean2Metadata = result.getTypeMetadatas().stream().filter(typeMetadata -> typeMetadata.getType().equals(Bean2.class.getName())).findFirst().orElse(null); assertNotNull(bean1Metadata); assertNotNull(bean2Metadata); assertHasField(bean1Metadata, "fieldBean1_1", String.class.getName(), "getFieldBean1_1", "setFieldBean1_1"); assertHasField(bean1Metadata, "fieldBean1_2", "int", "getFieldBean1_2", null); assertHasField(bean1Metadata, "fieldBean1_3", "boolean", "isFieldBean1_3", "setFieldBean1_3"); assertHasField(bean1Metadata, "fieldBean1_4", Integer.class.getName(), null, "setFieldBean1_4"); assertHasField(bean2Metadata, "fieldBean1_1", String.class.getName(), "getFieldBean1_1", "setFieldBean1_1"); assertHasField(bean2Metadata, "fieldBean1_2", "int", "getFieldBean1_2", null); assertHasField(bean2Metadata, "fieldBean1_3", "boolean", "isFieldBean1_3", "setFieldBean1_3"); assertHasField(bean2Metadata, "fieldBean1_4", Integer.class.getName(), null, "setFieldBean1_4"); assertHasField(bean2Metadata, "fieldBean2_1", String.class.getName(), "getFieldBean2_1", "setFieldBean2_1"); assertHasField(bean2Metadata, "fieldBean2_2", Object.class.getName(), "getFieldBean2_2", "setFieldBean2_2"); }
@Test public void testTypeMetadataEqualsAndHashCode() { FieldMetadata fieldMetadata1 = mock(FieldMetadata.class); FieldMetadata fieldMetadata2 = mock(FieldMetadata.class); TestCaseBuilder.newTestCase() .addTrueCase(new TypeMetadata(null), new TypeMetadata(null)) .addTrueCase(new TypeMetadata(null, null), new TypeMetadata(null, null)) .addTrueCase(new TypeMetadata("type"), new TypeMetadata("type")) .addTrueCase(new TypeMetadata("type", null), new TypeMetadata("type", null)) .addTrueCase(new TypeMetadata("type", Arrays.asList(fieldMetadata1)), new TypeMetadata("type", Arrays.asList(fieldMetadata1))) .addFalseCase(new TypeMetadata("type"), new TypeMetadata(null)) .addFalseCase(new TypeMetadata("type", null), new TypeMetadata(null, null)) .addFalseCase(new TypeMetadata("type", new ArrayList<>()), new TypeMetadata("type", null)) .addFalseCase(new TypeMetadata("type"), new TypeMetadata("type1")) .addFalseCase(new TypeMetadata("type", Arrays.asList(fieldMetadata1)), new TypeMetadata("type1", new ArrayList<>())) .addFalseCase(new TypeMetadata("type", Arrays.asList(fieldMetadata1)), new TypeMetadata("type", Arrays.asList(fieldMetadata2))) .addFalseCase(new TypeMetadata("type", new ArrayList<>()), new TypeMetadata("type", Arrays.asList(fieldMetadata1))) .test(); } }
private void assertHasField(TypeMetadata typeMetadata, String fieldName, String type, String accessor, String mutator) { FieldMetadata fieldMetadata = typeMetadata.getFieldMetadata().stream().filter(fieldMetadata1 -> fieldMetadata1.getName().equals(fieldName)).findFirst().orElse(null); assertNotNull(fieldMetadata); assertEquals(type, fieldMetadata.getType()); assertEquals(accessor, fieldMetadata.getAccessor()); assertEquals(mutator, fieldMetadata.getMutator()); }
protected TypeMetadata buildTypeMetadata(String type, ClassLoader classLoader) throws ClassNotFoundException { GenerationTools generationTools = new GenerationTools(); Class<?> clazz = classLoader.loadClass(type); ClassFieldInspector fieldInspector = new ClassFieldInspector(clazz); List<FieldMetadata> fields = new ArrayList<>(); for (String fieldName : fieldInspector.getFieldNames()) { ClassFieldInspector.FieldInfo fieldInfo = fieldInspector.getFieldTypesFieldInfo().get(fieldName); if (fieldInfo.getOrigin() == ModelField.FIELD_ORIGIN.DECLARED || fieldInfo.getOrigin() == ModelField.FIELD_ORIGIN.INHERITED) { String accessor = null; String mutator = null; if (fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.ACCESSOR || fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.BOTH) { accessor = generationTools.toJavaGetter(fieldName, fieldInfo.getReturnType().getName()); } if (fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.MUTATOR || fieldInfo.getAccessorAndMutator() == FieldAccessorsAndMutators.BOTH) { mutator = generationTools.toJavaSetter(fieldName); } fields.add(new FieldMetadata(fieldName, fieldInfo.getReturnType().getName(), accessor, mutator)); } } return new TypeMetadata(type, fields); }