001: package org.sakaiproject.site.tool.helper.order.rsf;
002:
003: import java.util.ArrayList;
004: import java.util.Iterator;
005: import java.util.List;
006: import java.util.Map;
007:
008: import org.sakaiproject.site.api.SitePage;
009: import org.sakaiproject.site.api.ToolConfiguration;
010: import org.sakaiproject.site.tool.helper.order.impl.SitePageEditHandler;
011: import org.sakaiproject.tool.api.SessionManager;
012: import org.sakaiproject.tool.api.Tool;
013:
014: import uk.ac.cam.caret.sakai.rsf.producers.FrameAdjustingProducer;
015: import uk.ac.cam.caret.sakai.rsf.util.SakaiURLUtil;
016: import uk.org.ponder.messageutil.MessageLocator;
017: import uk.org.ponder.rsf.components.UIBranchContainer;
018: import uk.org.ponder.rsf.components.UICommand;
019: import uk.org.ponder.rsf.components.UIContainer;
020: import uk.org.ponder.rsf.components.UIForm;
021: import uk.org.ponder.rsf.components.UIInput;
022: import uk.org.ponder.rsf.components.UIInternalLink;
023: import uk.org.ponder.rsf.components.UIOutput;
024: import uk.org.ponder.rsf.components.decorators.DecoratorList;
025: import uk.org.ponder.rsf.components.decorators.UILabelTargetDecorator;
026: import uk.org.ponder.rsf.components.decorators.UITooltipDecorator;
027: import uk.org.ponder.rsf.flow.jsfnav.DynamicNavigationCaseReporter;
028: import uk.org.ponder.rsf.flow.jsfnav.NavigationCase;
029: import uk.org.ponder.rsf.view.ComponentChecker;
030: import uk.org.ponder.rsf.view.DefaultView;
031: import uk.org.ponder.rsf.view.ViewComponentProducer;
032: import uk.org.ponder.rsf.viewstate.RawViewParameters;
033: import uk.org.ponder.rsf.viewstate.ViewParameters;
034:
035: /**
036: *
037: * @author Joshua Ryan joshua.ryan@asu.edu
038: *
039: */
040: public class PageListProducer implements ViewComponentProducer,
041: DynamicNavigationCaseReporter, DefaultView {
042:
043: public static final String VIEW_ID = "PageList";
044: public Map sitePages;
045: public SitePageEditHandler handler;
046: public MessageLocator messageLocator;
047: public SessionManager sessionManager;
048: public FrameAdjustingProducer frameAdjustingProducer;
049:
050: public String getViewID() {
051: return VIEW_ID;
052: }
053:
054: public void fillComponents(UIContainer tofill,
055: ViewParameters viewparams, ComponentChecker checker) {
056:
057: if (handler.update) {
058:
059: UIBranchContainer content = UIBranchContainer.make(tofill,
060: "content:");
061:
062: UIOutput.make(content, "message", messageLocator
063: .getMessage("welcome"));
064: UIOutput.make(content, "list-label", messageLocator
065: .getMessage("curr_pages"));
066:
067: UIForm pageForm = UIForm.make(content, "pages-form");
068: String state = "";
069:
070: sitePages = handler.getPages();
071:
072: for (Iterator it = sitePages.keySet().iterator(); it
073: .hasNext();) {
074: Object key = it.next();
075: SitePage page = (SitePage) sitePages.get(key);
076: UIBranchContainer pagerow = UIBranchContainer.make(
077: pageForm, "page-row:", page.getId());
078:
079: pagerow.decorators = new DecoratorList(
080: new UITooltipDecorator(messageLocator
081: .getMessage("page_click_n_drag")));
082:
083: UIOutput.make(pagerow, "page-name", page.getTitle());
084: UIInput name = UIInput.make(pagerow, "page-name-input",
085: "#{SitePageEditHandler.nil}", page.getTitle());
086: UIOutput nameLabel = UIOutput.make(pagerow,
087: "page-name-label", messageLocator
088: .getMessage("title"));
089:
090: nameLabel.decorators = new DecoratorList(
091: new UILabelTargetDecorator(name));
092:
093: PageEditViewParameters param = new PageEditViewParameters();
094:
095: param.pageId = page.getId();
096:
097: param.viewID = PageEditProducer.VIEW_ID;
098: UIInternalLink.make(pagerow, "edit-link", param).decorators = new DecoratorList(
099: new UITooltipDecorator(messageLocator
100: .getMessage("page_edit")));
101:
102: if (page.getTools().size() == 1) {
103: ToolConfiguration tool = (ToolConfiguration) page
104: .getTools().get(0);
105:
106: //if the page only has one tool and it's not site info or required we allow the user to delete it here
107: //TODO: can we get the fact that site info called us
108: if (!handler.isRequired(tool.getToolId())
109: && !"sakai.sitesetup".equals(tool
110: .getToolId())
111: && !"sakai.siteinfo".equals(tool
112: .getToolId())) {
113:
114: param.viewID = PageDelProducer.VIEW_ID;
115: UIInternalLink.make(pagerow, "del-link", param).decorators = new DecoratorList(
116: new UITooltipDecorator(messageLocator
117: .getMessage("page_remove")));
118: }
119:
120: //allow special configuration for the iframe tool. This needs to be generalized
121: //for all tools that want special configuration and/or allow multiple instances
122: //per site
123: if ("sakai.iframe".equals(tool.getToolId())) {
124:
125: UIInput config = UIInput.make(pagerow,
126: "page-config-input",
127: "#{SitePageEditHandler.nil}", tool
128: .getPlacementConfig()
129: .getProperty("source"));
130:
131: UIOutput configLabel = UIOutput.make(pagerow,
132: "page-config-label", messageLocator
133: .getMessage("url"));
134: configLabel.decorators = new DecoratorList(
135: new UILabelTargetDecorator(config));
136: }
137: }
138:
139: if (handler.allowsHide(page)) {
140: param.viewID = PageEditProducer.VIEW_ID;
141: if (handler.isVisible(page)) {
142: param.visible = "false";
143: UIInternalLink
144: .make(pagerow, "hide-link", param).decorators = new DecoratorList(
145: new UITooltipDecorator(messageLocator
146: .getMessage("page_hide")));
147: param.visible = "true";
148: UIInternalLink.make(pagerow, "show-link-off",
149: param).decorators = new DecoratorList(
150: new UITooltipDecorator(messageLocator
151: .getMessage("page_show")));
152: } else {
153: param.visible = "true";
154: UIInternalLink
155: .make(pagerow, "show-link", param).decorators = new DecoratorList(
156: new UITooltipDecorator(messageLocator
157: .getMessage("page_show")));
158:
159: param.visible = "false";
160: UIInternalLink.make(pagerow, "hide-link-off",
161: param).decorators = new DecoratorList(
162: new UITooltipDecorator(messageLocator
163: .getMessage("page_hide")));
164: }
165: }
166:
167: state += page.getId() + " ";
168: }
169:
170: PageAddViewParameters addParam = new PageAddViewParameters();
171: addParam.mode = "list";
172: addParam.viewID = PageAddProducer.VIEW_ID;
173: UIInternalLink.make(content, "add-link", addParam).decorators = new DecoratorList(
174: new UITooltipDecorator(messageLocator
175: .getMessage("page_show_add")));
176:
177: UIOutput.make(content, "add-page", messageLocator
178: .getMessage("show_add"));
179:
180: UIOutput.make(pageForm, "del-message", messageLocator
181: .getMessage("del_message"));
182: UIOutput.make(pageForm, "exit-message", messageLocator
183: .getMessage("exit_message"));
184: UIOutput.make(pageForm, "reset-message", messageLocator
185: .getMessage("confirm_reset_message"));
186:
187: UIInput.make(pageForm, "state-init",
188: "#{SitePageEditHandler.state}", state);
189: UICommand.make(pageForm, "save",
190: "#{SitePageEditHandler.savePages}").decorators = new DecoratorList(
191: new UITooltipDecorator(messageLocator
192: .getMessage("save_message")));
193:
194: UICommand.make(pageForm, "revert",
195: "#{SitePageEditHandler.cancel}").decorators = new DecoratorList(
196: new UITooltipDecorator(messageLocator
197: .getMessage("cancel_message")));
198:
199: if (handler.isSiteOrdered()) {
200: UICommand.make(pageForm, "reset",
201: "#{SitePageEditHandler.reset}").decorators = new DecoratorList(
202: new UITooltipDecorator(messageLocator
203: .getMessage("reset_message")));
204: }
205:
206: frameAdjustingProducer.fillComponents(tofill, "resize",
207: "resetFrame");
208:
209: } else {
210: //error messages
211: UIBranchContainer error = UIBranchContainer.make(tofill,
212: "error:");
213: UIOutput.make(error, "message", messageLocator
214: .getMessage("access_error"));
215: }
216: }
217:
218: public List reportNavigationCases() {
219: Tool tool = handler.getCurrentTool();
220: List togo = new ArrayList();
221: togo.add(new NavigationCase("done", new RawViewParameters(
222: SakaiURLUtil.getHelperDoneURL(tool, sessionManager))));
223:
224: return togo;
225: }
226: }
|