/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/chat/trunk/chat-api/api/src/java/org/sakaiproject/chat2/model/ChatChannel.java $ * $Id: ChatChannel.java 129909 2013-09-23 19:30:28Z azeckoski@unicon.net $ *********************************************************************************** * * Copyright (c) 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.chat2.model; import java.util.Date; import java.util.HashSet; import java.util.Set; import java.util.Stack; import org.sakaiproject.component.cover.ServerConfigurationService; import org.sakaiproject.entity.api.Entity; import org.sakaiproject.entity.api.ResourceProperties; import org.w3c.dom.Document; import org.w3c.dom.Element; public class ChatChannel implements Entity { /** Message filter names */ public static final String FILTER_BY_NUMBER = "SelectMessagesByNumber"; public static final String FILTER_BY_TIME = "SelectMessagesByTime"; public static final String FILTER_TODAY = "SelectTodaysMessages"; public static final String FILTER_ALL = "SelectAllMessages"; public static final String FILTER_NONE = "SelectNoneMessages"; private String id; private String placement; private String context; private Date creationDate; private String title; private String description; private String filterType = FILTER_ALL; private int filterParam = 3; private int timeParam = 3; private int numberParam = 10; private boolean placementDefaultChannel = false; private boolean enableUserOverride = true; private Set<ChatMessage> messages = new HashSet<ChatMessage>(); private String migratedChannelId; private Date startDate; private Date endDate; public ChatChannel() { } /** * Set up a new ChatChannel with the set defaults * @param defaults */ public ChatChannel(ChatChannel defaults) { this.filterType = defaults.getFilterType(); this.filterParam = defaults.getFilterParam(); this.timeParam = defaults.getTimeParam(); this.numberParam = defaults.getNumberParam(); this.enableUserOverride = defaults.isEnableUserOverride(); } public String getContext() { return context; } public void setContext(String context) { this.context = context; } public Date getCreationDate() { return creationDate; } public void setCreationDate(Date creationDate) { this.creationDate = creationDate; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Set<ChatMessage> getMessages() { return messages; } public void setMessages(Set<ChatMessage> messages) { this.messages = messages; } public String getFilterType() { return filterType; } public void setFilterType(String filterType) { this.filterType = filterType; } public int getFilterParam() { return filterParam; } public void setFilterParam(int filterParam) { this.filterParam = filterParam; } public boolean isPlacementDefaultChannel() { return placementDefaultChannel; } public void setPlacementDefaultChannel(boolean placementDefaultChannel) { this.placementDefaultChannel = placementDefaultChannel; } public boolean isEnableUserOverride() { return enableUserOverride; } public void setEnableUserOverride(boolean enableUserOverride) { this.enableUserOverride = enableUserOverride; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Date getEndDate() { return endDate; } public void setEndDate(Date endDate) { this.endDate = endDate; } /** * Serialize the resource into XML, adding an element to the doc under the top of the stack element. * * @param doc * The DOM doc to contain the XML (or null for a string return). * @param stack * The DOM elements, the top of which is the containing element of the new "resource" element. * @return The newly added element. */ @SuppressWarnings("unchecked") public Element toXml(Document doc, Stack stack) { Element channel = doc.createElement("channel"); if (stack.isEmpty()) { doc.appendChild(channel); } else { ((Element) stack.peek()).appendChild(channel); } stack.push(channel); channel.setAttribute("context", getContext()); channel.setAttribute("id", getId()); channel.setAttribute("description", getDescription()); channel.setAttribute("title", getTitle()); channel.setAttribute("creationDate", Long.toString(getCreationDate().getTime())); channel.setAttribute("filterType", getFilterType()); channel.setAttribute("filterParam", Integer.toString(getFilterParam())); channel.setAttribute("placementDefaultChannel", Boolean.toString(isPlacementDefaultChannel())); stack.pop(); return channel; } // toXml /** * Converts the serialized xml back to a ChatChannel object * @param channelElement * @return the Channel */ public static ChatChannel xmlToChatChannel(Element channelElement, String siteId) { ChatChannel tmpChannel = new ChatChannel(); //tmpChannel.setContext(channelElement.getAttribute("context")); tmpChannel.setContext(siteId); if (siteId.equalsIgnoreCase(channelElement.getAttribute("context"))) { //If importing into the same site, keep the id. We should get an update instead of saving a new one. tmpChannel.setId(channelElement.getAttribute("id")); } tmpChannel.setDescription(channelElement.getAttribute("description")); tmpChannel.setTitle(channelElement.getAttribute("title")); tmpChannel.setCreationDate(new Date(Long.parseLong(channelElement.getAttribute("creationDate")))); tmpChannel.setFilterType(channelElement.getAttribute("filterType")); tmpChannel.setFilterParam(Integer.parseInt(channelElement.getAttribute("filterParam"))); tmpChannel.setPlacementDefaultChannel(Boolean.parseBoolean(channelElement.getAttribute("placementDefaultChannel"))); return tmpChannel; } /* (non-Javadoc) * @see org.sakaiproject.entity.api.Entity#getProperties() */ public ResourceProperties getProperties() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see org.sakaiproject.entity.api.Entity#getReference() */ public String getReference() { return ChatManager.REFERENCE_ROOT + Entity.SEPARATOR + ChatManager.REF_TYPE_CHANNEL + Entity.SEPARATOR + context + Entity.SEPARATOR + id; } /* (non-Javadoc) * @see org.sakaiproject.entity.api.Entity#getReference(java.lang.String) */ public String getReference(String rootProperty) { return getReference(); } /* (non-Javadoc) * @see org.sakaiproject.entity.api.Entity#getUrl() */ public String getUrl() { return ServerConfigurationService.getAccessUrl() + getReference(); } /* (non-Javadoc) * @see org.sakaiproject.entity.api.Entity#getUrl(java.lang.String) */ public String getUrl(String rootProperty) { return getUrl(); } public String getMigratedChannelId() { return migratedChannelId; } public void setMigratedChannelId(String migratedChannelId) { this.migratedChannelId = migratedChannelId; } /** * @return the placement */ public String getPlacement() { return placement; } /** * @param placement the placement to set */ public void setPlacement(String placement) { this.placement = placement; } public int getNumberParam() { return numberParam; } public void setNumberParam(int numberParam) { this.numberParam = numberParam; } public int getTimeParam() { return timeParam; } public void setTimeParam(int timeParam) { this.timeParam = timeParam; } }