1 31 32 package org.opencms.workplace.editors; 33 34 import org.opencms.file.CmsFile; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsPropertyDefinition; 37 import org.opencms.file.CmsResource; 38 import org.opencms.file.CmsResourceFilter; 39 import org.opencms.i18n.CmsLocaleManager; 40 import org.opencms.jsp.CmsJspActionElement; 41 import org.opencms.main.CmsException; 42 import org.opencms.main.CmsLog; 43 import org.opencms.util.CmsStringUtil; 44 import org.opencms.workplace.CmsDialog; 45 import org.opencms.workplace.CmsWorkplaceSettings; 46 import org.opencms.xml.page.CmsXmlPage; 47 import org.opencms.xml.page.CmsXmlPageFactory; 48 49 import java.util.ArrayList ; 50 import java.util.Collections ; 51 import java.util.Iterator ; 52 import java.util.List ; 53 import java.util.Locale ; 54 55 import javax.servlet.http.HttpServletRequest ; 56 import javax.servlet.http.HttpServletResponse ; 57 import javax.servlet.jsp.JspException ; 58 import javax.servlet.jsp.PageContext ; 59 60 import org.apache.commons.logging.Log; 61 62 77 public class CmsDialogElements extends CmsDialog { 78 79 80 public static final int ACTION_UPDATE_ELEMENTS = 210; 81 82 83 public static final String DIALOG_TYPE = "elementselector"; 84 85 86 public static final String DIALOG_UPDATE_ELEMENTS = "updateelements"; 87 88 89 public static final String PREFIX_PARAM_BODY = "element-"; 90 91 92 private static final Log LOG = CmsLog.getLog(CmsDialogElements.class); 93 94 95 private String m_changeElement; 96 97 98 private List m_elementList; 99 100 101 private Locale m_elementLocale; 102 103 private String m_paramElementlanguage; 105 private String m_paramElementname; 106 private String m_paramTempFile; 107 108 113 public CmsDialogElements(CmsJspActionElement jsp) { 114 115 super(jsp); 116 m_changeElement = ""; 117 } 118 119 126 public CmsDialogElements(PageContext context, HttpServletRequest req, HttpServletResponse res) { 127 128 this(new CmsJspActionElement(context, req, res)); 129 m_changeElement = ""; 130 } 131 132 142 public static List computeElements(CmsObject cms, CmsXmlPage xmlPage, String xmlPageUri, Locale locale) { 143 144 List result = new ArrayList (); 145 146 if (xmlPage != null) { 147 List elementNames = xmlPage.getNames(locale); 148 149 Iterator i = elementNames.iterator(); 150 while (i.hasNext()) { 151 String name = (String )i.next(); 152 CmsDialogElement element = new CmsDialogElement(name, null, false, false, true); 153 result.add(element); 154 } 155 } 156 157 String currentTemplate = null; 158 try { 159 currentTemplate = cms.readPropertyObject(xmlPageUri, CmsPropertyDefinition.PROPERTY_TEMPLATE, true).getValue(); 160 } catch (CmsException e) { 161 if (LOG.isWarnEnabled()) { 162 LOG.warn(e.getLocalizedMessage(), e); 163 } 164 } 165 if (currentTemplate != null && currentTemplate.length() > 0) { 166 String elements = null; 168 try { 169 elements = cms.readPropertyObject( 171 currentTemplate, 172 CmsPropertyDefinition.PROPERTY_TEMPLATE_ELEMENTS, 173 false).getValue(null); 174 } catch (CmsException e) { 175 if (LOG.isWarnEnabled()) { 176 LOG.warn(e.getLocalizedMessage(), e); 177 } 178 } 179 if (elements != null) { 180 List tokens = CmsStringUtil.splitAsList(elements, ','); 182 Iterator it = tokens.iterator(); 183 while (it.hasNext()) { 184 String currentElement = (String )it.next(); 185 String niceName = null; 186 boolean mandatory = false; 187 int sepIndex = currentElement.indexOf("|"); 188 if (sepIndex != -1) { 189 niceName = currentElement.substring(sepIndex + 1); 191 currentElement = currentElement.substring(0, sepIndex); 192 } 193 if (currentElement.endsWith("*")) { 194 mandatory = true; 196 currentElement = currentElement.substring(0, currentElement.length() - 1); 197 } 198 199 CmsDialogElement element = new CmsDialogElement(currentElement, niceName, mandatory, true, false); 200 if (result.contains(element)) { 201 element.setExisting(true); 202 result.remove(element); 203 } 204 result.add(element); 205 } 206 } 207 } 208 209 Collections.sort(result); 210 return result; 211 } 212 213 222 public static List computeElements(CmsObject cms, String xmlPageUri, Locale locale) { 223 224 CmsXmlPage page = null; 225 try { 226 CmsFile pageFile = cms.readFile(xmlPageUri, CmsResourceFilter.IGNORE_EXPIRATION); 228 page = CmsXmlPageFactory.unmarshal(cms, pageFile); 229 } catch (CmsException e) { 230 LOG.warn(Messages.get().getBundle().key(Messages.LOG_READ_XMLPAGE_FAILED_1, xmlPageUri), e); 231 } 233 return computeElements(cms, page, xmlPageUri, locale); 234 } 235 236 241 public void actionUpdateElements() throws JspException { 242 243 try { 244 List elementList = computeElements(); 245 CmsFile file = getCms().readFile(getParamTempfile(), CmsResourceFilter.IGNORE_EXPIRATION); 246 CmsXmlPage page = CmsXmlPageFactory.unmarshal(getCms(), file); 247 boolean foundMandatory = false; 248 m_changeElement = ""; 249 Iterator i = elementList.iterator(); 250 while (i.hasNext()) { 251 CmsDialogElement element = (CmsDialogElement)i.next(); 253 if (element.isMandantory() 254 || element.getName().equals(getParamElementname()) 255 || Boolean.valueOf(getJsp().getRequest().getParameter(PREFIX_PARAM_BODY + element.getName())).booleanValue()) { 256 if (!element.isExisting()) { 257 page.addValue(element.getName(), getElementLocale()); 259 } 260 page.setEnabled(element.getName(), getElementLocale(), true); 261 if (element.isMandantory() && !foundMandatory) { 262 m_changeElement = element.getName(); 263 foundMandatory = true; 264 } 265 } else { 266 if (element.isExisting()) { 267 page.removeValue(element.getName(), getElementLocale()); 269 } 270 } 271 } 272 file.setContents(page.marshal()); 274 getCms().writeFile(file); 275 if (page.isEnabled(getParamElementname(), getElementLocale())) { 277 m_changeElement = getParamElementname(); 278 } else if (!foundMandatory) { 279 if (elementList.size() > 0) { 280 m_changeElement = ((CmsDialogElement)elementList.get(0)).getName(); 281 } 282 } 283 } catch (Throwable e) { 284 setParamMessage(Messages.get().getBundle(getLocale()).key(Messages.ERR_UPDATE_ELEMENTS_0)); 286 includeErrorpage(this, e); 287 } 288 } 289 290 295 public String buildElementList() { 296 297 StringBuffer retValue = new StringBuffer (512); 298 retValue.append("<table border=\"0\">\n"); 299 retValue.append("<tr>\n"); 300 retValue.append("\t<td class=\"textbold\" unselectable=\"on\">" 301 + key(Messages.GUI_EDITOR_DIALOG_ELEMENTS_PAGEELEMENT_0) 302 + "</td>\n"); 303 retValue.append("\t<td class=\"textbold\" unselectable=\"on\"> " 304 + key(Messages.GUI_EDITOR_DIALOG_ELEMENTS_ENABLED_0) 305 + " </td>\n"); 306 retValue.append("</tr>\n"); 307 retValue.append("<tr><td colspan=\"2\"><span style=\"height: 6px;\"></span></td></tr>\n"); 308 309 try { 310 311 List elementList = computeElements(); 313 314 CmsFile file = getCms().readFile(this.getParamTempfile(), CmsResourceFilter.IGNORE_EXPIRATION); 316 CmsXmlPage page = CmsXmlPageFactory.unmarshal(getCms(), file); 317 318 Iterator i = elementList.iterator(); 320 while (i.hasNext()) { 321 CmsDialogElement element = (CmsDialogElement)i.next(); 323 retValue.append("<tr>\n"); 325 retValue.append("\t<td style=\"white-space: nowrap;\" unselectable=\"on\">" + element.getNiceName()); 326 retValue.append("</td>\n"); 327 retValue.append("\t<td class=\"textcenter\" unselectable=\"on\"><input type=\"checkbox\" name=\""); 328 retValue.append(PREFIX_PARAM_BODY); 329 retValue.append(element.getName()); 330 retValue.append("\" value=\"true\""); 331 332 if ((!page.hasValue(element.getName(), getElementLocale()) && element.isMandantory()) 333 || page.isEnabled(element.getName(), getElementLocale())) { 334 retValue.append(" checked=\"checked\""); 335 } 336 if (element.isMandantory() || element.getName().equals(getParamElementname())) { 337 retValue.append(" disabled=\"disabled\""); 338 } 339 retValue.append(">"); 340 retValue.append("<script type=\"text/javascript\">registerElement(\""); 341 342 retValue.append(element.getName()); 343 retValue.append("\", "); 344 retValue.append(page.isEnabled(element.getName(), getElementLocale())); 345 retValue.append(");</script>"); 346 347 retValue.append("</td>\n"); 348 retValue.append("</tr>\n"); 349 } 350 351 } catch (CmsException e) { 352 if (LOG.isInfoEnabled()) { 354 LOG.info(e); 355 } 356 } 357 358 retValue.append("</table>\n"); 359 return retValue.toString(); 360 } 361 362 367 public List computeElements() { 368 369 if (m_elementList == null) { 370 m_elementList = computeElements(getCms(), getParamTempfile(), getElementLocale()); 371 } 372 return m_elementList; 373 } 374 375 380 public String getChangeElement() { 381 382 return m_changeElement; 383 } 384 385 390 public Locale getElementLocale() { 391 392 if (m_elementLocale == null) { 393 m_elementLocale = CmsLocaleManager.getLocale(getParamElementlanguage()); 394 } 395 return m_elementLocale; 396 } 397 398 403 public String getParamElementlanguage() { 404 405 return m_paramElementlanguage; 406 } 407 408 413 public String getParamElementname() { 414 415 return m_paramElementname; 416 } 417 418 423 public String getParamTempfile() { 424 425 return m_paramTempFile; 426 } 427 428 433 public void setParamElementlanguage(String elementLanguage) { 434 435 m_paramElementlanguage = elementLanguage; 436 } 437 438 443 public void setParamElementname(String elementName) { 444 445 m_paramElementname = elementName; 446 } 447 448 453 public void setParamTempfile(String fileName) { 454 455 m_paramTempFile = fileName; 456 } 457 458 461 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 462 463 fillParamValues(request); 465 setParamDialogtype(DIALOG_TYPE); 467 if (DIALOG_UPDATE_ELEMENTS.equals(getParamAction())) { 469 setAction(ACTION_UPDATE_ELEMENTS); 470 } else { 471 setAction(ACTION_DEFAULT); 472 setParamTitle(key( 474 Messages.GUI_EDITOR_DIALOG_ELEMENTS_TITLE_1, 475 new Object [] {CmsResource.getName(getParamResource())})); 476 } 477 } 478 } | Popular Tags |