View Javadoc
1   /*******************************************************************************
2    * Copyright 2014 Internet2
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  package edu.internet2.middleware.grouper.grouperUi.beans.ui;
17  
18  import java.util.ArrayList;
19  import java.util.LinkedHashSet;
20  import java.util.List;
21  
22  import javax.servlet.http.HttpServletRequest;
23  
24  import edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningDiagnosticsContainer;
25  import edu.internet2.middleware.grouper.cfg.text.GrouperTextContainer;
26  import edu.internet2.middleware.grouper.grouperUi.beans.api.GuiSource;
27  import edu.internet2.middleware.grouper.grouperUi.beans.permissionUpdate.PermissionUpdateRequestContainer;
28  import edu.internet2.middleware.grouper.ui.GrouperUiFilter;
29  import edu.internet2.middleware.grouper.util.GrouperUtil;
30  import edu.internet2.middleware.subject.Source;
31  import edu.internet2.middleware.subject.provider.SourceManager;
32  
33  /**
34   * request container for grouper in the j2ee request object, under 
35   * the attribute name "grouperRequestContainer"
36   * @author mchyzer
37   *
38   */
39  public class GrouperRequestContainer {
40  
41    /**
42     * 
43     * @return the request
44     */
45    public HttpServletRequest getHttpServletRequest() {
46      return GrouperUiFilter.retrieveHttpServletRequest();
47    }
48    
49    /**
50     * sources
51     * @return sources
52     */
53    public List<GuiSource> getGuiSources() {
54      return new ArrayList<GuiSource>(GuiSource.convertFromSources(
55          new LinkedHashSet<Source>(SourceManager.getInstance().getSources())));
56    }
57  
58    /**
59     * grouper loader container
60     */
61    private GrouperLoaderContainer grouperLoaderContainer;
62  
63    /**
64     * @return the grouperLoaderContainer
65     */
66    public GrouperLoaderContainer getGrouperLoaderContainer() {
67      if (this.grouperLoaderContainer == null) {
68        this.grouperLoaderContainer = new GrouperLoaderContainer();
69      }
70      return this.grouperLoaderContainer;
71    }
72  
73    /**
74     * @param grouperLoaderContainer1 the grouperLoaderContainer to set
75     */
76    public void setGrouperLoaderContainer(GrouperLoaderContainer grouperLoaderContainer1) {
77      this.grouperLoaderContainer = grouperLoaderContainer1;
78    }
79  
80    /**
81     * provisioning container
82     */
83    private ProvisioningContainer provisioningContainer;
84    
85    /**
86     * @return the provisioningContainer
87     */
88    public ProvisioningContainer getProvisioningContainer() {
89      if (this.provisioningContainer == null) {
90        this.provisioningContainer = new ProvisioningContainer();
91      }
92      return this.provisioningContainer;
93    }
94  
95    /**
96     * @param provisioningContainer1 the provisioningContainer to set
97     */
98    public void setProvisioningContainer(ProvisioningContainer provisioningContainer1) {
99      this.provisioningContainer = provisioningContainer1;
100   }
101 
102   /**
103    * container for public requests
104    */
105   private PublicContainer publicContainer;  
106 
107   /**
108    * container for public requests
109    * @return the publicContainer
110    */
111   public PublicContainer getPublicContainer() {
112     if (this.publicContainer == null) {
113       this.publicContainer = new PublicContainer();
114     }
115     return this.publicContainer;
116   }
117 
118   /**
119    * container for public requests
120    * @param publicContainer1 the publicContainer to set
121    */
122   public void setPublicContainer(PublicContainer publicContainer1) {
123     this.publicContainer = publicContainer1;
124   }
125 
126   /**
127    * container for inviting external users
128    */
129   private InviteExternalContainer inviteExternalContainer;
130   
131   /**
132    * container for inviting external users
133    * @return the inviteExternalContainer
134    */
135   public InviteExternalContainer getInviteExternalContainer() {
136     if (this.inviteExternalContainer == null) {
137       this.inviteExternalContainer = new InviteExternalContainer();
138     }
139     return this.inviteExternalContainer;
140   }
141 
142   /**
143    * container for inviting external users
144    * @param inviteExternalContainer1 the inviteExternalContainer to set
145    */
146   public void setInviteExternalContainer(InviteExternalContainer inviteExternalContainer1) {
147     this.inviteExternalContainer = inviteExternalContainer1;
148   }
149 
150   /**
151    * admin stuff
152    */
153   private AdminContainer adminContainer;
154   
155   /**
156    * @return the adminContainer
157    */
158   public AdminContainer getAdminContainer() {
159     if (this.adminContainer == null) {
160       this.adminContainer = new AdminContainer();
161     }
162     return this.adminContainer;
163   }
164 
165   
166   /**
167    * @param adminContainer1 the adminContainer to set
168    */
169   public void setAdminContainer(AdminContainer adminContainer1) {
170     this.adminContainer = adminContainer1;
171   }
172 
173   /**
174    * data for importing members into groups
175    */
176   private GroupImportContainer groupImportContainer;
177   
178   /**
179    * data for provisioner diagnostics
180    */
181   private GrouperProvisioningDiagnosticsContainer grouperProvisioningDiagnosticsContainer;
182 
183   /**
184    * data for importing members into groups
185    * @return group import
186    */
187   public GroupImportContainer getGroupImportContainer() {
188     if (this.groupImportContainer == null) {
189       this.groupImportContainer = new GroupImportContainer();
190     }
191     return this.groupImportContainer;
192   }
193 
194   /**
195    * data for importing members into groups
196    * @param groupImportContainer1
197    */
198   public void setGroupImportContainer(GroupImportContainer groupImportContainer1) {
199     this.groupImportContainer = groupImportContainer1;
200   }
201   
202   
203   /**
204    * data for provisioner diagnostics
205    * @return grouperProvisioningDiagnosticsContainer
206    */
207   public GrouperProvisioningDiagnosticsContainer getGrouperProvisioningDiagnosticsContainer() {
208     if (this.grouperProvisioningDiagnosticsContainer == null) {
209       throw new RuntimeException("Provisioning diagnostics container needs to be initted!");
210     }
211     return this.grouperProvisioningDiagnosticsContainer;
212   }
213 
214   /**
215    * data for provisioner diagnostics
216    * @param grouperProvisioningDiagnosticsContainer
217    */
218   public void setGrouperProvisioningDiagnosticsContainer(
219       GrouperProvisioningDiagnosticsContainer grouperProvisioningDiagnosticsContainer) {
220     this.grouperProvisioningDiagnosticsContainer = grouperProvisioningDiagnosticsContainer;
221   }
222 
223   /** 
224    * attribute def container 
225    */
226   private AttributeDefContainer attributeDefContainer;
227   
228   /**
229    * attribute def container 
230    * @return attribute def container
231    */
232   public AttributeDefContainer getAttributeDefContainer() {
233     if (this.attributeDefContainer == null) {
234       this.attributeDefContainer = new AttributeDefContainer();
235     }
236     return this.attributeDefContainer;
237   }
238   
239   /**
240    * 
241    * @param attributeDefContainer1
242    */
243   public void setAttributeDefContainer(AttributeDefContainer attributeDefContainer1) {
244     this.attributeDefContainer = attributeDefContainer1;
245   }
246   
247   /** 
248    * attribute def name container 
249    */
250   private AttributeDefNameContainer attributeDefNameContainer;
251   
252   /**
253    * attribute def name container 
254    * @return attribute def name container
255    */
256   public AttributeDefNameContainer getAttributeDefNameContainer() {
257     if (this.attributeDefNameContainer == null) {
258       this.attributeDefNameContainer = new AttributeDefNameContainer();
259     }
260     return this.attributeDefNameContainer;
261   }
262   
263   /**
264    * @param attributeDefNameContainer1
265    */
266   public void setAttributeDefNameContainer(AttributeDefNameContainer attributeDefNameContainer1) {
267     this.attributeDefNameContainer = attributeDefNameContainer1;
268   }
269 
270   /**
271    * subject container
272    */
273   private SubjectContainer subjectContainer;
274 
275   /**
276    * subject container lazy loaded
277    * @return subject container
278    */
279   public SubjectContainer getSubjectContainer() {
280     if (this.subjectContainer == null) {
281       this.subjectContainer = new SubjectContainer();
282     }
283     return this.subjectContainer;
284   }
285 
286   /**
287    * 
288    * @param subjectContainer1
289    */
290   public void setSubjectContainer(SubjectContainer subjectContainer1) {
291     this.subjectContainer = subjectContainer1;
292   }
293 
294   /**
295    * common request bean
296    */
297   private CommonRequestContainer commonRequestContainer;
298   
299   /**
300    * common request bean
301    * @return common request bean
302    */
303   public CommonRequestContainer getCommonRequestContainer() {
304     if (this.commonRequestContainer == null) {
305       this.commonRequestContainer = new CommonRequestContainer();
306     }
307     return this.commonRequestContainer;
308   }
309 
310   /**
311    * common request bean
312    * @param commonRequestBean1
313    */
314   public void setCommonRequestContainer(CommonRequestContainer commonRequestBean1) {
315     this.commonRequestContainer = commonRequestBean1;
316   }
317 
318   /**
319    * current gui audit entry  being displayed
320    */
321   private GuiAuditEntry guiAuditEntry = null;
322 
323   /**
324    * current gui audit entry  being displayed
325    * @return audit
326    */
327   public GuiAuditEntry getGuiAuditEntry() {
328     return this.guiAuditEntry;
329   }
330 
331   /**
332    * current gui audit entry  being displayed
333    * @param guiAuditEntry1
334    */
335   public void setGuiAuditEntry(GuiAuditEntry guiAuditEntry1) {
336     this.guiAuditEntry = guiAuditEntry1;
337   }
338 
339   /**
340    * use static request container for gsh
341    */
342   private static ThreadLocal<Boolean> useStaticRequestContainer = new InheritableThreadLocal<Boolean>();
343   
344   /**
345    * use static request container for gsh or testing
346    * @param theUseStaticRequestContainer1
347    * @return if newly assigned, otherwise false if already set to that value
348    */
349   public static boolean assignUseStaticRequestContainer(boolean theUseStaticRequestContainer1) {
350     if (useStaticRequestContainer.get() != null && useStaticRequestContainer.get() == theUseStaticRequestContainer1) {
351       return false;
352     }
353     useStaticRequestContainer.set(theUseStaticRequestContainer1);
354     GrouperTextContainer.grouperRequestContainerThreadLocalClear();
355     clearStaticRequestContainer();
356     if (theUseStaticRequestContainer1) {
357       GrouperTextContainer.grouperRequestContainerThreadLocalAssign(GrouperRequestContainer.retrieveFromRequestOrCreate());
358     }
359     return true;
360   }
361 
362   /**
363    * use static request container for gsh
364    */
365   private static ThreadLocal<GrouperRequestContainer> staticGrouperRequestContainer 
366     = new InheritableThreadLocal<GrouperRequestContainer>();
367 
368   /**
369    * clear out the static request container
370    */
371   public static void clearStaticRequestContainer() {
372     staticGrouperRequestContainer.remove();
373   }
374   
375   /**
376    * retrieveFromSession, cannot be null
377    * @return the app state in request scope
378    */
379   public static GrouperRequestContainer retrieveFromRequestOrCreate() {
380     
381     if (useStaticRequestContainer.get() != null && useStaticRequestContainer.get()) {
382       GrouperRequestContainer grouperRequestContainer = staticGrouperRequestContainer.get();
383       if (grouperRequestContainer == null) {
384         grouperRequestContainer = new GrouperRequestContainer();
385         staticGrouperRequestContainer.set(grouperRequestContainer);
386       }
387       return grouperRequestContainer;
388     }
389     
390     HttpServletRequest httpServletRequest = GrouperUiFilter.retrieveHttpServletRequest();
391     if (httpServletRequest == null) {
392       throw new RuntimeException("This is not a UI environment.  Either pass the env var: GROUPER_UI=true, or set in grouper.hibernate.properties: grouper.is.ui=true");
393     }
394     String attributeName = "grouperRequestContainer";
395     GrouperRequestContainer grouperRequestContainer = 
396       (GrouperRequestContainer)httpServletRequest.getAttribute(attributeName);
397     if (grouperRequestContainer == null) {
398       grouperRequestContainer = new GrouperRequestContainer();
399       httpServletRequest.setAttribute(attributeName, grouperRequestContainer);
400       httpServletRequest.setAttribute("grouperUtil", new GrouperUtil());
401     }
402     return grouperRequestContainer;
403   }
404 
405   /**
406    * gui container for membership data
407    */
408   private MembershipGuiContainer membershipGuiContainer;
409   
410   /**
411    * gui container for membership data
412    * @return gui container
413    */
414   public MembershipGuiContainer getMembershipGuiContainer() {
415     if (this.membershipGuiContainer == null) {
416       this.membershipGuiContainer = new MembershipGuiContainer();
417     }
418     return this.membershipGuiContainer;
419   }
420 
421   /**
422    * gui container for membership data
423    * @param guiMembershipContainer1
424    */
425   public void setMembershipGuiContainer(MembershipGuiContainer guiMembershipContainer1) {
426     this.membershipGuiContainer = guiMembershipContainer1;
427   }
428 
429   /**
430    * container for my stems screens
431    */
432   private MyStemsContainer myStemsContainer = null;
433   
434   /**
435    * container for my stems screens
436    * @return my stems
437    */
438   public MyStemsContainer getMyStemsContainer() {
439     if (this.myStemsContainer == null) {
440       this.myStemsContainer = new MyStemsContainer();
441     }
442     return this.myStemsContainer;
443   }
444 
445   /**
446    * container for my stems screens
447    * @param myStemsContainer1
448    */
449   public void setMyStemsContainer(MyStemsContainer myStemsContainer1) {
450     this.myStemsContainer = myStemsContainer1;
451   }
452 
453   /**
454    * container for my groups screens
455    */
456   private MyGroupsContainer myGroupsContainer = null;
457   
458   /**
459    * container for my groups screens
460    * @return my groups container
461    */
462   public MyGroupsContainer getMyGroupsContainer() {
463     if (this.myGroupsContainer == null) {
464       this.myGroupsContainer = new MyGroupsContainer();
465     }
466     return this.myGroupsContainer;
467   }
468 
469   /**
470    * container for my groups screens
471    * @param myGroupsContainer1
472    */
473   public void setMyGroupsContainer(MyGroupsContainer myGroupsContainer1) {
474     this.myGroupsContainer = myGroupsContainer1;
475   }
476 
477   /**
478    * service container
479    */
480   private ServiceContainer serviceContainer;
481   
482   /**
483    * service container lazy load if null
484    * @return the serviceContainer
485    */
486   public ServiceContainer getServiceContainer() {
487     if (this.serviceContainer == null) {
488       this.serviceContainer = new ServiceContainer();
489     }
490     return this.serviceContainer;
491   }
492   
493   /**
494    * @param serviceContainer1 the serviceContainer to set
495    */
496   public void setServiceContainer(ServiceContainer serviceContainer1) {
497     this.serviceContainer = serviceContainer1;
498   }
499 
500   /**
501    * container for index screen and general components
502    */
503   private IndexContainer indexContainer = null;
504 
505   /**
506    * container for index screen and general components, lazy load, create if null
507    * @return the index container
508    */
509   public IndexContainer getIndexContainer() {
510     if (this.indexContainer == null) {
511       this.indexContainer = new IndexContainer();
512     }
513     return this.indexContainer;
514   }
515 
516   /**
517    * container for index screen and general components
518    * @param indexContainer1
519    */
520   public void setIndexContainer(IndexContainer indexContainer1) {
521     this.indexContainer = indexContainer1;
522   }
523   
524   /**
525    * container for configuration
526    */
527   private ConfigurationContainer configurationContainer;
528 
529   /**
530    * lazy load config container
531    * @return config container
532    */
533   public ConfigurationContainer getConfigurationContainer() {
534     if (this.configurationContainer == null) {
535       this.configurationContainer = new ConfigurationContainer();
536     }
537     return this.configurationContainer;
538   }
539 
540   /**
541    * custom ui container
542    */
543   private CustomUiContainer customUiContainer;
544   
545   
546   /**
547    * custom ui container
548    * @return the groupLiteContainer
549    */
550   public CustomUiContainer getCustomUiContainer() {
551     if (this.customUiContainer == null) {
552       this.customUiContainer = new CustomUiContainer();
553     }
554     return this.customUiContainer;
555   }
556 
557   
558   /**
559    * custom ui container
560    * @param groupLiteContainer1 the groupLiteContainer to set
561    */
562   public void setCustomUiContainer(CustomUiContainer groupLiteContainer1) {
563     this.customUiContainer = groupLiteContainer1;
564   }
565 
566   /**
567    * container for group screens
568    */
569   private GroupContainer groupContainer;
570   
571   /**
572    * container for group screens
573    * @return container for group screens
574    */
575   public GroupContainer getGroupContainer() {
576     if (this.groupContainer == null) {
577       this.groupContainer = new GroupContainer();
578     }
579     return this.groupContainer;
580   }
581   
582   /**
583    * container for group screens
584    * @param theGroupContainer
585    */
586   public void setGroupContainer(GroupContainer theGroupContainer) {
587     this.groupContainer = theGroupContainer;
588   }
589   
590   /**
591    * container for stem screens
592    */
593   private StemContainer stemContainer;
594   
595   /**
596    * container for stem screens
597    * @return container for stem screens
598    */
599   public StemContainer getStemContainer() {
600     if (this.stemContainer == null) {
601       this.stemContainer = new StemContainer();
602     }
603     return this.stemContainer;
604   }
605   
606   /**
607    * container for stem screens
608    * @param theStemContainer
609    */
610   public void setStemContainer(StemContainer theStemContainer) {
611     this.stemContainer = theStemContainer;
612   }
613   
614   /**
615    * container for stem delete screens
616    */
617   private StemDeleteContainer stemDeleteContainer;
618   
619   /**
620    * container for stem delete screens
621    * @return container for stem delete screens
622    */
623   public StemDeleteContainer getStemDeleteContainer() {
624     if (this.stemDeleteContainer == null) {
625       this.stemDeleteContainer = new StemDeleteContainer();
626     }
627     return this.stemDeleteContainer;
628   }
629   
630   /**
631    * container for stem delete screens
632    * @param theStemDeleteContainer
633    */
634   public void setStemDeleteContainer(StemDeleteContainer theStemDeleteContainer) {
635     this.stemDeleteContainer = theStemDeleteContainer;
636   }
637   
638   /**
639    * container for rules
640    */
641   private RulesContainer rulesContainer;
642   
643   /**
644    * container for deprovisioning users
645    */
646   private DeprovisioningContainer deprovisioningContainer;
647 
648   /**
649    * container for attestation screen
650    */
651   private AttestationContainer attestationContainer;
652   
653   /**
654    * container for template screen
655    */
656   private GroupStemTemplateContainer groupStemTemplateContainer;
657   
658   /**
659    * container for groups/stems object types
660    */
661   private ObjectTypeContainer objectTypeContainer;
662   
663   /**
664    * container for groups workflow
665    */
666   private WorkflowContainer workflowContainer;
667   
668   
669   /**
670    * container for grouper reports
671    */
672   private GrouperReportContainer grouperReportContainer; 
673   
674   /**
675    * container for subject resolution
676    */
677   private SubjectResolutionContainer subjectResolutionContainer;
678   
679   /**
680    * container for subject sources
681    */
682   private SubjectSourceContainer subjectSourceContainer;
683   
684   /**
685    * container for external systems
686    */
687   private ExternalSystemContainer externalSystemContainer;
688   
689   /**
690    * container for external systems
691    * @return the container
692    */
693   public ExternalSystemContainer getExternalSystemContainer() {
694     
695     if (this.externalSystemContainer == null) {
696       this.externalSystemContainer = new ExternalSystemContainer();
697     }
698     
699     return this.externalSystemContainer;
700   }
701   
702   /**
703    * container for sql sync configs
704    */
705   private SqlSyncConfigurationContainer sqlSyncConfigurationContainer;
706   
707   /**
708    * container for sql sync configs
709    * @return the container
710    */
711   public SqlSyncConfigurationContainer getSqlSyncConfigurationContainer() {
712    
713     if (this.sqlSyncConfigurationContainer == null) {
714       this.sqlSyncConfigurationContainer = new SqlSyncConfigurationContainer();
715     }
716     
717     return this.sqlSyncConfigurationContainer;
718   }
719   
720   /**
721    * container for script tester configs
722    */
723   private ScriptTesterContainer scriptTesterContainer;
724   
725   /**
726    * container for script tester configs
727    * @return the container
728    */
729   public ScriptTesterContainer getScriptTesterContainer() {
730    
731     if (this.scriptTesterContainer == null) {
732       this.scriptTesterContainer = new ScriptTesterContainer();
733     }
734     
735     return this.scriptTesterContainer;
736   }
737   
738 
739   /**
740    * container for gsh templates
741    */
742   private GshTemplateContainer gshTemplateContainer;
743   
744   /**
745    * container for gsh templates
746    * @return the container
747    */
748   public GshTemplateContainer getGshTemplateContainer() {
749     if (this.gshTemplateContainer == null) {
750       this.gshTemplateContainer = new GshTemplateContainer();
751     }
752     
753     return this.gshTemplateContainer;
754   }
755 
756   /**
757    * container for provisioner configuration
758    */
759   private ProvisionerConfigurationContainer provisionerConfigurationContainer;
760   
761   /**
762    * container for provisioner configuration
763    * @return the container
764    */
765   public ProvisionerConfigurationContainer getProvisionerConfigurationContainer() {
766     
767     if (this.provisionerConfigurationContainer == null) {
768       this.provisionerConfigurationContainer = new ProvisionerConfigurationContainer();
769     }
770     
771     return this.provisionerConfigurationContainer;
772   }
773 
774   /**
775    * container for deprovisioning screen
776    * @return the container
777    */
778   public DeprovisioningContainer getDeprovisioningContainer() {
779     if (this.deprovisioningContainer == null) {
780       this.deprovisioningContainer = new DeprovisioningContainer();
781     }
782     return this.deprovisioningContainer;
783   }
784 
785   /**
786    * lazy load the attestation container
787    * @return the attestation container
788    */
789   public AttestationContainer getAttestationContainer() {
790     if (this.attestationContainer == null) {
791       this.attestationContainer = new AttestationContainer();
792     }
793     return this.attestationContainer;
794   }
795   
796   /**
797    * lazy load the template container
798    * @return the template container
799    */
800   public GroupStemTemplateContainer getGroupStemTemplateContainer() {
801     if (this.groupStemTemplateContainer == null) {
802       this.groupStemTemplateContainer = new GroupStemTemplateContainer();
803     }
804     return this.groupStemTemplateContainer;
805   }
806   
807   /**
808    * lazy load the object type container
809    * @return the object type container
810    */
811   public ObjectTypeContainer getObjectTypeContainer() {
812     if (this.objectTypeContainer == null) {
813       this.objectTypeContainer = new ObjectTypeContainer();
814     }
815     return this.objectTypeContainer;
816   }
817   
818   /**
819    * lazy load the workflow container
820    * @return the workflow container
821    */
822   public WorkflowContainer getWorkflowContainer() {
823     if (this.workflowContainer == null) {
824       this.workflowContainer = new WorkflowContainer();
825     }
826     return this.workflowContainer;
827   }
828 
829   /** lazy load the grouper report container
830    * @return the grouper report container
831    */
832   public GrouperReportContainer getGrouperReportContainer() {
833     if (this.grouperReportContainer == null) {
834       this.grouperReportContainer = new GrouperReportContainer();
835     }
836     return this.grouperReportContainer;
837   }
838 
839   
840   /**
841    * lazy load the subject resolution container
842    * @return
843    */
844   public SubjectResolutionContainer getSubjectResolutionContainer() {
845     if (this.subjectResolutionContainer == null) {
846       this.subjectResolutionContainer = new SubjectResolutionContainer();
847     }
848     return this.subjectResolutionContainer;
849   }
850   
851   public SubjectSourceContainer getSubjectSourceContainer() {
852     if (this.subjectSourceContainer == null) {
853       this.subjectSourceContainer = new SubjectSourceContainer();
854     }
855     return this.subjectSourceContainer;
856   }
857 
858   /**
859    * container for rules screens
860    * @return container for rules screens
861    */
862   public RulesContainer getRulesContainer() {
863     if (this.rulesContainer == null) {
864       this.rulesContainer = new RulesContainer();
865     }
866     return this.rulesContainer;
867   }
868   
869   /**
870    * container for rules screens
871    * @param theRulesContainer
872    */
873   public void setRulesContainer(RulesContainer theRulesContainer) {
874     this.rulesContainer = theRulesContainer;
875   }
876   
877   /**
878    * container for permission screen
879    */
880   private PermissionContainer permissionContainer;
881 
882   /**
883    * lazy load the permission container
884    * @return container for permission screen
885    */
886   public PermissionContainer getPermissionContainer() {
887     if (this.permissionContainer == null) {
888       this.permissionContainer = new PermissionContainer();
889     }
890     return this.permissionContainer;
891   }
892   
893   private PermissionUpdateRequestContainer permissionUpdateRequestContainer;
894   
895   public PermissionUpdateRequestContainer getPermissionUpdateRequestContainer() {
896     
897     if (this.permissionUpdateRequestContainer == null) {
898       this.permissionUpdateRequestContainer = new PermissionUpdateRequestContainer();
899     }
900     return permissionUpdateRequestContainer;
901   }
902   
903   /**
904    * container for role inheritance screens
905    */
906   private RoleInheritanceContainer roleInheritanceContainer;
907 
908   /**
909    * lazy load the role inheritance container
910    * @return
911    */
912   public RoleInheritanceContainer getRoleInheritanceContainer() {
913     
914     if (this.roleInheritanceContainer == null) {
915       this.roleInheritanceContainer = new RoleInheritanceContainer();
916     }
917     return roleInheritanceContainer;
918   }
919 
920   /**
921    * container for visualization screen
922    */
923   private VisualizationContainer visualizationContainer;
924 
925   /**
926    * lazy load the visualization container
927    * @return the visualization container
928    */
929   public VisualizationContainer getVisualizationContainer() {
930     if (this.visualizationContainer == null) {
931       this.visualizationContainer = new VisualizationContainer();
932     }
933     return this.visualizationContainer;
934   }
935   
936   /**
937    * container for authentication
938    */
939   private AuthenticationContainer authenticationContainer;
940   
941   /**
942    * container for authentication
943    * @return the container
944    */
945   public AuthenticationContainer getAuthenticationContainer() {
946     
947     if (this.authenticationContainer == null) {
948       this.authenticationContainer = new AuthenticationContainer();
949     }
950     
951     return this.authenticationContainer;
952   }
953   
954   
955   /**
956    * container for global attribute resolver configuration
957    */
958   private GlobalAttributeResolverConfigContainer globalAttributeResolverConfigContainer;
959   
960   /**
961    * container for global attribute resolver configuration
962    * @return the container
963    */
964   public GlobalAttributeResolverConfigContainer getGlobalAttributeResolverConfigContainer() {
965     
966     if (this.globalAttributeResolverConfigContainer == null) {
967       this.globalAttributeResolverConfigContainer = new GlobalAttributeResolverConfigContainer();
968     }
969     
970     return this.globalAttributeResolverConfigContainer;
971   }
972   
973   /**
974    * container for oidc config
975    */
976   private OidcConfigContainer oidcConfigContainer;
977   
978   /**
979    * container for oidc config
980    * @return the container
981    */
982   public OidcConfigContainer getOidcConfigContainer() {
983     
984     if (this.oidcConfigContainer == null) {
985       this.oidcConfigContainer = new OidcConfigContainer();
986     }
987     
988     return this.oidcConfigContainer;
989   }
990   
991   /**
992    * container for grouper password
993    */
994   private GrouperPasswordContainer grouperPasswordContainer;
995   
996   /**
997    * container for grouper password
998    * @return the container
999    */
1000   public GrouperPasswordContainer getGrouperPasswordContainer() {
1001     
1002     if (this.grouperPasswordContainer == null) {
1003       this.grouperPasswordContainer = new GrouperPasswordContainer();
1004     }
1005     
1006     return this.grouperPasswordContainer;
1007   }
1008 
1009 }