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.core.impl.portlet.state;
023:
024: import org.hibernate.Session;
025: import org.jboss.portal.jems.hibernate.ContextObject;
026: import org.jboss.portal.registration.Consumer;
027: import org.jboss.portal.registration.ConsumerGroup;
028: import org.jboss.portal.registration.RegistrationException;
029: import org.jboss.portal.registration.RegistrationStatus;
030:
031: import java.util.Collection;
032: import java.util.Collections;
033: import java.util.HashMap;
034: import java.util.Map;
035:
036: /**
037: * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
038: * @version $Revision: 8786 $
039: */
040: public class PersistentConsumerGroup implements ConsumerGroup,
041: ContextObject {
042:
043: // Persistent fields
044:
045: private Long key;
046: private String persistentName;
047: private RegistrationStatus persistentStatus;
048:
049: // Relationships
050:
051: private Map relatedConsumers;
052:
053: // Context
054:
055: private PersistentPortletStatePersistenceManager context;
056:
057: public PersistentConsumerGroup(
058: PersistentPortletStatePersistenceManager context,
059: String name) {
060: this .key = null;
061: this .persistentName = name;
062: this .relatedConsumers = new HashMap();
063: this .persistentStatus = RegistrationStatus.PENDING;
064: this .context = context;
065: }
066:
067: /** Hibernate constructor. */
068: PersistentConsumerGroup() {
069: this .key = null;
070: this .persistentName = null;
071: this .persistentStatus = null;
072: this .relatedConsumers = null;
073: }
074:
075: // ContextObject
076:
077: public void setContext(Object context) {
078: this .context = (PersistentPortletStatePersistenceManager) context;
079: }
080:
081: // Hibernate
082:
083: public Long getKey() {
084: return key;
085: }
086:
087: public void setKey(Long key) {
088: this .key = key;
089: }
090:
091: public String getPersistentName() {
092: return persistentName;
093: }
094:
095: public void setPersistentName(String persistentName) {
096: this .persistentName = persistentName;
097: }
098:
099: public RegistrationStatus getPersistentStatus() {
100: return persistentStatus;
101: }
102:
103: public void setPersistentStatus(RegistrationStatus persistentStatus) {
104: this .persistentStatus = persistentStatus;
105: }
106:
107: public Map getRelatedConsumers() {
108: return relatedConsumers;
109: }
110:
111: public void setRelatedConsumers(Map relatedConsumers) {
112: this .relatedConsumers = relatedConsumers;
113: }
114:
115: //
116:
117: public String getName() {
118: return persistentName;
119: }
120:
121: public Collection getConsumers() throws RegistrationException {
122: return Collections.unmodifiableCollection(relatedConsumers
123: .values());
124: }
125:
126: public Consumer getConsumer(String consumerId)
127: throws IllegalArgumentException, RegistrationException {
128: if (consumerId == null) {
129: throw new IllegalArgumentException(
130: "No null consumer id accepted");
131: }
132:
133: //
134: return (Consumer) relatedConsumers.get(consumerId);
135: }
136:
137: public void addConsumer(Consumer consumer)
138: throws RegistrationException {
139: PersistentConsumer pconsumer = validateImplementation(consumer);
140:
141: //
142: if (relatedConsumers.containsKey(consumer.getId())) {
143: throw new IllegalArgumentException(
144: "Consumer already attached " + consumer.getId());
145: }
146:
147: //
148: Session session = context.getCurrentSession();
149:
150: // Create the relationship
151: relatedConsumers.put(consumer.getId(), pconsumer);
152: pconsumer.setRelatedGroup(this );
153: session.saveOrUpdate(this );
154: session.saveOrUpdate(consumer);
155: }
156:
157: public void removeConsumer(Consumer consumer)
158: throws RegistrationException {
159: validateImplementation(consumer);
160:
161: //
162: if (relatedConsumers.remove(consumer.getId()) == null) {
163: throw new IllegalArgumentException();
164: }
165: }
166:
167: public boolean contains(Consumer consumer) {
168: validateImplementation(consumer);
169: return relatedConsumers.containsKey(consumer.getId());
170: }
171:
172: private PersistentConsumer validateImplementation(Consumer consumer)
173: throws IllegalArgumentException {
174: if (consumer == null) {
175: throw new IllegalArgumentException();
176: }
177: if (consumer instanceof PersistentConsumer) {
178: return (PersistentConsumer) consumer;
179: } else {
180: throw new IllegalArgumentException();
181: }
182: }
183:
184: public boolean isEmpty() {
185: return relatedConsumers.isEmpty();
186: }
187:
188: public RegistrationStatus getStatus() {
189: return persistentStatus;
190: }
191:
192: public void setStatus(RegistrationStatus status) {
193: this.persistentStatus = status;
194: }
195: }
|