public SingleWrappingClassInfoField( ClassOutlineImpl context, CPropertyInfo prop, CPropertyInfo core, CClassInfo classInfo) { super(context, prop, core); // assert prop instanceof CElementPropertyInfo; // // final CElementPropertyInfo elementPropertyInfo = // (CElementPropertyInfo) prop; // // assert elementPropertyInfo.getTypes().size() == 1; // // final CTypeRef typeRef = elementPropertyInfo.getTypes().get(0); this.classInfo = classInfo; this._class = classInfo.toType(context.parent(), Aspect.EXPOSED); }
public Collection<CPropertyInfo> process(ProcessModel context, final CPropertyInfo propertyInfo) { assert propertyInfo instanceof CValuePropertyInfo; final CValuePropertyInfo wrappedPropertyInfo = (CValuePropertyInfo) propertyInfo; final CClassInfo classInfo = (CClassInfo) wrappedPropertyInfo.parent(); final String propertyName = wrappedPropertyInfo.getName(true); logger.debug("Property [" + propertyName + "] is a simple homogeneous collection property."); final CClassInfoParent parent = Ring.get(BGMBuilder.class).getGlobalBinding().getFlattenClasses() == LocalScoping.NESTED ? classInfo : classInfo.parent(); final CClassInfo itemClassInfo = new CClassInfo( classInfo.model, parent, classInfo.shortName + propertyName + "Item", null, new QName(propertyName), null, propertyInfo.getSchemaComponent(), new CCustomizations()); Customizations.markGenerated(itemClassInfo); final CElementPropertyInfo itemPropertyInfo = new CElementPropertyInfo( "Item", CollectionMode.NOT_REPEATED, ID.NONE, wrappedPropertyInfo.getExpectedMimeType(), wrappedPropertyInfo.getSchemaComponent(), new CCustomizations(CustomizationUtils.getCustomizations(wrappedPropertyInfo)), wrappedPropertyInfo.getLocator(), false); final CTypeRef typeRef = new CTypeRef( context.getGetTypes().getTarget(context, wrappedPropertyInfo), new QName(propertyName), wrappedPropertyInfo.getSchemaType(), false, null); itemPropertyInfo.getTypes().add(typeRef); if (wrappedPropertyInfo.getAdapter() != null) { itemPropertyInfo.setAdapter(wrappedPropertyInfo.getAdapter()); } final FieldRenderer fieldRenderer = new FieldRenderer() { public FieldOutline generate(ClassOutlineImpl classOutline, CPropertyInfo propertyInfo) { final FieldOutline fieldOutline = new SingleField(classOutline, propertyInfo) { @Override protected String getGetterMethod() { return "get" + prop.getName(true); } protected JType getType(Aspect aspect) { return super.getType(aspect).boxify(); } }; final JClass itemClass = classOutline .implClass .owner() .ref(Item.class) .narrow(fieldOutline.getRawType().boxify()); classOutline.implClass._implements(itemClass); if (classOutline.parent().getModel().serializable) { classOutline.implClass._implements(Serializable.class); } final JMethod isGetter = FieldAccessorUtils.getter(fieldOutline); if (isGetter.name().startsWith("is")) { final JMethod getter = classOutline.implClass.method( JMod.PUBLIC, isGetter.type(), "get" + isGetter.name().substring(2)); getter.body()._return(JExpr._this().invoke(isGetter)); } return fieldOutline; } }; itemPropertyInfo.realization = fieldRenderer; itemClassInfo.addProperty(itemPropertyInfo); context.getProcessClassInfo().process(context, itemClassInfo); final CElementPropertyInfo wrappingPropertyInfo = new CElementPropertyInfo( propertyName + "Items", CollectionMode.REPEATED_ELEMENT, ID.NONE, wrappedPropertyInfo.getExpectedMimeType(), null, new CCustomizations(), null, false); // for (final CTypeRef typeRef : wrappedPropertyInfo.getTypes()) { wrappingPropertyInfo .getTypes() .add( new CTypeRef( itemClassInfo, new QName( typeRef.getTagName().getNamespaceURI(), typeRef.getTagName().getLocalPart() + "Items"), null, false, null)); // } wrappingPropertyInfo.realization = new FieldRenderer() { public FieldOutline generate( ClassOutlineImpl outline, CPropertyInfo wrappingPropertyInfo) { return new WrappingCollectionField(outline, wrappedPropertyInfo, wrappingPropertyInfo); } }; wrappedPropertyInfo.realization = new FieldRenderer() { public FieldOutline generate( ClassOutlineImpl outline, CPropertyInfo wrappedPropertyInfo) { return new WrappedCollectionField(outline, wrappedPropertyInfo, wrappingPropertyInfo); } }; Customizations.markGenerated(wrappingPropertyInfo); Customizations.markIgnored(wrappedPropertyInfo); final List<CPropertyInfo> a = new ArrayList<CPropertyInfo>(1); a.add(wrappingPropertyInfo); a.add(itemPropertyInfo); return a; }