2
* Licensed to the Apache Software Foundation (ASF) under one or more
3
* contributor license agreements. See the NOTICE file distributed with
4
* this work for additional information regarding copyright ownership.
5
* The ASF licenses this file to You under the Apache License, Version 2.0
6
* (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
18
/* $Id: XMPPropertyTest.java 1051421 2010-12-21 08:54:25Z jeremias $ */
20
package org.apache.xmlgraphics.xmp;
22
import java.io.StringWriter;
23
import java.util.Arrays;
24
import java.util.Calendar;
25
import java.util.Date;
26
import java.util.Locale;
28
import java.util.TimeZone;
30
import javax.xml.transform.stream.StreamResult;
31
import javax.xml.transform.stream.StreamSource;
33
import junit.framework.TestCase;
35
import org.apache.xmlgraphics.util.QName;
36
import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter;
37
import org.apache.xmlgraphics.xmp.schemas.DublinCoreSchema;
38
import org.apache.xmlgraphics.xmp.schemas.XMPBasicAdapter;
39
import org.apache.xmlgraphics.xmp.schemas.XMPBasicSchema;
42
* Tests property access methods.
44
public class XMPPropertyTest extends TestCase {
46
public void testPropertyAccess() throws Exception {
47
Metadata xmp = new Metadata();
48
DublinCoreAdapter dc = DublinCoreSchema.getAdapter(xmp);
49
assertNull(dc.getContributors());
51
dc.addContributor("Contributor1");
52
assertEquals(1, dc.getContributors().length);
53
assertEquals("Contributor1", dc.getContributors()[0]);
54
dc.removeContributor("Contributor1");
55
assertNull(dc.getContributors());
57
dc.addContributor("Contributor1");
58
assertEquals(1, dc.getContributors().length);
59
dc.addContributor("Contributor2");
60
assertEquals(2, dc.getContributors().length);
61
assertFalse(dc.removeContributor("DoesNotExist"));
62
assertTrue(dc.removeContributor("Contributor1"));
63
assertEquals(1, dc.getContributors().length);
64
assertTrue(dc.removeContributor("Contributor2"));
65
assertFalse(dc.removeContributor("Contributor2"));
66
assertNull(dc.getContributors());
69
public void testPropertyRemovalLangAlt() throws Exception {
70
Metadata xmp = new Metadata();
71
DublinCoreAdapter dc = DublinCoreSchema.getAdapter(xmp);
73
//dc:title is a "Lang Alt"
74
dc.setTitle("en", "The title");
75
String title = dc.removeTitle("en");
76
assertEquals("The title", title);
77
dc.setTitle("en", "The title");
78
dc.setTitle("de", "Der Titel");
79
title = dc.removeTitle("en");
80
assertEquals("The title", title);
81
title = dc.removeTitle("en");
84
title = dc.removeTitle("de");
85
assertEquals("Der Titel", title);
86
title = dc.removeTitle("de");
90
public void testReplaceLangAlt() throws Exception {
91
Metadata xmp = new Metadata();
92
DublinCoreAdapter dc = DublinCoreSchema.getAdapter(xmp);
93
dc.setTitle("Default title");
94
StringWriter writer = new StringWriter();
95
XMPSerializer.writeXML(xmp, new StreamResult(writer));
96
String xmpString = writer.toString();
97
xmp = XMPParser.parseXMP(new StreamSource(new java.io.StringReader(xmpString)));
98
dc = DublinCoreSchema.getAdapter(xmp);
99
assertEquals("Default title", dc.getTitle());
100
dc.setTitle("Updated title");
101
XMPProperty prop = xmp.getProperty(new QName(DublinCoreSchema.NAMESPACE, "title"));
102
XMPArray array = prop.getArrayValue();
103
assertNotNull(array);
104
//Check that only one title is present. There used to be a bug that didn't set the
105
//non-qualified value equal to the value qualified with "x-default".
106
assertEquals(1, array.getSize());
107
assertEquals("Updated title", array.getValue(0));
110
public void testPropertyValues() throws Exception {
111
Metadata xmp = new Metadata();
112
DublinCoreAdapter dc = DublinCoreSchema.getAdapter(xmp);
114
String format = dc.getFormat();
117
dc.setFormat("application/pdf");
118
format = dc.getFormat();
119
assertEquals("application/pdf", format);
121
dc.setFormat("image/jpeg");
122
format = dc.getFormat();
123
assertEquals("image/jpeg", format);
126
format = dc.getFormat();
129
dc.setFormat(""); //Empty string same as null value
130
format = dc.getFormat();
133
dc.setTitle("title");
134
String title = dc.getTitle();
135
assertEquals("title", title);
137
dc.setTitle("Titel");
138
title = dc.getTitle();
139
assertEquals("Titel", title);
142
title = dc.getTitle();
146
title = dc.getTitle();
150
public void testDates() throws Exception {
151
Metadata xmp = new Metadata();
152
XMPBasicAdapter basic = XMPBasicSchema.getAdapter(xmp);
154
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
155
cal.set(2008, Calendar.FEBRUARY, 07, 15, 11, 07);
156
cal.set(Calendar.MILLISECOND, 0);
157
Date dt = cal.getTime();
159
assertNull(basic.getCreateDate());
160
basic.setCreateDate(dt);
161
Date dt2 = basic.getCreateDate();
162
assertEquals(dt2, dt);
165
public void testQualifiers() throws Exception {
166
Metadata xmp = new Metadata();
167
XMPBasicAdapter basic = XMPBasicSchema.getAdapter(xmp);
169
basic.addIdentifier("x123");
170
basic.setIdentifier("id1", "system1");
171
basic.setIdentifier("12345", "system2");
173
String[] ids = basic.getIdentifiers();
174
assertEquals(3, ids.length);
175
Set set = new java.util.HashSet(Arrays.asList(ids));
176
assertTrue(set.contains("x123"));
177
assertTrue(set.contains("id1"));
178
assertTrue(set.contains("12345"));
180
assertEquals("id1", basic.getIdentifier("system1"));
181
basic.setIdentifier("id2", "system1");
182
assertEquals("id2", basic.getIdentifier("system1"));
183
assertEquals(3, basic.getIdentifiers().length);