1 31 32 package org.opencms.workplace.tools.content; 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.file.types.CmsResourceTypeXmlPage; 40 import org.opencms.i18n.CmsLocaleManager; 41 import org.opencms.lock.CmsLock; 42 import org.opencms.main.CmsException; 43 import org.opencms.report.A_CmsReportThread; 44 import org.opencms.report.I_CmsReport; 45 import org.opencms.util.CmsStringUtil; 46 import org.opencms.xml.page.CmsXmlPage; 47 import org.opencms.xml.page.CmsXmlPageFactory; 48 49 import java.util.Iterator ; 50 import java.util.List ; 51 import java.util.Locale ; 52 53 62 public class CmsChangeElementLocaleThread extends A_CmsReportThread { 63 64 private Throwable m_error; 65 66 private CmsElementChangeLocaleSettings m_settings; 67 68 74 public CmsChangeElementLocaleThread(CmsObject cms, CmsElementChangeLocaleSettings settings) { 75 76 super(cms, Messages.get().getBundle().key(Messages.GUI_CHANGEELEMENTLOCALE_THREAD_NAME_0)); 77 initHtmlReport(cms.getRequestContext().getLocale()); 78 m_settings = settings; 79 } 80 81 84 public Throwable getError() { 85 86 return m_error; 87 } 88 89 92 public String getReportUpdate() { 93 94 return getReport().getReportUpdate(); 95 } 96 97 100 public void run() { 101 102 getReport().println( 103 Messages.get().container( 104 Messages.RPT_CHANGEELEMENTLOCALE_BEGIN_2, m_settings.getOldLocale(), m_settings.getNewLocale()), 105 I_CmsReport.FORMAT_HEADLINE); 106 try { 107 changeElementLocales(); 109 } catch (CmsException e) { 110 getReport().println(e); 111 } 112 113 getReport().print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_STAT_0)); 115 getReport().println( 116 org.opencms.report.Messages.get().container( 117 org.opencms.report.Messages.RPT_STAT_DURATION_1, 118 getReport().formatRuntime())); 119 getReport().println( 120 Messages.get().container(Messages.RPT_CHANGEELEMENTLOCALE_END_0), 121 I_CmsReport.FORMAT_HEADLINE); 122 } 123 124 129 private void changeElementLocales() throws CmsException { 130 131 Locale oldLocale = CmsLocaleManager.getLocale(m_settings.getOldLocale()); 133 Locale newLocale = CmsLocaleManager.getLocale(m_settings.getNewLocale()); 134 boolean checkTemplate = CmsStringUtil.isNotEmpty(m_settings.getTemplate()); 135 136 CmsResourceFilter filter = CmsResourceFilter.IGNORE_EXPIRATION.addRequireType(CmsResourceTypeXmlPage.getStaticTypeId()); 138 String path = CmsResource.getFolderPath(m_settings.getVfsFolder()); 139 List resources = getCms().readResources(path, filter, m_settings.isIncludeSubFolders()); 141 142 int count = 0; 144 int resSize = resources.size(); 145 146 Iterator i = resources.iterator(); 148 while (i.hasNext()) { 149 150 count++; 151 CmsResource res = (CmsResource)i.next(); 152 153 getReport().print( 155 org.opencms.report.Messages.get().container( 156 org.opencms.report.Messages.RPT_SUCCESSION_2, 157 String.valueOf(count), 158 String.valueOf(resSize)), 159 I_CmsReport.FORMAT_NOTE); 160 getReport().print(Messages.get().container(Messages.RPT_PROCESSING_PAGE_0), I_CmsReport.FORMAT_NOTE); 161 getReport().print( 162 org.opencms.report.Messages.get().container( 163 org.opencms.report.Messages.RPT_ARGUMENT_1, 164 getCms().getSitePath(res))); 165 getReport().print(org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_DOTS_0)); 166 167 try { 168 169 if (checkTemplate) { 170 String template = getCms().readPropertyObject(res, CmsPropertyDefinition.PROPERTY_TEMPLATE, true).getValue( 172 ""); 173 if (!m_settings.getTemplate().equals(template)) { 174 getReport().println( 176 Messages.get().container(Messages.RPT_CHANGEELEMENTLOCALE_TEMPLATE_0), 177 I_CmsReport.FORMAT_NOTE); 178 continue; 179 } 180 } 181 182 CmsFile file = CmsFile.upgrade(res, getCms()); 184 CmsXmlPage page = CmsXmlPageFactory.unmarshal(getCms(), file); 186 188 if (!page.hasLocale(oldLocale)) { 189 getReport().println( 191 Messages.get().container( 192 Messages.RPT_CHANGEELEMENTLOCALE_OLDLOCALE_1, 193 m_settings.getOldLocale()), 194 I_CmsReport.FORMAT_NOTE); 195 continue; 196 } 197 198 if (page.hasLocale(newLocale)) { 199 getReport().println( 201 Messages.get().container( 202 Messages.RPT_CHANGEELEMENTLOCALE_NEWLOCALE_1, 203 m_settings.getNewLocale()), 204 I_CmsReport.FORMAT_NOTE); 205 continue; 206 } 207 208 page.moveLocale(oldLocale, newLocale); 210 211 file.setContents(page.marshal()); 213 214 CmsLock lock = getCms().getLock(res); 216 boolean isLocked = false; 217 boolean canWrite = false; 218 if (lock.isNullLock()) { 219 getCms().lockResource(getCms().getSitePath(res)); 221 isLocked = true; 222 canWrite = true; 223 } else if (lock.getUserId().equals(getCms().getRequestContext().currentUser().getId())) { 224 canWrite = true; 226 } 227 228 if (canWrite) { 229 getCms().writeFile(file); 231 } else { 232 getReport().println( 234 Messages.get().container(Messages.RPT_CHANGEELEMENTLOCALE_NOTLOCKED_0), 235 I_CmsReport.FORMAT_NOTE); 236 } 237 238 if (isLocked) { 239 getCms().unlockResource(getCms().getSitePath(res)); 241 } 242 243 if (canWrite) { 244 getReport().println( 246 org.opencms.report.Messages.get().container(org.opencms.report.Messages.RPT_OK_0), 247 I_CmsReport.FORMAT_OK); 248 } 249 250 } catch (CmsException e) { 251 getReport().println(e); 253 } 254 } 255 } 256 } | Popular Tags |