| 1 package com.dotmarketing.portlets.structure.action; 2 3 import java.util.HashMap ; 4 import java.util.List ; 5 import java.util.Map ; 6 7 import javax.portlet.ActionRequest; 8 import javax.portlet.ActionResponse; 9 import javax.portlet.PortletConfig; 10 import javax.portlet.WindowState; 11 12 import org.apache.commons.beanutils.BeanUtils; 13 import org.apache.struts.action.ActionForm; 14 import org.apache.struts.action.ActionMapping; 15 16 import com.dotmarketing.beans.Tree; 17 import com.dotmarketing.db.DotConnect; 18 import com.dotmarketing.db.DotHibernate; 19 import com.dotmarketing.factories.TreeFactory; 20 import com.dotmarketing.portal.struts.DotPortletAction; 21 import com.dotmarketing.portlets.structure.factories.RelationshipFactory; 22 import com.dotmarketing.portlets.structure.factories.StructureFactory; 23 import com.dotmarketing.portlets.structure.model.Relationship; 24 import com.dotmarketing.portlets.structure.struts.RelationshipForm; 25 import com.dotmarketing.util.Logger; 26 import com.dotmarketing.util.PortletURLUtil; 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 EditRelationshipAction 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 if (!UtilMethods.isSet(referer)) { 43 Map <String , String []> params = new HashMap <String , String []> (); 44 params.put("struts_action", new String [] {"/ext/structure/view_relationships"}); 45 referer = PortletURLUtil.getActionURL(req, WindowState.MAXIMIZED.toString(), params); 46 } 47 48 _retrieveRelationship(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 (_saveRelationship(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 78 else if ((cmd != null) && cmd.equals(Constants.DELETE)) 79 { 80 try 81 { 82 Logger.debug(this, "Calling Delete Method"); 83 _deleteRelationship(form,req,res); 84 } 85 catch (Exception ae) 86 { 87 _handleException(ae, req); 88 return; 89 } 90 if (UtilMethods.isSet(referer)) 91 _sendToReferral(req,res,referer); 92 else 93 setForward(req, "portlet.ext.structure.view_relationships"); 94 return; 95 } 96 DotHibernate.commitTransaction(); 97 98 _loadForm(form, req, res); 100 setForward(req, "portlet.ext.structure.edit_relationship"); 101 } 102 103 private void _retrieveRelationship(ActionForm form,ActionRequest req, ActionResponse res) 104 { 105 Relationship relationship = new Relationship(); 106 String inodeString = req.getParameter("inode"); 107 if(UtilMethods.isSet(inodeString)) 108 { 109 relationship = RelationshipFactory.getRelationshipByInode(inodeString); 110 } 111 else 112 { 113 relationship = new Relationship (); 114 } 115 116 req.setAttribute(WebKeys.Relationship.RELATIONSHIP_EDIT,relationship); 117 } 118 119 private void _loadForm(ActionForm form,ActionRequest req, ActionResponse res) 120 { 121 try 122 { 123 String cmd = req.getParameter(Constants.CMD); 124 if ((cmd == null) || !cmd.equals(Constants.ADD)) { 125 RelationshipForm relationshipForm = (RelationshipForm) form; 126 Relationship relationship = (Relationship) req.getAttribute(WebKeys.Relationship.RELATIONSHIP_EDIT); 127 128 BeanUtils.copyProperties(relationshipForm, relationship); 130 } 131 132 List structures = StructureFactory.getStructures(); 133 req.setAttribute(WebKeys.Relationship.STRUCTURES_LIST, structures); 134 } 135 catch(Exception ex) 136 { 137 Logger.error(EditRelationshipAction.class,ex.toString(), ex); 138 } 139 } 140 141 private boolean _saveRelationship(ActionForm form,ActionRequest req, ActionResponse res) 142 { 143 try 144 { 145 RelationshipForm relationshipForm = (RelationshipForm) form; 146 Relationship relationship = (Relationship) req.getAttribute(WebKeys.Relationship.RELATIONSHIP_EDIT); 147 148 String relationshipTypeValue = relationshipForm.getParentRelationName().replaceAll("\\s", "_").replaceAll("[^a-zA-Z0-9\\_]", "") + 149 "-" + relationshipForm.getChildRelationName().replaceAll("\\s", "_").replaceAll("[^a-zA-Z0-9\\_]", ""); 150 151 String lastRelationshipTypeValue = relationship.getRelationTypeValue(); 152 153 if (relationship.getInode() > 0 && !relationshipTypeValue.equals(lastRelationshipTypeValue)) { 155 DotConnect dc = new DotConnect (); 156 dc.setSQL("update tree set relation_type = '" + relationshipTypeValue + 157 "' where relation_type = '" + lastRelationshipTypeValue + "'"); 158 dc.getResult(); 159 } 160 161 BeanUtils.copyProperties(relationship,relationshipForm); 163 164 if (!relationshipTypeValue.equals(relationship.getRelationTypeValue())) { 165 Relationship oRel = RelationshipFactory.getRelationshipByRelationTypeValue(relationshipTypeValue); 166 if (oRel.getInode() > 0 && oRel.getInode() != relationship.getInode()) { 167 String message = "error.relationship.same.relation.exist"; 168 SessionMessages.add(req, "message",message); 169 return false; 170 } 171 172 List <Tree> treesToUpdate = TreeFactory.getTreesByRelationType(relationshipForm.getRelationTypeValue()); 173 for (Tree theTree : treesToUpdate) { 174 theTree.setRelationType(relationshipTypeValue); 175 } 176 relationship.setRelationTypeValue(relationshipTypeValue); 177 } 178 179 RelationshipFactory.saveRelationship(relationship); 181 182 String message = "message.relationship.saved"; 183 SessionMessages.add(req, "message",message); 184 return true; 185 } 186 catch(Exception ex) 187 { 188 Logger.debug(EditRelationshipAction.class,ex.toString()); 189 } 190 return false; 191 } 192 193 private void _deleteRelationship(ActionForm form,ActionRequest req, ActionResponse res) 194 { 195 Relationship relationship = (Relationship) req.getAttribute(WebKeys.Relationship.RELATIONSHIP_EDIT); 196 197 TreeFactory.deleteTreesByRelationType(relationship.getRelationTypeValue()); 198 199 RelationshipFactory.deleteRelationship(relationship); 200 201 String message = "message.relationship.deleted"; 202 SessionMessages.add(req, "message",message); 203 } 204 205 } 206 | Popular Tags |