1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.dam.jcr;
35
36 import info.magnolia.dam.api.Asset;
37 import info.magnolia.dam.api.metadata.AssetMetadata;
38 import info.magnolia.dam.api.metadata.DublinCore;
39 import info.magnolia.dam.api.metadata.MagnoliaAssetMetadata;
40 import info.magnolia.jcr.RuntimeRepositoryException;
41 import info.magnolia.jcr.util.NodeTypes;
42 import info.magnolia.jcr.util.PropertyUtil;
43 import info.magnolia.objectfactory.Components;
44
45 import java.io.InputStream;
46 import java.util.Calendar;
47
48 import javax.jcr.Node;
49 import javax.jcr.RepositoryException;
50
51
52
53
54 public class JcrAsset extends AbstractJcrItem implements Asset {
55
56 public JcrAsset(JcrAssetProvider assetProvider, Node itemNode) {
57 super(assetProvider, itemNode);
58 }
59
60 @Override
61 public String getLink() {
62 return getAssetProvider().getLink(this);
63 }
64
65 @Override
66 public boolean isAsset() {
67 return true;
68 }
69
70 @Override
71 public String getTitle() {
72 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.TITLE, "");
73 }
74
75 @Override
76 public String getSubject() {
77 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.SUBJECT, "");
78 }
79
80 @Override
81 public String getDescription() {
82 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.DESCRIPTION, "");
83 }
84
85 @Override
86 public String getCaption() {
87 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.CAPTION, "");
88 }
89
90 @Override
91 public String getLanguage() {
92 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.LANGUAGE, "");
93 }
94
95 @Override
96 public String getCopyright() {
97 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.COPYRIGHT, "");
98 }
99
100 @Override
101 public String getComment() {
102 return PropertyUtil.getString(getNode(), AssetNodeTypes.Asset.COMMENT, "");
103 }
104
105 @Override
106 public Calendar getCreated() {
107 try {
108 return NodeTypes.Created.getCreated(getNode());
109 } catch (RepositoryException e) {
110 throw new RuntimeRepositoryException(e);
111 }
112 }
113
114 @Override
115 public Calendar getLastModified() {
116 try {
117 return NodeTypes.LastModified.getLastModified(getNode());
118 } catch (RepositoryException e) {
119 throw new RuntimeRepositoryException(e);
120 }
121 }
122
123 @Override
124 public <M extends AssetMetadata> M getMetadata(Class<M> metaDataType) {
125 if (!getAssetProvider().supports(metaDataType)) {
126 throw new IllegalArgumentException("Unsupported metaData Type requested " + metaDataType != null ? metaDataType.getName() : "null");
127 }
128 return Components.newInstance(metaDataType, getNode(), getItemKey());
129 }
130
131 @Override
132 public String getMimeType() {
133 return PropertyUtil.getString(AssetNodeTypes.AssetResource.getResourceNodeFromAsset(getNode()), AssetNodeTypes.AssetResource.MIMETYPE, "");
134 }
135
136 @Override
137 public long getFileSize() {
138 return PropertyUtil.getLong(AssetNodeTypes.AssetResource.getResourceNodeFromAsset(getNode()), AssetNodeTypes.AssetResource.SIZE, 0l);
139 }
140
141 @Override
142 public InputStream getContentStream() {
143 try {
144 Node node = AssetNodeTypes.AssetResource.getResourceNodeFromAsset(getNode());
145 if (node != null) {
146 return node.getProperty(AssetNodeTypes.AssetResource.DATA).getBinary().getStream();
147 }
148 } catch (RepositoryException e) {
149 throw new RuntimeRepositoryException(e);
150 }
151 return null;
152 }
153
154 @Override
155 public String getFileName() {
156 return PropertyUtil.getString(AssetNodeTypes.AssetResource.getResourceNodeFromAsset(getNode()), AssetNodeTypes.AssetResource.FILENAME, "");
157 }
158
159
160
161
162
163
164
165 public Object getProperty(String propertyName) {
166 return PropertyUtil.getPropertyValueObject(getNode(), propertyName);
167 }
168
169 @Override
170 public <M extends AssetMetadata> boolean supports(Class<M> metaDataType) {
171 return (MagnoliaAssetMetadata.class.isAssignableFrom(metaDataType) || DublinCore.class.isAssignableFrom(metaDataType));
172 }
173 }