001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Admin/Sources/es/udc/mypersonalizer/admin/http/controller/actions/propertyeditor/AddPropertyValueAction.java,v 1.1.1.1 2004/03/25 12:08:38 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:38 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.admin.http.controller.actions.propertyeditor;
042:
043: import javax.servlet.http.HttpServletRequest;
044: import javax.servlet.http.HttpServletResponse;
045:
046: import org.apache.struts.action.ActionForm;
047: import org.apache.struts.action.ActionMapping;
048: import org.apache.struts.action.ActionForward;
049:
050: import es.udc.mypersonalizer.kernel.model.properties.Property;
051: import es.udc.mypersonalizer.kernel.model.properties.CompoundProperty;
052: import es.udc.mypersonalizer.kernel.model.properties.PropertyStructure;
053:
054: import es.udc.mypersonalizer.admin.http.controller.actions.propertyeditor.interfaces.PropertyEditorConfigurationRegistry;
055: import es.udc.mypersonalizer.admin.http.controller.actions.propertyeditor.interfaces.PropertyAccessStrategy;
056: import es.udc.mypersonalizer.admin.http.view.actionforms.propertyeditor.AddPropertySimpleValueForm;
057: import es.udc.mypersonalizer.admin.http.controller.actions.propertyeditor.util.PropertyEditorHelper;
058: import es.udc.mypersonalizer.admin.http.controller.actions.util.ControllerHelper;
059:
060: /**
061: * This action is processed when trying to add a value to a multi-valued
062: * property. It retrieves its parameters from {@link AddPropertySimpleValueForm},
063: * then, if the property is simple this action forwards to
064: * <code>AddPropertySimpleValue</code> to let the user give and add a new
065: * value to the property, else it creates and adds a new empty
066: * <code>PropertyStructure</code> value to the property and
067: * redirects to the <code>EditPropertyValue</code> action to let the user
068: * edit the new added value.
069: *
070: * @author Abel Iago Toral Quiroga
071: * @since 1.0
072: */
073: public class AddPropertyValueAction extends PropertyEditorAction {
074:
075: protected ActionForward doExecuteWork(ActionMapping mapping,
076: ActionForm form, HttpServletRequest request,
077: HttpServletResponse response) throws Exception {
078:
079: /* Get parameters */
080: AddPropertySimpleValueForm frm = (AddPropertySimpleValueForm) form;
081: String peConfigurationIdentifier = frm.getPeConfId();
082: String serviceIdentifier = frm.getServId();
083: String propertyIdentifier = frm.getPropId();
084: String propertyStructureName = frm.getPropertyStructureName();
085: String propertySimpleName = frm.getPropertySimpleName();
086:
087: /* Get property access strategy */
088: PropertyAccessStrategy propertyAccessStrategy = PropertyEditorConfigurationRegistry
089: .getConfiguration(peConfigurationIdentifier)
090: .getPropertyAccessStrategy();
091:
092: /* Get the root property that is being edited */
093: Property rootProperty = propertyAccessStrategy.findProperty(
094: request, propertyIdentifier);
095: String rootPropertyName = rootProperty.getSimpleName();
096:
097: /* Find the property to update in the root property */
098: Property currentProperty = PropertyEditorHelper
099: .findProperty(rootProperty, propertyStructureName,
100: propertySimpleName);
101:
102: /* Do work */
103: ActionForward forward = null;
104: if (!(currentProperty instanceof CompoundProperty)) {
105:
106: frm.setIsBoolean(PropertyEditorHelper.isBoolean(
107: serviceIdentifier, propertyStructureName,
108: propertySimpleName));
109: forward = mapping.findForward("AddPropertySimpleValueJSP");
110:
111: } else {
112: /* Create and initialize a PropertyStructure value for
113: this compound property */
114: String propertyAbsoluteName = ((propertyStructureName
115: .equals("")) ? "" : propertyStructureName + "."
116: + propertySimpleName);
117: PropertyStructure newPropertyStructure = ControllerHelper
118: .createEmptyPropertyStructureValue(
119: serviceIdentifier, propertyAbsoluteName);
120:
121: /* Add the new value (property-structure) */
122: Object[] oldValues = currentProperty.getValuesAsObject();
123: Object[] newValues = new PropertyStructure[oldValues.length + 1];
124: for (int i = 0; i < oldValues.length; i++) {
125: newValues[i] = oldValues[i];
126: }
127: int newValueIndex = newValues.length - 1;
128: newValues[newValueIndex] = newPropertyStructure;
129: currentProperty.setValuesAsObject(newValues);
130:
131: /* Update property (validation not needed) */
132: propertyAccessStrategy.updateProperty(request,
133: propertyIdentifier, rootProperty);
134:
135: /* Let the user edit the new value */
136: forward = getEditForward(mapping,
137: peConfigurationIdentifier, serviceIdentifier,
138: propertyIdentifier, propertyStructureName,
139: propertySimpleName, newValueIndex);
140: }
141:
142: /* Do forward */
143: return forward;
144: }
145:
146: /**
147: * Gets an <code>ActionForward</code> object to the
148: * <code>EditPropertyValue</code> action with parameters attached to
149: * the url path.
150: * @param mapping the <code>ActionMapping</code> for this action.
151: * @param peConfigurationIdentifier the property editor configuration
152: * identifier parameter for the action.
153: * @param serviceIdentifier the service identifier parameter for the
154: * action.
155: * @param propertyIdentifier the propertyIdentifier parameter for the
156: * action
157: * @param propertyStructureName the propertyStructureName parameter for
158: * the action
159: * @param propertySimpleName the propertySimpleName parameter for the
160: * action
161: * @param index the index parameter for the action
162: */
163: private ActionForward getEditForward(ActionMapping mapping,
164: String peConfigurationIdentifier, String serviceIdentifier,
165: String propertyIdentifier, String propertyStructureName,
166: String propertySimpleName, int index) {
167:
168: /* Get forward url path */
169: ActionForward forward = mapping
170: .findForward("EditPropertyValue");
171: String urlPath = forward.getPath();
172:
173: /* Add parameters */
174: urlPath += "?peConfId=" + peConfigurationIdentifier;
175: urlPath += "&servId=" + serviceIdentifier;
176: urlPath += "&propId=" + propertyIdentifier;
177: urlPath += "&propertyStructureName=" + propertyStructureName;
178: urlPath += "&propertySimpleName=" + propertySimpleName;
179: urlPath += "&index=" + index;
180:
181: /* Update and return forward */
182: ActionForward forwardWithParameters = new ActionForward(
183: urlPath, forward.getRedirect());
184: return forwardWithParameters;
185: }
186: }
|