1 package com.dotmarketing.portlets.structure.action; 2 3 import java.net.URLDecoder ; 4 import java.util.ArrayList ; 5 import java.util.Enumeration ; 6 import java.util.Iterator ; 7 import java.util.List ; 8 import javax.portlet.ActionRequest; 9 import javax.portlet.ActionResponse; 10 import javax.portlet.PortletConfig; 11 import org.apache.commons.beanutils.BeanUtils; 12 import org.apache.lucene.search.FieldCache; 13 import org.apache.struts.action.ActionForm; 14 import org.apache.struts.action.ActionMapping; 15 16 import com.dotmarketing.cache.FieldsCache; 17 import com.dotmarketing.cache.StructureCache; 18 import com.dotmarketing.db.DotHibernate; 19 import com.dotmarketing.portal.struts.DotPortletAction; 20 import com.dotmarketing.portlets.contentlet.factories.ContentletFactory; 21 import com.dotmarketing.portlets.structure.factories.FieldFactory; 22 import com.dotmarketing.portlets.structure.factories.StructureFactory; 23 import com.dotmarketing.portlets.structure.model.Field; 24 import com.dotmarketing.portlets.structure.model.Structure; 25 import com.dotmarketing.portlets.structure.struts.FieldForm; 26 import com.dotmarketing.util.Logger; 27 import com.dotmarketing.util.UtilMethods; 28 import com.dotmarketing.util.Validator; 29 import com.dotmarketing.util.WebKeys; 30 import com.liferay.portal.util.Constants; 31 import com.liferay.util.servlet.SessionMessages; 32 33 public class EditFieldAction extends DotPortletAction { 34 35 public void processAction( 36 ActionMapping mapping, ActionForm form, PortletConfig config, 37 ActionRequest req, ActionResponse res) 38 throws Exception { 39 40 String cmd = req.getParameter(Constants.CMD); 41 String referer = req.getParameter("referer"); 42 43 if ((referer!=null) && (referer.length()!=0)) { 44 referer = URLDecoder.decode(referer,"UTF-8"); 45 } 46 47 if ((cmd == null) || !cmd.equals("reorder")) { 49 _retrieveField(form,req,res); 50 } 51 DotHibernate.startTransaction(); 52 53 56 if ((cmd != null) && cmd.equals(Constants.ADD)) { 57 try 58 { 59 Logger.debug(this, "Calling Add/Edit Method"); 60 if (Validator.validate(req, form, mapping)) { 61 if (_saveField(form,req,res)) { 62 _sendToReferral(req,res,referer); 63 return; 64 } 65 } 66 } 67 catch (Exception ae) 68 { 69 _handleException(ae, req); 70 return; 71 } 72 73 } 74 79 else if ((cmd != null) && cmd.equals(Constants.DELETE)) 80 { 81 try 82 { 83 Logger.debug(this, "Calling Delete Method"); 84 _deleteField(form,req,res); 85 } 86 catch (Exception ae) 87 { 88 _handleException(ae, req); 89 return; 90 } 91 _sendToReferral(req,res,referer); 92 } else if ((cmd != null) && cmd.equals("reorder")) 93 { 94 try 95 { 96 Logger.debug(this, "Calling reorder Method"); 97 _reorderFields(form,req,res); 98 } 99 catch (Exception ae) 100 { 101 _handleException(ae, req); 102 return; 103 } 104 _sendToReferral(req,res,referer); 105 } 106 DotHibernate.commitTransaction(); 107 _loadForm(form,req,res); 108 setForward(req, "portlet.ext.structure.edit_field"); 109 } 110 111 private void _retrieveField(ActionForm form,ActionRequest req, ActionResponse res) 112 { 113 Field field = new Field(); 114 String inodeString = req.getParameter("inode"); 115 if(UtilMethods.isSet(inodeString)) 116 { 117 long inode = Long.parseLong(inodeString); 118 if (inode != 0) 119 { 120 field = FieldFactory.getFieldByInode(inode); 121 } 122 else 123 { 124 long structureInode = Long.parseLong(req.getParameter("structureInode")); 125 field.setStructureInode(structureInode); 126 } 127 } 128 else 129 { 130 long structureInode = Long.parseLong(req.getParameter("structureInode")); 131 field.setStructureInode(structureInode); 132 } 133 134 req.setAttribute(WebKeys.Field.FIELD,field); 135 } 136 137 private boolean _saveField(ActionForm form,ActionRequest req, ActionResponse res) 138 { 139 try 140 { 141 FieldForm fieldForm = (FieldForm) form; 142 Field field = (Field) req.getAttribute(WebKeys.Field.FIELD); 143 Structure structure = StructureFactory.getStructureByInode(field.getStructureInode()); 144 BeanUtils.copyProperties(field,fieldForm); 145 String dataType = fieldForm.getDataType(); 147 148 String prevDataType = (field.getFieldContentlet()!=null) ? field.getFieldContentlet().replaceAll("[0-9]*","") : ""; 149 150 if (!UtilMethods.isSet(fieldForm.getDataType())) { 151 field.setFieldContentlet(""); 153 } 154 else if (!prevDataType.equals(fieldForm.getDataType())) { 155 List fields = FieldFactory.getFieldsByContentletField(dataType,field.getInode(),field.getStructureInode()); 157 if (fields.size()>0) { 158 159 if (fields.size()<25) { 161 162 int lastDataTypeIdx = 0; 163 for (int i=1;i<=25;i++) { 164 boolean found = false; 165 Iterator fieldsIter = fields.iterator(); 166 while (fieldsIter.hasNext() && !found) { 167 Field nextField = (Field) fieldsIter.next(); 168 try { 169 lastDataTypeIdx =Integer.parseInt(nextField.getFieldContentlet().replace(dataType,"")); 170 if (i == lastDataTypeIdx) { 171 found = true; 173 } 174 } 175 catch (NumberFormatException e){ 176 177 } 178 } 179 if (!found) { 180 lastDataTypeIdx = i; 181 break; 182 } 183 } 184 field.setFieldContentlet(dataType + lastDataTypeIdx); 187 } 188 else { 189 String message = "message.structure.nodatatype"; 191 SessionMessages.add(req, "message",message); 192 return false; 193 } 194 } 195 else { 196 field.setFieldContentlet(dataType + "1"); 198 } 199 } 200 FieldFactory.saveField(field); 202 203 204 FieldsCache.removeFields(structure); 205 StructureCache.removeStructure(structure); 206 207 ContentletFactory.reIndexAllContentletsByStructure(structure); 209 210 String message = "message.structure.savefield"; 211 SessionMessages.add(req, "message",message); 212 return true; 213 } 214 catch(Exception ex) 215 { 216 Logger.debug(EditFieldAction.class,ex.toString()); 217 } 218 return false; 219 } 220 221 private void _loadForm(ActionForm form,ActionRequest req, ActionResponse res) 222 { 223 try 224 { 225 FieldForm fieldForm = (FieldForm) form; 226 Field field = (Field) req.getAttribute(WebKeys.Field.FIELD); 227 228 229 long structureInode = field.getStructureInode(); 230 structureInode = (structureInode != 0 ? structureInode : Long.parseLong(req.getParameter("structureInode"))); 231 232 field.setStructureInode(structureInode); 233 BeanUtils.copyProperties(fieldForm,field); 234 235 List <String > values = new ArrayList <String >(); 236 List <String > names = new ArrayList <String >(); 237 fieldForm.setDataType(field.getFieldContentlet().replaceAll("[0-9]*","")); 238 fieldForm.setFreeContentletFieldsValue(values); 239 fieldForm.setFreeContentletFieldsName(names); 240 } 241 catch(Exception ex) 242 { 243 Logger.debug(EditFieldAction.class,ex.toString()); 244 } 245 } 246 247 private void _deleteField(ActionForm form,ActionRequest req, ActionResponse res) 248 { 249 Field field = (Field) req.getAttribute(WebKeys.Field.FIELD); 250 Structure structure = StructureFactory.getStructureByInode(field.getStructureInode()); 251 ContentletFactory.cleanContentletsField(structure,field); 253 FieldFactory.deleteField(field); 254 FieldsCache.removeFields(structure); 255 StructureCache.removeStructure(structure); 256 ContentletFactory.reIndexAllContentletsByStructure(structure); 258 259 String message = "message.structure.deletefield"; 260 SessionMessages.add(req, "message",message); 261 262 } 263 264 private void _reorderFields(ActionForm form,ActionRequest req, ActionResponse res) 265 { 266 try 267 { 268 Enumeration enumeration = req.getParameterNames(); 269 while(enumeration.hasMoreElements()) 270 { 271 String parameterName = (String ) enumeration.nextElement(); 272 if (parameterName.indexOf("order_") != -1) 273 { 274 String parameterValue = req.getParameter(parameterName); 275 String fieldInode = parameterName.substring(parameterName.indexOf("_") + 1); 276 Field field = FieldFactory.getFieldByInode(Long.parseLong(fieldInode)); 277 field.setSortOrder(Integer.parseInt(parameterValue)); 278 FieldFactory.saveField(field); 279 280 } 281 } 282 String message = "message.structure.reorderfield"; 283 SessionMessages.add(req, "message",message); 284 } 285 catch(Exception ex) 286 { 287 Logger.error(EditFieldAction.class,ex.toString()); 288 } 289 } 290 291 } 292 | Popular Tags |