private void writeEqualsMethod(TextWriter writer) { writer.WriteLine("public override bool Equals( BasicUrlHandler other ) {"); writer.WriteLine("if( !( other is {0} otherEs ) ) return false;".FormatWith(generalData.ClassName)); InfoStatics.WriteEqualsParameterComparisons(writer, requiredParameters, optionalParameters, "otherEs"); writer.WriteLine("}"); }
private void writeGetInfoMethod(TextWriter writer) { CodeGenerationStatics.AddSummaryDocComment( writer, "Creates an info object for this page. Use the Info class constructor instead of this method if you want to reuse the entity setup info object."); writer.WriteLine( "public static Info GetInfo( " + StringTools.ConcatenateWithDelimiter( ", ", entitySetup != null ? WebMetaLogicStatics.GetParameterDeclarations(entitySetup.RequiredParameters) : "", WebMetaLogicStatics.GetParameterDeclarations(requiredParameters), entitySetup != null && entitySetup.OptionalParameters.Count > 0 ? "EntitySetup.OptionalParameterPackage entitySetupOptionalParameterPackage = null" : "", optionalParameters.Count > 0 ? "OptionalParameterPackage optionalParameterPackage = null" : "", "string uriFragmentIdentifier = \"\"") + " ) {"); var entitySetupArgs = entitySetup != null ? "new EntitySetup.Info( " + StringTools.ConcatenateWithDelimiter( ", ", InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(entitySetup.RequiredParameters, parameter => parameter.Name), entitySetup.OptionalParameters.Count > 0 ? "optionalParameterPackage: entitySetupOptionalParameterPackage" : "") + " )" : ""; writer.WriteLine( "return new Info( " + StringTools.ConcatenateWithDelimiter( ", ", entitySetupArgs, InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(requiredParameters, parameter => parameter.Name), optionalParameters.Count > 0 ? "optionalParameterPackage: optionalParameterPackage" : "", "uriFragmentIdentifier: uriFragmentIdentifier") + " );"); writer.WriteLine("}"); }
private void writeInfoCloneAndReplaceDefaultsIfPossibleMethod(TextWriter writer) { writer.WriteLine("protected override ResourceInfo CloneAndReplaceDefaultsIfPossible( bool disableReplacementOfDefaults ) {"); if (optionalParameters.Any()) { writer.WriteLine("var parametersModification = Instance.ParametersModificationAsBaseType as ParametersModification;"); writer.WriteLine("if( parametersModification != null && !disableReplacementOfDefaults )"); writer.WriteLine( "return new Info( " + StringTools.ConcatenateWithDelimiter( ", ", entitySetup != null ? "esInfo.CloneAndReplaceDefaultsIfPossible( disableReplacementOfDefaults )" : "", InfoStatics.GetInfoConstructorArguments( requiredParameters, optionalParameters, parameter => parameter.FieldName, parameter => InfoStatics.GetWasSpecifiedFieldName(parameter) + " ? " + parameter.FieldName + " : parametersModification." + parameter.PropertyName), "uriFragmentIdentifier: uriFragmentIdentifier") + " );"); } writer.WriteLine( "return new Info( " + StringTools.ConcatenateWithDelimiter( ", ", entitySetup != null ? "esInfo.CloneAndReplaceDefaultsIfPossible( disableReplacementOfDefaults )" : "", InfoStatics.GetInfoConstructorArguments(requiredParameters, optionalParameters, parameter => parameter.FieldName, parameter => parameter.FieldName), "uriFragmentIdentifier: uriFragmentIdentifier") + " );"); writer.WriteLine("}"); }
private void writeGetInfoMethod(TextWriter writer) { CodeGenerationStatics.AddSummaryDocComment( writer, "Creates an object for this page. Use the constructor instead of this method if you want to reuse the entity setup object."); writer.WriteLine( "public static {0} GetInfo( ".FormatWith(generalData.ClassName) + StringTools.ConcatenateWithDelimiter( ", ", entitySetup != null ? WebFrameworkStatics.GetParameterDeclarations(entitySetup.RequiredParameters) : "", WebFrameworkStatics.GetParameterDeclarations(requiredParameters), entitySetup != null && entitySetup.OptionalParameters.Count > 0 ? "Action<EntitySetup.OptionalParameterSpecifier, EntitySetup.Parameters> entitySetupOptionalParameterSetter = null" : "", optionalParameters.Count > 0 ? "Action<{0}> optionalParameterSetter = null".FormatWith( StringTools.ConcatenateWithDelimiter(", ", "OptionalParameterSpecifier", entitySetup != null ? "EntitySetup" : "", "Parameters")) : "", "string uriFragmentIdentifier = \"\"") + " ) {"); var entitySetupArgs = entitySetup != null ? "new EntitySetup( " + StringTools.ConcatenateWithDelimiter( ", ", InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(entitySetup.RequiredParameters, parameter => parameter.Name), entitySetup.OptionalParameters.Count > 0 ? "optionalParameterSetter: entitySetupOptionalParameterSetter" : "") + " )" : ""; writer.WriteLine( "return new {0}( ".FormatWith(generalData.ClassName) + StringTools.ConcatenateWithDelimiter( ", ", entitySetupArgs, InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(requiredParameters, parameter => parameter.Name), optionalParameters.Count > 0 ? "optionalParameterSetter: optionalParameterSetter" : "", "uriFragmentIdentifier: uriFragmentIdentifier") + " );"); writer.WriteLine("}"); }
private void writeInfoClass(TextWriter writer) { writer.WriteLine( "public sealed partial class Info: " + (generalData.PathRelativeToProject.EndsWith(".ascx") ? "EwfUiEntitySetupInfo" : "EntitySetupInfo") + " {"); InfoStatics.WriteParameterMembers(writer, requiredParameters, optionalParameters); InfoStatics.WriteConstructorAndHelperMethods(writer, requiredParameters, optionalParameters, false, true); writeInfoIsIdenticalToMethod(writer); writeInfoCloneAndReplaceDefaultsIfPossibleMethod(writer); writer.WriteLine("}"); }
internal void GenerateCode(TextWriter writer) { writer.WriteLine("namespace " + generalData.Namespace + " {"); writer.WriteLine("public sealed partial class {0}: EntitySetupBase {{".FormatWith(generalData.ClassName)); OptionalParameterPackageStatics.WriteClassIfNecessary(writer, requiredParameters, optionalParameters); ParametersModificationStatics.WriteClassIfNecessary(writer, requiredParameters.Concat(optionalParameters)); UrlStatics.GenerateUrlClasses(writer, generalData.ClassName, null, requiredParameters, optionalParameters, false); if (optionalParameters.Any()) { InfoStatics.WriteSpecifyParameterDefaultsMethod(writer, false); } InfoStatics.WriteParameterMembers(writer, requiredParameters, optionalParameters); if (requiredParameters.Any() || optionalParameters.Any()) { writer.WriteLine("internal ParametersModification parametersModification;"); } if (optionalParameters.Any()) { writer.WriteLine("private Action<OptionalParameterSpecifier, Parameters> optionalParameterSetter;"); } InfoStatics.WriteConstructorAndHelperMethods(writer, generalData, requiredParameters, optionalParameters, false, true); if (requiredParameters.Any() || optionalParameters.Any()) { writer.WriteLine("{0} override void InitParametersModification() {{".FormatWith(projectContainsFramework ? "protected internal" : "protected")); writer.WriteLine("parametersModification = new ParametersModification();"); foreach (var i in requiredParameters.Concat(optionalParameters)) { writer.WriteLine("parametersModification.{0} = {0};".FormatWith(i.PropertyName)); } writer.WriteLine("}"); } else { writer.WriteLine("{0} override void InitParametersModification() {{}}".FormatWith(projectContainsFramework ? "protected internal" : "protected")); } UrlStatics.GenerateGetEncoderMethod(writer, "", requiredParameters, optionalParameters, p => "true", false); writer.WriteLine( "internal {0} ReCreate() => new {0}({1});".FormatWith( generalData.ClassName, StringTools.ConcatenateWithDelimiter( ", ", InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(requiredParameters, parameter => parameter.PropertyName), optionalParameters.Any() ? "optionalParameterSetter: optionalParameterSetter" : "") .Surround(" ", " "))); WebFrameworkStatics.WriteReCreateFromNewParameterValuesMethod( writer, requiredParameters, "internal {0} ".FormatWith(generalData.ClassName), generalData.ClassName, ""); writeEqualsMethod(writer); InfoStatics.WriteGetHashCodeMethod(writer, generalData.PathRelativeToProject, requiredParameters, optionalParameters); writer.WriteLine("}"); writer.WriteLine("}"); }
private void writeInfoIsIdenticalToMethod(TextWriter writer) { writer.WriteLine("protected override bool isIdenticalTo( ResourceInfo infoAsBaseType ) {"); writer.WriteLine("if( !( infoAsBaseType is Info ) )"); writer.WriteLine("return false;"); writer.WriteLine("var info = infoAsBaseType as Info;"); if (entitySetup != null) { writer.WriteLine("if( !esInfo.IsIdenticalTo( info.esInfo ) )"); writer.WriteLine("return false;"); } InfoStatics.WriteIsIdenticalToParameterComparisons(writer, requiredParameters, optionalParameters); writer.WriteLine("}"); }
private void writeInfoClass(TextWriter writer) { writer.WriteLine("public sealed partial class Info: PageInfo {"); if (entitySetup != null) { writer.WriteLine("private EntitySetup.Info esInfo;"); } InfoStatics.WriteParameterMembers(writer, requiredParameters, optionalParameters); InfoStatics.WriteConstructorAndHelperMethods(writer, requiredParameters, optionalParameters, entitySetup != null, false); writer.WriteLine("public override EntitySetupInfo EsInfoAsBaseType { get { return " + (entitySetup != null ? "esInfo" : "null") + "; } }"); writeInfoBuildUrlMethod(writer); writeInfoIsIdenticalToMethod(writer); writeInfoCloneAndReplaceDefaultsIfPossibleMethod(writer); writer.WriteLine("}"); }
private void writeInfoCloneAndReplaceDefaultsIfPossibleMethod(TextWriter writer) { writer.WriteLine("internal Info CloneAndReplaceDefaultsIfPossible( bool disableReplacementOfDefaults ) {"); if (optionalParameters.Any()) { writer.WriteLine( "var parametersModification = ( EwfPage.Instance.EsAsBaseType != null ? EwfPage.Instance.EsAsBaseType.ParametersModificationAsBaseType : null ) as ParametersModification;"); writer.WriteLine("if( parametersModification != null && !disableReplacementOfDefaults )"); writer.WriteLine( "return new Info( " + InfoStatics.GetInfoConstructorArguments( requiredParameters, optionalParameters, parameter => parameter.FieldName, parameter => InfoStatics.GetWasSpecifiedFieldName(parameter) + " ? " + parameter.FieldName + " : parametersModification." + parameter.PropertyName) + " );"); } writer.WriteLine( "return new Info( " + InfoStatics.GetInfoConstructorArguments(requiredParameters, optionalParameters, parameter => parameter.FieldName, parameter => parameter.FieldName) + " );"); writer.WriteLine("}"); }
private void writeInfoIsIdenticalToMethod(TextWriter writer) { writer.WriteLine("internal bool IsIdenticalTo( Info info ) {"); InfoStatics.WriteIsIdenticalToParameterComparisons(writer, requiredParameters, optionalParameters); writer.WriteLine("}"); }
internal void GenerateCode(TextWriter writer) { writer.WriteLine("namespace {0} {{".FormatWith(generalData.Namespace)); writer.WriteLine( "public sealed partial class {0}: {1} {{".FormatWith( generalData.ClassName, generalData.IsPage() ? "PageBase" : generalData.IsAutoCompleteService() ? "AutoCompleteService" : "ResourceBase")); OptionalParameterPackageStatics.WriteClassIfNecessary(writer, requiredParameters, optionalParameters); if (generalData.IsPage()) { ParametersModificationStatics.WriteClassIfNecessary(writer, requiredParameters.Concat(optionalParameters)); } UrlStatics.GenerateUrlClasses(writer, generalData.ClassName, entitySetup, requiredParameters, optionalParameters, false); if (optionalParameters.Any()) { generateSegmentParameterSpecifier(writer); } writeGetInfoMethod(writer); if (optionalParameters.Any()) { InfoStatics.WriteSpecifyParameterDefaultsMethod(writer, entitySetup != null); } if (entitySetup != null) { writer.WriteLine("public EntitySetup Es;"); } InfoStatics.WriteParameterMembers(writer, requiredParameters, optionalParameters); if (generalData.IsPage() && (requiredParameters.Any() || optionalParameters.Any())) { writer.WriteLine("private ParametersModification parametersModification;"); } if (optionalParameters.Any()) { writer.WriteLine("private readonly Lazy<SegmentParameterSpecifier> segmentParameterSpecifier;"); writer.WriteLine( "private Action<{0}> optionalParameterSetter;".FormatWith( StringTools.ConcatenateWithDelimiter(", ", "OptionalParameterSpecifier", entitySetup != null ? "EntitySetup" : "", "Parameters"))); } InfoStatics.WriteConstructorAndHelperMethods(writer, generalData, requiredParameters, optionalParameters, entitySetup != null, false); writer.WriteLine("public override EntitySetupBase EsAsBaseType => {0};".FormatWith(entitySetup != null ? "Es" : "null")); if (generalData.IsPage()) { if (requiredParameters.Any() || optionalParameters.Any()) { writer.WriteLine("protected override void initParametersModification() {"); writer.WriteLine("parametersModification = new ParametersModification();"); foreach (var i in requiredParameters.Concat(optionalParameters)) { writer.WriteLine("parametersModification.{0} = {0};".FormatWith(i.PropertyName)); } writer.WriteLine("}"); } else { writer.WriteLine("protected override void initParametersModification() {}"); } } UrlStatics.GenerateGetEncoderMethod( writer, entitySetup != null ? "Es" : "", requiredParameters, optionalParameters, p => "segmentParameterSpecifier.Value.{0}IsSegmentParameter".FormatWith(p.PropertyName), false); if (optionalParameters.Any()) { writer.WriteLine("partial void specifySegmentParameters( SegmentParameterSpecifier specifier );"); } if (!generalData.IsPage()) { writer.WriteLine("public override bool MatchesCurrent() => base.MatchesCurrent();"); } writer.WriteLine( "{0} override ResourceBase ReCreate() => new {1}( {2} );".FormatWith( projectContainsFramework ? "protected internal" : "protected", generalData.ClassName, StringTools.ConcatenateWithDelimiter( ", ", entitySetup != null ? "Es.ReCreate()" : "", InfoStatics.GetInfoConstructorArgumentsForRequiredParameters(requiredParameters, parameter => parameter.PropertyName), optionalParameters.Any() ? "optionalParameterSetter: optionalParameterSetter" : "", "uriFragmentIdentifier: uriFragmentIdentifier"))); if (generalData.IsPage()) { WebFrameworkStatics.WriteReCreateFromNewParameterValuesMethod( writer, requiredParameters, "protected override PageBase ", generalData.ClassName, entitySetup != null ? "Es.ReCreateFromNewParameterValues()" : ""); } writeEqualsMethod(writer); InfoStatics.WriteGetHashCodeMethod(writer, generalData.PathRelativeToProject, requiredParameters, optionalParameters); writer.WriteLine("}"); writer.WriteLine("}"); }