001: /*
002: * Copyright 2005 Sun Microsystems, Inc.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.apache.roller.ui.admin.struts.actions;
017:
018: import java.io.IOException;
019:
020: import javax.servlet.ServletException;
021: import javax.servlet.http.HttpServletRequest;
022: import javax.servlet.http.HttpServletResponse;
023:
024: import org.apache.commons.logging.Log;
025: import org.apache.commons.logging.LogFactory;
026: import org.apache.roller.planet.tasks.RefreshEntriesTask;
027: import org.apache.roller.planet.tasks.SyncWebsitesTask;
028: import org.apache.struts.action.ActionError;
029: import org.apache.struts.action.ActionErrors;
030: import org.apache.struts.action.ActionForm;
031: import org.apache.struts.action.ActionForward;
032: import org.apache.struts.action.ActionMapping;
033: import org.apache.struts.action.ActionMessage;
034: import org.apache.struts.action.ActionMessages;
035: import org.apache.struts.actions.DispatchAction;
036: import org.apache.roller.config.RollerRuntimeConfig;
037: import org.apache.roller.planet.business.PlanetManager;
038: import org.apache.roller.business.Roller;
039: import org.apache.roller.business.RollerFactory;
040: import org.apache.roller.planet.pojos.PlanetConfigData;
041: import org.apache.roller.planet.pojos.PlanetGroupData;
042: import org.apache.roller.planet.ui.authoring.struts.forms.PlanetConfigForm;
043: import org.apache.roller.ui.core.BasePageModel;
044: import org.apache.roller.ui.core.RollerRequest;
045: import org.apache.roller.ui.core.RollerSession;
046:
047: /////////////////////////////////////////////////////////////////////////////
048: /**
049: * Allows configuration of Planet Roller.
050: *
051: * @struts.action name="planetConfigForm" path="/roller-ui/admin/planetConfig"
052: * scope="request" parameter="method"
053: *
054: * @struts.action-forward name="planetConfig.page"
055: * path=".PlanetConfig"
056: */
057: public final class PlanetConfigAction extends DispatchAction {
058: private static Log logger = LogFactory.getFactory().getInstance(
059: PlanetConfigAction.class);
060:
061: /** Populate config form and forward to config page */
062: public ActionForward getConfig(ActionMapping mapping,
063: ActionForm actionForm, HttpServletRequest request,
064: HttpServletResponse response) throws IOException,
065: ServletException {
066: ActionForward forward = mapping
067: .findForward("planetConfig.page");
068: try {
069: RollerRequest rreq = RollerRequest
070: .getRollerRequest(request);
071: if (RollerSession.getRollerSession(request)
072: .isGlobalAdminUser()) {
073: BasePageModel pageModel = new BasePageModel(
074: "planetConfig.pageTitle", request, response,
075: mapping);
076: request.setAttribute("model", pageModel);
077: Roller roller = RollerFactory.getRoller();
078: PlanetManager planet = roller.getPlanetManager();
079: PlanetConfigData config = planet.getConfiguration();
080: PlanetConfigForm form = (PlanetConfigForm) actionForm;
081: if (config != null) {
082: form.copyFrom(config, request.getLocale());
083: } else {
084: form.setTitle("Planet Roller");
085: form.setAdminEmail(RollerRuntimeConfig
086: .getProperty("site.adminemail"));
087: form.setSiteURL(RollerRuntimeConfig
088: .getProperty("site.absoluteurl"));
089: form.setCacheDir("/tmp");
090: }
091: } else {
092: forward = mapping.findForward("access-denied");
093: }
094: } catch (Exception e) {
095: request.getSession().getServletContext().log("ERROR", e);
096: throw new ServletException(e);
097: }
098: return forward;
099: }
100:
101: /** Save posted config form data */
102: public ActionForward saveConfig(ActionMapping mapping,
103: ActionForm actionForm, HttpServletRequest request,
104: HttpServletResponse response) throws IOException,
105: ServletException {
106: ActionForward forward = mapping
107: .findForward("planetConfig.page");
108: try {
109: RollerRequest rreq = RollerRequest
110: .getRollerRequest(request);
111: if (RollerSession.getRollerSession(request)
112: .isGlobalAdminUser()) {
113: BasePageModel pageModel = new BasePageModel(
114: "planetConfig.pageTitle", request, response,
115: mapping);
116: request.setAttribute("model", pageModel);
117: Roller roller = RollerFactory.getRoller();
118: PlanetManager planet = roller.getPlanetManager();
119: PlanetConfigData config = planet.getConfiguration();
120: if (config == null) {
121: config = new PlanetConfigData();
122: }
123: PlanetConfigForm form = (PlanetConfigForm) actionForm;
124: ActionErrors errors = validate(form);
125: if (errors.isEmpty()) {
126: form.copyTo(config, request.getLocale());
127: planet.saveConfiguration(config);
128: if (planet.getGroup("external") == null) {
129: PlanetGroupData group = new PlanetGroupData();
130: group.setHandle("external");
131: group.setTitle("external");
132: planet.saveGroup(group);
133: }
134: roller.flush();
135: ActionMessages messages = new ActionMessages();
136: messages.add(null, new ActionMessage(
137: "planetConfig.success.saved"));
138: saveMessages(request, messages);
139: } else {
140: saveErrors(request, errors);
141: }
142: } else {
143: forward = mapping.findForward("access-denied");
144: }
145: } catch (Exception e) {
146: request.getSession().getServletContext().log("ERROR", e);
147: throw new ServletException(e);
148: }
149: return forward;
150: }
151:
152: /** Refresh entries in backgrounded thread (for testing) */
153: public ActionForward refreshEntries(ActionMapping mapping,
154: ActionForm actionForm, HttpServletRequest request,
155: HttpServletResponse response) throws IOException,
156: ServletException {
157: ActionForward forward = mapping
158: .findForward("planetConfig.page");
159: try {
160: RollerRequest rreq = RollerRequest
161: .getRollerRequest(request);
162: if (RollerSession.getRollerSession(request)
163: .isGlobalAdminUser()) {
164: BasePageModel pageModel = new BasePageModel(
165: "planetConfig.pageTitle", request, response,
166: mapping);
167: request.setAttribute("model", pageModel);
168: Roller roller = RollerFactory.getRoller();
169: RefreshEntriesTask task = new RefreshEntriesTask();
170: task.init();
171: roller.getThreadManager().executeInBackground(task);
172:
173: ActionMessages messages = new ActionMessages();
174: messages.add(null, new ActionMessage(
175: "planetConfig.success.refreshed"));
176: saveMessages(request, messages);
177: } else {
178: forward = mapping.findForward("access-denied");
179: }
180: } catch (Exception e) {
181: request.getSession().getServletContext().log("ERROR", e);
182: throw new ServletException(e);
183: }
184: return forward;
185: }
186:
187: /** Sync websites in backgrounded thread (for testing) */
188: public ActionForward syncWebsites(ActionMapping mapping,
189: ActionForm actionForm, HttpServletRequest request,
190: HttpServletResponse response) throws IOException,
191: ServletException {
192: ActionForward forward = mapping
193: .findForward("planetConfig.page");
194: try {
195: RollerRequest rreq = RollerRequest
196: .getRollerRequest(request);
197: if (RollerSession.getRollerSession(request)
198: .isGlobalAdminUser()) {
199: BasePageModel pageModel = new BasePageModel(
200: "planetConfig.pageTitle", request, response,
201: mapping);
202: request.setAttribute("model", pageModel);
203: Roller roller = (Roller) RollerFactory.getRoller();
204: SyncWebsitesTask task = new SyncWebsitesTask();
205: task.init();
206: roller.getThreadManager().executeInBackground(task);
207: ActionMessages messages = new ActionMessages();
208: messages.add(null, new ActionMessage(
209: "planetConfig.success.synced"));
210: saveMessages(request, messages);
211: } else {
212: forward = mapping.findForward("access-denied");
213: }
214: } catch (Exception e) {
215: request.getSession().getServletContext().log("ERROR", e);
216: throw new ServletException(e);
217: }
218: return forward;
219: }
220:
221: /** Validate config form, returns empty collection if all OK */
222: public ActionErrors validate(PlanetConfigForm form) {
223: ActionErrors errors = new ActionErrors();
224: if (form.getProxyHost() != null
225: && form.getProxyHost().trim().length() > 0) {
226: if (form.getProxyPort() < 1) {
227: errors.add(null, new ActionError(
228: "planetConfig.error.badProxyPort"));
229: }
230: }
231: return errors;
232: }
233: }
|