001
014
015 package com.liferay.portal.template;
016
017 import com.liferay.portal.kernel.io.unsync.UnsyncCharArrayWriter;
018 import com.liferay.portal.kernel.io.unsync.UnsyncStringReader;
019 import com.liferay.portal.kernel.template.TemplateResource;
020
021 import java.io.IOException;
022 import java.io.ObjectInput;
023 import java.io.ObjectOutput;
024 import java.io.Reader;
025
026 import java.util.concurrent.atomic.AtomicReference;
027
028
031 public class CacheTemplateResource implements TemplateResource {
032
033
037 public CacheTemplateResource() {
038 }
039
040 public CacheTemplateResource(TemplateResource templateResource) {
041 if (templateResource == null) {
042 throw new IllegalArgumentException("Template resource is null");
043 }
044
045 _templateResource = templateResource;
046 }
047
048 @Override
049 public boolean equals(Object obj) {
050 if (this == obj) {
051 return true;
052 }
053
054 if (!(obj instanceof CacheTemplateResource)) {
055 return false;
056 }
057
058 CacheTemplateResource cacheTemplateResource =
059 (CacheTemplateResource)obj;
060
061 if (_templateResource.equals(cacheTemplateResource._templateResource)) {
062 return true;
063 }
064
065 return false;
066 }
067
068 @Override
069 public long getLastModified() {
070 return _lastModified;
071 }
072
073 @Override
074 public Reader getReader() throws IOException {
075 String templateContent = _templateContent.get();
076
077 if (templateContent != null) {
078 return new UnsyncStringReader(templateContent);
079 }
080
081 Reader reader = null;
082
083 try {
084 reader = _templateResource.getReader();
085
086 char[] buffer = new char[1024];
087
088 int result = -1;
089
090 UnsyncCharArrayWriter unsyncCharArrayWriter =
091 new UnsyncCharArrayWriter();
092
093 while ((result = reader.read(buffer)) != -1) {
094 unsyncCharArrayWriter.write(buffer, 0, result);
095 }
096
097 templateContent = unsyncCharArrayWriter.toString();
098
099 _templateContent.set(templateContent);
100 }
101 finally {
102 if (reader != null) {
103 reader.close();
104 }
105 }
106
107 return new UnsyncStringReader(templateContent);
108 }
109
110 @Override
111 public String getTemplateId() {
112 return _templateResource.getTemplateId();
113 }
114
115 @Override
116 public int hashCode() {
117 return _templateResource.hashCode();
118 }
119
120 @Override
121 public void readExternal(ObjectInput objectInput)
122 throws ClassNotFoundException, IOException {
123
124 _lastModified = objectInput.readLong();
125 _templateResource = (TemplateResource)objectInput.readObject();
126 }
127
128 @Override
129 public void writeExternal(ObjectOutput objectOutput) throws IOException {
130 objectOutput.writeLong(_lastModified);
131 objectOutput.writeObject(_templateResource);
132 }
133
134 private long _lastModified = System.currentTimeMillis();
135 private AtomicReference<String> _templateContent =
136 new AtomicReference<String>();
137 private TemplateResource _templateResource;
138
139 }