001 /** 002 * Copyright 2005-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.demo.uif.components; 017 018 import org.kuali.rice.krad.uif.component.Component; 019 import org.kuali.rice.krad.uif.container.Group; 020 import org.kuali.rice.krad.uif.container.TabGroup; 021 import org.kuali.rice.krad.uif.element.ContentElementBase; 022 import org.kuali.rice.krad.uif.field.FieldGroup; 023 import org.kuali.rice.krad.uif.lifecycle.ViewLifecycle; 024 import org.kuali.rice.krad.uif.view.View; 025 import org.kuali.rice.krad.uif.widget.SyntaxHighlighter; 026 027 import java.util.ArrayList; 028 import java.util.List; 029 030 /** 031 * The ComponentExhibit component is used to display demostrations of various components along with their source code 032 * and documentation 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036 public class ComponentExhibit extends ContentElementBase { 037 038 private List<Group> demoGroups; 039 private List<String> demoSourceCode; 040 private List<String> additionalDemoSourceCode1 = new ArrayList<String>(); 041 private List<String> additionalDemoSourceCode2 = new ArrayList<String>(); 042 private SyntaxHighlighter sourceCodeViewer; 043 private SyntaxHighlighter additionalSourceCodeViewer1; 044 private SyntaxHighlighter additionalSourceCodeViewer2; 045 private FieldGroup docLinkFields; 046 private TabGroup tabGroup; 047 048 /** 049 * Setup the tabGroup with the demoGroups and setup the sourceCodeViewer 050 * 051 * @see Component#performInitialization(org.kuali.rice.krad.uif.view.View, Object) 052 */ 053 @Override 054 public void performInitialization(Object model) { 055 //Setup tabGroup 056 List<Component> tabItems = new ArrayList<Component>(); 057 tabItems.addAll(tabGroup.getItems()); 058 tabItems.addAll(demoGroups); 059 tabGroup.setItems(tabItems); 060 061 //source code viewer setup 062 if(demoSourceCode != null && !demoSourceCode.isEmpty()){ 063 sourceCodeViewer.setSourceCode(demoSourceCode.get(0)); 064 } 065 066 if(additionalDemoSourceCode1 != null && !additionalDemoSourceCode1.isEmpty() 067 && additionalDemoSourceCode1.get(0) != null){ 068 additionalSourceCodeViewer1.setSourceCode(additionalDemoSourceCode1.get(0)); 069 } 070 071 if(additionalDemoSourceCode2 != null && !additionalDemoSourceCode2.isEmpty() 072 && additionalDemoSourceCode2.get(0) != null){ 073 additionalSourceCodeViewer2.setSourceCode(additionalDemoSourceCode2.get(0)); 074 } 075 } 076 077 /** 078 * @see org.kuali.rice.krad.uif.component.ComponentBase#getComponentsForLifecycle() 079 */ 080 @Override 081 public List<Component> getComponentsForLifecycle() { 082 List<Component> components = new ArrayList<Component>(); 083 084 components.add(sourceCodeViewer); 085 components.add(additionalSourceCodeViewer1); 086 components.add(additionalSourceCodeViewer2); 087 components.add(tabGroup); 088 089 return components; 090 } 091 092 /** 093 * Get the demoGroups demonstrating the component's features 094 * 095 * @return the demoGroups 096 */ 097 public List<Group> getDemoGroups() { 098 return demoGroups; 099 } 100 101 /** 102 * Sets the demoGroups. This SHOULD NOT be set by xml - use ComponentLibraryView's setDemoGroups. 103 * 104 * @param demoGroups 105 */ 106 public void setDemoGroups(List<Group> demoGroups) { 107 this.demoGroups = demoGroups; 108 } 109 110 /** 111 * Get the xml sourceCode for the demoGroups' features being demonstrated. 112 * 113 * @return the sourceCode 114 */ 115 public List<String> getDemoSourceCode() { 116 return demoSourceCode; 117 } 118 119 /** 120 * Sets the demoSourceCode. This SHOULD NOT be set by xml - ComponentLibraryView will automatically read the source. 121 * 122 * @param demoSourceCode 123 */ 124 public void setDemoSourceCode(List<String> demoSourceCode) { 125 this.demoSourceCode = demoSourceCode; 126 } 127 128 /** 129 * The SyntaxHighlighter component being used by the exhibit to show the demoSourceCode 130 * 131 * @return the SyntaxHighlighter component 132 */ 133 public SyntaxHighlighter getSourceCodeViewer() { 134 return sourceCodeViewer; 135 } 136 137 /** 138 * Set the SyntaxHighlighter sourceCodeViewer component 139 * 140 * @param sourceCodeViewer 141 */ 142 public void setSourceCodeViewer(SyntaxHighlighter sourceCodeViewer) { 143 this.sourceCodeViewer = sourceCodeViewer; 144 } 145 146 /** 147 * Get the FieldGroup that contains links to the documentation 148 * TODO not yet used 149 * @return the FieldGroup that contains documentation links 150 */ 151 public FieldGroup getDocLinkFields() { 152 return docLinkFields; 153 } 154 155 /** 156 * Sets the docLinkFields fieldGroup 157 * @param docLinkFields 158 */ 159 public void setDocLinkFields(FieldGroup docLinkFields) { 160 this.docLinkFields = docLinkFields; 161 } 162 163 /** 164 * Get the tabGroup used to display the demoGroups 165 * 166 * @return the tabGroup used to display the demoGroups 167 */ 168 public TabGroup getTabGroup() { 169 return tabGroup; 170 } 171 172 /** 173 * Set the tabGroup used to display the demoGroups 174 * 175 * @param tabGroup 176 */ 177 public void setTabGroup(TabGroup tabGroup) { 178 this.tabGroup = tabGroup; 179 } 180 181 public List<String> getAdditionalDemoSourceCode1() { 182 return additionalDemoSourceCode1; 183 } 184 185 public void setAdditionalDemoSourceCode1(List<String> additionalDemoSourceCode1) { 186 this.additionalDemoSourceCode1 = additionalDemoSourceCode1; 187 } 188 189 public List<String> getAdditionalDemoSourceCode2() { 190 return additionalDemoSourceCode2; 191 } 192 193 public void setAdditionalDemoSourceCode2(List<String> additionalDemoSourceCode2) { 194 this.additionalDemoSourceCode2 = additionalDemoSourceCode2; 195 } 196 197 public SyntaxHighlighter getAdditionalSourceCodeViewer1() { 198 return additionalSourceCodeViewer1; 199 } 200 201 public void setAdditionalSourceCodeViewer1(SyntaxHighlighter additionalSourceCodeViewer1) { 202 this.additionalSourceCodeViewer1 = additionalSourceCodeViewer1; 203 } 204 205 public SyntaxHighlighter getAdditionalSourceCodeViewer2() { 206 return additionalSourceCodeViewer2; 207 } 208 209 public void setAdditionalSourceCodeViewer2(SyntaxHighlighter additionalSourceCodeViewer2) { 210 this.additionalSourceCodeViewer2 = additionalSourceCodeViewer2; 211 } 212 213 /** 214 * @see org.kuali.rice.krad.uif.component.ComponentBase#copy() 215 */ 216 @Override 217 protected <T> void copyProperties(T component) { 218 super.copyProperties(component); 219 220 ComponentExhibit exhibitCopy = (ComponentExhibit) component; 221 222 if (this.demoGroups != null) { 223 List<Group> demoGroupsCopy = new ArrayList<Group>(); 224 225 for (Group demoGroup : this.demoGroups) { 226 demoGroupsCopy.add((Group) demoGroup.copy()); 227 } 228 exhibitCopy.setDemoGroups(demoGroupsCopy); 229 } 230 231 if (this.demoSourceCode != null) { 232 exhibitCopy.setDemoSourceCode(new ArrayList<String>(this.demoSourceCode)); 233 } 234 235 if (this.additionalDemoSourceCode1 != null) { 236 exhibitCopy.setAdditionalDemoSourceCode1(new ArrayList<String>(this.additionalDemoSourceCode1)); 237 } 238 239 if (this.additionalDemoSourceCode2 != null) { 240 exhibitCopy.setAdditionalDemoSourceCode2(new ArrayList<String>(this.additionalDemoSourceCode2)); 241 } 242 243 if (this.sourceCodeViewer != null) { 244 exhibitCopy.setSourceCodeViewer((SyntaxHighlighter) this.sourceCodeViewer.copy()); 245 } 246 247 if (this.additionalSourceCodeViewer1 != null) { 248 exhibitCopy.setAdditionalSourceCodeViewer1((SyntaxHighlighter) this.additionalSourceCodeViewer1.copy()); 249 } 250 251 if (this.additionalSourceCodeViewer2 != null) { 252 exhibitCopy.setAdditionalSourceCodeViewer2((SyntaxHighlighter) this.additionalSourceCodeViewer2.copy()); 253 } 254 255 if (this.docLinkFields != null) { 256 exhibitCopy.setDocLinkFields((FieldGroup) this.docLinkFields.copy()); 257 } 258 259 if (this.tabGroup != null) { 260 exhibitCopy.setTabGroup((TabGroup) this.tabGroup.copy()); 261 } 262 } 263 }