|
From: <lh...@us...> - 2008-08-20 18:41:55
|
Revision: 70
http://tmapi.svn.sourceforge.net/tmapi/?rev=70&view=rev
Author: lheuer
Date: 2008-08-20 18:41:50 +0000 (Wed, 20 Aug 2008)
Log Message:
-----------
Build files for TMAPI 2.0 a1
Added Paths:
-----------
trunk/build.properties
trunk/build.xml
Added: trunk/build.properties
===================================================================
--- trunk/build.properties (rev 0)
+++ trunk/build.properties 2008-08-20 18:41:50 UTC (rev 70)
@@ -0,0 +1,5 @@
+version=2.0
+version_suffix=a1
+debug=off
+optimize=on
+
Added: trunk/build.xml
===================================================================
--- trunk/build.xml (rev 0)
+++ trunk/build.xml 2008-08-20 18:41:50 UTC (rev 70)
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ====================================================================
+ The Topic Maps API (TMAPI) was created collectively by
+ the membership of the tmapi-discuss mailing list
+ <http://lists.sourceforge.net/mailman/listinfo/tmapi-discuss>,
+ is hereby released into the public domain; and comes with
+ NO WARRANTY.
+
+ No one owns TMAPI: you may use it freely in both commercial and
+ non-commercial applications, bundle it with your software
+ distribution, include it on a CD-ROM, list the source code in a
+ book, mirror the documentation at your own web site, or use it in
+ any other way you see fit.
+ ====================================================================
+
+ $Rev:$ - $Date:$
+-->
+<project name="TMAPI" default="jar" basedir=".">
+ <property file="build.properties"/>
+
+ <property name="dir.src" value="${basedir}/src/main/java"/>
+ <property name="dir.test" value="${basedir}/src/test/java"/>
+ <property name="dir.lib" value="${basedir}/lib"/>
+
+ <property name="lib.junit" value="${dir.lib}/junit-4.4.jar"/>
+
+ <target name="help">
+ <echo message="--------------------"/>
+ <echo message="TMAPI - Build file"/>
+ <echo message="--------------------"/>
+ <echo message=""/>
+ <echo message="Available targets:"/>
+ <echo message=""/>
+ <echo message=" jar Creates the jar (.index and .core)"/>
+ <echo message=" test.jar Creates the test suite jar (.index and .core)"/>
+ <echo message=" doc Creates the API documentation"/>
+ <echo message=" release Creates the jar and a distributable file"/>
+ </target>
+
+ <target name="init">
+ <property name="dist.version" value="${version}${version_suffix}"/>
+ <property name="dist.name" value="tmapi-${dist.version}"/>
+
+ <property name="tmapi.jar" value="${dist.name}.jar"/>
+ <property name="tmapi-tests.jar" value="${dist.name}-tests.jar"/>
+ <property name="tmapi.tar" value="${dist.name}.tar"/>
+ <property name="tmapi.tar.gz" value="${tmapi.tar}.gz"/>
+ <property name="tmapi.zip" value="${dist.name}.zip"/>
+
+ <property name="dir.build" value="${basedir}/build"/>
+ <property name="dir.dist.root" value="${dir.build}/dist"/>
+ <property name="dir.dist" value="${dir.dist.root}/${dist.name}"/>
+ <property name="dir.build.classes" value="${dir.build}/classes"/>
+ <property name="dir.build.tests" value="${dir.build}/tests"/>
+ <property name="dir.javadocs" value="${dir.dist}/docs/api"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Clean targets -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <delete dir="${dir.build}"/>
+ <delete dir="${dir.javadocs}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare" depends="init">
+ <mkdir dir="${dir.build}"/>
+ <mkdir dir="${dir.build.classes}"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Tests -->
+ <!-- =================================================================== -->
+ <target name="test" depends="compile">
+ <mkdir dir="${dir.build.tests}"/>
+ <javac destdir="${dir.build.tests}"
+ debug="${debug}"
+ optimize="${optimize}"
+ target="1.5">
+ <classpath>
+ <pathelement location="${dir.build.classes}"/>
+ <pathelement location="${lib.junit}"/>
+ </classpath>
+ <src path="${dir.test}"/>
+ </javac>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Internal Tests -->
+ <!-- =================================================================== -->
+ <target name="internal.tests" depends="test">
+ <mkdir dir="tmp/META-INF/services"/>
+ <copy todir="tmp/META-INF/services">
+ <fileset dir="${dir.test}">
+ <include name="org.tmapi.core.TopicMapSystemFactory"/>
+ </fileset>
+ </copy>
+ <jar jarfile="tmapi-test.jar" basedir="tmp"/>
+ <junit
+ printsummary="true" showoutput="false"
+ errorProperty="test.failed" failureProperty="test.failed">
+ <classpath>
+ <pathelement location="tmapi-test.jar"/>
+ <pathelement location="${dir.build.classes}"/>
+ <pathelement location="${dir.build.tests}"/>
+ </classpath>
+ <formatter type="plain"/>
+ <test name="org.tmapi.core.TestTopicMapSystemFactory"/>
+ </junit>
+ <fail message="Tests failed. Check test output." if="test.failed"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compile source files -->
+ <!-- =================================================================== -->
+ <target name="compile" depends="clean, prepare">
+ <javac destdir="${dir.build.classes}"
+ debug="${debug}"
+ target="1.5">
+ <src path="${dir.src}"/>
+ </javac>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the Java Docs -->
+ <!-- =================================================================== -->
+ <target name="doc" depends="init">
+ <mkdir dir="${dir.javadocs}"/>
+ <javadoc destdir="${dir.javadocs}"
+ packagenames="org.tmapi.*"
+ author="true"
+ version="true"
+ use="true"
+ splitindex="true"
+ noindex="false"
+ failonerror="true"
+ additionalparam="-author -version"
+ windowtitle="TMAPI v${dist.version}"
+ doctitle="TMAPI v${dist.version}">
+ <!--
+ <doclet name="net.gleamynode.apiviz.APIviz"
+ path="${dir.lib}/apiviz-1.1.3.jar">
+ </doclet>
+ -->
+ <fileset dir="${dir.src}">
+ </fileset>
+ </javadoc>
+
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the jar -->
+ <!-- =================================================================== -->
+ <target name="jar" depends="compile">
+ <jar destfile="${dir.build}/${tmapi.jar}">
+ <fileset dir="${dir.build.classes}">
+ <include name="**/*.*"/>
+ </fileset>
+ <manifest>
+ <attribute name="Implementation-Title" value="TMAPI"/>
+ <attribute name="Implementation-Version" value="${dist.version}"/>
+ <attribute name="Implementation-URL" value="http://www.tmapi.org/"/>
+ </manifest>
+ </jar>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the test jar -->
+ <!-- =================================================================== -->
+ <target name="test.jar" depends="test">
+ <jar destfile="${dir.build}/${tmapi-tests.jar}">
+ <fileset dir="${dir.build.tests}">
+ <include name="**/*.*"/>
+ </fileset>
+ <manifest>
+ <attribute name="Implementation-Title" value="TMAPI Tests"/>
+ <attribute name="Implementation-Version" value="${dist.version}"/>
+ <attribute name="Implementation-URL" value="http://www.tmapi.org/"/>
+ </manifest>
+ </jar>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares a distribution -->
+ <!-- =================================================================== -->
+ <target name="dist" depends="jar, test.jar, doc">
+ <mkdir dir="${dir.dist}"/>
+
+ <copy todir="${dir.dist}" file="${dir.build}/${tmapi.jar}"/>
+ <copy todir="${dir.dist}" file="${dir.build}/${tmapi-tests.jar}"/>
+
+ <copy todir="${dir.dist}/src">
+ <fileset dir="${dir.src}"/>
+ </copy>
+ <copy todir="${dir.dist}/test">
+ <fileset dir="${dir.test}"/>
+ </copy>
+ <copy todir="${dir.dist}/lib" file="${lib.junit}"/>
+ <copy todir="${dir.dist}/lib" file="${dir.lib}/LICENSE.junit.html"/>
+
+ <copy todir="${dir.dist}" file="CHANGES.txt"/>
+ <copy todir="${dir.dist}" file="LICENSE.txt"/>
+ <copy todir="${dir.dist}" file="README.txt"/>
+ <copy todir="${dir.dist}" file="TMAPI-1.0_MIGRATION.txt"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the distribution files (.zip and .tar.gz) -->
+ <!-- -->
+ <!-- Won't create the distribution files if a test fails -->
+ <!-- =================================================================== -->
+ <target name="release" depends="internal.tests, dist">
+ <tar destfile="${dir.dist.root}/${tmapi.tar}"
+ basedir="${dir.dist.root}"/>
+ <gzip src="${dir.dist.root}/${tmapi.tar}"
+ destfile="${dir.build}/${tmapi.tar.gz}" />
+ <delete file="${dir.dist.root}/${tmapi.tar}" />
+ <zip destfile="${dir.build}/${tmapi.zip}" basedir="${dir.dist.root}"/>
+ </target>
+</project>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2009-02-07 10:36:54
|
Revision: 100
http://tmapi.svn.sourceforge.net/tmapi/?rev=100&view=rev
Author: lheuer
Date: 2009-02-07 10:36:48 +0000 (Sat, 07 Feb 2009)
Log Message:
-----------
Updated build scripts
Modified Paths:
--------------
trunk/build.properties
trunk/build.xml
Modified: trunk/build.properties
===================================================================
--- trunk/build.properties 2009-02-06 16:33:02 UTC (rev 99)
+++ trunk/build.properties 2009-02-07 10:36:48 UTC (rev 100)
@@ -1,5 +1,5 @@
version=2.0
-version_suffix=a1
+version_suffix=a2
debug=off
optimize=on
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2009-02-06 16:33:02 UTC (rev 99)
+++ trunk/build.xml 2009-02-07 10:36:48 UTC (rev 100)
@@ -23,7 +23,7 @@
<property name="dir.test" value="${basedir}/src/test/java"/>
<property name="dir.lib" value="${basedir}/lib"/>
- <property name="lib.junit" value="${dir.lib}/junit-4.4.jar"/>
+ <property name="lib.junit" value="${dir.lib}/junit-4.5.jar"/>
<target name="help">
<echo message="--------------------"/>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <la...@us...> - 2009-07-07 18:17:55
|
Revision: 113
http://tmapi.svn.sourceforge.net/tmapi/?rev=113&view=rev
Author: larsga
Date: 2009-07-07 18:17:54 +0000 (Tue, 07 Jul 2009)
Log Message:
-----------
Added a main class for the -tests .jar and made it runnable.
Modified Paths:
--------------
trunk/build.xml
Added Paths:
-----------
trunk/src/test/java/org/tmapi/AllTests.java
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2009-07-07 18:04:58 UTC (rev 112)
+++ trunk/build.xml 2009-07-07 18:17:54 UTC (rev 113)
@@ -181,6 +181,7 @@
<attribute name="Implementation-Title" value="TMAPI Tests"/>
<attribute name="Implementation-Version" value="${dist.version}"/>
<attribute name="Implementation-URL" value="http://www.tmapi.org/"/>
+ <attribute name="Main-Class" value="org.tmapi.AllTests"/>
</manifest>
</jar>
</target>
Added: trunk/src/test/java/org/tmapi/AllTests.java
===================================================================
--- trunk/src/test/java/org/tmapi/AllTests.java (rev 0)
+++ trunk/src/test/java/org/tmapi/AllTests.java 2009-07-07 18:17:54 UTC (rev 113)
@@ -0,0 +1,41 @@
+/*
+ * The Topic Maps API (TMAPI) was created collectively by
+ * the membership of the tmapi-discuss mailing list
+ * <http://lists.sourceforge.net/mailman/listinfo/tmapi-discuss>,
+ * is hereby released into the public domain; and comes with
+ * NO WARRANTY.
+ *
+ * No one owns TMAPI: you may use it freely in both commercial and
+ * non-commercial applications, bundle it with your software
+ * distribution, include it on a CD-ROM, list the source code in a
+ * book, mirror the documentation at your own web site, or use it in
+ * any other way you see fit.
+ */
+package org.tmapi;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.tmapi.core.AllCoreTests;
+import org.tmapi.index.AllIndexTests;
+
+/**
+ * Provides a test suite which contains all test cases for TMAPI 2.0.
+ *
+ * @author <a href="http://tmapi.org/">The TMAPI Project</a>
+ * @author Lars Marius Garshol (larsga[at]garshol.priv.no) <a href="http:/www.garshol.priv.no/">LMG</a>
+ * @version $Rev: 109 $ - $Date: 2009-06-30 15:53:17 +0200 (Tue, 30 Jun 2009) $
+ */
+public class AllTests extends TestSuite {
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(suite());
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite();
+ suite.addTest(AllCoreTests.suite());
+ suite.addTest(AllIndexTests.suite());
+ return suite;
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2009-10-26 15:12:30
|
Revision: 130
http://tmapi.svn.sourceforge.net/tmapi/?rev=130&view=rev
Author: lheuer
Date: 2009-10-26 15:12:23 +0000 (Mon, 26 Oct 2009)
Log Message:
-----------
Updated CHANGES.txt
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/build.properties
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2009-10-22 13:31:17 UTC (rev 129)
+++ trunk/CHANGES.txt 2009-10-26 15:12:23 UTC (rev 130)
@@ -2,6 +2,13 @@
TMAPI Changes
=============
+TMAPI 2.0 RC1 - 2009-10-25
+--------------------------
+* More test cases (feature strings)
+* Added feature string to support Topic Maps engines which
+ model the type-instance relationship as association
+
+
TMAPI 2.0 alpha2 - 2009-07-23
-----------------------------
* Introduced MalformedIRIException
Modified: trunk/build.properties
===================================================================
--- trunk/build.properties 2009-10-22 13:31:17 UTC (rev 129)
+++ trunk/build.properties 2009-10-26 15:12:23 UTC (rev 130)
@@ -1,5 +1,5 @@
version=2.0
-version_suffix=b1
+version_suffix=RC1
debug=off
optimize=on
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-01-15 16:28:56
|
Revision: 138
http://tmapi.svn.sourceforge.net/tmapi/?rev=138&view=rev
Author: lheuer
Date: 2010-01-15 16:28:33 +0000 (Fri, 15 Jan 2010)
Log Message:
-----------
Applied changes suggested by Johannes Payr
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/src/test/java/org/tmapi/core/AbstractTestDatatypeAware.java
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2010-01-13 16:30:00 UTC (rev 137)
+++ trunk/CHANGES.txt 2010-01-15 16:28:33 UTC (rev 138)
@@ -2,12 +2,14 @@
TMAPI Changes
=============
-TMAPI 2.0 RC?!? - 2010-mm-dd
-----------------------------
+TMAPI 2.0 RC2 - 2010-mm-dd
+--------------------------
* Fixed TestLocator test case (engines are not required to support
application/x-www-form-urlencoded).
* Changed Construct.equals(other) / Construct.hashCode() to compare
the identity of objects.
+* Improved support for Topic Maps engines which represent numeric
+ values such as floats as numbers and not as String values.
TMAPI 2.0 RC1 - 2009-10-25
Modified: trunk/src/test/java/org/tmapi/core/AbstractTestDatatypeAware.java
===================================================================
--- trunk/src/test/java/org/tmapi/core/AbstractTestDatatypeAware.java 2010-01-13 16:30:00 UTC (rev 137)
+++ trunk/src/test/java/org/tmapi/core/AbstractTestDatatypeAware.java 2010-01-15 16:28:33 UTC (rev 138)
@@ -218,7 +218,8 @@
dt.setValue(value);
assertEquals(strValue, dt.getValue());
assertEquals(_xsdFloat, dt.getDatatype());
- assertEquals(new BigDecimal(strValue), dt.decimalValue());
+ assertTrue("Expected either BigDecimal(1976.0F).equals(dt.decimalValue()) or BigDecimal('1976.0').equals(dt.decimalValue())",
+ new BigDecimal(value).equals(dt.decimalValue()) || new BigDecimal(strValue).equals(dt.decimalValue()));
assertEquals(new BigInteger("1976"), dt.integerValue());
assertEquals(1976L, dt.longValue());
assertEquals(1976, dt.intValue());
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-02-19 12:53:16
|
Revision: 146
http://tmapi.svn.sourceforge.net/tmapi/?rev=146&view=rev
Author: lheuer
Date: 2010-02-19 12:53:09 +0000 (Fri, 19 Feb 2010)
Log Message:
-----------
Added one more illegal Variant test case which may be related to http://code.google.com/p/ontopia/issues/detail?id=209 or not.
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/src/test/java/org/tmapi/core/TestName.java
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2010-02-06 13:47:12 UTC (rev 145)
+++ trunk/CHANGES.txt 2010-02-19 12:53:09 UTC (rev 146)
@@ -2,6 +2,10 @@
TMAPI Changes
=============
+TMAPI 2.0.1 - 2010-mm-dd
+------------------------
+* Added one more illegal Variant scope test.
+
TMAPI 2.0 - 2010-02-06
----------------------
* Simplified TestItemIdentifierConstraint test case to avoid
Modified: trunk/src/test/java/org/tmapi/core/TestName.java
===================================================================
--- trunk/src/test/java/org/tmapi/core/TestName.java 2010-02-06 13:47:12 UTC (rev 145)
+++ trunk/src/test/java/org/tmapi/core/TestName.java 2010-02-19 12:53:09 UTC (rev 146)
@@ -173,4 +173,15 @@
// noop.
}
}
+
+ public void testVariantCreationIllegalEmptyArrayScope() {
+ final Name name = createName();
+ try {
+ name.createVariant("Variant");
+ fail("Creation of a variant with an empty scope is not allowed");
+ }
+ catch (ModelConstraintException ex) {
+ // noop.
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-02-19 14:31:32
|
Revision: 147
http://tmapi.svn.sourceforge.net/tmapi/?rev=147&view=rev
Author: lheuer
Date: 2010-02-19 14:31:25 +0000 (Fri, 19 Feb 2010)
Log Message:
-----------
Applied patch contributed by Benjamin Bock (illegal variant scope tests)
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/src/test/java/org/tmapi/core/TestName.java
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2010-02-19 12:53:09 UTC (rev 146)
+++ trunk/CHANGES.txt 2010-02-19 14:31:25 UTC (rev 147)
@@ -4,7 +4,7 @@
TMAPI 2.0.1 - 2010-mm-dd
------------------------
-* Added one more illegal Variant scope test.
+* Added more illegal Variant scope test.
TMAPI 2.0 - 2010-02-06
----------------------
Modified: trunk/src/test/java/org/tmapi/core/TestName.java
===================================================================
--- trunk/src/test/java/org/tmapi/core/TestName.java 2010-02-19 12:53:09 UTC (rev 146)
+++ trunk/src/test/java/org/tmapi/core/TestName.java 2010-02-19 14:31:25 UTC (rev 147)
@@ -184,4 +184,40 @@
// noop.
}
}
+
+ public void testVariantCreationWithDataTypeIllegalEmptyScope() {
+ final Name name = createName();
+ try {
+ final Locator dt = createLocator("http://www.example.org/datatype");
+ name.createVariant("Variant", dt, Collections.<Topic>emptySet());
+ fail("Creation of a variant with an empty scope is not allowed");
+ }
+ catch (ModelConstraintException ex) {
+ // noop.
+ }
+ }
+
+ public void testVariantCreationWithDataTypeIllegalNullScope() {
+ final Name name = createName();
+ try {
+ final Locator dt = createLocator("http://www.example.org/datatype");
+ name.createVariant("Variant", dt, (Topic[])null);
+ fail("Creation of a variant with a null scope is not allowed");
+ }
+ catch (ModelConstraintException ex) {
+ // noop.
+ }
+ }
+
+ public void testVariantCreationWithDataTypeIllegalEmptyArrayScope() {
+ final Name name = createName();
+ try {
+ final Locator dt = createLocator("http://www.example.org/datatype");
+ name.createVariant("Variant", dt);
+ fail("Creation of a variant with an empty scope is not allowed");
+ }
+ catch (ModelConstraintException ex) {
+ // noop.
+ }
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-02-24 13:13:05
|
Revision: 148
http://tmapi.svn.sourceforge.net/tmapi/?rev=148&view=rev
Author: lheuer
Date: 2010-02-24 13:12:59 +0000 (Wed, 24 Feb 2010)
Log Message:
-----------
First part of OSGification
Modified Paths:
--------------
trunk/build.properties
trunk/build.xml
Modified: trunk/build.properties
===================================================================
--- trunk/build.properties 2010-02-19 14:31:25 UTC (rev 147)
+++ trunk/build.properties 2010-02-24 13:12:59 UTC (rev 148)
@@ -1,5 +1,6 @@
version=2.0.1
-version_suffix=snapshot
+# If the suffix is provided, it MUST start with "."
+version_suffix=.snapshot
debug=off
optimize=on
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2010-02-19 14:31:25 UTC (rev 147)
+++ trunk/build.xml 2010-02-24 13:12:59 UTC (rev 148)
@@ -171,6 +171,13 @@
<attribute name="Implementation-Title" value="TMAPI"/>
<attribute name="Implementation-Version" value="${dist.version}"/>
<attribute name="Implementation-URL" value="http://www.tmapi.org/"/>
+ <!-- OSGi-specific -->
+ <attribute name="Export-Package" value="org.tmapi.core;version=${dist.version},org.tmapi.index;version=${dist.version}"/>
+ <attribute name="Bundle-Name" value="TMAPI"/>
+ <attribute name="Bundle-SymbolicName" value="org.tmapi"/>
+ <attribute name="Bundle-Vendor" value="TMAPI.org"/>
+ <attribute name="Bundle-Description" value="Common Topic Maps API"/>
+ <attribute name="Bundle-Version" value="${dist.version}"/>
</manifest>
</jar>
</target>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-02-27 14:34:59
|
Revision: 153
http://tmapi.svn.sourceforge.net/tmapi/?rev=153&view=rev
Author: lheuer
Date: 2010-02-27 14:34:53 +0000 (Sat, 27 Feb 2010)
Log Message:
-----------
Updated JUnit
Modified Paths:
--------------
trunk/build.xml
Added Paths:
-----------
trunk/lib/junit-4.8.1.jar
Removed Paths:
-------------
trunk/lib/junit-4.5.jar
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2010-02-26 23:20:22 UTC (rev 152)
+++ trunk/build.xml 2010-02-27 14:34:53 UTC (rev 153)
@@ -23,7 +23,7 @@
<property name="dir.test" value="${basedir}/src/test/java"/>
<property name="dir.lib" value="${basedir}/lib"/>
- <property name="lib.junit" value="${dir.lib}/junit-4.5.jar"/>
+ <property name="lib.junit" value="${dir.lib}/junit-4.8.1.jar"/>
<target name="help">
<echo message="--------------------"/>
Deleted: trunk/lib/junit-4.5.jar
===================================================================
(Binary files differ)
Added: trunk/lib/junit-4.8.1.jar
===================================================================
(Binary files differ)
Property changes on: trunk/lib/junit-4.8.1.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-02-27 18:45:22
|
Revision: 154
http://tmapi.svn.sourceforge.net/tmapi/?rev=154&view=rev
Author: lheuer
Date: 2010-02-27 18:45:15 +0000 (Sat, 27 Feb 2010)
Log Message:
-----------
Added OSGi support
Added package info
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/build.xml
Added Paths:
-----------
trunk/NOTICE.txt
trunk/lib/LICENSE.osgi.txt
trunk/lib/osgi.core.jar
trunk/src/main/java/org/tmapi/core/internal/
trunk/src/main/java/org/tmapi/core/internal/Activator.java
trunk/src/main/java/org/tmapi/core/internal/OsgiLocator.java
trunk/src/main/java/org/tmapi/core/internal/package-info.java
trunk/src/main/java/org/tmapi/core/package-info.java
trunk/src/main/java/org/tmapi/index/package-info.java
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2010-02-27 14:34:53 UTC (rev 153)
+++ trunk/CHANGES.txt 2010-02-27 18:45:15 UTC (rev 154)
@@ -5,6 +5,7 @@
TMAPI 2.0.1 - 2010-mm-dd
------------------------
* Added more illegal Variant scope test.
+* Added support for OSGi
TMAPI 2.0 - 2010-02-06
----------------------
Added: trunk/NOTICE.txt
===================================================================
--- trunk/NOTICE.txt (rev 0)
+++ trunk/NOTICE.txt 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,9 @@
+The classes
+
+* org.tmapi.core.internal.OSGILocator
+* org.tmapi.core.internal.Activator
+
+were copied (and modified) from the Apache ServiceMix 4.0
+<http://servicemix.apache.org> project and therefor are
+licensed under the Apache License 2.0
+<http://www.apache.org/licenses/LICENSE-2.0>.
Modified: trunk/build.xml
===================================================================
--- trunk/build.xml 2010-02-27 14:34:53 UTC (rev 153)
+++ trunk/build.xml 2010-02-27 18:45:15 UTC (rev 154)
@@ -24,6 +24,7 @@
<property name="dir.lib" value="${basedir}/lib"/>
<property name="lib.junit" value="${dir.lib}/junit-4.8.1.jar"/>
+ <property name="lib.osgi" value="${dir.lib}/osgi.core.jar"/>
<target name="help">
<echo message="--------------------"/>
@@ -85,6 +86,7 @@
<classpath>
<pathelement location="${dir.build.classes}"/>
<pathelement location="${lib.junit}"/>
+ <pathelement location="${lib.osgi}"/>
</classpath>
<src path="${dir.test}"/>
</javac>
@@ -98,19 +100,26 @@
TopicMapSystemFactory
-->
<!-- =================================================================== -->
- <target name="internal.tests" depends="test">
+ <target name="internal.tests" depends="test, jar">
<mkdir dir="tmp/META-INF/services"/>
<copy todir="tmp/META-INF/services">
<fileset dir="${dir.test}/org/tmapi/core">
<include name="org.tmapi.core.TopicMapSystemFactory"/>
</fileset>
</copy>
- <jar jarfile="tmapi-test.jar" basedir="tmp"/>
+ <jar jarfile="tmapi-test.jar" basedir="tmp">
+ <manifest>
+ <attribute name="Import-Package" value="org.tmapi.core,org.tmapi.index"/>
+ <attribute name="Bundle-Name" value="tmapitest"/>
+ <attribute name="Bundle-SymbolicName" value="org.tmapi.test"/>
+ </manifest>
+ </jar>
<junit
printsummary="true" showoutput="false"
errorProperty="test.failed" failureProperty="test.failed">
<classpath>
<pathelement location="${lib.junit}"/>
+ <pathelement location="${lib.osgi}"/>
<pathelement location="tmapi-test.jar"/>
<pathelement location="${dir.build.classes}"/>
<pathelement location="${dir.build.tests}"/>
@@ -129,6 +138,9 @@
debug="${debug}"
target="1.5">
<src path="${dir.src}"/>
+ <classpath>
+ <pathelement location="${lib.osgi}"/>
+ </classpath>
</javac>
</target>
@@ -147,14 +159,14 @@
failonerror="true"
additionalparam="-author -version"
windowtitle="TMAPI v${dist.version}"
- doctitle="TMAPI v${dist.version}">
+ doctitle="TMAPI v${dist.version}"
+ sourcepath="${dir.src}"
+ excludepackagenames="org.tmapi.core.internal.*">
<!--
<doclet name="net.gleamynode.apiviz.APIviz"
path="${dir.lib}/apiviz-1.1.3.jar">
</doclet>
-->
- <fileset dir="${dir.src}">
- </fileset>
</javadoc>
</target>
@@ -173,10 +185,12 @@
<attribute name="Implementation-URL" value="http://www.tmapi.org/"/>
<!-- OSGi-specific -->
<attribute name="Export-Package" value="org.tmapi.core;version=${dist.version},org.tmapi.index;version=${dist.version}"/>
+ <attribute name="Import-Package" value="org.osgi.framework"/>
<attribute name="Bundle-Name" value="TMAPI"/>
<attribute name="Bundle-SymbolicName" value="org.tmapi"/>
<attribute name="Bundle-Vendor" value="TMAPI.org"/>
<attribute name="Bundle-Description" value="Common Topic Maps API"/>
+ <attribute name="Bundle-Activator" value="org.tmapi.core.internal.Activator"/>
<attribute name="Bundle-Version" value="${dist.version}"/>
</manifest>
</jar>
@@ -236,6 +250,7 @@
<copy todir="${dir.dist}" file="CHANGES.txt"/>
<copy todir="${dir.dist}" file="LICENSE.txt"/>
+ <copy todir="${dir.dist}" file="NOTICE.txt"/>
<copy todir="${dir.dist}" file="README.txt"/>
<copy todir="${dir.dist}" file="TMAPI-1.0_MIGRATION.txt"/>
</target>
Added: trunk/lib/LICENSE.osgi.txt
===================================================================
--- trunk/lib/LICENSE.osgi.txt (rev 0)
+++ trunk/lib/LICENSE.osgi.txt 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,42 @@
+OSGi Specification License, Version 1.0.
+
+The OSGi Alliance ("OSGi Alliance") hereby grants you a fully-paid, non-
+exclusive, non-transferable, worldwide, limited license (without the right to
+sublicense), under the OSGi Alliance's applicable intellectual property rights
+to view, download, and reproduce the OSGi Specification ("Specification") which
+follows this License Agreement ("Agreement"). You are not authorized to create
+any derivative work of the Specification. The OSGi Alliance also grants you a
+perpetual, non-exclusive, worldwide, fully paid-up, royalty free, limited
+license (without the right to sublicense) under any applicable copyrights, to
+create and/or distribute an implementation of the Specification that: (i) fully
+implements the Specification including all its required interfaces and
+functionality; (ii) does not modify, subset, superset or otherwise extend the
+OSGi Name Space, or include any public or protected packages, classes, Java
+interfaces, fields or methods within the OSGi Name Space other than those
+required and authorized by the Specification. An implementation that does not
+satisfy limitations (i)-(ii) is not considered an implementation of the
+Specification, does not receive the benefits of this license, and must not be
+described as an implementation of the Specification. An implementation of the
+Specification must not claim to be a compliant implementation of the
+Specification unless it passes the OSGi Alliance Compliance Tests for the
+Specification in accordance with OSGi Alliance processes. "OSGi Name Space"
+shall mean the public class or interface declarations whose names begin with
+"org.osgi" or any recognized successors or replacements thereof.
+
+THE SPECIFICATION IS PROVIDED "AS IS," AND THE OSGi ALLIANCE, ITS MEMBERS AND
+ANY OTHER AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE
+SPECIFICATION ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH
+CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR
+OTHER RIGHTS. THE OSGi ALLIANCE, ITS MEMBERS AND ANY OTHER AUTHORS WILL NOT BE
+LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF ANY USE OF THE SPECIFICATION OR THE PERFORMANCE OR IMPLEMENTATION
+OF THE CONTENTS THEREOF.
+
+The name and trademarks of the OSGi Alliance or any other Authors may NOT be
+used in any manner, including advertising or publicity pertaining to the
+Specification or its contents without specific, written prior permission. Title
+to copyright in the Specification will at all times remain with the Authors.
+
+No other rights are granted by implication, estoppel or otherwise.
Added: trunk/lib/osgi.core.jar
===================================================================
(Binary files differ)
Property changes on: trunk/lib/osgi.core.jar
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/src/main/java/org/tmapi/core/internal/Activator.java
===================================================================
--- trunk/src/main/java/org/tmapi/core/internal/Activator.java (rev 0)
+++ trunk/src/main/java/org/tmapi/core/internal/Activator.java 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,147 @@
+/**
+ * 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.tmapi.core.internal;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.SynchronousBundleListener;
+
+@SuppressWarnings("unchecked")
+public class Activator implements BundleActivator, SynchronousBundleListener {
+
+ private ConcurrentMap<Long, Map<String, Callable<Class>>> factories = new ConcurrentHashMap<Long, Map<String, Callable<Class>>>();
+
+ private BundleContext _bundleContext;
+
+ public synchronized void start(BundleContext bundleContext) throws Exception {
+ _bundleContext = bundleContext;
+ bundleContext.addBundleListener(this);
+ for (Bundle bundle : bundleContext.getBundles()) {
+ if (bundle.getState() == Bundle.RESOLVED || bundle.getState() == Bundle.STARTING ||
+ bundle.getState() == Bundle.ACTIVE || bundle.getState() == Bundle.STOPPING) {
+ register(bundle);
+ }
+ }
+ }
+
+ @SuppressWarnings("boxing")
+ public synchronized void stop(BundleContext bundleContext) throws Exception {
+ bundleContext.removeBundleListener(this);
+ while (!factories.isEmpty()) {
+ unregister(factories.keySet().iterator().next());
+ }
+ _bundleContext = null;
+ }
+
+ public void bundleChanged(BundleEvent event) {
+ if (event.getType() == BundleEvent.RESOLVED) {
+ register(event.getBundle());
+ } else if (event.getType() == BundleEvent.UNRESOLVED || event.getType() == BundleEvent.UNINSTALLED) {
+ unregister(event.getBundle().getBundleId());
+ }
+ }
+
+ protected void register(final Bundle bundle) {
+ Map<String, Callable<Class>> map = factories.get(bundle.getBundleId());
+ Enumeration e = bundle.findEntries("META-INF/services/", "*", false);
+ if (e != null) {
+ while (e.hasMoreElements()) {
+ final URL u = (URL) e.nextElement();
+ final String url = u.toString();
+ if (url.endsWith("/")) {
+ continue;
+ }
+ final String factoryId = url.substring(url.lastIndexOf("/") + 1);
+ if (map == null) {
+ map = new HashMap<String, Callable<Class>>();
+ factories.put(bundle.getBundleId(), map);
+ }
+ map.put(factoryId, new BundleFactoryLoader(factoryId, u, bundle));
+ }
+ }
+ if (map != null) {
+ for (Map.Entry<String, Callable<Class>> entry : map.entrySet()) {
+ OsgiLocator.register(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ protected void unregister(long bundleId) {
+ Map<String, Callable<Class>> map = factories.remove(bundleId);
+ if (map != null) {
+ for (Map.Entry<String, Callable<Class>> entry : map.entrySet()) {
+ OsgiLocator.unregister(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ private class BundleFactoryLoader implements Callable<Class> {
+ //private final String factoryId;
+ private final URL u;
+ private final Bundle bundle;
+
+ public BundleFactoryLoader(String factoryId, URL u, Bundle bundle) {
+ //this.factoryId = factoryId;
+ this.u = u;
+ this.bundle = bundle;
+ }
+
+ public Class call() throws Exception {
+ try {
+ BufferedReader br = new BufferedReader(new InputStreamReader(u.openStream(), "UTF-8"));
+ String factoryClassName = br.readLine();
+ br.close();
+ return bundle.loadClass(factoryClassName);
+ } catch (Exception e) {
+ throw e;
+ } catch (Error e) {
+ throw e;
+ }
+ }
+
+ @Override
+ public String toString() {
+ return u.toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return u.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof BundleFactoryLoader) {
+ return u.equals(((BundleFactoryLoader) obj).u);
+ } else {
+ return false;
+ }
+ }
+ }
+}
Added: trunk/src/main/java/org/tmapi/core/internal/OsgiLocator.java
===================================================================
--- trunk/src/main/java/org/tmapi/core/internal/OsgiLocator.java (rev 0)
+++ trunk/src/main/java/org/tmapi/core/internal/OsgiLocator.java 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,68 @@
+/**
+ * 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.tmapi.core.internal;
+
+import java.util.concurrent.Callable;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.ArrayList;
+
+public class OsgiLocator {
+
+ private static Map<String, List<Callable<Class>>> _factories;
+
+ private OsgiLocator() {
+ }
+
+ public static synchronized void unregister(String id, Callable<Class> factory) {
+ if (_factories != null) {
+ List<Callable<Class>> l = _factories.get(id);
+ if (l != null) {
+ l.remove(factory);
+ }
+ }
+ }
+
+ public static synchronized void register(String id, Callable<Class> factory) {
+ if (_factories == null) {
+ _factories = new HashMap<String, List<Callable<Class>>>();
+ }
+ List<Callable<Class>> l = _factories.get(id);
+ if (l == null) {
+ l = new ArrayList<Callable<Class>>();
+ _factories.put(id, l);
+ }
+ l.add(factory);
+ }
+
+ public static synchronized Class locate(String factoryId) {
+ if (_factories != null) {
+ List<Callable<Class>> l = _factories.get(factoryId);
+ if (l != null && !l.isEmpty()) {
+ Callable<Class> c = l.get(l.size() - 1);
+ try {
+ return c.call();
+ }
+ catch (Exception e) {
+ }
+ }
+ }
+ return null;
+ }
+
+}
Added: trunk/src/main/java/org/tmapi/core/internal/package-info.java
===================================================================
--- trunk/src/main/java/org/tmapi/core/internal/package-info.java (rev 0)
+++ trunk/src/main/java/org/tmapi/core/internal/package-info.java 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,18 @@
+/*
+ * The Topic Maps API (TMAPI) was created collectively by
+ * the membership of the tmapi-discuss mailing list
+ * <http://lists.sourceforge.net/mailman/listinfo/tmapi-discuss>,
+ * is hereby released into the public domain; and comes with
+ * NO WARRANTY.
+ *
+ * No one owns TMAPI: you may use it freely in both commercial and
+ * non-commercial applications, bundle it with your software
+ * distribution, include it on a CD-ROM, list the source code in a
+ * book, mirror the documentation at your own web site, or use it in
+ * any other way you see fit.
+ */
+
+/**
+ * Internal OSGi-specific package. This is not meant to be used by client code.
+ */
+package org.tmapi.core.internal;
Added: trunk/src/main/java/org/tmapi/core/package-info.java
===================================================================
--- trunk/src/main/java/org/tmapi/core/package-info.java (rev 0)
+++ trunk/src/main/java/org/tmapi/core/package-info.java 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,19 @@
+/*
+ * The Topic Maps API (TMAPI) was created collectively by
+ * the membership of the tmapi-discuss mailing list
+ * <http://lists.sourceforge.net/mailman/listinfo/tmapi-discuss>,
+ * is hereby released into the public domain; and comes with
+ * NO WARRANTY.
+ *
+ * No one owns TMAPI: you may use it freely in both commercial and
+ * non-commercial applications, bundle it with your software
+ * distribution, include it on a CD-ROM, list the source code in a
+ * book, mirror the documentation at your own web site, or use it in
+ * any other way you see fit.
+ */
+
+/**
+ * Core interfaces which provide the functionality of the
+ * <a href="http://www.isotopicmaps.org/sam/sam-model">Topic Maps - Data Model</a>.
+ */
+package org.tmapi.core;
Added: trunk/src/main/java/org/tmapi/index/package-info.java
===================================================================
--- trunk/src/main/java/org/tmapi/index/package-info.java (rev 0)
+++ trunk/src/main/java/org/tmapi/index/package-info.java 2010-02-27 18:45:15 UTC (rev 154)
@@ -0,0 +1,19 @@
+/*
+ * The Topic Maps API (TMAPI) was created collectively by
+ * the membership of the tmapi-discuss mailing list
+ * <http://lists.sourceforge.net/mailman/listinfo/tmapi-discuss>,
+ * is hereby released into the public domain; and comes with
+ * NO WARRANTY.
+ *
+ * No one owns TMAPI: you may use it freely in both commercial and
+ * non-commercial applications, bundle it with your software
+ * distribution, include it on a CD-ROM, list the source code in a
+ * book, mirror the documentation at your own web site, or use it in
+ * any other way you see fit.
+ */
+
+/**
+ * Index interfaces which provide lookup of Topic Maps
+ * {@link org.tmapi.core.Construct}s.
+ */
+package org.tmapi.index;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <lh...@us...> - 2010-07-19 15:11:48
|
Revision: 181
http://tmapi.svn.sourceforge.net/tmapi/?rev=181&view=rev
Author: lheuer
Date: 2010-07-19 15:11:41 +0000 (Mon, 19 Jul 2010)
Log Message:
-----------
Applied Sven's patch, updated CHANGES.txt
Modified Paths:
--------------
trunk/CHANGES.txt
trunk/src/test/java/org/tmapi/core/TestTopicRemovableConstraint.java
Modified: trunk/CHANGES.txt
===================================================================
--- trunk/CHANGES.txt 2010-03-23 21:45:47 UTC (rev 180)
+++ trunk/CHANGES.txt 2010-07-19 15:11:41 UTC (rev 181)
@@ -2,6 +2,13 @@
TMAPI Changes
=============
+TMAPI 2.0.3 - 2010-mm-dd
+------------------------
+* Fixed bug in test (only relevant if the feature
+ "http://tmapi.org/features/type-instance-associations" is enabled)
+ reported and fixed by Sven Krosse
+
+
TMAPI 2.0.2 - 2010-03-18
------------------------
* Added TopicMap.getLocator() to return the storage address of
Modified: trunk/src/test/java/org/tmapi/core/TestTopicRemovableConstraint.java
===================================================================
--- trunk/src/test/java/org/tmapi/core/TestTopicRemovableConstraint.java 2010-03-23 21:45:47 UTC (rev 180)
+++ trunk/src/test/java/org/tmapi/core/TestTopicRemovableConstraint.java 2010-07-19 15:11:41 UTC (rev 181)
@@ -24,6 +24,8 @@
*/
public class TestTopicRemovableConstraint extends AbstractTMAPITestCase {
+ private static final String _FEATURE_TYPE_INSTANCE_ASSOCIATIONS= "http://tmapi.org/features/type-instance-associations";
+
public TestTopicRemovableConstraint(String name) {
super(name);
}
@@ -216,10 +218,20 @@
catch (TopicInUseException ex) {
assertEquals(topic, ex.getReporter());
}
- assertEquals(2, _tm.getTopics().size());
+ if (_sys.getFeature(_FEATURE_TYPE_INSTANCE_ASSOCIATIONS)) {
+ assertEquals(5, _tm.getTopics().size());
+ }
+ else{
+ assertEquals(2, _tm.getTopics().size());
+ }
topic2.removeType(topic);
topic.remove();
- assertEquals(1, _tm.getTopics().size());
+ if (_sys.getFeature(_FEATURE_TYPE_INSTANCE_ASSOCIATIONS)) {
+ assertEquals(4, _tm.getTopics().size());
+ }
+ else{
+ assertEquals(1, _tm.getTopics().size());
+ }
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|