Finished support of modifications in the meta cl and added ordering in meta contact groups

cusax-fix
Emil Ivov 20 years ago
parent c76eb1fb94
commit c28cfeb6b1

@ -0,0 +1,208 @@
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : 11 occurred at PC=0xB7EB2A10
Function=(null)
Library=/lib/tls/libc.so.6
NOTE: We are unable to locate the function name symbol for the error
just occurred. Please refer to release documentation for possible
reason and solutions.
Current Java thread:
at org.apache.xerces.parsers.XML11Configuration.<init>(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.<init>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:308)
at java.lang.Class.newInstance(Class.java:261)
at org.apache.xerces.parsers.ObjectFactory.newInstance(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.findJarServiceProvider(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
at org.apache.xerces.parsers.ObjectFactory.createObject(Unknown Source)
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.<init>(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.newDocumentBuilder(Unknown Source)
at net.java.sip.communicator.impl.history.HistoryServiceImpl.<init>(HistoryServiceImpl.java:65)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:308)
at java.lang.Class.newInstance(Class.java:261)
at org.ungoverned.gravity.servicebinder.InstanceManager.validate(InstanceManager.java:240)
- locked <0xabd952e0> (a org.ungoverned.gravity.servicebinder.InstanceManager)
at org.ungoverned.gravity.servicebinder.GenericActivator.initialize(GenericActivator.java:168)
at org.ungoverned.gravity.servicebinder.GenericActivator.start(GenericActivator.java:93)
at org.ungoverned.oscar.Noscar._startBundle(Noscar.java:1194)
at org.ungoverned.oscar.Noscar.startBundle(Noscar.java:1128)
at org.ungoverned.oscar.Noscar.setFrameworkStartLevel(Noscar.java:704)
- locked <0xabd307e8> (a org.ungoverned.oscar.Noscar)
at org.ungoverned.oscar.Noscar.start(Noscar.java:499)
- locked <0xabd307e8> (a org.ungoverned.oscar.Noscar)
at org.ungoverned.oscar.Main.main(Main.java:181)
Dynamic libraries:
08048000-08056000 r-xp 00000000 08:02 1307820 /usr/java/j2sdk1.4.2_08/bin/java
08056000-08059000 rwxp 0000d000 08:02 1307820 /usr/java/j2sdk1.4.2_08/bin/java
08059000-0864e000 rwxp 08059000 00:00 0 [heap]
a92a4000-a92b1000 r-xs 00000000 08:05 213601 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle11/version0.0/bundle.jar
a92b1000-a92b5000 r-xs 00000000 08:05 213594 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle10/version0.0/bundle.jar
a92b5000-a92c9000 r-xs 00000000 08:05 213587 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle9/version0.0/bundle.jar
a92c9000-a932b000 r-xs 00000000 08:02 164835 /usr/java/j2sdk1.4.2_08/demo/plugin/jfc/Java2D/Java2Demo.jar
a932b000-a938d000 r-xs 00000000 08:02 164577 /usr/java/j2sdk1.4.2_08/demo/jfc/Java2D/Java2Demo.jar
a938d000-a9869000 r-xs 00000000 08:02 164412 /usr/java/j2sdk1.4.2_08/lib/tools.jar
a9869000-a998d000 r-xs 00000000 08:02 164415 /usr/java/j2sdk1.4.2_08/lib/htmlconverter.jar
a998d000-a99af000 r-xs 00000000 08:02 164413 /usr/java/j2sdk1.4.2_08/lib/dt.jar
a99af000-a9ad0000 r-xs 00000000 08:02 164379 /usr/java/j2sdk1.4.2_08/jre/javaws/javaws.jar
a9ad0000-a9cb1000 r-xs 00000000 08:02 1341157 /usr/java/j2sdk1.4.2_08/jre/lib/plugin.jar
a9cb1000-a9cb4000 r-xs 00000000 08:02 1341098 /usr/java/j2sdk1.4.2_08/jre/lib/im/indicim.jar
a9cb4000-a9cb6000 r-xs 00000000 08:02 1341099 /usr/java/j2sdk1.4.2_08/jre/lib/im/thaiim.jar
a9cb6000-a9cc1000 r-xs 00000000 08:05 19522 /home/emcho/devel/sip-communicator-1.0/lib/retroweaver.jar
a9cc1000-a9cc3000 r-xs 00000000 08:05 19514 /home/emcho/devel/sip-communicator-1.0/lib/retroweaver-rt.jar
a9cc3000-a9d2d000 r-xs 00000000 08:05 19517 /home/emcho/devel/sip-communicator-1.0/lib/joscar-0.9.4-cvs-bin.jar
a9d2d000-a9d4c000 r-xs 00000000 08:02 310936 /usr/java/JBuilder2006/thirdparty/ant/lib/xml-apis.jar
a9d4c000-a9e43000 r-xs 00000000 08:02 310935 /usr/java/JBuilder2006/thirdparty/ant/lib/xercesImpl.jar
a9e43000-a9f38000 r-xs 00000000 08:02 310933 /usr/java/JBuilder2006/thirdparty/ant/lib/ant.jar
a9f38000-a9f39000 r-xs 00000000 08:02 310932 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-xslp.jar
a9f39000-a9f3b000 r-xs 00000000 08:02 310931 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-xalan1.jar
a9f3b000-a9f3f000 r-xs 00000000 08:02 310930 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-weblogic.jar
a9f3f000-a9f4b000 r-xs 00000000 08:02 310929 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-vaj.jar
a9f4b000-a9f5c000 r-xs 00000000 08:02 310928 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-trax.jar
a9f5c000-a9f5e000 r-xs 00000000 08:02 310927 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-swing.jar
a9f5e000-a9f5f000 r-xs 00000000 08:02 310926 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-stylebook.jar
a9f5f000-a9f68000 r-xs 00000000 08:02 310925 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-starteam.jar
a9f68000-a9fcc000 r-xs 00000000 08:02 310924 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-nodeps.jar
a9fcc000-a9fcf000 r-xs 00000000 08:02 310923 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-netrexx.jar
a9fcf000-a9fd2000 r-xs 00000000 08:02 310922 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-launcher.jar
a9fd2000-a9fe4000 r-xs 00000000 08:02 310921 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-junit.jar
a9fe4000-a9fea000 r-xs 00000000 08:02 310920 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-jsch.jar
a9fea000-a9fec000 r-xs 00000000 08:02 310919 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-jmf.jar
a9fec000-a9fee000 r-xs 00000000 08:02 310918 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-jdepend.jar
a9fee000-a9ff0000 r-xs 00000000 08:02 310917 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-javamail.jar
a9ff0000-a9ff1000 r-xs 00000000 08:02 310911 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-regexp.jar
a9ff1000-a9ffd000 r-xs 00000000 08:02 310910 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-oro.jar
a9ffd000-a9ffe000 r-xs 00000000 08:02 310909 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-log4j.jar
a9ffe000-aa001000 r-xs 00000000 08:02 310907 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-bcel.jar
aa001000-aa007000 r-xs 00000000 08:02 310916 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-jai.jar
aa007000-aa00a000 r-xs 00000000 08:02 310915 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-icontract.jar
aa00a000-aa013000 r-xs 00000000 08:02 310914 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-commons-net.jar
aa013000-aa014000 r-xs 00000000 08:02 310913 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-commons-logging.jar
aa014000-aa015000 r-xs 00000000 08:02 310912 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-resolver.jar
aa015000-aa019000 r-xs 00000000 08:02 310908 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-apache-bsf.jar
aa019000-aa01e000 r-xs 00000000 08:05 20490 /home/emcho/devel/sip-communicator-1.0/sc-bundles/util.jar
aa01e000-aa02a000 r-xs 00000000 08:05 20495 /home/emcho/devel/sip-communicator-1.0/sc-bundles/netaddr.jar
aa02a000-aa033000 r-xs 00000000 08:05 20491 /home/emcho/devel/sip-communicator-1.0/sc-bundles/configuration.jar
aa033000-aa081000 r-xs 00000000 08:05 19519 /home/emcho/devel/sip-communicator-1.0/lib/skinlf.jar
aa081000-aa0fb000 r-xs 00000000 08:05 19509 /home/emcho/devel/sip-communicator-1.0/lib/oscar-aim.jar
aa0fb000-aa134000 r-xs 00000000 08:05 19516 /home/emcho/devel/sip-communicator-1.0/lib/jaxen-1.1-beta-8.jar
aa134000-aa13a000 r-xs 00000000 08:05 19496 /home/emcho/devel/sip-communicator-1.0/lib/jmf-sol/libjmutil.so.jar
aa13a000-aa357000 r-xs 00000000 08:05 19495 /home/emcho/devel/sip-communicator-1.0/lib/jmf-sol/jmf-native.jar
aa357000-aa571000 r-xs 00000000 08:05 19494 /home/emcho/devel/sip-communicator-1.0/lib/jmf-sol/jmf.jar
aa571000-aa5b9000 r-xs 00000000 08:05 19503 /home/emcho/devel/sip-communicator-1.0/lib/jmf-win/sound.jar
aa5b9000-aa7b1000 r-xs 00000000 08:05 19504 /home/emcho/devel/sip-communicator-1.0/lib/jmf-win/jmf-native.jar
aa7b1000-aa9af000 r-xs 00000000 08:05 19502 /home/emcho/devel/sip-communicator-1.0/lib/jmf-win/jmf.jar
aa9af000-aaa3f000 r-xs 00000000 08:05 19487 /home/emcho/devel/sip-communicator-1.0/lib/jmf-lin/jmf-native.jar
aaa3f000-aabff000 r-xs 00000000 08:05 19486 /home/emcho/devel/sip-communicator-1.0/lib/jmf-lin/jmf.jar
aabff000-aac1b000 r-xs 00000000 08:05 32779 /home/emcho/devel/sip-communicator-1.0/lib/bundle/bundlerepository.jar
aac1b000-aac37000 r-xs 00000000 08:05 19530 /home/emcho/devel/sip-communicator-1.0/lib/Stun4J.jar
aac37000-aac49000 r-xs 00000000 08:05 19525 /home/emcho/devel/sip-communicator-1.0/lib/servicebinder.jar
aac49000-aac55000 r-xs 00000000 08:05 213572 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle8/version0.0/bundle.jar
aac55000-aac5e000 r-xs 00000000 08:05 213565 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle7/version0.0/bundle.jar
aac5e000-aac63000 r-xs 00000000 08:05 213558 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle6/version0.0/bundle.jar
aac63000-aac6d000 r-xs 00000000 08:05 213539 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle3/version0.0/embedded/kxml.jar
aac6d000-aac7f000 r-xs 00000000 08:05 213536 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle3/version0.0/bundle.jar
aac7f000-aac9b000 r-xs 00000000 08:05 213528 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle2/version0.0/bundle.jar
aac9b000-aaca5000 r-xs 00000000 08:05 213496 /home/emcho/devel/sip-communicator-1.0/sip-communicator.utest.bin/bundle1/version0.0/bundle.jar
aae25000-aae2b000 r-xs 00000000 08:05 19508 /home/emcho/devel/sip-communicator-1.0/lib/osgi.jar
aae2b000-aae54000 r-xs 00000000 08:05 19523 /home/emcho/devel/sip-communicator-1.0/lib/oscar.jar
aae54000-aaec0000 r-xs 00000000 08:05 19511 /home/emcho/devel/sip-communicator-1.0/lib/nist-sip-1.2.jar
aaec0000-aaee0000 r-xs 00000000 08:05 19529 /home/emcho/devel/sip-communicator-1.0/lib/nist-sdp-1.0.jar
aaee0000-aaee9000 r-xs 00000000 08:05 19512 /home/emcho/devel/sip-communicator-1.0/lib/moduleloader.jar
aaee9000-aaf07000 r-xs 00000000 08:05 19526 /home/emcho/devel/sip-communicator-1.0/lib/junit.jar
aaf07000-aaf14000 r-xs 00000000 08:05 19507 /home/emcho/devel/sip-communicator-1.0/lib/JainSipApi1.1.jar
aaf14000-aaf18000 r-xs 00000000 08:05 32782 /home/emcho/devel/sip-communicator-1.0/lib/bundle/tablelayout.jar
aaf18000-aaf1a000 r-xs 00000000 08:05 32787 /home/emcho/devel/sip-communicator-1.0/lib/bundle/simple.jar
aaf1a000-aaf1c000 r-xs 00000000 08:05 32774 /home/emcho/devel/sip-communicator-1.0/lib/bundle/shelltui.jar
aaf1c000-aaf24000 r-xs 00000000 08:05 32776 /home/emcho/devel/sip-communicator-1.0/lib/bundle/shellplugin.jar
aaf24000-aaf27000 r-xs 00000000 08:05 32777 /home/emcho/devel/sip-communicator-1.0/lib/bundle/shellgui.jar
aaf27000-aaf31000 r-xs 00000000 08:05 32788 /home/emcho/devel/sip-communicator-1.0/lib/bundle/shell.jar
aaf31000-aaf32000 r-xs 00000000 08:05 32781 /home/emcho/devel/sip-communicator-1.0/lib/bundle/listener.jar
aaf32000-aaf50000 r-xs 00000000 08:05 32785 /home/emcho/devel/sip-communicator-1.0/lib/bundle/junit.jar
aaf50000-aaf51000 r-xs 00000000 08:05 32778 /home/emcho/devel/sip-communicator-1.0/lib/bundle/importrange.jar
aaf51000-aaf52000 r-xs 00000000 08:05 32775 /home/emcho/devel/sip-communicator-1.0/lib/bundle/importfilter.jar
aaf52000-aaf53000 r-xs 00000000 08:05 32783 /home/emcho/devel/sip-communicator-1.0/lib/bundle/exportfilter.jar
aaf53000-aaf61000 r-xs 00000000 08:02 1406212 /usr/java/JMF-2.1.1e/lib/multiplayer.jar
aaf61000-aaf6a000 r-xs 00000000 08:02 1406209 /usr/java/JMF-2.1.1e/lib/mediaplayer.jar
aaf6a000-ab126000 r-xs 00000000 08:02 1406203 /usr/java/JMF-2.1.1e/lib/jmf.jar
ab126000-ab144000 r-xs 00000000 08:02 314549 /usr/java/JBuilder2006/thirdparty/junit3.8/junit.jar
ab144000-ab200000 r-xs 00000000 08:02 181629 /usr/java/j2sdk1.4.2_08/jre/lib/ext/localedata.jar
ab200000-ab20d000 r-xs 00000000 08:02 181628 /usr/java/j2sdk1.4.2_08/jre/lib/ext/ldapsec.jar
ab20d000-ab229000 r-xs 00000000 08:02 181627 /usr/java/j2sdk1.4.2_08/jre/lib/ext/sunjce_provider.jar
ab5a9000-ab5d4000 r-xp 00000000 08:02 181655 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libjdwp.so
ab5d4000-ab5d6000 rwxp 0002a000 08:02 181655 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libjdwp.so
ab5d9000-ab620000 r-xp 00000000 08:02 325773 /usr/lib/locale/locale-archive
b58c8000-b5e68000 r-xs 00000000 08:02 1341164 /usr/java/j2sdk1.4.2_08/jre/lib/charsets.jar
b5e68000-b5e79000 r-xs 00000000 08:02 1341174 /usr/java/j2sdk1.4.2_08/jre/lib/jce.jar
b5e79000-b5f56000 r-xs 00000000 08:02 1341152 /usr/java/j2sdk1.4.2_08/jre/lib/jsse.jar
b5f56000-b5f6c000 r-xs 00000000 08:02 1341162 /usr/java/j2sdk1.4.2_08/jre/lib/sunrsasign.jar
b5fb6000-b7961000 r-xs 00000000 08:02 1341166 /usr/java/j2sdk1.4.2_08/jre/lib/rt.jar
b7961000-b7975000 r-xp 00000000 08:02 181640 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libzip.so
b7975000-b7978000 rwxp 00013000 08:02 181640 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libzip.so
b7978000-b7998000 r-xp 00000000 08:02 181651 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libjava.so
b7998000-b799a000 rwxp 0001f000 08:02 181651 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libjava.so
b799a000-b79aa000 r-xp 00000000 08:02 181635 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libverify.so
b79aa000-b79ac000 rwxp 0000f000 08:02 181635 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libverify.so
b79ac000-b79b6000 r-xp 00000000 08:02 977620 /lib/tls/libnss_files-2.3.6.so
b79b6000-b79b8000 rwxp 00009000 08:02 977620 /lib/tls/libnss_files-2.3.6.so
b79b8000-b79c0000 r-xp 00000000 08:02 977622 /lib/tls/libnss_nis-2.3.6.so
b79c0000-b79c2000 rwxp 00008000 08:02 977622 /lib/tls/libnss_nis-2.3.6.so
b79c2000-b79c9000 r-xp 00000000 08:02 977618 /lib/tls/libnss_compat-2.3.6.so
b79c9000-b79cb000 rwxp 00006000 08:02 977618 /lib/tls/libnss_compat-2.3.6.so
b79cd000-b79d3000 r-xs 00000000 08:02 229464 /usr/java/JBuilder2006/lib/unittest.jar
b79d3000-b79d6000 r-xs 00000000 08:02 181626 /usr/java/j2sdk1.4.2_08/jre/lib/ext/dnsns.jar
b79d6000-b79d9000 r-xp 00000000 08:02 181661 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libdt_socket.so
b79d9000-b79da000 rwxp 00002000 08:02 181661 /usr/java/j2sdk1.4.2_08/jre/lib/i386/libdt_socket.so
b79da000-b79fe000 r-xp 00000000 08:02 977507 /lib/tls/libm-2.3.6.so
b79fe000-b7a00000 rwxp 00023000 08:02 977507 /lib/tls/libm-2.3.6.so
b7a00000-b7a12000 r-xp 00000000 08:02 977525 /lib/tls/libnsl-2.3.6.so
b7a12000-b7a14000 rwxp 00012000 08:02 977525 /lib/tls/libnsl-2.3.6.so
b7a16000-b7e1c000 r-xp 00000000 08:02 181646 /usr/java/j2sdk1.4.2_08/jre/lib/i386/client/libjvm.so
b7e1c000-b7e37000 rwxp 00405000 08:02 181646 /usr/java/j2sdk1.4.2_08/jre/lib/i386/client/libjvm.so
b7e4b000-b7f79000 r-xp 00000000 08:02 977500 /lib/tls/libc-2.3.6.so
b7f79000-b7f7e000 r-xp 0012e000 08:02 977500 /lib/tls/libc-2.3.6.so
b7f7e000-b7f81000 rwxp 00133000 08:02 977500 /lib/tls/libc-2.3.6.so
b7f83000-b7f85000 r-xp 00000000 08:02 977506 /lib/tls/libdl-2.3.6.so
b7f85000-b7f87000 rwxp 00001000 08:02 977506 /lib/tls/libdl-2.3.6.so
b7f87000-b7f95000 r-xp 00000000 08:02 978925 /lib/tls/libpthread-2.3.6.so
b7f95000-b7f97000 rwxp 0000d000 08:02 978925 /lib/tls/libpthread-2.3.6.so
b7f9a000-b7f9c000 r-xs 00000000 08:02 310906 /usr/java/JBuilder2006/thirdparty/ant/lib/ant-antlr.jar
b7f9c000-b7fa0000 rwxs 00000000 08:02 342436 /tmp/hsperfdata_emcho/5546
b7fa0000-b7fa8000 r-xp 00000000 08:02 181642 /usr/java/j2sdk1.4.2_08/jre/lib/i386/native_threads/libhpi.so
b7fa8000-b7fa9000 rwxp 00007000 08:02 181642 /usr/java/j2sdk1.4.2_08/jre/lib/i386/native_threads/libhpi.so
b7fab000-b7fc1000 r-xp 00000000 08:02 977282 /lib/ld-2.3.6.so
b7fc1000-b7fc3000 rwxp 00015000 08:02 977282 /lib/ld-2.3.6.so
bffaa000-bffc1000 rwxp bffaa000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
Heap at VM Abort:
Heap
def new generation total 576K, used 98K [0xab820000, 0xab8c0000, 0xabd00000)
eden space 512K, 14% used [0xab820000, 0xab832850, 0xab8a0000)
from space 64K, 37% used [0xab8b0000, 0xab8b60f8, 0xab8c0000)
to space 64K, 0% used [0xab8a0000, 0xab8a0000, 0xab8b0000)
tenured generation total 1408K, used 639K [0xabd00000, 0xabe60000, 0xaf820000)
the space 1408K, 45% used [0xabd00000, 0xabd9fcd0, 0xabd9fe00, 0xabe60000)
compacting perm gen total 4096K, used 2759K [0xaf820000, 0xafc20000, 0xb3820000)
the space 4096K, 67% used [0xaf820000, 0xafad1db0, 0xafad1e00, 0xafc20000)
Local Time = Tue Mar 14 15:03:54 2006
Elapsed Time = 3
#
# The exception above was detected in native code outside the VM
#
# Java VM: Java HotSpot(TM) Client VM (1.4.2_08-b03 mixed mode)
#

@ -13,7 +13,9 @@
import net.java.sip.communicator.util.*;
/**
* A straightforward implementation of the meta contact group.
* A straightforward implementatiokn of the meta contact group. The group
* implements a simple algorithme of sorting its children according to their
* status.
*
* @author Emil Ivov
*/
@ -30,7 +32,7 @@ public class MetaContactGroupImpl
/**
* A list containing all child contacts.
*/
private Vector childContacts = new Vector();
private TreeSet childContacts = new TreeSet();
/**
* A list of the contact groups encapsulated by this MetaContactGroup
@ -335,8 +337,6 @@ public MetaContactGroupImpl findMetaContactGroupByContactGroup(
return null;
}
/**
* Returns the meta contact on the specified index.
*
@ -348,7 +348,23 @@ public MetaContactGroupImpl findMetaContactGroupByContactGroup(
public MetaContact getMetaContact(int index) throws
IndexOutOfBoundsException
{
return (MetaContact)childContacts.get(index);
int i = 0;
synchronized (childContacts)
{
Iterator childrenIter = childContacts.iterator();
while (childrenIter.hasNext())
{
MetaContact result = (MetaContact) childrenIter.next();
if (i++ == index)
return result;
}
}
//if we got here then index was out of the bounds
throw new IndexOutOfBoundsException(i
+ " is larger than size()="
+ childContacts.size());
}
/**
@ -356,19 +372,59 @@ public MetaContact getMetaContact(int index) throws
* contacts.
* @param metaContact the <tt>MetaContact</tt> to add in the local vector.
*/
void addMetaContact(MetaContact metaContact)
void addMetaContact(MetaContactImpl metaContact)
{
synchronized (childContacts)
{
//set this group as a callback in the meta contact
metaContact.setParentGroup(this);
this.childContacts.add(metaContact);
}
}
/**
* Adds the <tt>metaContact</tt> to the local list of child
* contacts without setting its parrent contact and without any
* synchronization. This method is meant for use _PRIMARILY_ by the
* <tt>MetaContact</tt> itself upon chenge in its encapsulated protocol
* specific contacts.
*
* @param metaContact the <tt>MetaContact</tt> to add in the local vector.
*/
void lightAddMetaContact(MetaContactImpl metaContact)
{
this.childContacts.add(metaContact);
}
/**
* Removes the <tt>metaContact</tt> from the local list of child
* contacts without unsetting its parrent contact and without any
* synchronization. This method is meant for use _PRIMARILY_ by the
* <tt>MetaContact</tt> itself upon chenge in its encapsulated protocol
* specific contacts.
*
* @param metaContact the <tt>MetaContact</tt> to remove from the local
* vector.
*/
void lightRemoveMetaContact(MetaContactImpl metaContact)
{
this.childContacts.remove(metaContact);
}
/**
* Removes the specified <tt>metaContact</tt> from the local list of
* contacts.
* @param metaContact the <tt>MetaContact</tt>
*/
void removeMetaContact(MetaContact metaContact)
void removeMetaContact(MetaContactImpl metaContact)
{
this.childContacts.remove( metaContact );
synchronized (childContacts)
{
metaContact.unsetParentGroup(this);
this.childContacts.remove(metaContact);
}
}
/**
@ -417,7 +473,10 @@ public MetaContactGroup getMetaContactSubgroup(String groupName)
*/
public boolean contains(MetaContact contact)
{
return this.childContacts.contains(contact);
synchronized (childContacts)
{
return this.childContacts.contains(contact);
}
}
/**

@ -16,7 +16,7 @@
* @author Emil Ivov
*/
public class MetaContactImpl
implements MetaContact
implements MetaContact, Comparable
{
/**
* A vector containing all protocol specific contacts merged in this
@ -25,6 +25,12 @@ public class MetaContactImpl
*/
private Vector protoContacts = new Vector();
/**
* The accumulated status index of all proto contacts merged in this
* meta contact.
*/
private int totalStatus = 0;
/**
* An id uniquely identifying the meta contact in this contact list.
*/
@ -35,6 +41,18 @@ public class MetaContactImpl
*/
private String displayName = "";
/**
* A callback to the meta contact group that is currently our parent. If
* this is an orphan meta contact that has not yet been added or has been
* removed from a group this callback is going to be null.
*/
private MetaContactGroupImpl parentGroup = null;
/**
* A sync lock for use when modifying the parentGroup field.
*/
private Object parentGroupModLock = new Object();
MetaContactImpl()
{
//create the uid
@ -155,6 +173,37 @@ public String getMetaUID()
return uid;
}
/**
* Compares this meta contact with the specified object for order. Returns
* a negative integer, zero, or a positive integer as this meta contact is
* less than, equal to, or greater than the specified object.
* <p>
* The result of this method is calculated the following way:
* <p>
* (totalStatus - o.totalStatus) * 1 000 000 <br>
* + getDisplayName().compareTo(o.getDisplayName()) * 100 000
* + getMetaUID().compareTo(o.getMetaUID())<br>
* <p>
* Or in other words ordering of meta accounts would be first done by
* presence status, then display name, and finally (in order to avoid
* equalities) be the farely random meta contact metaUID.
* <p>
* @param o the Object to be compared.
* @return a negative integer, zero, or a positive integer as this object
* is less than, equal to, or greater than the specified object.
*
* @throws ClassCastException if the specified object is not
* a MetaContactListImpl
*/
public int compareTo(Object o)
{
MetaContactImpl target = (MetaContactImpl)o;
return (totalStatus - target.totalStatus) * 1000000
+ getDisplayName().compareTo(target.getDisplayName()) * 100000
+ getMetaUID().compareTo(target.getMetaUID());
}
/**
* Returns a string representation of this contact, containing most of its
* representative details.
@ -193,32 +242,83 @@ void setDisplayName(String displayName)
/**
* Adds the specified protocol specific contact to the list of contacts
* merged in this meta contact.
* merged in this meta contact. The method also keeps up to date the
* totalStatus field which is used in the compareTo() method.
*
* @param contact the protocol specific Contact to add.
*/
void addProtoContact(Contact contact)
{
this.protoContacts.add(contact);
synchronized (parentGroupModLock)
{
if (parentGroup != null)
{
parentGroup.lightRemoveMetaContact(this);
}
this.totalStatus += contact.getPresenceStatus().getStatus();
this.protoContacts.add(contact);
//if this is our firt contact - set the display name too.
if(this.protoContacts.size() == 1)
setDisplayName(contact.getDisplayName());
//if this is our firt contact - set the display name too.
if(this.protoContacts.size() == 1)
setDisplayName(contact.getDisplayName());
if (parentGroup != null)
{
parentGroup.lightAddMetaContact(this);
}
}
}
/**
* Called by MetaContact after a contact has chaned its status, so that the
* totalStatus field remains up to date.
*
* @return returns the reevaluated presence status index of this meta
* contact.
*/
int reevalTotalStatus()
{
int totalStatus = 0;
Iterator protoContacts = this.protoContacts.iterator();
while (protoContacts.hasNext())
totalStatus += ((Contact)protoContacts.next()).getPresenceStatus()
.getStatus();
return totalStatus;
}
/**
* Removes the specified protocol specific contact from the contacts
* encapsulated in this <code>MetaContact</code>
* encapsulated in this <code>MetaContact</code>. The method also updates
* the total status field accordingly. And updates its ordered position
* in its parent group.
*
* @param contact the contact to remove
*
* @return true if this <tt>MetaContact</tt> contained the specified
* contact and false otherwise.
*/
boolean removeProtoContact(Contact contact)
void removeProtoContact(Contact contact)
{
return this.protoContacts.remove(contact);
}
synchronized (parentGroupModLock)
{
if (parentGroup != null)
{
parentGroup.lightRemoveMetaContact(this);
}
totalStatus -= contact.getPresenceStatus().getStatus();
this.protoContacts.remove(contact);
if (parentGroup != null)
{
parentGroup.lightAddMetaContact(this);
}
}
}
/**
* Removes all proto contacts that belong to the specified provider.
@ -247,6 +347,57 @@ boolean removeContactsForProvider(ProtocolProviderService provider)
return modified;
}
/**
* Sets <tt>parentGroup</tt> as a parent of this meta contact. Do not
* call this method with a null argument even if a group is removing
* this contact from itself as this could lead to race conditions (imagine
* another group setting itself as the new parent and you removing it).
* Use unsetParentGroup instead.
*
* @param parentGroup the <tt>MetaContactGroupImpl</tt> that is currently a
* parent of this meta contact.
* @throws NullPointerException if <tt>parentGroup</tt> is null.
*/
void setParentGroup(MetaContactGroupImpl parentGroup)
{
synchronized(parentGroupModLock)
{
if (parentGroup == null)
throw new NullPointerException(
"Do not call this method with a "
+ "null argument even if a group is removing this contact "
+ "from itself as this could lead to race conditions "
+ "(imagine another group setting itself as the new "
+"parent and you removing it). Use unsetParentGroup "
+"instead.");
this.parentGroup = parentGroup;
}
}
/**
* If <tt>parentGroup</tt> was the parent of this meta contact then it
* sets it to null. Call this method when removing this contact from a
* meta contact group.
* @param parentGroup the <tt>MetaContactGroupImpl</tt> that we don't want
* considered as a parent of this contact any more.
*/
void unsetParentGroup(MetaContactGroupImpl parentGroup)
{
synchronized(parentGroupModLock)
{
if (this.parentGroup == parentGroup)
this.parentGroup = null;
}
}
/**
* Returns the group that is currently holding this meta contact.
*
* @return the gorup that is currently holding this meta contact.
*/
MetaContactGroupImpl getParentGroup()
{
return parentGroup;
}
}

@ -447,10 +447,15 @@ private MetaContactGroup findParentMetaContactGroup(
* for.
*
* @return the <tt>MetaContactGroup</tt>
* @throws IllegalArgumentException if <tt>child</tt> is not an instnace of
* MetaContactImpl
*/
public MetaContactGroup findParentMetaContactGroup(MetaContact child)
{
return findParentMetaContactGroup(rootMetaGroup, child);
if (! (child instanceof MetaContactImpl))
throw new IllegalArgumentException(child
+ " is not a MetaContactImpl instance.");
return ((MetaContactImpl)child).getParentGroup();
}
/**
@ -674,11 +679,10 @@ public void moveMetaContact(MetaContact metaContact,
//first remove the meta contact from its current parent:
MetaContactGroupImpl currentParent
= (MetaContactGroupImpl)findParentMetaContactGroup(metaContact);
currentParent.removeMetaContact(metaContact);
fireMetaContactEvent(metaContact, null, currentParent
, MetaContactEvent.META_CONTACT_REMOVED);
currentParent.removeMetaContact((MetaContactImpl)metaContact);
((MetaContactGroupImpl)newMetaGroup).addMetaContact(metaContact);
((MetaContactGroupImpl)newMetaGroup).addMetaContact(
(MetaContactImpl)metaContact);
//first make sure that the new meta contact group path is resolved
//against all protocols that the MetaContact requires. then move
@ -707,7 +711,7 @@ public void moveMetaContact(MetaContact metaContact,
}
fireMetaContactEvent(metaContact, null, newMetaGroup
, MetaContactEvent.META_CONTACT_ADDED);
, MetaContactEvent.META_CONTACT_MOVED);
}
/**
@ -966,10 +970,10 @@ private void synchronizeOpSetWithLocalContactList(
{
ContactGroup rootProtoGroup = presenceOpSet
.getServerStoredContactListRoot();
if(rootProtoGroup != null){
logger.trace("subgroups: "
logger.trace("subgroups: "
+ rootProtoGroup.countSubgroups());
logger.trace("child contacts: "
+ rootProtoGroup.countContacts());
@ -1513,6 +1517,8 @@ private void fireMetaContactEvent(MetaContact source,
l.metaContactAdded(evt);break;
case MetaContactEvent.META_CONTACT_REMOVED:
l.metaContactRemoved(evt);break;
case MetaContactEvent.META_CONTACT_MOVED:
l.metaContactMoved(evt);break;
case MetaContactEvent.PROTO_CONTACT_REMOVED:
case MetaContactEvent.PROTO_CONTACT_ADDED:
case MetaContactEvent.PROTO_CONTACT_MOVED:

@ -56,7 +56,7 @@ public ContactList(MetaContactListService contactList){
this.putClientProperty("JTree.lineStyle", "None");
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
this.addKeyListener(new CListKeySearchListener(this));
}
@ -80,7 +80,7 @@ public void addContact(MetaContactNode contact) {
this.listModel.addElement(contact);
}
/**
* Adds a child to a given parent.
*
@ -121,8 +121,20 @@ public void metaContactAdded(MetaContactEvent evt) {
* Indicates that a MetaContact has been removed from
* the MetaContactList.
*/
public void metaContactRemoved(MetaContactEvent evt) {
public void metaContactRemoved(MetaContactEvent evt)
{
/**@todo implement metaContactRemoved() */
System.out.println("@todo implement metaContactRemoved()");
}
/**
* Indicates that a MetaContact has been moved inside the MetaContact list.
* @param evt the MetaContactListEvent containing the corresponding contact
*/
public void metaContactMoved(MetaContactEvent evt)
{
/**@todo implement metaContactMoved() */
System.out.println("@todo implement metaContactMoved()");
}
/**
@ -165,12 +177,12 @@ public void metaContactModified(MetaContactEvent evt)
/**@todo implement metaContactModified() */
System.out.println("@todo implement metaContactModified()");
}
/**
* Indicates that a MetaContactGroup has been removed.
*/
public void metaContactGroupRemoved(MetaContactGroupEvent evt) {
}
}

@ -33,26 +33,29 @@ public class MetaContactEvent
*/
public static final int META_CONTACT_REMOVED = 2;
/**
* Indicates that the MetaContactEvent instance was triggered by moving
* an existing MetaContact.
*/
public static final int META_CONTACT_MOVED = 3;
/**
* Indicates that the MetaContactEvent instance was triggered by the
* removal of a protocol specific contact from an existing MetaContact.
*/
public static final int PROTO_CONTACT_REMOVED = 3;
public static final int PROTO_CONTACT_REMOVED = 4;
/**
* Indicates that the MetaContactEvent instance was triggered by the
* a protocol specific contact to a new MetaContact parent.
*/
public static final int PROTO_CONTACT_ADDED = 4;
public static final int PROTO_CONTACT_ADDED = 5;
/**
* Indicates that the MetaContactEvent instance was triggered by moving
* addition of a protocol specific contact to an existing MetaContact.
*/
public static final int PROTO_CONTACT_MOVED = 5;
public static final int PROTO_CONTACT_MOVED = 6;
private ProtocolProviderService sourceProvider = null;
private MetaContactGroup parentGroup = null;

@ -40,6 +40,13 @@ public interface MetaContactListListener
*/
public void metaContactRemoved(MetaContactEvent evt);
/**
* Indicates that a MetaContact has been moved inside the MetaContact list.
* @param evt the MetaContactListEvent containing the corresponding contact
*/
public void metaContactMoved(MetaContactEvent evt);
/**
* Indicates that a MetaContactGroup has been successfully added
* to the MetaContact list.

@ -265,7 +265,6 @@ public void testFindMetaContactByMetaUID()
assertEquals("find failed for contact "+expectedContact.getDisplayName()
, expectedContact, actualResult);
}
/**
@ -633,8 +632,8 @@ public void testAddMoveRemoveContactToMetaContact()
.getContact(newContactID));
//verify that events have been properly delivered.
assertTrue("No events delivered while adding a new contact to a "
+"meta contact", evtCollector.collectedEvents.size() == 1);
assertEquals("Events delivered while adding a new contact to a "
+ "meta contact", 1, evtCollector.collectedEvents.size());
MetaContactEvent event = (MetaContactEvent)evtCollector
.collectedEvents.get(0);
@ -674,8 +673,8 @@ public void testAddMoveRemoveContactToMetaContact()
assertNotNull("newContact", newContact);
//verify that events have been properly delivered.
assertTrue("No events delivered while adding a moving a proto contact. "
, evtCollector.collectedEvents.size() == 1);
assertEquals("Events delivered while adding a moving a proto contact. "
, 1, evtCollector.collectedEvents.size());
event = (MetaContactEvent) evtCollector.collectedEvents.get(0);
evtCollector.collectedEvents.clear();
@ -709,8 +708,8 @@ public void testAddMoveRemoveContactToMetaContact()
.getContact(newContactID));
//verify that events have been properly delivered.
assertTrue("No events delivered while adding a new contact to a "
+"meta contact", evtCollector.collectedEvents.size() == 1);
assertEquals("Events delivered while adding a new contact to a "
+"meta contact", 1, evtCollector.collectedEvents.size());
event = (MetaContactEvent)evtCollector
.collectedEvents.get(0);
@ -738,12 +737,17 @@ public void testCreateMoveRemoveMetaContact()
MetaContactGroup parentMetaGroup = fixture.metaClService.getRoot()
.getMetaContactSubgroup(MetaContactListServiceLick.topLevelGroupName);
MclEventCollector evtCollector = new MclEventCollector();
fixture.metaClService.addContactListListener(evtCollector);
//create a new metacontact and, hence mock contact, in the meta
//"SomePeople" non-toplevel group
fixture.metaClService.createMetaContact(fixture.mockProvider
, parentMetaGroup
, newContactID);
fixture.metaClService.removeContactListListener(evtCollector);
//check that the contact has been successfully created in the meta cl
MetaContact newMetaContact =
parentMetaGroup.getMetaContact(fixture.mockProvider, newContactID);
@ -755,10 +759,32 @@ public void testCreateMoveRemoveMetaContact()
assertEquals("create() created a meta contact with the wrong name."
, newContactID, newMetaContact.getDisplayName());
//verify that events have been properly delivered.
assertEquals("Events delivered while creating a new meta contact"
, 1, evtCollector.collectedEvents.size());
MetaContactEvent event = (MetaContactEvent)evtCollector
.collectedEvents.get(0);
evtCollector.collectedEvents.clear();
assertSame ( "Source contact in MetaContactEvent gen. upon create."
, newMetaContact, event.getSourceContact());
assertSame ( "Source provider in MetaContactEvent gen. upon create."
, fixture.mockProvider, event.getSourceProvider());
assertEquals ( "Event ID in MetaContactEvent gen. upon create."
, MetaContactEvent.META_CONTACT_ADDED
, event.getEventID());
//move the meta contact somewhere else
fixture.metaClService.addContactListListener(evtCollector);
fixture.metaClService.moveMetaContact(
newMetaContact, fixture.metaClService.getRoot());
fixture.metaClService.removeContactListListener(evtCollector);
//check that the meta contact has moved.
assertNull(newMetaContact.getDisplayName()
+ " was still in its old location after moving it."
@ -785,9 +811,28 @@ public void testCreateMoveRemoveMetaContact()
,opSetPersPresence.getServerStoredContactListRoot()
.getContact(newContactID));
//verify that events have been properly delivered.
assertEquals("Events delivered while moving a meta contact"
, 1, evtCollector.collectedEvents.size());
event = (MetaContactEvent)evtCollector
.collectedEvents.get(0);
evtCollector.collectedEvents.clear();
assertSame ( "Source contact in MetaContactEvent gen. upon move."
, newMetaContact, event.getSourceContact());
assertEquals ( "Event ID in MetaContactEvent gen. upon move."
, MetaContactEvent.META_CONTACT_MOVED
, event.getEventID());
//remove the contact
fixture.metaClService.addContactListListener(evtCollector);
fixture.metaClService.removeMetaContact(newMetaContact);
fixture.metaClService.removeContactListListener(evtCollector);
//check that the meta contact has been removed.
assertNull(newMetaContact.getDisplayName()
+ " was still in its old location after it was removed."
@ -802,6 +847,24 @@ public void testCreateMoveRemoveMetaContact()
,opSetPersPresence.getServerStoredContactListRoot()
.getContact(newContactID));
//verify that events have been properly delivered.
assertEquals("Events delivered while removing a meta contact"
, 1, evtCollector.collectedEvents.size());
event = (MetaContactEvent)evtCollector
.collectedEvents.get(0);
evtCollector.collectedEvents.clear();
assertSame ( "Source contact in MetaContactEvent gen. upon remove."
, newMetaContact, event.getSourceContact());
assertSame ( "Source provider in MetaContactEvent gen. upon remove."
, fixture.mockProvider, event.getSourceProvider());
assertEquals ( "Event ID in MetaContactEvent gen. upon remove."
, MetaContactEvent.META_CONTACT_REMOVED
, event.getEventID());
}
/**
@ -996,6 +1059,18 @@ public void metaContactRemoved(MetaContactEvent evt)
collectedEvents.add(evt);
}
/**
* Indicates that a MetaContact has been moved inside the MetaContact
* list.
* @param evt the MetaContactListEvent containing the corresponding
* contact
*/
public void metaContactMoved(MetaContactEvent evt)
{
collectedEvents.add(evt);
}
/**
* Indicates that a MetaContact has been modified.
* @param evt the MetaContactListEvent containing the corresponding

Loading…
Cancel
Save