/*****************************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
package org.apache.padaf.xmpbox.parser;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.apache.commons.io.IOUtils;
import org.apache.padaf.xmpbox.parser.XMLValueTypeDescriptionManager;
import org.apache.padaf.xmpbox.type.FieldDescription;
import org.apache.padaf.xmpbox.type.ValueTypeDescription;
import org.junit.Test;
public class XMLValueTypeDescriptionManagerTest {
@Test
public void testPropDesc() throws Exception {
List<String> types = new ArrayList<String>();
types.add("type1");
types.add("type2");
List<String> uris = new ArrayList<String>();
uris.add("nsURI1");
uris.add("nsURI2");
List<String> prefixs = new ArrayList<String>();
prefixs.add("pref1");
prefixs.add("pref2");
List<String> descProps = new ArrayList<String>();
descProps.add("descProp1");
descProps.add("descProp2");
XMLValueTypeDescriptionManager xmlParser = new XMLValueTypeDescriptionManager();
xmlParser.addValueTypeDescription(types.get(0), uris.get(0), prefixs
.get(0), descProps.get(0));
xmlParser.addValueTypeDescription(types.get(1), uris.get(1), prefixs
.get(1), descProps.get(1));
ByteArrayOutputStream bos = new ByteArrayOutputStream();
xmlParser.toXML(bos);
IOUtils.closeQuietly(bos);
XMLValueTypeDescriptionManager propRetrieve = new XMLValueTypeDescriptionManager();
InputStream is = new ByteArrayInputStream(bos.toByteArray());
propRetrieve.loadListFromXML(is);
List<ValueTypeDescription> vtList = propRetrieve
.getValueTypesDescriptionList();
Assert.assertEquals(types.size(), vtList.size());
for (int i = 0; i < vtList.size(); i++) {
Assert.assertTrue(types.contains(vtList.get(i).getType()));
Assert.assertTrue(uris.contains(vtList.get(i).getNamespaceURI()));
Assert.assertTrue(prefixs.contains(vtList.get(i).getPrefix()));
Assert.assertTrue(descProps
.contains(vtList.get(i).getDescription()));
Assert.assertNull(vtList.get(i).getFields());
}
}
@Test
public void testPropDescWithField() throws Exception {
String type = "type1";
String uri = "nsURI1";
String prefix = "pref1";
String descProp = "descProp1";
List<String> fieldNames = new ArrayList<String>();
fieldNames.add("fieldName1");
fieldNames.add("fieldName2");
List<String> fieldValueTypes = new ArrayList<String>();
fieldValueTypes.add("fieldVT1");
fieldValueTypes.add("fieldVT2");
List<String> fieldDescription = new ArrayList<String>();
fieldDescription.add("FieldDesc1");
fieldDescription.add("FieldDesc2");
List<FieldDescription> fieldList = new ArrayList<FieldDescription>();
fieldList.add(new FieldDescription(fieldNames.get(0), fieldValueTypes
.get(0), fieldDescription.get(0)));
fieldList.add(new FieldDescription(fieldNames.get(1), fieldValueTypes
.get(1), fieldDescription.get(1)));
XMLValueTypeDescriptionManager xmlParser = new XMLValueTypeDescriptionManager();
xmlParser.addValueTypeDescription(type, uri, prefix, descProp,
fieldList);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
xmlParser.toXML(bos);
IOUtils.closeQuietly(bos);
XMLValueTypeDescriptionManager propRetrieve = new XMLValueTypeDescriptionManager();
InputStream is = new ByteArrayInputStream(bos.toByteArray());
propRetrieve.loadListFromXML(is);
List<ValueTypeDescription> vtList = propRetrieve
.getValueTypesDescriptionList();
Assert.assertEquals(1, vtList.size());
ValueTypeDescription vt = vtList.get(0);
Assert.assertEquals(type, vt.getType());
Assert.assertEquals(uri, vt.getNamespaceURI());
Assert.assertEquals(prefix, vt.getPrefix());
Assert.assertEquals(descProp, vt.getDescription());
List<FieldDescription> fieldsFound = vt.getFields();
Assert.assertNotNull(fieldsFound);
for (int i = 0; i < fieldsFound.size(); i++) {
Assert
.assertTrue(fieldNames.contains(fieldsFound.get(i)
.getName()));
Assert.assertTrue(fieldValueTypes.contains(fieldsFound.get(i)
.getValueType()));
Assert.assertTrue(fieldDescription.contains(fieldsFound.get(i)
.getDescription()));
}
}
}