KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > deliver > invokers > DecoratedComponentBasedHTMLPageInvoker


1 /* ===============================================================================
2 *
3 * Part of the InfoGlue Content Management Platform (www.infoglue.org)
4 *
5 * ===============================================================================
6 *
7 * Copyright (C)
8 *
9 * This program is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU General Public License version 2, as published by the
11 * Free Software Foundation. See the file LICENSE.html for more information.
12 *
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
19 * Place, Suite 330 / Boston, MA 02111-1307 / USA.
20 *
21 * ===============================================================================
22 */

23
24 package org.infoglue.deliver.invokers;
25
26 import java.io.File JavaDoc;
27 import java.io.PrintWriter JavaDoc;
28 import java.io.StringWriter JavaDoc;
29 import java.net.URLEncoder JavaDoc;
30 import java.util.ArrayList JavaDoc;
31 import java.util.Collection JavaDoc;
32 import java.util.HashMap JavaDoc;
33 import java.util.Iterator JavaDoc;
34 import java.util.List JavaDoc;
35 import java.util.Locale JavaDoc;
36 import java.util.Map JavaDoc;
37
38 import org.apache.log4j.Logger;
39 import org.dom4j.Document;
40 import org.infoglue.cms.controllers.kernel.impl.simple.AccessRightController;
41 import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
42 import org.infoglue.cms.controllers.kernel.impl.simple.PageTemplateController;
43 import org.infoglue.cms.entities.content.ContentVO;
44 import org.infoglue.cms.entities.content.ContentVersionVO;
45 import org.infoglue.cms.entities.management.LanguageVO;
46 import org.infoglue.cms.exception.SystemException;
47 import org.infoglue.cms.io.FileHelper;
48 import org.infoglue.cms.security.InfoGluePrincipal;
49 import org.infoglue.cms.util.CmsPropertyHandler;
50 import org.infoglue.cms.util.StringManager;
51 import org.infoglue.cms.util.StringManagerFactory;
52 import org.infoglue.cms.util.XMLHelper;
53 import org.infoglue.cms.util.dom.DOMBuilder;
54 import org.infoglue.deliver.applications.actions.InfoGlueComponent;
55 import org.infoglue.deliver.applications.databeans.ComponentBinding;
56 import org.infoglue.deliver.applications.databeans.ComponentProperty;
57 import org.infoglue.deliver.applications.databeans.ComponentPropertyOption;
58 import org.infoglue.deliver.applications.databeans.ComponentTask;
59 import org.infoglue.deliver.applications.databeans.DeliveryContext;
60 import org.infoglue.deliver.applications.databeans.Slot;
61 import org.infoglue.deliver.controllers.kernel.impl.simple.BasicTemplateController;
62 import org.infoglue.deliver.controllers.kernel.impl.simple.ContentDeliveryController;
63 import org.infoglue.deliver.controllers.kernel.impl.simple.DecoratedComponentLogic;
64 import org.infoglue.deliver.controllers.kernel.impl.simple.IntegrationDeliveryController;
65 import org.infoglue.deliver.controllers.kernel.impl.simple.LanguageDeliveryController;
66 import org.infoglue.deliver.controllers.kernel.impl.simple.NodeDeliveryController;
67 import org.infoglue.deliver.controllers.kernel.impl.simple.TemplateController;
68 import org.infoglue.deliver.util.CacheController;
69 import org.infoglue.deliver.util.Timer;
70 import org.infoglue.deliver.util.VelocityTemplateProcessor;
71 import org.w3c.dom.NodeList JavaDoc;
72
73 /**
74 * @author Mattias Bogeblad
75 *
76 * This class delivers a normal html page by using the component-based method but also decorates it
77 * so it can be used by the structure tool to manage the page components.
78 */

79
80 public class DecoratedComponentBasedHTMLPageInvoker extends ComponentBasedHTMLPageInvoker
81 {
82     private final static Logger logger = Logger.getLogger(DecoratedComponentBasedHTMLPageInvoker.class.getName());
83
84     private String JavaDoc propertiesDivs = "";
85     private String JavaDoc tasksDivs = "";
86     
87     /**
88      * This is the method that will render the page. It uses the new component based structure.
89      */

90     
91     public void invokePage() throws SystemException, Exception JavaDoc
92     {
93         Timer timer = new Timer();
94         timer.setActive(false);
95         
96         String JavaDoc decoratePageTemplate = "";
97         
98         NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(this.getDeliveryContext());
99         
100         timer.printElapsedTime("Initialized controllers");
101         
102         Integer JavaDoc repositoryId = nodeDeliveryController.getSiteNode(getDatabase(), this.getDeliveryContext().getSiteNodeId()).getRepository().getId();
103         String JavaDoc componentXML = getPageComponentsString(getDatabase(), this.getTemplateController(), this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), this.getDeliveryContext().getContentId());
104         //logger.info("componentXML:" + componentXML);
105

106         timer.printElapsedTime("After getPageComponentsString");
107         
108         Timer decoratorTimer = new Timer();
109         decoratorTimer.setActive(false);
110         
111         if(componentXML == null || componentXML.length() == 0)
112         {
113             decoratePageTemplate = showInitialBindingDialog(this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), this.getDeliveryContext().getContentId());
114         }
115         else
116         {
117             Document document = null;
118             try
119             {
120                 document = new DOMBuilder().getDocument(componentXML);
121             }
122             catch(Exception JavaDoc e)
123             {
124                 throw new SystemException("There was a problem parsing the component structure on the page. Could be invalid XML in the ComponentStructure attribute. Message:" + e.getMessage(), e);
125             }
126             
127             decoratorTimer.printElapsedTime("After reading document");
128             
129             List JavaDoc pageComponents = getPageComponents(getDatabase(), componentXML, document.getRootElement(), "base", this.getTemplateController(), null);
130
131             InfoGlueComponent baseComponent = null;
132             if(pageComponents.size() > 0)
133             {
134                 baseComponent = (InfoGlueComponent)pageComponents.get(0);
135             }
136
137             decoratorTimer.printElapsedTime("After getting basecomponent");
138             
139             if(baseComponent == null)
140             {
141                 decoratePageTemplate = showInitialBindingDialog(this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), this.getDeliveryContext().getContentId());
142             }
143             else
144             {
145                 //if(this.getDeliveryContext().getShowSimple() == true)
146
//{
147
// decoratePageTemplate = showSimplePageStructure(this.getTemplateController(), repositoryId, this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), baseComponent);
148
//}
149
//else
150
//{
151
ContentVO metaInfoContentVO = nodeDeliveryController.getBoundContent(getDatabase(), this.getTemplateController().getPrincipal(), this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), true, "Meta information", this.getDeliveryContext());
152                     decoratePageTemplate = decorateComponent(baseComponent, this.getTemplateController(), repositoryId, this.getDeliveryContext().getSiteNodeId(), this.getDeliveryContext().getLanguageId(), this.getDeliveryContext().getContentId()/*, metaInfoContentVO.getId()*/);
153                     decoratePageTemplate = decorateTemplate(this.getTemplateController(), decoratePageTemplate, this.getDeliveryContext(), baseComponent);
154                 //}
155
}
156         }
157         
158         timer.printElapsedTime("After main decoration");
159         
160         //TODO - TEST
161
decoratePageTemplate += propertiesDivs + tasksDivs;
162         
163         String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
164         
165         //-- moved the creation of a default context into the baseclass
166
// (robert)
167
Map JavaDoc context = getDefaultContext();
168
169         context.put("componentEditorUrl", componentEditorUrl);
170         boolean oldUseFullUrl = this.getTemplateController().getDeliveryContext().getUseFullUrl();
171         this.getTemplateController().getDeliveryContext().setUseFullUrl(true);
172         context.put("currentUrl", URLEncoder.encode(this.getTemplateController().getCurrentPageUrl(), "UTF-8"));
173         context.put("contextName", this.getRequest().getContextPath());
174         
175         this.getTemplateController().getDeliveryContext().setUseFullUrl(oldUseFullUrl);
176         StringWriter JavaDoc cacheString = new StringWriter JavaDoc();
177         PrintWriter JavaDoc cachedStream = new PrintWriter JavaDoc(cacheString);
178         
179         new VelocityTemplateProcessor().renderTemplate(context, cachedStream, decoratePageTemplate);
180
181         this.setPageString(cacheString.toString());
182         
183         timer.printElapsedTime("End invokePage");
184     }
185     
186      /**
187       * This method prints out the first template dialog.
188       */

189
190      private String JavaDoc showInitialBindingDialog(Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId)
191      {
192          String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
193          String JavaDoc url = "javascript:window.open('" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&specifyBaseTemplate=true&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "', 'BaseTemplate', 'width=600,height=700,left=50,top=50,toolbar=no,status=no,scrollbars=yes,location=no,menubar=no,directories=no,resizable=yes');";
194          
195          String JavaDoc pageTemplateHTML = " or choose a page template below.<br><br>";
196          
197          boolean foundPageTemplate = false;
198
199          try
200          {
201              List JavaDoc sortedPageTemplates = PageTemplateController.getController().getPageTemplates(this.getTemplateController().getPrincipal());
202              Iterator JavaDoc sortedPageTemplatesIterator = sortedPageTemplates.iterator();
203              while(sortedPageTemplatesIterator.hasNext())
204              {
205                  ContentVO contentVO = (ContentVO)sortedPageTemplatesIterator.next();
206                  ContentVersionVO contentVersionVO = this.getTemplateController().getContentVersion(contentVO.getId(), LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(getDatabase(), siteNodeId).getId(), false);
207                  if(contentVersionVO != null)
208                  {
209                      String JavaDoc imageUrl = this.getTemplateController().getAssetUrl(contentVO.getId(), "thumbnail");
210                      if(imageUrl == null || imageUrl.equals(""))
211                          imageUrl = this.getRequest().getContextPath() + "/images/undefinedPageTemplate.jpg";
212                  
213                      pageTemplateHTML += "<div style=\"border: 1px solid #C2D0E2; float: left; text-align: center; padding: 5px 5px 5px 5px;\"><a HREF=\"" + componentEditorUrl + "ViewSiteNodePageComponents!addPageTemplate.action?repositoryId=" + contentVO.getRepositoryId() + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&pageTemplateContentId=" + contentVO.getId() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img SRC=\"" + imageUrl + "\" border=\"0\"><br>";
214                      pageTemplateHTML += contentVO.getName() + "</a>";
215                      pageTemplateHTML += "</div>";
216                      foundPageTemplate = true;
217                  }
218              }
219          }
220          catch(Exception JavaDoc e)
221          {
222              logger.warn("A problem arouse when getting the page templates:" + e.getMessage(), e);
223          }
224          
225          this.getTemplateController().getDeliveryContext().setContentType("text/html");
226          this.getTemplateController().getDeliveryContext().setDisablePageCache(true);
227          return "<html><body style=\"font-family:verdana, sans-serif; font-size:10px;\">The page has no base component assigned yet. Click <a HREF=\"" + url + "\">here</a> to assign one" + (foundPageTemplate ? pageTemplateHTML : "") + "</body></html>";
228      }
229
230
231     /**
232      * This method adds the neccessairy html to a template to make it right-clickable.
233      */

234
235     private String JavaDoc decorateTemplate(TemplateController templateController, String JavaDoc template, DeliveryContext deliveryContext, InfoGlueComponent component)
236     {
237         Timer timer = new Timer();
238         timer.setActive(false);
239
240         String JavaDoc decoratedTemplate = template;
241         
242         try
243         {
244             InfoGluePrincipal principal = templateController.getPrincipal();
245             String JavaDoc cmsUserName = (String JavaDoc)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
246             if(cmsUserName != null)
247                 principal = templateController.getPrincipal(cmsUserName);
248
249             boolean hasAccessToAccessRights = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.ChangeSlotAccess", "");
250             boolean hasAccessToAddComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.AddComponent", "" + component.getContentId() + "_" + component.getSlotName());
251             boolean hasAccessToDeleteComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.DeleteComponent", "" + component.getContentId() + "_" + component.getSlotName());
252             boolean hasSaveTemplateAccess = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "StructureTool.SaveTemplate", "");
253
254             String JavaDoc extraHeader = FileHelper.getFileAsString(new File JavaDoc(CmsPropertyHandler.getContextRootPath() + "preview/pageComponentEditorHeader.vm"));
255             String JavaDoc extraBody = FileHelper.getFileAsString(new File JavaDoc(CmsPropertyHandler.getContextRootPath() + "preview/pageComponentEditorBody.vm"));
256             
257             Locale JavaDoc locale = templateController.getLocale();
258             String JavaDoc submitToPublishHTML = getLocalizedString(locale, "deliver.editOnSight.submitToPublish");
259             String JavaDoc addComponentHTML = getLocalizedString(locale, "deliver.editOnSight.addComponentHTML");
260             String JavaDoc deleteComponentHTML = getLocalizedString(locale, "deliver.editOnSight.deleteComponentHTML");
261             String JavaDoc accessRightsHTML = getLocalizedString(locale, "deliver.editOnSight.accessRightsHTML");
262             String JavaDoc pageComponentsHTML = getLocalizedString(locale, "deliver.editOnSight.pageComponentsHTML");
263             String JavaDoc viewSourceHTML = getLocalizedString(locale, "deliver.editOnSight.viewSourceHTML");
264             String JavaDoc componentEditorInNewWindowHTML = getLocalizedString(locale, "deliver.editOnSight.componentEditorInNewWindowHTML");
265             String JavaDoc savePageTemplateHTML = getLocalizedString(locale, "deliver.editOnSight.savePageTemplateHTML");
266
267             String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
268             String JavaDoc saveTemplateUrl = "saveComponentStructure('" + componentEditorUrl + "CreatePageTemplate!input.action?contentId=" + templateController.getSiteNode(deliveryContext.getSiteNodeId()).getMetaInfoContentId() + "');";
269             if(!hasSaveTemplateAccess)
270                 saveTemplateUrl = "alert('Not authorized to save template');";
271                     
272             extraBody = extraBody.replaceAll("\\$siteNodeId", "" + templateController.getSiteNodeId());
273             extraBody = extraBody.replaceAll("\\$repositoryId", "" + templateController.getSiteNode().getRepositoryId());
274             extraBody = extraBody.replaceAll("\\$originalFullURL", URLEncoder.encode(templateController.getOriginalFullURL(), "UTF-8"));
275             
276             extraBody = extraBody.replaceAll("\\$submitToPublishHTML", submitToPublishHTML);
277             extraBody = extraBody.replaceAll("\\$addComponentHTML", addComponentHTML);
278             extraBody = extraBody.replaceAll("\\$deleteComponentHTML", deleteComponentHTML);
279             extraBody = extraBody.replaceAll("\\$accessRightsHTML", accessRightsHTML);
280             
281             extraBody = extraBody.replaceAll("\\$pageComponents", pageComponentsHTML);
282             extraBody = extraBody.replaceAll("\\$componentEditorInNewWindowHTML", componentEditorInNewWindowHTML);
283             extraBody = extraBody.replaceAll("\\$savePageTemplateHTML", savePageTemplateHTML);
284             extraBody = extraBody.replaceAll("\\$saveTemplateUrl", saveTemplateUrl);
285             extraBody = extraBody.replaceAll("\\$viewSource", viewSourceHTML);
286             
287             extraBody = extraBody.replaceAll("\\$addComponentJavascript", "var hasAccessToAddComponent" + component.getSlotName() + " = " + hasAccessToAddComponent + ";");
288             extraBody = extraBody.replaceAll("\\$deleteComponentJavascript", "var hasAccessToDeleteComponent" + component.getSlotName() + " = " + hasAccessToDeleteComponent + ";");
289             extraBody = extraBody.replaceAll("\\$changeAccessJavascript", "var hasAccessToAccessRights" + component.getSlotName() + " = " + hasAccessToAccessRights + ";");
290             
291             //List tasks = getTasks();
292
//component.setTasks(tasks);
293

294             //String tasks = templateController.getContentAttribute(component.getContentId(), "ComponentTasks", true);
295

296             /*
297             Map context = new HashMap();
298             context.put("templateLogic", templateController);
299             StringWriter cacheString = new StringWriter();
300             PrintWriter cachedStream = new PrintWriter(cacheString);
301             new VelocityTemplateProcessor().renderTemplate(context, cachedStream, extraBody);
302             extraBody = cacheString.toString();
303             */

304             
305             //extraHeader.replaceAll()
306

307             timer.printElapsedTime("Read files");
308             
309             StringBuffer JavaDoc modifiedTemplate = new StringBuffer JavaDoc(template);
310             
311             //Adding stuff in the header
312
int indexOfHeadEndTag = modifiedTemplate.indexOf("</head");
313             if(indexOfHeadEndTag == -1)
314                 indexOfHeadEndTag = modifiedTemplate.indexOf("</HEAD");
315             
316             if(indexOfHeadEndTag > -1)
317             {
318                 modifiedTemplate = modifiedTemplate.replace(indexOfHeadEndTag, modifiedTemplate.indexOf(">", indexOfHeadEndTag) + 1, extraHeader);
319             }
320             else
321             {
322                 int indexOfHTMLStartTag = modifiedTemplate.indexOf("<html");
323                 if(indexOfHTMLStartTag == -1)
324                     indexOfHTMLStartTag = modifiedTemplate.indexOf("<HTML");
325         
326                 if(indexOfHTMLStartTag > -1)
327                 {
328                     modifiedTemplate = modifiedTemplate.insert(modifiedTemplate.indexOf(">", indexOfHTMLStartTag) + 1, "<head>" + extraHeader);
329                 }
330                 else
331                 {
332                     logger.info("The current template is not a valid document. It does not comply with the simplest standards such as having a correct header.");
333                 }
334             }
335
336             timer.printElapsedTime("Header handled");
337
338             //Adding stuff in the body
339
int indexOfBodyStartTag = modifiedTemplate.indexOf("<body");
340             if(indexOfBodyStartTag == -1)
341                 indexOfBodyStartTag = modifiedTemplate.indexOf("<BODY");
342             
343             if(indexOfBodyStartTag > -1)
344             {
345                 //String pageComponentStructureDiv = "";
346
String JavaDoc pageComponentStructureDiv = getPageComponentStructureDiv(templateController, deliveryContext.getSiteNodeId(), deliveryContext.getLanguageId(), component);
347                 timer.printElapsedTime("pageComponentStructureDiv");
348                 String JavaDoc componentPaletteDiv = getComponentPaletteDiv(deliveryContext.getSiteNodeId(), deliveryContext.getLanguageId(), templateController);
349                 //String componentPaletteDiv = "";
350
timer.printElapsedTime("componentPaletteDiv");
351                 modifiedTemplate = modifiedTemplate.insert(modifiedTemplate.indexOf(">", indexOfBodyStartTag) + 1, extraBody + pageComponentStructureDiv + componentPaletteDiv);
352             }
353             else
354             {
355                 logger.info("The current template is not a valid document. It does not comply with the simplest standards such as having a correct body.");
356             }
357             
358             timer.printElapsedTime("Body handled");
359
360             decoratedTemplate = modifiedTemplate.toString();
361         }
362         catch(Exception JavaDoc e)
363         {
364             logger.warn("An error occurred when deliver tried to decorate your template to enable onSiteEditing. Reason " + e.getMessage(), e);
365         }
366         
367         return decoratedTemplate;
368     }
369
370    
371     private String JavaDoc decorateComponent(InfoGlueComponent component, TemplateController templateController, Integer JavaDoc repositoryId, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId/*, Integer metainfoContentId*/) throws Exception JavaDoc
372     {
373         String JavaDoc decoratedComponent = "";
374         
375         //logger.info("decorateComponent.contentId:" + contentId);
376

377         //logger.info("decorateComponent:" + component.getName());
378

379         String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
380
381         Timer timer = new Timer();
382         timer.setActive(false);
383
384         try
385         {
386             String JavaDoc componentString = getComponentString(templateController, component.getContentId(), component);
387
388             if(component.getParentComponent() == null && templateController.getDeliveryContext().getShowSimple())
389             {
390                 templateController.getDeliveryContext().setContentType("text/html");
391                 templateController.getDeliveryContext().setDisablePageCache(true);
392                 componentString = "<html><head></head><body onload=\"toggleDiv('pageComponents');\">" + componentString + "</body></html>";
393             }
394             
395             templateController.setComponentLogic(new DecoratedComponentLogic(templateController, component));
396             Map JavaDoc context = super.getDefaultContext();
397             context.put("templateLogic", templateController);
398             StringWriter JavaDoc cacheString = new StringWriter JavaDoc();
399             PrintWriter JavaDoc cachedStream = new PrintWriter JavaDoc(cacheString);
400             new VelocityTemplateProcessor().renderTemplate(context, cachedStream, componentString);
401             componentString = cacheString.toString();
402     
403             int bodyIndex = componentString.indexOf("<body");
404             if(bodyIndex == -1)
405                 bodyIndex = componentString.indexOf("<BODY");
406         
407             if(component.getParentComponent() == null && bodyIndex > -1)
408             {
409                 //String onContextMenu = " onload=\"javascript:setToolbarInitialPosition();\"";
410
//String onContextMenu = " class=\"siteBody\" onload=\"javascript:setToolbarInitialPosition();\"";
411
String JavaDoc onContextMenu = " onload=\"javascript:setToolbarInitialPosition();\"";
412                 if(templateController.getDeliveryContext().getShowSimple())
413                     onContextMenu = " onload=\"javascript:setToolbarInitialPosition();\"";
414                 
415                 
416                 StringBuffer JavaDoc sb = new StringBuffer JavaDoc(componentString);
417                 sb.insert(bodyIndex + 5, onContextMenu);
418                 componentString = sb.toString();
419
420                 org.w3c.dom.Document JavaDoc componentPropertiesDocument = getComponentPropertiesDocument(templateController, siteNodeId, languageId, component.getContentId());
421                 this.propertiesDivs += getComponentPropertiesDiv(templateController, repositoryId, siteNodeId, languageId, contentId, component.getId(), component.getContentId(), componentPropertiesDocument);
422
423                 org.w3c.dom.Document JavaDoc componentTasksDocument = getComponentTasksDocument(templateController, siteNodeId, languageId, component.getContentId());
424                 this.tasksDivs += getComponentTasksDiv(repositoryId, siteNodeId, languageId, contentId, component, componentTasksDocument, templateController);
425             }
426     
427             ////logger.info("Before:" + componentString);
428
int offset = 0;
429             int slotStartIndex = componentString.indexOf("<ig:slot", offset);
430             //logger.info("slotStartIndex:" + slotStartIndex);
431
while(slotStartIndex > -1)
432             {
433                 decoratedComponent += componentString.substring(offset, slotStartIndex);
434                 int slotStopIndex = componentString.indexOf("</ig:slot>", slotStartIndex);
435                 
436                 String JavaDoc slot = componentString.substring(slotStartIndex, slotStopIndex + 10);
437                 //logger.info("Slot:" + slot);
438
String JavaDoc id = slot.substring(slot.indexOf("id") + 4, slot.indexOf("\"", slot.indexOf("id") + 4));
439                 
440                 Slot slotBean = new Slot();
441                 String JavaDoc[] allowedComponentNamesArray = null;
442                 int allowedComponentNamesIndex = slot.indexOf("allowedComponentNames");
443                 if(allowedComponentNamesIndex > -1)
444                 {
445                     String JavaDoc allowedComponentNames = slot.substring(allowedComponentNamesIndex + 23, slot.indexOf("\"", allowedComponentNamesIndex + 23));
446                     allowedComponentNamesArray = allowedComponentNames.split(",");
447
448                     slotBean.setId(id);
449                     slotBean.setAllowedComponentsArray(allowedComponentNamesArray);
450                 }
451
452                 boolean inherit = true;
453                 int inheritIndex = slot.indexOf("inherit");
454                 if(inheritIndex > -1)
455                 {
456                     String JavaDoc inheritString = slot.substring(inheritIndex + 9, slot.indexOf("\"", inheritIndex + 9));
457                     inherit = Boolean.getBoolean(inheritString);
458                 }
459                 slotBean.setInherit(inherit);
460                 
461                 String JavaDoc subComponentString = "";
462                 
463                 //TODO - test
464
if(component.getIsInherited())
465                     subComponentString += "<div id=\"" + component.getId() + "_" + id + "\" class=\"inheritedComponentDiv\");\">";
466                 else
467                     subComponentString += "<div id=\"" + component.getId() + "_" + id + "\" class=\"componentDiv\" onmouseup=\"javascript:assignComponent('" + siteNodeId + "', '" + languageId + "', '" + contentId + "', '" + component.getId() + "', '" + id + "', '" + false + "', '" + slotBean.getAllowedComponentsArrayAsUrlEncodedString() + "');\">";
468                     
469                 List JavaDoc subComponents = getInheritedComponents(getDatabase(), templateController, component, templateController.getSiteNodeId(), id, inherit);
470
471                 InfoGluePrincipal principal = templateController.getPrincipal();
472                 String JavaDoc cmsUserName = (String JavaDoc)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
473                 if(cmsUserName != null)
474                     principal = templateController.getPrincipal(cmsUserName);
475
476                 String JavaDoc clickToAddHTML = "";
477                 boolean hasAccessToAddComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.AddComponent", "" + component.getContentId() + "_" + id);
478                 if(hasAccessToAddComponent)
479                     clickToAddHTML = getLocalizedString(templateController.getLocale(), "deliver.editOnSight.slotInstructionHTML");
480                 
481                 //logger.info("subComponents for " + id + ":" + subComponents);
482
if(subComponents != null && subComponents.size() > 0)
483                 {
484                     //logger.info("SUBCOMPONENTS:" + subComponents.size());
485
int index = 0;
486                     Iterator JavaDoc subComponentsIterator = subComponents.iterator();
487                     while(subComponentsIterator.hasNext())
488                     {
489                         InfoGlueComponent subComponent = (InfoGlueComponent)subComponentsIterator.next();
490                         if(subComponent != null)
491                         {
492                             component.getComponents().put(subComponent.getSlotName(), subComponent);
493                             if(subComponent.getIsInherited())
494                             {
495                                 //logger.info("Inherited..." + contentId);
496
String JavaDoc childComponentsString = decorateComponent(subComponent, templateController, repositoryId, siteNodeId, languageId, contentId/*, metainfoContentId*/);
497                                 if(!this.getTemplateController().getDeliveryContext().getShowSimple())
498                                     subComponentString += "<span id=\""+ id + index + "Comp\" class=\"inheritedslot\">" + childComponentsString + "</span>";
499                                 else
500                                     subComponentString += childComponentsString;
501                                     
502                                 org.w3c.dom.Document JavaDoc componentPropertiesDocument = getComponentPropertiesDocument(templateController, siteNodeId, languageId, component.getContentId());
503                                 this.propertiesDivs += getComponentPropertiesDiv(templateController, repositoryId, siteNodeId, languageId, contentId, new Integer JavaDoc(siteNodeId.intValue()*100 + subComponent.getId().intValue()), subComponent.getContentId(), componentPropertiesDocument);
504                                 
505                                 org.w3c.dom.Document JavaDoc componentTasksDocument = getComponentTasksDocument(templateController, siteNodeId, languageId, subComponent.getContentId());
506                                 this.tasksDivs += getComponentTasksDiv(repositoryId, siteNodeId, languageId, contentId, subComponent, componentTasksDocument, templateController);
507                                 
508                             }
509                             else
510                             {
511                                 //logger.info("Not inherited..." + contentId);
512
String JavaDoc childComponentsString = decorateComponent(subComponent, templateController, repositoryId, siteNodeId, languageId, contentId/*, metainfoContentId*/);
513                                 //logger.info("childComponentsString:" + childComponentsString);
514

515                                 if(!this.getTemplateController().getDeliveryContext().getShowSimple())
516                                 {
517                                     String JavaDoc allowedComponentNamesAsEncodedString = null;
518
519                                     for(int i=0; i < subComponent.getParentComponent().getSlotList().size(); i++)
520                                     {
521                                         Slot subSlotBean = (Slot)subComponent.getParentComponent().getSlotList().get(i);
522
523                                         if(subSlotBean.getId() != null && subSlotBean.getId().equals(subComponent.getSlotName()))
524                                         {
525                                             allowedComponentNamesAsEncodedString = subSlotBean.getAllowedComponentsArrayAsUrlEncodedString();
526                                         }
527                                     }
528
529                                     subComponentString += "<span id=\""+ id + index + "_" + subComponent.getId() + "Comp\">" + childComponentsString + "<script type=\"text/javascript\">initializeComponentEventHandler('" + id + index + "_" + subComponent.getId() + "Comp', '" + subComponent.getId() + "', '" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&parentComponentId=" + component.getId() + "&slotId=" + id + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + ((allowedComponentNamesAsEncodedString != null) ? "&" + allowedComponentNamesAsEncodedString : "&AAAA=1") + "', '" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponent.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + subComponent.getId() + "&slotId=" + id + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "');</script></span>";
530                                 }
531                                 else
532                                 {
533                                     subComponentString += childComponentsString;
534                                 }
535                                 
536                                 org.w3c.dom.Document JavaDoc componentPropertiesDocument = getComponentPropertiesDocument(templateController, siteNodeId, languageId, subComponent.getContentId());
537                                 this.propertiesDivs += getComponentPropertiesDiv(templateController, repositoryId, siteNodeId, languageId, contentId, subComponent.getId(), subComponent.getContentId(), componentPropertiesDocument);
538                                 
539                                 org.w3c.dom.Document JavaDoc componentTasksDocument = getComponentTasksDocument(templateController, siteNodeId, languageId, subComponent.getContentId());
540                                 this.tasksDivs += getComponentTasksDiv(repositoryId, siteNodeId, languageId, contentId, subComponent, componentTasksDocument, templateController);
541                             }
542                         }
543                         index++;
544                     }
545                     subComponentString += "" + clickToAddHTML;
546                 }
547                 else
548                 {
549                     subComponentString += "" + clickToAddHTML;
550                 }
551                 
552                 if(!component.getIsInherited())
553                 {
554                     String JavaDoc allowedComponentNamesAsEncodedString = null;
555                     
556                     for(int i=0; i < component.getSlotList().size(); i++)
557                     {
558                         Slot subSlotBean = (Slot)component.getSlotList().get(i);
559                         if(subSlotBean.getId() != null && subSlotBean.getId().equals(id))
560                         {
561                             allowedComponentNamesAsEncodedString = subSlotBean.getAllowedComponentsArrayAsUrlEncodedString();
562                         }
563                     }
564
565                     subComponentString += "<script type=\"text/javascript\">initializeSlotEventHandler('" + component.getId() + "_" + id + "', '" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&parentComponentId=" + component.getId() + "&slotId=" + id + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + ((allowedComponentNamesAsEncodedString != null) ? "&" + allowedComponentNamesAsEncodedString : "&BBBB=1") + "', '', '" + id + "', '" + component.getContentId() + "');</script></div>";
566                 }
567                 else
568                     subComponentString += "</div>";
569                   
570                 /**
571                  *
572                  */

573
574                 boolean hasAccessToAccessRights = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.ChangeSlotAccess", "");
575                 boolean hasAccessToDeleteComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.DeleteComponent", "" + component.getContentId() + "_" + id);
576                 
577                 StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
578                 sb.append("<script type=\"text/javascript\">");
579                 //sb.append("<!--");
580
sb.append("hasAccessToAddComponent" + id + " = " + hasAccessToAddComponent + ";");
581                 sb.append("hasAccessToAccessRights" + id + " = " + hasAccessToAccessRights + ";");
582                 //sb.append("-->");
583
sb.append("</script>");
584
585                 subComponentString += sb.toString();
586                 /**
587                  *
588                  */

589                 
590                 decoratedComponent += subComponentString;
591                             
592                 offset = slotStopIndex + 10;
593                 slotStartIndex = componentString.indexOf("<ig:slot", offset);
594             }
595             
596             //logger.info("offset:" + offset);
597
decoratedComponent += componentString.substring(offset);
598         }
599         catch(Exception JavaDoc e)
600         {
601             logger.warn("An component with either an empty template or with no template in the sitelanguages was found:" + e.getMessage(), e);
602         }
603         
604         return decoratedComponent;
605     }
606
607
608     /**
609      * This method creates a div for the components properties.
610      */

611     
612     private String JavaDoc getComponentPropertiesDiv(TemplateController templateController, Integer JavaDoc repositoryId, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, Integer JavaDoc componentId, Integer JavaDoc componentContentId, org.w3c.dom.Document JavaDoc document) throws Exception JavaDoc
613     {
614         if(templateController.getRequestParameter("skipPropertiesDiv") != null && templateController.getRequestParameter("skipPropertiesDiv").equalsIgnoreCase("true"))
615             return "";
616
617         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
618         Timer timer = new Timer();
619         timer.setActive(false);
620
621         Locale JavaDoc locale = templateController.getLocale();
622         
623         timer.printElapsedTime("After locale");
624         
625         String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
626         /*
627         String formsEncoding = CmsPropertyHandler.getFormsEncoding();
628         String acceptCharset = "";
629         if(formsEncoding != null && formsEncoding.length() > 0)
630             acceptCharset = "accept-charset=\"" + formsEncoding + "\"";
631         */

632         sb.append("<div id=\"component" + componentId + "Properties\" class=\"componentProperties\" style=\"right:5px; top:5px; visibility:hidden;\">");
633         sb.append(" <div id=\"component" + componentId + "PropertiesHandle\" class=\"componentPropertiesHandle\"><div id=\"leftPaletteHandle\">Properties</div><div id=\"rightPaletteHandle\"><a HREF=\"javascript:hideDiv('component" + componentId + "Properties');\" class=\"white\"><img SRC=\"" + componentEditorUrl + "/images/closeIcon.gif\" border=\"0\"/></a></div></div>");
634         sb.append(" <div id=\"component" + componentId + "PropertiesBody\" class=\"componentPropertiesBody\">");
635         
636         //sb.append(" <form " + acceptCharset + " id=\"component" + componentId + "PropertiesForm\" name=\"component" + componentId + "PropertiesForm\" action=\"" + componentEditorUrl + "ViewSiteNodePageComponents!updateComponentProperties.action\" method=\"POST\">");
637
sb.append(" <form id=\"component" + componentId + "PropertiesForm\" name=\"component" + componentId + "PropertiesForm\" action=\"" + componentEditorUrl + "ViewSiteNodePageComponents!updateComponentProperties.action\" method=\"POST\">");
638         sb.append(" <table class=\"igPropertiesTable\" border=\"0\" cellpadding=\"4\" cellspacing=\"0\">");
639
640         sb.append(" <tr class=\"igtr\">");
641         sb.append(" <td class=\"igpropertylabel\" align=\"left\">Choose language</td>"); //$ui.getString("tool.contenttool.languageVersionsLabel")
642
sb.append(" <td class=\"igtd\">&nbsp;</td>");
643         sb.append(" <td class=\"igpropertyvalue\" align=\"left\">");
644     
645         sb.append(" ");
646         sb.append(" <select class=\"mediumdrop\" name=\"languageId\" onChange=\"javascript:changeLanguage(" + siteNodeId + ", this, " + contentId + ");\">");
647         
648         List JavaDoc languages = LanguageDeliveryController.getLanguageDeliveryController().getAvailableLanguages(getDatabase(), siteNodeId);
649
650         Iterator JavaDoc languageIterator = languages.iterator();
651         int index = 0;
652         int languageIndex = index;
653         while(languageIterator.hasNext())
654         {
655             LanguageVO languageVO = (LanguageVO)languageIterator.next();
656             if(languageVO.getLanguageId().intValue() == languageId.intValue())
657             {
658                 sb.append(" <option class=\"iglabel\" value=\"" + languageVO.getLanguageId() + "\" selected><span class=\"iglabel\">" + languageVO.getName() + "</span></option>");
659                 sb.append(" <script type=\"text/javascript\">");
660                 sb.append(" </script>");
661                 languageIndex = index;
662             }
663             else
664             {
665                 sb.append(" <option value=\"" + languageVO.getLanguageId() + "\">" + languageVO.getName() + "</option>");
666             }
667             index++;
668         }
669         sb.append(" </select>");
670         sb.append(" <!--");
671         sb.append(" var originalIndex = " + languageIndex + ";");
672         sb.append(" -->");
673
674         sb.append(" </td>");
675         sb.append(" <td class=\"igtd\">&nbsp;</td>");
676         sb.append(" </tr>");
677
678         Collection JavaDoc componentProperties = getComponentProperties(componentId, document);
679
680         int propertyIndex = 0;
681         Iterator JavaDoc componentPropertiesIterator = componentProperties.iterator();
682         while(componentPropertiesIterator.hasNext())
683         {
684             ComponentProperty componentProperty = (ComponentProperty)componentPropertiesIterator.next();
685         
686             InfoGluePrincipal principal = templateController.getPrincipal();
687             String JavaDoc cmsUserName = (String JavaDoc)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
688             if(cmsUserName != null)
689                 principal = templateController.getPrincipal(cmsUserName);
690
691             boolean hasAccessToProperty = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentPropertyEditor.EditProperty", "" + componentContentId + "_" + componentProperty.getName());
692
693             if(componentProperty.getType().equalsIgnoreCase(ComponentProperty.BINDING))
694             {
695                 String JavaDoc assignUrl = "";
696                 String JavaDoc createUrl = "";
697                  
698                 if(componentProperty.getVisualizingAction() != null && !componentProperty.getVisualizingAction().equals(""))
699                 {
700                     assignUrl = componentEditorUrl + componentProperty.getVisualizingAction() + "?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
701                 }
702                 else
703                 {
704                     if(componentProperty.getEntityClass().equalsIgnoreCase("Content"))
705                     {
706                         String JavaDoc allowedContentTypeIdParameters = "";
707
708                         if(componentProperty.getAllowedContentTypeNamesArray() != null && componentProperty.getAllowedContentTypeNamesArray().length > 0)
709                         {
710                             allowedContentTypeIdParameters = "&" + componentProperty.getAllowedContentTypeIdAsUrlEncodedString(templateController.getDatabase());
711                             logger.info("allowedContentTypeIdParameters:" + allowedContentTypeIdParameters);
712                         }
713                         
714                         if(componentProperty.getIsMultipleBinding())
715                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showContentTreeForMultipleBinding.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + allowedContentTypeIdParameters + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
716                         else
717                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showContentTree.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + allowedContentTypeIdParameters + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
718                     }
719                     else if(componentProperty.getEntityClass().equalsIgnoreCase("SiteNode"))
720                     {
721                         if(componentProperty.getIsMultipleBinding())
722                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showStructureTreeForMultipleBinding.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
723                         else
724                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showStructureTree.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
725                     }
726                     else if(componentProperty.getEntityClass().equalsIgnoreCase("Category"))
727                     {
728                         if(componentProperty.getIsMultipleBinding())
729                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showCategoryTreeForMultipleBinding.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
730                         else
731                             assignUrl = componentEditorUrl + "ViewSiteNodePageComponents!showCategoryTree.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
732                     }
733                 }
734                     
735                 if(componentProperty.getCreateAction() != null && !componentProperty.getCreateAction().equals(""))
736                 {
737                     createUrl = componentEditorUrl + componentProperty.getCreateAction() + "?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + getTemplateController().getDeliveryContext().getShowSimple();
738                 }
739                 else
740                 {
741                     if(componentProperty.getVisualizingAction() != null && !componentProperty.getVisualizingAction().equals(""))
742                     {
743                         createUrl = assignUrl;
744                     }
745                     else if(componentProperty.getEntityClass().equalsIgnoreCase("Content"))
746                     {
747                         String JavaDoc allowedContentTypeIdParameters = "";
748
749                         if(componentProperty.getAllowedContentTypeNamesArray() != null && componentProperty.getAllowedContentTypeNamesArray().length > 0)
750                         {
751                             allowedContentTypeIdParameters = "&" + componentProperty.getAllowedContentTypeIdAsUrlEncodedString(templateController.getDatabase());
752                             logger.info("allowedContentTypeIdParameters:" + allowedContentTypeIdParameters);
753                         }
754
755                         String JavaDoc returnAddress = URLEncoder.encode("ViewSiteNodePageComponents!addComponentPropertyBinding.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=-1&entity=Content&entityId=#entityId&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&path=#path&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "", "UTF-8");
756                         
757                         if(componentProperty.getIsMultipleBinding())
758                             createUrl = componentEditorUrl + "CreateContentWizardFinish.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + allowedContentTypeIdParameters + "&refreshAddress=" + returnAddress + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple();
759                         else
760                             createUrl = componentEditorUrl + "CreateContentWizardFinish.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + allowedContentTypeIdParameters + "&refreshAddress=" + returnAddress + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple();
761                     }
762                     else if(componentProperty.getEntityClass().equalsIgnoreCase("SiteNode"))
763                     {
764                         createUrl = null;
765                         /*
766                         if(componentProperty.getIsMultipleBinding())
767                             createUrl = componentEditorUrl + "CreateSiteNodeWizard!input.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple();
768                         else
769                             createUrl = componentEditorUrl + "CreateSiteNodeWizard!input.action?repositoryId=" + repositoryId + "&siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple();
770                         */

771                     }
772                 }
773                 
774                 StringBuffer JavaDoc helpSB = new StringBuffer JavaDoc();
775                 helpSB.append("<div style=\"border: 1px solid black; visibility: hidden; z-index: 200000; position: absolute;\" id=\"helpLayer" + componentProperty.getComponentId() + "_" + componentProperty.getName() + "\">");
776                 helpSB.append("<table class=\"igtable\" bgcolor=\"white\" width=\"200\"><tr class=\"igtr\"><td class=\"igpropertylabel\">" + (componentProperty.getDescription().equalsIgnoreCase("") ? "No description" : componentProperty.getDescription()) + "</td></tr></table>");
777                 helpSB.append("</div>");
778                 
779                 sb.append(" <tr class=\"igtr\">");
780                 sb.append(" <td class=\"igpropertylabel\" valign=\"top\" align=\"left\">" + componentProperty.getName() + "</td>");
781                 sb.append(" <td class=\"igtd\" width=\"16\"><img SRC=\"" + componentEditorUrl + "/images/questionMark.gif\" onMouseOver=\"javascript:showDiv('helpLayer" + componentProperty.getComponentId() + "_" + componentProperty.getName() + "');\" onMouseOut=\"javascript:hideDiv('helpLayer" + componentProperty.getComponentId() + "_" + componentProperty.getName() + "');\">" + helpSB + "</td>");
782                 sb.append(" <td class=\"igpropertyvalue\" align=\"left\">");
783
784                 if(hasAccessToProperty)
785                     sb.append("<a class=\"componentEditorLink\" HREF=\"javascript:window.open('" + assignUrl + "','Assign','toolbar=no,status=yes,scrollbars=yes,location=no,menubar=no,directories=no,resizable=no,width=300,height=600,left=5,top=5');\">");
786                 
787                 sb.append("" + (componentProperty.getValue().equalsIgnoreCase("") ? "Undefined" : componentProperty.getValue()));
788                 
789                 if(hasAccessToProperty)
790                     sb.append("</a>");
791                 
792                 sb.append("</td>");
793                 
794                 if(componentProperty.getValue().equalsIgnoreCase("Undefined"))
795                 {
796                     if(hasAccessToProperty && createUrl != null)
797                         sb.append(" <td class=\"igtd\" width=\"16\"><a class=\"componentEditorLink\" HREF=\"" + createUrl + "\"><img SRC=\"" + componentEditorUrl + "/images/createContent.gif\" border=\"0\" alt=\"Create new content to show\"></a></td>");
798                     else
799                         sb.append(" <td class=\"igtd\" width=\"16\">&nbsp;</td>");
800                 }
801                 else
802                 {
803                     sb.append(" <td class=\"igtd\" width=\"16\"><a class=\"componentEditorLink\" HREF=\"" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponentPropertyValue.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img SRC=\"" + componentEditorUrl + "/images/delete.gif\" border=\"0\"></a></td>");
804                 }
805                 
806                 sb.append(" </tr>");
807             }
808             else if(componentProperty.getType().equalsIgnoreCase(ComponentProperty.TEXTFIELD))
809             {
810                 sb.append(" <tr class=\"igtr\">");
811                 sb.append(" <td class=\"igpropertylabel\" valign=\"top\" align=\"left\">" + componentProperty.getName() + "</td>");
812                 sb.append(" <td class=\"igtd\" width=\"16\"><img SRC=\"" + componentEditorUrl + "/images/questionMark.gif\" title=\"" + (componentProperty.getDescription().equalsIgnoreCase("") ? "No description" : componentProperty.getDescription()) + "\"></td>");
813                 
814                 if(hasAccessToProperty)
815                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\"><input type=\"hidden\" name=\"" + propertyIndex + "_propertyName\" value=\"" + componentProperty.getName() + "\"><input type=\"text\" class=\"propertytextfield\" name=\"" + componentProperty.getName() + "\" value=\"" + componentProperty.getValue() + "\"></td>");
816                 else
817                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\">" + componentProperty.getValue() + "</td>");
818     
819                 if(hasAccessToProperty)
820                     sb.append(" <td class=\"igtd\" width=\"16\"><a class=\"componentEditorLink\" HREF=\"" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponentPropertyValue.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img SRC=\"" + componentEditorUrl + "/images/delete.gif\" border=\"0\"></a></td>");
821                 else
822                     sb.append(" <td class=\"igtd\" width=\"16\"></td>");
823                 
824                 sb.append(" <!--<td>&nbsp;</td>-->");
825                 sb.append(" </tr>");
826                 
827                 if(hasAccessToProperty)
828                     propertyIndex++;
829             }
830             else if(componentProperty.getType().equalsIgnoreCase(ComponentProperty.TEXTAREA))
831             {
832                 sb.append(" <tr class=\"igtr\">");
833                 sb.append(" <td class=\"igpropertylabel\" valign=\"top\" align=\"left\">" + componentProperty.getName() + "</td>");
834                 sb.append(" <td class=\"igtd\" width=\"16\"><img SRC=\"" + componentEditorUrl + "/images/questionMark.gif\" title=\"" + (componentProperty.getDescription().equalsIgnoreCase("") ? "No description" : componentProperty.getDescription()) + "\"></td>");
835                 
836                 if(hasAccessToProperty)
837                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\"><input type=\"hidden\" name=\"" + propertyIndex + "_propertyName\" value=\"" + componentProperty.getName() + "\"><textarea class=\"propertytextarea\" name=\"" + componentProperty.getName() + "\">" + (componentProperty.getValue() == null ? "" : componentProperty.getValue()) + "</textarea></td>");
838                 else
839                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\">" + componentProperty.getValue() + "</td>");
840     
841                 if(hasAccessToProperty)
842                     sb.append(" <td class=\"igtd\" width=\"16\"><a class=\"componentEditorLink\" HREF=\"" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponentPropertyValue.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img SRC=\"" + componentEditorUrl + "/images/delete.gif\" border=\"0\"></a></td>");
843                 else
844                     sb.append(" <td class=\"igtd\" width=\"16\"></td>");
845                 
846                 sb.append(" <!--<td>&nbsp;</td>-->");
847                 sb.append(" </tr>");
848                 
849                 if(hasAccessToProperty)
850                     propertyIndex++;
851             }
852             else if(componentProperty.getType().equalsIgnoreCase(ComponentProperty.SELECTFIELD))
853             {
854                 sb.append(" <tr class=\"igtr\">");
855                 sb.append(" <td class=\"igpropertylabel\" valign=\"top\" align=\"left\">" + componentProperty.getName() + "</td>");
856                 sb.append(" <td class=\"igtd\" width=\"16\"><img SRC=\"" + componentEditorUrl + "/images/questionMark.gif\" title=\"" + (componentProperty.getDescription().equalsIgnoreCase("") ? "No description" : componentProperty.getDescription()) + "\"></td>");
857                 
858                 if(hasAccessToProperty)
859                 {
860                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\"><input type=\"hidden\" name=\"" + propertyIndex + "_propertyName\" value=\"" + componentProperty.getName() + "\"><select class=\"propertyselect\" name=\"" + componentProperty.getName() + "\">");
861                     
862                     Iterator JavaDoc optionsIterator = componentProperty.getOptions().iterator();
863                     while(optionsIterator.hasNext())
864                     {
865                         ComponentPropertyOption option = (ComponentPropertyOption)optionsIterator.next();
866                         boolean isSame = componentProperty.getValue().equals(option.getValue());
867                         sb.append("<option value=\"" + option.getValue() + "\"" + (isSame ? " selected=\"1\"" : "") + ">" + option.getName() + "</option>");
868                     }
869                     
870                     sb.append("</td>");
871                 }
872                 else
873                     sb.append(" <td class=\"igpropertyvalue\" align=\"left\">" + componentProperty.getValue() + "</td>");
874     
875                 if(hasAccessToProperty)
876                     sb.append(" <td class=\"igtd\" width=\"16\"><a class=\"componentEditorLink\" HREF=\"" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponentPropertyValue.action?siteNodeId=" + siteNodeId + "&languageId=" + languageId + "&contentId=" + contentId + "&componentId=" + componentId + "&propertyName=" + componentProperty.getName() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\"><img SRC=\"" + componentEditorUrl + "/images/delete.gif\" border=\"0\"></a></td>");
877                 else
878                     sb.append(" <td class=\"igtd\" width=\"16\"></td>");
879                 
880                 sb.append(" <!--<td>&nbsp;</td>-->");
881                 sb.append(" </tr>");
882                 
883                 if(hasAccessToProperty)
884                     propertyIndex++;
885             }
886         }
887         
888         timer.printElapsedTime("getComponentPropertiesDiv: 5");
889
890         sb.append(" <tr class=\"igtr\">");
891         sb.append(" <td colspan=\"4\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" height=\"5\" width=\"1\"></td>");
892         sb.append(" </tr>");
893         sb.append(" <tr class=\"igtr\">");
894         sb.append(" <td colspan=\"4\">");
895         sb.append(" <a HREF=\"javascript:submitForm('component" + componentId + "PropertiesForm');\"><img SRC=\"" + componentEditorUrl + "" + this.getDeliveryContext().getInfoGlueAbstractAction().getLocalizedString(this.getDeliveryContext().getSession().getLocale(), "images.contenttool.buttons.save") + "\" width=\"50\" height=\"25\" border=\"0\"></a>");
896         sb.append(" <a HREF=\"javascript:hideDiv('component" + componentId + "Properties');\"><img SRC=\"" + componentEditorUrl + "" + this.getDeliveryContext().getInfoGlueAbstractAction().getLocalizedString(this.getDeliveryContext().getSession().getLocale(), "images.contenttool.buttons.close") + "\" width=\"50\" height=\"25\" border=\"0\"></a>");
897         sb.append(" </td>");
898         sb.append(" </tr>");
899         sb.append(" </table>");
900         sb.append(" <input type=\"hidden\" name=\"repositoryId\" value=\"" + repositoryId + "\">");
901         sb.append(" <input type=\"hidden\" name=\"siteNodeId\" value=\"" + siteNodeId + "\">");
902         sb.append(" <input type=\"hidden\" name=\"languageId\" value=\"" + languageId + "\">");
903         sb.append(" <input type=\"hidden\" name=\"contentId\" value=\"" + contentId + "\">");
904         sb.append(" <input type=\"hidden\" name=\"componentId\" value=\"" + componentId + "\">");
905         sb.append(" <input type=\"hidden\" name=\"showSimple\" value=\"" + this.getTemplateController().getDeliveryContext().getShowSimple() + "\">");
906         sb.append(" </form>");
907         sb.append(" </div>");
908         sb.append(" </div>");
909
910         sb.append(" <script type=\"text/javascript\">");
911         sb.append(" var theHandle = document.getElementById(\"component" + componentId + "PropertiesHandle\");");
912         sb.append(" var theRoot = document.getElementById(\"component" + componentId + "Properties\");");
913         
914         sb.append(" componentId = \"" + componentId + "\";");
915         sb.append(" activatedComponentId = QueryString(\"activatedComponentId\");");
916         sb.append(" if(activatedComponentId && activatedComponentId == componentId)");
917         sb.append(" showDiv(\"component\" + componentId + \"Properties\");");
918
919         sb.append(" Drag.init(theHandle, theRoot);");
920         sb.append(" theRoot.style.left = 160;");
921         sb.append(" theRoot.style.top = 150;");
922         
923         sb.append(" floatDiv(\"component" + componentId + "Properties\", 200, 50).flt();");
924         sb.append(" </script>");
925
926         return sb.toString();
927     }
928
929     
930     /**
931      * This method creates a div for the components properties.
932      */

933     
934     private String JavaDoc getComponentTasksDiv(Integer JavaDoc repositoryId, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, InfoGlueComponent component, org.w3c.dom.Document JavaDoc document, TemplateController templateController) throws Exception JavaDoc
935     {
936         InfoGluePrincipal principal = templateController.getPrincipal();
937         String JavaDoc cmsUserName = (String JavaDoc)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
938         if(cmsUserName != null)
939             principal = templateController.getPrincipal(cmsUserName);
940
941         boolean hasAccessToAccessRights = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.ChangeSlotAccess", "");
942         boolean hasAccessToAddComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.AddComponent", "" + (component.getParentComponent() == null ? component.getContentId() : component.getParentComponent().getContentId()) + "_" + component.getSlotName());
943         boolean hasAccessToDeleteComponent = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "ComponentEditor.DeleteComponent", "" + (component.getParentComponent() == null ? component.getContentId() : component.getParentComponent().getContentId()) + "_" + component.getSlotName());
944         boolean hasSaveTemplateAccess = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "StructureTool.SaveTemplate", "");
945
946         if(component.getIsInherited())
947         {
948             StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
949             sb.append("<script type=\"text/javascript\">");
950             //sb.append("<!--");
951
sb.append("hasAccessToAddComponent" + component.getSlotName() + " = " + hasAccessToAddComponent + ";");
952             sb.append("hasAccessToDeleteComponent" + component.getSlotName() + " = " + hasAccessToDeleteComponent + ";");
953             sb.append("hasAccessToAccessRights" + component.getSlotName() + " = " + hasAccessToAccessRights + ";");
954             //sb.append("-->");
955
sb.append("</script>");
956             return sb.toString();
957         }
958         
959         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
960         Timer timer = new Timer();
961         timer.setActive(false);
962
963         String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
964         
965         //if(component.getIsInherited())
966
// sb.append("<div id=\"inheritedComponent" + component.getId() + "Menu\" class=\"skin0\">");
967
//else
968
sb.append("<div id=\"component" + component.getId() + "Menu\" class=\"skin0\">");
969         
970         Collection JavaDoc componentTasks = getComponentTasks(component.getId(), document);
971
972         int taskIndex = 0;
973         Iterator JavaDoc componentTasksIterator = componentTasks.iterator();
974         while(componentTasksIterator.hasNext())
975         {
976             ComponentTask componentTask = (ComponentTask)componentTasksIterator.next();
977             
978             String JavaDoc view = componentTask.getView();
979             
980             view = view.replaceAll("\\$componentEditorUrl", componentEditorUrl);
981             view = view.replaceAll("\\$repositoryId", repositoryId.toString());
982             view = view.replaceAll("\\$siteNodeId", siteNodeId.toString());
983             view = view.replaceAll("\\$languageId", languageId.toString());
984             view = view.replaceAll("\\$componentId", component.getId().toString());
985             sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"executeTask('" + view + "');\">" + componentTask.getName() + "</div>");
986         }
987
988         Locale JavaDoc locale = templateController.getLocale();
989         String JavaDoc editHTML = getLocalizedString(locale, "deliver.editOnSight.editHTML");
990         String JavaDoc submitToPublishHTML = getLocalizedString(locale, "deliver.editOnSight.submitToPublish");
991         String JavaDoc addComponentHTML = getLocalizedString(locale, "deliver.editOnSight.addComponentHTML");
992         String JavaDoc deleteComponentHTML = getLocalizedString(locale, "deliver.editOnSight.deleteComponentHTML");
993         String JavaDoc propertiesHTML = getLocalizedString(locale, "deliver.editOnSight.propertiesHTML");
994         String JavaDoc pageComponentsHTML = getLocalizedString(locale, "deliver.editOnSight.pageComponentsHTML");
995         String JavaDoc viewSourceHTML = getLocalizedString(locale, "deliver.editOnSight.viewSourceHTML");
996         String JavaDoc componentEditorInNewWindowHTML = getLocalizedString(locale, "deliver.editOnSight.componentEditorInNewWindowHTML");
997         String JavaDoc savePageTemplateHTML = getLocalizedString(locale, "deliver.editOnSight.savePageTemplateHTML");
998         
999         sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"edit();\">" + editHTML + "</div>");
1000        sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"submitToPublish(" + siteNodeId + ", " + repositoryId + ", '" + URLEncoder.encode(templateController.getOriginalFullURL(), "UTF-8") + "');\">" + submitToPublishHTML + "</div>");
1001        if(hasAccessToAddComponent)
1002            sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"insertComponent();\">" + addComponentHTML + "</div>");
1003        if(hasAccessToDeleteComponent)
1004            sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"deleteComponent();\">" + deleteComponentHTML + "</div>");
1005        if(hasSaveTemplateAccess)
1006            sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"saveComponentStructure('" + componentEditorUrl + "CreatePageTemplate!input.action?contentId=" + templateController.getSiteNode(siteNodeId).getMetaInfoContentId() + "');\">" + savePageTemplateHTML + "</div>");
1007
1008        //sb.append("<div class=\"igmenudivider\"><img SRC=\" + this.getRequest().getContextPath() + "/images/dividerLine.gif\" width=\"115\" height=\"1\"></div>");
1009
sb.append("<hr/>");
1010        sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"javascript:showComponent();\">" + propertiesHTML + "</div>");
1011        sb.append("<hr/>");
1012        //sb.append("<div class=\"igmenudivider\"><img SRC=\" + this.getRequest().getContextPath() + "/images/dividerLine.gif\" width=\"115\" height=\"1\"></div>");
1013
sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"javascript:toggleDiv('pageComponents');\">" + pageComponentsHTML + "</div>");
1014        sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"window.open(document.location.href,'PageComponents','');\">" + componentEditorInNewWindowHTML + "</div>");
1015        sb.append("<div class=\"igmenuitems\" onMouseover=\"javascript:highlightie5(event);\" onMouseout=\"javascript:lowlightie5(event);\" onClick=\"javascript:viewSource();\">" + viewSourceHTML + "</div>");
1016        //sb.append("<div class=\"igmenuitems\">getComponentTasksDiv_" + component.getSlotName() + "</div>");
1017
sb.append("</div>");
1018        
1019        sb.append("<script type=\"text/javascript\">");
1020        //sb.append("<!--");
1021
sb.append("hasAccessToAddComponent" + component.getSlotName() + " = " + hasAccessToAddComponent + ";");
1022        sb.append("hasAccessToDeleteComponent" + component.getSlotName() + " = " + hasAccessToDeleteComponent + ";");
1023        sb.append("hasAccessToAccessRights" + component.getSlotName() + " = " + hasAccessToAccessRights + ";");
1024        //sb.append("-->");
1025
sb.append("</script>");
1026        
1027        return sb.toString();
1028    }
1029
1030    /**
1031     * This method creates a div for the components properties.
1032     */

1033    
1034    private String JavaDoc getPageComponentStructureDiv(TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, InfoGlueComponent component) throws Exception JavaDoc
1035    {
1036        if(templateController.getRequestParameter("skipComponentStructure") != null && templateController.getRequestParameter("skipComponentStructure").equalsIgnoreCase("true"))
1037            return "";
1038        
1039        StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
1040        
1041        String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
1042
1043        sb.append("<div id=\"pageComponents\" style=\"right:5px; top:5px; visibility:hidden; display: none;\">");
1044
1045        sb.append(" <div id=\"dragCorner\" style=\"position: absolute; width: 16px; height: 16px; background-color: white; bottom: 0px; right: 0px;\"><a HREF=\"javascript:expandWindow('pageComponents');\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/enlarge.gif\" border=\"0\" width=\"16\" height=\"16\"></a></div>");
1046            
1047        sb.append(" <div id=\"pageComponentsHandle\"><div id=\"leftPaletteHandle\">Page components</div><div id=\"rightPaletteHandle\"><a HREF=\"javascript:hideDiv('pageComponents');\" class=\"white\">close</a></div></div>");
1048        sb.append(" <div id=\"pageComponentsBody\"><table class=\"igtable\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
1049
1050        sb.append(" <tr class=\"igtr\">");
1051        //sb.append(" <td class=\"igtd\" colspan=\"20\"><img SRC=\" + this.getRequest().getContextPath() + "/images/tcross.png\" width=\"19\" height=\"16\"><span id=\"" + component.getId() + "\" class=\"iglabel\"><img SRC=\" + this.getRequest().getContextPath() + "/images/slotIcon.gif\" width=\"16\" height=\"16\"><img SRC=\" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"5\" height=\"1\">" + component.getName() + "</span><script type=\"text/javascript\">initializeSlotEventHandler('" + component.getId() + "', '" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&parentComponentId=" + component.getId() + "&slotId=base&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "', '', 'base');</script></td>");
1052
sb.append(" <td class=\"igtd\" colspan=\"20\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/tcross.png\" width=\"19\" height=\"16\"><span id=\"" + component.getSlotName() + "ClickableDiv\" class=\"iglabel\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/slotIcon.gif\" width=\"16\" height=\"16\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"5\" height=\"1\">" + component.getName() + "</span><script type=\"text/javascript\">initializeSlotEventHandler('" + component.getSlotName() + "ClickableDiv', '" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&parentComponentId=" + component.getId() + "&slotId=base&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "', '', 'base', '" + component.getContentId() + "');</script></td>");
1053        sb.append(" </tr>");
1054        
1055        renderComponentTree(templateController, sb, component, 0, 0, 1);
1056
1057        sb.append(" <tr class=\"igtr\">");
1058        for(int i=0; i<20; i++)
1059        {
1060            sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"19\" height=\"1\"></td>");
1061        }
1062        sb.append(" </tr>");
1063        sb.append(" </table>");
1064        sb.append(" </div>");
1065        sb.append(" </div>");
1066        
1067        sb.append(" <script type=\"text/javascript\">");
1068        sb.append(" var theHandle = document.getElementById(\"pageComponentsHandle\");");
1069        sb.append(" var theRoot = document.getElementById(\"pageComponents\");");
1070        sb.append(" Drag.init(theHandle, theRoot);");
1071        sb.append(" theRoot.style.left = 160;");
1072        sb.append(" theRoot.style.top = 150;");
1073        sb.append(" </script>");
1074
1075        return sb.toString();
1076    }
1077
1078    /**
1079     * This method renders the component tree visually
1080     */

1081    
1082    private void renderComponentTree(TemplateController templateController, StringBuffer JavaDoc sb, InfoGlueComponent component, int level, int position, int maxPosition) throws Exception JavaDoc
1083    {
1084        String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
1085
1086        ContentVO componentContentVO = templateController.getContent(component.getContentId());
1087        
1088        int colspan = 20 - level;
1089        
1090        sb.append(" <tr class=\"igtr\">");
1091        sb.append(" <td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"19\" height=\"16\"></td>");
1092        
1093        for(int i=0; i<level; i++)
1094        {
1095            sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1096        }
1097        
1098        sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/tcross.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/componentIcon.gif\" width=\"16\" height=\"16\"></td><td class=\"igtd\" colspan=\"" + (colspan - 2) + "\"><span id=\"" + component.getId() + "\" onclick=\"javascript:showDiv('component" + component.getId() + "Properties');\" class=\"clickableLabel\">" + componentContentVO.getName() + "</span><script type=\"text/javascript\">initializeComponentInTreeEventHandler('" + component.getId() + "', '" + component.getId() + "', '', '" + componentEditorUrl + "ViewSiteNodePageComponents!deleteComponent.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&componentId=" + component.getId() + "&slotId=" + component.getId() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "', '" + component.getSlotName() + "');</script>");
1099        String JavaDoc upUrl = componentEditorUrl + "ViewSiteNodePageComponents!moveComponent.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&componentId=" + component.getId() + "&direction=0&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "";
1100        String JavaDoc downUrl = componentEditorUrl + "ViewSiteNodePageComponents!moveComponent.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&componentId=" + component.getId() + "&direction=1&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + "";
1101        
1102        if(position > 0)
1103            sb.append("<a HREF=\"" + upUrl + "\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/upArrow.gif\" border=\"0\" width=\"11\" width=\"10\"></a>");
1104        if(maxPosition > position)
1105            sb.append("<a HREF=\"" + downUrl + "\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/downArrow.gif\" border=\"0\" width=\"11\" width=\"10\"></a>");
1106        
1107        sb.append("</td>");
1108        
1109        sb.append(" </tr>");
1110        
1111        //Properties
1112
sb.append(" <tr class=\"igtr\">");
1113        sb.append(" <td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"19\" height=\"1\"></td><td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1114        for(int i=0; i<level; i++)
1115        {
1116            sb.append("<td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1117        }
1118        sb.append("<td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/tcross.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/propertiesIcon.gif\" width=\"16\" height=\"16\" border=\"0\"></td><td class=\"igtd\" colspan=\"" + (colspan - 3) + "\"><span onclick=\"javascript:showComponentProperties('component" + component.getId() + "Properties');\" class=\"iglabel\">Properties</span></td>");
1119        sb.append(" </tr>");
1120        
1121        sb.append(" <tr class=\"igtr\">");
1122        sb.append(" <td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"19\" height=\"1\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1123        for(int i=0; i<level; i++)
1124        {
1125            sb.append("<td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1126        }
1127        sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/endline.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/containerIcon.gif\" width=\"16\" height=\"16\"></td><td class=\"igtd\" colspan=\"" + (colspan - 4) + "\"><span class=\"iglabel\">Slots</span></td>");
1128        sb.append("</tr>");
1129
1130        Iterator JavaDoc slotIterator = component.getSlotList().iterator();
1131        while(slotIterator.hasNext())
1132        {
1133            Slot slot = (Slot)slotIterator.next();
1134    
1135            sb.append(" <tr class=\"igtr\">");
1136            sb.append(" <td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/trans.gif\" width=\"19\" height=\"16\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1137            for(int i=0; i<level; i++)
1138            {
1139                sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/vline.png\" width=\"19\" height=\"16\"></td>");
1140            }
1141            if(slot.getComponents().size() > 0)
1142                sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/tcross.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/slotIcon.gif\" width=\"16\" height=\"16\"></td>");
1143            else
1144                sb.append("<td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/endline.png\" width=\"19\" height=\"16\"></td><td class=\"igtd\" width=\"19\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/slotIcon.gif\" width=\"16\" height=\"16\"></td>");
1145
1146            String JavaDoc allowedComponentNamesAsEncodedString = slot.getAllowedComponentsArrayAsUrlEncodedString();
1147
1148            sb.append("<td class=\"igtd\" colspan=\"" + (colspan - 4) + "\"><span id=\"" + slot.getId() + "ClickableDiv\" class=\"iglabel\">" + slot.getId() + "</span><script type=\"text/javascript\">initializeSlotEventHandler('" + slot.getId() + "ClickableDiv', '" + componentEditorUrl + "ViewSiteNodePageComponents!listComponents.action?siteNodeId=" + templateController.getSiteNodeId() + "&languageId=" + templateController.getLanguageId() + "&contentId=" + templateController.getContentId() + "&parentComponentId=" + component.getId() + "&slotId=" + slot.getId() + "&showSimple=" + this.getTemplateController().getDeliveryContext().getShowSimple() + ((allowedComponentNamesAsEncodedString != null) ? "&" + allowedComponentNamesAsEncodedString : "") + "', '', '" + slot.getId() + "', '" + component.getContentId() + "');</script></td>");
1149            
1150            sb.append(" </tr>");
1151
1152            List JavaDoc slotComponents = slot.getComponents();
1153            //logger.info("Number of components in slot " + slot.getId() + ":" + slotComponents.size());
1154

1155            if(slotComponents != null)
1156            {
1157                Iterator JavaDoc slotComponentIterator = slotComponents.iterator();
1158                int newPosition = 0;
1159                while(slotComponentIterator.hasNext())
1160                {
1161                    InfoGlueComponent slotComponent = (InfoGlueComponent)slotComponentIterator.next();
1162                    ContentVO componentContent = templateController.getContent(slotComponent.getContentId());
1163                    
1164                    String JavaDoc imageUrl = "" + this.getRequest().getContextPath() + "/images/componentIcon.gif";
1165                    //String imageUrlTemp = getDigitalAssetUrl(componentContent.getId(), "thumbnail");
1166
//if(imageUrlTemp != null && imageUrlTemp.length() > 0)
1167
// imageUrl = imageUrlTemp;
1168

1169                    renderComponentTree(templateController, sb, slotComponent, level + 3, newPosition, slotComponents.size() - 1);
1170
1171                    newPosition++;
1172                }
1173            }
1174        }
1175    }
1176
1177
1178    /**
1179     * This method creates the tabpanel for the component-palette.
1180     */

1181    //private static String componentPaletteDiv = null;
1182

1183    private String JavaDoc getComponentPaletteDiv(Integer JavaDoc siteNodeId, Integer JavaDoc languageId, TemplateController templateController) throws Exception JavaDoc
1184    {
1185        InfoGluePrincipal principal = templateController.getPrincipal();
1186        String JavaDoc cmsUserName = (String JavaDoc)templateController.getHttpServletRequest().getSession().getAttribute("cmsUserName");
1187        if(cmsUserName != null)
1188            principal = templateController.getPrincipal(cmsUserName);
1189
1190        if(!templateController.getDeliveryContext().getShowSimple())
1191        {
1192            boolean hasAccess = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "StructureTool.Palette", "");
1193            
1194            if(!hasAccess || templateController.getRequestParameter("skipToolbar") != null && templateController.getRequestParameter("skipToolbar").equalsIgnoreCase("true"))
1195                return "";
1196        }
1197        
1198        ContentVO contentVO = templateController.getBoundContent(BasicTemplateController.META_INFO_BINDING_NAME);
1199
1200        //Cache
1201
String JavaDoc key = "" + templateController.getPrincipal().getName();
1202        String JavaDoc componentPaletteDiv = (String JavaDoc)CacheController.getCachedObject("componentPaletteDivCache", key);
1203        if(componentPaletteDiv != null)
1204        {
1205            if(componentPaletteDiv != null && (templateController.getRequestParameter("refresh") == null || !templateController.getRequestParameter("refresh").equalsIgnoreCase("true")))
1206            {
1207                return componentPaletteDiv.replaceAll("CreatePageTemplate\\!input.action\\?contentId=.*?'", "CreatePageTemplate!input.action?contentId=" + contentVO.getContentId() + "'");
1208            }
1209        }
1210        //End Cache
1211

1212        StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
1213            
1214        String JavaDoc componentEditorUrl = CmsPropertyHandler.getComponentEditorUrl();
1215        String JavaDoc componentRendererUrl = CmsPropertyHandler.getComponentRendererUrl();
1216        String JavaDoc componentRendererAction = CmsPropertyHandler.getComponentRendererAction();
1217        
1218        
1219        sb.append("<div id=\"buffer\" style=\"top: 0px; left: 0px; z-index:200;\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/componentDraggedIcon.gif\"></div>");
1220        
1221        Map JavaDoc componentGroups = getComponentGroups(getComponentContents(), templateController);
1222        
1223        sb.append("<div id=\"paletteDiv\">");
1224         
1225        sb.append("<div id=\"paletteHandle\">");
1226        sb.append(" <div id=\"leftPaletteHandle\">Component palette</div><div id=\"rightPaletteHandle\"><a HREF=\"javascript:hideDiv('paletteDiv');\" class=\"white\">close</a></div>");
1227        sb.append("</div>");
1228
1229        sb.append("<div id=\"paletteBody\">");
1230        sb.append("<table class=\"tabPanel\" cellpadding=\"0\" cellspacing=\"0\">");
1231        sb.append(" <tr class=\"igtr\">");
1232        
1233        Iterator JavaDoc groupIterator = componentGroups.keySet().iterator();
1234        int index = 0;
1235        String JavaDoc groupName = "";
1236        String JavaDoc initialGroupName = "";
1237        while(groupIterator.hasNext())
1238        {
1239            groupName = (String JavaDoc)groupIterator.next();
1240            
1241            if(index == 0)
1242            {
1243                sb.append(" <td id=\"" + groupName + "Tab\" valign=\"top\" class=\"thistab\" onclick=\"javascript:changeTab('" + groupName + "');\" height=\"20\"><nobr>" + groupName + "</nobr></td>");
1244                initialGroupName = groupName;
1245            }
1246            else if(!groupIterator.hasNext())
1247                sb.append(" <td id=\"" + groupName + "Tab\" valign=\"top\" class=\"tab\" style=\"border-right: solid thin black\" onclick=\"javascript:changeTab('" + groupName + "');\"><nobr>" + groupName + "</nobr></td>");
1248            else
1249                sb.append(" <td id=\"" + groupName + "Tab\" valign=\"top\" class=\"tab\" onclick=\"javascript:changeTab('" + groupName + "');\"><nobr>" + groupName + "</nobr></td>");
1250
1251            index++;
1252        }
1253        
1254        boolean hasSaveTemplateAccess = AccessRightController.getController().getIsPrincipalAuthorized(templateController.getDatabase(), principal, "StructureTool.SaveTemplate", "");
1255        
1256        sb.append(" <td class=\"igpalettetd\" width=\"90%\" style=\"text-align: right; border-right: solid thin gray; border-bottom: solid thin white\" align=\"right\">&nbsp;<a HREF=\"javascript:refreshComponents(document.location.href);\" class=\"white\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/refresh.gif\" alt=\"Refresh palette\" border=\"0\"></a>&nbsp;<a HREF=\"javascript:moveDivDown('paletteDiv');\" class=\"white\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/arrowDown.gif\" alt=\"Move down\" border=\"0\"></a>&nbsp;<a HREF=\"javascript:moveDivUp('paletteDiv');\" class=\"white\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/arrowUp.gif\" alt=\"Move up\" border=\"0\"></a>&nbsp;<a HREF=\"javascript:toggleDiv('pageComponents');\" class=\"white\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/pageStructure.gif\" alt=\"Toggle page structure\" border=\"0\"></a>&nbsp;");
1257        if(hasSaveTemplateAccess)
1258            sb.append("<a HREF=\"javascript:saveComponentStructure('" + componentEditorUrl + "CreatePageTemplate!input.action?contentId=" + contentVO.getId() + "');\" class=\"white\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/saveComponentStructure.gif\" alt=\"Save the page as a template page\" border=\"0\"></a>&nbsp;");
1259        
1260        sb.append("<a HREF=\"javascript:window.open(document.location.href, 'PageComponents', '');\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/fullscreen.gif\" alt=\"Pop up in a large window\" border=\"0\"></a>&nbsp;</td>");
1261        
1262        sb.append(" </tr>");
1263        sb.append("</table>");
1264        sb.append("</div>");
1265        
1266        sb.append("<script type=\"text/javascript\">");
1267        sb.append("var currentGroup = \"" + initialGroupName + "\";");
1268        sb.append("</script>");
1269                
1270        String JavaDoc openGroupName = "";
1271
1272        groupIterator = componentGroups.keySet().iterator();
1273        index = 0;
1274        while(groupIterator.hasNext())
1275        {
1276            groupName = (String JavaDoc)groupIterator.next();
1277
1278            if(index == 0)
1279            {
1280                sb.append("<div id=\"" + groupName + "ComponentsBg\" class=\"componentsBackground\" style=\"zIndex:3; visibility: inherited;\">");
1281                openGroupName = groupName;
1282            }
1283            else
1284                sb.append("<div id=\"" + groupName + "ComponentsBg\" class=\"componentsBackground\" style=\"zIndex:2; visibility: inherited;\">");
1285            
1286            sb.append("<div id=\"" + groupName + "Components\" style=\"visibility:inherit; position:absolute; top:1px; left:5px; height:50px; \">");
1287            sb.append(" <table class=\"igtable\" style=\"width:100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
1288            sb.append(" <tr class=\"igtr\">");
1289            //sb.append(" <td width=\"100%\"><nobr>");
1290

1291            String JavaDoc imageUrl = this.getRequest().getContextPath() + "/images/componentIcon.gif";
1292            List JavaDoc components = (List JavaDoc)componentGroups.get(groupName); //getComponentContents();
1293
Iterator JavaDoc componentIterator = components.iterator();
1294            int componentIndex = 0;
1295            while(componentIterator.hasNext())
1296            {
1297                ContentVO componentContentVO = (ContentVO)componentIterator.next();
1298    
1299                //String imageUrlTemp = getDigitalAssetUrl(componentContentVO.getId(), "thumbnail");
1300
//if(imageUrlTemp != null && imageUrlTemp.length() > 0)
1301
// imageUrl = imageUrlTemp;
1302
sb.append(" <td class=\"igpalettetd\">");
1303                sb.append(" <div id=\"" + componentIndex + "\" style=\"display: block; visibility: inherited;\"><nobr><img SRC=\"" + imageUrl + "\" width=\"16\" height=\"16\" border=\"0\">");
1304                sb.append(" <span onMouseDown=\"grabIt(event);\" onmouseover=\"showDetails('" + componentContentVO.getName() + "');\" id=\""+ componentContentVO.getId() + "\" class=\"draggableItem\" nowrap=\"1\">" + ((componentContentVO.getName().length() > 22) ? componentContentVO.getName().substring(0, 17) : componentContentVO.getName()) + "...</span>");
1305                sb.append(" </nobr></div>");
1306                sb.append(" </td>");
1307                
1308                imageUrl = this.getRequest().getContextPath() + "/images/componentIcon.gif";
1309            }
1310            sb.append(" <td class=\"igpalettetd\" width=\"90%\">&nbsp;</td>");
1311            
1312            //sb.append(" </nobr></td>");
1313
sb.append(" </tr>");
1314            sb.append(" </table>");
1315            sb.append("</div>");
1316            
1317            sb.append("</div>");
1318            
1319            sb.append("<script type=\"text/javascript\"> if (bw.bw) tabInit('" + groupName + "Components'); </script>");
1320
1321            
1322            index++;
1323        }
1324        
1325        sb.append("<div id=\"statusListBg\">");
1326        sb.append("<table class=\"igtable\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");
1327        sb.append("<tr class=\"igtr\">");
1328        sb.append(" <td class=\"igpalettetd\" align=\"left\" width=\"15px\">&nbsp;<a HREF=\"#\" onclick=\"moveLeft(currentGroup)\" return false\" onfocus=\"if(this.blur)this.blur()\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/arrowleft.gif\" alt=\"previous\" border=\"0\"></a></td>");
1329        sb.append(" <td class=\"igpalettetd\" align=\"left\" width=\"95%\"><span class=\"componentsStatusText\">Details: </span><span id=\"statusText\" class=\"componentsStatusText\">&nbsp;</span></td>");
1330        sb.append(" <td class=\"igpalettetd\" align=\"right\"><a HREF=\"#\" onclick=\"moveRight(currentGroup)\" return false\" onfocus=\"if(this.blur)this.blur()\"><img SRC=\"" + this.getRequest().getContextPath() + "/images/arrowright.gif\" alt=\"next\" border=\"0\"></a>&nbsp;</td>");
1331        sb.append("</tr>");
1332        sb.append("</table>");
1333        sb.append("</div>");
1334
1335        sb.append(" <script type=\"text/javascript\">");
1336        sb.append(" changeTab('" + openGroupName + "');");
1337        
1338        sb.append(" var theHandle = document.getElementById(\"paletteHandle\");");
1339        sb.append(" var theRoot = document.getElementById(\"paletteDiv\");");
1340        sb.append(" Drag.init(theHandle, theRoot, 0, 0, 0, 1000);");
1341        
1342        sb.append(" </script>");
1343
1344        sb.append("</div>");
1345        
1346        //Caching the result
1347
componentPaletteDiv = sb.toString();
1348        CacheController.cacheObject("componentPaletteDivCache", key, componentPaletteDiv);
1349        
1350        return componentPaletteDiv;
1351    }
1352
1353    /**
1354     * This method gets all component groups from the available components.
1355     * This is dynamically so if one states a different group in the component the group is created.
1356     */

1357
1358    private Map JavaDoc getComponentGroups(List JavaDoc components, TemplateController templateController)
1359    {
1360        Map JavaDoc componentGroups = new HashMap JavaDoc();
1361        
1362        Iterator JavaDoc componentIterator = components.iterator();
1363        while(componentIterator.hasNext())
1364        {
1365            ContentVO componentContentVO = (ContentVO)componentIterator.next();
1366            String JavaDoc groupName = templateController.getContentAttribute(componentContentVO.getId(), "GroupName", true);
1367            if(groupName == null || groupName.equals(""))
1368                groupName = "Other";
1369            
1370            List JavaDoc groupComponents = (List JavaDoc)componentGroups.get(groupName);
1371            if(groupComponents == null)
1372            {
1373                groupComponents = new ArrayList JavaDoc();
1374                componentGroups.put(groupName, groupComponents);
1375            }
1376            
1377            groupComponents.add(componentContentVO);
1378        }
1379        
1380        return componentGroups;
1381    }
1382
1383    /**
1384     * This method returns the contents that are of contentTypeDefinition "HTMLTemplate"
1385     */

1386    
1387    public List JavaDoc getComponentContents() throws Exception JavaDoc
1388    {
1389        HashMap JavaDoc arguments = new HashMap JavaDoc();
1390        arguments.put("method", "selectListOnContentTypeName");
1391        
1392        List JavaDoc argumentList = new ArrayList JavaDoc();
1393        HashMap JavaDoc argument = new HashMap JavaDoc();
1394        argument.put("contentTypeDefinitionName", "HTMLTemplate");
1395        argumentList.add(argument);
1396        arguments.put("arguments", argumentList);
1397        
1398        return ContentController.getContentController().getContentVOList(arguments, getDatabase());
1399    }
1400    
1401    /**
1402     * This method fetches the pageComponent structure as a document.
1403     */

1404        
1405    protected org.w3c.dom.Document JavaDoc getComponentPropertiesDocument(TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId) throws SystemException, Exception JavaDoc
1406    {
1407        String JavaDoc cacheName = "componentEditorCache";
1408        String JavaDoc cacheKey = "componentPropertiesDocument_" + siteNodeId + "_" + templateController.getLanguageId() + "_" + contentId;
1409        org.w3c.dom.Document JavaDoc cachedComponentPropertiesDocument = (org.w3c.dom.Document JavaDoc)CacheController.getCachedObject(cacheName, cacheKey);
1410        if(cachedComponentPropertiesDocument != null)
1411            return cachedComponentPropertiesDocument;
1412        
1413        org.w3c.dom.Document JavaDoc componentPropertiesDocument = null;
1414    
1415        try
1416        {
1417            String JavaDoc xml = this.getComponentPropertiesString(templateController, siteNodeId, languageId, contentId);
1418            //logger.info("xml: " + xml);
1419
if(xml != null && xml.length() > 0)
1420            {
1421                componentPropertiesDocument = XMLHelper.readDocumentFromByteArray(xml.getBytes("UTF-8"));
1422                
1423                CacheController.cacheObject(cacheName, cacheKey, componentPropertiesDocument);
1424            }
1425        }
1426        catch(Exception JavaDoc e)
1427        {
1428            logger.error(e.getMessage(), e);
1429            throw e;
1430        }
1431        
1432        return componentPropertiesDocument;
1433    }
1434
1435    /**
1436     * This method fetches the template-string.
1437     */

1438   
1439    private String JavaDoc getComponentPropertiesString(TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId) throws SystemException, Exception JavaDoc
1440    {
1441        String JavaDoc cacheName = "componentEditorCache";
1442        String JavaDoc cacheKey = "componentPropertiesString_" + siteNodeId + "_" + templateController.getLanguageId() + "_" + contentId;
1443        String JavaDoc cachedComponentPropertiesString = (String JavaDoc)CacheController.getCachedObject(cacheName, cacheKey);
1444        if(cachedComponentPropertiesString != null)
1445            return cachedComponentPropertiesString;
1446            
1447        String JavaDoc componentPropertiesString = null;
1448    
1449        try
1450        {
1451            Integer JavaDoc masterLanguageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(templateController.getDatabase(), siteNodeId).getId();
1452            //logger.info("masterLanguageId:" + masterLanguageId);
1453
componentPropertiesString = templateController.getContentAttribute(contentId, masterLanguageId, "ComponentProperties", true);
1454
1455            if(componentPropertiesString == null)
1456                throw new SystemException("There was no properties assigned to this content.");
1457        
1458            CacheController.cacheObject(cacheName, cacheKey, componentPropertiesString);
1459        }
1460        catch(Exception JavaDoc e)
1461        {
1462            logger.error(e.getMessage(), e);
1463            throw e;
1464        }
1465
1466        return componentPropertiesString;
1467    }
1468    
1469    
1470    /**
1471     * This method fetches the tasks as a document.
1472     */

1473        
1474    protected org.w3c.dom.Document JavaDoc getComponentTasksDocument(TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId) throws SystemException, Exception JavaDoc
1475    {
1476        String JavaDoc cacheName = "componentEditorCache";
1477        String JavaDoc cacheKey = "componentTasksDocument_" + siteNodeId + "_" + templateController.getLanguageId() + "_" + contentId;
1478        org.w3c.dom.Document JavaDoc cachedComponentTasksDocument = (org.w3c.dom.Document JavaDoc)CacheController.getCachedObject(cacheName, cacheKey);
1479        if(cachedComponentTasksDocument != null)
1480            return cachedComponentTasksDocument;
1481        
1482        org.w3c.dom.Document JavaDoc componentTasksDocument = null;
1483    
1484        try
1485        {
1486            String JavaDoc xml = this.getComponentTasksString(templateController, siteNodeId, languageId, contentId);
1487            if(xml != null && xml.length() > 0)
1488            {
1489                componentTasksDocument = XMLHelper.readDocumentFromByteArray(xml.getBytes("UTF-8"));
1490                
1491                CacheController.cacheObject(cacheName, cacheKey, componentTasksDocument);
1492            }
1493        }
1494        catch(Exception JavaDoc e)
1495        {
1496            logger.error(e.getMessage(), e);
1497            throw e;
1498        }
1499        
1500        return componentTasksDocument;
1501    }
1502
1503    /**
1504     * This method fetches the tasks for a certain component.
1505     */

1506   
1507    private String JavaDoc getComponentTasksString(TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId) throws SystemException, Exception JavaDoc
1508    {
1509        String JavaDoc cacheName = "componentEditorCache";
1510        String JavaDoc cacheKey = "componentTasksString_" + siteNodeId + "_" + templateController.getLanguageId() + "_" + contentId;
1511        String JavaDoc cachedComponentTasksString = (String JavaDoc)CacheController.getCachedObject(cacheName, cacheKey);
1512        if(cachedComponentTasksString != null)
1513            return cachedComponentTasksString;
1514            
1515        String JavaDoc componentTasksString = null;
1516    
1517        try
1518        {
1519            Integer JavaDoc masterLanguageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(getDatabase(), siteNodeId).getId();
1520            componentTasksString = templateController.getContentAttribute(contentId, masterLanguageId, "ComponentTasks", true);
1521
1522            if(componentTasksString == null)
1523                throw new SystemException("There was no tasks assigned to this content.");
1524        
1525            CacheController.cacheObject(cacheName, cacheKey, componentTasksString);
1526        }
1527        catch(Exception JavaDoc e)
1528        {
1529            logger.error(e.getMessage(), e);
1530            throw e;
1531        }
1532
1533        return componentTasksString;
1534    }
1535    
1536    public Collection JavaDoc getComponentProperties(Integer JavaDoc componentId, TemplateController templateController, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc componentContentId) throws Exception JavaDoc
1537    {
1538        org.w3c.dom.Document JavaDoc componentPropertiesDocument = getComponentPropertiesDocument(templateController, siteNodeId, languageId, componentContentId);
1539        return getComponentProperties(componentId, componentPropertiesDocument, templateController);
1540    }
1541    
1542    /*
1543     * This method returns a bean representing a list of ComponentProperties that the component has.
1544     */

1545     
1546    private List JavaDoc getComponentProperties(Integer JavaDoc componentId, org.w3c.dom.Document JavaDoc document) throws Exception JavaDoc
1547    {
1548        //TODO - här kan vi säkert cache:a.
1549

1550        //logger.info("componentPropertiesXML:" + componentPropertiesXML);
1551
List JavaDoc componentProperties = new ArrayList JavaDoc();
1552        Timer timer = new Timer();
1553        timer.setActive(false);
1554
1555        try
1556        {
1557            if(document != null)
1558            {
1559            //if(componentPropertiesXML != null && componentPropertiesXML.length() > 0)
1560
//{
1561
//org.w3c.dom.Document document = XMLHelper.readDocumentFromByteArray(componentPropertiesXML.getBytes("UTF-8"));
1562

1563                timer.printElapsedTime("Read document");
1564
1565                String JavaDoc propertyXPath = "//property";
1566                //logger.info("propertyXPath:" + propertyXPath);
1567
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), propertyXPath);
1568                timer.printElapsedTime("Set property xpath");
1569                //logger.info("*********************************************************anl:" + anl.getLength());
1570
for(int i=0; i < anl.getLength(); i++)
1571                {
1572                    org.w3c.dom.Element JavaDoc binding = (org.w3c.dom.Element JavaDoc)anl.item(i);
1573                    
1574                    String JavaDoc name = binding.getAttribute("name");
1575                    String JavaDoc description = binding.getAttribute("description");
1576                    String JavaDoc type = binding.getAttribute("type");
1577                    String JavaDoc allowedContentTypeNamesString = binding.getAttribute("allowedContentTypeDefinitionNames");
1578                    String JavaDoc visualizingAction = binding.getAttribute("visualizingAction");
1579                    String JavaDoc createAction = binding.getAttribute("createAction");
1580                    //logger.info("name:" + name);
1581
//logger.info("type:" + type);
1582

1583                    ComponentProperty property = new ComponentProperty();
1584                    property.setComponentId(componentId);
1585                    property.setName(name);
1586                    property.setDescription(description);
1587                    property.setType(type);
1588                    property.setVisualizingAction(visualizingAction);
1589                    property.setCreateAction(createAction);
1590                    if(allowedContentTypeNamesString != null && allowedContentTypeNamesString.length() > 0)
1591                    {
1592                        String JavaDoc[] allowedContentTypeNamesArray = allowedContentTypeNamesString.split(",");
1593                        property.setAllowedContentTypeNamesArray(allowedContentTypeNamesArray);
1594                    }
1595                    
1596                    if(type.equalsIgnoreCase(ComponentProperty.BINDING))
1597                    {
1598                        String JavaDoc entity = binding.getAttribute("entity");
1599                        boolean isMultipleBinding = new Boolean JavaDoc(binding.getAttribute("multiple")).booleanValue();
1600                        
1601                        property.setEntityClass(entity);
1602                        String JavaDoc value = getComponentPropertyValue(componentId, name);
1603                        timer.printElapsedTime("Set property1");
1604
1605                        property.setValue(value);
1606                        property.setIsMultipleBinding(isMultipleBinding);
1607                    }
1608                    else if(type.equalsIgnoreCase(ComponentProperty.TEXTFIELD))
1609                    {
1610                        String JavaDoc value = getComponentPropertyValue(componentId, name);
1611                        timer.printElapsedTime("Set property2");
1612                        //logger.info("value:" + value);
1613
property.setValue(value);
1614                    }
1615                    else if(type.equalsIgnoreCase(ComponentProperty.TEXTAREA))
1616                    {
1617                        String JavaDoc value = getComponentPropertyValue(componentId, name);
1618                        timer.printElapsedTime("Set property2");
1619                        //logger.info("value:" + value);
1620
property.setValue(value);
1621                    }
1622                    else if(type.equalsIgnoreCase(ComponentProperty.SELECTFIELD))
1623                    {
1624                        String JavaDoc value = getComponentPropertyValue(componentId, name);
1625                        timer.printElapsedTime("Set property2");
1626                        
1627                        NodeList JavaDoc optionList = binding.getElementsByTagName("option");
1628                        for(int j=0; j < optionList.getLength(); j++)
1629                        {
1630                            org.w3c.dom.Element JavaDoc option = (org.w3c.dom.Element JavaDoc)optionList.item(j);
1631                            String JavaDoc optionName = option.getAttribute("name");
1632                            String JavaDoc optionValue = option.getAttribute("value");
1633                            ComponentPropertyOption cpo = new ComponentPropertyOption();
1634                            cpo.setName(optionName);
1635                            cpo.setValue(optionValue);
1636                            property.getOptions().add(cpo);
1637                        }
1638                        
1639                        //logger.info("value:" + value);
1640
property.setValue(value);
1641                    }
1642                    
1643                    componentProperties.add(property);
1644                }
1645            }
1646        }
1647        catch(Exception JavaDoc e)
1648        {
1649            logger.warn("The component with id " + componentId + " had a incorrect xml defining it's properties:" + e.getMessage(), e);
1650        }
1651                            
1652        return componentProperties;
1653    }
1654
1655
1656    /*
1657     * This method returns a bean representing a list of ComponentProperties that the component has.
1658     */

1659     
1660    private List JavaDoc getComponentProperties(Integer JavaDoc componentId, org.w3c.dom.Document JavaDoc document, TemplateController templateController) throws Exception JavaDoc
1661    {
1662        //TODO - här kan vi säkert cache:a.
1663

1664        //logger.info("componentPropertiesXML:" + componentPropertiesXML);
1665
List JavaDoc componentProperties = new ArrayList JavaDoc();
1666        Timer timer = new Timer();
1667        timer.setActive(false);
1668
1669        try
1670        {
1671            if(document != null)
1672            {
1673            //if(componentPropertiesXML != null && componentPropertiesXML.length() > 0)
1674
//{
1675
//org.w3c.dom.Document document = XMLHelper.readDocumentFromByteArray(componentPropertiesXML.getBytes("UTF-8"));
1676

1677                timer.printElapsedTime("Read document");
1678
1679                String JavaDoc propertyXPath = "//property";
1680                //logger.info("propertyXPath:" + propertyXPath);
1681
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), propertyXPath);
1682                timer.printElapsedTime("Set property xpath");
1683                //logger.info("*********************************************************anl:" + anl.getLength());
1684
for(int i=0; i < anl.getLength(); i++)
1685                {
1686                    org.w3c.dom.Element JavaDoc binding = (org.w3c.dom.Element JavaDoc)anl.item(i);
1687                    
1688                    String JavaDoc name = binding.getAttribute("name");
1689                    String JavaDoc description = binding.getAttribute("description");
1690                    String JavaDoc type = binding.getAttribute("type");
1691                    String JavaDoc allowedContentTypeNamesString = binding.getAttribute("allowedContentTypeDefinitionNames");
1692                    String JavaDoc visualizingAction = binding.getAttribute("visualizingAction");
1693                    String JavaDoc createAction = binding.getAttribute("createAction");
1694                    //logger.info("name:" + name);
1695
//logger.info("type:" + type);
1696

1697                    ComponentProperty property = new ComponentProperty();
1698                    property.setComponentId(componentId);
1699                    property.setName(name);
1700                    property.setDescription(description);
1701                    property.setType(type);
1702                    property.setVisualizingAction(visualizingAction);
1703                    property.setCreateAction(createAction);
1704                    if(allowedContentTypeNamesString != null && allowedContentTypeNamesString.length() > 0)
1705                    {
1706                        String JavaDoc[] allowedContentTypeNamesArray = allowedContentTypeNamesString.split(",");
1707                        property.setAllowedContentTypeNamesArray(allowedContentTypeNamesArray);
1708                    }
1709                    
1710                    if(type.equalsIgnoreCase(ComponentProperty.BINDING))
1711                    {
1712                        String JavaDoc entity = binding.getAttribute("entity");
1713                        boolean isMultipleBinding = new Boolean JavaDoc(binding.getAttribute("multiple")).booleanValue();
1714                        
1715                        property.setEntityClass(entity);
1716                        String JavaDoc value = getComponentPropertyValue(componentId, name, templateController);
1717                        timer.printElapsedTime("Set property1");
1718
1719                        property.setValue(value);
1720                        property.setIsMultipleBinding(isMultipleBinding);
1721                    }
1722                    else if(type.equalsIgnoreCase(ComponentProperty.TEXTFIELD))
1723                    {
1724                        String JavaDoc value = getComponentPropertyValue(componentId, name, templateController);
1725                        timer.printElapsedTime("Set property2");
1726                        //logger.info("value:" + value);
1727
property.setValue(value);
1728                    }
1729                    else if(type.equalsIgnoreCase(ComponentProperty.TEXTAREA))
1730                    {
1731                        String JavaDoc value = getComponentPropertyValue(componentId, name, templateController);
1732                        timer.printElapsedTime("Set property2");
1733                        //logger.info("value:" + value);
1734
property.setValue(value);
1735                    }
1736                    else if(type.equalsIgnoreCase(ComponentProperty.SELECTFIELD))
1737                    {
1738                        String JavaDoc value = getComponentPropertyValue(componentId, name, templateController);
1739                        timer.printElapsedTime("Set property2");
1740                        
1741                        NodeList JavaDoc optionList = binding.getElementsByTagName("option");
1742                        for(int j=0; j < optionList.getLength(); j++)
1743                        {
1744                            org.w3c.dom.Element JavaDoc option = (org.w3c.dom.Element JavaDoc)optionList.item(j);
1745                            String JavaDoc optionName = option.getAttribute("name");
1746                            String JavaDoc optionValue = option.getAttribute("value");
1747                            ComponentPropertyOption cpo = new ComponentPropertyOption();
1748                            cpo.setName(optionName);
1749                            cpo.setValue(optionValue);
1750                            property.getOptions().add(cpo);
1751                        }
1752                        
1753                        //logger.info("value:" + value);
1754
property.setValue(value);
1755                    }
1756                    
1757                    componentProperties.add(property);
1758                }
1759            }
1760        }
1761        catch(Exception JavaDoc e)
1762        {
1763            logger.warn("The component with id " + componentId + " had a incorrect xml defining it's properties:" + e.getMessage(), e);
1764        }
1765                            
1766        return componentProperties;
1767    }
1768
1769    /*
1770     * This method returns a bean representing a list of ComponentProperties that the component has.
1771     */

1772     
1773    private List JavaDoc getComponentTasks(Integer JavaDoc componentId, org.w3c.dom.Document JavaDoc document) throws Exception JavaDoc
1774    {
1775        List JavaDoc componentTasks = new ArrayList JavaDoc();
1776        Timer timer = new Timer();
1777        timer.setActive(false);
1778
1779        try
1780        {
1781            if(document != null)
1782            {
1783                timer.printElapsedTime("Read document");
1784
1785                String JavaDoc propertyXPath = "//task";
1786                //logger.info("propertyXPath:" + propertyXPath);
1787
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), propertyXPath);
1788                timer.printElapsedTime("Set property xpath");
1789                for(int i=0; i < anl.getLength(); i++)
1790                {
1791                    org.w3c.dom.Element JavaDoc binding = (org.w3c.dom.Element JavaDoc)anl.item(i);
1792                    
1793                    String JavaDoc name = binding.getAttribute("name");
1794                    String JavaDoc view = binding.getAttribute("view");
1795                    logger.info("name:" + name);
1796                    logger.info("view:" + view);
1797
1798                    ComponentTask task = new ComponentTask();
1799                    task.setName(name);
1800                    task.setView(view);
1801                    task.setComponentId(componentId);
1802                    
1803                    componentTasks.add(task);
1804                }
1805            }
1806        }
1807        catch(Exception JavaDoc e)
1808        {
1809            logger.warn("The component with id " + componentId + " had a incorrect xml defining it's properties:" + e.getMessage(), e);
1810        }
1811                            
1812        return componentTasks;
1813    }
1814
1815
1816    /**
1817     * This method returns a value for a property if it's set. The value is collected in the
1818     * properties for the page.
1819     */

1820    
1821    private String JavaDoc getComponentPropertyValue(Integer JavaDoc componentId, String JavaDoc name) throws Exception JavaDoc
1822    {
1823        String JavaDoc value = "Undefined";
1824        
1825        Timer timer = new Timer();
1826        timer.setActive(false);
1827                
1828        Integer JavaDoc siteNodeId = new Integer JavaDoc(this.getRequest().getParameter("siteNodeId"));
1829        Integer JavaDoc languageId = null;
1830
1831        if(this.getRequest().getParameter("languageId") != null && this.getRequest().getParameter("languageId").length() > 0)
1832            languageId = new Integer JavaDoc(this.getRequest().getParameter("languageId"));
1833            //if(!languageId.equals(this.getTemplateController().getDeliveryContext().getLanguageId()))
1834
// languageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(getDatabase(), siteNodeId).getId();
1835
else
1836            languageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(getDatabase(), siteNodeId).getId();
1837                
1838        Locale JavaDoc locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(getDatabase(), languageId);
1839        
1840        Integer JavaDoc contentId = new Integer JavaDoc(-1);
1841        if(this.getRequest().getParameter("contentId") != null && this.getRequest().getParameter("contentId").length() > 0)
1842            contentId = new Integer JavaDoc(this.getRequest().getParameter("contentId"));
1843
1844        NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, contentId);
1845        
1846        org.w3c.dom.Document JavaDoc document = getPageComponentsDocument(getDatabase(), this.getTemplateController(), siteNodeId, languageId, contentId);
1847        
1848        String JavaDoc componentXPath = "//component[@id=" + componentId + "]/properties/property[@name='" + name + "']";
1849        //logger.info("componentXPath:" + componentXPath);
1850
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), componentXPath);
1851        for(int i=0; i < anl.getLength(); i++)
1852        {
1853            org.w3c.dom.Element JavaDoc property = (org.w3c.dom.Element JavaDoc)anl.item(i);
1854            
1855            String JavaDoc id = property.getAttribute("type");
1856            String JavaDoc path = property.getAttribute("path");
1857            
1858            if(property.hasAttribute("path_" + locale.getLanguage()))
1859                path = property.getAttribute("path_" + locale.getLanguage());
1860
1861            value = path;
1862        }
1863
1864        return value;
1865    }
1866
1867    /**
1868     * This method returns a value for a property if it's set. The value is collected in the
1869     * properties for the page.
1870     */

1871    
1872    private String JavaDoc getComponentPropertyValue(Integer JavaDoc componentId, String JavaDoc name, TemplateController templateController) throws Exception JavaDoc
1873    {
1874        String JavaDoc value = "Undefined";
1875        
1876        Timer timer = new Timer();
1877        timer.setActive(false);
1878                
1879        Integer JavaDoc languageId = null;
1880        if(this.getRequest() != null && this.getRequest().getParameter("languageId") != null && this.getRequest().getParameter("languageId").length() > 0)
1881            languageId = new Integer JavaDoc(this.getRequest().getParameter("languageId"));
1882        else
1883            languageId = LanguageDeliveryController.getLanguageDeliveryController().getMasterLanguageForSiteNode(templateController.getDatabase(), templateController.getSiteNodeId()).getId();
1884                
1885        Locale JavaDoc locale = LanguageDeliveryController.getLanguageDeliveryController().getLocaleWithId(templateController.getDatabase(), languageId);
1886        
1887        Integer JavaDoc contentId = new Integer JavaDoc(-1);
1888        if(this.getRequest() != null && this.getRequest().getParameter("contentId") != null && this.getRequest().getParameter("contentId").length() > 0)
1889            contentId = new Integer JavaDoc(this.getRequest().getParameter("contentId"));
1890
1891        NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(templateController.getSiteNodeId(), languageId, contentId);
1892        
1893        org.w3c.dom.Document JavaDoc document = getPageComponentsDocument(templateController.getDatabase(), templateController, templateController.getSiteNodeId(), languageId, contentId);
1894        
1895        String JavaDoc componentXPath = "//component[@id=" + componentId + "]/properties/property[@name='" + name + "']";
1896        //logger.info("componentXPath:" + componentXPath);
1897
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), componentXPath);
1898        for(int i=0; i < anl.getLength(); i++)
1899        {
1900            org.w3c.dom.Element JavaDoc property = (org.w3c.dom.Element JavaDoc)anl.item(i);
1901            
1902            String JavaDoc id = property.getAttribute("type");
1903            String JavaDoc path = property.getAttribute("path");
1904
1905            if(property.hasAttribute("path_" + locale.getLanguage()))
1906                path = property.getAttribute("path_" + locale.getLanguage());
1907                
1908            value = path;
1909        }
1910
1911        return value;
1912    }
1913
1914
1915    /*
1916     * This method returns a bean representing a list of bindings that the component has.
1917     */

1918     
1919    private List JavaDoc getContentBindnings(Integer JavaDoc componentId) throws Exception JavaDoc
1920    {
1921        List JavaDoc contentBindings = new ArrayList JavaDoc();
1922        
1923        Integer JavaDoc siteNodeId = new Integer JavaDoc(this.getRequest().getParameter("siteNodeId"));
1924        Integer JavaDoc languageId = new Integer JavaDoc(this.getRequest().getParameter("languageId"));
1925        Integer JavaDoc contentId = new Integer JavaDoc(this.getRequest().getParameter("contentId"));
1926
1927        NodeDeliveryController nodeDeliveryController = NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, contentId);
1928        IntegrationDeliveryController integrationDeliveryController = IntegrationDeliveryController.getIntegrationDeliveryController(siteNodeId, languageId, contentId);
1929        
1930        boolean USE_LANGUAGE_FALLBACK = true;
1931        boolean DO_NOT_USE_LANGUAGE_FALLBACK = false;
1932
1933        String JavaDoc componentXML = getPageComponentsString(getDatabase(), this.getTemplateController(), siteNodeId, languageId, contentId);
1934        ////logger.info("componentXML:" + componentXML);
1935

1936        org.w3c.dom.Document JavaDoc document = XMLHelper.readDocumentFromByteArray(componentXML.getBytes("UTF-8"));
1937        String JavaDoc componentXPath = "//component[@id=" + componentId + "]/bindings/binding";
1938        //logger.info("componentXPath:" + componentXPath);
1939
NodeList JavaDoc anl = org.apache.xpath.XPathAPI.selectNodeList(document.getDocumentElement(), componentXPath);
1940        for(int i=0; i < anl.getLength(); i++)
1941        {
1942            org.w3c.dom.Element JavaDoc binding = (org.w3c.dom.Element JavaDoc)anl.item(i);
1943            //logger.info(XMLHelper.serializeDom(binding, new StringBuffer()));
1944
//logger.info("YES - we read the binding properties...");
1945

1946            String JavaDoc id = binding.getAttribute("id");
1947            String JavaDoc entityClass = binding.getAttribute("entity");
1948            String JavaDoc entityId = binding.getAttribute("entityId");
1949            //logger.info("id:" + id);
1950
//logger.info("entityClass:" + entityClass);
1951
//logger.info("entityId:" + entityId);
1952

1953            if(entityClass.equalsIgnoreCase("Content"))
1954            {
1955                ContentVO contentVO = ContentDeliveryController.getContentDeliveryController().getContentVO(new Integer JavaDoc(entityId), getDatabase());
1956                ComponentBinding componentBinding = new ComponentBinding();
1957                componentBinding.setId(new Integer JavaDoc(id));
1958                componentBinding.setComponentId(componentId);
1959                componentBinding.setEntityClass(entityClass);
1960                componentBinding.setEntityId(new Integer JavaDoc(entityId));
1961                componentBinding.setBindingPath(contentVO.getName());
1962                
1963                contentBindings.add(componentBinding);
1964            }
1965        }
1966            
1967        return contentBindings;
1968    }
1969     
1970     
1971    private void printComponentHierarchy(List JavaDoc pageComponents, int level)
1972    {
1973        Iterator JavaDoc pageComponentIterator = pageComponents.iterator();
1974        while(pageComponentIterator.hasNext())
1975        {
1976            InfoGlueComponent tempComponent = (InfoGlueComponent)pageComponentIterator.next();
1977            
1978            for(int i=0; i<level; i++)
1979                logger.info(" ");
1980            
1981            logger.info(" component:" + tempComponent.getName());
1982            
1983            Iterator JavaDoc slotIterator = tempComponent.getSlotList().iterator();
1984            while(slotIterator.hasNext())
1985            {
1986                Slot slot = (Slot)slotIterator.next();
1987                
1988                for(int i=0; i<level; i++)
1989                    logger.info(" ");
1990                    
1991                logger.info(" slot for " + tempComponent.getName() + ":" + slot.getId());
1992                printComponentHierarchy(slot.getComponents(), level + 1);
1993            }
1994        }
1995    }
1996    
1997    public String JavaDoc getLocalizedString(Locale JavaDoc locale, String JavaDoc key)
1998    {
1999        StringManager stringManager = StringManagerFactory.getPresentationStringManager("org.infoglue.cms.applications", locale);
2000
2001        return stringManager.getString(key);
2002    }
2003
2004}
Popular Tags