示例#1
0
        private static string TranslateCascadeEnum(ManyRelationCascadeEnum cascadeEnum)
        {
            String cascade = null;

            if (cascadeEnum != ManyRelationCascadeEnum.None)
            {
                if (cascadeEnum == ManyRelationCascadeEnum.SaveUpdate)
                {
                    cascade = "save-update";
                }
                else if (cascadeEnum == ManyRelationCascadeEnum.AllDeleteOrphan)
                {
                    cascade = "all-delete-orphan";
                }
                else
                {
                    cascade = cascadeEnum.ToString().ToLower();
                }
            }
            return(cascade);
        }
示例#2
0
		private void WriteCollection(ManyRelationCascadeEnum cascadeEnum,
		                             Type targetType, RelationType type, string name,
		                             string accessString, string table, string schema, bool lazy,
		                             bool inverse, string orderBy, string where, string sort,
		                             string columnKey, string[] compositeKeyColumnKeys, string element, string elementType,
		                             string columnRef, string[] compositeKeyColumnRefs,
		                             IVisitable extraModel, string index, string indexType, CacheEnum cache, string cacheregion,
		                             NotFoundBehaviour notFoundBehaviour, FetchEnum fetch, int batchSize, Type collectionType)
		{
			bool extraModelVisited = false;

			String cascade = TranslateCascadeEnum(cascadeEnum);
			String notFoundMode = TranslateNotFoundBehaviourEnum(notFoundBehaviour);
			String fetchString = TranslateFetch(fetch);

			String closingTag = null;

			if (type == RelationType.Guess)
				throw new ActiveRecordException(string.Format("Failed to guess the relation for {0}", name));

			if (type == RelationType.Bag)
			{
				closingTag = "</bag>";

				AppendF("<bag{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}>",
				        MakeAtt("name", name),
				        MakeAtt("access", accessString),
				        WriteIfNonNull("table", table),
				        WriteIfNonNull("schema", schema),
				        MakeAtt("lazy", lazy),
				        WriteIfTrue("inverse", inverse),
				        WriteIfNonNull("cascade", cascade),
				        WriteIfNonNull("order-by", orderBy),
				        WriteIfNonNull("where", where),
				        WriteIfNonNull("fetch", fetchString),						
                        WriteIfNotOne("batch-size", batchSize),
						WriteIfNonNull("collection-type", MakeTypeName(collectionType)));
			}
			else if (type == RelationType.Set)
			{
				closingTag = "</set>";

				AppendF("<set{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}>",
				        MakeAtt("name", name),
				        MakeAtt("access", accessString),
				        WriteIfNonNull("table", table),
				        WriteIfNonNull("schema", schema),
				        MakeAtt("lazy", lazy),
				        WriteIfTrue("inverse", inverse),
				        WriteIfNonNull("cascade", cascade),
				        WriteIfNonNull("order-by", orderBy),
				        WriteIfNonNull("where", where),
				        WriteIfNonNull("sort", sort),
                        WriteIfNonNull("fetch", fetchString),
						WriteIfNotOne("batch-size", batchSize),
						WriteIfNonNull("collection-type", MakeTypeName(collectionType)));
			}
			else if (type == RelationType.IdBag)
			{
				closingTag = "</idbag>";

				AppendF("<idbag{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}>",
				        MakeAtt("name", name),
				        MakeAtt("access", accessString),
				        WriteIfNonNull("table", table),
				        WriteIfNonNull("schema", schema),
				        MakeAtt("lazy", lazy),
				        WriteIfNonNull("cascade", cascade),
				        WriteIfNonNull("order-by", orderBy),
				        WriteIfNonNull("where", where),
                        WriteIfNonNull("fetch", fetchString),
						WriteIfNotOne("batch-size", batchSize),
						WriteIfNonNull("collection-type", MakeTypeName(collectionType)));
				extraModelVisited = true;
				Ident();
				VisitNode(extraModel);
				Dedent();
			}
			else if (type == RelationType.Map)
			{
				closingTag = "</map>";

				AppendF("<map{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}>",
				        MakeAtt("name", name),
				        MakeAtt("access", accessString),
				        WriteIfNonNull("table", table),
				        WriteIfNonNull("schema", schema),
				        MakeAtt("lazy", lazy),
				        WriteIfTrue("inverse", inverse),
				        WriteIfNonNull("cascade", cascade),
				        WriteIfNonNull("order-by", orderBy),
				        WriteIfNonNull("where", where),
				        WriteIfNonNull("sort", sort),
                        WriteIfNonNull("fetch", fetchString),
						WriteIfNotOne("batch-size", batchSize),
						WriteIfNonNull("collection-type", MakeTypeName(collectionType)));
			}
			else if (type == RelationType.List)
			{
				closingTag = "</list>";
				AppendF("<list{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}>",
				        MakeAtt("name", name),
				        MakeAtt("access", accessString),
				        WriteIfNonNull("table", table),
				        WriteIfNonNull("schema", schema),
				        MakeAtt("lazy", lazy),
				        WriteIfTrue("inverse", inverse),
				        WriteIfNonNull("cascade", cascade),
				        WriteIfNonNull("where", where),
                        WriteIfNonNull("fetch", fetchString),
						WriteIfNotOne("batch-size", batchSize),
						WriteIfNonNull("collection-type", MakeTypeName(collectionType)));
			}


			Ident();

			WriteCache(cache, cacheregion);

			if (columnKey == null)
			{
				Append("<key>");
				Ident();
				WriteCompositeColumns(compositeKeyColumnKeys);
				Dedent();
				Append("</key>");
			}
			else
			{
				WriteKey(columnKey);
			}

			if (type == RelationType.Map || type == RelationType.List)
			{
				WriteIndex(index, indexType);
			}

			if (element != null || elementType != null)
			{
				WriteElement(element, elementType, targetType);
			}
			else if (columnRef == null && compositeKeyColumnRefs == null)
			{
				if (extraModel == null)
				{
					WriteOneToMany(targetType, notFoundMode);
				}
				else if (!extraModelVisited)
				{
					VisitNode(extraModel);
				}
			}
			else
			{
				if (columnRef != null)
				{
					WriteManyToMany(targetType, columnRef, notFoundMode);
				}
				else
				{
					WriteManyToMany(targetType, compositeKeyColumnRefs, notFoundMode);
				}
			}

			Dedent();

			Append(closingTag);
		}
示例#3
0
		private static string TranslateCascadeEnum(ManyRelationCascadeEnum cascadeEnum)
		{
			String cascade = null;

			if (cascadeEnum != ManyRelationCascadeEnum.None)
			{
				if (cascadeEnum == ManyRelationCascadeEnum.SaveUpdate)
				{
					cascade = "save-update";
				}
				else if (cascadeEnum == ManyRelationCascadeEnum.AllDeleteOrphan)
				{
					cascade = "all-delete-orphan";
				}
				else
				{
					cascade = cascadeEnum.ToString().ToLower();
				}
			}
			return cascade;
		}
示例#4
0
        private void WriteCollection(ManyRelationCascadeEnum cascadeEnum, Type targetType,
                                     RelationType type, String name, string accessString,
                                     String table, String schema, bool lazy, bool inverse, String orderBy,
                                     String where, String sort, String columnKey, String columnRef, IModelNode extraModel,
                                     String index, String indexType, CacheEnum cache)
        {
            String cascade = TranslateCascadeEnum(cascadeEnum);

            String closingTag = null;

            if (type == RelationType.Bag)
            {
                closingTag = "</bag>";

                AppendF("<bag {0} {1} {2} {3} {4} {5} {6} {7} {8} >",
                        MakeAtt("name", name),
                        MakeAtt("access", accessString),
                        WriteIfNonNull("table", table),
                        WriteIfNonNull("schema", schema),
                        WriteIfTrue("lazy", lazy),
                        WriteIfTrue("inverse", inverse),
                        WriteIfNonNull("cascade", cascade),
                        WriteIfNonNull("order-by", orderBy),
                        WriteIfNonNull("where", where));
            }
            else if (type == RelationType.Set)
            {
                closingTag = "</set>";

                AppendF("<set {0} {1} {2} {3} {4} {5} {6} {7} {8} {9}>",
                        MakeAtt("name", name),
                        MakeAtt("access", accessString),
                        WriteIfNonNull("table", table),
                        WriteIfNonNull("schema", schema),
                        WriteIfTrue("lazy", lazy),
                        WriteIfTrue("inverse", inverse),
                        WriteIfNonNull("cascade", cascade),
                        WriteIfNonNull("order-by", orderBy),
                        WriteIfNonNull("where", where),
                        WriteIfNonNull("sort", sort));
            }
            else if (type == RelationType.IdBag)
            {
                closingTag = "</idbag>";

                AppendF("<idbag {0} {1} {2} {3} {4} {5} {6} {7}>",
                        MakeAtt("name", name),
                        MakeAtt("access", accessString),
                        WriteIfNonNull("table", table),
                        WriteIfNonNull("schema", schema),
                        WriteIfTrue("lazy", lazy),
                        WriteIfNonNull("cascade", cascade),
                        WriteIfNonNull("order-by", orderBy),
                        WriteIfNonNull("where", where));

                VisitNode(extraModel);
            }
            else if (type == RelationType.Map)
            {
                closingTag = "</map>";

                AppendF("<map {0} {1} {2} {3} {4} {5} {6} {7} {8} {9}>",
                        MakeAtt("name", name),
                        MakeAtt("access", accessString),
                        WriteIfNonNull("table", table),
                        WriteIfNonNull("schema", schema),
                        WriteIfTrue("lazy", lazy),
                        WriteIfTrue("inverse", inverse),
                        WriteIfNonNull("cascade", cascade),
                        WriteIfNonNull("order-by", orderBy),
                        WriteIfNonNull("where", where),
                        WriteIfNonNull("sort", sort));
            }

            Ident();

            WriteCache(cache);
            WriteKey(columnKey);

            if (type == RelationType.Map)
            {
                WriteIndex(index, indexType);
            }

            if (columnRef == null)
            {
                if (extraModel == null)
                {
                    WriteOneToMany(targetType);
                }
                else
                {
                    VisitNode(extraModel);
                }
            }
            else
            {
                WriteManyToMany(targetType, columnRef);
            }

            Dedent();

            Append(closingTag);
        }