001: package org.gridsphere.portlets.core.rss.setup;
002:
003: import org.gridsphere.services.core.setup.modules.impl.BasePortletsSetupModule;
004: import org.gridsphere.services.core.setup.modules.impl.descriptor.PortletsSetupModuleDefinition;
005: import org.gridsphere.services.core.setup.modules.impl.descriptor.PortletsSetupModuleStateDescriptor;
006: import org.gridsphere.portletcontainer.impl.descriptor.PortletDefinition;
007: import org.gridsphere.portletcontainer.impl.descriptor.Preference;
008: import org.gridsphere.portletcontainer.impl.descriptor.Value;
009: import org.gridsphere.portlet.impl.SportletProperties;
010:
011: import javax.servlet.http.HttpServletRequest;
012: import java.util.Set;
013: import java.util.HashSet;
014: import java.util.Enumeration;
015:
016: /**
017: * @author <a href="mailto:docentt@man.poznan.pl">Tomasz Kuczynski</a>, PSNC
018: * @version $Id$
019: */
020: public class RSSPortletSetupModule extends BasePortletsSetupModule {
021: public RSSPortletSetupModule(PortletsSetupModuleDefinition moduleDef) {
022: super (moduleDef);
023: }
024:
025: public void fillPreInitStateDescriptor(
026: PortletsSetupModuleStateDescriptor portletsSetupModuleStateDescriptor,
027: PortletDefinition portletDefinition)
028: throws IllegalArgumentException {
029: //Fill PortletsSetupModuleStateDescriptor with values (use default values for title, description, jsp - check portletssetupmodules.xml for details)
030: //PortletDefinition represents deployment descriptor of the portlet (bound with portlet-name portlet.xml <-> portletssetupmodules.xml)
031: Set set = new HashSet();
032: Preference[] preference = portletDefinition
033: .getPortletPreferences().getPreference();
034: for (int i = 0; i < preference.length; i++) {
035: Preference preference1 = preference[i];
036: if (preference1.getName().getContent().equals("feedurl")) {
037: Value[] value = preference1.getValue();
038: for (int j = 0; j < value.length; j++) {
039: Value value1 = value[j];
040: set.add(value1.getContent());
041: }
042: }
043: }
044: portletsSetupModuleStateDescriptor.setAttribute("preferences",
045: set);
046: }
047:
048: public void invokePreInit(HttpServletRequest request,
049: PortletDefinition portletDefinition)
050: throws IllegalArgumentException {
051: //Any change to PortletDefinition object is applies before portlet initialization process so you can update here f.e. init-parameters, preferences a.s.o.
052: String setupOperation = getOperation(request);
053: if (setupOperation.equals("add")) {
054: //Add feed operation
055: String newFeed = request.getParameter("newFeed");
056: if (null != newFeed && !"".equals(newFeed)) {
057: newFeed = newFeed.trim();
058: Value[] values = portletDefinition
059: .getPortletPreferences().getPreference(0)
060: .getValue();
061: for (int i = 0; i < values.length; i++) {
062: Value value = values[i];
063: if (value.getContent().trim().equals(newFeed))
064: throw new IllegalArgumentException(
065: "alreadyOnListError"); //throw IllegalArgumentException with error key (check portletssetupmodules.xml for details)
066: }
067: Value[] newValues = new Value[values.length + 1];
068: for (int i = 0; i < values.length; i++) {
069: Value value1 = values[i];
070: newValues[i] = value1;
071: }
072: Value newFeedValue = new Value();
073: newFeedValue.setContent(newFeed);
074: newValues[values.length] = newFeedValue;
075: portletDefinition.getPortletPreferences()
076: .getPreference(0).setValue(newValues);
077: } else
078: throw new IllegalArgumentException("emptyValueError"); //throw IllegalArgumentException with error key (check portletssetupmodules.xml for details)
079: } else if (setupOperation.equals("remove")) {
080: //Remove feed operation
081: Enumeration parameterNames = request.getParameterNames();
082: Value[] values = portletDefinition.getPortletPreferences()
083: .getPreference(0).getValue();
084: Set feedsToRemove = new HashSet();
085: while (parameterNames.hasMoreElements()) {
086: String paramName = (String) parameterNames
087: .nextElement();
088: if (paramName.startsWith("feed_")) {
089: String feedName = paramName.substring("feed_"
090: .length());
091: feedsToRemove.add(feedName);
092: }
093: }
094: if (feedsToRemove.isEmpty())
095: throw new IllegalArgumentException(
096: "checkAtLeastOneError"); //throw IllegalArgumentException with error key (check portletssetupmodules.xml for details)
097: Value[] newValues = new Value[values.length
098: - feedsToRemove.size()];
099: for (int i = 0, j = 0; i < values.length; i++) {
100: Value value1 = values[i];
101: if (!feedsToRemove.contains(value1.getContent())) {
102: newValues[j] = value1;
103: ++j;
104: }
105: }
106: portletDefinition.getPortletPreferences().getPreference(0)
107: .setValue(newValues);
108: } else {
109: //non operation - mark module as processed
110: setPreInitPhaseProcessed(true);
111: }
112: }
113:
114: private String getOperation(HttpServletRequest request) {
115: Enumeration parameterNames = request.getParameterNames();
116: while (parameterNames.hasMoreElements()) {
117: String parameterName = (String) parameterNames
118: .nextElement();
119: if (parameterName.startsWith("operation="))
120: return parameterName.substring("operation=".length())
121: .toLowerCase();
122: }
123: return "";
124: }
125: }
|