001 /****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one *
003 * or more contributor license agreements. See the NOTICE file *
004 * distributed with this work for additional information *
005 * regarding copyright ownership. The ASF licenses this file *
006 * to you under the Apache License, Version 2.0 (the *
007 * "License"); you may not use this file except in compliance *
008 * with the License. You may obtain a copy of the License at *
009 * *
010 * http://www.apache.org/licenses/LICENSE-2.0 *
011 * *
012 * Unless required by applicable law or agreed to in writing, *
013 * software distributed under the License is distributed on an *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015 * KIND, either express or implied. See the License for the *
016 * specific language governing permissions and limitations *
017 * under the License. *
018 ****************************************************************/
019
020 package org.apache.james.mime4j.message;
021
022 import org.apache.james.mime4j.dom.Multipart;
023 import org.apache.james.mime4j.util.ByteSequence;
024 import org.apache.james.mime4j.util.ContentUtil;
025
026 /**
027 * Default implementation of {@link Multipart}.
028 */
029 public class MultipartImpl extends AbstractMultipart {
030
031 private ByteSequence preamble;
032 private transient String preambleStrCache;
033 private transient boolean preambleComputed = false;
034 private ByteSequence epilogue;
035 private transient String epilogueStrCache;
036 private transient boolean epilogueComputed = false;
037
038 /**
039 * Creates a new empty <code>Multipart</code> instance.
040 */
041 public MultipartImpl(String subType) {
042 super(subType);
043 preamble = null;
044 preambleStrCache = null;
045 preambleComputed = true;
046 epilogue = null;
047 epilogueStrCache = null;
048 epilogueComputed = true;
049 }
050
051 // package private for now; might become public someday
052 public ByteSequence getPreambleRaw() {
053 return preamble;
054 }
055
056 public void setPreambleRaw(ByteSequence preamble) {
057 this.preamble = preamble;
058 this.preambleStrCache = null;
059 this.preambleComputed = false;
060 }
061
062 /**
063 * Gets the preamble.
064 *
065 * @return the preamble.
066 */
067 @Override
068 public String getPreamble() {
069 if (!preambleComputed) {
070 preambleStrCache = preamble != null ? ContentUtil.decode(preamble) : null;
071 preambleComputed = true;
072 }
073 return preambleStrCache;
074 }
075
076 /**
077 * Sets the preamble.
078 *
079 * @param preamble
080 * the preamble.
081 */
082 @Override
083 public void setPreamble(String preamble) {
084 this.preamble = preamble != null ? ContentUtil.encode(preamble) : null;
085 this.preambleStrCache = preamble;
086 this.preambleComputed = true;
087 }
088
089 // package private for now; might become public someday
090 public ByteSequence getEpilogueRaw() {
091 return epilogue;
092 }
093
094 public void setEpilogueRaw(ByteSequence epilogue) {
095 this.epilogue = epilogue;
096 this.epilogueStrCache = null;
097 this.epilogueComputed = false;
098 }
099
100 /**
101 * Gets the epilogue.
102 *
103 * @return the epilogue.
104 */
105 @Override
106 public String getEpilogue() {
107 if (!epilogueComputed) {
108 epilogueStrCache = epilogue != null ? ContentUtil.decode(epilogue) : null;
109 epilogueComputed = true;
110 }
111 return epilogueStrCache;
112 }
113
114 /**
115 * Sets the epilogue.
116 *
117 * @param epilogue
118 * the epilogue.
119 */
120 @Override
121 public void setEpilogue(String epilogue) {
122 this.epilogue = epilogue != null ? ContentUtil.encode(epilogue) : null;
123 this.epilogueStrCache = epilogue;
124 this.epilogueComputed = true;
125 }
126
127 }