001: /******************************************************************************
002: * JBoss, a division of Red Hat *
003: * Copyright 2006, Red Hat Middleware, LLC, and individual *
004: * contributors as indicated by the @authors tag. See the *
005: * copyright.txt in the distribution for a full listing of *
006: * individual contributors. *
007: * *
008: * This is free software; you can redistribute it and/or modify it *
009: * under the terms of the GNU Lesser General Public License as *
010: * published by the Free Software Foundation; either version 2.1 of *
011: * the License, or (at your option) any later version. *
012: * *
013: * This software is distributed in the hope that it will be useful, *
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of *
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
016: * Lesser General Public License for more details. *
017: * *
018: * You should have received a copy of the GNU Lesser General Public *
019: * License along with this software; if not, write to the Free *
020: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
021: * 02110-1301 USA, or see the FSF site: http://www.fsf.org. *
022: ******************************************************************************/package org.jboss.portal.theme.page;
023:
024: import org.jboss.portal.Mode;
025: import org.jboss.portal.WindowState;
026: import org.jboss.portal.theme.ThemeTools;
027: import org.jboss.portal.theme.render.renderer.DecorationRendererContext;
028: import org.jboss.portal.theme.render.renderer.PortletRendererContext;
029: import org.jboss.portal.theme.render.renderer.WindowRendererContext;
030:
031: import java.io.Serializable;
032: import java.util.Map;
033:
034: /**
035: * A WindowContext represents a portlet window on a page in the scope of one request. <p>It allows the layout gy for
036: * instance, to change the position of the window on the page (region, order) without persising the change. The change
037: * will only be valid for the term of the current request.</p> <p>This context implements the <code>Comparable</code>
038: * interface to allow natural sorting of the windows in one region, based on their order.</p>
039: *
040: * @author <a href="mailto:mholzner@novell.com">Martin Holzner</a>
041: * @version $Revision: 8784 $
042: */
043: public final class WindowContext implements Comparable, Serializable,
044: WindowRendererContext {
045:
046: /** The serialVersionUID */
047: private static final long serialVersionUID = -225656969004976637L;
048:
049: /** . */
050: private final String id;
051:
052: /** . */
053: private final DecorationRendererContextImpl decoration = new DecorationRendererContextImpl(
054: this );
055:
056: /** . */
057: private final PortletRendererContextImpl portlet = new PortletRendererContextImpl(
058: this );
059:
060: // Mutable properties
061:
062: /** . */
063: private String regionName;
064:
065: /** . */
066: private String order;
067:
068: /** . */
069: final WindowResult result;
070:
071: public WindowContext(String id, String regionName, String order,
072: WindowResult result) {
073: this .id = id;
074: this .regionName = regionName;
075: this .order = order;
076: this .result = result;
077: }
078:
079: public String getId() {
080: return id;
081: }
082:
083: public String getOrder() {
084: return order;
085: }
086:
087: public String getRegionName() {
088: return regionName;
089: }
090:
091: public WindowState getWindowState() {
092: return result.getWindowState();
093: }
094:
095: public Mode getMode() {
096: return result.getMode();
097: }
098:
099: public DecorationRendererContext getDecoration() {
100: return decoration;
101: }
102:
103: public PortletRendererContext getPortlet() {
104: return portlet;
105: }
106:
107: public String getProperty(String name) {
108: return (String) result.getProperties().get(name);
109: }
110:
111: public Map getProperties() {
112: return result.getProperties();
113: }
114:
115: public void setRegionName(String regionName) {
116: this .regionName = regionName;
117: }
118:
119: public void setOrder(String order) {
120: this .order = order;
121: }
122:
123: public WindowResult getResult() {
124: return result;
125: }
126:
127: public int compareTo(Object o) {
128: WindowContext that = (WindowContext) o;
129: return ThemeTools.compareWindowOrder(this .order, this .id,
130: that.order, that.id);
131: }
132:
133: public boolean equals(Object o) {
134: if (this == o) {
135: return true;
136: }
137: if (o == null || getClass() != o.getClass()) {
138: return false;
139: }
140:
141: final WindowContext that = (WindowContext) o;
142:
143: return id.equals(that.id);
144: }
145:
146: public int hashCode() {
147: return id.hashCode();
148: }
149:
150: public String toString() {
151: return "WindowContext[id=" + id + ",region=" + regionName
152: + ",order=" + order + "]";
153: }
154: }
|