# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: src/org/netbeans/modules/websvc/rest/codegen/model/ModelBuilder.java *** C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\model\ModelBuilder.java Base (1.6) --- C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\model\ModelBuilder.java Locally Modified (Based On 1.6) *************** *** 108,114 **** ResourceBean foreignBean = null; ResourceBean foreignItemBean = null; ! if (fieldInfo.isOneToMany()) { foreignBean = getContainerResourceBean(model.getEntityClassInfo(fieldInfo.getTypeArg())); foreignItemBean = getItemResourceBean(model.getEntityClassInfo(fieldInfo.getTypeArg())); } else { --- 108,114 ---- ResourceBean foreignBean = null; ResourceBean foreignItemBean = null; ! if (fieldInfo.isOneToMany() || fieldInfo.isManyToMany()) { foreignBean = getContainerResourceBean(model.getEntityClassInfo(fieldInfo.getTypeArg())); foreignItemBean = getItemResourceBean(model.getEntityClassInfo(fieldInfo.getTypeArg())); } else { Index: src/org/netbeans/modules/websvc/rest/codegen/EntityRESTServicesCodeGenerator.java *** C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\EntityRESTServicesCodeGenerator.java Base (1.57) --- C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\EntityRESTServicesCodeGenerator.java Locally Modified (Based On 1.57) *************** *** 627,658 **** "return parent.$GETTER$();" + "}" + "@Override protected void createEntity($SUBCLASS$ entity) {" + ! "super.createEntity(entity);" + ! "entity.$SETTER$(parent);" + ! "}" + ! "};" + ! "}"; ! bodyText = bodyText.replace("$CLASS$", getEntityClassName(bean)). ! replace("$RESOURCE$", resourceName). ! replace("$SUBCLASS$", getEntityClassName(subBean)). ! replace("$GETTER$", getGetterName(fieldInfo)); ! ResourceBean itemBean = getItemSubResource(subBean); ! ! for (RelatedResource subResource : itemBean.getSubResources()) { if (bean == subResource.getResourceBean()) { bodyText = bodyText.replace("$SETTER$", getSetterName(subResource.getFieldInfo())); break; } } } String comment = "Returns a dynamic instance of $RESOURCE$ used for entity navigation.\n\n" + "@param id identifier for the parent entity\n" + --- 627,669 ---- "return parent.$GETTER$();" + "}" + "@Override protected void createEntity($SUBCLASS$ entity) {" + ! "super.createEntity(entity);"; ! if (fieldInfo.isOneToMany()) { ! bodyText += "entity.$SETTER$(parent);"; ! for (RelatedResource subResource : getItemSubResource(subBean).getSubResources()) { if (bean == subResource.getResourceBean()) { bodyText = bodyText.replace("$SETTER$", getSetterName(subResource.getFieldInfo())); break; } } + } else if (fieldInfo.isManyToMany()) { + bodyText += "if (!entity.$GETTER2$().contains(parent)) {" + + "entity.$GETTER2$().add(parent);" + + "}"; + for (RelatedResource subResource : getItemSubResource(subBean).getSubResources()) { + ResourceBean subSubBean = subResource.getResourceBean(); + if (subSubBean.isContainer()) { + if (bean == getItemSubResource(subSubBean)) { + bodyText = bodyText.replace("$GETTER2$", getGetterName(subResource.getFieldInfo())); + + break; } + } + } + } + bodyText += "}};}"; + + bodyText = bodyText.replace("$CLASS$", getEntityClassName(bean)). + replace("$RESOURCE$", resourceName). + replace("$SUBCLASS$", getEntityClassName(subBean)). + replace("$GETTER$", getGetterName(fieldInfo)); + } + String comment = "Returns a dynamic instance of $RESOURCE$ used for entity navigation.\n\n" + "@param id identifier for the parent entity\n" + "@return an instance of $RESOURCE$"; *************** *** 1004,1010 **** for (RelatedResource subResource : bean.getSubResources()) { FieldInfo fieldInfo = subResource.getFieldInfo(); ! if (fieldInfo.isOneToMany()) { ResourceBean subBean = subResource.getResourceBean(); ResourceBean itemResource = getItemSubResource(subBean); --- 1018,1024 ---- for (RelatedResource subResource : bean.getSubResources()) { FieldInfo fieldInfo = subResource.getFieldInfo(); ! if (fieldInfo.isOneToMany() || fieldInfo.isManyToMany()) { ResourceBean subBean = subResource.getResourceBean(); ResourceBean itemResource = getItemSubResource(subBean); *************** *** 1034,1040 **** for (RelatedResource subResource : bean.getSubResources()) { FieldInfo fieldInfo = subResource.getFieldInfo(); ! if (fieldInfo.isOneToMany()) { ResourceBean subBean = subResource.getResourceBean(); ResourceBean itemResource = getItemSubResource(subBean); --- 1048,1054 ---- for (RelatedResource subResource : bean.getSubResources()) { FieldInfo fieldInfo = subResource.getFieldInfo(); ! if (fieldInfo.isOneToMany() || fieldInfo.isManyToMany()) { ResourceBean subBean = subResource.getResourceBean(); ResourceBean itemResource = getItemSubResource(subBean); *************** *** 1257,1263 **** bodyText = "{return entity.$GETTER$();}"; bodyText = bodyText.replace("$GETTER$", getterName); } else { ! if (fieldInfo.isOneToMany()) { ResourceBean foreignBean = model.getContainerResourceBean(fieldInfo.getTypeArg()); annotationAttrs = new Object[] { JavaSourceHelper.createAssignmentTree(copy, "name", --- 1271,1277 ---- bodyText = "{return entity.$GETTER$();}"; bodyText = bodyText.replace("$GETTER$", getterName); } else { ! if (fieldInfo.isOneToMany() || fieldInfo.isManyToMany()) { ResourceBean foreignBean = model.getContainerResourceBean(fieldInfo.getTypeArg()); annotationAttrs = new Object[] { JavaSourceHelper.createAssignmentTree(copy, "name", *************** *** 1321,1327 **** bodyText = bodyText.replace("$SETTER$", setterName). replace("$CLASS$", getEntityClassName(bean)); } else { ! if (fieldInfo.isOneToMany()) { ResourceBean foreignBean = model.getContainerResourceBean(fieldInfo.getTypeArg()); String relatedEntityName = model.getItemResourceBean(fieldInfo.getTypeArg()).getName(); argType = getConverterType(foreignBean); --- 1335,1341 ---- bodyText = bodyText.replace("$SETTER$", setterName). replace("$CLASS$", getEntityClassName(bean)); } else { ! if (fieldInfo.isOneToMany() || fieldInfo.isManyToMany()) { ResourceBean foreignBean = model.getContainerResourceBean(fieldInfo.getTypeArg()); String relatedEntityName = model.getItemResourceBean(fieldInfo.getTypeArg()).getName(); argType = getConverterType(foreignBean); Index: src/org/netbeans/modules/websvc/rest/codegen/model/EntityClassInfo.java *** C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\model\EntityClassInfo.java Base (1.2) --- C:\Documents and Settings\PeterLiu\dev\hula2\nb_all\websvc\rest\src\org\netbeans\modules\websvc\rest\codegen\model\EntityClassInfo.java Locally Modified (Based On 1.2) *************** *** 154,160 **** } public boolean isRelationship() { ! return isOneToOne() || isOneToMany() || isManyToOne(); } public boolean isOneToOne() { --- 154,161 ---- } public boolean isRelationship() { ! return isOneToOne() || isOneToMany() || isManyToOne() || ! isManyToMany(); } public boolean isOneToOne() { *************** *** 169,174 **** --- 170,179 ---- return matchAnnotation("@javax.persistence.ManyToOne"); } + public boolean isManyToMany() { + return matchAnnotation("@javax.persistence.ManyToMany"); + } + private boolean matchAnnotation(String annotation) { for (String a : annotations) { if (a.startsWith(annotation))