/*
* #!
* Ontopia Engine
* #-
* Copyright (C) 2001 - 2013 The Ontopia Project
* #-
* Licensed 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 net.ontopia.infoset.fulltext.topicmaps;
import java.net.MalformedURLException;
import java.util.Collection;
import junit.framework.TestCase;
import net.ontopia.infoset.core.LocatorIF;
import net.ontopia.infoset.fulltext.core.DocumentIF;
import net.ontopia.infoset.fulltext.core.FieldIF;
import net.ontopia.infoset.impl.basic.URILocator;
import net.ontopia.topicmaps.core.AssociationIF;
import net.ontopia.topicmaps.core.AssociationRoleIF;
import net.ontopia.topicmaps.core.TopicNameIF;
import net.ontopia.topicmaps.core.OccurrenceIF;
import net.ontopia.topicmaps.core.TMObjectIF;
import net.ontopia.topicmaps.core.TopicIF;
import net.ontopia.topicmaps.core.TopicMapBuilderIF;
import net.ontopia.topicmaps.core.TopicMapIF;
import net.ontopia.topicmaps.core.TopicMapStoreIF;
import net.ontopia.topicmaps.core.VariantNameIF;
import net.ontopia.topicmaps.impl.basic.InMemoryTopicMapStore;
public class DefaultTMDocGeneratorTest extends TestCase {
protected TopicMapIF topicmap; // topic map of object being tested
protected TopicMapBuilderIF builder; // builder used for creating new objects
protected DefaultTopicMapDocumentGenerator generator;
public DefaultTMDocGeneratorTest(String name) {
super(name);
}
public void setUp() {
TopicMapStoreIF store = new InMemoryTopicMapStore();
topicmap = store.getTopicMap();
builder = topicmap.getBuilder();
generator = DefaultTopicMapDocumentGenerator.INSTANCE;
}
// --- test cases
public void testAssocGenerate() {
AssociationIF assoc = builder.makeAssociation(builder.makeTopic());
DocumentIF doc = generator.generate(assoc);
Collection fields = doc.getFields();
assertTrue("Association DocumentIF has " + fields.size() + " fields",
fields.size() == 2);
verifyObjectId(assoc, doc.getField("object_id"));
verifyClass(doc.getField("class"), "A");
}
public void testAssocRoleGenerate() {
AssociationIF assoc = builder.makeAssociation(builder.makeTopic());
AssociationRoleIF role = builder.makeAssociationRole(assoc, builder.makeTopic(), builder.makeTopic());
DocumentIF doc = generator.generate(role);
Collection fields = doc.getFields();
assertTrue("Association role DocumentIF has " + fields.size() + " fields",
fields.size() == 2);
verifyObjectId(role, doc.getField("object_id"));
verifyClass(doc.getField("class"), "R");
}
public void testTopicNameGenerate() {
TopicIF topic = builder.makeTopic();
TopicNameIF bn = builder.makeTopicName(topic, "foo");
DocumentIF doc = generator.generate(bn);
Collection fields = doc.getFields();
assertTrue("Base name DocumentIF has " + fields.size() + " fields",
fields.size() == 3);
verifyObjectId(bn, doc.getField("object_id"));
verifyClass(doc.getField("class"), "B");
verifyContent(doc.getField("content"), "foo");
}
public void testOccurrenceGenerate() {
TopicIF topic = builder.makeTopic();
TopicIF otype = builder.makeTopic();
OccurrenceIF occ = builder.makeOccurrence(topic, otype, "value");
DocumentIF doc = generator.generate(occ);
Collection fields = doc.getFields();
assertTrue("Occurrence DocumentIF has " + fields.size() + " fields",
fields.size() == 3);
verifyObjectId(occ, doc.getField("object_id"));
verifyClass(doc.getField("class"), "O");
verifyContent(doc.getField("content"), "value");
}
public void testOccurrenceGenerate2() {
TopicIF topic = builder.makeTopic();
TopicIF otype = builder.makeTopic();
OccurrenceIF occ = builder.makeOccurrence(topic, otype, makeLocator("http://www.ontopia.net"));
DocumentIF doc = generator.generate(occ);
Collection fields = doc.getFields();
assertTrue("Occurrence DocumentIF has " + fields.size() + " fields",
fields.size() == 4);
verifyObjectId(occ, doc.getField("object_id"));
verifyClass(doc.getField("class"), "O");
verifyLocator(doc, "http://www.ontopia.net/");
}
public void testTopicGenerate() {
TopicIF topic = builder.makeTopic();
DocumentIF doc = generator.generate(topic);
Collection fields = doc.getFields();
assertTrue("Topic DocumentIF has " + fields.size() + " fields",
fields.size() == 2);
verifyObjectId(topic, doc.getField("object_id"));
verifyClass(doc.getField("class"), "T");
}
public void testTopicMapGenerate() {
DocumentIF doc = generator.generate(topicmap);
Collection fields = doc.getFields();
assertTrue("Topic DocumentIF has " + fields.size() + " fields",
fields.size() == 2);
verifyObjectId(topicmap, doc.getField("object_id"));
verifyClass(doc.getField("class"), "M");
}
public void testVariantGenerate() {
TopicIF topic = builder.makeTopic();
TopicNameIF bn = builder.makeTopicName(topic, "foo");
VariantNameIF vn = builder.makeVariantName(bn, "value");
DocumentIF doc = generator.generate(vn);
Collection fields = doc.getFields();
assertTrue("Variant DocumentIF has " + fields.size() + " fields",
fields.size() == 3);
verifyObjectId(vn, doc.getField("object_id"));
verifyClass(doc.getField("class"), "N");
verifyContent(doc.getField("content"), "value");
}
public void testVariantGenerate2() {
TopicIF topic = builder.makeTopic();
TopicNameIF bn = builder.makeTopicName(topic, "foo");
VariantNameIF vn = builder.makeVariantName(bn, makeLocator("http://www.ontopia.no"));
DocumentIF doc = generator.generate(vn);
Collection fields = doc.getFields();
assertTrue("Variant DocumentIF has " + fields.size() + " fields",
fields.size() == 4);
verifyObjectId(vn, doc.getField("object_id"));
verifyClass(doc.getField("class"), "N");
verifyLocator(doc, "http://www.ontopia.no/");
}
// --- helper methods
private void verifyObjectId(TMObjectIF object, FieldIF field) {
assertTrue("object_id had value " + field.getValue() + " instead of " +
object.getObjectId(),
field.getValue() != null &&
field.getValue().equals(object.getObjectId()));
}
private void verifyClass(FieldIF field, String _class) {
assertTrue("class was " + field.getValue() + " instead of " + _class,
field.getValue() != null && field.getValue().equals(_class));
}
private void verifyContent(FieldIF field, String content) {
assertTrue("content should have been " + content + " but was " + field.getValue(),
field.getValue() != null && field.getValue().equals(content));
}
private void verifyLocator(DocumentIF doc, String locator) {
FieldIF field = doc.getField("notation");
assertTrue("notation " + field.getValue() + " instead of URI",
field.getValue() != null && field.getValue().equals("URI"));
field = doc.getField("address");
assertTrue("address was " + field.getValue(),
field.getValue() != null && field.getValue().equals(locator));
}
private LocatorIF makeLocator(String uri) {
try {
return new URILocator(uri);
}
catch (MalformedURLException e) {
fail("INTERNAL: URI was malformed");
return null; // never returns
}
}
}