001 /** 002 * Copyright 2005-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community 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.opensource.org/licenses/ecl2.php 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.kuali.rice.kew.api.document; 017 018 import org.kuali.rice.core.api.CoreConstants; 019 import org.kuali.rice.core.api.mo.AbstractDataTransferObject; 020 import org.w3c.dom.Element; 021 022 import javax.xml.bind.annotation.XmlAccessType; 023 import javax.xml.bind.annotation.XmlAccessorType; 024 import javax.xml.bind.annotation.XmlAnyElement; 025 import javax.xml.bind.annotation.XmlElement; 026 import javax.xml.bind.annotation.XmlRootElement; 027 import javax.xml.bind.annotation.XmlType; 028 import java.util.Collection; 029 030 /** 031 * Immutable implementation of the {@code DocumentWithContentContract}. This class does not have a builder since it is 032 * intended to simply be a wrapper a document and it's content. 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036 @XmlRootElement(name = DocumentWithContent.Constants.ROOT_ELEMENT_NAME) 037 @XmlAccessorType(XmlAccessType.NONE) 038 @XmlType(name = DocumentWithContent.Constants.TYPE_NAME, propOrder = { 039 DocumentWithContent.Elements.DOCUMENT, 040 DocumentWithContent.Elements.DOCUMENT_CONTENT, 041 CoreConstants.CommonElements.FUTURE_ELEMENTS 042 }) 043 public final class DocumentWithContent extends AbstractDataTransferObject implements DocumentWithContentContract { 044 045 @XmlElement(name = Elements.DOCUMENT, required = true) 046 private final Document document; 047 048 @XmlElement(name = Elements.DOCUMENT_CONTENT, required = true) 049 private final DocumentContent documentContent; 050 051 @SuppressWarnings("unused") 052 @XmlAnyElement 053 private final Collection<Element> _futureElements = null; 054 055 /** 056 * Private constructor used only by JAXB. 057 */ 058 private DocumentWithContent() { 059 this.document = null; 060 this.documentContent = null; 061 } 062 063 private DocumentWithContent(Document document, DocumentContent documentContent) { 064 if (document == null) { 065 throw new IllegalArgumentException("document was null"); 066 } 067 if (documentContent == null) { 068 throw new IllegalArgumentException("documentContent was null"); 069 } 070 this.document = document; 071 this.documentContent = documentContent; 072 } 073 074 public static DocumentWithContent create(Document document, DocumentContent documentContent) { 075 return new DocumentWithContent(document, documentContent); 076 } 077 078 @Override 079 public Document getDocument() { 080 return this.document; 081 } 082 083 @Override 084 public DocumentContent getDocumentContent() { 085 return this.documentContent; 086 } 087 088 /** 089 * Defines some internal constants used on this class. 090 */ 091 static class Constants { 092 final static String ROOT_ELEMENT_NAME = "documentWithContent"; 093 final static String TYPE_NAME = "DocumentWithContentType"; 094 } 095 096 /** 097 * A private class which exposes constants which define the XML element names to use when this object is marshalled to XML. 098 */ 099 static class Elements { 100 final static String DOCUMENT = "document"; 101 final static String DOCUMENT_CONTENT = "documentContent"; 102 } 103 104 }