1 31 32 package org.opencms.workplace.editors.directedit; 33 34 import org.opencms.configuration.CmsConfigurationException; 35 import org.opencms.db.CmsUserSettings; 36 import org.opencms.file.CmsObject; 37 import org.opencms.file.CmsResource; 38 import org.opencms.file.CmsResourceFilter; 39 import org.opencms.i18n.CmsMessages; 40 import org.opencms.lock.CmsLock; 41 import org.opencms.main.CmsLog; 42 import org.opencms.main.OpenCms; 43 import org.opencms.security.CmsPermissionSet; 44 import org.opencms.util.CmsStringUtil; 45 import org.opencms.workplace.editors.Messages; 46 47 import java.io.IOException ; 48 import java.util.Collections ; 49 import java.util.Map ; 50 import java.util.Random ; 51 import java.util.TreeMap ; 52 53 import javax.servlet.jsp.JspException ; 54 import javax.servlet.jsp.PageContext ; 55 56 import org.apache.commons.logging.Log; 57 58 67 public abstract class A_CmsDirectEditProvider implements I_CmsDirectEditProvider { 68 69 70 protected static final String INCLUDE_FILE_DEFAULT = "/system/workplace/editors/direct_edit_include.txt"; 71 72 73 private static final Log LOG = CmsLog.getLog(A_CmsDirectEditProvider.class); 74 75 76 protected CmsObject m_cms; 77 78 79 protected Map m_configurationParameters; 80 81 82 protected int m_editButtonStyle; 83 84 85 protected String m_fileName; 86 87 88 protected CmsMessages m_messages; 89 90 91 protected CmsDirectEditMode m_mode; 92 93 94 protected Random m_rnd; 95 96 99 public void addConfigurationParameter(String paramName, String paramValue) { 100 101 if (m_configurationParameters == null) { 102 m_configurationParameters = new TreeMap (); 103 } 104 m_configurationParameters.put(paramName, paramValue); 105 } 106 107 110 public Map getConfiguration() { 111 112 if (m_configurationParameters == null) { 113 return Collections.EMPTY_MAP; 115 } 116 return m_configurationParameters; 118 } 119 120 131 public CmsDirectEditResourceInfo getResourceInfo(String resourceName) { 132 133 try { 134 if (m_cms.getRequestContext().currentProject().isOnlineProject()) { 136 return CmsDirectEditResourceInfo.INACTIVE; 138 } 139 if (CmsResource.getName(resourceName).startsWith(org.opencms.workplace.CmsWorkplace.TEMP_FILE_PREFIX)) { 140 return CmsDirectEditResourceInfo.INACTIVE; 142 } 143 if (!m_cms.isInsideCurrentProject(resourceName)) { 144 return CmsDirectEditResourceInfo.INACTIVE; 146 } 147 CmsResource resource = m_cms.readResource(resourceName, CmsResourceFilter.ALL); 149 if (!OpenCms.getResourceManager().getResourceType(resource.getTypeId()).isDirectEditable()) { 150 return CmsDirectEditResourceInfo.INACTIVE; 152 } 153 CmsLock lock = m_cms.getLock(resource); 155 boolean unlocked = lock.isNullLock(); 156 boolean ownedInProject = (lock.getProjectId() == m_cms.getRequestContext().currentProject().getId()) 157 && (lock.getUserId().equals(m_cms.getRequestContext().currentUser().getId())); 158 159 boolean locked = !(unlocked || ownedInProject); 160 if (m_cms.hasPermissions( 162 resource, 163 CmsPermissionSet.ACCESS_WRITE, 164 false, 165 CmsResourceFilter.IGNORE_EXPIRATION)) { 166 if (locked) { 168 return new CmsDirectEditResourceInfo(CmsDirectEditPermissions.DISABLED, resource, lock); 170 } 171 return new CmsDirectEditResourceInfo(CmsDirectEditPermissions.ENABLED, resource, lock); 173 } 174 } catch (Exception e) { 175 if (LOG.isWarnEnabled()) { 177 LOG.warn(Messages.get().getBundle().key(Messages.LOG_CALC_EDIT_MODE_FAILED_1, resourceName), e); 178 } 179 } 180 return CmsDirectEditResourceInfo.INACTIVE; 182 } 183 184 187 public void init(CmsObject cms, CmsDirectEditMode mode, String fileName) { 188 189 m_cms = cms; 190 m_fileName = fileName; 191 if (CmsStringUtil.isEmpty(m_fileName)) { 192 m_fileName = INCLUDE_FILE_DEFAULT; 193 } 194 m_mode = mode != null ? mode : CmsDirectEditMode.AUTO; 195 196 m_rnd = new Random (); 197 CmsUserSettings settings = new CmsUserSettings(cms); 198 m_messages = new CmsMessages(Messages.get().getBundleName(), settings.getLocale()); 199 m_editButtonStyle = settings.getEditorButtonStyle(); 200 } 201 202 205 public void initConfiguration() throws CmsConfigurationException { 206 207 if (m_configurationParameters == null) { 209 m_configurationParameters = Collections.EMPTY_MAP; 211 } else { 212 m_configurationParameters = Collections.unmodifiableMap(m_configurationParameters); 213 } 214 if (m_configurationParameters == null) { 215 throw new CmsConfigurationException(null); 217 } 218 } 219 220 223 public boolean isManual(CmsDirectEditMode mode) { 224 225 return (mode == CmsDirectEditMode.MANUAL) 226 || ((m_mode == CmsDirectEditMode.MANUAL) && (mode == CmsDirectEditMode.TRUE)); 227 } 228 229 236 protected String getLink(String target) { 237 238 return OpenCms.getLinkManager().substituteLink(m_cms, target); 239 } 240 241 248 protected String getNextDirectEditId() { 249 250 return "ocms_".concat(String.valueOf(m_rnd.nextInt(1000000))); 251 } 252 253 263 protected void print(PageContext context, String content) throws JspException { 264 265 if (content != null) { 266 try { 267 context.getOut().print(content); 268 } catch (IOException e) { 269 throw new JspException (e); 270 } 271 } 272 } 273 } | Popular Tags |