OLD | NEW |
| (Empty) |
1 /* | |
2 Copyright 2011 Google Inc | |
3 | |
4 Licensed under the Apache License, Version 2.0 (the "License"); | |
5 you may not use this file except in compliance with the License. | |
6 You may obtain a copy of the License at | |
7 | |
8 http://www.apache.org/licenses/LICENSE-2.0 | |
9 | |
10 Unless required by applicable law or agreed to in writing, software | |
11 distributed under the License is distributed on an "AS IS" BASIS, | |
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 See the License for the specific language governing permissions and | |
14 limitations under the License. | |
15 */ | |
16 | |
17 using System.CodeDom; | |
18 using System.Collections.Generic; | |
19 using System.Linq; | |
20 using Google.Apis.Discovery; | |
21 using Google.Apis.Testing; | |
22 using Google.Apis.Tools.CodeGen.Generator; | |
23 using Google.Apis.Util; | |
24 | |
25 namespace Google.Apis.Tools.CodeGen.Decorator.ResourceDecorator | |
26 { | |
27 /// <summary> | |
28 /// This decorator adds subresources as nested classes to the current resour
ce. | |
29 ///· | |
30 /// Example: | |
31 /// public class TopResource { | |
32 /// ... | |
33 /// public class SubResource { | |
34 /// ... | |
35 /// } | |
36 /// } | |
37 /// </summary> | |
38 public class SubresourceClassDecorator : IResourceDecorator | |
39 { | |
40 #region IResourceDecorator Members | |
41 | |
42 public void DecorateClass(IResource resource, | |
43 string className, | |
44 CodeTypeDeclaration resourceClass, | |
45 ResourceClassGenerator generator, | |
46 string serviceClassName, | |
47 IEnumerable<IResourceDecorator> allDecorators) | |
48 { | |
49 resource.ThrowIfNull("resource"); | |
50 className.ThrowIfNull("className"); | |
51 resourceClass.ThrowIfNull("resourceClass"); | |
52 generator.ThrowIfNull("generator"); | |
53 serviceClassName.ThrowIfNull("serviceClassName"); | |
54 allDecorators.ThrowIfNull("allDecorators"); | |
55 | |
56 if (!resource.IsServiceResource) // Only add subresources of normal
resources, not the root resource. | |
57 { | |
58 // Add all subresources. | |
59 foreach (IResource subresource in resource.Resources.Values) | |
60 { | |
61 // Consider all members in the current class as invalid name
s. | |
62 var forbiddenWords = from CodeTypeMember m in resourceClass.
Members select m.Name; | |
63 | |
64 // Generate and add the subresource. | |
65 CodeTypeDeclaration decl = GenerateSubresource( | |
66 subresource, serviceClassName, allDecorators, generator.
RequestGenerator, | |
67 generator.ContainerGenerator, forbiddenWords); | |
68 resourceClass.Members.Add(decl); | |
69 } | |
70 } | |
71 } | |
72 ········ | |
73 [VisibleForTestOnly] | |
74 internal CodeTypeDeclaration GenerateSubresource(IResource subresource, | |
75 string serviceClassName, | |
76 IEnumerable<IResourceDecorator> allDecorato
rs, | |
77 RequestClassGenerator requestClassGenerator
, | |
78 ResourceContainerGenerator containerGenerat
or, | |
79 IEnumerable<string> forbiddenWords) | |
80 { | |
81 // Create a new generator for this subresource | |
82 var subgenerator = new ResourceClassGenerator( | |
83 subresource, serviceClassName, allDecorators, requestClassGenera
tor, containerGenerator, | |
84 forbiddenWords); | |
85 | |
86 // Generate and add the subresource. | |
87 return subgenerator.CreateClass(); | |
88 } | |
89 | |
90 public void DecorateMethodBeforeExecute(IResource resource, IMethod meth
od, CodeMemberMethod codeMember) {} | |
91 | |
92 public void DecorateMethodAfterExecute(IResource resource, IMethod metho
d, CodeMemberMethod codeMember) {} | |
93 | |
94 #endregion | |
95 } | |
96 } | |
OLD | NEW |