001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Admin/Sources/es/udc/mypersonalizer/admin/http/controller/actions/util/ControllerHelper.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.util;
042:
043: import java.util.Map;
044: import java.util.HashMap;
045: import java.util.Iterator;
046:
047: import org.apache.struts.util.MessageResources;
048:
049: import es.udc.mypersonalizer.kernel.model.metainfo.MetaServiceRegistrySingleton;
050: import es.udc.mypersonalizer.kernel.model.metainfo.MetaProperty;
051: import es.udc.mypersonalizer.kernel.model.metainfo.MetaSimpleProperty;
052: import es.udc.mypersonalizer.kernel.model.metainfo.MetaCompoundProperty;
053: import es.udc.mypersonalizer.kernel.model.properties.Property;
054: import es.udc.mypersonalizer.kernel.model.properties.SimpleProperty;
055: import es.udc.mypersonalizer.kernel.model.properties.CompoundProperty;
056: import es.udc.mypersonalizer.kernel.model.properties.PropertyStructure;
057: import es.udc.mypersonalizer.kernel.model.properties.PropertyNaming;
058:
059: /**
060: * Utility class for variuous actions of the controller.
061: *
062: * @author Abel Iago Toral Quiroga
063: * @since 1.0
064: */
065: public class ControllerHelper {
066:
067: /**
068: * Gets a message and formats it with <code>errors.header</code> and
069: * <code>errors.footer</code> messages.
070: * @param resources the message resources object needed to access messages.
071: * @param key The message key to get and format.
072: */
073: public static String getFormattedErrorMessage(
074: MessageResources resources, String key) {
075: String formattedMessage = resources.getMessage("errors.header")
076: + resources.getMessage(key)
077: + resources.getMessage("errors.footer");
078: return formattedMessage;
079: }
080:
081: /**
082: * Creates a <code>Map</code> with pairs (paramterName, parameterValue)
083: * with parameters needed to create the 'previous page' link in a JSP page
084: * that displays lists using page-by-page iterator.
085: * @param startIndexParameterName the name of the parameter that will keep
086: * the value for the startIndex.
087: * @param countParameterName the name of the parameter that will keep
088: * the value for the count of elements.
089: * @param startIndex the index of the first element to show.
090: * @param count number of elements to show.
091: * @return a <code>Map</code> with the parameters needed.
092: */
093: public static Map getPreviousLinkParameters(
094: String startIndexParameterName, String countParameterName,
095: int startIndex, int count) {
096:
097: Map linkAttributes = null;
098: if (startIndex > 0) {
099: linkAttributes = new HashMap();
100: linkAttributes.put(countParameterName, new Integer(count));
101: int newStartIndex = (startIndex - count >= 0) ? (startIndex - count)
102: : 0;
103: linkAttributes.put(startIndexParameterName, new Integer(
104: newStartIndex));
105: }
106:
107: return linkAttributes;
108: }
109:
110: /**
111: * Creates a <code>Map</code> with pairs (paramterName, parameterValue)
112: * with parameters needed to create the 'next page' link in a JSP page
113: * that displays lists using page-by-page iterator..
114: * @param startIndexParameterName the name of the parameter that will keep
115: * the value for the startIndex.
116: * @param countParameterName the name of the parameter that will keep
117: * the value for the count of elements.
118: * @param startIndex the index of the first element to show.
119: * @param count number of elements to show.
120: * @param currentChunkSize the number of elements that will be displayed
121: * when rendering the JSP page.
122: * @return a <code>Map</code> with the parameters needed.
123: */
124: public static Map getNextLinkParameters(
125: String startIndexParameterName, String countParameterName,
126: int startIndex, int count, int currentChunkSize) {
127:
128: Map linkAttributes = null;
129: if (currentChunkSize >= count) {
130: linkAttributes = new HashMap();
131: linkAttributes.put(countParameterName, new Integer(count));
132: linkAttributes.put(startIndexParameterName, new Integer(
133: startIndex + count));
134: }
135:
136: return linkAttributes;
137: }
138:
139: /**
140: * Creates an empty initialized <code>PropertyStructure</code> for
141: * a concrete sub-property given its service identifier.
142: * @param serviceIdentifier the service identifier
143: * @param propertyAbsoluteName the property absolute name.
144: * @return an empty initialized <code>PropertyStructure</code> for
145: * the given property in the given service.
146: * @throws Exception if an error eccured
147: */
148: public static PropertyStructure createEmptyPropertyStructureValue(
149: String serviceIdentifier, String propertyAbsoluteName)
150: throws Exception {
151:
152: /* Get meta-info of the property */
153: String metaPropertyName = PropertyNaming
154: .toMetaPropertyName(propertyAbsoluteName);
155: MetaProperty metaProperty = MetaServiceRegistrySingleton
156: .getInstance().getMetaService(serviceIdentifier)
157: .getMetaRootProperty().findMetaProperty(
158: metaPropertyName);
159:
160: /* Get an iterator for the contained properties */
161: Iterator iterator = metaProperty.getMetaProperties();
162:
163: /* Initialize each contained property and create a property-structure */
164: PropertyStructure propertyStructure = new PropertyStructure();
165: while (iterator.hasNext()) {
166:
167: /* Get contained property meta-information*/
168: MetaProperty currentMetaProperty = (MetaProperty) iterator
169: .next();
170: String currentPropertySimpleName = currentMetaProperty
171: .getSimpleName();
172: boolean isMultiValued = currentMetaProperty.isMultiValued();
173: boolean isCompound = (currentMetaProperty instanceof MetaCompoundProperty);
174:
175: Property property = null;
176: if (!isCompound) { // create an empty SimpleProperty
177: property = new SimpleProperty(
178: currentPropertySimpleName, new String[0],
179: ((MetaSimpleProperty) currentMetaProperty)
180: .getJavaType());
181: } else { // create an empty CompoundProperty
182: property = new CompoundProperty(
183: currentPropertySimpleName,
184: new PropertyStructure[0]);
185: }
186:
187: /* Add property to the property-structure */
188: propertyStructure.put(property);
189: }
190:
191: return propertyStructure;
192: }
193: }
|